Ubidots je komplexný nástroj, ktorý spája budovanie IoT aplikácii, vizualizácie a dátovú analytiku. Je určená predovšetkým pre priemysel, ale využitie nájde aj vo výskumnej a akademickej sfére. Má širokú základňu nástrojov, knižníc pre integráciu širokého počtu a typov zariadení. Platforma umožňuje prijímanie dát skrz protokoly HTTP, MQTT, TCP, UDP, alebo parsovaním priemyselných protokolov. Ponúka viac ako 20 typov widgetov pre dashboardy (metriky, grafy, tabuľky, mapy, kontrolné - tlačidlá a prepínače, hodin, obrázky, či pokročilé SCADA, HTML Canvas, Custom UI), umožňuje analytiku, či postprocessing, ktorého výsledkom sú syntetické premenné.


Ubidots je výhradne typom Push aplikácie (Pull by mohlo byť možné urobiť v custom Widgete, ale HTML Canvas je dostupné iba pre Industrial používateľov, nie pre STEM) a tak nemôžeme získavať dáta z Watmonitora (webová aplikácia hladinomera) priamo requestom z platformy. Musíme využiť spôsob, ako dáta posielať priamo z Watmonitora, alebo s využitím middlewaru. Najbežnejší protokol, ako bude možné dáta do platformy poslať bude využitie HTTP(S), ktoré vieme zrealizovať z middleware, ale aj priamo z Watmonitora CURL volaním. Tento návod je univerzálny pre Ubidots účty typu STEM, či Industrial.
V hlavnej záložke klikneme na Devices pre správu zariadení. Klikneme na Create a device a vyberieme Blank device, nakoľko nevyužívame žiadne z dostupných hardvérových riešení v Ubidots. Pomenujeme, napríklad Watmonitor-device, čo nám vytvorí aj rovnomenný API label s kombináciou malých znakov.

Po rozkliknutí profilu môžeme v ľavej časti zoznamu zviditeľniť token zariadenia, ktorý autorizuje zápis dát do Ubidots, ktoré sa budú archivovať pod týmto virtuálnym zariadením. Samotný HTTPS POST request bude v URL adrese obsahovať device label (v našom prípade watmonitor-node) a tiež dvojicu HTTP hlavičiek, ktoré definujú autorizačný token zariadenia (pre účel článku BUS-NsBhGbMncIpp7GaRCD96J9jO5ZXotX) a tiež typ odosielaných dát - JSON:
- https://industrial.api.ubidots.com/api/v1.6/devices/watmonitor-node/
- X-Auth-Token: BBUS-NsBhGbMncIpp7GaRCD96J9jO5ZXotX
- Content-Type: application/json
Samotný payload bude obsahovať štandardnú JSON štruktúru s kľúčom a hodnotou { "water":123 }. Formát payloadu môže byť aj iný, v prípade, že potrebujete posielať textové reťazce (resp. nečíselné hodnoty) a vtedy sa využíva tzv. context kľúč, ale to v tomto prípade jednoduchej integrácie číselných hodnôť nevyužijeme.
V prípade, že dáta boli zapísané, získate odpoveď Ubidots backendu v JSON formáte so status kódom 201. V prípade, že je problém s tokenom, tak vám túto skutočnosť vypíše a upozorní na neoprávnenie používateľa na zápis dát.
{ "water":
[
{ "status_code": 201 }
]
}
Okrem tokenu pri zariadení môžete použiť aj token používateľa. Pozor, okrem tokenu nájdete aj API kľúč, nie je to to isté! Po uložení dát môžete tieto dáta vidieť aj v prehľade zariadenia ako premennú, kde už bude aj hodnota, ktorú backend prijal. Posielať je možné rozdielovú hodnotu (vzdialenosť medzi snímačom na veku studne a hladinou), alebo celkovú hodnotu (od dna po hladinu).

Prejdeme na hlavný prehľad kliknutím na Ubidots v ľavom hornom rohu, ktorá nás navedie čo časti Dashboardov. Vytvoríme si dashboard, v tomto prípade Watmonitor_integration. Po kliknutí na Add new Widget a vyberieme si graf, ktorý sa nám páči. Po vybratí typu vizualizácie Ubidots bude požadovať výber zariadenia a konkrétnej premennej, ktorej hodnota sa bude zobrazovať. V časti agregácie je možné nastaviť, akú hodnotu budeme zobrazovať z time-series dát. Poslednú, priemerovanú, sumár, minimum, maximum, prvú, počet záznamov...

V sekcii Appearance môžeme widget dodatočne upravovať. Nastaviť meno, počet desatinných miest, farby, formát dátumu a času. Pre pokročilých používateľov je tu aj možnosť úpravy widgetu cez HTML editor. Jednotka premennej sa tu nenastavuje.

Tá sa nastavuje v premennej pod kontrétnym devicom v Devices sekcii. V prípade, že použijeme graf pre vizualizáciu, budeme vidieť dáta z Watmonitora za dané časové obdobie, ktoré si navolíme (za prepokladu, že prijímame dáta kontinuálne z Watmonitora aj do Ubidots).
Príklad CURL volania z Watmonitora pre ukážkové dáta:
$hodnota = 48;
$ch = curl_init("https://industrial.api.ubidots.com/api/v1.6/devices/watmonitor-node/");
$data = json_encode([ "water" => $hodnota ]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"X-Auth-Token: BBUS-NsBhGbMncIpp7GaRCD96J9jO5ZXotX" ]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch); if (curl_errno($ch)) {
echo "Chyba CURL: " . curl_error($ch); }
else { echo "Odpoveď Ubidots: " . $response; }
curl_close($ch);
Middleware - Node-RED
Obdobným spôsobom by dokázal dáta posielať aj Node-RED (ako middleware) flow, ktorý by využíval node function pre preformátovanie dát na požadovaný formát, ak by získal dáta priamo z JSON endpointu Watmonitora json_output.php, ktorý poskytuje dáta v takomto formáte:
{
"name": "Waterwell at home",
"value": 340,
"depth": 400,
"volume": 1709.03,
"time": "26. Oct 18:11",
"time_now": "26. Oct 22:22"
}
Preformátovanie je tu nutnosťou, nakoľko sa v JSON-e nachádza aj textový reťazec, ktorý štandardne neposielame, ale je ho nutné "odrezať", prípadne sa môže poslať, ale vyžaduje sa použitie context kľúča v JSON formáte. Obdobne môže po úprave dát na požadovaný formát Node-RED poslať dáta do Ubidots po MQTT klient (Ubidots má nato samostatný Node-RED node. So štandardným MQTT Publish nodom mi fungovalo pripojenie, ale dáta sa nikdy nezapísali bez ohľadu na formátovanie msg.payload).
Aj s function nodom, ktorý som pôvodne používal aj pre formátovanie identického payloadu na iné IoT platformy to prešlo na prvý krát, ak som použil Ubidots Node. Node je možné nainštalovať cez Manažéra paliet. Balíček má názov node-red-contrib-ubidots. Nainštalujú sa dva nody, jeden pre Subscribe (IN), druhý pre Publish (OUT), ktorý potrebujeme. V nastaveniach nodu sa volí typ účtu (Industrial / STEM), zadávajú sa údaje o tokene používateľa a tiež o device label. Samotnú premennú, do ktorej sa zapíše hodnota definuje function node pri tvorbe JSON objektu. MQTT broker je dostupný na adrese: industrial.api.ubidots.com na štandardných portoch 1883 pre MQTT, či 8883 pre MQTTS.

Tento MQTT Broker môžu používať aj STEM používatelia Ubidotsu, i keď v súčasnosti je dostupný Broker pre nich aj na adrese: things.ubidots.com, ale plánuje sa jeho ukončenie a Industrial MQTT Broker bude fungovať aj pre STEM používateľov. Ubidots vyžaduje použitie používateľského mena, ktoré reprezentuje token a nepoužíva heslo. Samotný publish sa realizuje na topic, ktorý obsahuje label zariadenia, napr.: /v1.6/devices/watmonitor-node pre naše zariadenia watmonitor-node. Ako vidíme, dosiahli sme zhodné dáta na Ubidotse s tými, ktoré má v rozhraní Watmonitor.


Ďalšími z bohatých nástrojov platformy Ubidots je možné vykonávať dátovú analytiku z nameraných údajov, prepovedať stavy, vytvárať syntetické premenné (postprocessing). Rovnako môžete konfigurovať Events (notifikácie, akcie), či Data pipelines pre vytváranie automatizácii.
Vyskúšajte Watmonitor s vašim hardvérom (dostupné ukážkové zdrojové kódy pre ESP32, ESP8266, Arduino, Rpi Pico W s WiFi / Ethernet konektivitou a ultrazvukovým / laserovým ToF snímačom), alebo Watmonitor integrujte cez JSON endpoint do vášho rozhrania Ubidots, či priemyselnej aplikácie priamo / cez Node-RED middleware:
https://your-iot.github.io/Watmonitor/sk/
Node-RED flow použitý v príklade integrácie Watmonitor do platformy Ubidots (STEM / Industrial):
https://github.com/martinius96/hladinomer-studna-scripty/tree/master/examples/Tools_Integrations/Ubidots