...
Protokol MQTT Sparkplug definuje 3 skupiny aplikácií:
- Edge Node - má 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 Reprezentuje fyzické alebo logické zariadenie pripojené k k Edge Node a poskytujúce údaje, procesné dáta alebo metriky.
- Host Application - reprezentuje 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.
...
- Pokiaľ MQTT server podporuje Topic aliasy, použite MQTT Version = MQTT 5.0, a nastavte Topic Alias Maximum na hodnotu väčšiu ako je počet staníc na linke (pre Payload Type = Sparkplug Edge Node) resp. väčšiu ako počet topicov, ktoré sú očakávané od MQTT brokera (pre Payload Type = Text only / JSON). Na strane MQTT brokera zabezpečte, že jeho hodnota Topic Alias Maximum bude väčšia, ako počet topicov, ktoré budú posielané D2000 KOM procesu - takže namiesto textových topicov budú môcť byť použité numerické aliasy.
Pozn: hodnota Topic Alias Maximum, ktorú MQTT broker posiela pri pripájaní ako parameter CONNACK správy, je viditeľná v logoch komunikácie:
09:31:12.086 13-05-2025|D|MQTT> CONNACK Property # 1 Topic Alias Maximum ( 34)
09:31:12.087 13-05-2025|T|MQTT> Recv:<00><0A>
09:31:12.088 13-05-2025|D|MQTT> CONNACK Property value= 10 - Nastavte Subscribe QoS = QoS_0, aby sa nevyžadovali potvrdzovania PUBLISH správ (pokiaľ nie sú z nejakých dôvodov potrebné). Pokiaľ je navyše aktívne aj TLS, tak toto spôsobí, že malý paket (napr. PUBACK pre QoS_1) je zašifrovaný a výsledkom je väčší šifrovaný paket.
- Použite aliasy pre metriky (pre pre Payload Type = Sparkplug Edge Node): automatické pomocou parametra Sparkplug Alias Mode=Automatic (HOBJ) alebo manuálne pomocou položky SAL=alias v adrese meraného bodu. Pokiaľ použijete manuálne aliasy, používajte nízke čísla (aliasy 0-127 sa zakódujú ako 1 bajt).
- Pre Payload Type = Sparkplug Edge Node: pri väčšom počte zmien výstupných meraných bodov odporúčame nastaviť parameter Batch Size na väčšiu hodnotu ako je defaultná (10) a prípadne zvýšiť parameter Delay v časových parametroch stanice. To spôsobí, že sa bude generovať menej správ (a každá bude obsahovať viacero metrík), čo znižuje réžiu potrebnú na prenesenie jednej metriky. Ak sa konkrétne merané body menia často, v správe môže byť aj niekoľko hodnôt toho istého meraného bodu (s časovými značkami). Nevýhodou je oneskorenie hodnôt.
...
| Kľúčové slovo | Plný názov | Popis | Jednotka | Náhradná hodnota | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Subscribe Station Address | Ak má tento parameter hodnotu YES, do SUBSCRIBE správy je pridaný aj Topic súvisiaci s adresou stanice:
| YES/NO | NO | ||||||||
| Station Will Topic | Will topic zariadenia. Ak je tento parameter nastavený a je prijatá správa so zhodným topicom, stanica prejde do komunikačnej chyby (StHardErr) a hodnoty meraných bodov sa zneplatnia. Takto je možné emulovať štandardné správanie, ktoré nastane pri chybe komunikácie so zariadením (aj keď komunikácia medzi procesom D2000 Kom a MQTT brokerom je funkčná). Ak Payload Type = Sparkplug Host, nie je nutné zadávať tento parameter - ak príde NDEATH/DDEATH správa s topicom, ktorý zodpovedá adrese stanice, stanica prejde do komunikačnej chyby. | ||||||||||
| Station Will Payload | Obsah Will správy. Ak je tento parameter nastavený a je prijatá správa so zhodným topicom ako definuje parameter Station Will Topic, musí byť navyše zhodný aj Payload. Ak tento parameter je prázdny reťazec, stačí zhoda topiccu s parametrom Station Will Topic. Pozn: tento parameter bol implementovaný kvôli MQTT brokerom, ktorí posielajú správy s rovnakým Topic pri pripojení/odpojení zariadenia, pričom rozdiel je iba v Payloade. Ak Payload Type = Sparkplug Edge Node, tento parameter je ignorovaný. | ||||||||||
| Payload Type | Nastavenie parsovania správy (preťaženie linkového parametra Payload Type):
| Default Text only JSON Sparkplug | Default | ||||||||
| Time Field Name | Ak Payload Type = JSON, tak názov poľa s časovou značkou - preťaženie linkového parametra Time Field Name. | - | - | ||||||||
| Time Mask | Maska pre parsovanie hodnoty v poli s časovou značkou - preťaženie linkového parametra Time Mask). Pozn: od nastavení časových parametrov stanice závisí, či je čas interpretovaný ako lokálny alebo UTC s nakonfigurovaným offsetom. | - | - | ||||||||
MQTT 5.0 parametre | ||||||||||||
| MQTT 5.0 Compression | Kompresia payloadu pri posielaní. Ak je nastavená hodnota application/gzip, v hlavičke PUBLISH správy sa nastaví parameter Content Type na hodnotu application/gzip a payload sa skomprimuje (GZIP), čo šetrí prenosovú kapacitu pri väčších textových správach. Parameter je použitý iba pre MQTT Version = MQTT 5.0. Pozn: Ak pri príjme správy je nájdený parameter Content Type s hodnotou application/gzip, vykoná sa automaticky dekompresia payloadu - tento parameter nemusí byť nastavený. | None application/gzip | None | ||||||||
Sparkplug parametre | ||||||||||||
| Send Node Control/Rebirth | Ak Payload Type = Sparkplug Host, pri pripojení sa k MQTT | Send Node Control/Rebirth | Ak Payload Type = Sparkplug Host, pri pripojení sa k MQTT serveru sa pošle na SparkPlug stanicu príkaz (NCMD alebo DCMD) s metrikou 'Node Control/Rebirth'. Odpoveďou by mala byť správa (NBIRTH/DBIRTH) so všetkými aktuálnymi metrikami. | YES/NO | YES | ||||||
| Batch Size | Ak Payload Type = Sparkplug Edge Node: Parameter udáva maximálny počet hodnôt (metrík), ktoré sú poslané v jednej správe (NDATA/DDATA). Parameter umožňuje optimalizáciu počtu MQTT správ (viac menších alebo menej väčších s oneskorením). Čítanie hodnôt zo stanice (funkcia ReadAllPoints) spôsobí poslanie nabuffrovaných hodnôt, aj keď ešte nebolo dosiahnuté nakonfigurované maximum (tj. väčšie časové oneskorenie v parametroch stanice spôsobí, že sa môže nabuffrovať viacej hodnôt). | 1-1000 | 10 | ||||||||
| Store & Forward | Ak Payload Type = Sparkplug Edge Node: Parameter umožnuje zmeniť Store & Forward funkcionalitu, ktorú pre všetky stanice na linke definuje linkový parameter Store & Forward. Hodnota Default znamená použitie nastavenia nakonfigurovaného na linke. | Default False True | Default | ||||||||
| Store & Forward Batch Size | Pokiaľ je aktívna Store & Forward funkcionalita (viď parameter Store & Forward), parameter udáva maximálny počet historických hodnôt, ktoré sú poslané v jednej správe (NDATA/DDATA) po obnovení komunikácie. | 1-1000 | 10 | ||||||||
| Sparkplug Alias Mode | Ak Payload Type = Sparkplug Edge Node, parameter určuje režim používania aliasov. Aliasy sú numerické (celočíselné - Int64) identifikátory, používané voliteľne v správach s dátami a príkazmi (NDATA/DDATA/NCMD/DCMD) namiesto textových identifikátorov, z dôvodu zmenšenia veľkosti správ. Ak sa používajú, v správe NBIRTH/DBIRTH sú uvedené spolu s textovými identifikátormi. Aliasy musia byť unikátne v rámci všetkých meraných bodov patriacich pod jednu stanicu.
| Default (SAL=alias) Automatic (HOBJ) Off | Default (SAL=alias) | ||||||||
| Sparkplug-to-JSON Mode | Parameter definuje formát JSON dát pre meraný bod s adresou IN_SP2JS (konverzia Sparkplug payloadu na JSON). JSON dáta sú buď generované v kompaktnom stave vhodnom pre ďalšie strojové spracovanie (polia oddelené medzerami), alebo v tvare vhodnom na zobrazenie pre ľudí (multiline formát). | Compact Multiline | Compact | ||||||||
| Sparkplug Compression | Voliteľná kompresia používaná pre NDATA/DDATA/NCMD/DCMD/NBIRTH/DBIRTH správy. Ak je výsledná správa po použití kompresie väčšia ako pôvodná (napr. v dôsledku pridaných informácií), pošlú sa dáta neskomprimované. | None | None | ||||||||
| Kotva | ||||
|---|---|---|---|---|
|
...
| Typ bodu | Adresa | Popis | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Body pre čítanie dát poslaných MQTT serverom správou PUBLISH (zvyčajne používané v textovom režime alebo režime JSON, zriedkavo v režime Sparkplug). Pozn: hodnoty bodov sú nastavené D2000 KOM procesom v poradí IN_TOPIC, IN_DATA a IN_ID. Nie je nutné, aby konfigurácia obsahovala všetky tri body. | ||||||||||||||||||||||
| TxtI |
| Téma (Topic) prijatej správy PUBLISH. | ||||||||||||||||||||
| TxtI |
| Dáta (Payload) prijatej správy PUBLISH. | ||||||||||||||||||||
| Ci |
| Identifikátor paketu (Packet Identifier) správy PUBLISH, ktorý závisí od úrovne potvrdzovania (QoS). Pre správy posielané s QoS_0 je identifikátor nulový, pre QoS_1 a QoS_2 je to kladné 16-bitové číslo. Na linke TCP/IP-TCP je identifikátor monotónne rastúci, na linke TCP/IP-TCP Redundant sa môžu striedať hodnoty z dvoch monotónne rastúcich postupností (takže sa môžu aj opakovať), takže platí odporúčanie uvedené v nasledujúcej poznámke: Pozn: Ak MQTT server posiela aj správy s úrovňou potvrdzovania QoS_0 a je nakonfigurovaný bod ACK_ID, odporúčame na záložke Filter aktivovať voľbu Nová hodnota pri zmene času, aby opakovaný zápis hodnoty 0 spôsobil generovanie novej hodnoty líšiacej sa iba časovou značkou. | ||||||||||||||||||||
| Bod pre potvrdenie prijatia dát MQTT serveru. | ||||||||||||||||||||||
| Co |
| Ak je definovaný výstupný meraný bod s adresou ACK_ID, D2000 KOM očakáva potvrdenie spracovania každej správy zápisom kópie hodnoty bodu IN_ID. Až následne nastaví do bodov IN_TOPIC, IN_DATA a IN_ID (v tomto poradí) hodnoty z ďalšej prijatej PUBLISH správy (ak bola medzitým prijatá). V prípade úrovne potvrdzovania QoS_0 je teda nutné opakovane zapisovať do bodu hodnotu 0. Pokiaľ meraný bod ACK_ID neexistuje, hodnoty do bodov IN_TOPIC, IN_DATA a IN_ID sú nastavované ihneď po spracovaní PUBLISH správy. Pozn: Pre správy prijaté s úrovňou potvrdzovania QoS_0 sa neposiela žiadne potvrdenie MQTT serveru, iba sa zverejnia hodnoty ďalšej prijatej PUBLISH správy. | ||||||||||||||||||||
| Body pre posielanie hodnôt MQTT serveru správou PUBLISH. Pozn: ak má D2000 KOM proces posielať MQTT serveru správy PUBLISH, musia byť definované obidva body v rámci jednej stanice. | ||||||||||||||||||||||
| TxtO |
| Téma (Topic) v rámci posielanej správy PUBLISH. Pozn: Ak meraný bod s adresou OUT_TOPIC neexistuje, ako Topic sa použije priamo adresa stanice (ak je prázdna, zápis sa nevykoná). | ||||||||||||||||||||
| TxtO |
| Dáta (Payload) v rámci posielanej správy PUBLISH. Pozn: Poslanie správy sa uskutoční ako reakcia na zápis do bodu OUT_VALUE (t.j. pokiaľ sa Topic nemení, tak stačí bod OUT_TOPIC nastaviť jednorazovo - napr. pomocou štartovacej hodnoty). | ||||||||||||||||||||
| Body pre parsovanie JSON správ | ||||||||||||||||||||||
TxtI, TxtO, Qi, |
| Pokiaľ Payload Type=JSON, správa je parsovaná ako JSON dáta. Hodnota json_address udáva názov JSON poľa, ktorého hodnota sa má priradiť do meraného bodu. Príklady viď popis meraných bodov typu Envelope protokolu LoRaWAN. Pozn: Pokiaľ je potrebné načítať celé pole, je možné nakonfigurovať Cieľový stĺpec štruktúry a zadať adresu s indexom 0, napr. JA=myarray[0] alebo JA=struct.myarray[0].itemA Je podporený aj zápis do meraného bodu s JSON adresou, ktorá ale nesmie mať indexy. Príklady korektných adries na zápis:
Pri zápise sa generuje JSON obsahujúci samotnú hodnotu ako aj voliteľne časovú značku, ak je nastavený protokolový parameter stanice Time Field Name resp. linkový parameter Time Field Name. | ||||||||||||||||||||
Body pre parsovanie Sparkplug správ | ||||||||||||||||||||||
TxtI, TxtO, Qi, |
SA=sparkplug_address SAL=alias;SA=sparkplug_address ST=type;SA=sparkplug_address ST=type;SAL=alias;SA=sparkplug_address | Pokiaľ Payload Type = Sparkplug Host/Edge Node, správa je parsovaná ako Sparkplug dáta (binárny formát postavený na Google Protocol Buffers). Sparkplug dáta obsahujú metriky, ktoré majú textové identifikátory (sparkplug_address) alebo prípadne numerické aliasy (alias). Čítanie položiek šablón (Templates) je možné zadaním sparkplug_address vo formáte <TemplateName1><Separator><TemplateName2><Separator> ... <Separator><ItemName> kde:
Príklady adries položiek šablón: Čítanie položiek datasetov (ekvivalent štruktúrovaných premenných v D2000) je možné zadaním sparkplug_address vo formáte <DatasetName>[<Row>]^<ColumnName> kde:
Príklady adries položiek datasetov: Pri výstupných bodoch je možné explicitne uviesť aj typ hodnoty (ST=type). Podporované sú jednoduché typy (nie položky šablón alebo datasetov):
Pokiaľ typ hodnoty nie je uvedený, prednastavená hodnota závisí od typu meraného bodu:
Pozn: medzi typmi String a Text nie je žiaden rozdiel. Pre Payload Type = Sparkplug Edge Node je pri vstupných aj výstupných bodoch možné uviesť aj numerický alias (SAL=alias) ako prirodzené číslo (0, 1, 2, ...). Alias meraného bodu v rámci stanice musí byť unikátny. Alias umožňuje zmenšiť veľkosť prenášaných dát: v správe NBIRTH/DBIRTH sa uvedie pre každý bod textový identifikátor (sparkplug_address) aj alias, v správach NDATA/DDATA sa posielajú iba aliasy, ktoré sú kratšie ako textové adresy. Alias je použitý iba ak Sparkplug Alias Mode = "Default (SAL=alias)". PUBLISH správa vytvorená pri zápise obsahuje Topic odvodený od adresy stanice. Typ správy závisí od adresy stanice:
Payload správy obsahuje časovú značku, typ hodnoty (type),zapisovanú hodnotu (zakódovanú podľa špecifikovaného typu hodnoty) a názov metriky (sparkplug_address) respektíve alias. | ||||||||||||||||||||
TxtI |
| Meraný bod slúži na konverziu Sparkplug payloadu na JSON reprezentáciu, ktorá môže byť následne spracovaná napr. v ESL skripte. V závislosti od parametra Convert Datatype/Timestamp to Text sa pridáva aj textová reprezentácia typu hodnoty a časovej značky. {"metrics":[{"datatype":3,"int_value":7338992,"name":"Corrected Vol Acc Stn","timestamp":1729664005479}],"seq":32,"timestamp":1729664005479} {Príklad komplexnejšej hodnoty obsahujúcej properties a dataset a zobrazujúcej aj textovú reprezentáciu dátového typu (datatype_txt) a časovej značky (timestamp_txt) v dôsledku nastaveného parametra Convert Datatype/Timestamp to Text. { | ||||||||||||||||||||
...
| Info | ||
|---|---|---|
| ||
O protokole MQTT si môžete prečítať blog blogy: |
| Kotva | ||||
|---|---|---|---|---|
|
...