07.10.2020 Čtvrtý díl série článků o využití open-source nástrojů na PLC Unipi Vám ukáže, jak do prostředí Node-RED integrovat interiérový senzor kvality vzduchu komunikující skrze protokol MQTT přes rozhraní LoRa nebo Wi-Fi.
Vítejte u čtvrtého dílu naší blogové série. V předchozím díle jsme se věnovali připojení externích periferií komunikujících s řídící jednotkou Unipi přes protokol Modbus. Toto řešení Vám umožní snadno zvýšit počet vstupů a výstupů jednotky či ji doplnit o komunikační rozhraní, kterými v základní konfiguraci nedisponuje. Rovněž jsme si vyzkoušeli způsob, jak snadno a rychle otestovat funkčnost samotné komunikace s periferií a jak ji integrovat do prostředí Node-RED včetně jednoduchého přepočtu naměřených hodnot.
V tomto díle si detailněji rozebereme jiný komunikační protokol - MQTT. Na praktickou ukázku jeho integrace použijeme opět senzor kvality vzduchu z řady Unipi IAQ, avšak kromě Wi-Fi si vyzkoušíme rovněž radiové rozhraní LoRa.
Co je MQTT?
Jde o komunikační protokol, který se vyznačuje nízkou náročností na systémové zdroje a širokou podporou napříč programovacími jazyky, vývojovými prostředími a dalšími nástroji. Z toho důvodu je velmi často používán ve světě IoT pro přenos dat z koncových bodů do nadřazené aplikace. MQTT využívá hierarchii producent-broker-odběratel.
Konzument se registruje k odběru (subscribe) zpráv jednoho nebo více témat (topic) vysílaných (publish) producentem. V naší ukázce odpovídá jedno téma hodnotám naměřeným jedním IAQ senzorem. V případě sítí typu LoRa mohou být samostatným tématem i události jako je například registrace senzorů do sítě. MQTT broker pak tvoří prostředníka, který zajišťuje směrování zpráv mezi producenty a konzumenty.
Možnosti integrace
V tomto článku si ukážeme tři různé možnosti integrace senzoru:
Role jsou rozděleny následovně:
- Producent - IAQ senzor “produkující” naměřená data
- Broker - směrovač dat - demonstrovány jsou 3 různé přístupy viz obrázek:
- servery komunitní LoRa sítě TTN
- veřejný broker (mqtt.eclipse.org)
- lokální broker běžící na PLC Unipi (Mosquitto)
- Konzument - uzel v prostředí Node-RED
Ve všech případech bude v Node-RED aplikaci senzor reprezentován totožným uzlem MQTT odběratele bez ohledu na to, jestli je připojen skrze přístupový bod Wi-Fi (případ č. 2 a 3) nebo síť LoRa (případ č. 1). Pojďme si jednotlivé případy rozebrat podrobněji.
LoRa
V posledních letech výrazně roste popularita nízkopříkonových rádiových standardů pracujících ve volně přístupných (nelicencovaných) kmitočtových pásmech do 1 GHz. Odtud také plyne označení těchto technologií jako Sub-GHz. Jejich charakteristickou vlastností je malá šířka pásma, což je činí nevhodnými pro přenos větších objemů dat. Nejčastěji je proto nalezneme v bateriově napájených zařízeních pro odečty energií, určování polohy či měření fyzikálních veličin. Tato řešení se souhrnně označují jako internet věcí (Internet of Things, IoT).
Typickým zástupcem Sub-GHz technologií je standard LoRa, který je využit jako jedna z možností připojení v tomto článku.
LoRa v produktech Unipi IAQ
Uvádět obecné informace o standardu LoRa je poměrně zbytečné vzhledem k velkému množství informací, které lze snadno nalézt na internetu (např. na tomto odkazu). Rovnou se proto přesuneme k produktu, který pro ukázkové řešení využijeme - interiérovému senzoru kvality vzduchu Unipi. Se senzorem jste se setkali již v minulém díle věnovaném protokolu Modbus, tentokrát ale použijeme variantu RLW-THC vybavenou radiovým rozhraním LoRa.
Možnosti integrace LoRa zařízení
Zařízení schopné komunikovat skrze standard LoRa máme připravené. Jakým způsobem ale naměřená data přeneseme do vlastní aplikace? Tou může být jak řídicí program v PLC, tak i například databáze umístěná na vzdáleném serveru. LoRa brána (či jednodušeji řečeno přijímač) zpravidla nebývá součástí výbavy kontrolérů, nejčastěji proto uživatelé volí ze tří možností:
- Komerční operátor, tj. subjekt provozující síť LoRA bran pokrývající dané území (např.celý stát). Výhodou je garance dostupnosti a kvality pokrytí, nevýhodou naopak závislost projektu na jedné společnosti a její politice.
- Komunitní síť bran provozovaná více nezávislými subjekty (dobrovolníky či organizacemi), která může pokrývat jak menší území (městská čtvrť), tak i celé světadíly. Nejznámější komunitní sítí zahrnující tisíce LoRa bran po celém světě je The Things Network (TTN).
- Vlastní síť, kdy lze pomocí jedné nebo více vlastních LoRa bran pokrýt pouze konkrétní potřebnou oblast nezávisle na jiných uživatelích. Toto řešení je vhodné pro menší lokální projekty.
Komunitní síť TTN
Komunitní síť TTN je ideální nástroj pro prvotní seznámení se s technologií. Základní uživatelský účet je nabízen zdarma, mezi další výhody patří i široká uživatelská základna, možnost snadno integrovat vlastní bránu nebo kvalitně zpracovaná dokumentace. Naopak slabinou TTN je značně omezené stávající pokrytí, které obvykle zahrnuje pouze větší města některých států a také závislost na jednom poskytovateli služeb síťového serveru.
Jak ale dostat data ze serverů TTN do naší open-source aplikace? U sítě TTN máme možností více - využít můžeme buď knihovní balíky (SDK) připravené pro různé programovací jazyky (Python, Java), nebo obecné rozhraní založené na protokolu MQTT. Vzhledem k tématu tohoto článku se detailněji podíváme na poslední zmiňovanou možnost.
Samotný proces vytvoření nové aplikace a přidání zařízení je popsán v průvodci dostupném na tomto odkazu. Praktická ukázka řešící integrace IAQ senzoru Unipi RLW-THC do sítě TTN je předmětem této případové studie.
Ověření příjmu zpráv
V tuto chvíli již tedy máme vytvořený datový kanál mezi pravidelně vysílajícím senzorem RLW-THC a LoRA bránou, potažmo centrálními servery sítě TTN. Pro registraci odběru zpráv z vytvořené aplikace budete potřebovat následující parametry:
- Uživatelské jméno (Application ID - název zvolený při založení aplikace),
- Heslo (Application Access Key - unikátní klíč, k dispozici na portálu TTN),
- Vzdálený server, na kterém běží MQTT broker (pro Evropu se jedná o eu.thethings.network),
- Odebírané téma - jde o textový řetězec složený zpravidla z více úrovní oddělených lomítky. Identifikuje například data z konrétního senzoru v určité budově na daném patře. Díky možnosti nahradit jednu či více úrovní zástupným symbolem se lze přihlásit k odběru určité skupiny (např. celé jedno patro) či všech témat.
Pro rychlé ověření funkce použijeme nástroj realizující konzumenta mosquitto_sub, který je (společne s dalšími nástroji) dostupný v balíku mosquitto-clients.
Pro senzor RLW-THC se sériovým číslem 7 může odběr dat vypadat následovně (výpis je zkrácen):
:~# sudo apt install mosquitto-clients
:~# mosquitto_sub -u unipi_test -P ttn-account-v2.HzbmwU6hRN1EOT7ZhEOKn8XRiJ3WggsCG1pFBhQC3P8 -h eu.thethings.network -d -t 'unipi_test/devices/rlw_thc_7/up'
…
Client mosqsub|8162-martyy-huk received PUBLISH (d0, q0, r0, m0, 'unipi_test/devices/rlw_thc_7/up', ... (668 bytes))
{"app_id":"unipi_test","dev_id":"rlw_thc_7","hardware_serial":"0004A30B00E8C78B","port":1,"counter":2,"payload_raw":"H6wxWYFIHAI8WgI=","payload_fields":{"ambient_light":19.085536923187668,"co2":602,"pressure":985.61,"relative_humidity":35.6,"temperature":27.15999999999999
…
,"latitude":49.21643,"longitude":16.65967,"altitude":256}]}}
Wi-Fi
Mírně odlišný však bude postup v případě, kdy namísto rozhraní LoRa a komunitní sítě použijeme protokol MQTT skrze integrovanou Wi-Fi. Hlavním rozdílem je to, že musíme vlastními silami zajistit i prostředníka komunikace - MQTT broker. Pravděpodobně využijeme jednu z následujících možností zajištění této služby:
- Instalace na zařízení nacházející se v lokální síti (domácí server, PLC Unipi apod.). Výhodou je nezávislost na službách dalších subjektů a internetu.
- Instalace na vlastní veřejný fyzický či virtuální server - výhodou je, že na stejném stroji mohou rovnou běžet další související služby jako například databáze naměřených dat a jejich vizualizace.
- Veřejný MQTT broker. Vhodné pro rychlé otestování aplikace. Příkladem je test.mosquitto.org/, detailněji popsaný na stránce https://test.mosquitto.org/. Nezbytnou podmínkou je to, aby byl senzor připojen k Wi-Fi síti s přístupem do internetu.
Další rozdíl je ve formátu dat - ta jsou narozdíl od binárního formátu LoRa zpráv reprezentována rovnou ve formátu JSON.
Pro odesílání MQTT zpráv skrze Wi-Fi je třeba tuto možnost (stejně jako v případě LoRa) povolit a nastavit ve webovém rozhraní senzoru (viz uživatelský manuál a obrázek níže).
Veřejný broker
Užitečná pomůcka pro vývoj a testování, kdy potřebujeme rychle ověřit funkčnost aplikace. V naší ukázce je použit broker mqtt.eclipse.org, který je právě k tomuto účelu určen. Je třeba vzít v úvahu, že zprávy směrované skrze server na portu 1883 může zobrazit kdokoliv. V ostré aplikaci je krom zabezpečení jménem a heslem silně doporučeno použít taktéž šifrované TLS připojení, které IAQ senzor také podporuje - v tomto případě je využit port 8883.
Ověření příjmu MQTT zpráv můžeme provést shodným způsobem jako u zpráv ze serverů TTN - pomocí nástroje mosquitto_sub. Po registraci k odběru tématu by měly být přijaté zprávy průběžně zobrazovány:
:~# mosquitto_sub -h mqtt.eclipse.org -d -t cz/unipi/iaq-test/iaq_666
Client mosqsub|14847-martyy-hu received CONNACK (0)
….
'cz/unipi/iaq-test/iaq_666', ... (476 bytes))
….
"temperature":26.05,"relative_humidity":57.74,"absolute_humidity":14.07,"dew_point":17.07,"CO2":462.22,"atm_pressure":973.07,"ambient_light":34.38,"VOC_index":46.03,"VOC_equiv_CO2":536.74,"VOC_accuracy":1}
...
Lokální broker
Tato možnost integrace je vhodná například tehdy, kdy jsou IAQ senzory připojeny k Wi-Fi síti, která nemá přístup do Internetu, nebo kdy není třeba zpracovávat naměřená data mimo místní síť LAN.
V tomto případě je třeba zajistit:
- Vzájemnou viditelnost mezi zařízením s MQTT brokerem a IAQ senzory v rámci místní sítě - tzn. aby byly buď na stejné podsíti, nebo byl odpovídající způsobem nastaven routing v mezitehlých síťových prvcích
- Povolený (otevřený) příslušný port (výchozí TCP 1883) na zařízení s MQTT brokerem.
MQTT broker na jednotce Unipi lze realizovat například:
- Nástrojem Mosquitto, což je velmi často používaný obecný broker běžící jako samostatná služba OS Linux. K dispozici je jako stejnojmenný debianovský balík.
- Přímo v prostředí Node-RED pomocí uzlu z balíku node-red-contrib-aedes, který není součástí standardní instalace a je třeba ho nainstalovat ručně. Tato varianta je popsána dále.
Nastavení na straně IAQ senzoru je obdobné jako v případě veřejného brokera, pouze na místo parametru MQTT server je třeba zadat IP adresu/hostname zařízení v místní síti.
Instalaci uzlu brokera do prostředí Node-RED provedeme v sekci Manage palette výběrem balíku node-red-contrib-aedes a jeho instalací pomocí tlačítka Install:
V sekci Network hlavní nabídky uzlů se objeví uzel Aedes MQTT broker, který postačí umístit na libovolné místo flow.
Jeho konfigurace může být s výjimkou jména a hesla (viz dále) ponechána ve výchozím stavu.
Jako základní stupeň zabezpečení přístupu k MQTT brokeru slouží jméno a heslo, které nastavíme na kartě Security:
Jméno i heslo se samozřejmě musí shodovat s údaji zadanými v sekci MQTT webového rozhraní senzoru.
Ověření příjmu provedeme obdobně jako v předchozích případech:
:~# mosquitto_sub -u unipi_test -P password -t "#"
Kdy se odběratel při vynechání parametru host (-h) připojí k brokeru běžícím na stejném zařízení (localhost) a dále se při zadání tématu “#” registruje k odběru všech témat.
Stejnou zkoušku můžeme provést i přímo z prostředí Node-RED pomocí uzlu mqtt in propojeného s uzlem debug.
Práce s daty v Node-RED
Stejně jako v předchozích dílech, i nyní pro ukázku použijeme kontrolér Unipi Neuron M203 s nahraným OS obrazem Node-RED, který jsme si přichystali v prvním díle série. Jako ukázková aplikace poslouží jednoduché spínání ventilátoru v závislosti na naměřené koncentraci CO2, obdobným způsobem jakým bylo spínáno topení ve druhém díle blogové série. Navíc si historii některých naměřených hodnot vykreslíme do grafu.
Příslušné uzly implementující protokol MQTT jsou, narozdíl od uzlů pro Modbus, v Node-RED k dispozici již ve výchozí instalaci.
V následující ukázce použijeme pouze uzel typu mqtt in, který představuje konzumenta MQTT zpráv:
Předpokládejme registraci k odběru zpráv z jednoho senzoru skrze veřejný broker na mqtt.eclipse.org. Uzel typu mqtt in pak bude nakonfigurován následovně:
Vzhledem k tomu, že data jsou již přímo ve formátu JSON, je jejich rozparsování pomocí následujícího uzlu Parse from JSON obsahujícího vlastní funkci přímočaré. Počet výstupů (v tomto případě 4) lze navolit v kartě Properties uzlu pod samotným textem funkce.
var temp = {topic: "temperature", payload: msg.payload.object.temperature };
var co2 = {topic: "co2", payload: msg.payload.object.co2 };
var humid = {topic: "humidity", payload: msg.payload.object.relative_humidity };
var pressure = {topic: "press", payload: msg.payload.object.pressure };
return [ temp, co2, humid, pressure ];
Hodnoty naměřených veličin z tohoto uzlu dále pokračují do uzlů typu chart, které zajistí vykreslení jejich historie na nástěnce (dashboard - tutoriál popisující základy práce s nástěnkou naleznete například na tomto odkazu), přičemž tyto uzly jsou v prostředí rovněž předinstalovány. Dále jde v případě CO2 naměřená hodnota paralelně do komparátoru s hysterezí, který zajišťuje spínání ventilátoru pomocí relé na jednotce Neuron (detailnější popis práce s I/O jednotky viz předchozí díly série).
Poslední součástí flow je uzel typu inject, který odešle do všech grafů (uzlů typu chart) prázdné pole, čímž z nich smaže všechna data:
Samotná nástěnka s grafy je pak k dispozici na adrese:
http://<IP ADRESA JEDNOTKY>:1880/ui
Závěr
V tomto díle jsme do prostředí Node-RED integrovali interiérový senzor kvality vzduchu Unipi RLW-THC připojený prostřednictvím bezdrátových technologií LoRa a Wi-Fi. V obou těchto případech je využit protokol MQTT, se kterým lze v prostředí Node-RED snadno pracovat. S tímto protokolem se ve sféře IoT setkáte velmi často, kdy lze podobným způsobem do aplikace integrovat i zařízení dalších výrobců.