In acest articol vom discuta despre MQTT broker & client si cum ajuta acesta in Home Assistant.
MQTT este un protocol de mesaje, contruit peste TCP/IP, folosit in IoT in comunicarea dintre dispozitive. Pe scurt, modul de comunicare consta in 2 functii principale pentru un dispozitiv:
- publica un mesaj – isi anunta starea si isi expune functiile suportate prin publicarea unui mesaj (payload) pe un anumit canal unic (topic);
- primeste un mesaj – isi actualizeaza starea, functie de payload-ul primit pe topicul lui.
Avantajele acestui protocol sunt (nu te speria daca nu-ti sunt clare):
- consumul redus de latime de banda pentru a trimite informatii;
- ofera o comunicare bidirectionala intre dispozitive;
- suporta milioane de dispozitive conectate simultan;
- siguranta trimiterii mesajele dpdv erori aparute in acest proces, pe 3 nivele diferite, in functie de necesitati (QoS);
- conexiuni persistente
- securitate – mesajele se pot trimite criptat TLS sau folosind metode de autentificare gen Oauth.
Structura client/broker, ai nevoie de:
- un client care sa se conecteze la broker si sa trimita informatii pe anumite topicuri sau sa asculte pe anumite topicuri. Exemplu de clienti HomeAssistant prin integrarea MQTT, addon-ul Zigbee2mqtt, Z-Wave JS to MQTT etc.;
- un server care sa gestioneze mesajele primite de la client, functie de topicuri. Se poate folosi un server public MQTT sau cu ajutorul addon-ului open source Mosquitto Broker din HomeAssistant.
Exemplu
Sa presupunem ca avem un Broker MQTT la care se conecteaza 3 clienti MQTT (Zigbee2MQTT, Z-Wave JS to MQTT si HomeAssistant) si device-urile fizice pe care vrem sa controlam din HomeAssistant.
Sa discutam pe imaginea de mai sus si sa vedem fiecare lucru ce rol are:
- la mijloc avem MQTT Broker care primeste, stocheaza si transmite mesaje. Broker-ul se poate instala ca addon din HA;
- in stanga Zigbee2Mqtt care permite comunicarea dintre device-urile zigbee (in cazul nostru un termometru si un bec) si Broker. Este in rol de client MQTT si se poate instala ca addon din HA. Pentru a face comunicarea cu device-urile zigbee pe frecventa de ~2,4 GHz este nevoie si de partea hardware, un stick USB gen Conbee II, Sonoff Dongle Plus 3.0 etc.;
- sus Z-WaveJsToMQTT care permite comunicarea dintre device-urile z-wave (in cazul nostru un senzor de miscare si o priza) si Broker. Esre in rol de client MQTT si se poate instala ca addon din HA. Pentru a face comunicarea cu device-urile z-wave pe frecventa de ~868 MHz este nevoie si de partea hardware, un stick USB gen Aeotec Gen5+ etc.;
- si in final, in dreapta avem HA pe care-l facem client de MQTT prin integrarea MQTT care este built-in.
Cum comunica toate acestea intre ele folosind MQTT, sa discutam despre priza z-wave:
- addon-ul Z-Wave JS to MQTT comunica cu priza prin stick-ul USB si ii permite sa se inregistreze. In timpul inregistrarii priza comunica addon-ului toate feature-urile pe care le suporta (on/off, consum etc.);
- addon-ul Z-Wave JS to MQTT compune un mesaj prin care trimite la Broker, pe un topic nou (ex: zwave/priza), toate datele primite de la priza si inca un mesaj de tip MQTT Discovery pe un al doilea topic;
- HA asculta mesajele de la Broker (prin integrarea MQTT) si primeste acel mesaj MQTT Discovery, care instruieste HA sa creeze entitati noi cu proprietatile prizei si care este topicul la care sa faca subscribe HA pentru a afla sau publica schimbarile de stare pentru priza;
- mergem in HA la entitatea de priza prin care controlam on/off si ii ziceam sa fie ON;
- HA va publica mesajul in topicul la care a fost instruit mai sus sa publice schimbarile de stare pentru priza;
- addon-ul Z-Wave JS to MQTT asculta pe topicul de stare pentru priza, va primi comanda de ON si o va trimite mai departe la priza prin stick.
Cam asa se plimba datele, prezentate intr-un format minimalist. Ce m-a ajuta pe mine sa urmaresc usor ce se intampla in Broker-ul de MQTT este aplicatia MQTT Explorer, care este de fapt un client MQTT care prezinta vizual topic-urilor existente.
Faptul ca addon-ul Z-Wave JS to MQTT poate functiona si fara MQTT, ca exista si alte addon-uri pe care le puteti folosi in HA etc. nu fac subiectul acestui articol.