MQTT (
Message Queuing Telemetry Transport) to prosty "
Internet of Things" protokół komunikacyjny. Element centralny
Broker zarządza odbiorem, przechowaniem i transmisją wiadomości między klientami.
Klientem może być typu
Publisher (
wydawca), typu
Subscriber (
odbiorca) lub nawet
Publisher oraz
Subscriber równocześnie.
Klient typu
Publisher wysyła wiadomości na konkretny
temat (
topic)
Broker serwera, który spełnia rolę pośrednika pomiędzy wydawcą i odbiorcami.
Temat to coś w rodzaju adresu dorędzenia lub jeszcze dokładniej folder w komputerze. Ty są ułożone hierarchicznie i tworzą elastyczną strukturę danych oddzieloną za pomocą ukośników (np.
urzadzenie/czujnik1/stan).
Umożliwia dynamicznie odebierać zarówno poszczególne tematy, jak również całe grupy jednocześnie. To można osiągnąć za pomocą tzw.
wildcard(
*) (np.
urządzenie/*/stan).
Publisher może być na przykład czujnik lub miernik. /ST>em może być na przykład czujnik lub miernik.
Przeciwieństwem jest
Subscriber, ktróry rejestruje się do odbioru danego
tematu. Jeżeli
Publisher wyśle dla danego tematu nowe dane, to
Broker prześle je bezpośrednio do wszystkich
Subscriberów zarejestrowanych do danego tematu.
Subscriber może się zarejestrować do odbioru dowolnej ilości
tematów, lub może się wypisać z rejestracji.
Ponieważ, klienci komunikują się tylko z pośrednikiem (z serwerem -
Brokerem), nie muszą znać topologię sieci, ani nie muszą posiadać informację o istnieniu innych klientów - wystarczy im tylko informacja o tym, w jaki sposób połączyć się z
Brokerem.
Klient loguje się za pomocą unikalnego
"ClientID" i nieobowiązkowej nazwy użytkownika
"Username" i hasła
"Password".
Protokół
MQTT definiuje trzy poziomy potwierdzenia wiadomości
QoS (
Quality of Service)
QoS 0 - wiadomość została wysłana bez potwierdzenia i nie jest zapewnione jej doręczenie (at most once).
QoS 1 - wiadomość została dostarczona przynajmniej raz (at least once).
QoS 2 - wiadomość została dostarczona tylko raz (exactly once).
Klient typu
Publisher może wysyłać dane ze znacznikiem
Retain oraz
DUP.
Retain - Ten znacznik informuje Broker serwera, żeby wiadomość zapisał jako ostatni znany stan dla danego tematu. Ta wiadomość jest wysyłana do każdego nowego Subscribera w czasie, kiedy Publisher nieopublikował niczego nowego. Dla każdego tematu może być ustawiona jedna wiadomość Retain (Przechowywana).
(0/1 - Nie przechowywać/przechowywać wiadomość w Brokerze serwera).
DUP - Ten znacznik oznacza, że wiadomość jest ponownym wysłaniem wcześniej wysłanej wiadomości
(0/1 - Wysłanie nowej/powtórzonej wiadomości na Broker serwera).
Wsparcie
TLS v 1.3 je zaimplementowane od wersji
Pm9.0.35.
Bezpieczną komunikację aktywuje konfigurator "
Bezpieczne połączenie (TLS)". Następnie należy zmienić wartość w konfiguratorze "
Numer zdalnego portu TCP/UDP" na
8883 dla
TLS lub
8884 dla
mTLS (
mutual TLS).
Według wymaganego poziomu szyfrowania komunikacji, protokół
MQTT ustawia następujące 3 porty sieciowe:
1883 - transmisja nieszyfrowana (unencrypted)
8883 - transmisja szyfrowana (encrypted) SSL/TLS jest potrzebny ważny certyfikat Brokera serwera lub jego autorytet certyfikacyjny zainstalowany w Magazynie certyfikatów Windows
8884 - transmisja szyfrowana (encrypted) SSL/TLS jest potrzebny ważny certyfikat Brokera serwera lub jego autorytet certyfikacyjny zainstalowany w Magazynie certyfikatów Windows. Dodatkowo Broker musi mieć zainstalowany certyfikat klienta.
Patrz:
Wikipedia: Lista numerów portów TCP i UDP używanych przez protokoły do uruchamiania aplikacji sieciowych.
Jeżeli jest aktywne bezpieczne połączenie, to należy zaimportować certyfikaty do
Magazynu certyfikatów Windows. Sprawdzić ważność certyfikatu można przez uruchomienie
certmgr.msc, który otworzy
Administratora certyfikatów Windows. Klient musi mieć w katalogu
Zaufane główne urzędy certyfikacji certyfikat
Brokera serwera ewentualnie wszystkich elementów
łańcucha zaufania. Serwer nie ma żadnych dodatkowych wymagań dotyczących komunikacji za pomocą TLS.
Jednak jeżeli jest wymagane mTLS, to klient musi ponadto posiadać w katalogu
Osobiste zaimportowany swój własny certyfikat oraz swój urząd certyfikacyjny łącznie z kluczami. Po drugiej stronie serwer musi mieć w katalogu
Zaufane osoby zaimportowany certyfikat klienta i w katalogu
Zaufane główne urzędy certyfikacji certyfikat głównego urzędu certyfikacji klienta (certyfikat, który został wykorzystany do podpisania certyfikatu klienta).
Ważne: Klucze prywatne nigdy nie mogą opuścić urządzenia, do którego należą. Certyfikaty zapisane w katalogu Osobiste są wyposażone w klucz prywatny (mała ikonka klucza przy certyfikacie). W pozostayłch katalogach są zaimportowane bez klucza prywatnego.
Ograniczenie: Jeżeli certyfikaty obu stron są podpisane przez publiczny główny urząd certyfikacji (np. Let's Encrypt, GlobalSign, Entrust), to w ogóle nie jest wymagany import certyfikatów drugiej strony. Te certyfikaty są zazwyczaj wstępnie ustawione. W razie potrzeby można wykonać aktualizację
Magazynu certyfikatów Windows, żeby zawierał ostatnie wersje.
W przypadku, kiedy tak nie jest i wszystko polega na tzw. self-signed certyfikatach, to klient musi mieć zainstalowany certyfikat
Brokera serwera. Dla
mTLS jest wymagana dwukierunkowa weryfikacja tożsamości, dlatego również
Broker serwera musi mieć zainstalowany certyfikat klienta.
Linki oraz instrukcje
Komunikacja aplikacji PROMOTIC z MQTT brokerem
W kolejnych konfiguracjach początkowych jest wykorzystany klient typu
Publisher oraz
Subscriber, który podłącza się do
Brokera serwera. Następnie część
Subscribera rejestruje się do odbioru określonego
tematu i oczekuje na wiadomości. Z drugiej strony część
Publishera wysyła do
Brokera serwera dane określonych
tematów, które z kolei otrzyma
Subscriber.
MQTT konfiguracja wstępna: