Trochę teorii
Urządzenia wykorzystujące protokół MQTT nie przesyłają informacji sobie bezpośrednio, lecz wykorzystują tzw. brokera, który jest pośrednikiem w komunikacji. Stanowi on coś w rodzaju serwera, który nadzoruje wszystkie urządzenia i zarządza komunikacją pomiędzy nimi. Odbiera wiadomości nadesłane przez urządzenia, a następnie przekazuje dalej te wiadomości urządzeniom, które powinny je otrzymać.
Ważnym pojęciem jest temat (ang. topic). Każda wiadomość musi być wysłana do jakiegoś tematu. Wewnątrz tematu mogą być zdefiniowane podtematy, a wewnątrz nich mogą być jeszcze podtematy podrzędne. W ten sposób tworzy się hierarchiczna struktura danych.
Aby urządzenie mogło odczytać wiadomość, najpierw musi zasubskrybować chociaż jeden temat. Kiedy broker MQTT otrzyma jakąś wiadomość związaną z tym tematem, wówczas automatycznie roześle ją do wszystkich urządzeń, które dany temat zasubskrybowały.
Załóżmy, że w systemie automatyki domowej mamy prostą sieć czujników, które mierzą parametry pogodowe. Mamy także sterownik bramy garażowej, która może być otwarta lub zamknięta. Ponadto mamy jeden wspólny kanał, z którego odczytywać mogą wszystkie urządzenia. Drzewo tematów mogłoby wyglądać następująco:
- sensor1
- temperature = 25
- humidity = 80
- sensor2
- temperature = 20
- humidity = 75
- sensor3
- temperature = 22
- humidity = 50
- pressure = 1015
- garage = closed
- all = {„firmware_file”: „http://www.github.com/jakis_adres/nowy_firmware.bin”}
Sensory 1 i 2 są identyczne, zatem ich podtematy również są takie same. Sensor 3 mierzy dodatkowo ciśnienie powietrza, zatem ma dodatkowy podtemat z tym związany. Sterownik garażu nie ma żadnych podtematów i ma tylko przypisany stan drzwi. Temat o nazwie all odczytują wszystkie urządzenia. W tym przykładzie mamy pakiet w formacie JSON, który mówi, skąd urządzenia mają pobrać plik z nowym firmwarem – mogą go ściągnąć w taki sposób, jak przedstawiliśmy to w 7 odcinku kursu, opublikowanym w EP 11/2025.