Vissza az eszközökhöz

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.

3 perc olvasás

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

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.

Címkék
  • protokoll
  • IoT
  • pub/sub
  • broker
  • szenzor