ГлавнаяАкадемияCOURSE-16: Основы Интернета Вещей и практическое применение → IoT в умном доме: от концепции к практической реализации на платформе HI

IoT в умном доме: от концепции к практической реализации на платформе HI

Урок · COURSE-16: Основы Интернета Вещей и практическое применение · theory

COURSE-16-M05-L01 — IoT в умном доме: от концепции к практической реализации на платформе HI

Введение в архитектуру умного дома на платформе HI

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

В экосистеме HI центральным элементом, или «мозгом» умного дома, выступает контроллер HI. В отличие от облачных решений, он обеспечивает локальную обработку всех данных и сценариев, что гарантирует высокую скорость реакции, надежность и конфиденциальность. Контроллер на базе Debian и Node-RED становится единой точкой интеграции для всех устройств и протоколов на объекте.

Основные компоненты умного дома в экосистеме HI

Для инженера автоматизации важно понимать, как абстрактные компоненты умного дома реализуются на конкретном оборудовании.

* Программная среда: Node-RED используется для визуального программирования сценариев (потоков/flows).

* Надежность: Критически важные сценарии (например, защита от протечек) могут быть реализованы на уровне ПЛК с детерминированным исполнением и сохранением логики в энергонезависимой памяти (EEPROM).

* Хранение данных: Встроенная база данных MySQL используется для ведения журналов событий (audit log), хранения исторических данных с датчиков и сохранения состояний устройств между перезагрузками.

* Проводные датчики: Подключаются напрямую к 22 универсальным входам контроллера.

* Датчики температуры DS18B20 (шина 1-Wire).

* Датчики движения, герконы, кнопки (режим «сухой контакт»).

* Датчики протечки, уровня CO2, давления (аналоговые входы 0-10В).

* Шинные устройства: Подключаются по промышленным протоколам.

* Метеостанции, счетчики электроэнергии, модули в/в (RS-485 Modbus).

* Датчики присутствия, комнатные панели (CAN).

* Беспроводные датчики: Интегрируются через соответствующие шлюзы.

* Датчики открытия, температуры, влажности (Zigbee, LoRaWAN).

* Прямое управление: 22 встроенных реле используются для коммутации нагрузок до 16А.

* Группы освещения (вкл/выкл).

* Розеточные группы.

* Приводы штор, ворот.

* Клапаны на радиаторах отопления или в системе водоснабжения.

* Шинное управление:

* Диммирование и управление цветом светильников (DALI).

* Управление скоростью вентиляторов, кондиционерами через шлюзы (Modbus).

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

Практические сценарии автоматизации на платформе HI

Рассмотрим реализацию типовых сценариев умного дома с использованием контроллера HI, демонстрируя применение стандартов Академии.

Сценарий 1: Адаптивное освещение в гостиной

Задача: Реализовать управление основной группой света с настенного выключателя (кнопочного типа). Одно короткое нажатие — вкл/выкл. Длинное нажатие — плавное изменение яркости (если светильник диммируемый). * Контроллер HI.

* Универсальный вход `UI-05` для подключения кнопки.

* Релейный выход `RL-01` для недиммируемого света ИЛИ шина DALI для диммируемого светильника.

    //========= WIRING-LIGHT-021: Living Room Switch & Light =========

// Dry Contact Input (Wall Switch)

(Wall_Switch_Btn) [CTRL:HI-Core]

COM ----------------- GND (на UI-блоке)

NO ----------------- UI-05

// Relay Output (Non-dimmable Light)

[CTRL:HI-Core]

L (фаза) ---<-- C (RL-01)

NO (RL-01) --<-- Фаза от автомата в щите

N (нейтраль) ---<---------------- Нейтраль от шины N

    // ASCII Flow Diagram

[gpio in: UI-05] -> [node-red-contrib-button-events] -> [switch: msg.payload] --+-- (short press) -> [function: Toggle] -> [gpio out: RL-01]

|

+-- (long press) -> [function: Start Dim] -> [dali control]

Команда для управления этим светом извне (например, с телефона) должна приходить в топик `hi/living_room/light/main/set` в формате JSON.

    // msg.payload для включения/выключения

{ "state": "ON" } // или "OFF"

// msg.payload для установки яркости

{ "brightness": 80 } // 0-100

    // Получаем текущее состояние из контекста потока

let isOn = flow.get("living_room_light_main_state") || false;

// Инвертируем состояние

isOn = !isOn;

// Сохраняем новое состояние

flow.set("living_room_light_main_state", isOn);

// Формируем сообщение для узла реле

msg.payload = isOn ? 1 : 0; // 1 для включения, 0 для выключения

// Обновляем статус для визуальной диагностики

node.status({ fill: isOn ? "green" : "red", shape: "dot", text: "State: " + (isOn ? "ON" : "OFF") });

return msg;

Сценарий 2: Защита от протечек воды

Задача: При срабатывании любого из датчиков протечки немедленно перекрыть вводные краны холодной и горячей воды, отправить PUSH-уведомление владельцу. * Контроллер HI.

* Универсальные входы `UI-10`, `UI-11` для датчиков протечки (режим «сухой контакт»).

* Релейные выходы `RL-15`, `RL-16` для управления электроприводами шаровых кранов (230В).

    //========= WIRING-SAFETY-004: Water Leakage Protection =========

// Leakage Sensor Inputs

(Leak_Sensor_Kitchen) -- UI-10 / GND

(Leak_Sensor_Bathroom) - UI-11 / GND

// Valve Actuator Outputs (230V)

[CTRL:HI-Core]

L (Open) ---<---- NO (RL-15)

L (Close) --<---- NO (RL-16)

N --------<-------------------- Нейтраль от шины N

C (RL-15) --<-- Фаза от автомата

C (RL-16) --<-- Фаза от автомата

⚠️ Критично: Данная логика должна быть реализована с использованием функции ПЛК контроллера для гарантированного срабатывания даже при перезагрузке основного ПО. В Node-RED реализуется дублирующая логика для уведомлений и отображения статуса.

    // ASCII Flow Diagram

[gpio in: UI-10] --+

|--> [function: Leak Detected] -> [exec: run plc_script] -> [mqtt out: notify]

[gpio in: UI-11] --+

Сообщение публикуется в топик `hi/alarms/water_leak`. Мобильное приложение подписано на этот топик.

    {

"source": "kitchen", // или "bathroom"

"ts": 1678886400000,

"message": "Обнаружена протечка воды на кухне! Водоснабжение перекрыто."

}

Каждое срабатывание системы защиты от протечек является критическим событием. Оно должно быть немедленно записано в базу данных MySQL на контроллере в таблицу `audit_log`.

    // В узле "function: Leak Detected"

let location = (msg.topic === "leak_sensor_kitchen") ? "Кухня" : "Ванная";

// Формируем SQL-запрос для журналирования

msg.query = `

INSERT INTO audit_log (timestamp, level, source, message)

VALUES (NOW(), 'CRITICAL', 'WaterSafety', 'Обнаружена протечка в зоне: ${location}. Вводные краны перекрыты.')

`;

// Отправляем msg на узел mysql

Интеграция с внешними системами: Голосовое управление и мобильное приложение

Контроллер HI не является изолированной системой. Благодаря MQTT, он легко интегрируется с популярными платформами.

1. Контроллер HI публикует состояние всех устройств (свет, розетки, температура) в стандартизированные топики на MQTT-брокере.

2. Специальный сервис-мост (например, `mqtt-smarthome-bridge` для Алисы) подписывается на эти топики и транслирует их в формат, понятный облаку Яндекса.

3. Когда пользователь говорит: «Алиса, включи свет в гостиной», облако Яндекса отправляет команду мосту, который публикует `msg.payload` `{ "state": "ON" }` в топик `hi/living_room/light/main/set`.

4. Контроллер HI, подписанный на этот топик, исполняет команду.

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

Ключевые вызовы и их решение на платформе HI

| Вызов | Проблема | Решение в экосистеме HI |

| :--- | :--- | :--- |

| Совместимость | Устройства разных производителей используют разные протоколы (Zigbee, Z-Wave, Modbus, DALI). | Мультипротокольность контроллера. Контроллер HI изначально поддерживает ключевые промышленные протоколы (Modbus, CAN, DALI) и легко расширяется для поддержки других через USB-адаптеры и ПО в Node-RED. |

| Надежность | Облачный сервис недоступен — дом перестает быть "умным". Сбой ПО контроллера приводит к отказу автоматизации. | Локальное исполнение (Local First). Все сценарии работают внутри контроллера без зависимости от интернета. Функция ПЛК и EEPROM гарантируют работу критических систем (безопасность, климат) на аппаратном уровне. |

| Безопасность | Уязвимости в IoT-устройствах могут дать злоумышленникам доступ к домашней сети и управлению домом. | Сетевая изоляция и отсутствие облачной зависимости. Контроллер работает в локальной сети. Доступ извне организуется через защищенный VPN-туннель. Данные не передаются на сторонние серверы без явного разрешения. |

| Стоимость | Высокие первоначальные затраты на оборудование и инсталляцию. | Гибкость и масштабируемость. Платформа HI позволяет начать с базового набора функций (управление светом и розетками через встроенные реле) и постепенно наращивать систему, добавляя новые модули и протоколы по мере необходимости. |

План сдачи объекта заказчику: Тест-план для умной квартиры

📋 После завершения монтажа и программирования инженер обязан провести с заказчиком приемо-сдаточные испытания по следующему чек-листу:

  • [ ] Освещение: Проверить работу каждого выключателя. Продемонстрировать работу всех световых сцен. Проверить управление светом из мобильного приложения.
  • [ ] Розеточные группы: Продемонстрировать отключение/включение управляемых розеток (например, для утюга, бойлера) по таймеру и из приложения.
  • [ ] Климат-контроль: Проверить корректную работу термостатов в каждом помещении. Продемонстрировать смену режимов (например, «Эко», «Комфорт»).
  • [ ] Шторы/Жалюзи: Проверить полное открытие/закрытие всех штор с кнопок и из приложения.
  • [ ] Безопасность:
  • * [ ] Датчики движения/открытия: Поставить систему на охрану и сымитировать вторжение. Убедиться, что приходит PUSH-уведомление.

    * [ ] Датчики протечки: Сымитировать протечку (влажной тканью на контактах датчика). Убедиться, что краны перекрылись, и пришло уведомление.

  • [ ] Сценарии:
  • * [ ] Сценарий «Я ушел»: Активировать сценарий. Проверить, что выключился весь свет, управляемые розетки, система климата перешла в режим «Эко», дом встал на охрану.

    * [ ] Сценарий «Я дома»: Активировать сценарий. Проверить, что система снялась с охраны, включился свет в прихожей.

  • [ ] Голосовое управление: Продемонстрировать 5-10 ключевых голосовых команд и их корректное выполнение.
  • [ ] Обучение: Провести инструктаж для заказчика по использованию мобильного приложения и основных функций системы. Передать учетные данные и документацию.
  • ---

    Лабораторные работы

    COURSE-16-M05-LAB01: Базовое управление освещением по датчику движения

    1. Соберите схему подключения согласно `WIRING-LIGHT-005`.

    2. Создайте поток в Node-RED, используя узлы `rpi gpio in`, `trigger`, `rpi gpio out`.

    3. Настройте узел `trigger` так, чтобы он отправлял `1` при первом сообщении, а через 1 минуту без новых сообщений отправлял `0`.

    4. Добавьте узел `status` к выходу реле для отображения его состояния.

    COURSE-16-M05-LAB02: Создание сценария «Я ушел»

    1. Создайте поток, который по сигналу с `UI-02` или по MQTT-команде `hi/scenes/set` с `payload` `{"scene": "away"}` выполняет следующие действия:

    2. Последовательно отправляет команды на выключение на 5 релейных выходов с задержкой 200 мс между командами (используйте узел `delay`).

    3. Отправляет MQTT-сообщение в топик `hi/security/set` с `payload` `{"state": "ARMED"}`.

    4. Записывает событие активации сценария в `audit_log` через узел `mysql`.

    Тест для самопроверки (Квиз)

    ID: `COURSE-16-M05-QUIZ`
  • Какой компонент контроллера HI обеспечивает гарантированное выполнение сценариев защиты от протечек даже при сбое основного ПО?
  • a) Node-RED

    b) База данных MySQL

    c) Функция ПЛК и EEPROM

    d) MQTT-брокер

  • Какой протокол является основным для связи контроллера с мобильным приложением и голосовыми ассистентами?
  • a) Modbus RTU

    b) DALI

    c) MQTT

    d) CAN

  • Вы подключаете настенную кнопку к универсальному входу контроллера. Какие клеммы вы будете использовать?
  • a) UI-xx и +5V

    b) UI-xx и GND

    c) UI-xx и A/B

    d) UI-xx и L/N

  • Согласно стандарту Академии, какой узел Node-RED используется для перехвата ошибок связи с оборудованием (например, Modbus timeout)?
  • a) `switch`

    b) `function`

    c) `debug`

    d) `catch`

  • Какую информацию должен содержать `msg.payload` для установки яркости диммируемого светильника в 50% согласно типовому контракту сообщения?
  • a) `50`

    b) `"BRIGHTNESS: 50"`

    c) `{ "brightness": 50 }`

    d) `{ "command": "dim", "value": 50 }`

  • Для чего используется узел `trigger` в сценарии с датчиком движения?
  • a) Чтобы включить свет.

    b) Чтобы отфильтровать ложные срабатывания.

    c) Чтобы отправить команду на выключение света через заданный интервал времени после прекращения движения.

    d) Чтобы записать событие в лог.

  • Что означает принцип "Local First" в контексте платформы HI?
  • a) Все данные хранятся только локально и никогда не отправляются в интернет.

    b) Все сценарии автоматизации работают на локальном контроллере и не зависят от наличия интернет-соединения.

    c) Предпочтение отдается устройствам местного производства.

    d) Управление возможно только из локальной сети.

  • При подключении экрана сигнального кабеля RS-485, как правильно его заземлить?
  • a) Подключить к GND с обеих сторон кабеля.

    b) Не подключать вообще.

    c) Подключить к клемме PE в щите.

    d) Подключить к клемме GND только со стороны контроллера.

  • Какой узел Node-RED используется для сохранения состояния (например, `включен/выключен` свет) между перезапусками потока?
  • a) `global.set()`

    b) `node.status()`

    c) `flow.set()` (при настроенном `contextStorage`)

    d) `msg.payload`

  • В сценарии «Я ушел» выключается 5 групп света. Как обеспечить их плавное, а не одновременное отключение?
  • a) Использовать 5 разных узлов `gpio out`.

    b) Использовать узел `delay` в режиме "Rate Limit" между командами на выключение.

    c) Написать сложный код в узле `function` с `setTimeout`.

    d) Это невозможно, реле всегда срабатывают одновременно.

    Мини-runbook: «Если что-то не работает»

    ID: `COURSE-16-M05-RUNBOOK`

    | Симптом | Возможная причина | Шаг диагностики |

    | :--- | :--- | :--- |

    | Свет не включается по кнопке | 1. Ошибка в схеме подключения.
    2. Ошибка в логике Node-RED. | 1. Проверить мультиметром замыкание между клеммами `UI-xx` и `GND` при нажатии кнопки.
    2. Подключить узел `debug` к выходу узла `gpio in` и проверить, приходит ли сообщение `0` или `1` при нажатии. |

    | Устройство Modbus не отвечает | 1. Несовпадение параметров шины (скорость, адрес).
    2. Обрыв или неверная полярность (A/B) шины RS-485.
    3. Отсутствие терминатора 120 Ом. | 1. Сверить настройки в узле `modbus-client` с документацией на устройство.
    2. Поменять местами провода A и B на клеммах контроллера. Проверить целостность кабеля.
    3. Убедиться, что на крайних устройствах шины установлены терминирующие резисторы. |

    | Команды из мобильного приложения не доходят | 1. Контроллер или телефон не подключены к сети.
    2. Ошибка в MQTT-топике или контракте сообщения.
    3. Неправильно настроен MQTT-брокер. | 1. Проверить сетевые подключения. `ping` контроллера с телефона.
    2. С помощью утилиты `MQTT Explorer` подписаться на нужный топик и посмотреть, какие сообщения приходят от приложения. Сравнить с тем, что ожидает Node-RED.
    3. Проверить настройки `mqtt in` узла в Node-RED. |

    | Сценарий «Я ушел» не выключает одну из групп света | 1. Ошибка в потоке Node-RED (неправильный узел `gpio out`).
    2. "Залипло" реле. | 1. Проверить, что в потоке сценария есть команда на выключение нужного реле. Подключить `debug` к его входу.
    2. Послушать, щелкает ли реле при выполнении команды. Если нет, попробовать управлять им вручную из тестового потока. |

    | Датчик протечки сработал, но краны не перекрылись | 1. Отказ логики ПЛК или Node-RED.
    2. Нет питания на электроприводах кранов.
    3. Механическое заклинивание привода. | 1. Проверить лог `audit_log` на наличие записи о событии. Проверить статус потока `FLOW-SAFETY-LEAK-001`.
    2. Проверить автомат в щите, питающий приводы. Проверить напряжение на клеммах `RL-xx`.
    3. Попробовать активировать привод вручную (если предусмотрено конструкцией). |