blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
3
SLEDUJETE BLOG
martinius96 (at) gmail.com
deadawp



Integrácia Watmonitora do Node-RED skrz JSON endpoint
pridal deadawp 25.9. 2025 o 15:10 (naposledy upravené 29.9. 2025 o 12:24)

Node-RED je nástroj, ktorý umožňuje získavanie dát, ich transformáciu a vizualizáciu v reálnom čase. Je navrhnutý ako nízkokódová platforma pre tvorbu event-driven aplikácií. Základným princípom je skladanie blokov (nodov) do tokov (flowu), ktoré zabezpečujú požadovanú automatizáciu. Používa sa nielen v malých projektoch, ale aj vo veľkých škálovateľných riešeniach priemyselného charakteru. Node-RED má rozsiahlu komunitu a knižnice, ktoré obsahujú predpripravené toky, aj samostatné bloky s funkciami. Tie si môžete jednoducho pridať, prispôsobiť alebo použiť ako základ, ak nechcete budovať celú logiku úplne od nuly.

Dnes si preto ukážeme, ako integrovať hladinomer - projekt Watmonitor skrz JSON enpoint do Node-RED spolu s následnou automatizáciou. V prvom rade je nutné Node-RED nainštalovať do operačného systému. Štandardne sa to realizuje jedným z troch spôsobov.

  • npm - pod node.js
  • Docker
  • Snap 

Najpoužívanejší je práve node.js s jeho príkazom npm (správca balíčkov) môžeme nainštalovať Node-RED do operačného systému ako globálny modul. Príkaz pre inštaláciu node-red: npm install -g --unsafe-perm node-red. (ak používate Linux, nezabudnite na sudo pred príkaz). Nainštalovaný Node-RED (verzia 4.1.0) si môžete následne spustiť cez príkazový riadok (CMD) zadaním príkazu node-red. Server sa spustí na localhost callbacku (127.0.0.1) a porte 1880. Node-RED prostredie je dostupné skrz prehliadač.

Rozhranie Node-RED prostredia je intiutívne. Na ľavej strane máte bloky, ktoré systémom Drag & Drop preťahujete na pracovnú plochu. Po rozkliknutí každého bloku môžete nastavovať jeho parametre, ak nejaké má. Ku každému bloku je možné zobraziť si dokumentáciu priamo v rozhraní. Bloky sú rozdelené podľa kategórii:

  • common - bežné
  • function - funkcie
  • network - sieťové
  • sequence - sekvenčné
  • parser - parsovanie obsahu (payloadu)
  • storage - práca s úložiskom

Vytvoríme si základný flow, ktorý bude pozostávať z 5 minútovej rutiny, HTTP(S) GET requestu, JSON parsera. Tento flow bude v pravidelných intervaloch získavať dáta z Watmonitora a jeho JSON endpointu json_output.php, ktorý štandardne nesie posledné známe dáta. V rámci okna (Flow) môžete mať aj viacero na sebe nezávislých tokov. Môžete si urobiť aj viac ako len jeden flow.

Základný flow
Z kategórie common vyberieme node Inject. Tento Node je určený pre manuálne, alebo automatizované odoslanie správy, čím funguje ako "TICK" generátor pre spustenie nadväzujúceho bloku. Môže na ďalší node zaslať správy typu msg.payload, alebo aj msg.topic. Payload nesie samotnú informáciu, napríklad objekt, hodnotu, text. Topic nesie v podstate kontext, ktorý definuje kam dáta patria / ku čomu patria. To má využitie práve vo veľkých automatizáciách, kde sa musia správy filtrovať, lebo prichádzajú po ronvakom kanále od rôznych IoT zariadení a pod. Najlepšie je predstaviť si to na príklade: msg.payload: 21.4, msg.topic: "obyvacka_teplota". Každý node si môžete ľubovoľne pomenovať, alebo k nemu pridať aj blok komentára. To uľahčuje prácu, najmä ak vytvárate flow v tíme. 

Inject node ponecháme v preddefinovanom stave, kde posiela v msg.payload počet milisekúnd od epoch (Unix timestamp). V spodnej časti upravíme interval na 5 minút a zároveň môžeme aktivovať aj inject once after 0.1 seconds. Toto nastavenie umožní spustiť inject aj po Deployi (nasadení) aplikácie a nemusí sa na prvú iteráciu čakať 5 minút, kým sa spustí.

Druhým blokom bude sieťový node http request. Po jeho rozkliknutí zadáme HTTP metódu GET, URL Watmonitor inštancie a jej JSON endpointu. Request sa spustí vždy, keď príde správa od Inject nodu, teda raz za 5 minút. Request sa vykoná, odpoveď servera (payload) sa získa a ten sa preposiela ďalej.

Samotný http request node okrem requestu nespraví nič iné. Teda ani neurobí parsing dát v JSON formáte, v ktorom ich Watmonitor distribuuje. Na to je potrebné použiť node z kategórie parser, konkrétne json. Node json má prednastavenú akciu "Convert between JSON String & Object", čo je najlepšie riešenie, nakoľko na základe formátu vstupných dát vie, či urobí String, alebo Object. Jednotlivé nody flowu medzi sebou spájame, aby sme zreťazili ich funkcionalitu

Aby sme vedeli, čo ktorý node robí, a ako to ovplyvňuje payload, respektíve, čo posiela na ďalší node, môžete do flowu pridať aj debug nody. Tie nám umožňujú získať lepší pohľad na to, čo sa deje. V pravej časti môžeme vybrať sekciu Debug, ktorá nám vypíše to, čo sa deje v danom flowe. Takto zostavý flow nám dáva základnú funkcionalitu periodického behu, získania dát a ich parsovania do JSON objektu, s ktorým môžeme ďalej pracovať.

 




V požadovanej automatizácii môžeme pridať vyhodnocovanie vstupu pre vykonanie akcie. Ak je hladina vody príliš nízka, môžeme vytvoriť upozornenie, alebo spustiť podprogram. Z kategórie function si vyberieme node function. Po jeho rozkliknutí môžeme vidieť, že tento node vyžaduje vytvorenie podprogramu a dostávame sa tu teda k nízkoúrovňovému programovaniu, ktoré sa v Node-RED bežne využíva. Podprogram je možné zadávať pre rôzne udalosti (On Start, On Messasge, On Stop). Rovnako má setup, kde sa dá nastaviť aj timeout a ďalšie parametre.

Function node vieme použiť aj na debugovanie, kedy si vieme vypísať vstupné dáta, ak práve nevyužívame debug node. Môže to uľahčiť aj fázu vývoja, kedy je možné najprv si vypísať dáta a potom už viete, ako s nimi pracovať na základe toho, či prišli ako payload, alebo topic. V prípade, že kód nie je spustiteľný, vypíše vám o tom informáciu s danou chybou.

Pomocou funkcie môžeme vyhodnotiť konkrétnu hodnotu, ktorá prislúcha kľúču a vykonať akciu. Na ukážku napríklad preformátovať výstup a vypísať, či je hladiny dostatok, alebo nedostatok,  prípadne nadbytok. Formát môže byť textový (string), alebo samostatný JSON objekt v závislosti na tom, čo očakáva ďalší objekt. Scriptovanie a práca s dátami vo funkciách je veľmi jednoduchá. Paradigma je bežný Javascript.



Čo tak ale dáta z Node-RED poslať aj ThingsBoardu po MQTT protokole? V prvom rade musíme poznať informácie, ktoré bude MQTT spojenie vyžadovať. Konkrétne pôjde o hosta (MQTT Broker), topic v1/devices/me/telemetry a tiež autentizáciu skrz token. Token sa používa na označenie používateľa (username) v MQTT spojení.

JS kód zadaný do bloku function, ktorý vytvára nový JSON objekt s kľúčmi hladina a status vo formáte, ktorý podporuje ThingsBoard pre následne odoslanie payloadu po MQTT(S):

let value = msg.payload.value;
let status = "";

if (value > 300) {
    status = "Vody je nadbytok";
} else if (value < 100) {
    status = "Vody je málo";
} else {
    status = "Vody je dostatok";
}

msg.payload = {
    "hladina": value,
    "status": status
};

return msg;

V Node-RED využijeme node s názvom mqtt out z network kategórie a pripojíme ho na výstup function node. Tento node umožňuje odosielať (Publish) dáta na MQTT Broker. V nastaveniach nodu musíme vytvoriť nové pripojenie. Do hosta zadáme thingsboard.cloud a štandardný nešifrovaný MQTT port 1883, avšak môžeme zvoliť aj šifrovaný 8883, ako je vidieť nižšie vo výpisoch v konzoli.



Následne zadáme aj topic v1/devices/me/telemetry. V záložke Security pod používateľským menom zadáme token prislúchajúci vytvorenému zariadeniu na ThingsBoarde. Node odosiela msg.payload automaticky a tak nie je potrebné nič nastavovať. Potrebné je, aby bol v kompatibilnom formáte už z výstupu function nodu.




Samotný mqtt out node nemá výstup pre pripojenie debug nodu, ale má vlastný stavový riadok, ktorý ukazuje, či je pripojený k MQTT brokeru na ThingsBoarde a dá sa to tiež použiť pre určitú formu debugovania. Dané dáta, ktoré sa posielali ako payload sa zapíšu na ThingsBoard do telemetrie príslušného zariadenia a je s nimi možné ďalej pracovať, obsiahnuť ich do vizualizácie a podobne. Zároveň ide o time-series dáta, teda vždy sa uložia aj s časovou značkou na ThingsBoarde, čo znamená, že sa dajú použiť aj pre výpis v grafe v rámci dashboardu.

Pri výpise dát do ThingsBoard dashboardu môžete premenné využiť priamo, alebo môžete využiť aj postprocessing premennej, kedy môžete samostatným scriptom upraviť hodnotu. V tomto prípade pre úroveň naplnenia studne, kedy sa vypočíta nameraná hodnota / hĺbka studne (x100), čím získame percentuálne vyjadrenie naplnenia studne.

Obdobným spôsobom je možné použiť aj http request node, ktorý môže cez REST API zapísať dáta aj do ThingsBoardu, ale zároveň jeho možné použiť aj na ďalšie akcie typu spustenia webhookov (IFTTT, Zapier, n8n a podobne), čo môže priniesť zaujímavý a rýchly spôsob informovania používateľa na akcie, ktoré vo Watmonitore nastali. Node-RED môžete jednoducho rozširovať ako chobotnicu.

Node-RED môže pushovať dáta aj do iných - vyšších systémov: SAP, Odoo, Loxone, Power BI, Home Assistant, Grafana, InfluxDB, Tableau, AWS IoT, SCADA, HMI, MES.

Export nodov a flowu z Node-RED nájdete na: 
https://github.com/martinius96/hladinomer-studna-scripty/tree/master/examples/Hladinomer/Node-RED

Projekt Watmonitor môžete vyskúšať zdarma s vašim hardvérom na: 
https://your-iot.github.io/Watmonitor/sk/

Príklad rozšíreného flowu v Node-RED pre Watmonitor, ktorý posiela JSON po UDP ako broadcast na všetkých klientov v sieti, cez switch vykonáva porovnanie, či je dostatok vody pre 3 cases. Ak je nedostatok vody, odošle sa alarm skrz Zapier (webhook), ktorý je spustený nodom HTTP REQUEST. V payloade upravený JSON (identický, ako sa posiela na ThingsBoard pri MQTT Publish). Alarm skrz Zapier môže poslať upozornenie používateľovi na e-mail, Messenger, WhatsApp, SMS, prípadne ak má používateľ vlastný endpoint, môže sa notifikácia zaslať aj tam, prípadne môže zastaviť stroj, čerpadlo skrz firemné API s volaním do ERP systému. Použití je nespočet.

Node-RED je v tomto prípade vhodný ako medzičlánok najmä preto, že dokáže skonvertovať a prispôsobiť formát payloadu podľa potrieb cieľového systému. Niektoré podnikové ERP, či SCADA systémy môžu vyžadovať štandardný (RAW) payload v tele POST / PUT HTTP(S) requestu, niektoré môžu vyžadovať payload v iných formátoch, napríklad JSON (môže byť štandardný, zapuzdrený), či XML. Iné systémy môžu mať aj MQTT Broker, alebo počúvajú na TCP / UDP. Dokonca môžu mať tieto systémy aj vlastný endpoint (tzv. Push model), do ktorého musí dáta posielať Node-RED, ale dokonca aj samotný Node-RED môže vytvoriť endpoint a tak cieľový systém môže ťahať dáta priamo z Node-RED.

Na blogu môžete nájsť aj iný článok, ktorý popisuje postup pri priamej integrácii Watmonitora do ThingsBoardu s využitím custom widgetu, alebo Rule Chain logiky pre posledné, prípadne time series dáta.



Prístupov 436
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDUJETE
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
Integrácia Watmonitora do Node-RED skrz ...
[ 25.9.2025] (príspevkov 0)
Watmonitor - spustenie na Endora.cz
[ 23.9.2025] (príspevkov 0)
ThingsBoard - JSON endpoint Watmonitora
[ 23.9.2025] (príspevkov 0)
Watmonitor - JSON endpoint integrácia
[ 21.9.2025] (príspevkov 0)
Klonovanie projektu Watmonitor
[ 19.9.2025] (príspevkov 0)
GATT server s ESP32-C6
[ 12.9.2025] (príspevkov 0)
Tohtoročné výnosy obilia pod Tatrami
[ 31.8.2025] (príspevkov 0)
Odstávky elektriny - ePaper s ESP32
[ 30.8.2025] (príspevkov 0)
Dojmy: VIETCONG
[ 28.8.2025] (príspevkov 0)
433 MHz prijímač s Arduinom v roku 2025
[ 26.8.2025] (príspevkov 0)