====== Protokol MQTT (Message Queuing Telemetry Transport) ====== **MQTT** je extrémně lehký síťový protokol určený pro přenos zpráv mezi zařízeními. Byl navržen v roce 1999 Andy Stanford-Clarkem (IBM) a Arlenem Nipperem (Arcom) původně pro monitorování ropovodů prostřednictvím satelitních linek. dnes je MQTT jedním z nejpoužívanějších a de facto standardních komunikačních protokolů v oblasti **Internetu věcí (IoT)** a průmyslové automatizace. Jeho hlavní předností je minimální režie (hlavička zprávy může mít pouhé 2 bajty), nízké nároky na přenosové pásmo a spolehlivost i na nestabilních nebo zarušených sítích. ===== Princip fungování: Publish/Subscribe ===== Na rozdíl od klasického webového modelu HTTP (který funguje na principu klient-server / požadavek-odpověď), MQTT využívá architekturu **Publish/Subscribe** (Publikuj/Odebírej). Zařízení spolu nikdy nekomunikují napřímo, ale prostřednictvím centrálního bodu zvaného **MQTT Broker**. * **Broker (Zprostředkovatel):** Centrální server, který přijímá všechny zprávy, filtruje je a distribuuje je správným příjemcům. * **Publisher (Publikující):** Zařízení (např. senzor teploty), které posílá data na broker pod konkrétním tématem. * **Subscriber (Odběratel):** Zařízení nebo aplikace (např. mobilní aplikace nebo řídicí jednotka), která se přihlásí k odběru určitého tématu a od brokera automaticky dostává všechny zprávy, které pod toto téma spadají. ===== Témata (Topics) a jejich struktura ===== Zprávy jsou v MQTT směrovány na základě tzv. **témat (topics)**, což jsou v podstatě textové řetězce strukturované pomocí lomítek, podobně jako adresáře v počítači. Příklad struktury témat v chytré domácnosti: domov/prizemi/obyvak/teplota domov/prizemi/kuchyn/svetlo/stav domov/1patro/ložnice/vlhkost ==== Divoké karty (Wildcards) ==== Při odběru témat (Subscribe) lze využít speciální znaky pro přihlášení k více tématům najednou: * **Jednoúrovňová divoká karta (+):** Nahrazuje právě jednu úroveň hierarchie. * Odběr ''domov/+/obyvak/teplota'' zachytí ''domov/prizemi/obyvak/teplota'' i ''domov/1patro/obyvak/teplota''. * **Víceúrovňová divoká karta (#):** Nahrazuje všechny následující úrovně na konci řetězce. * Odběr ''domov/prizemi/#'' zachytí úplně všechna data z přízemí (teplotu, stavy světel atd.). ===== Úrovně kvality služeb (QoS - Quality of Service) ===== MQTT umožňuje definovat, jak spolehlivě má být zpráva doručena. K tomu slouží tři úrovně QoS: ^ Úroveň ^ Název ^ Popis ^ | **QoS 0** | At most once (Nejvýše jednou) | Zpráva je odeslána bez potvrzení doručení. Nejrychlejší přenos, hrozí ztráta zprávy při výpadku (vhodné pro periodické měření teploty). | | **QoS 1** | At least once (Alespoň jednou) | Broker garantuje doručení zprávy, ale kvůli opakovaným pokusům může zpráva dorazit vícekrát. Příjemce musí odeslat potvrzení (PUBACK). | | **QoS 2** | Exactly once (Přesně jednou) | Nejbezpečnější a nejpomalejší režim. Čtyřcestný handshake zajišťuje, že zpráva bude doručena právě jednou, bez duplicit (vhodné pro kritické alarmy nebo finanční transakce). | ===== Speciální funkce MQTT ===== * **Retained Messages (Zadržené zprávy):** Broker si může zapamatovat poslední odeslanou zprávu na daném tématu. Když se nový odběratel přihlásí k tomuto tématu, okamžitě tuto zprávu obdrží a nemusí čekat, až senzor pošle nová data. * **Last Will and Testament (Poslední vůle):** Klient může při připojení definovat zprávu, kterou má broker rozeslat ostatním v případě, že se klient nečekaně odpojí (např. kvůli vybité baterii nebo ztrátě signálu). Ostatní systémy se tak ihned dozví o výpadku zařízení. * **Keep Alive:** Pravidelné "pingání" mezi klientem a brokerem pro ověření, že je spojení stále aktivní. ===== Populární MQTT Brokery ===== Pokud si chceš postavit vlastní IoT infrastrukturu, existuje několik osvědčených řešení: * **Eclipse Mosquitto:** Velmi populární, lehký open-source broker. Ideální pro běh na Raspberry Pi v domácí automatizaci. * **EMQX:** Robustní, vysoce škálovatelný broker vhodný pro firemní a průmyslové nasazení s miliony připojených zařízení. * **HiveMQ:** Další enterprise řešení s vynikající podporou cloudových integrací. ---- //Související články:// * [[it:iot:index|Internet věcí (IoT) a jeho základy]] * [[it:hardware:embedded|Vestavěné systémy a mikrokontroléry (ESP32, Arduino)]] * [[it:net:protocols_comparison|Srovnání protokolů: MQTT vs HTTP vs CoAP]]