Реализация 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). Стоимость рассчитывается индивидуально.







