Migrace NodeRED z node-red-contrib-loxone na UDP/HTTP vstupy/výstupy
Tohle bude trochu víc technický článek a hodim si ho sem hlavně i pro sebe, abych po čase zas věděl, jak mám ty vstupy a výstupy konfigurovat :). Už tentokrát mi dost pomohl tento můj historický článek, kde sem podobný problém jednou řešil.
Důvod celé migrace byl, že tento na první pohled skvělý plugin se občas odpojil od Loxone a už se nedokázal sám připojit zpět. Většinou se odpojil v situaci, kdy se Loxone svévolně zrestartoval a nebo když jsem dělal nějaké změny a vícekrát za sebou do něj nahrával nový LoxConfig. Bohužel, komponenta nejen že se neumí nějak snadno sama připojit, ale nemá ani žádný vstup/příkaz na to, aby se reconnect dal ručně vyvolat. Zkoušel jsem bug párkrát reportovat na githubu, ale bohužel marně. Poslední verze je rok a půl stará, takže to vypadá, že je možná plugin i lehce opuštěný.
Jediné řešení vždy bylo připojit se do NodeREDu, pohnout nějakým prvkem a dát znovu deployment. V tu chvíli se prvek krásně znovu připojil. Drobnost, ale vysvětlovat ženě, jak se má připojit k NodeRED, nebo večer před koupáním vždy běžet k počítači, protože nefungují světla nebylo úplně to pravé ořechové.
A tak i díky podnětům z komentářů pod minulým článkům jsem to hecl a rozhodl se včera zkusit pár zásuvek/světel předělat na UDP/HTTP vstupy/výstupy. Celý proces by trval určitě o dost kratší dobu, kdyby můj MS1 nedělal upload každého LoxConfigu cca minutu a hlavně, kdyby LoxConfig měl pořádně zdokumentované parametry vstupů + k nim měl nějaký debugging. Ale to už jsou spíš mokré sny 🙂
A tak pro sebe i ostatní sem nahážu pár ukázek, jak UDP/HTTP vstupy natavit na straně Loxone i NodeRED, ať to příště už nemusím zas složitě dohledávat. Pojďme na to:
Loxone Virtual UDP input / Virtuální UDP vstupy
Vytvořit Virtuální UDP vstup, nastavit mu unikátní UDP port:
Do něj pak vložit Virtual UDP input command, nastavit “Command recognition”. Pro On/Off jen samotnou hodnotu:
V případě potřeby načítat hodnotu, vložit do recognition \v pro “value”. (tady je to chyták, u vstupů se používá \v zatímco u výstupů <v>).
Loxone Virtual UDP/HTTP output / Virtuální UDP/HTTP výstupy
Vytvořit Virtual Output. V případě HTTP NESMÍ být v adrese celá cesta, ale vždy jen název serveru. Koumáci z Loxone to sice pojmenovali address, ale není to tak. Pokud je tam pak jakákoli URI, loxone dle logů padá na tom, že ji neumí přes DNS přeložit.
Do něj vložit Virtual output command. Pro on/off vyplnit Command for ON, Command for OFF (to je v případě HTTP URL za doménou zadanou v Address)
HTTP extensions je opět blbě pojmenované, jde o HTTP headers, které se mají vložit k požadavku. HTTP post command zvládli v Loxone pojmenovat správně a HTTP method také. V případě, že chceme zasílat při zapnutí i vypnutí různé data, vyplní se oboje, pokud chceme zasílat jen při zapnutí/změně hodnoty, vyplní se jen atributy pro ON.
Pokud potřebuje odeslat nejen ON/OFF, ale právě nějakou hodnotu, použijeme značku <v> (pozor, nikoli \v jako v případě vstupů).
Značku <v> můžeme použít i kdekoli uvnitř textu, tzn například “value:<v>” a podobně. Údajně jde takto poslat i textový výstup. Nemám to ale vyzkoušené.
NodeRED příjem dat
Vložit http-in (nebo UDP-ip), nastavit URL nebo port pro daný příkaz. Co je důležité, krom HTTP-in je potřeba také vložit a propojit HTTP response, aby po zavolání požadavku NodeRED požadavek ukončil a odeslal OK response.
Z prvku pak leze textový řetězec, který jsme do něj poslali. Pokud bychom posílali JSON, je potřeba vložit ještě “JSON parse” prvek, který text převede na objekt.
NodeRED odeslální dat
Vložit UDP-out prvek, nastavit cílovou adresu a port, na který se májí UDP data odeslat
Do prvku pak už jen krmíme data a on je odesílá směr Loxone
Závěr
A to je vše, takto lze propojit vstupy i výstupy z Loxone s NodeRED bez nutnosti použít nodered-contrib-loxone knihovnu. Je to škoda, protože jinak se knihovna používala parádně, ale bohužel absence automatického reconnectu ji dost vylučuje pro reálné použití (minimálně u nás doma 🙂 ).
K tomu <v>. Ono je to nejspíš proto, že lze použít <v.1> a tím naformátovat hodnotu na 1 desetinné místo.
V nové vezi jsou některé věci opravené, například “Http extensions”. Chtěl jsem sem dát jako obrázek příklad jak posílám json ze statusu, ale nejde mi to. Bylo by vidět, že už je v nastavení HTTP header.
Aha, diky za info. tak to je zas tou mou starsi verzi kvuli MS1.
No idealne by to chtelo upgrade na MS2, ale delat to jen kvuli rychlejsimu uploadu zmen se mi to uplne nechce :-).
K tomu automatickému reconnectu knihovny. Někde jsem na to něco našel a zdá se, že mi to funguje fajn. Jakmile detekuje výpadek, sám se zrestartuje. I bych vložil printscreen, ale nenašel jsem jak.
Jo, screen nějak zlobí, musím se na to podívat.
Nějaký název nebo něco byste neměl? Případně nahrát screen na nějakou externí službu a hodit jen Link.
Sice jsem už vs předělal, ale podíval bych se jak se to resi. Ja to hledal docela dlouho a marně.
Mám to taky tak, nodered se připojí sám tak do 30 sec po restartu. Možná novější verze….
Hele proč přes Loxone Virtual UDP input / Virtuální UDP vstupy a ne obyčejné virtuální vstupy ty se přeci dají také řešit přes LOXONE HTTP REST API ne? Děkuji
to netusim, bud to neslo, nebo mi toto prislo lepsi ;). Mozna to jde jen na novejsich nez 8.x verzi LoxConfigu.