MQTT protokol a klient

Tento článek, zabývající se MQTT protokolem volně navazuje na předchozí článek o měření teploty pomocí NTC čidla. Jednoduché vstoupení do aktuálního článku je možné popsat na jednoduchém příkladu použití. Když dojde k úspěšnému změření teploty, je nutné tuto hodnotu ‚předat‘ dále, aby s ní mohlo být náležitě naloženo. Zpracování teploty je možné si představit například tak, že pokud dojde k překročení dané hodnoty, dojde k vyhlášení alarmu.

MQTT protokol je k přenosu takových informací přímo určen. MQTT zkratka v době vzniku protokolu znamenala Message Queuing Telemetry Transport. V dnešní době je ovšem protokol používán v tolika různých případech, že prakticky nemá smysl tuto zkratku překládat. Důležité je brát v potaz pár základních stavebních kamenů.

  • Používá se TCP/IP spojení
  • Jedná se o protokol typu přihlas / publikuj
  • Data se odesílají, případně čtou z takzvaných témat
  • Dva typy uzlů, zařízení / zprostředkovatel

Zařízení je koncový bod sítě, může se jednat buď o producenta, případně o konzumenta dané informace. V každém případě komunikace mezi nimi probíhá prostřednictvím zprostředkovatele (broker). Aby komunikace mezi nimi mohla vůbec začít, je nutné zaregistrovat jak producenta, tak i konzumenta a to u zprostředkovatele.

Registrace u zprostředkovatele proběhne právě jednou a to až po navázání spojení. Producent i konzument se registrují pro stejné téma. Při registraci tématu je možné vybrat buď jedno specifické téma ‚/teplota/digi/cidlo-123‚, případně podskupinu témat ‚/teplota/digi/+‘, nebo celou skupinu témat ‚/teplota/#‚.

  • symbol + zastupuje právě jednu skupinu
  • symbol # zastupuje všechny následující skupiny

Nakonec lze zařídit i registraci na základě regulárního výrazu, tato volba ale velmi záleží na kvalitách brokera a klienta.

Na obrázku níže je zachycena komunikace mezi MQTT koncovým bodem a zprostředkovatelem (brokerem).

  • Pakety 1 – 3 navazují TCP spojení
  • Paket 4: klient vysílá protokolový connect
  • Paket 6: zprostředkovatel akceptuje connect
  • Paket 8: klient publikuje zprávu k danému tématu
  • Paket 9: klient žádá o rozpojení komunikace
  • Paket 10: zprostředkovatel vysílá právě obdrženou zprávu klientům
  • Paket 13: TCP/IP spojení ukončeno

Jak je vidět ze záznamu komunikace, kromě vlastního navázání TCP/IP spojení, je vysláno naprosté minimum informace směrem od koncového bodu ke zprostředkovateli. Tato výhoda je navíc ještě několikanásobně zřetelnější v případech, kdy tato informace má být distribuována několika odděleným koncovým bodům. Při použití protokolů bez centrálního musí dojít k navázání spojení mezi každými dvěma body a aktualizaci hodnoty. Naproti tomu při použití MQTT protokolu je aktualizace hodnoty přenesena pouze do centrálního bodu a odtud distribuována k ostatním koncovým bodům. Tento přístup je výhodný především u zařízení pracujících na baterii.

Druhou nespornou výhodou je fakt, že dochází k přenosu informace pouze v případě její změny (vynucené aktualizace). Toto je opět velkou výhodou bateriově napájených zařízení. V základní implementaci neexistuje přístup (příkaz), kterým by bylo možné vyžádat aktualizaci hodnoty. Pokud pomineme přístup, kdy bude jedno téma vyhrazeno pro tyto účely.

Předchozí výhoda je rovněž i nevýhodou, například když dojde k navázání spojení a registraci na téma, které je aktualizováno například jednou za x hodin. Pak by totiž došlo k situaci, kdy by několik hodin nebyla známa poslední hodnota. K tomu slouží parametr zprávy ‚retain‘. Zpráva označená tímto flagem bude zaslána všem nově připojeným koncovým bodům ihned po navázání spojení.


Posted

in

, ,

by

Tags: