Proč a kdy použít MQTT přenos hodnot?
Měřící zařízení Poseidon2 je výhodné tím, že umožňuje současné připojení velkého množství 1-Wire senzorů různých měřených veličin. Měřit lze nejen takové běžné věci, jako jsou teplot a vlhkost, ale lze měřit i další zajímavé údaje, jako tlak, rosný bod, koncentraci CO2, koncentraci TVOC, úroveň osvětlení, hodnoty el. napětí, hodnoty el. proudu apod. Všechny tyto hodnoty lze pak napojením zařízení Poseidon2 na internetovou bránu / router snadno a prakticky bezplatně přenášet do svého účtu na cloudové aplikaci SensDesk nebo HWportal, kde se postupně v čase všechny naměřené hodnoty archivují a lze pak si jejich vývoj v čase zobrazit v grafu i je vzájemně v grafu porovnávat.
Zařízení Posedion2 napojení na SensDesk či HWportal je tak ideální pro většinu běžných aplikací v domácnosti či v kancelářských aplikací. Nicméně Poseidon2 je možné jednak prostřednictvím komunikace Modbus-TCP nebo MQTT úspěšně použít i v průmyslových aplikacích nebo v aplikacích s centrální nadřazeným systémem a vlastním přizpůsobeným vizualizačním / zobrazovacím systémem. Tedy v aplikacích, kdy chcete pro zobrazení / ovládání využívat vlastní design prezentace naměřených hodnot na webu či na nějakém lokálním HMI panelu, nebo je ještě dále využívat pro další zpracování a následně i pro komplikované řízení nějakého systému.
Zatímco Modbus-TCP je hlavně výhodný pro lokální napojení zařízení Poseidon2 k PLC či HMI v rámci vlastní izolované LAN sítě a také pro rychlé a časté čtení hodnot (až 50-krát za sekundu) v rychle se měnících aplikacích, tak MQTT je ideální pro dálkový, ale pomalý přenos hodnot přes internet (cloudový MQTT broker). Maximálně lze uvažovat update/přenos hodnot s periodou cca 10 sekund, tedy max. 6-krát za minutu. Tedy MQTT lze použít jen u dlouhodobých pomalých aplikacích, s pomalou změnou / časovým vývojem hodnot měřených veličin.
Takže to lze shrnout tak, že pokud se vám hodí použít měřící zařízení Poseidon2 pro pomalé měření nějakých veličin (např. prostředí v uzavřené místnosti), ale potřebujete jej napojit na vlastní zobrazovací či řídící systém, ať již průmyslový, tak i například kancelářský, tak použití MQTT komunikace je ideálním řešením. Zde je dobré poznamenat, že Poseidon2 v MQTT režimu pracuje jen čistě v režimu "Publisher", tedy zařízení data jen čistě vysílající.
Měřící jednotky Poseidon2 umožňují velmi snadno realizovat přeběžné vysílání naměřených hodnot senzorů a stavů vstupů do PC, databázových systémů či PLC/HMI prostřednictvím IoT MQTT komunikace přes cloudový MQTT server / MQTT broker.
MQTT v Poseidon2
Nastavení MQTT i kompletní definování, jaká data i v jakým formátu budou vysílaná, se provádí na webových stránkách zařízení (jeho integrovaném webovém serveru) v záložce "MQTT".
Zde je nejdříve MQTT režim povolit zaškrtnutím políčka "MQTT Enable". Pokud MQTT zrovna nechcete používat, raději tuto funkci vypněte, aby jste náhodou nějak nevysílali data. Jak je totiž MQTT režim povolen, hned automaticky Poseidon se napojí na uvedená MQTT broker a vysílá na něj data.
K úspěšné mu zprovoznění vysílání dat, je nejdříve nutné v horní částí definovat MQTT broker, tedy MQTT přeposílací cloudový server, který chceme použít. Tedy definují se zde adresa MQTT brokeru (Server), komunikační TCP kanál (Port), Jméno a heslo přístupu do TOPIC kanálu (Username / Password), pokud to broker podporuje, zda přenášená data mají být SSL šifrována nebo ne (Secure SSL mode), identifikační značení zařízení Poseidon2 (Client ID) a pak základní označení kanálu TOPIC (Topic Prefix Name), pod kterým se pak budou přenášet pak jednotlivé podkanály každého senzoru, vstupu či výstupu. Položka "Publish Period" pak definuje periodu vysílání dat v sekundách.
Příklad nastavení komunikace / napojení jednotky Poseidon2 testovací bezplatný MQTT broker (MQTT cloud server) HiveMQ. Pozor volný bezplatný přenos není šifrován ani nemá zabezpečený přístup. Také je samozřejmě předtím nutné míst jednotku Poseidon2 napojenou na internet přes router / gateway a správně nastavené LAN komunikační parametry.
V profesionální aplikaci je nutné si buď zaplatit u nějakého poskytovatele vlastní rezervovaný kanál TOPIC s podporou šifrování i zaheslovaného přístupu. Nicméně pro první vývoj a zkoušení možností lze dobře využít neplacený volný režim některého MQTT broker poskytovatele. Zde je však mít na paměti, že jednak data nejsou šifrována a tedy lze je odsledovat během přenosu, ale pak také například ve zde v příkladu použitém volném brokeru HiveMQ, kde není podporováno ani zaheslování přístupu (tedy položky "Username" a "Password"), které jsou ignorovány. Takže jak někdo narazí nebo si zjistí dané označení kanálu TOPIC, tak může také v režimu Subscriber také data odebírat bez Vašeho vědomí. Proto je dobré používat autentické nesnadno odhadnutelné jména TOPIC a s časem je měnit, nebo je změnit po veřejném publikování.
Vysílání hodnot na MQTT broker
Každý k Poseidonu jednotlivý připojený senzor nebo vstup a výstup má vlastní oddělení unikátní kanál TOPIC, který se skládá jednak z výše uvedeného "Topic Prefix Name" a pak buď z ID čísla připojeného 1-Wire senzoru nebo pak ID čísla vstupu nebo výstupu. Aby však bylo vše předem jasné, jak se například pro daný jeden senzor TOPIC kanál jmenuje, je to celé přehledně vypsáno hned v tabulce, hned za ID číslem. Tedy ve výsledku stačí jen myší označit a zkopírovat celý název, například v uvedeném příkladu u senzoru teplotu s ID zkopírovat celý text "Poseidontest1024/Value" a ten použít jak TOPIC označení na straně MQTT odběratele, tedy MQTT Clienta / Subscribera = MQTT odběratele zpráv. A je to. Budou se však vysílat z Poseidonu jen ty hodnoty či stavy, které jsou vybrány v Poseidonu zaškrtnutím políčka "Publish" (viz uvedené obrázky příkladu).
Zkopírování názvu TOPIC kanálu požadovaného senzoru teploty s ID číslem 1024, který má aktivací zaškrtnutí "Publish" povolené vysílání do MQTT broketu (MQTT cloud server).
To zda se MQTT zprávy / hodnoty vysílají, lze si snadno vyzkoušet. Z pohledu MQTT Subscriberu, tedy odebíratel zpráv, jsem použil přímo na webu serveru HiveMQ jejich volný webový MQTT Client (odkaz http://www.hivemq.com/demos/websocket-client/) . Ten je ideální pro první vyzkoušení, zda Vám vysílání funguje, tedy zda se hodnoty ze zařízení v režimu Publisher (zde tedy Poseidon2) vysílají na internet do MQTT brokeru. Na následujících obrázcích je patrné, že právě stačí jen zkopírovat klávesami Ctrl+C a Ctrl+V celý název TOPIC z webu nastavení Poseidonu do MQTT clienta / Subscribera a hned se začnou zobrazovat vysílaná data.
Vložení názvu TOPIC kanálu senzoru teploty s ID 1024 zkopírovaného přímo z webu zařízení Poseidon2 do MQTT webového klienta HiveMQ.
Perioda vysílání dat z Poseidona a tedy i příjem hodnot do MQTT Clienta / Subscribera pak je definován hodnotou "Publish Period" na MQTT nastavení Poseidonu. V mém případě to bylo 10 sekund, což je na dočasné zkoušení optimální perioda, aby například po změnách nastavení hned brzy byly vidět výsledky. Ale v praxi je MQTT a celý systém IoT (Internet of Things) optimalizován spíše na dlouhodobé vysílání dat cca 1x za několik minut.
Po vložení názvu TOPIC kanálu začnou do MQTT klienta (Subscribera) se začnou odebírat a zobrazovat naměřené hodnoty teploty d ID 1024 společně s dříve zadaného TOPIC kanálu senzoru koncentrace CO2 s ID 31745.
Příklad výběru různých senzorů připojených do jednotky Poseidon2 zaškrnutím položky "Publish" a jejich příjem jejich zpráv v MQTT klienta / Subscribera HiveMQ.
Vlastní definice MQTT formátu RAW / JSON
Ve výše popsaném odesílání dat je přímo v programu zařízení Poseidon nadefinovaný pevný formát, jak jsou hodnoty zejména ze senzorů odesílány. Z výše uvedených obrázků příkladů z MQTT Clienta je patrné, že se přenášejí hodnoty doplněné o jednotky.
Tento formát je realizován jako text, tedy posloupnost ASCII znaků označovaných programátory jako data typu "String". Pokud chcete jen hodnoty přijímat a jen zobrazovat v nějakém základním MQTT Clientu, tak to ničemu nevadí. Problém pak může nastat, když buď zobrazovaný formát není přesně takový jaký potřebujete nebo potřebujete přenášenou hodnotu nemít jako znakový řetězec, ale přímo jako číselnou hodnotu. Tuto věc totiž začnete řešit, když chcete hodnoty nejen zobrazovat, ale i s v nějakém počítačovém či řídícím systému s nimi nějak dále počítat, nebo je ukládat do databáze jako čísla.
Na to však vývojáři zařízení Poseidon2 mysleli také a vytvořili na konci MQTT nastavení sekci "User Topic". Ta umožňuje si sám pomocí nabízených maker vytvořit přenášený formát MQTT zprávy tak, jak je na cílovém odebírajícím zařízení potřebujete mít. Zde lze realizovat jako doplněný textový formát zprávy, který lze na koncovém zařízení zpracovávat jako textový řetězec = jako surová nestrukturovaná MQTT data typu RAW nebo si i vytvořit strukturovanou zprávu typu JSON s oddělením textové části (dat typu String) a číselných hodnot (dat typu Integer či Float).
Zde v mám následujícím příkladu jsem si například zvolil jako zdroj hodnot 1-Wire senzor koncentrace CO2 vzduchu v místnosti.
Příklad rozšířená textová zpráva (nestrukturovaný formát RAW)
V předdefinovaném formátu Poseidonu se vysílá hodnota následovaná jednotkami "ppm". Nicméně lze například tuto strohou zprávou pro přímé zobrazení na MQTT klientovi rozšířit o text "Aktuální hodnota CO2:" . S použitím sekce "User Topic" lze si vytvořit další oddělení TOPIC kanál, v mém případě nazvaný "vojaceka_test" (položka "Topic name") a pak v okně "Topic Value " vytvořit požadovaný nový / rozšířený formát zprávy.
V mám případě jsem vložil do okna následující:
Aktuální měření CO2: %ID_SENSOR_31745%
%VAL_VALUE% ppm
%ID_SENSOR_END%
Zde je patrný přidaný text "Aktuální měření CO2:". Za ním pak následují položky definované mezi znaky procent %.......%, které definují tzv. makra, které se do textu zprávy přímo nevypíšou, ale nahradí se hodnotou z Poseidonu. Následuje opět jen text "ppm", což text jednotky veličiny koncetrace CO2.
Možná použitelná makra jsou pak uvedena úplně dole. Funguje to obecně tak, že nejdříve je nutné vložit začátek makra, které definuje, jaké z jakého senzoru či z jakého vstupu či výstupu Poseidonu budeme chtít data brát. V mém případě tedy:
-
makro "%ID_SENSOR_31745%" říká: vem a používej senzor s ID 31745.
-
Následuje makro "%VAL_VALUE% " říká: vem aktuální hodnotu předtím nadefinovaného senzoru a vlož ji do textu zprávy.
-
Nakonec makro "%ID_SENSOR_END% " jen říká: konec práce se senzorem s ID 31745.
Ve výsledku se tak jako text MQTT zprávy přenese vždy "Aktuální hodnota CO2: xxxxx ppm", kde místi xxxx bude aktuální hodnota naměření koncetrace v době odesílání zprávy.
Porovnání vysílané standardní MQTT zprávy naměřené hodnoty senzoru koncentrace CO2 (s ID 31745) a vytvořené vlastní rozšířené RAW zprávy.
Příklad strukturované zprávy ve formátu JSON:
Nevýhodou výše uvedeného RAW formátu je, že když jej budete přenášet třeba do PLC či HMI panelu, tak budete s ním celým pracovat jako s ASCII textovým řetězcem "String", tedy i s přenesenou hodnotou. Tu ale obvykle nechceme mít jako ASCII znaky, ale chceme ji mít jako číslo. Toto zajistí formát zprávy typu JSON, kde lze uvozovkami a hranatými závorkami definovat, co se má interpretovat jako text a co jako číslo.
V mám případě jsem vložil do okna následující:
{"CO2":%ID_SENSOR_31745%[%VAL_VALUE%]%ID_SENSOR_END%}
Složené závorky na začátku a konci uvozují začátek a konec JSON struktury. Pak následuje textové označení hodnoty "CO2", což v PLC či HMI pak může fungovat jako označení (tag) proměnné. Následuje dvojtečka, která přiřazuje hodnotu proměnné a pak již výše popsané makro vložení naměřené hodnoty senzoru ID 31745, zde ale s tím, že makro "%VAL_VALUE%" je uvedeno v hranatých závorkách "[%VAL_VALUE%]". Tím se definuje, že hodnota se nebude přenášet jako znakový řetězec, ale jako číslo.
Celá struktura JSON zprávy pak bude vypadat takto:
{
"CO2":[xxx]
}
, kde xxx bude aktuální číslo hodnoty koncentrace.
Když takovou JSON strukturu nadefinuje v cílové PLC či HMI, pak se hodnotu "xxx" uloží do paměti PLC či HMI jako číslo a ne jako ASCII znaky. A to je z programátorského pohledu velmi podstatný rozdíl!
Porovnání vysílané standardní MQTT zprávy naměřené hodnoty senzoru koncentrace CO2 (s ID 31745) a vytvořené vlastní JSON zprávy - MQTT klient nepřekládá JSON zprávu a zobrazuje celou jeho strukturu jako text.
Závěr
Dnes jsme se podívali, jak se MQTT zprovozňuje na straně měřícího zařízení Poseidon2 a jak je možné si definovat vlastní formát MQTT zprávy. V dalším článku pak na to navážeme a prakticky si ukážeme, jak MQTT vysílaná RAW i JSON data lze přijímat z MQTT brokeru do PLC či HMI panelu a ty pak dále zpracovávat, archivovat a tedy i využít pro nějaké vlastní automatizační řízení.
Odkazy:
- Webové stránky výrobce HWgroup o zařízení Poseidon2: https://www.hw-group.com/cs/zarizeni/poseidon2-4002
- Webové stránky o MQTT komunikaci zařízení Poseidon2: https://www.hw-group.com/cs/podpora/predstaveni-protokolu-mqtt-a-jeho-aplikace-v-jednotkach-poseidon2-a-damocles2
- Webové stránky HW obchodu s nabídkou zařízení Poseidon2 40002: https://obchod.hw.cz/eshop/monitorovaci-jednotka-ustredna-poseidon2-4002-monitoring-prostredi-v-datovem-centru/
- Webové stránky MQTT cloudu HiveMQ: https://www.hivemq.com/mqtt/
- Public MQTT broker: https://www.hivemq.com/public-mqtt-broker/
- MQTT HiveMQ volný webclient: http://www.hivemq.com/demos/websocket-client/