Інтеграція Zigbee-пристроїв через IoT-хаб у мобільний додаток
Zigbee — бездротовий протокол на частоті 2.4 GHz (IEEE 802.15.4) з ячеистою топологією. Пристрої ретранслюють сигнал один через одного, що дає хороше покриття без Wi-Fi. Прямого Zigbee API в мобільних додатках немає — смартфони не мають Zigbee-радіо. Завжди потрібен хаб.
Варіанти хабів та їх API
Zigbee2MQTT — open-source мість: Zigbee USB-координатор (SONOFF Zigbee 3.0, Conbee II, CC2652P) → MQTT-брокер. Найгнучкіший варіант для кастомних додатків. Кожен пристрій публікує стан в топік zigbee2mqtt/{friendly_name}, приймає команди з zigbee2mqtt/{friendly_name}/set.
Приклад JSON стану датчика руху (Aqara):
{
"battery": 85,
"occupancy": true,
"tamper": false,
"voltage": 2985,
"linkquality": 102
}
Zigbee2MQTT також надає REST API через zigbee2mqtt/bridge/request/device/options для управління конфігурацією — корисно для налаштування з додатка.
Home Assistant — якщо Zigbee2MQTT запущен як HA addon, мобільний додаток працює через HA REST API або WebSocket API. Унірікований інтерфейс для всіх пристроїв незалежно від протоколу. POST /api/services/light/turn_on з entity_id — замість прямого MQTT.
Philips Hue Bridge — підтримує тільки Zigbee-пристрої Philips Hue. Закрита екосистема, але з відмінним REST API.
IKEA Hub — підтримує пристрої TRÅDFRI. Проприетарний протокол поверх CoAP. Інтеграція через реверс-інжиніринг або Home Assistant.
Amazon Echo (4-е покоління) / SmartThings Hub / Aqara Hub — мають вбудований Zigbee-координатор. API у кожного свій.
Zigbee2MQTT як основа для мобільного додатка
Для кастомного мобільного додатка Zigbee2MQTT — найкращий вибір. MQTT протокол простий, документація у Zigbee2MQTT чудова, підтримує 3000+ пристроїв.
Підключення мобільного клієнта до MQTT-брокера (Mosquitto) через WebSocket (ws://broker-ip:9001). На Flutter — mqtt_client:
final client = MqttServerClient.withPort('192.168.1.100', 'mobile_app_client', 9001);
client.websocketProtocols = MqttClientConstants.protocolsSingleDefault;
await client.connect();
client.subscribe('zigbee2mqtt/+', MqttQos.atLeastOnce);
client.updates!.listen((messages) {
final topic = messages[0].topic;
final payload = MqttPublishPayload.bytesToStringAsString(
messages[0].payload.message
);
// парсимо JSON, оновлюємо UI
});
Команда на пристрій:
final builder = MqttClientPayloadBuilder();
builder.addString('{"state": "ON", "brightness": 200}');
client.publishMessage('zigbee2mqtt/living_room_light/set', MqttQos.atLeastOnce, builder.payload!);
Парування нових пристроїв з додатка
Zigbee2MQTT підтримує режим парування через MQTT: zigbee2mqtt/bridge/request/permit_join з {"value": true, "time": 60} — 60 секунд відкритого вікна для нових пристроїв.
Мобільний додаток запускає режим парування кнопкою. Підписується на zigbee2mqtt/bridge/event — при появі нового пристрою приходит {"type": "device_joined", "data": {"friendly_name": "0x...", "ieee_address": "0x..."}}. Показуємо користувачу знайдений пристрій, пропонуємо дати ім'я та додати в кімнату.
Переіменування: zigbee2mqtt/bridge/request/device/rename з {"from": "0x12345678", "to": "bedroom_sensor"}.
Сітка пристроїв та маршрутизація
Zigbee-сеть самоорганізується: маршрутизатори (розетки, лампи з постійним живленням) ретранслюють сигнал для кінцевих пристроїв (батарейні датчики). Для діагностики — zigbee2mqtt/bridge/request/networkmap з {"type": "raw", "routes": true}.
Візуалізація сітки у додатку: граф вузлів та рьбер. На Flutter — graphview пакет або CustomPainter для кастомної отрисовки. Вузли: координатор, маршрутизатори (зелені), кінцеві пристрої (сірі). Рьбера: товщина пропорційна LQI (Link Quality Indicator, 0–255).
Типові проблеми
Выпадіння пристроїв. Датчик перестав публікувати дані. Zigbee2MQTT встановлює last_seen timestamp — перевіряємо у додатку, застерігаємо при затримці > N хвилин. Часто причина — батарея розрядилась або пристрій вийшов з зони покриття.
Interference з Wi-Fi. Zigbee та Wi-Fi працюють на 2.4 GHz. Wi-Fi канали 1, 6, 11 перекриваються з Zigbee каналами 11–26. Якщо сеть нестабільна — перевіряємо вибір каналу в Zigbee2MQTT (configuration.yaml, channel: 25).
Coordinator не піднімається. SONOFF Zigbee 3.0 USB Dongle Plus на деяких Linux вимагає явного вказання порту в /dev/ttyUSB0 та user в групі dialout. Для Docker — devices: ["/dev/ttyUSB0:/dev/ttyUSB0"].
Строки
Zigbee2MQTT + MQTT-клієнт у додатку, базове управління пристроями — 2–3 тижні. Парування з додатка, візуалізація сітки, діагностика, автоматизація — 5–8 тижнів. Вартість залежить від кількості типів пристроїв та додаткових функцій.







