Клієнт приходить із задачею: керувати двадцятьма Z-Wave замками та датчиками через один мобільний додаток. Перший камінь спотикання — вибір хаба та API для інтеграції. Розповім, як ми з'єднуємо Z-Wave з iOS та Android на сучасному стеку.
Z-Wave — бездротовий протокол на частоті 868 MHz (Європа) / 908 MHz (США), ізольований від Wi-Fi та Zigbee. Комірчаста топологія, дальність до 30 метрів на вузол. Принципова відмінність від Zigbee: Z-Wave — пропрієтарний стандарт під управлінням Silicon Labs, всі пристрої проходять обов'язкову сертифікацію на сумісність. Менше «сюрпризів» із сумісністю, але й менше дешевого DIY-обладнання.
Який хаб обрати для мобільної інтеграції?
Варіант Z-Wave JS: сучасний open-source стек на Node.js. USB-контролер (UZB7, Aeotec Z-Stick 7, Zooz ZAC93) → Z-Wave JS сервер → WebSocket API + MQTT. Найкращий вибір для кастомного мобільного додатку. У два рази швидший за комерційні аналоги за часом відгуку.
Приклад підключення через WebSocket:
{ "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, але менш гнучкі та повільніші.
Що таке 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 — саме за ним визначаємо тип пристрою.
Як відбувається сполучення пристроїв (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
| Спосіб | Складність | Гнучкість | Швидкість | Підходить для |
|---|---|---|---|---|
| Z-Wave JS + WebSocket | Висока | Максимальна | Висока | Кастомні додатки |
| Home Assistant addon | Середня | Середня (через HA API) | Середня | Універсальні рішення |
| Комерційні хаби (Vera/Fibaro) | Низька | Низька (обмежений API) | Низька | Швидкий старт, мало пристроїв |
Як оптимізувати комірчасту мережу Z-Wave?
Z-Wave будує маршрути самостійно, але іноді потребує допомоги. Якщо пристрій нестабільний — дивимося маршрут через node.getRoutingSummary. «Heal» — перебудова маршрутів: controller.healNetwork. Запускати після додавання або видалення пристроїв. Heal займає 5–30 хвилин — показуємо прогрес у додатку через події healNetworkProgress.
Візуалізація мережі: Z-Wave JS віддає controller.getNodeNeighbors для кожного вузла. На Flutter малюємо граф через CustomPainter. Listening nodes (постійне живлення) — маршрутизатори, FLiRS nodes — кінцеві. Батарейні пристрої не ретранслюють сигнал.
Secure Communication: S2
S2 шифрування обов'язкове для замків та пристроїв керування доступом. При Inclusion без S2 на замку — це security vulnerability. Z-Wave JS попереджає, якщо пристрій підтримує S2, але був доданий без шифрування.
DSK (Device Specific Key) — 5-значний PIN на етикетці пристрою або в QR-коді. Запитуємо у користувача при Inclusion.
Моніторинг батареї
Z-Wave батарейні пристрої (датчики, замки) самі повідомляють рівень заряду через Battery Command Class. Порогове сповіщення: якщо battery.level < 20% — push користувачу. Зберігати історію рівнів батареї не потрібно — достатньо останнього значення.
Що входить у роботу
- Аналіз вимог та підбір хаба/контролера
- Налаштування Z-Wave JS сервера та WebSocket/MQTT моста
- Розробка мобільного клієнта (iOS/Android) з керуванням пристроями
- Реалізація SmartStart inclusion, S2 безпеки
- Візуалізація мережі та оптимізація маршрутів
- Тестування на реальних пристроях та документація API
- Підтримка після запуску (один місяць)
Терміни та бюджет
Базове керування через Z-Wave JS + WebSocket займає 2–3 тижні. SmartStart, візуалізація, S2, heal, моніторинг — 6–9 тижнів. Вартість такого рішення залежить від кількості пристроїв: від $5000 до $15000 для типових проєктів. Наш досвід в IoT-інтеграціях — понад 7 років, понад 30 проєктів з Z-Wave. Ознайомтеся з офіційною документацією Z-Wave JS для деталей.
Оцініть свій проєкт: напишіть нам, і ми підготуємо комерційну пропозицію під ваші пристрої та вимоги. Отримайте консультацію вже сьогодні.







