Інтеграція 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 тижнів. Вартість залежить від типів пристроїв та вимог до безпеки.







