Реалізація AI-управління климатом розумного дому (навчання привичкам) у мобільному додатку
Термостат Nest змінив очікування користувачів розумного дому: система климату повинна навчатися привичкам та налаштовуватися сама. Звичайний розумний термостат з розписанням вимагає ручної настройки та не адаптується. Система з навчанням спостерігає за поведінкою користувача кілька тижнів і будує предиктивну модель: коли людина встає, коли приходить додому, коли лягає спати, яку температуру переважає вранці проти вечора.
Збір контекстних даних
Навчання привичкам вимагає кількох потоків введення:
Присутність у дома. Wi-Fi presence detection — аналіз активних MAC-адрес у мережі (таблиця ARP роутера через SSH або SNMP) без GPS. Працює надійніше геозон при нестабільному GPS у квартирі. Пасивне Bluetooth сканування на мобільному — як вспомогательний сигнал.
Ручні корективи. Кожен раз коли користувач вручну змінює температуру в додатку — це навчальний сигнал. «У 22:30 у п'ятницю користувач знизив температуру з 22°C на 20°C» — значимий паттерн.
Зовнішні умови. Температура на вулиці (OpenWeatherMap або датчик на фасаді), хмарність, вітер — впливають на теплопотері дому та на бажану внутрішню температуру.
@Entity(tableName = "climate_events")
data class ClimateEvent(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val timestamp: Long,
val eventType: EventType, // MANUAL_ADJUST, AUTO_SETPOINT, PRESENCE_DETECTED, PRESENCE_GONE
val roomId: String,
val setTemperature: Float?,
val actualTemperature: Float,
val outdoorTemperature: Float,
val hour: Int, // 0-23
val dayOfWeek: Int, // 1=Mon
val isWeekend: Boolean,
val presenceCount: Int, // пристроїв у мережі
)
Модель прогнозування комфортної температури
Після накопичення 2–3 тижнів даних — навчання моделі. Для цієї задачі добре працює проста модель, а не складна нейросеть: Gradient Boosting (LightGBM) або Random Forest на ознаках {hour, dayOfWeek, isWeekend, outdoorTemp, presenceCount}.
# Сервер: навчання персональної моделі комфортної температури
import lightgbm as lgb
from sklearn.model_selection import TimeSeriesSplit
def train_comfort_model(user_id: str) -> lgb.Booster:
events = load_manual_adjustments(user_id, days=30)
features = pd.DataFrame({
'hour_sin': np.sin(2 * np.pi * events.hour / 24),
'hour_cos': np.cos(2 * np.pi * events.hour / 24),
'dow': events.day_of_week,
'is_weekend': events.is_weekend.astype(int),
'outdoor_temp': events.outdoor_temperature,
'presence': events.presence_count,
})
target = events.set_temperature
model = lgb.LGBMRegressor(n_estimators=100, learning_rate=0.05, max_depth=4)
tscv = TimeSeriesSplit(n_splits=5)
# cross-val для оцінки якості...
model.fit(features, target)
return model
Модель експортується в ONNX або TFLite, завантажується в мобільний додаток. Прогноз на наступні 24 години — масив уставок температури по годинах. Застосовується автоматично або вимагає підтвердження користувача (налаштування).
Керування климатичним обладнанням
Мобільний додаток керує обладнанням через кілька рівнів:
Локальні термостати з API. Nest Thermostat — Google Smart Device Management API. Ecobee — ecobee3 API. Heatmiser — Modbus TCP або хаб. Tado — REST API. У кожного своя авторизація (OAuth2 або API key) та лімити запросів.
MQTT-контролери. Термостат на ESP32 з прошивкою ESPHome: керується через MQTT home/thermostat/setpoint. Здесь мобільний додаток пише безпосередньо або через Home Assistant REST API.
// iOS: відправка уставки термостата через Home Assistant
class ClimateController {
private let haBaseURL: String
private let bearerToken: String
func setTemperature(entityId: String, temperature: Double) async throws {
let url = URL(string: "\(haBaseURL)/api/services/climate/set_temperature")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer \(bearerToken)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try JSONEncoder().encode([
"entity_id": entityId,
"temperature": temperature
])
let (_, response) = try await URLSession.shared.data(for: request)
guard (response as? HTTPURLResponse)?.statusCode == 200 else {
throw ClimateError.setpointFailed
}
}
}
Адаптація моделі та керування автоматизацією
Модель дообучається щорічно з переобученням на свіжих даних та затуханням старих (seasonal drift: літні та зимові переваги відрізняються). Якщо користувач кілька разів поспіль коригує автоматичну уставку — додаток пропонує переобучити модель одразу.
Зони довіри: користувач може дозволити автоматичне застосування уставок тільки в рамках допустимого діапазону — наприклад, «автоматично, але не нижче 18°C та не вище 24°C». Вихід за діапазон — запит підтвердження через сповіщення.
Мультирумний климат: окремої моделі для кожної кімнати, різні паттерни (спальня vs гостинна vs дитячої). Синхронізація моделей — на сервері, мобільний додаток отримує єдиний набір прогнозів через REST.
Розробка AI-модуля навчання климатичним привичкам для мобільного додатку розумного дому: 8–12 тижнів. З багатозонною підтримкою та інтеграцією кількох виробників термостатів: 4–5 місяців. Стоимість розраховується індивідуально.







