MQTT
Co to je: Lehký publish/subscribe protokol nad TCP/IP, vhodný i pro úsporné senzory. Klienti se připojí k brokeru, odebírají topicy a publikují do nich. Broker je společné rozhraní, přes které si data vyměňuje všechno. dok. Mosquitto dok. HA Ve smarthome je to sběrnice mezi Zigbee2MQTT, síťovými coordinatory, Node-RED a Home Assistantem.
Jak funguje
Podle dok. Mosquitto:
- Topicy není potřeba zakládat, stačí do nich publikovat. Jsou hierarchické s oddělovačem
/, třebazigbee2mqtt/obyvak/svetlo. - Wildcardy v odběru:
+zastupuje jednu úroveň (zigbee2mqtt/+/temperature) a#všechny zbývající úrovně.#musí být na konci (zigbee2mqtt/#). - QoS (Quality of Service):
| QoS | Doručení | Kdy |
|---|---|---|
| 0 | nejvýš jednou, bez potvrzení | časté hodnoty senzorů |
| 1 | aspoň jednou, s potvrzením (může přijít dvakrát) | běžné příkazy |
| 2 | právě jednou, čtyřfázový handshake | kde vadí duplicita |
Odběratel volí maximální QoS, které přijme. Vyšší QoS je spolehlivější, ale pomalejší. Sloupec „Kdy“ je Syntéza.
- Retained zpráva: broker si ji pamatuje a hned ji pošle každému novému odběrateli jako „poslední známý stav“.
- Will (LWT): zprávu broker odešle, když se klient nečekaně odpojí. Používá se pro stav „offline“.
- Clean session = false: odběry a zprávy s QoS 1 a 2 vydrží odpojení klienta.
MQTT v Home Assistantu
Podle dok. HA:
- Nejjednodušší a nejsoukromější je vlastní broker, doporučená je Mosquitto app. ActiveMQ a RabbitMQ HA nepodporuje.
- MQTT discovery je zapnutá ve výchozím stavu. Zařízení pošle konfiguraci do topicu
homeassistant/<component>/[<node_id>/]<object_id>/configa HA ho přidá sám. Prefixhomeassistantjde změnit. - HA posílá birth zprávu po startu a LWT při odpojení. Po restartu HA jsou MQTT entity nedostupné, dokud nepřijde discovery. Zařízení proto mají na birth zprávu reagovat, nebo posílat discovery jako retained.
- Zigbee2MQTT a síťové coordinatory SLZB discovery podporují. Výchozí base topic je
zigbee2mqtta každá Zigbee síť potřebuje vlastní. manuál SLZB-OS
Zabezpečení brokeru (Mosquitto)
Podle dok. Mosquitto:
- Mosquitto 2.x ve výchozím stavu nepouští anonymní klienty (
allow_anonymous false). Výjimka: bez nadefinovaného listeneru jsou anonymní klienti povolení, ale jen z lokálního stroje. Mosquitto 1.6 a starší je pouštěl vždy. - Uživatele nastav přes
password_filenebo plugin Dynamic Security. Bez TLS jdou jména a hesla po síti čitelně. - ACL omezí, kdo smí číst nebo zapisovat které topicy.
- Porty: 1883 pro MQTT, 8883 pro MQTT přes TLS. manuál SLZB-OS
- Syntéza: mimo důvěryhodnou síť (VLAN) používej 8883 s TLS a vždy přihlašování.
Gotchas
- Na Mosquitto 2.x se zařízení bez jména a hesla nepřipojí, to je výchozí chování. dok. Mosquitto
- Po změně nastavení MQTT v SLZB-OS je potřeba restartovat Zigbee Hub. manuál SLZB-OS
- Syntéza: retained zprávy zůstávají v brokeru i po odebrání zařízení. Staré discovery zprávy pak v HA vytvářejí mrtvá zařízení. Proto se při migraci ze Z2M mažou MQTT zařízení, viz Migrace Zigbee coordinatoru.
Implementace a integrace
- Zigbee2MQTT překládá mezi Zigbee a MQTT. dok. Z2M
- SMLIGHT SLZB v režimu Zigbee Hub posílá data do HA přes MQTT. SLZB-OS má i vlastní API přes MQTT. manuál SLZB-OS
- Home Assistant (MQTT integrace) a Node-RED (MQTT in/out nody).
Souvislosti
Zdroje
- Mosquitto: mqtt(7) a mosquitto.conf(5): mqtt(7) a mosquitto.conf(5), tedy protokol a zabezpečení brokeru.
- Home Assistant documentation (instalace, pojmy, zálohy, MQTT, ZHA, SMLIGHT, UniFi): MQTT integrace v HA (broker, discovery, birth a LWT).
- SLZB-OS (SMLIGHT Manuals): MQTT v SLZB-OS.
- Zigbee2MQTT documentation (Zigbee network, stabilita, binding, párování): Zigbee2MQTT.
Intellihome