Kursy • Poradniki • Inspirujące DIY • Forum

MQTT - co warto wiedzieć?

MQTT to lekki protokół komunikacyjny, który pozwala urządzeniom IoT wymieniać krótkie wiadomości przez centralny serwer, tzw. broker. Dzięki niemu czujnik na ESP32 może wysłać pomiar temperatury, a centrala inteligentnego domu czy telefon odbiorą go w ułamku sekundy. To jeden z najczęściej używanych protokołów w projektach DIY i systemach automatyki domowej.

MQTT - co to jest?

Wiele osób zastanawia się, co to jest MQTT - sprawa jest prosta. To zestaw zasad, według których urządzenia w sieci wysyłają i odbierają wiadomości. Zamiast łączyć się ze sobą bezpośrednio, wszystkie rozmawiają z jednym pośrednikiem. Protokół działa na TCP/IP, więc wystarczy mu zwykła sieć Wi-Fi albo Ethernet.

MQTT powstało w 1999 roku. Opracowali je Andy Stanford-Clark z IBM i Arlen Nipper do monitorowania rurociągów naftowych, które łączyły się z centralą przez drogie łącze satelitarne. Stąd główne cechy protokołu: minimalny narzut danych i niskie zużycie energii. Nazwa pochodzi od rodziny produktów IBM MQ, ale od 2013 roku skrót oficjalnie niczego nie rozwija.

MQTT - schemat publikacji wiadomości przez czujnik i jej odbioru przez subskrybentów za pośrednictwem brokera

Zasada działania MQTT - publikacja i subskrypcja przez broker (grafika AI)

Dziś MQTT jest otwartym standardem organizacji OASIS (wersje 3.1.1 z 2014 roku i 5.0 z 2019 roku) oraz normą ISO/IEC 20922. W wersji 5.0 doszły m.in. kody przyczyn błędów, współdzielone subskrypcje i czas ważności wiadomości.

Jak działa MQTT?

Komunikacja opiera się na modelu publikuj-subskrybuj (ang. publish/subscribe). Urządzenie, które ma coś do przekazania, publikuje wiadomość w określonym temacie (ang. topic). Broker odbiera ją i rozsyła do wszystkich klientów, którzy wcześniej zasubskrybowali ten temat. Nadawca nie musi wiedzieć, kto odbierze dane, ani nawet czy ktokolwiek ich słucha.

Tematy mają budowę hierarchiczną, podobną do ścieżek plików, np. dom/salon/temperatura albo dom/garaz/brama/stan. Subskrybent może użyć dwóch symboli wieloznacznych:

  • + zastępuje jeden poziom, np. dom/+/temperatura obejmuje temperaturę ze wszystkich pomieszczeń,
  • # zastępuje wszystkie kolejne poziomy, np. dom/# obejmuje wszystkie wiadomości z domu.

Co ciekawe, sama treść wiadomości może być dowolna - liczba, tekst, JSON albo dane binarne. Protokół jej nie interpretuje, dlatego to od nas zależy, w jakim formacie urządzenia będą się porozumiewać.

QoS w MQTT - poziomy jakości usługi

Dla każdej wiadomości można wybrać poziom QoS (ang. Quality of Service), czyli gwarancję dostarczenia. Im wyższy poziom, tym pewniejsze doręczenie, ale też więcej przesyłanych danych:

  • QoS 0 - wiadomość wysyłana jest raz, bez potwierdzenia (wyślij i zapomnij),
  • QoS 1 - nadawca powtarza wysyłkę, aż dostanie potwierdzenie, więc wiadomość może dotrzeć więcej niż raz,
  • QoS 2 - dwuetapowe potwierdzenie gwarantuje, że wiadomość dotrze dokładnie raz.

Warto znać też dwie przydatne funkcje. Wiadomość z flagą retain broker zapamiętuje i wysyła od razu każdemu nowemu subskrybentowi - dzięki temu panel po uruchomieniu od razu zna np. stan bramy. Z kolei ostatnia wola (ang. last will) to wiadomość, którą broker opublikuje sam, gdy urządzenie nieoczekiwanie straci połączenie.

MQTT na ESP32 i Arduino - jak zacząć?

Do pierwszych testów potrzebny jest broker. Najpopularniejszy jest darmowy Mosquitto, który można uruchomić na komputerze, serwerze NAS albo na Raspberry Pi (RPi). Domyślnie broker nasłuchuje na porcie 1883, a połączenia szyfrowane TLS obsługuje na porcie 8883.

Po stronie urządzenia sprawdzi się każda płytka z dostępem do sieci, np. z układem ESP32 albo ESP8266. W Arduino IDE najczęściej korzysta się z biblioteki PubSubClient. Wysłanie pomiaru sprowadza się do kilku linii:

client.setServer("192.168.1.10", 1883);   // adres brokera
client.connect("czujnik-salon");           // unikalny identyfikator klienta
client.publish("dom/salon/temperatura", "21.5");

Odbiór działa podobnie - urządzenie subskrybuje temat funkcją subscribe(), a każda nowa wiadomość trafia do wskazanej funkcji. W ten sposób ESP32 może jednocześnie wysyłać pomiary i odbierać polecenia, np. włączenia przekaźnika.

MQTT w Home Assistant i projektach IoT

MQTT jest wspólnym językiem wielu systemów inteligentnego domu. Obsługuje go m.in. Home Assistant, a projekt Zigbee2MQTT tłumaczy na ten protokół komunikaty z czujników Zigbee. Z MQTT korzystają też popularne oprogramowania do gotowych urządzeń Wi-Fi, np. Tasmota w gniazdkach i przekaźnikach. Przykład własnego systemu sterowania klimatyzacją, w którym moduły M5Stack wymieniają dane przez broker MQTT, widoczny jest poniżej.

MQTT - schemat systemu sterowania klimatyzacją z czujnikiem ENV III, modułem AtomS3R i brokerem MQTT

Przykład systemu sterowania klimatyzacją z MQTT

Moduł AtomS3R odczytuje temperaturę i wilgotność z czujnika, publikuje je w brokerze i jednocześnie subskrybuje temat z poleceniami, które przez podczerwień przekazuje do klimatyzatora. Panel w przeglądarce działa odwrotnie - subskrybuje stan i publikuje polecenia.

Warto pamiętać, że domyślnie MQTT przesyła dane i hasła otwartym tekstem. W sieci domowej to zwykle wystarczy, ale brokera nigdy nie należy wystawiać do internetu na porcie 1883. Gdy urządzenia mają łączyć się spoza domu, trzeba włączyć logowanie użytkowników i szyfrowanie TLS (port 8883) albo korzystać z VPN.

Co o tym sądzisz? Oceń ten wpis:

Średnia ocena 5 / 5. Głosów łącznie: 1

Nikt jeszcze nie głosował, bądź pierwszy!

Artykuł nie był pomocny? Jak możemy go poprawić? Wpisz swoje sugestie poniżej. Jeśli masz pytanie to zadaj je w komentarzu - ten formularz jest anonimowy, nie będziemy mogli Ci odpowiedzieć!

Co o tym sądzisz? Oceń ten wpis:

Średnia ocena 5 / 5. Głosów łącznie: 1

Nikt jeszcze nie głosował, bądź pierwszy!

Artykuł nie był pomocny? Jak możemy go poprawić? Wpisz swoje sugestie poniżej. Jeśli masz pytanie to zadaj je w komentarzu - ten formularz jest anonimowy, nie będziemy mogli Ci odpowiedzieć!

Odnośniki do niektórych produktów umieszczone w tym wpisie prowadzą do głównego partnera serwisu – sklepu Botland. Nie są to linki afiliacyjne. Na tej podstronie opisaliśmy na czym dokładnie polega nasza współpraca.