Populárna IoT platforma ThingsBoard má mnohé možnosti integrácie dát z iných systémov. Na blogu sme si už popísali metódy Pull modelu s využitím vlastného HTML widgetu, ktorý v periodickom intervale získava posledné dáta z Watmonitora a taktiež aj formu priameho zapísania telemetrie zariadenia na ThingsBoard z nástroja Node-RED na základe vytvoreného toku blokov po MQTT.
Ako sme vtedy spomenuli, ThingsBoard je typom Push platformy. To znamená, že platforma je navrhnutá primárne na získavanie dát, kedy request robí zariadenie, ktoré pushuje dáta na platformu. Dnes sa budeme zaoberať integráciami. Integrácie boli na platforme ThingsBoard vyvinuté najmä pre účely hromadného zberu dát z rozličných zariadení, ktoré využívajú konkrétny formát dát. Cielilo to najmä na LPWAN siete ako LoRaWAN, Sigfox, NB-IoT. Teda zápis dát mohol byť priamy, ale aj nepriamy z pohľadu zariadenia. To znamená, že ak zariadenie nedokázalo dáta posielať priamo na platformu, realizovalo sa to cez prostredníka, najčastejšie aplikačný server, či cloud backbone v závislosti od technológie.
Tento model využijeme aj dnes, i keď nepôjde o hromadný zber dát z viacerých IoT snímačov, ale z jednej platformy. Samotná integrácia bude prakticky prenosná pre import akejkoľvek inštancie Watmonitora, pokiaľ bude používateľ prevádzkovať len jedno rozhranie, aby sa nemixovali dáta s využitím rovnakej integrácie, ktorá očakáva rovnaký formát dát. Pre viacnásobné inštancie Watmonitora je nutné použiť samostatné integrácie, zariadenia, avšak je možné využiť jeden komplexný dashboard aj s rôznymi zdrojmi time series dát.
1. Vytvorenie integrácie
Prihláste sa do platformy ThingsBoard a v časti Integrations Center vyberte Integrations. V pravom rohu rozhrania vyberte Add dashboard prostredníctvom ikony +. Vo vyobrazenej ponuke je nutné zvoliť typ integrácie. Je tu mnoho predpripravených profilov pre rôzne platformy (AWS, The Things Stack Industries / Community, ChirpStack, Sigfox, KPN Things, Azure, Apache Pulsar, Kafka, Loriot, RabbitMQ, iotcreators.com (T-Mobile IoT), Tuya a aplikačné protokoly CoAP, HTTP, OPC-UA, MQTT..., tiež sa tu nájde aj možnosť priameho použitia "low-level" protokolu TCP a UDP, teda pod aplikačnou vrstvou OSI modelu.

Watmonitor webovo orientovaná aplikácia, využijeme preto HTTP integráciu. Zvolenej integrácii nastavíme názov a ponecháme aj štandardne zapnuté funkcionality - oprávnenie integrácie vytvárať nové zariadenia a tiež spustenie integrácie, teda, že bude schopná prijímať požiadavky a vykonávať akcie.
Ďalším krokom bude nastavenie Uplink data converter. Ide o funkciu dekódera, ktorá umožňuje prečítať payload a môže s ním následne pracovať a urobiť akcie. Payload je štandardne v JSON formáte. Môže ísť o primitívnu JSON štruktúru, alebo aj JSON pole s rôznou úrovňou hĺbky dát. Práve pre tento účel sa vytvorí dekóder na mieru, ktorý bude poznať tento univerzálny formát dát a vie s ním pracovať. V našom prípade budeme z Watmonitora posielať dáta s jedným parametrom v JSON - water, ktorému priradíme hodnotu.
Na strane Watmonitora môže byť hodnota rozdielová, teda vzdialenosť od hladiny vody po veko studne, alebo celková, teda od dna po hladinu v závislosti od toho, čo chceme vizualizovať. Na základe toho môžeme vizualizáciu previesť priamo, alebo vykonať aj postprocessing pre výpočet reálnej výšky hladiny vody na strane ThingsBoardu, aj keď budeme disponovať len rozdielovou..
Vnorený kód pod funkciu dekódera function decoder(payload, metadata) {:
/** Decoder **/
// decode payload to JSON
var data = decodeToJson(payload);
var deviceName = 'integration-node';
// Result object
var result = {
deviceName: deviceName,
telemetry: {
level: data.water
}
};
return result;

Pri vytváraní kódu pre dekóder si ho môžete aj priamo otestovať so vzorovými dátami, kde môžete vidieť aj výsledok, či sa konverzia telemetrie podarila, a či sa tam objavuje konkrétne číslo, ktoré prislúchalo tomu vo vzorovom payloade. Ako je možné si povšimnúť, dekóder definuje aj zariadenie integration-node, ktorému bude daná telemetria pripísaná. Nakoľko sme autorizovali integráciu aj pre vytváranie zariadení, zariadenie bude vytvorené aj keď pod Devices zatiaľ neexistuje. Samotný dekóder, ktorý sme vytvorili nazývame Uplink data converter. Po jeho uložení bude converter vytvorený pod záložkou Data Converters v Integrations Center. Samotný Uplink data converter bude priradený ako dátový konvertor pre danú HTTP integráciou.

Ďalší krok pre vytvorenie downlink konvertora dáta preskočíme kliknutím na Skip, nakoľko nebudeme posielať dáta na zariadenie a pokračujeme na posledný krok Connection. Tu vidíme vytvorený HTTP endpoint, ktorý ThingsBoard využíva pre zber dát a samotné spustenie integrácie s jej uplink konvetorom. Môžeme tu zapnúť aj sekundárne overenie requestu z externého zdroja overením definovateľnej HTTP hlavičky a jej hodnoty. Pre ukážku to ponecháme defaultne bez overenia dodatočných HTTP hlavičiek. Integráciu vytvoríme kliknutím na Add v tomto bode.
2. CURL volanie z Watmonitora
Aby sme docielili periodické spúšťanie integrácie a zároveň ponechali Push model, kedy budeme posielať dáta do platformy, využijeme v zdrojovom súbore Watmonitora data.php časť CURL volania, ktoré dokáže poslať dáta na platformu ThingsBoard. CURL volanie pre HTTP POST request s JSON dátami je predpripravené, jediným parametrom, ktorý je potrebné pozmeniť je cieľový URL platformy ThingsBoard na endpoint, na ktorom vaša integrácia beží, rovnako môžete použiť, ktorú hodnotu chcete posielať (rozdielovú, alebo celkovú).

Zápis do ThingsBoardu sa v takomto nastavení vykoná vždy, keď Watmonitor príjme nové dáta zo senzorového uzla (ESP32, ESP8266, Arduino). Po zápise dát vráti ThingsBoard návratový kód HTTP 204, nakoľko API endpointu štandardne neposiela žiadny payload (No-Content). API posiela jedinú HTTP hlavičku a to date s dátumom a časom requestu v GMT.
To, či sa dáta do ThingsBoardu zapísali uvidíte pri otvorení záložky Devices, kde môže byť jedným z indikátorov aj Active status zariadenia integration-node a tiež po otvorení ponuky zariadenia a prekliku na Latest telemetry uvidíte aj aktuálne dáta, ak dorazili pre kľúč level.


3. Vizualizácia dát (telemetrie) na ThingsBoarde
Dané dáta môžete vizualizovať ako štandardnú telemetriu skrz Dashboards v ľubovoľnom grafe, ktorý poskytuje poslednú telemetriu, alebo aj time series dáta. Integrácia dáta uloží vždy s aktuálnou časovou značkou UNIX času, teda dáta môžete vizualizovať aj historicky za celú dobu fungovania integrácie. Widgety pracujúce s time series dátami umožňujú aj agregáciu, či priemerovanie dát, čo môže byť výhodne pri vizualizáciách, kde sa dáta skokovito menia a je nutné ich vyhladenie medzi prechodmi.

Ak vás Watmonitor zaujal, viac informácii o tejto webovej aplikácii môžete nájsť na stránke projektu: https://your-iot.github.io/Watmonitor/sk/, projekt môžete vyskúšať s vašim hardvérom (ESP32, Arduino, ESP8266, spolu s ultrazvukoým, alebo laserovým ToF snímačom vzdialenosti. Rovnako tak je ale možné použiť aj sofistikovanejšie riešenia na báze priemyselných snímačov a riešení, ktoré je možné vizualizovať aj priamo vo Watmonitore s prepojím na ThingsBoard.
Uplink konvertor dát použitý pre Watmonitor rozhranie:
https://github.com/martinius96/hladinomer-studna-scripty/blob/master/examples/Hladinomer/TB/uplink_converter.json