Интеграция Z-Wave-устройств через IoT-хаб в мобильное приложение
Z-Wave — беспроводной протокол на частоте 868 MHz (Европа) / 908 MHz (США), изолированный от Wi-Fi и Zigbee. Ячеистая топология, дальность до 30 метров на узел. Принципиальное отличие от Zigbee: Z-Wave — проприетарный стандарт под управлением Silicon Labs, все устройства проходят обязательную сертификацию на совместимость. Меньше «сюрпризов» с совместимостью, но и меньше дешёвого DIY-оборудования.
Хабы и API для мобильной интеграции
Z-Wave JS + zwavejs2mqtt — современный open-source стек на Node.js. USB-контроллер (UZB7, Aeotec Z-Stick 7, Zooz ZAC93) → Z-Wave JS сервер → WebSocket API + MQTT. Лучший выбор для кастомного мобильного приложения.
Z-Wave JS WebSocket API: подключаемся на ws://host:3000 и работаем через JSON-RPC сообщения:
{
"messageId": "abc123",
"command": "node.setValue",
"nodeId": 5,
"valueId": {
"commandClassName": "Binary Switch",
"endpoint": 0,
"property": "currentValue"
},
"value": true
}
Home Assistant с Z-Wave JS addon — мобильное приложение работает через HA REST/WebSocket API. HA абстрагирует Z-Wave-специфику в стандартные switch, light, lock, climate сущности.
Vera / Fibaro HC — коммерческие хабы с собственными REST API. Vera: http://hub-ip/port_3480/data_request?id=action&DeviceNum={id}&serviceId={...}&action={...}. Fibaro: REST API с Basic Auth, GET /api/devices/{id}.
SmartThings Hub — поддерживает Z-Wave. SmartThings API (OAuth2, cloud) или локальный API через SmartThings Edge Drivers.
Z-Wave Command Classes: что это и почему важно
Z-Wave устройства общаются через Command Classes — стандартизованные наборы команд. Знать их нужно, чтобы правильно читать состояние и управлять устройствами:
| Command Class | Применение | Ключевые команды |
|---|---|---|
| Binary Switch | Выключатели | currentValue (bool) |
| Multilevel Switch | Диммеры | currentValue (0-99) |
| Door Lock | Замки | currentMode (Secured/Unsecured) |
| Thermostat Setpoint | Термостаты | value (температура) |
| Battery | Батарейные устройства | level (0-100%) |
| Notification | Датчики | события движения, задымления |
| Meter | Счётчики энергии | value (кВт·ч, Ватт) |
| Color Switch | RGB лампы | currentColor |
При работе через Z-Wave JS valueId содержит commandClassName — именно по нему определяем тип устройства и доступные операции.
Парование Z-Wave устройств (Inclusion)
Z-Wave Inclusion — физический процесс: контроллер входит в режим ожидания, пользователь нажимает кнопку на устройстве. Без физического доступа к устройству сделать это нельзя.
Из мобильного приложения запускаем Inclusion через Z-Wave JS API:
{ "command": "controller.beginInclusion", "options": { "strategy": "Default" } }
Стратегии Inclusion:
-
Default— обычное добавление -
SmartStart— QR-код на устройстве, не требует физического нажатия. Устройство само находит сеть при включении питания. Поддерживается Z-Wave 700 series+. -
Security0/Security2_*— с шифрованием (S0, S2 Authenticated, S2 AccessControl для замков и гаражных ворот)
SmartStart — правильный путь для современных Z-Wave 700/800 устройств. QR-код сканируем камерой телефона, передаём DSK-ключ в Z-Wave JS, устройство включаем в розетку — оно само добавляется в сеть.
На Flutter: mobile_scanner для сканирования QR → распарсить ZW:... URI → извлечь DSK → отправить в Z-Wave JS API.
Ячеистая сеть и оптимизация маршрутов
Z-Wave строит маршруты самостоятельно, но иногда требует помощи. Если устройство нестабильно — смотрим маршрут: { "command": "node.getRoutingSummary", "nodeId": 5 }.
«Heal» — перестройка маршрутов: { "command": "controller.healNetwork" }. Запускать после добавления/удаления устройств или перестановки мебели. Heal занимает 5–30 минут — показываем прогресс в приложении через события healNetworkProgress.
Визуализация сети: Z-Wave JS отдаёт controller.getNodeNeighbors для каждого узла. На Flutter рисуем граф через CustomPainter. Listening nodes (постоянное питание) — маршрутизаторы, FLiRS nodes — конечные. Батарейные устройства не ретранслируют сигнал.
Secure Communication: S2
S2 шифрование обязательно для замков (S2 AccessControl) и устройств управления доступом. При Inclusion без S2 на замке — это security vulnerability. Z-Wave JS предупреждает если устройство поддерживает S2 но было добавлено без шифрования.
DSK (Device Specific Key) — 5-значный PIN на этикетке устройства или в QR-коде. Запрашиваем у пользователя при Inclusion: { "type": "inclusionStarted" } → { "type": "validateDSKAndEnterPIN" } → пользователь вводит PIN → { "command": "controller.validateDSKAndEnterPIN", "pin": "12345" }.
Мониторинг батареи
Z-Wave батарейные устройства (датчики, замки) сами сообщают уровень заряда через Battery Command Class. Пороговое уведомление: если battery.level < 20% — push пользователю. Хранить историю уровней батареи в базе не нужно — достаточно последнего значения.
Сроки
Z-Wave JS + WebSocket клиент, базовое управление — 2–3 недели. SmartStart inclusion, визуализация сети, S2 security, heal, мониторинг батареи — 6–9 недель. Стоимость зависит от типов устройств и требований к безопасности.







