Основы Интернета Вещей: от концепции к практике на платформе HI
COURSE-16-M01-L01 — Основы Интернета Вещей: от концепции к практике на платформе HI
Введение в Интернет Вещей для инженеров
Интернет вещей (IoT) — это не просто концепция, а инженерная дисциплина, объединяющая физическое оборудование с цифровыми системами. В контексте платформы HI, IoT — это создание автоматизированных систем, где контроллеры, датчики, исполнительные устройства и программное обеспечение работают как единый организм для решения конкретных задач на объекте: от управления климатом в коттедже до мониторинга производственной линии.
Цель этого урока — перейти от абстрактных определений к практическому пониманию того, как работает IoT на примере контроллера HI. Мы разберем каждый компонент экосистемы и увидим, как он реализуется с помощью нашего оборудования и программного стека.
Ключевые компоненты экосистемы IoT на платформе HI
Любая IoT-система состоит из четырех фундаментальных уровней. Рассмотрим, как каждый из них реализован в нашей экосистеме.
1. Устройства и сенсоры (Уровень сбора данных)
Это "органы чувств" и "мышцы" вашей системы автоматизации. Они подключаются непосредственно к контроллеру HI.
- Сенсоры (Входы): Собирают данные об окружающей среде. Контроллер HI оснащен 22 универсальными входами, к которым вы можете подключить:
* Датчики движения, открытия дверей/окон (герконы): Подключаются как "сухой контакт".
* Кнопки и выключатели: Также работают по принципу "сухого контакта".
* Аналоговые датчики: Датчики давления, уровня CO2 с выходом 0-10В или 4-20мА.
* Счетчики с импульсным выходом: Счетчики воды, электроэнергии.
- Исполнительные устройства (Выходы): Выполняют физические действия по команде от контроллера. Контроллер HI имеет 22 встроенных реле для управления:
* Розетками: Управление питанием электроприборов.
* Сервоприводами: Управление задвижками на трубах отопления, вентиляционными заслонками.
* Клапанами: Управление системами полива или защиты от протечек.
* Двигателями: Управление воротами, роллетами.
2. Подключение и среда передачи данных
Это "нервная система", обеспечивающая связь между компонентами. На платформе HI мы разделяем физический и логический уровни.
- Физический уровень (Шины):
* CAN: Высоконадежная шина, используемая в автомобильной и промышленной автоматизации для критически важных коммуникаций.
* DALI: Специализированная шина для профессионального управления освещением.
* Ethernet (TCP/IP): Стандартная компьютерная сеть для связи контроллеров между собой и с внешним миром.
- Логический уровень (Протоколы):
* MQTT: Легковесный протокол для обмена сообщениями между устройствами и серверами. Это основной способ интеграции контроллера HI с облачными платформами, мобильными приложениями и SCADA-системами.
3. Обработка данных (Логика и сценарии)
Это "мозг" системы, расположенный непосредственно на контроллере HI. Вся логика автоматизации создается в среде Node-RED.
- Node-RED — это визуальный инструмент для программирования, где вы соединяете готовые блоки (узлы) для создания потоков данных (flows).
- Поток (Flow): Это сценарий автоматизации. Например, поток может считывать данные с датчика температуры (вход), сравнивать их с уставкой и, если температура ниже нормы, замыкать реле, включающее обогреватель (выход).
- Локальная обработка: Благодаря мощному 4-ядерному процессору и 4 ГБ ОЗУ, контроллер HI выполняет все сценарии локально, не завися от интернет-соединения. Это обеспечивает высокую надежность и скорость реакции.
- Надежное хранение: Критически важные сценарии и состояния могут сохраняться в энергонезависимой памяти (EEPROM) и на дополнительном ARM32-микроконтроллере, что гарантирует их исполнение даже после сбоя питания и перезагрузки основной системы.
4. Программное обеспечение и интерфейсы (Визуализация и управление)
Это уровень взаимодействия пользователя с системой.
- Веб-интерфейс: Node-RED предоставляет базовый интерфейс (Dashboard) для быстрой визуализации данных и создания элементов управления.
- Мобильные приложения: Подключаются к контроллеру через протокол MQTT, позволяя пользователю удаленно управлять системой и получать уведомления.
- SCADA-системы и облачные платформы: Профессиональные системы мониторинга и диспетчеризации интегрируются с контроллером HI также через MQTT или Modbus TCP для сбора данных с сотен устройств и их централизованного анализа.
Принципы работы IoT: Практический цикл на платформе HI
Рассмотрим полный цикл работы на конкретном примере: "Автоматическое включение вентиляции при превышении уровня CO2 в офисном помещении".
Сценарий: `SCN-CLIMATE-001` Оборудование: Контроллер HI, датчик CO2 с выходом Modbus RTU, приточная вентиляционная установка, управляемая через реле.* Узел `Modbus-Read` в Node-RED с заданной периодичностью (например, раз в 30 секунд) отправляет запрос по шине RS-485 на датчик CO2 (например, с адресом 5).
* Датчик отвечает, отправляя текущее значение концентрации CO2 (например, 950 ppm).
* Узел `Modbus-Read` передает полученное значение дальше по потоку в виде объекта `msg`.
* 💡 Контракт сообщения: Для стандартизации мы всегда используем структурированный `msg.payload`.
{
"value": 950,
"unit": "ppm",
"source": "co2-sensor-office-1",
"ts": 1678886400000
}
* Сообщение `msg` поступает в узел `Switch` (или `Function`).
* Узел проверяет условие: `msg.payload.value > 800`.
* В нашем случае 950 > 800, поэтому условие истинно.
* Узел `Switch` передает управление на ветку, которая активирует реле.
* Узел `Change` формирует команду для реле (например, `true`).
* Эта команда поступает в узел `Relay-Out`, который физически замыкает реле (например, `RL-08`), подключенное к вентиляционной установке. Вентиляция включается.
* ⚠️ Обратная связь: Хорошей практикой является отправка статуса (`"ON"`) в MQTT-топик `hi/office/ventilation/state` для отображения в пользовательском интерфейсе.
ASCII-схема потока в Node-RED (`FLOW-CLIMATE-001`): +---------------+ +-------------------+ +----------------+ +------------+
[Inject] -> | Modbus Read | -> | Function: Format | -> | Switch: >800? | -> | Relay Out |
(30 sec) | (CO2 Sensor) | | (Create Contract) | +----------------+ | (RL-08) |
+---------------+ +-------------------+ | (else) +------------+
| (on error) | |
v v v
+---------------+ +------------+ +------------+
| Catch Node | -> [To Error Logger] | Relay Out | | MQTT Out |
+---------------+ | (RL-08 OFF)| | (State ON) |
+------------+ +------------+
Вызовы и решения в экосистеме HI
Вместо того чтобы просто перечислять проблемы, рассмотрим, как наша платформа их решает.
- Проблема: Безопасность и уязвимости.
- Проблема: Совместимость устройств от разных производителей.
- Проблема: Потеря связи с интернетом и отказ облака.
- Проблема: Потеря состояний и сценариев при сбое питания.
---
Лабораторная работа №1: Первое включение и опрос датчика
ID: `COURSE-16-M01-LAB01` Цель: Подключить контроллер HI к сети, зайти в интерфейс Node-RED и создать первый поток для считывания данных с датчика температуры DS18B20. Оборудование:- Контроллер HI
- Блок питания 24V DC
- Ethernet-кабель
- Датчик температуры DS18B20
- ПК с веб-браузером
* Перетащите на поле узел `inject`. Настройте его на повторение каждые 5 секунд.
* Перетащите узел `function`. В нем напишите код для чтения файла устройства 1-Wire.
* Перетащите узел `debug`. Соедините все узлы.
+----------+ +--------------------------+ +-------------+
[Inject] -> | Function | -> | debug |
(5 sec) | (Read DS18B20) | (Show Payload) |
+----------+ +--------------------------+
Скелет кода для узла `Function`:
// В реальной системе используется специализированный узел,
// здесь для обучения имитируем чтение из файловой системы Linux.
// Предполагается, что ID датчика '28-01234567abcd'
const temp_raw = "75 01 4b 46 7f ff 0c 10 2e : crc=2e YES\n75 01 4b 46 7f ff 0c 10 2e t=23312";
const temp_string = temp_raw.split('t=')[1];
const temp_c = parseInt(temp_string) / 1000.0;
msg.payload = temp_c;
node.status({fill:"green", shape:"dot", text: temp_c + " °C"});
return msg;
📋 Чек-лист сдачи:
- Выполнено (5/5): Все пункты чек-листа выполнены.
- Частично выполнено (3/5): Поток создан, но данные не отображаются или некорректны.
- Не выполнено (0/5): Не удалось подключиться к контроллеру или создать поток.
Лабораторная работа №2: Управление реле по событию
ID: `COURSE-16-M01-LAB02` Цель: Модифицировать предыдущий поток для управления реле в зависимости от показаний температуры. Оборудование: То же, что в LAB01, плюс светодиод или лампа для индикации. Порядок выполнения:* Добавьте в поток из LAB01 узел `switch`.
* Настройте `switch` так, чтобы он проверял `msg.payload`. Если значение > 25, сообщение идет на один выход, если <= 25 — на другой.
* Добавьте два узла `change`, которые будут устанавливать `msg.payload` в `true` и `false` соответственно.
* Добавьте узел `rpi gpio out` (или его аналог для управления реле на платформе HI). Настройте его на управление выходом RL-01.
+----------+ +------------------+ --(>25)--> [Change: true] --+
[Inject] -> | Function | -> | Switch: Temp >25 | | -> [Relay Out]
(5 sec) | (Read DS18B20) +------------------+ --(<=25)-> [Change: false]--+ (RL-01)
+----------+
📋 Чек-лист сдачи:
- Выполнено (5/5): Все пункты чек-листа выполнены, логика работает корректно.
- Частично выполнено (3/5): Реле управляется, но логика порогового значения работает неверно.
- Не выполнено (0/5): Не удалось заставить реле реагировать на события.
---
Тест для самопроверки
ID: `COURSE-16-M01-QUIZ`a) Debian Linux
b) Node-RED
c) MySQL
d) EEPROM
a) Modbus RTU
b) DALI
c) MQTT
d) CAN
a) Только для датчиков температуры 1-Wire.
b) Для множества промышленных устройств, таких как счетчики и модули ввода-вывода.
c) Для подключения контроллера к локальной сети Ethernet.
d) Только для управления освещением.
a) Лицензионное соглашение на использование узла.
b) Стандартизированный формат JSON-объекта `msg.payload` для предсказуемого обмена данными.
c) Настройка прав доступа к потоку.
d) Физическая схема подключения.
a) Снижение стоимости оборудования.
b) Автономная работа системы без зависимости от интернета и облачных сервисов.
c) Возможность использовать любой язык программирования.
d) Увеличение дальности связи по Wi-Fi.
a) `inject`
b) `debug`
c) `switch`
d) `comment`
a) Для ускорения работы веб-интерфейса.
b) Для хранения медиафайлов.
c) Для обеспечения работы критически важной логики и сохранения состояний при сбое питания.
d) Для расширения числа портов Wi-Fi.
a) Релейный выход.
b) Универсальный вход в режиме "сухой контакт".
c) Порт DALI.
d) Порт CAN.
a) Весь контроллер перезагрузится.
b) Узел сгенерирует ошибку, которую можно перехватить узлом `catch` для дальнейшей обработки.
c) Node-RED автоматически попробует другой протокол.
d) Ничего, система продолжит работать со старым значением.
a) Управлять исполнительными устройствами.
b) Отображать содержимое проходящих через него сообщений `msg` для отладки потока.
c) Запускать поток через определенные интервалы времени.
d) Писать комментарии к коду.
(Ответы: 1-b, 2-c, 3-b, 4-b, 5-b, 6-c, 7-c, 8-b, 9-b, 10-b)---
Мини-справочник по диагностике ("Если не работает")
| Проблема | Возможная причина | Шаги для проверки и решения -
| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Не могу зайти на веб-интерфейс Node-RED | 1. Неправильный IP-адрес.
2. Контроллер и ПК в разных подсетях.
3. Проблема с Ethernet-кабелем. | 1. Убедитесь, что вводите правильный IP-адрес контроллера и порт `:1880`.
2. Проверьте сетевые настройки ПК и контроллера. Они должны быть в одной подсети (например, `192.168.1.10` и `192.168.1.15`).
3. Попробуйте заменить кабель или порт на роутере. - |
| Датчик температуры не отдает данные | 1. Неправильное подключение (перепутаны провода).
2. Плохой контакт в клеммах.
3. Неверный ID датчика. | 1. Проверьте схему подключения `WIRING-SENS-001`. Убедитесь, что провода V+, GND и Data не перепутаны.
2. Убедитесь, что провода надежно зажаты в клеммах.
3. В Linux ID датчика можно найти в директории `/sys/bus/w1/devices/`. Убедитесь, что он совпадает с тем, что вы используете в потоке. |
| Реле не включается по команде из Node-RED | 1. Неправильно указан номер реле в узле.
2. Проблема с питанием нагрузки.
3. Логическая ошибка в потоке. | 1. Дважды проверьте, что в узле `Relay Out` указан именно тот номер реле, к которому подключена нагрузка (например, RL-01).
2. Убедитесь, что на саму нагрузку (лампу, двигатель) и на ее блок питания подается напряжение.
3. Временно подключите узел `debug` прямо перед узлом `Relay Out`, чтобы увидеть, какое значение (`true` или `false`) приходит на него. |
| Показания датчика нестабильны, "скачут" | 1. Наводки от силовых кабелей.
2. Слишком длинный кабель для датчика 1-Wire. | 1. Убедитесь, что сигнальный кабель от датчика проложен на расстоянии не менее 10 см от силовых кабелей 230V. Если это невозможно, используйте экранированный кабель.
2. Для шины 1-Wire старайтесь не превышать длину 15-20 метров. Для больших расстояний используйте датчики с интерфейсом RS-485. |