MQTT Client (Message Queue Telemetry Transport)
Podporované typy a verzie zariadení
O protokole MQTT Sparkplug
Konfigurácia komunikačnej linky
Parametre protokolu linky
Konfigurácia komunikačnej stanice
Konfigurácia meraných bodov
Literatúra
Revízie dokumentu
Podporované typy a verzie zariadení
Protokol je implementáciou štandardu MQTT 3.1.1 (október 2014). MQTT protokol je klient/server protokol typu subscribe/publish. Je jednoduchý, má malú réžiu a je ľahko implementovateľný. Používa sa na komunikáciu M2M (Machine to Machine) a v kontexte IoT (Internet of Things). MQTT server sa nazýva aj MQTT broker.
D2000 KOM implementuje klientskú časť protokolu. Protokol je implementovaný na TCP/IP linke. Podporený je aj MQTTS (Secure MQTT, MQTT over TLS) - buď priamo v D2000 KOM procese (pomocou TLS nastavení na TCP/IP-TCP linke) alebo cez utilitu stunnel.
Pre prenos LoRaWAN dát v rámci MQTT protokolu pozri popis protokolu LoRaWan.
Čiastočne je podporený aj Sparkplug 3.0.0 štandard (Sparkplug B MQTT Payload). Podpora zahŕňa:
čítanie jednoduchých typov hodnôt
čítanie polí (s podporou Cieľového stĺpca štruktúry)
zápis jednoduchých typov hodnôt
čítanie položiek šablón (UDT)
čítanie položiek datasetov
browsovanie - zistenie zoznamu metrík
Komunikácia bola testovaná/nasadená voči:
cloudu www.TheThings.network
cloudu Loriot.io
cloudu Slovanet
Pixii PowerShaper (energy storage solution)
test.mosquitto.org (Sparkplug B)
Pozn: bola otestovaná aj komunikácia voči cloudu liveobjects.orange-business.com cez websockety (wss://liveobjects.orange-business.com:443/mqtt). Ako WSS wrapper bol použitý program https://github.com/jimparis/unwebsockify.git. Tento bol spustený s parametrami:
./unwebsockify.py --port 1883 --listen 172.16.0.1 wss://liveobjects.orange-business.com:443/mqtt
D2000 KOM proces sa pripájal k adrese 172.16.0.1 na port 1883. WSS wrapper sa pripojil na definovanú URL a zabalil dáta MQTT komunikácie do websocket obálky.
Každá PUBLISH správa obsahuje tému (Topic), samotné dáta (Payload) a úroveň potvrdzovania (QoS). PUBLISH správy môže odosielať klient aj server. Klient na začiatku komunikácie použije správu SUBSCRIBE na oznámenie, o aké témy (parameter protokolu Topic Filter) má záujem.
Protokol definuje tieto úrovne potvrdzovania PUBLISH správ - QoS (Quality of Service):
QoS_0 - správa PUBLISH nie je potvrdzovaná, môže dôjsť ku strate
QoS_1 - správa PUBLISH je druhou stranou potvrdzovaná PUBACK, môže dôjsť k duplicite
QoS_2 - správa PUBLISH je druhou stranou potvrdzovaná PUBREC, tá je spätne potvrdzovaná správou PUBREL a tá finálne správou PUBCOMP
Úroveň potvrdzovania správ posielaných procesom D2000 KOM definuje parameter protokolu Publish QoS. D2000 KOM proces považuje zápis výstupného meraného bodu za úspešne ukončený v závislosti od QoS:
QoS_0 - po úspešnom odoslaní dát cez TCP spojenie
QoS_1 - po prijatí PUBACK
QoS_2 - po prijatí PUBCOMP
Komunikácia MQTT sa začína správou CONNECT, ktorú pošle klient (D2000 KOM). Správa obsahuje prihlasovacie meno (User Name), heslo (Password) a ďalšie parametre, z ktorých sa dá nastaviť Clean Session Flag a Client ID (parameter Will Flag sa nevyužíva, podobne ako Will QoS a Will Retain, parameter Keep Alive je nastavený na 0). Server odpovedá správou CONNACK s návratovým kódom, ktorý obsahuje informáciu o úspešnosti pripojenia.
Následne klient pošle správu SUBSCRIBE s filtrom tém (parameter Topic Filter), o ktoré má záujem a požadovanou maximálnou úrovňou potvrdzovania (parameter Subscribe QoS).
Server odpovedá návratovým kódom, ktorý obsahuje informáciu o úspešnosti a maximálny QoS, ktorý bol pre požadované témy pridelený.
Nasleduje bežná komunikácia, počas ktorej klient aj server posielajú PUBLISH správy (klient s ľubovoľnou témou, server s témami zodpovedajúcimi filtru tém prijatej SUBSCRIBE správy) a podľa hodnoty parametra QoS prijatých správ PUBLISH ich potvrdzujú.
Pokiaľ server nepošle žiadnu správu dlhšie ako Ping Interval sekúnd, klient pošle PING request správu, na ktorú server musí odpovedať PING response správou (do času špecifikovaného parametrom Reply Timeout).
Pokiaľ dôjde k zmene parametrov na linke, spojenie je zavreté a znovu vytvorené.
O protokole MQTT Sparkplug
Protokol MQTT Sparkplug definuje 3 skupiny aplikácií:
Edge Node - má podporu MQTT protokolu a pripája sa k MQTT serveru. Posiela mu údaje získané z Device alebo vlastné, prípadne agregované
Device/Sensor - reprezentuje fyzické alebo logické zariadenie pripojené k Edge Node a poskytujúce údaje, procesné dáta alebo metriky
Host Application - reprezentuje spotrebiteľa dát (SCADA/MES systém, Historian, analytický nástroj), ktorý sa pripája k MQTT serveru a prijíma MQTT dáta od Edge Node/Device a prípadne poveluje. D2000 je Host Application.
MQTT Sparkplug definuje nasledovné typy správ:
NBIRTH – Birth certificate for Sparkplug Edge Nodes (informácia o pripojení sa Edge Node k MQTT Serveru)
NDEATH – Death certificate for Sparkplug Edge Nodes (informácia o strate spojenia MQTT Servera s Edge Node)
DBIRTH – Birth certificate for Devices (informácia o pripojení sa Device k Edge Node)
DDEATH – Death certificate for Devices (informácia o strate spojenia Edge Node s Device)
NDATA – Edge Node data message (dáta od Edge Node)
DDATA – Device data message (dáta od Device)
NCMD – Edge Node command message (príkaz Host Application pre Edge Node)
DCMD – Device command message (príkaz Host Application pre Device)
STATE – Sparkplug Host Application state message (informácia od stave Host Application pre Edge Node/Device [online / offline]).
MQTT Sparkplug definuje pre všetky typy správ syntax tém (Topic), ktorý má tvar namespace/group_id/message_type/edge_node_id/[device_id], kde:
namespace je konštanta spBv1.0 (pre Sparkplug B)
group_id je ľubovolný názov logickej skupiny (napr. podľa typu zariadenia, prevádzky, organizačnej štruktúry atď)
message_type je typ správy
edge_node_id je identifikátor Edge Node
device_id je identifikátor Device (iba ak je správa od/pre Device)
Príklady:
spBv1.0/Sparkplug Devices/DDATA/Marvin/Sensor1
pBv1.0/MIMIC/DDATA/20:19:AB:F4:0E:0D/sensor11
spBv1.0/SparkplugDevices/NBIRTH/JsonScada
Poznámka: správy typu STATE majú Topic v tvare spBv1.0/STATE/sparkplug_host_id, kde sparkplug_host_id je unikátny názov hostiteľskej aplikácie.
Príklady:
spBv1.0/STATE/CFGHUB2023
spBv1.0/STATE/D2Kom
Všetky typy správ výnimkou STATE majú binárny Sparkplug payload. Správy STATE majú JSON payload (obsahuje iba položky "online" (hodnota True/False) a "timestamp" (časová značka v milisekundách).
Sparkplug payload obsahuje metriky - každú požadovanú metriku je možné nakonfigurovať do jedného meraného bodu. Metrika obsahuje textový identifikátor (zadávaný v konfigurácii meraného bodu ako sparkplug_address), typ hodnoty, hodnotu (jednoduchá/pole/štruktúrovaná), voliteľne časovú značku a ďalšie atribúty. D2000 podporuje prácu s jednoduchými hodnotami a hodnotami typu pole - do meraného bodu sa uloží prvá položka poľa; je možné na meranom bode nakonfigurovať Cieľový stĺpec štruktúry, do ktorého sa uložia všetky položky poľa (resp. prvých N, ak nemá štruktúra dostatočný počet riadkov).
Pozn: ak príde metrika, ktorá má nastavený príznak is_null, meraný bod bude mať Invalid hodnotu.
Konfigurácia komunikačnej linky
Kategória komunikačnej linky: TCP/IP-TCP.
Host: IP adresa MQTT servera (prípadne redundantné adresy oddelené čiarkou alebo bodkočiarkou).
Port: číslo portu je štandardne 1883 alebo 8883 pre kryptovanú SSL/TLS variantu.
Číslo linky: nepoužité, nastavte hodnotu 0.
Pozn: Štandardný port pre MQTT protokol je 1883 resp. 8883 pre SSL/TLS verziu. D2000 KOM obsahuje implementáciu SSL/TLS varianty protokolu, prípadne je možné ju nakonfigurovať s použitím utility stunnel http://www.stunnel.org pracujúcej v klientskom móde (client = yes). Stunnel bežiaci na rovnakom počítači ako D2000 KOM by mal počúvať na lokálnom porte 1883 a po pripojení sa D2000 KOM procesu na tento port by mal komunikáciu zakryptovať pomocou SLL/TLS a poslať na cieľový MQTT server (typicky na port 8883).
Pozn: pri použití SSL/TLS spojenia je treba dať pozor na expiráciu použitých certifikátov. Dátum expirácie je možné na Linuxe zistiť príkazom
openssl x509 -text -in file.crt | grep "After"
Vynútené prerušenie spojenia: Keď sa všetky stanice na linke dostanú do simulácie alebo majú zastavenú komunikáciu, linka sa odpojí (dôjde ku zavretiu komunikačného socketu). Keď aspoň jedna stanica bude mať vypnutú simuláciu a nebude mať zastavenú komunikáciu (záložka Parametre objektu Stanica), linka sa znovu pripojí.
Parametre protokolu linky
Dialóg konfigurácia linky - záložka Parametre protokolu.
Ovplyvňujú niektoré voliteľné parametre protokolu. Môžu byť zadané nasledovné parametre protokolu linky:
Tab. č. 1
Parameter | Popis | Jednotka / rozmer | Náhradná hodnota |
|---|---|---|---|
Full Debug | Zapnutie podrobných výpisov o posielaní a prijímaní hodnôt. | YES/NO | NO |
User Name | Užívateľské meno použité v správe CONNECT na pripojenie sa k MQTT serveru. | - |
|
Password | Heslo použité v správe CONNECT na pripojenie sa k MQTT serveru. | - |
|
Topic Filter | Meno jednej témy alebo filter pre viacero tém posielaný v rámci SUBSCRIBE správy. Filtrom špecifikuje MQTT klient témy, v rámci ktorých chce prijímať správy. | - | # |
Subscribe QoS | Požadovaná maximálna úroveň potvrdzovania (QoS) posielaná v rámci SUBSCRIBE správy. | QoS_0 | QoS_1 |
Client ID | Unikátny identifikátor klienta (Client Identifier) posielaný v rámci CONNECT správy. | - | D2000kom |
Clean Session Flag | Parameter Clean Session Flag správy CONNECT. Hodnota No znamená, že server použije aktuálny stav session (spojenia) - napr. po rozpade a znovuobnovení TCP spojenia. Znamená to, že sú zaslané všetky nepotvrdené PUBLISH správy s QoS_1 a QoS_2 (a voliteľne aj QoS_0 v závislosti na implementácii). | YES/NO | NO |
Publish QoS | Úroveň potvrdzovania (QoS) použitá pri posielaní PUBLISH správ procesom D2000 KOM. | QoS_0 | QoS_0 |
Publish Retain | Nastavenie príznaku Retain použité pri posielaní PUBLISH správ procesom D2000 KOM. Aktivácia príznaku Retain spôsobí, že posledná správa poslaná procesom D2000 KOM bude na MQTT serveri dostupná iným klientom okamžite po ich pripojení, ako aj po odpojení D2000 KOM procesu. | YES/NO | NO |
Keep Alive | Parameter Keep Alive posielaný v rámci CONNECT správy. Odporúčaná hodnota Keep Alive je niekoľko minút. D2000 KOM proces posiela PING výzvy podľa nastavení parametrov Keep Alive a Ping Interval (podľa toho, ktorý interval uplynie skôr). | 0-65535 sec | 0 |
Ping Interval | Pokiaľ MQTT server neposlal za špecifikovaný časový interval žiadnu správu, D2000 KOM proces pošle výzvu PING request a očakáva odpoveď PING response (do času Reply Timeout). | 0-3600 sec | 60 |
Payload Type | Nastavenie parsovania správy:
| Text only | Text only |
Time Field Name | Ak Payload Type=JSON, tak názov poľa s časovou značkou. Ak názov nie je zadaný alebo pole nie je nájdené, hodnotám je priradený aktuálny čas. | - | - |
Time Mask | Maska pre parsovanie hodnoty v poli s časovou značkou. Špeciálne masky sú:
Pozn: od nastavení časových parametrov stanice závisí, či je čas interpretovaný ako lokálny alebo UTC s nakonfigurovaným offsetom. | - | yyyy-mm-dd hh:mi:ss.mss |
Ignore Missing Time | Ignorovanie chýbajúcej časovej značky - pokiaľ sa v JSON payloade nevyskytuje, nevypíše sa varovanie. | YES/NO | NO |
Will Flag | Parameter Will Flag správy CONNECT. Hodnota Yes znamená, že server pošle záujemcom správu Last Will v prípade straty spojenia s D2000 KOM procesom. | YES/NO | NO |
Will QoS | Úroveň potvrdzovania (QoS) použitá pri posielaní správy Last Will v prípade straty spojenia s D2000 KOM procesom. | QoS_0 | QoS_0 |
Will Retain | Nastavenie príznaku Retain použité pri posielaní správy Last Will v prípade straty spojenia s D2000 KOM procesom. | YES/NO | NO |
Will Topic | Topic použitý pri posielaní správy Last Will v prípade straty spojenia s D2000 KOM procesom. | - |
|
Will Message | Obsah správy Last Will v prípade straty spojenia s D2000 KOM procesom. | - |
|
Reply Timeout | Pokiaľ do požadovaného času MQTT server neodpovie na správy SUBSCRIBE, UNSUBSCRIBE a PING request, prípadne sa nepodarí načítať ľubovoľnú správu (a je načítaná iba jej časť), D2000 KOM proces vyhlási chybu, zavrie spojenie a znovu ho otvorí. Hodnota 0 vypína časový limit. | sec | 20 |
Wait Timeout | Timeout čakanie pri jednom čítaní z TCP spojenia. D2000 KOM opakuje čítanie spontánnych dát Max. Wait Retry krát a pokiaľ nenačíta žiadne dáta, je vyhlásený timeout a čítanie je ukončené (a môže nasledovať ďalšie čítanie alebo prípadne zápis). Zmenšením parametrov Wait Timeout a Max. Wait Retry je možné dosiahnuť rýchlejšiu odozvu D2000 KOM procesu na zápis na úkor vyššej záťaže CPU, pokiaľ MQTT server nemá žiadne dáta. | sec | 0.100 |
Max. Wait Retry | Počet opakovaní čítania z TCP spojenia. Pozri popis parametra Wait Timeout. | - | 3 |
Payload Encoding | Kódovanie poľa Payload. MQTT protokol nešpecifikuje obsah poľa Payload, štandardné kódovanie ISO-8859-1 je vhodné na textový aj binárny obsah, UTF-8 je vhodné, ak sú prenášané UTF-8 kódované texty. Aktuálne podporované kódovania sú:
| - | ISO-8859-1 |
Sparkplug parametre | |||
Report Unknown Metrics | Parameter aktivuje výpisy neznámych metrík a tém (Topicov), ktoré nemajú vlastné stanice, ale skončia na stanici s adresou ".*" (ak taká existuje). Výpisy budú v logu linky ako chybové hlášky aj keď je debug na linke vypnutý (na uľahčenie pridávania meraných bodov). | YES/NO | NO |
Nonstandard Topic | Aktivácia parsovania neštandardných SparkPlug topicov. | YES/NO | NO |
Ignore Unknown Quality | V rámci metriky je možné definovať vlastnosť (Property) s názvom Quality typu Int32. Podľa Sparkplug štandardu musí nadobúdať hodnoty 0=BAD, 192=GOOD, 500=STALE. Akúkoľvek inú hodnotu D2000 Kom proces reportuje ako chybu. Parametrom Ignore Unknown Quality je možné potlačiť tento chybový výpis. | YES/NO | NO |
Browse Dataset Mode | Parameter udáva, ktoré adresy metriky typu Dataset sa zobrazia pri browsovaní:
| ||