Реалізація AI-оптимізації енергоспоживання IoT-пристроїв у мобільному додатку
Розумний дім або промисловий об'єкт з десятками IoT-пристроїв спожває ровно стільки, скільки ними керують. Без оптимізації: кондиціонер працює в порожній кімнаті, насос утримує тиск вночі коли нема споживачів, групи освітлення не гаснуть за розписанням. AI-оптимізація — це автоматичне керування розписаннями та уставками на основі даних про споживання, присутність та тарифи.
Збір даних: розумні лічильники та датчики потужності
Для оптимізації потрібна точна картина споживання — не «N кВтч за місяць» з платіжки, а розбивка по пристроям та часу доби.
Розумні розетки та реле. Sonoff POWR316 (16А), Shelly EM, Tuya Power Monitoring Plug — вимірюють активну/реактивну потужність кожного підключеного пристрою. Протоколи: MQTT (Sonoff через Tasmota/SonoffDIY), HTTP REST (Shelly), Tuya Cloud API. Дані в мобільний додаток — через агрегуючий бекенд.
Токові трансформатори (SCT-013, PZEM-004T) на вводному кабелі або окремих лініях — для промислового застосування. Дані читає ESP32 через АЦП, публікує в MQTT.
// Android: підписка на дані потужності через MQTT
data class PowerReading(
val deviceId: String,
val activePower: Double, // Вт
val reactivePower: Double, // ВАр
val voltage: Double, // В
val current: Double, // А
val energy: Double, // кВтч, накопичений лічильник
val timestamp: Long
)
class EnergyMonitorRepository {
fun observeDevicePower(deviceId: String): Flow<PowerReading> = channelFlow {
mqttClient.subscribe("devices/$deviceId/power", qos = 1) { _, msg ->
val reading = Json.decodeFromString<PowerReading>(String(msg.payload))
trySend(reading)
}
awaitClose { mqttClient.unsubscribe("devices/$deviceId/power") }
}
}
AI-аналіз паттернів споживання
Модель на сервері аналізує історичні дані й будує профіль споживання кожного пристрою. Алгоритм: кластеризація часових рядів (K-Means на MFCC-подібних ознаках або DTW distance) — виявляє типові паттерни «робочий день», «вихідний», «пусто дома».
LSTM-модель прогнозує споживання на наступні 24/48 годин. Вхідні ознаки: 7 днів історії споживання, день тижня, година доби, зовнішня температура (OpenWeatherMap API), інформація про присутність людей (Wi-Fi probe requests або motion sensor).
# Сервер: підготовка ознак для прогнозу споживання
def build_features(device_id: str, horizon_hours: int = 24) -> pd.DataFrame:
history = get_power_history(device_id, days=7)
weather = get_weather_forecast(hours=horizon_hours)
df = pd.DataFrame({
'hour_sin': np.sin(2 * np.pi * history.hour / 24),
'hour_cos': np.cos(2 * np.pi * history.hour / 24),
'dow_sin': np.sin(2 * np.pi * history.dayofweek / 7),
'dow_cos': np.cos(2 * np.pi * history.dayofweek / 7),
'temp_outdoor': weather.temperature,
'power_lag_1h': history.power.shift(1),
'power_lag_24h': history.power.shift(24),
'power_lag_168h': history.power.shift(168), # тиждень назад
})
return df
Рекомендації та автосценарії
Мобільний додаток показує не тільки споживання, але й конкретні рекомендації:
- «Кондиціонер працював 3 години в кімнаті без присутності. Створити автоматизацію: вимикати через 15 хвилин після виходу?»
- «Стиральна машина запускається в 18:00–20:00 — пиковий тариф. Перенос на 23:00 заощадить X гривень/місяць»
- «Електробойлер займає 40% нічного споживання. Оптимальне розписання: нагрів з 01:00 до 05:00 по нічному тарифу»
Рекомендація → підтвердження користувача → створення автосценарію. Сценарій виконується на бекенді (Node-RED, Home Assistant automations через API) або прямою командою на пристрій через MQTT.
// iOS: створення розписання пристрою
struct DeviceSchedule: Codable {
let deviceId: String
let actions: [ScheduledAction]
}
struct ScheduledAction: Codable {
let cronExpression: String // "0 1 * * *" — щодня в 01:00
let command: DeviceCommand // ON, OFF, SET_TEMPERATURE, SET_MODE
let payload: [String: AnyCodable]?
let tariffProfile: String? // "night" — активно тільки якщо діє нічний тариф
let conditions: [ScheduleCondition]? // presence_detected: false
}
Тарифні розрахунки та економія
Двотарифні та багатотарифні лічильники — дані з API енергозбутової компанії або ручна настройка тарифної сітки в додатку. Розрахунок вартості споживання у реальному часі: поточний тариф × потужність = вартість за хвилину.
Графік споживання з накладеною тарифною сіткою — візуалізація на React Native + Victory Native або нативний MPAndroidChart/Swift Charts. Користувач одразу бачить, скільки коштує «горб» споживання у вечірні години.
Розробка AI-модуля оптимізації енергоспоживання для мобільного IoT-додатку: 6–10 тижнів (ML-моделі + мобільний клієнт + API). Стоимість розраховується індивідуально.







