====== MQTT (Message Queuing Telemetry Transport) ====== **MQTT** je jednoduchý a efektivní protokol typu **Publish-Subscribe**. Původně byl vyvinut v roce 1999 pro monitorování ropovodů prostřednictvím satelitních spojů, ale dnes dominuje světu chytrých domácností, průmyslové automatizace a propojených zařízení (IoT). Pracuje nad protokolem TCP/IP a je navržen tak, aby měl co nejmenší režii (hlavička zprávy může mít pouhé 2 bajty). ===== Architektura: Publish-Subscribe ===== Na rozdíl od klasického modelu klient-server (např. HTTP), kde klient přímo žádá server o data, v MQTT spolu zařízení nekomunikují přímo. Vše probíhá přes centrální uzel: * **Broker (Zprostředkovatel):** Centrální server, který přijímá všechny zprávy a distribuuje je příjemcům. * **Publisher (Odesílatel):** Zařízení (např. senzor teploty), které odesílá data na určité téma (**Topic**). * **Subscriber (Příjemce):** Zařízení (např. mobilní aplikace nebo termostat), které se přihlásí k odběru konkrétního tématu. ===== Témata (Topics) a struktura ===== Témata v MQTT fungují jako hierarchické adresy oddělené lomítkem. Umožňují efektivní filtrování zpráv: * Příklad: `dum/obyvak/teplota` * **Wildcards (Zástupné znaky):** * `+` : Nahrazuje jednu úroveň (např. `dum/+/teplota` vybere teplotu ve všech místnostech). * `#` : Nahrazuje všechny následující úrovně (např. `dum/#` odebírá úplně všechna data z domu). ===== Kvalita služeb (QoS - Quality of Service) ===== MQTT umožňuje definovat, jak spolehlivě má být zpráva doručena: ^ Úroveň ^ Název ^ Popis ^ | **QoS 0** | At most once | „Pošli a zapomeň“. Zpráva je odeslána jednou, doručení není potvrzeno (nejrychlejší). | | **QoS 1** | At least once | Zpráva je doručena alespoň jednou. Příjemce musí potvrdit přijetí, jinak se posílá znovu. | | **QoS 2** | Exactly once | Zpráva je doručena právě jednou. Nejspolehlivější, ale vyžaduje nejvíce komunikace (4-cestný handshake). | ===== Klíčové funkce pro IoT ===== * **Last Will and Testament (LWT):** Klient si u brokera uloží zprávu pro případ, že se nečekaně odpojí (např. dojde baterie). Broker pak tuto zprávu rozešle ostatním, aby věděli, že je zařízení offline. * **Retained Messages:** Broker si uloží poslední zprávu daného tématu. Když se připojí nový odběratel, okamžitě dostane aktuální stav, aniž by musel čekat na nové vysílání senzoru. * **Keep Alive:** Pravidelné "ping" zprávy, kterými zařízení potvrzuje, že je stále online, i když zrovna neposílá žádná data. ===== Srovnání: MQTT vs. HTTP ===== ^ Vlastnost ^ HTTP ^ MQTT ^ | **Model** | Request/Response | Publish/Subscribe | | **Hlavička** | Stovky bajtů (textová) | Jednotky bajtů (binární) | | **Spotřeba** | Vysoká | Velmi nízká | | **Stav** | Bezestavový | Udržuje trvalé spojení | ===== Využití v praxi ===== - **Chytrá domácnost:** Propojení žárovek, vypínačů a senzorů (např. software Home Assistant). - **Průmysl 4.0:** Sběr telemetrie ze strojů ve výrobních halách. - **Doprava:** Sledování polohy vozidel v reálném čase. - **Facebook Messenger:** Využívá upravenou verzi MQTT pro rychlé doručování zpráv s nízkou spotřebou baterie na mobilu. > **Populární brokeři:** Mosquitto (nejpoužívanější open-source), HiveMQ, EMQX nebo cloudové služby jako AWS IoT Core. --- **Viz také:** [[amqp|AMQP]], [[iot|Internet věcí (IoT)]], [[tcp-ip|TCP/IP]], [[home-assistant|Home Assistant]]