ГлавнаяАкадемияСценарии умного дома: режимы, состояния, приоритеты → SCN-ENERGY-001: Отключение розеток в режиме 'Away' или 'Night'

SCN-ENERGY-001: Отключение розеток в режиме 'Away' или 'Night'

Урок 3 · Сценарии умного дома: режимы, состояния, приоритеты · 30 мин · theory

Введение: Концепция и цели сценария '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. Топик глобального состояния (Единый источник правды)

    Система должна иметь один, и только один, источник информации о текущем режиме работы объекта. Это предотвращает рассинхронизацию и конфликты в логике.

    Примеры `payload` для топика `hi/state/mode`:

    2. Топики управления группами устройств

    Управлять каждой розеткой по отдельности в рамках этого сценария неэффективно. Гораздо правильнее ввести концепцию группового управления. Мы определяем группы розеток (например, «несущественные розетки гостиной», «розетки кабинета») и отправляем одну команду для всей группы.

    Для более сложных систем рекомендуется использовать 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`. Он будет нашей точкой входа.

    Шаг 2: Фильтрация нужных режимов

    Нам нужно реагировать только на режимы `Away` и `Night`. Для этого идеально подходит узел `switch`. Соедините выход узла `mqtt in` с его входом.

    1. `==` (string) `Away`

    2. `==` (string) `Night`

    Шаг 3: Формирование и отправка команды отключения

    После того как мы отфильтровали нужный режим, необходимо отправить команду на отключение. Мы можем сделать это для нескольких групп розеток одновременно.

    Используем последовательность из узлов `change` и `mqtt out` для каждой группы.

    Для группы розеток гостиной:
  • Добавьте узел `change`.
  • * 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`

  • Соедините его выход с узлом `mqtt out`.
  • * Server: Выберите ваш MQTT-брокер.

    * Topic: Оставьте пустым (будет использоваться `msg.topic`).

    * QoS: `1`

    * Name: `Send Cmd: Living Room`

    Для группы розеток кабинета:
  • Аналогично добавьте еще один узел `change`.
  • * Rules:

    * `Set` `msg.payload` `to` (string) `OFF`

    * `Set` `msg.topic` `to` (string) `hi/devices/group_sockets/office/set`

    * Name: `Prepare Cmd: Office OFF`

  • Соедините его с отдельным узлом `mqtt out`.
  • * 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`. Логика будет идентичной, за исключением:

    Это гарантирует, что система вернется в рабочее состояние автоматически.

    ---

    Управление исключениями: 'Неотключаемые' розетки

    Автоматическое отключение всех розеток подряд — путь к катастрофе. Представьте, что система в ваше отсутствие отключила холодильник, домашний сервер (NAS) или Wi-Fi роутер. Поэтому критически важным элементом этого сценария является механизм 'белого списка' (whitelist) — перечня устройств, которые никогда не должны отключаться автоматически.

    > ⚠️ Внимание: Неправильная настройка логики отключения может привести к обесточиванию критически важного оборудования. Всегда тщательно продумывайте и тестируйте список исключений.

    Более гибкий и безопасный подход, по сравнению с управлением целыми группами, заключается в использовании узла `function` для индивидуальной проверки каждой розетки по списку исключений. Этот метод позволяет централизовать всю логику, включая списки розеток и 'белый список', в одном месте, что значительно упрощает поддержку и масштабирование системы.

    > 🔗 Связанный материал: Детальная реализация этого продвинутого подхода с использованием узла `function` и 'белых списков' является основной темой урока `COURSE-07-M02-L04: Продвинутое управление нагрузками с использованием whitelists`.

    ---

    Итоги и следующие шаги

    В этом уроке мы разработали и реализовали один из самых полезных сценариев для умного дома — `SCN-ENERGY-001`, отвечающий за автоматическое отключение несущественных розеток.

    Мы рассмотрели полный цикл его создания:

  • Сформулировали цели: экономия энергии и повышение безопасности за счет борьбы с "фантомными нагрузками".
  • Спроектировали архитектуру: определили структуру MQTT-топиков для глобальных режимов (`hi/state/mode`) и управления устройствами.
  • Реализовали логику в Node-RED: создали поток, который реагирует на смену режимов на `Away` и `Night`.
  • Обозначили важность безопасности: рассмотрели концепцию "белого списка" (`whitelist`) для предотвращения отключения жизненно необходимого оборудования и указали, где найти детальную реализацию.
  • Ключевые преимущества реализованного сценария:

    Возможности для расширения

    Созданный нами поток — это прочная основа, которую можно и нужно развивать:

    Что дальше?

    Освоив принципы управления нагрузками на основе состояний, вы готовы к более сложным сценариям энергоменеджмента. В следующих уроках мы рассмотрим, как интегрировать данные со счетчиков электроэнергии, управлять нагрузками в зависимости от времени суток и тарифов на электроэнергию, а также строить комплексные панели мониторинга энергопотребления вашего объекта.