Клиент приходит с задачей: управлять двадцатью 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 недель. Стоимость рассчитывается индивидуально под конкретный проект. Наш опыт в IoT-интеграциях — более 7 лет, свыше 30 проектов с Z-Wave. Ознакомьтесь с официальной документацией Z-Wave JS для деталей.
Оцените свой проект: напишите нам, и мы подготовим коммерческое предложение под ваши устройства и требования. Получите консультацию уже сегодня.







