Rule Chain v prostredí IoT platformy ThingsBoard je univerzálnym nástrojom pre tvorbu flowu, ktorý vieme použiť pre automatizáciu, reakciu na eventy, transformáciu telemetrie, tvorbu prepojení. Okrem nodov s preddefinovanými s funkciami, ktorými disponuje je možné dosiahnuť rozšírenú funkcionalitu aj vytvorením vlastných scriptov v Javascripte, alebo TBEL (ThingsBoard Environment Language).
Platia tu ale isté obmedzenia, keďže Rule Chain scripty bežia v sandboxovom rozhraní. To má za následok absencie sieťových protokolov, funkcií a API, napríklad fetch(), XMLHttpRequest, require(), axios... Preto musíte samotnú konektivitu so serverom, ktorému chcete posielať dáta / čítať z neho dáta realizovať cez node s názvom REST API call.

Výhodou Rule Chainu na ThingsBoarde je najmä to, že je hostovaný na cloude a teda beží nepretržite, čo je výhoda takto zostaveného flowu oproti Node-RED flowu, kedy musíte mať Node-RED nasadený na vlastnom serveri, či počítači, ktorý musí bežať, aby bežal aj daný flow.
Dnes si ukážeme jednoduchý flow, ktorý bude reprezentovať nasledovnú funkcionalitu:
- periodické spúštanie raz za 5 minút
- generovanie náhodných dát v preddefinovanom rozsahu
- vykonanie HTTPS POST requestu s dátami na inštanciu Watmonitor (webové rozhranie hladinomera)
Celé riešenie vieme urobiť najmenej skrz 2 vložené nody do flowu, prípadne vieme použiť aj 3, ak chceme jednotlivé kroky odseparovať, najmä čo sa týka spúšťania logiky, generovania a transformácie dát, keďže ich vieme zjednotiť.
Možné nody:
- Generátor
- Script (transformáciu možno obsiahnuť v rámci generátora a nerealizovať sekundárny script)
- REST API call

Dvoj, alebo trojkombinácia nodov pre dosiahnutie požadovaného výsledku
Základná funkcionalita Generátora je veľmi jednoduchá. Tento node má rozhranie s nastaveniami, kde sa definuje jeho periodicke spúšťanie v intervale > 1 minúta. Súčasťou generátora je aj preddefinovaný script, ktorého telo môžete upravovať. Zvoliť si môžete z JS scriptu, alebo TBEL scriptu podľa preferencie jazyka pre podprogram. Script môžete urobiť aj ako samostatný node, ale vzhľadom na kompaktnosť to zrealizujeme priamo tu.

Script môže vracať až tri parametre a to správu (message), meta dáta a typ správy. Použitie závisí od flowu. Správa obsahuje dáta, typ správy definuje, čo sa má s dátami stať, napríklad po príchode správy do Action nodu, ktorý vykonáva preddefinovanú akciu a meta dáta, ktoré môžu niesť dodatočné informácie o originátorovi, teda pôvodcovi správy a iné...
V našom prípade budeme generovať rozdielovú výšku hladiny vody skrz nasledujúci fragment kódu: var hodnota = Math.floor(Math.random() * 4) + 30; Poďme si daný kód bližšie rozobrať. Vidíme dve matematické funkcie a to floor() a random(). Funkcia random() vygeneruje desatinné číslo v rozmedzí 0 až 0,999. Toto číslo sa následne vynásobí číslom 4, čím získame 0 až 3,996. Funkciou floor() zaokrúhlime číslo smerom dole na najbližšie celé číslo a získame hodnotu 0 až 3, ktorú pre výslednú hodnotu pripočítame ku konštante 30. Výsledná hodnota reprezentujúca rozdielovú výšku hladiny vody je tak v rozmedzí 30 až 33.

V ďalšom kroku vykonáme transformáciu dát do podoby, v akej budú odoslané na Watmonitor rozhranie z Rule Chainu. Watmonitor okrem hodnoty rozdielového merania hladiny vyžaduje aj token, ktorým sa request autorizuje pre zápis dát. Token sa odosiela ako parameter HTTPS POST requestu. Telo správy HTTPS POST requestu tak bude obsahovať dáta vo formáte: hodnota=31&token=123456789. Práve toto bude reťazec, ktorý nadobudne správa, ktorá bude preposlaná susednému nodu REST API call.

Do Rule Chainu doplníme spomenutý REST API call node. Z výstupu generátor nodu vytvoríme prepojenie do vstupu REST API call nodu pre label Success. V danom node nastavíme URL adresu koncového endpointu inštancie Watmonitora, kde budú dáta odoslané po HTTPS POST protokole. Ponecháme predvolenú metódu POST a v HTTP hlavičkách pozmeníme Content-type na application/x-www-form-urlencoded, čo je formát použitého payloadu.

Obdobne vieme pridať aj sekundárne HTTP hlavičky, napríklad User-Agent a iné, dokonca môžeme v spodnej časti doplniť aj formu autorizácie menom a heslom prípadne certifikátmi, ak sa vyžaduje pre koncový endpoint. Node REST API call získa správu s payloadom hodnota=31&token=123456789, ktorú bude priamo používať v requeste. V nastaveniach tohto nodu zaklikneme ešte Parse to plain text.

Uložením REST API call nodu sme úspešne ukončili flow, ktorý prináša automatizované spúšťanie v 5-minútovom intervale. Spustenie generátora inicializuje script, ktorý vygeneruje náhodné dáta v preddefinovanom rozsahu 30 až 33, sformuje payload pre HTTPS POST request. Vykoná sa HTTPS POST request z ThingsBoardu do inštancie Watmonitor.

Úspešne prijaté dáta (32) do platformy Watmonitor,
ktorá vizualizuje celkovú výšku hladiny vody, pre hĺbku studne 400 cm
Obdobným spôsobom je možné vytvoriť flow s identickou funkcionalitou v prostredí Node-RED s istými špecifikami. Na blogu nájdete aj návody na priamu integráciu projektu Watmonitor do ThingsBoardu s vytvorením vlastného custom widgetu do dashboardu, či s využitím Rule Chain automatizácie, ktorá zhromažďuje time-series dáta.
Viac o Watmonitore, možnostiach jeho použitia, či detailnejších popis JSON endpointov pre integráciu do iných systémov nájdete na: https://your-iot.github.io/Watmonitor/sk/