Promotic
Zalogowanie logon

Komunikacja przy pomocy protokołu komunikacyjnego MQTT

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
- Broker serwera Mosquitto MQTT do pobrania: https://mosquitto.org/download
- Publiczny MQTT Broker serwer przeznaczony do testowania (online, bez pobierania): https://test.mosquitto.org/; Certyfikat Mosquitto Broker serwera: https://test.mosquitto.org/ssl/mosquitto.org.crt; Instrukcja dotycząca wytworzenia certyfikatu klienckiego: https://test.mosquitto.org/ssl/


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:

Historia:
Pm9.00.35: Dodane wsparcie bezpiecznego połączenia za pomocą TLS v 1.3.
Pm9.00.15: Usunięty błąd: Uaktualnienie oraz korekta drivera zgodnie ze standardem MQTT5.
Pm9.00.03: Wytworzono
© MICROSYS, spol. s r.o.Update cookies preferences