Saját szerverek
MQTT
Az MQTT könnyű pub/sub üzenetküldő szabvány: a broker közvetít, az eszközök témákra publikálnak és iratkoznak fel. Nálunk ez köti össze a szenzorokat.
Az MQTT egy könnyű üzenetküldő szabvány, amely gépek és eszközök között közvetít. Nem hívás-válasz alapú, hanem publikálás és feliratkozás: a küldő nem tudja, ki olvassa az üzenetet, a fogadó pedig nem tudja, ki küldte. Ez a lazaság nem hiba, hanem a lényeg, mert így a résztvevők nem függnek egymástól, és egy új fogyasztó hozzáadása nem igényel változtatást a küldő oldalon.
A szabvány szövege szerint szándékosan kicsi és egyszerű: kis üzenetfejekkel dolgozik, így olyan környezetben is elfér, ahol kevés a memória és drága a sávszélesség. A protokoll TCP/IP fölött fut, de más olyan hálózaton is működik, amely sorrendtartó, veszteségmentes és kétirányú kapcsolatot ad. Az üzenet tartalma felé közömbös: a szabvány azt sem írja elő, mi van a csomagban, csak azt, hogyan jut el.
A broker és a felek
A középpontban a broker áll. A kliensek ehhez kapcsolódnak, és a broker végzi a nehéz részt: fogadja a publikációkat, ellenőrzi a jogosultságokat, a szolgáltatási szint szerint sorba állítja az üzeneteket, és eljuttatja azokat a feliratkozókhoz. A címzés témákkal történik, és a feliratkozás mintával is megadható, ezért egy üzenet több olvasóhoz is eljuthat egyszerre.
A gyakorlatban a brokert leggyakrabban az Eclipse Mosquitto adja: nyílt forrású, az MQTT 5.0, 3.1.1 és 3.1 verziókat ismeri, és ad hozzá egy C könyvtárat, valamint a mindennapi munkához használt mosquitto_pub és mosquitto_sub parancssori klienseket is. A mérete miatt kis kártyaszámítógépen éppúgy elfut, mint egy szerveren.
Szolgáltatási szintek és üzenetkezelés
Az MQTT három szolgáltatási szintet definiál, és ezek a megbízhatóság és a költség közötti választást jelentik:
- 0 - legfeljebb egyszer: az üzenet kérésre megy, elveszhet. Szenzoradatoknál ez gyakran elég, mert a következő mérés hamar jön.
- 1 - legalább egyszer: az üzenet megérkezik, de duplikálódhat.
- 2 - pontosan egyszer: az üzenet pontosan egyszer érkezik meg, ezt a szintet ott érdemes használni, ahol egy duplikátum hibás döntést okoz.
A szabvány emellett olyan eszközöket ad, amelyek a való élethez kellenek. A megtartott üzenet a témán marad, így egy később csatlakozó olvasó azonnal megkapja a legutóbbi állapotot. Az utolsó akarat egy előre megadott üzenet, amelyet a broker akkor küld ki, ha a kliens rendellenesen szakad le: így egy elhalt eszköz nem tűnik el nyomtalanul. A tiszta kezdés jelző pedig arról dönt, hogy a kapcsolat folytatja-e a korábbi munkamenetet. A hosszú életű munkamenetek különösen mobilhálózaton hasznosak, mert lerövidítik az újracsatlakozás idejét.
Biztonság
A protokoll maga nem titkosít, de támogatja azt: az üzenetek TLS-sel rejthetők, a kliensek pedig korszerű hitelesítési eljárásokkal, például OAuth-tal azonosíthatók. A broker oldalán ehhez felhasználói fiókok és hozzáférési szabályok kellenek, mert a téma szintjén kell eldönteni, ki publikálhat és ki olvashat. Ez az az eszköz, amivel egy épületbeli szenzor nem lát rá a másik rendszer üzeneteire.
Nálunk hol van a helye
Nálunk az MQTT az eszközök nyelve. A Home Assistant ezen a buszon éri el azokat az eszközöket, amelyek nem adnak saját integrációt, a brokert pedig konténerben futtatjuk a Docker alatt, a szerveroldalt pedig a Linux adja.
Az MQTT akkor válik be, ha az üzenet kicsi és gyakori, az eszközök pedig megbízhatatlan hálózaton vannak. Ha viszont tranzakciót kell rögzíteni vagy lekérdezni, akkor nem ez a megfelelő réteg.
Tovább olvasás
- MQTT: The Standard for IoT Messaging - a szabvány bemutatása és a pub/sub modell alapjai.
- MQTT Version 5.0, OASIS Standard - a protokoll hivatalos szövege, 2019. március 7-i kiadás.
- Eclipse Mosquitto - a broker, a parancssori kliensek és a letöltések.
Az MQTT nálunk az a réteg, amely a fizikai eszközöket és a vezérlést összeköti a CyberElectro rendszereivel, pontosan azért, mert kis üzenetekkel is kiszámíthatóan működik.