SCN-ENERGY-001: Отключение розеток в режиме 'Away' или 'Night'
Введение: Концепция и цели сценария 'SCN-ENERGY-001'
Сценарий `SCN-ENERGY-001` является одним из ключевых элементов в построении по-настоящему энергоэффективной системы автоматизации. Его основная задача — бороться с так называемыми фантомными нагрузками (также известными как "режим ожидания" или standby power). Это электроэнергия, потребляемая устройствами, которые не выполняют свою основную функцию, но остаются подключенными к сети: телевизоры, игровые консоли, зарядные устройства, аудиосистемы и офисная техника.
> 💡 Подсказка: Знаете ли вы, что устройства в режиме ожидания могут потреблять до 10% от общего счета за электроэнергию в доме? Этот сценарий напрямую борется с "фантомными" нагрузками, обеспечивая реальную экономию без ущерба для комфорта.
Роль данного сценария в общей стратегии энергосбережения заключается в централизованном и автоматическом отключении всех несущественных нагрузок, когда в их использовании нет очевидной необходимости. Такими моментами являются активированные глобальные режимы системы, такие как «Никого нет дома» (`Away`) или «Ночь» (`Night`).
Основными целями сценария являются:
Для успешной реализации этого сценария необходимо выполнить одно важное предварительное требование: в вашей системе уже должен быть настроен и функционировать механизм глобальных состояний (режимов). Как правило, это реализуется с помощью конечного автомата (FSM), который управляет общим состоянием объекта (`Home`, `Away`, `Night`, `Vacation`) и публикует текущий режим в стандартизованный MQTT-топик. Этот механизм был подробно рассмотрен в предыдущих курсах нашей академии.
> 🔗 Связанный материал: Основы работы с глобальными режимами и состоянием системы подробно изложены в уроке `COURSE-07-M01-L01: Глобальные переменные и режимы`.
---
Архитектура решения: MQTT-топики и группировка устройств
В основе надежного и масштабируемого сценария лежит продуманная архитектура обмена сообщениями. В экосистеме платформы HI стандартом для этого является протокол MQTT. Для сценария `SCN-ENERGY-001` нам потребуется определить две ключевые группы топиков: для состояний и для управления.
Проектирование MQTT-топиков
1. Топик глобального состояния (Единый источник правды)Система должна иметь один, и только один, источник информации о текущем режиме работы объекта. Это предотвращает рассинхронизацию и конфликты в логике.
- Топик: `hi/state/mode`
- Описание: В этот топик публикуется текущий глобальный режим системы. На него подписываются все сценарии, чья логика зависит от состояния дома.
- Формат сообщения: Простое строковое значение, отражающее режим. Сообщение должно быть опубликовано с флагом `retain: true`, чтобы новые подключившиеся клиенты сразу получали актуальное состояние.
Примеры `payload` для топика `hi/state/mode`:
- `"Home"`
- `"Away"`
- `"Night"`
- `"Vacation"`
Управлять каждой розеткой по отдельности в рамках этого сценария неэффективно. Гораздо правильнее ввести концепцию группового управления. Мы определяем группы розеток (например, «несущественные розетки гостиной», «розетки кабинета») и отправляем одну команду для всей группы.
- Топик: `hi/devices/group_sockets/
/set` (например, `hi/devices/group_sockets/living_room/set`) - Описание: Команда, отправленная в этот топик, должна приводить к изменению состояния всех розеток, входящих в группу `
`. - Формат сообщения: Простое строковое значение `"ON"` или `"OFF"`.
Для более сложных систем рекомендуется использовать JSON-объект, содержащий дополнительную информацию, что соответствует паттерну "Контракт сообщения":
{
"command": "OFF",
"source": "SCN-ENERGY-001",
"reason": "Away mode activated",
"ts": 1678886400000
}
Такая структура значительно упрощает отладку и журналирование.
Концепция "тегирования" и группировки
Как система узнает, какие именно розетки входят, например, в группу `living_room`? Существует несколько подходов:
| Подход | Описание | Преимущества | Недостатки |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | --------------------------------------------------------- |
| Физическая привязка | Группа розеток подключена к одному автомату или контактору в щите. Управляется одно реле. | Простота, надежность. | Низкая гибкость (нельзя отключить одну розетку из группы). |
| Статическая логика | В коде Node-RED (например, в узле `Function`) жестко прописан список топиков индивидуальных розеток для каждой группы. | Гибкость, не требует изменений в проводке. | Сложность в поддержке при добавлении/удалении розеток. |
| Динамическая подписка| Отдельный поток-драйвер подписывается на групповой топик и, получив команду, рассылает ее индивидуальным розеткам из списка. | Высокая гибкость, централизованное управление. | Требует более сложной архитектуры. |
Для нашего урока мы будем использовать гибридный подход: сценарий будет отправлять команду на отключение в один или несколько групповых топиков, а отдельные, более простые потоки, будут обрабатывать эти групповые команды, транслируя их на физические реле.
> 🔗 Связанный материал: Принципы работы с MQTT, структура топиков и флаг `retain` детально разобраны в уроке `COURSE-04-M02-L05: Основы работы с MQTT в Node-RED`.
---
Реализация в Node-RED: Отслеживание режимов и отправка команд
Теперь перейдем к практической реализации логики в среде Node-RED на контроллере HI. Наша задача — создать поток, который будет слушать изменения глобального режима и отправлять команду на отключение несущественных розеток.
Пошаговая сборка потока
Шаг 1: Подписка на топик глобального режимаДобавьте на холст узел `mqtt in`. Он будет нашей точкой входа.
- Server: Выберите ваш настроенный MQTT-брокер.
- Action: `Subscribe to a topic`.
- Topic: `hi/state/mode`
- QoS: `2` (для гарантированной доставки).
- Name: `Listen: Global Mode`
Нам нужно реагировать только на режимы `Away` и `Night`. Для этого идеально подходит узел `switch`. Соедините выход узла `mqtt in` с его входом.
- Property: `msg.payload`
- Rules:
2. `==` (string) `Night`
- Checking: `all rules`, чтобы на выходе было одно сообщение при совпадении с любым из правил.
- Outputs: Узел будет иметь один выход, который сработает, если придет `"Away"` или `"Night"`.
- Name: `Filter: Away/Night`
После того как мы отфильтровали нужный режим, необходимо отправить команду на отключение. Мы можем сделать это для нескольких групп розеток одновременно.
Используем последовательность из узлов `change` и `mqtt out` для каждой группы.
Для группы розеток гостиной:* Rules:
* `Set` `msg.payload` `to` (string) `OFF`
* `Set` `msg.topic` `to` (string) `hi/devices/group_sockets/living_room/set`
* Name: `Prepare Cmd: Living Room OFF`
* Server: Выберите ваш MQTT-брокер.
* Topic: Оставьте пустым (будет использоваться `msg.topic`).
* QoS: `1`
* Name: `Send Cmd: Living Room`
Для группы розеток кабинета:* Rules:
* `Set` `msg.payload` `to` (string) `OFF`
* `Set` `msg.topic` `to` (string) `hi/devices/group_sockets/office/set`
* Name: `Prepare Cmd: Office OFF`
* Name: `Send Cmd: Office`
Соедините выход узла `switch` с входами обоих узлов `change`.
Схема потока
+--------------------+ +--------------------+
[mqtt in]----->| switch |---->| change |----->[mqtt out]
hi/state/mode | Filter: Away/Night | | | Prepare Cmd: | Send Cmd:
+--------------------+ | | Living Room OFF | Living Room
| +--------------------+
|
| +--------------------+
+->| change |----->[mqtt out]
| Prepare Cmd: | Send Cmd:
| Office OFF | Office
+--------------------+
Важное дополнение: включение розеток
Этот поток только отключает розетки. Необходимо создать симметричный поток, который будет включать их при возвращении в режим `Home`. Логика будет идентичной, за исключением:
- Узел `switch` будет фильтровать `msg.payload == "Home"`.
- Узлы `change` будут устанавливать `msg.payload` в `ON`.
Это гарантирует, что система вернется в рабочее состояние автоматически.
---
Управление исключениями: 'Неотключаемые' розетки
Автоматическое отключение всех розеток подряд — путь к катастрофе. Представьте, что система в ваше отсутствие отключила холодильник, домашний сервер (NAS) или Wi-Fi роутер. Поэтому критически важным элементом этого сценария является механизм 'белого списка' (whitelist) — перечня устройств, которые никогда не должны отключаться автоматически.
> ⚠️ Внимание: Неправильная настройка логики отключения может привести к обесточиванию критически важного оборудования. Всегда тщательно продумывайте и тестируйте список исключений.
Более гибкий и безопасный подход, по сравнению с управлением целыми группами, заключается в использовании узла `function` для индивидуальной проверки каждой розетки по списку исключений. Этот метод позволяет централизовать всю логику, включая списки розеток и 'белый список', в одном месте, что значительно упрощает поддержку и масштабирование системы.
> 🔗 Связанный материал: Детальная реализация этого продвинутого подхода с использованием узла `function` и 'белых списков' является основной темой урока `COURSE-07-M02-L04: Продвинутое управление нагрузками с использованием whitelists`.
---
Итоги и следующие шаги
В этом уроке мы разработали и реализовали один из самых полезных сценариев для умного дома — `SCN-ENERGY-001`, отвечающий за автоматическое отключение несущественных розеток.
Мы рассмотрели полный цикл его создания:
Ключевые преимущества реализованного сценария:
- Автономность: Система самостоятельно заботится об энергосбережении.
- Экономическая выгода: Снижение счетов за электроэнергию.
- Безопасность: Снижение риска возгорания от оставленных без присмотра электроприборов.
- Централизация: Управление множеством устройств происходит на основе одного главного события — смены режима.
Возможности для расширения
Созданный нами поток — это прочная основа, которую можно и нужно развивать:
- Уведомления: Добавить в конец потока узел для отправки push-уведомления или сообщения в Telegram: "Режим 'Никого нет дома' активирован. Отключено 12 несущественных розеток".
- Сценарий возврата: Создать дубликат потока, который будет реагировать на режим `Home` и отправлять команду `ON` тем же розеткам (кроме тех, которые пользователь мог выключить вручную).
- Интеграция с whitelist: Реализовать продвинутый механизм исключений, рассмотренный в уроке `COURSE-07-M02-L04`, и вынести управление 'белым списком' в пользовательский интерфейс.
- Задержка перед отключением: Перед отключением розеток в режиме `Night` можно добавить задержку в 15-30 минут. Это даст время членам семьи, которые ложатся спать позже, досмотреть фильм или дочитать книгу.
Что дальше?
Освоив принципы управления нагрузками на основе состояний, вы готовы к более сложным сценариям энергоменеджмента. В следующих уроках мы рассмотрим, как интегрировать данные со счетчиков электроэнергии, управлять нагрузками в зависимости от времени суток и тарифов на электроэнергию, а также строить комплексные панели мониторинга энергопотребления вашего объекта.