Sobota, 6 června, 2026
Návody

Jak zobrazovat statistiky z Loxone v Grafaně pomocí node-red

V tomto článku se zaměřím na věc, kterou jsem vybudoval přibližně 2 roky zpět ještě před tím, než jsem začal využívat Home Assistant.

Jako jedna z prvních věcí, když jsem dokončil nastavení Loxone byl oto, že jsem chtěl hezky vizualizovat statistiky. Loxone sice umí zobrazovat statictiky, ale maximálně jen jednu hodnotu. To mi přišlo nedostatečné.

Z práce jsem zvyklý na používání Grafany, takže stačilo vymyslet způsob, odkud budu brát data pro vizualizaci. Nechtěl jsem využívat způsob, který by zahrnoval ukládání dat na paměťovou kartu Miniserveru, takže bylo potřeba najít řešení, kdy Loxone MS zašle data do nějaké databáze. Vzhledem k tomu, že Loxone ale nemá přímou podporu, tak jsem musel přidat nějaký článek mezi Loxone MS a databázi.

Našel jsem knohovnu node-red-contrib-loxone, která umožňovala registraci k odběru událostí z MS a jeho zpracovávaní v node-red. Node-red je aplikace, kterou si jde rozjet v dockeru, nebo lokálně na serveru/počítači a následně umožňuje tvorbu workflows pomocí vizuálního klikátka.

Pro node-red je napsána knihovna node-red-contrib-influxdb, která pro změnu umožňuje ukládání dat do Influx databáze. Výběr je hotový, nyní k řešení.

Prerekvizity:

  • nainstalovaný node-red
  • nainstalovaná influxDB
  • do node-red nainstalované nodes (pravo nahoře Menu > Manage palette a tab Install):
    • node-red-contrib-influxdb
    • node-red-contrib-loxone

Nastavení

Na začátku je potřeba nastavit konfigurační node pro node-red-contrib-loxone. Nejjednodušší cesta je přidat některý z nodů knihovny, následně kliknutím na node se objeví možnosti nastavení a v property MIniserver bude Add new loxone-miniserver.

Pro komunikaci doporučuji vytvořit nového uživatele, který bude mít přístup ke všem prvkům, ale nebude moct dělat nic navíc. V mém případě se uživatel jmenuje api a využívám ho všude, kde chci přistupovat z jiného systému. Ideální by bylo vytvořit pro každý systém samostatného uživatele. Vyplníme uživatele, IP adresu MS a uložíme.

Jako druhý krok nastavíme připojení k databázi. Princip je stejný jako u výše, přidáme nějaký node z node-red-contrib-influxdb, vybereme ho a v nastavení je property Server, kde máme Add new influxdb. Na začátek vybereme správnou verzi influxdb – já používám 1.8 bez flux, tak vyberu možnost 1.x. Následně vyplníme IP adresu a port, kde nám běží databáze, jméno vytvořené databáze (novou databázi vytvoříme spuštěním příkazu CREATE DATABASE „jméno_databáze“), nakonec vyplníme přihlašovací údaje do databáze.

Vytvoření prvního flow

Pro to, aby jsme data načetli z Loxone si vytáhneme node Control in (zelený, z knihovny node-red-contrib-loxone). Klikneme 2x na daný node a vybereme místnost a kategorii. Nyní ve výběru Control máme seznam prvků, které jsou v dané místnosti a kategorii. Vybereme požadvoaný control a pro něj se nám zobrazí počet podporovaných State.

Uuvedu příklad. Mám Loxone vypínače a ty mají senzor teplotu. Tuto teplotu mámna vstupu Inteligentní regulace pokojové teploty. Tedy když tento regulátor vyberu, tak v State mám na výběr tempActual, tedy aktuální teplotu v pokoji.

Tuto hodnotu potřebuji nadále upravit tak, abych převedl informaci z Loxone na stav, který se hodí pro uložení do influxDB. K tomu použiju node Function. Klikneme v pracvo na zelený node a potáhneme čáru k nově přidanému function bloku. Výsledek bude vypadat takto:

Uděláme dvojklik na function node a objeví se nám místo, kde se píše javascript kód. Zpráva, kterou získáte z předchozího nodu je, v našem případě teplota, je dostupná pod msg.mayload. Pojemnujeme si ji například To InfluxDB object. Funkce na změnu tvaru z Loxone na influx v mém případě vypadá takto:

var temp = msg.payload;
var topic;

if (msg.type == "IRoomControllerV2")
{
    topic = msg.room;
}
else
{
    topic = msg.topic;
}


var newMsg = { };
    
newMsg.payload = [
    [{
        measurement: "roomTemperature",
        temp: temp,
        topic: topic,
        room: msg.room
    },
    {
        topic: topic,
        room: msg.room,
        measurement: "roomTemperature"
    }]
];
return newMsg;

InfluxDB na vstupu očekává pole o dvou prvcích. První je objekt s measurementy, druhý je objekt s tagy. Tagy se používají ve WHERE podmínkách v dotazech na databázi.

Jako třetí node použijeme influxdb out. Zase vytvoříme čáru z nodu function do nově přidaného influxdb out. Dvouklikem si ho otevřeme a pojmenujeme, vybereme cílový server (který jsme si vytvoili předtím) a zadanáme measurement. Measurement odpovídá tabulce v databázi. Pokud tabulka neexistuje, tak se s prvním vložením záznamu sama vytvoří. V mém případě jsem Measurement pojmenoval temp.

Function a influxdb out můžeme znovu použít pro více controlů z Loxone, výsledek může vypadat například takto:

V pravo nahoře v node-red máme tlačítko deploy (červeně, pokud jsou nějaké změny). Zmáčneme ho a nyní nám začíná fungovat ukládání změn stavu do databáze. Ještě se pozastavím nad tím, že se ukládají jen změny stavu. Myslím tím to, že control in vyšle zprávu ven vždy při načtení celého flow (otevřeníkomunikace) a následně jen když se v Loxone změní hodnota. Tzn., pokud máte něco, co se půl roku nezmění, tak pokud node-red poběží půl roku v kuse, tak budete mít jen tu úvodní hodnotu a ádné další hodnoty za tím.

Grafana

Kduž máme data v influxDb, tak je nyní můžeme použít v Grafaně a zobrazit je. Pro začátek si potřebujeme přidat zdroj dat.

Pro přidání zdroje dat v Grafaně vybereme Connections > Data sources. Přidáme nový Data source a vybereme InfluxDB. Následně vyplníme údaje o databázi.

Nyní si můžeme vytvořit graf, jako je na obrázku níže. Přidáme vizualizaci typu Time series, využijeme pro to dotaz, který je na obrázku, kdy vybereme data z tabulky temp (ve vašem příapdě nebudete mít selektor na Místnost, tak to můžete ignorovat ve Where části dotazu). Pro zobrazení max, min a poslední teploty využijeme legendu. Pro pojmenování řady použijeme Alias.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *