Практическая работа: Базовые концепции и архитектура IoT-решений
# Академия HI: Курс Foundation
COURSE-16-M04-LAB01 — Практическая работа: Базовые концепции и архитектура IoT-решений
Введение
Данная практическая работа предназначена для проверки и закрепления базовых знаний в области Интернета вещей (IoT). Цель работы — не просто дать правильные ответы, а продемонстрировать понимание фундаментальных концепций, способность применять их в контексте аппаратной платформы HI и мыслить как инженер-системотехник.
Каждое задание требует не только ответа по существу, но и обоснования с привязкой к реальным сценариям и компонентам экосистемы HI (контроллер, Node-RED, протоколы MQTT/Modbus, универсальные входы/релейные выходы, шины RS-485, CAN, DALI).
Инструкции по выполнению
---
Задание 1. Идентификация и применение сенсоров
Задача: Сопоставьте типы сенсоров с их функциями и приведите конкретный пример их использования на платформе HI для решения практической задачи на типовом объекте (умный дом, офис).| Тип сенсора | Функция | Пример практического применения на платформе HI |
| :--- | :--- | :--- |
| Датчик температуры | Измеряет температуру окружающей среды или объекта. | Подключение датчика DS18B20 к универсальному входу контроллера HI по шине 1-Wire. Сценарий в Node-RED считывает температуру каждые 5 минут. Если температура в помещении падает ниже 20°C, контроллер через релейный выход замыкает цепь управления клапаном на радиаторе отопления. Данные также отправляются по MQTT в топик `telemetry/living_room/temperature` для отображения в мобильном приложении. |
| Датчик влажности | Измеряет относительную влажность воздуха. | Подключение комбинированного датчика температуры и влажности (например, Modbus RTU) к порту RS-485 контроллера HI. В Node-RED настроен опрос датчика каждые 10 минут. Если влажность превышает 70%, контроллер активирует релейный выход, управляющий вытяжным вентилятором в ванной комнате. Данные публикуются в MQTT-топик `telemetry/bathroom/humidity`. |
| Датчик освещенности | Измеряет уровень видимого света. | Подключение фоторезистора к аналоговому входу контроллера HI. В Node-RED настроен опрос каждые 30 секунд. Если уровень освещенности падает ниже 100 люкс (например, с наступлением сумерек), контроллер включает уличное освещение через релейный выход. При повышении уровня света выше 200 люкс — выключает. |
| Датчик движения | Регистрирует движение в зоне своего действия. | Подключение PIR-датчика (пассивного инфракрасного) к дискретному входу контроллера HI ("сухой контакт"). При обнаружении движения (изменение состояния входа) Node-RED запускает сценарий: включает свет в коридоре на 5 минут (через релейный выход) и отправляет уведомление в Telegram через MQTT-шлюз. |
| Геркон (магнитоконтактный датчик) | Определяет состояние "открыто/закрыто" для дверей, окон. | Подключение геркона на вход "сухой контакт" контроллера HI. При открытии входной двери (размыкание контакта) Node-RED фиксирует событие, отправляет сообщение в MQTT-топик `security/main_door/status` и, если система находится в режиме охраны, активирует сирену через релейный выход. |
---
Задание 2. Мониторинг состояния и диагностика
Задача: Заполните таблицу, указав для каждого статуса устройства возможные технические причины и метод диагностики с использованием инструментов платформы HI.| Устройство | Статус | Возможные технические причины статуса | Метод диагностики в Node-RED / на контроллере |
| :--- | :--- | :--- | :--- |
| Умная колонка (подключена через Wi-Fi) | Недоступна | 1. Отсутствие питания на колонке. 2. Колонка потеряла соединение с Wi-Fi роутером. 3. Проблемы с сетью Wi-Fi (отключен роутер, слабый сигнал). 4. Сбой в работе облачного сервиса колонки. 5. Неверные сетевые настройки (IP-адрес, DNS). | 1. Визуальный осмотр: Проверить индикацию питания на колонке. 2. Ping с контроллера HI: Через SSH-доступ к Debian на контроллере выполнить `ping
| Счетчик электроэнергии (подключен по RS-485 Modbus) | Не отвечает | 1. Обрыв или неверная полярность (A/B) шины RS-485. 2. Отсутствие питания 230V на счетчике. 3. Несовпадение настроек Modbus (скорость, четность, стоп-биты, адрес устройства) между счетчиком и контроллером HI. 4. Некорректный Slave ID или адрес регистра в запросе Node-RED. 5. Сбой самого счетчика. 6. Отсутствие терминирующих резисторов на шине RS-485. | 1. Node-RED: Проверить статус узла `modbus-read` (должен быть `active`, а не `timeout error`). Подключить узел `Catch` для перехвата и логирования ошибок от узла Modbus. 2. Физическая проверка: Визуально проверить подключение проводов A/B (согласно `WIRING-SENS-004`), наличие питания на счетчике. 3. Конфигурация Modbus-клиента: В Node-RED проверить настройки Modbus-клиента (COM-порт, скорость, четность, стоп-биты) на соответствие документации счетчика. 4. Modbus-сканер: Использовать сторонний Modbus-сканер (например, на ПК с USB-RS485 адаптером) для проверки доступности счетчика и его адреса. 5. ASCII-схема: Сверить физическое подключение с `WIRING-SENS-004` и убедиться в наличии терминирующих резисторов. |
| Светодиодная лента (управляется реле контроллера) | Не включается | 1. Отсутствие питания 230V на контроллере или на блоке питания светодиодной ленты. 2. Обрыв цепи между реле контроллера и блоком питания ленты. 3. Неисправность реле контроллера. 4. Неисправность блока питания светодиодной ленты. 5. Неисправность самой светодиодной ленты. 6. Ошибка в логике Node-RED (сценарий не отправляет команду на реле). | 1. Node-RED: Проверить логику потока, который должен включать ленту. Убедиться, что команда на реле отправляется (использовать узел `Debug` после узла `rpi gpio out` или `modbus-write`). 2. Визуальный осмотр: Проверить индикацию питания на контроллере и блоке питания ленты. 3. Мультиметр: Измерить напряжение на клеммах реле контроллера (при активном состоянии) и на входе блока питания ленты. 4. Node-RED Status: Проверить статус узла `rpi gpio out` (если используется) или `modbus-write` (если реле управляется по Modbus). 5. ASCII-схема: Сверить подключение с `WIRING-LIGHT-015`. |
---
Задание 3. Формулировка определения IoT в контексте платформы HI
Задача: Заполните пропуски в определении IoT и кратко поясните, как каждый из пропущенных терминов реализуется с помощью контроллера HI.Интернет вещей (IoT) — это концепция сети (1) физических объектов, которые оснащены технологиями для взаимодействия друг с другом и с внешней средой и могут (2) собирать данные и (3) обмениваться информацией между собой или с внешними системами.
- (1) Пропущенный термин: Физических
- (2) Пропущенный термин: Собирать данные
- (3) Пропущенный термин: Обмениваться информацией
---
Лабораторная работа 1: COURSE-16-M04-LAB01-LAB01 — Мониторинг температуры и влажности с Modbus RTU
Цель: Настроить контроллер HI для чтения данных с Modbus RTU датчика температуры и влажности, валидации данных и публикации их в MQTT. Оборудование:- Контроллер HI (Debian, Node-RED)
- Датчик температуры/влажности Modbus RTU (например, WB-MSW3, Slave ID=1)
- Кабель RS-485 (витая пара)
- Блок питания 24V DC для датчика (если требуется)
[Inject: 30s] --> [Modbus-Getter: Temp/Hum] --> [Function: Validate & Format] --> [MQTT Out: telemetry/room/temp]
|
+--> [MQTT Out: telemetry/room/hum]
|
+--> [Debug: Output]
|
+--> [Status: Node Status]
|
[Catch: All Errors] ------------------------------------------------------------+--> [Function: Error Logger] --> [MQTT Out: errors/modbus]
Skeleton (Node-RED JSON):
```json
[
{
"id": "a1b2c3d4e5f6g7h8",
"type": "modbus-client",
"name": "Modbus RTU RS485-1",
"clienttype": "serial",
"serialport": "/dev/ttyS1",
"serialbaudrate": "9600",
"serialdatabits": "8",
"serialparity": "none",
"serialstopbits": "1",
"serialconnectiondelay": "100",
"serialtimeout": "3000",
"serialrtscts": "false",
"serialxonxoff": "false",
"serialdsrdtr": "false",
"serialmode": "RTU",
"serialdriver": "serialport",
"serialserverhost": "127.0.0.1",
"serialserverport": "502",
"serialtype": "RTU-BUFFER",
"tcpHost": "127.0.0.1",
"tcpPort": "502",
"tcpType": "DEFAULT",
"unit_id": "1",
"commandDelay": 1,
"clientTimeout": 1000,
"reconnectTimeout": 2000
},
{
"id": "i9j0k1l2m3n4o5p6",
"type": "inject",
"z": "YOUR_FLOW_ID",
"name": "Poll every 30s",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "30",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 100,
"y": 100,
"wires": [
["q7r8s9t0u1v2w3x4"]
]
},
{
"id": "q7r8s9t0u1v2w3x4",
"type": "modbus-getter",
"z": "YOUR_FLOW_ID",
"name": "Read Temp/Hum",
"showStatusActivities": false,
"showErrors": false,
"unitid": "1",
"fc": "4",
"address": "0",
"quantity": "2",
"server": "a1b2c3d4e5f6g7h8",
"x": 300,
"y": 100,
"wires": [
["y5z6a7b8c9d0e1f2"],
[]
]
},
{
"id": "y5z6a7b8c9d0e1f2",
"type": "function",
"z": "YOUR_FLOW_ID",
"name": "Validate & Format",
"func": "// Контракт входящего сообщения от Modbus-Getter:\n// msg.payload = { data: [temp_raw, hum_raw], buffer: