25.6.2025

Komunikácia - poznámky k testovaniu MQTT Sparkplug B

Komunikácia – poznámky k testovaniu MQTT Sparkplug B

Minulý týždeň som testoval našu implementáciu MQTT Sparkplug B pomocou nástroja Eclipse™ Sparkplug™ Technology Compatibility Kit (TCK) vo verzii 3.0.0. Tento nástroj používa nadácia Eclipse pri testovaní, či implementácia (či už Host Application, Edge Node + Devices, alebo Broker) spĺňa všetky požiadavky špecifikácie Sparkplug 3.0.0. Ja som otestoval D2000 KOM proces v roli Edge Node + Devices (zdroj dát) ako aj Host Application (konzument dát a posielanie príkazov).

Ako som dopadol? Opravil som pár nedôsledností, jednu chybu pri prevode Sparkplug správy na JSON formát (šablóny) a nahlásil vývojárom testovacieho nástroja dve chyby (jedna zrejme nová, o druhej som neskôr zistil, že už bola hlásená pred takmer dvoma rokmi, ale zatiaľ nebola opravená).

Chcel by som sa pristaviť práve pri prevode Sparkplug správy na JSON formát. Ipesoft D2000 umožňuje na komunikačnej stanici s MQTT protokolom zadefinovať textový meraný bod s adresou IN_SP2JS. Pokiaľ príde správa v binárnom formáte Sparkplug B, D2000 KOM proces ju skonvertuje na JSON formát a zverejní ako hodnotu tohto meraného bodu. Samozrejme, popri tom stále funguje aj štandardné parsovanie a ukladanie do bodov so Sparkplug adresou, ako aj ukladanie celej správy do textového meraného bodu s adresou IN_DATA.

Na čo je dobré previesť celú správu do formátu JSON? Sparkplug B správa obsahuje metriky. Tie okrem základných atribútov, ktoré sa spracúvajú a ukladajú do hodnoty meraného bodu (názov/alias, typ hodnoty, samotná hodnota, časová značka, príznak is_null interpretovaný ako Invalid), obsahuje aj ďalšie, napríklad pole properties – na obrázku Field(9):

Obrázok 1 - Metrika Sparkplug B payloadu obsahujúca aj pole properties zobrazená nástrojom Wireshark

D2000 KOM dokáže skonvertovať túto metriku na JSON formát (čitateľné formátovanie bolo dosiahnuté pomocou nástroja JSON formatter & validator, keďže D2000 KOM neodsadzuje a nevkladá nové riadky):

Obrázok 2 - Sparkplug B payload prevedený na JSON formát

Uvedený príklad využíva properties na definovanie limít (engLow=1, engHigh=10) a inžinierskych jednotiek (engUnit=My Units).

Môžete si všimnúť, že poradie jednotlivých atribútov JSON správy je iné ako v pôvodnej správe (sú zoradené abecedne). Poradie jednotlivých hodnôt (pole „values“) a názvov (pole „keys“) je naproti tomu rovnaké ako v Sparkplug správe, keďže na poradí prvkov poľa záleží.

Pokiaľ by bolo teda potrebné extrahovať zo Sparkplug aj informácie, ktoré D2000 KOM proces štandardne nevyužíva, je to možné práve pomocou meraného bodu s adresou IN_SP2JS a následného parsovania JSON správy v ESL skripte, pomocou funkcií pre prácu s JSON formátom.

Pri testovaní poradia správ (Message Ordering Test) prijal D2000 KOM proces od TCK správu DBIRTH, ktorá obsahuje definíciu všetkých metrík testovacieho servera. Obrázok (prácne vyskladaný z viacerých snímok nástroja Wireshark) nájdete tu, pozor – má rozmery 787 x 12510 bodov.

Po skonvertovaní na JSON (meraný bod s adresou IN_SP2JS) bol výsledok nasledovný (textový dokument s JSON správou).

Podobne bola prijatá aj menšia NBIRTH správa. Môžete si pozrieť jej zobrazenie vo Wiresharku (667 x 1027 bodov) ako aj výsledok konverzie na JSON.

Toto sú samozrejme extrémy – BIRTH správy obsahujú všetky metriky, takže sú aj primerané veľké.

Pre ilustráciu ponúkam nasledovnú snímku obrazovky z D2000 Cnf, ukazujúcu niekoľko meraných bodov patriacich stanici s MQTT protokolom v režime „Sparkplug Host Application“. Meraný bod s adresou IN_SP2JS obsahuje JSON dáta jednoduchej správy s jednou metrikou s názvom Second, ktorá udáva aktuálnu sekundu.

Na obrázku si možno všimnúť, že JSON obsahuje aj položku alias s hodnotou 2. V Sparkplug B správe sa teda ako identifikátor posiela numerický alias a D2000 KOM proces ho prevedie na textový identifikátor a pre pohodlie užívateľa ho pridá aj do JSON správy (name=Second).

Obrázok 3 - Merané body na stanici v režime „Sparkplug Host Application

Obrázok ukazuje aj meraný bod M.MQTT_MOSQUITTO_HA.Second (s adresou SA=Second), ktorý priamo prevádza hodnotu metriky Second na celočíselnú hodnotu. Takýto meraný bod bude pre väčšinu prípadov použitia postačujúci.

Bod s adresou IN_DATA obsahuje pôvodné dáta v binárnom Sparkplug formáte. Je možné si všimnúť, o koľko je jeho hodnota kratšia od JSON reprezentácie a teda o koľko je Sparkplug formát úspornejší (a prispieva k tomu aj použitie numerických aliasov).

A keď už hovorím o aliasoch a pohodlí užívateľa: ak na úrovni komunikačnej linky aktivujem parameter protokolu „Convert Datatype/Timestamp to Text“, tak popri položkách datatype a timestamp pribudnú do meraného bodu s adresou IN_SP2JS položky datatype_txt a timestamp_txt, udávajúce textovú reprezentáciu dátového typu a časovej značky.

Takto vyzerá rozšírená JSON správa:

Obrázok 4 - Rozšírená JSON správa (obsahujúca datatype_txt a timestamp_txt)

Pre zaujímavosť prikladám aj snímku z okna MQTT Item Browser, ktoré je možné použiť na konfigurovanie meraného bodu s MQTT Sparkplug adresou. Na snímke vidieť časť metrík zo správy DBIRTH. Môžete si všimnúť, že dokážeme adresovať celý stĺpec Datasetu (napr. pomocou adresy SA=DataSet[*]^Booleans). Prvý riadok bude zverejnený ako hodnota meraného bodu, celý stĺpec sa zapíše do Cieľového stĺpca štruktúry (ak je v konfigurácii meraného bodu nakonfigurovaný). Samozrejme, je možné adresovať aj konkrétny riadok Datasetu (napr. SA=DataSet[3]^Booleans). Podporená je aj práca s položkami šablón (napr. adresa SA=TemplateDef->MyFloat).

Obrázok 5 - Zobrazenie Sparkplug metrík v okne MQTT Item Browser pri výbere adresy meraného bodu.

Záver

S komunikačným protokolom MQTT ako aj s jeho nadstavbou Sparkplug B sa stretávam čoraz častejšie. Pred týždňom som pre jedného z našich zákazníkov konfiguroval MQTT Sparkplug B komunikáciu v režime „Edge Node“, ktorá slúži na zverejňovanie dát z MES systému (postaveného na technológii Ipesoft D2000) do vizualizačnej platformy ThingsBoard.

D2000 dnes ponúka prácu s textovým, JSON aj Sparkplug B payloadom a pre Sparkplug B ponúka aj jeho konverziu na JSON, čo môže byť užitočné pri spracovaní pomocných atribútov metrík (napr. properties). Toto všetko majú naši zákazníci k dispozícii v rámci jediného komunikačného protokolu.

Tak nech sa páči, protokol MQTT ponúka alternatívu zaujímavú svojou kompaktnosťou, podporou zabezpečenia (TLS) a efektívnosťou.

27.5.2025, Ing. Peter Humaj, www.ipesoft.com

Iné blogy