Je to už rok, čo ThingsBoard zaviedol do Rule Chain aj AI request node, ktorý umožňuje použitie rôznych AI modelov vo flowe blokov pre prácu nad dátami, čo značne rozšíruje možnosti bežných automatizácii a pod. Tento blok bol zahrnutý do skupiny External blokov. Dnes si ukážeme základné nastavenie bloku, aby bol funkčný a vy ste si na ňom mohli ďalej stavať vlastnú aplikáciu. Využijeme jazykový model Gemini LLM, ktorý je použiteľný s API kľúčom zdarma s ohľadom na limity.
V prvom rade je potrebné pochopiť, s čím dokáže AI request node na ThingsBoarde pracovať a v akom formáte doň dáta prichádzajú. Na vstupe nodu bude štandardne JSON payload, ktorý bude odpovedať tomu, čo má na výstupe prechádzajúci node, ktorého výstup je na AI request node napojený. Táto správa bude obsahovať dáta (tzv. telemetriu), meta dáta a môže obsahovať aj typ správy. AI model dokáže pristupovať k telemetrii a meta dátam.
Konkrétne dátové pole podľa kľúča môže byť vyžiadané špecificky, alebo je možné nechať model pristúpiť k celému payloadu telemetrie / meta dát. Samotná požiadavka na AI model sa realizuje promptom, ktorého výstupom môže byť text, JSON, alebo JSON schema. AI request node je schopný odpovedať na prompt. Nedokáže sám spúšťať akcie. Teda to už musíte riešiť vytvorenou rozhodovacou logikou v Rule Chain flowe. Ak riešite detekciu anomálii s potrebou vytvorenia alarmu, dokážete určiť s využitím check fields presence nodu, či sa v odpovedi AI na prompt takáto detekcia nachádza a následne samostatným blokom vytvoríte alarm.

Príklad vytvorenia alarmu na základe detekcie anomálie v AI odpovedi
Nastavenie AI request nodu
Otvoríme Rule Chain vytvoríme požadované bloky pre zdroj dát - napríklad REST API call node, pripojenie telemetrie z existujúceho zariadenia, alebo si môžeme dáta generovať cez Generator node periodicky. Na výstup takéhoto nodu dáme AI request node.

AI request node v External kategórii dostupných blokov v Rule Chain
Po rozkliknutí AI request nodu musíme vybrať AI model z uložených. Štandardne nebudete mať žiadny dostupný a musíte si nejaký vytvoriť, na to slúži práve možnosť Create new, ktorá sa Vám pri položke zobrazí. Vytváraný model si pomenujete a vyberiete Providera. Na výber sú: OpenAI, Azure OpenAI, Google Gemini (Gemini API), Google Gemini (Agent Platform - Vertex AI), Mistral AI, Anthropic, Amazon Bedrock, Github Models, Ollama.
Väčšina modelov funguje s externým poskytovateľom a tak potrebujete API kľúč. V prípade OpenAI ho nedostanete zdarma, musíte si predplatiť balík. Preto použijeme Google Gemini (Gemini API) providera. Šlo by použiť aj Ollama, avšak LLM si musíte hostovať na vlastnom serveri, kde bude lokálne beťať a tam by sa ThingsBoard pripájal. S tým súvisí aj nutnosť verejnej IP adresy / domény.
Po zvolení Google Gemini (Gemini API) musíme zadať API kľúč. Ten získate na: https://aistudio.google.com/api-keys, kde si ho viete vytvoriť. Po vytvorení kľúč nakopírujete do ThingsBoardu, časti API key pod Providerom.

Po zadaní API kľúča si môžete vybrať AI model ID. Najvyšší k dispozícii je "gemini-3.5-flash" (Gemini 3.5 Flash) a najnižší "gemini-2.5-flash-lite" (Gemini 2.5 Flash-Lite). Pokračujeme výberom parametrov, ktoré sú určené na prispôsobenie modelu, konkrétne hodnoty nechám na každom samostatne.
Ide najmä o nastavenie náhodnosti, kreatívnosti odpovede, predvídateľnosti výstupu, obmedzenie počtu slov (tokenov). Pre Gemini LLM, ktorý používame musíte nastaviť Presence penalty a Frequency penalty parametre na 0. Na konci okna po vyplnení všetkých polí získate možnosť kliknúť na Check connectivity. To urobí jednorázové pripojenie s AI modelom a v prípade problému Vás upozorní na chybu, najčastejšie zlý API kľúč, alebo nastavený parameter mimo dovoleného rozsahu, ktorú treba vyriešiť. Ak to zbehne v poriadku, máte vyhrané a môžete model použiť.



Po uložení tohto modelu sa vrátite na predchádzajúce okno a môžete si uložený model navoliť a pokračovať v nastavení promptov. K dispozícii sú 2 prompty a to systémový s predvyplneným obsahom a používateľský. Systémový prompt slúži na zadanie hlavnej úlohy AI modelu a najmä jeho obmedzenia, požadovaného správania. Môžete ho však uložiť aj ako prázdny, nakoľko je voliteľný, alebo ho ponechať aj v pôvodnom preddefinovanom nastavení.
Používateľský prompt slúži priamo na zadanie konkrétnej úlohy, ktorú má model s dátami (vstupom) vykonať a aj tu viete do značnej miery ovplyvniť, ako bude výstup vyzerať. Do samotného promptu môžete nalinkovať aj konkrétnu telemetriu / meta dáta, ktoré prichádzajú z predchadzajúceho nodu vo flowe v Rule Chain. K obsahu správy, ktorá beží medzi nodmi viete pristupovať pri prompte cez $[*] pre kompletnú telemetriu / $[key] pre konkrétny kľúč (field) v JSON telemetrii, prípadne ${*} pre všetky metadáta, či ${key} pre konkrétny kľúč v metadátach.

Ďalším parametrom sú AI zdroje. Tu môžete nahrať dokument, ktorý bude AI modelu stále k dispozícii. Môže ísť o textový súbor, excelovskú tabuľku, .pdf súbor, alebo obrázok. Veľkosť súboru je max. 10 MB. Tieto zdroje v sebe môžu niesť rôzne tabuľky, inštrukcie, hraničné, či cieľové dáta, referenčné informácie a iné.
Tieto zdroje môžu byť nápomocné pre rozhodovanie AI modelu pri konkrétnych úlohách. Posledným volitelným parametrom je formát výstupu, odporúčal by som asi ponechať na JSON, nakoľko na ňom funguje celý Rule Chain. V pokročilých nastaveniach môžete navyše zapnúť aj timeout, či vypnúť štandardne zapnuté vynútené potvrdenie prijatia správy na vstupe.
Nižšie ukážka telemetrie a meta dát skrz debug log nodu


Prvý test
AI model je pripravený na vykonávanie zadanej operácie s Vašimi dátami. Ak potrebujete vytvorený flow debugovať, môžete použiť log node zo skupiny Action. To Vám umožní mať prehľad o obsahu správy - telemetrie, meta dát, či typu správy a to ako pred AI nodom, tak aj na jeho výstupe. Do logiky môžete zahrnúť aj použitie už existujúcej telemetrie z time-series dát, ktorá je už uložená na ThingsBoarde.
To nájde využitie v aplikácii, kde chcete detekovať anomálie pre porovnanie aktuálnej telemetrie so skoršími dátami, kde sa zamieriavate na neštandardné rozdiely, či skoky. Možností použitia AI request nodu sú ozaj široké a závisí len na tom, čo všetko mu na vstupe pripravíte a ako to vyskladáte v prompte. Možností, čo sa stane na výstupe je mnoho a AI request node Vám môže dáta zapísať, alebo aj spúšťať iné funkcionality, napr. vytvorenie alertu, zaslanie e-mailu, či spustenie webhooku.

Ak ťaháte telemetriu z ThingsBoardu, ktorá má rovnaký kĺúč ako vstupná hodnota, dôjde k prepísaniu. Dá sa to riešiť napríklad transformáciou s vlastným scriptom, alebo môžete v node originator_attributes nastaviť, aby dáta boli dané do meta dát miesto telemetrie, čím získate možnosť porovnania napríklad $[key] vstup z telemetrie s ${key} z meta dát, aj keď majú rovnaký názov kľúča.
Príklad použitia
Nižšie máme príklad, flowu, kde zahrnieme aj riešenie porovnania telemetrie voči meta dátam, kde bude použitý rovnaký kľúč. Zostavený flow využíva Generator node, ktorý sa spúšťa periodicky každých 5 minút (300 sekúnd). REST API call node vykoná HTTPS GET request na webaplikáciu Watmonitor (webové rozhranie hladinomera), kde z JSON API endpointu vyčíta dáta, vzorovo:
{
"name": "Hladinomer - záhrada", // názov studne / IoT snímača
"value": 100, // aktuálna hladina vody
"depth": 200, // hĺbka studne
"percentage": 50, // percentuálne naplnenei studne
"volume": 284.2, // aktuálny objem studne
"time": "21. Jul 12:25", // časová značka zápisu vo Watmonitore
"time_now": "21. Jul 12:28" // časové značka času dopytu (GET requestu)na server
}

Tieto dáta sú po requeste obsiahnuté v telemetrii. Skrz originator attributes node sa vyžiada posledná známa telemetria z ThingsBoardu, kde sú uložené prechádzajúce time-series dáta pre premennú (kľúč) value, ktorá nesie informáciu o posledne známej výške hladiny vody. Tieto dáta sa ale nezahrnú do telemetrie, ale do meta dát, aby k nej bolo možné pristupovať pod rovnakým kľúčom, ako je využitý pre telemetriu z Watmonitora bez toho, aby došlo k prepísaniu hodnoty. Nižšie vidíme nastavenie originator attributes nodu, ktorý dáta posúva do meta dát miesto do správy (telemetrie).

Log node slúži iba na debug účely a výpis, čo telemetria / meta dáta obsahujú. Flow pokračuje do AI request nodu, ktorý v tejto modelovej situácii vykoná porovnanie value z telemetrie (získaná z JSON API endpointu Watmonitora) s value z ThingsBoardu, ktorá je v meta dátach.
Do promptu sme zadali príkaz: Compare $[value] with ${value} and say if $[value] is higher, lower, or the same with ${value}.
Význam promptu - Porovnaj value z telemetrie (z Watmonitora) s value z meta dát (z ThingsBoardu), či je value z telemetrie vyššia, nižšia, alebo rovnaká v porovnaní s value z meta dát.

Príklad porovnania s rovnakými dátami. Rozdiel sa nenašiel, sú identické "the same". Výpis do telemetrie kľúča comparison uložil celú JSON štruktúru, vrátane value1 a value2 a ich hodnôt, ktoré boli porovnávané a výsledok the same obsiahla do kľúča result.

Príklad porovnania s vyššou hodnotou v telemetrii (posledných dátach z Watmonitora) voči meta dátam (staršej hodnote z time-series dát, ktorá už bola uložená na ThingsBoarde). Ako je možné vidieť, parametre vo výstupe sa rozšírili aj o statement, ktorý komentuje, že 380 je viac ako 365. Je to však možné riešiť optimalizovanejším promptom, ktorý striktne vyžiada iba napr. jeden parameter.

Po optimalizácii promptu pre stručnejšiu odpoveď, kde sme si vyžiadali "put only that to comparison", aby do comparison zadal iba túto jednú informáciu, či je hodnota telemetrie väčšia, menšia, alebo rovná s hodnotou v meta dátach:


Limity free tieru - Gemini API
Gemini API má svoje limity a obecne platí, že čím dokonalejší a pokročilejší model využívate, tým ho vo free tiere môžete kratšie používať. Pre model Gemini 3.5 Flash máte k dispozícii 5 requestov za minútu, 250K vstupných tokenov za minútu a 20 peak requestov sa deň. Pre porovnanie, u Gemini 3.1 Flash Lite získavate 15 requestov za minútu, 250K vstupných tokenov za minútu a 500 peak requestov za deň.
V prípade, že prekročíte minútové obmedzenia, dostanete HTTP kód 429 Too Many Requests. Myslím, že použitím lite verzie oproti štandardnej o veľa neprídete pre jednoduché typy úloh ako porovnanie čísel, hľadanie anomálie v sérii čísel a pod, pokiaľ nejde o rozsiahlu dátovú analýzu, či použitie špecifických metód, kde by bol vyšší model rýchlejší a zrejme aj presnejší.

Ukážkový Rule Chain, na ktorom bol príklad vyhotovený je dostupný tu:
https://github.com/martinius96/hladinomer-studna-scripty/blob/master/examples/Tools_Integrations/ThingsBoard/AI_Comparison/watmonitor_ai.json
Dôležité informácie pre Import watmonitor_ai.json - Rule Chainu
Generator v tomto Rule Chain flowe využíva aj Originator, ktorý je viazaný na vytvorené zariadenie. Musíte si tu nalinkovať vlastné, môžete vytvoriť akékoľvek (napr. virtual_device).

Pre vytvorené zariadenie nepotrebujete vytvárať špecifický profil v sekcii Profiles, ani nastavovať tento Rule Chain k default profilu. Funguje absolútne samostatne. Referenciou Originatora ide výhradne o nalinkovanie výstupnej telemetrie k tomuto zariadeniu, aby ju bolo možné vykresliť v Dashboarde, alebo ju mať vôbec uloženú ako time-series dáta, teda budete môcť pristupovať aj k historickým dátam. Originator - teda referenciu na zariadenie využíva aj originator attributes node, ktorý získava poslednú známu telemetriu z ThingsBoard time-series dát, ktorá je nevyhnutá pre porovnávanie dát pri AI request node.
Musíte si vytvoriť vlastný AI model, nakoľko referencia existujúceho AI modelu je neprenosná, nakoľko .json obsahuje iba id referenciu, ktorá funguje iba z autorizovaného účtu, ktorý ju vytvoril. Rovnako tak potrebujete získať API kľúč z AI Studio na Google pre použitie Gemini LLM, ktorý si následne do vytváraného AI modelu nastavíte po nastavení providera.

V prípade, že už máte AI model uložený a chcete ho akýmkoľvek spôsobom upraviť, musíte ísť cez navigáciu menu - Settings --> AI Models, priamo v Rule Chain nato nie je možnosť. V prípade, že zmeníte AI model, môžete AI request node normálne prevádzkovať ďalej, spôsob promptu, atď. je identický bez ohľadu na použitého providera AI modelu, či konkrétny model, ktorý v rámci neho používate. Môžete si ho tak nastaviť na Gemini LLM a následne prejdete na OpenAI, či Bedrock prakticky jedným klikom.
Vyskúšajte aj webové rozhranie Watmonitora, odosielajte vlastné dáta skrz Arduino, ESP32, ESP8266, či iný mikrokontróler a vyskúšajte si AI na ThingsBoarde pre prácu s týmito dátami:
https://hladinomer.eu/
Dokumentácia AI request nodu na ThingsBoard Docs:
https://thingsboard.io/docs/pe/reference/rule-engine/nodes/external/ai-request/