NodeRED – Propojení všeho se vším, od Arduina po Loxone
Jak jsem psal v předchozím článku, MQTT i NodeRed instaluji na Ubuntu linuxu. Jde ale rozběhat třeba i na Raspberry Pi nebo Turrisu (OpenWRT).
Instalace NodeRED je relativně jednoduchá. Do ubuntu jsem musel nejprve doinstalovat aplikaci npm (což jsem zjistil, že je balíčkovací služba pro javascript) a následně pak pomocí npm aplikace nainstalovat NodeRED.
sudo apt-get install npm sudo npm install -g --unsafe-perm node-red
Po samo-doinstalování obrovského množství dalších navazujícíh balíků měl začít fungovat příkaz `node-red`. Ale prdlajs. Takže další postup pak byl:
sudo apt-get install nodejs-legacy node -v ##v4.2.6 sudo apt-get install npm npm -v ##3.5.2 sudo npm install -g --unsafe-perm node-red node-red-admin
Dál bylo potřeba otevřít firewall port 1880, který node-red používá pro komunikaci
sudo ufw allow 1880 ##Rules updated ##Rules updated (v6)
A pak už node-red konečně naběhl.
node-red Welcome to Node-RED =================== 9 Dec 15:41:14 - [info] Node-RED version: v0.15.2 9 Dec 15:41:14 - [info] Node.js version: v4.2.6 9 Dec 15:41:14 - [info] Linux 4.4.0-53-generic x64 LE 9 Dec 15:41:14 - [info] Loading palette nodes 9 Dec 15:41:14 - [warn] ------------------------------------------------------ 9 Dec 15:41:14 - [warn] [rpi-gpio] Info : Ignoring Raspberry Pi specific node 9 Dec 15:41:14 - [warn] ------------------------------------------------------ 9 Dec 15:41:14 - [info] Settings file : /home/dev/.node-red/settings.js 9 Dec 15:41:14 - [info] User directory : /home/dev/.node-red 9 Dec 15:41:14 - [info] Flows file : /home/dev/.node-red/flows_home-server.json 9 Dec 15:41:14 - [info] Creating new flow file 9 Dec 15:41:14 - [info] Server now running at http://127.0.0.1:1880/ 9 Dec 15:41:14 - [info] Starting flows 9 Dec 15:41:14 - [info] Started flows
Další krok je nastavení, aby se NodeRED spouštěl sám po startu. To už nebudu popisovat, protože bych jen kopíroval návod, podle kterého jsem postupoval. Ten jde najít v tomto super článku (bod 3 a dál).
Použití NodeRED
Tak jo, nainstalované to je, co teď s tím dál ;-). Vraťme se k naší ukázce z minulého článku o MQTT. V levym okně máme příkaz na poslání zprávy přes kanál(topic) hello/world. V pravém okně nahoře je pak příjemce této zprávy, abychom viděli, že vše funguje.
V pravo dole pak nasloucháme nové zprávě “bye/world”. Jak jde vidět z následujících screenshotů, při poslání zprávy na “hello/world” se tato zpráva ukáže i na “bye/world”. Jak to?
Protože NodeRED ;-). Jako první jsem pro otestování funkčnosti NodeRED a jeho napojení na MQTT udělal jednoduché přeposlání přijaté zprávy z jednoho kanálu na druhý.
A takhle to vypadá v NodeRED. Vlevo je MQTT consumer, nastavený tak, aby naslouchal topic hello/world
V pravo pak MQTT publisher, který přijatou zprávu pošle po kanálu (topicu) bye/world.
Dole pak mám ještě debug výstup, který zobrazuje přijaté zprávy.
A co loxone, jde to propojit?
No jasně! ;-). Pro testování jsem použil zatím jen REST Api loxone, ale NodeRED podporuje i websockets, navíc jsou pro Loxone už naprogramované přímo rozšíření pro NodeRED (viz dále).
Nyní nám ale pro jednoduchý test stačí RestAPI. Upravíme diagram tak, aby po přijetí jakékoli zprávy v topicu hello/world se nám rozsvítilo (nebo zhaslo) světlo v pracovně. To je cool ne? 😉
Samotné nastavení HTTP požadavku vypadá nějak takto. Nic složitého, jen se zavolá HTTP GET na adrese /dev/sps/io/WebApiTest/PulseDown.
Co se týká URL adresy, tak Loxone dokumentace stojí za starou bačkoru. Podle návodu by měla být adresa /prikaz/control/hodnota, coz ale /dev/sps/io/INPUT/PRIKAZ rozhodne není.
Touto url říkáme, že chceme na virtuální vstup “WebApiTest” poslat Impuls Down-Up. V Loxonu tak musíme tento virtuální vstup vytvořit a propojit se světlem.
A to je všechno. Nyní, kdykoli se objeví zpráva, světlo se přepne. Naprostá paráda. Nevím jak vy ostatní, ale já jsem nadšen. Těch možností, k čemu se to využít, je totiž neomezeně. Díky kombinaci NodeRED+Loxone tak jde do Loxonu dostat spoustu nových dat, od Arduino senzorů, dat z externích databází až po informace z Twitteru, Email nebo cokoli jiného vás jen napadne.
Co dál
NodeRED má obrovskou komunitu a kromě základních bloků (Nodes) má parádní knihovn dalších rozšíření – http://flows.nodered.org/. Jsou tam například i bloky na komunikaci s Modbus, KNX nebo Loxone.
Nyní to chce pořádně vyzkoušet a pohrát si s tím víc. V základu mám ověřeno, že vše funguje. Nyní zkusím zprovoznit nad Arduinem nějaký ten senzor a přes MQTT-NodeRed ho posílat do Loxonu. A uvidíme, jak to bude šlapat. Co jsem zatím testoval, tak problémy žádné, ale běží mi to jen chvilku.
Pokud ale vše pojede opravdu jak má a bude to 100% stabilní, vidím v tom obrovský potenciál. Navíc v případě, že by Loxone pokračoval se svými gestapáckými manýry a ještě více uzavíral jeho systém, tak se takto dá udělat kompletní rozšíření a defakto z architektury “Loxone je ten hlavní” udělat “NodeRED je ten hlavní” a Loxone mít jen jako podružný systém.
Z tej “dokumentacie” jednotlivych url pre Loxone tiez rastiem. Dolamal by som im za to ruky, skoro som chcipol nez som to vsetko nasiel …
a pochopil si, proc je tam ten /dev/sps/io ? A funguje to pak aspon vzdy, nebo obcas se pristupuje jinak? A posledni dotaz, jdou tim ovladat i jine vstupy nez virtualni? Protoze oni pisou ze ano, ale mne to nefungovalo
Ja som to len zbezne skusal, zatial som s tym nijak neintegroval. Co si pamatam, slo ovladat len virtualny vstup, s existujucim mi to neslo (resp. som mozno nemal spravnu adresu vdaka ich “dokumentacii”).
aha, tak to jsme na tom stejne 😉
já jsem si to teďka zkoušel a mě to funguje i na digitální vstup přes stejný příkaz
poslal jsem si příkaz:
http://adresasa miniserveru/dev/sps/io/test_tl/pulse
a přes digitální vstup jsem zapínal/vypínal blok “tlačítko”
Tak jsem to zkusil, a mne to proste nefunguje.
volam loxone/dev/sps/io/TL5a/pulse
a nastaveni mam takto
a vraci to
LL control=”dev/sps/io/TL5a/pulse” value=”” Code=”403″
Edit: Zkusil jsem ho jeste prejmenovat na tl5a (jen mala pismena), ale vysledek stejny.
To je zajímavé.
Já to ještě zkusím večer doma, jestli i tam mi to bude fungovat.
Tak ja uz vim. Ono to funguje jen na vstupech na miniserveru, ne na extensionech.
Takze na extension bude zrejme nejaka jina magicka URL. Zkusim jim napsat na podporu.
Přesně nad tím jsem teď přemýšlel, jestli to není tím 🙂
Ja když něco hledám, tak se dívám na anglické stránky Loxone, ale v tomto případě, tam nic navíc nebylo.
Jojo, akorat misto anglickych jsou lepsi ty nemecke, protoze tam je toho vzdycky nejvic. Akroat to musim prohanet translatorem 😉
Jinak volal jsem jim a tvrdi, ze se to ma pouzivat v teto podobe server/dev/sps/io/01D8DF9F.I7/pulse , kdy ten kod je to, co je u objektu jako “pripojeni”. Jenze to mi nejede taky
😀
Takze pres seriove cislo extensionu a pozice vstupu, tak to taky vyzkousim, to me zajima.
Jojo, “SN extension”.”Oznaceni vstupu”. Pry to takto bezne pouzivaji, ale mne to nejede. Ze pry se mi na to podiva pres TeamViewer, ale ted uz nemam moc cas. Schvalne to zkuste, jestli Vam to pujde.
Jinak kdyz se da pryc to SN, tak se takto da sahat zase na vstupy na miniserveru a to funguje (/dev/sps/io/I1/Pulse).
Ok, jak se vratim z terenu, tak to zkusim. 😉
Tak testováno:
http://adresa miniserveru:port/dev/sps/io/01D8E86C.I1/pulse
a u mě je to funkční, zkoušel jsem i další vstupy a ty jsou taky funkční.
Jediné co mám jiné než u Vás, že mám připojený jen 1 extension.
Zajimave. Tak to zkusim jeste jednotliva extensions a kdyztak je nechám připojit na dálku
Tak sem mel na kompu vcera pripojeny Loxone support a opravdu to je u mne nejake divne. Nektere extensiony funguji a jine ne. Typek byl dost prekvapeny a prej to zjisti u Rakusaku
Tak to je fakt hodně zajímavé.
Zajímalo by mě kdyby to ještě někdo vyzkoušel, kdo má doma víc extensionů. Jestli je to to samé.
Já na testování mám jen pár různých extensionů.
Dneska sem mel do domu pripojene rakusaky, protoze v cechach nikdo nevedel. Dokonce mi nejprve rikali, ze je to funkce, kterou pouzivaji (a sami mi poradili ten trik s seriovym cislem), pak zacli rikat, ze je to funkce, ktera vubec nema existovat a ma se pouzivat jen virtualni vstupy (coz osobne i chapu, prijde mi to lepsi nez mackat natvrdo nejaky vstup).
Nakonec rakusak zacal proklikavat Loxone config a po 20ti minutach nasel u kazdeho vstupu nastaveni, ktery uzivatel jej muze aktivovat z internetu (takze tam na to primo maji nastaveni, ale jinak ta funkce neexistuje 😉 ).
Kdyz se vybere konkretni vstup na miniserveru/extensione, tak je tam “Povoleni uzivatele z lokalni site” a “Povoleni uzivatele internet”. A z nejakeho duvodu sem tam u nekterych mel skupinu adminstratori a u jinych skupinu LOXONE, do ktere ale administrator nespada (taky zajimave). Takze stacilo prehodit a zaclo to fungovat
Tak hlavně, že se na to přišlo. 😉
Já se na to dívam a já mám z default nastavení použito “všichni”.
Já jsem si myslel, že ta funkce se vztahuje jen na vizualizaci, ale tak je fakt, že je to asi na všechny možnosti přístupu na Loxone.
Konecne jsem se dostal k tomu se na to podivat. Dorazilo Raspberry PI, krabicka na DIN listu, tak jsem to tam nabouchal a parada.
Hral jsem si se zesikem, konecne uz se mi do Loxonu vraci i hodnoty zpet 🙂 Supr, ze se v tom fakt da prgat v rozumnym (ne Pico C) jazyku 🙂
Akorat me teda vubec nenapadlo pouzivat primo ty vstupy jak jste psali. Vsechno integracni si podle me zaslouzi vlastni virtualni vstup, idealne UDP. Zatim mam dva na zesik a uz se tesim az se pustim do Roomby 🙂 Mam tu nejaky stiznosti, ze kdyz se prijde domu, tak by mela prestat uklizet a pelasit na dock.
[…] už Vám běhá NodeRED (třeba v NASu, RaspPI,…). Pokud ještě nemáte, mrkněte na moje články o NodeRED a Mosquitto, kde je instalace a použití […]
Vratil som sa po nejakej dobe k tomuto clanku a idei spravit nad node-red nahradu loxone a podla mna je to cista utopia. Dodnes som totiz nenasiel sposob, ako jednoducho duplikovat funkcionalitu co i len to uplne najjednoduchsieho flow v loxone. Napr. “Teplota > 22 AND Pohyb -> rozsviet svetlo”. V loxone potrebujem 3 ciary. V node-red potrebujem 3 ciary A riesit topic, programovat (pretoze som nenasiel uplne obycajny AND s dvomi vstupmi, takze custom funkcia, zapamatat si stav niekde v kontexte a vyhodnocovat ho priebezne) a riesit tisic picovin okolo toho. Vlastne fakt neviem k comu je to node-red dobre, ja vidim vyuzitie len ako bridge z jedneho signalizacneho sveta (napr. mqtt) do druheho (napr. loxone udp). Ziadna zakladna logika, nic.
Vyvedie ma niekto z omylu a ukaze mi ako to robit spravne?
Ja delam v NodeRED prave presne ty veci, kde nestaci jen natahat par car. To resim dal v Loxone.
Teoreticky je pro nodered obrovske mnozstvi pluginu, takze mozna i na ty obyc and/or tam neco bude, zatim mi to ale nechybelo.
Ale delam tam presne to co si psal, tzn nejaky vstupy->custom function->vystup (at uz nejaky http,…). a na to je to supr.
Ale nemyslim si, ze to musi byt nutne jen hloupy bridge. Napriklad nejake slozitejsi ovladani teplot, svetel (ruzne rezimy blikani vanocniho stromecku 😉 ) a podobne se pak uz delaji lepe v Noderedu v Javascriptu, nez tahat milion car v Loxone
Jen narychlo jsem zkusil googla, a treba toto vypada presne jako to co hledas
https://flows.nodered.org/node/node-red-contrib-boolean-logic
Nevypada, pretoze to neriesi fundamentalny zaklad node-red -> topic. Ale preskumam to, diky.
Preskumal som a pokym nebude mat jeden node viac vstupov (indexovatelnych), nepojde to nikdy takto pouzit. Coz je strasna skoda, pretoze inak mi to pripada ako vcelku schopny produkt.
Ale nejak to jde ne, kdyz podporuji v tom logic-pluginu vice vstupu do jednoho nodu.
mrkni sem, tady je primo implementace toho and/ORu a primo to iterujou
https://github.com/PerMalmberg/node-red-contrib-boolean-logic/blob/master/boolean-logic/BooleanLogic.js#L42
// We need a starting value to perform AND and OR operations.
var keys = Object.keys(node.state);
res = node.state[keys[0]];
for( var i = 1; i < keys.length; ++i ) { var key = keys[i]; res = PerformSimpleOperation( node.config.operation, res, node.state[key] ); }
Ano, oni iteruju nad neznamym poctom anonymnych vstupov, to sa pri primitivnych operaciach AND OR da, pretoze tam ta nezaujima ktory vstup ma ktoru hodnotu. Ale u takeho porovnania A>B to nepojde inak ako tak, ze tej sprave priradis topic, aby si to rozlisil a uz si zase v prdeli, pretoze viazes property predosleho node na nasledovny a je to hnusne hackovanie.
Sledoval som nejaku dobu diskusiu o multiple inputs v node-red, oni to implementovat nechcu pretoze je to proti nejakym ich patternom, ktore asi moc nechapem (resp. to chcem pouzit trosku inak – ako nahradu loxone). Vcelku by ma zaujimalo, ako to ma doma rozhodene Martin D., pretoze nad tym ma svetla a kus bytu. Podla mna to musel byt totalny porod.
Aha, ted uz chapu. No to mas pravdu, ze to je na noderedu debilni ;-). Nikdy mne nenapadlo, ze je to schvalne.
Tak sem narychlo procetl tu diskuzi na tema multiple-inputs a nutno rict, ze vyvojari jsou dost arogantni. Jeji pristup “neni to potreba protoze to vime nejlip” je fakt masakr.
Trochu zklamani ;-(
Ano, preto som o node-red prestal definitivne uvazovat. Existuje alternativa, vola sa to total.js flow, vyvija to slovak, ale tiez to nema viac vstupov. Skusim mu napisat, ci by sa s tym nedalo daco robit.
Trochu OT, ale nechci kvuli možná zbytečnýmu dotazu zakladat thread. Zkoušeli jste někdo rozchodit na Loxberry Docker? Úspěšně?
Vcera mi prisel mail, ze NodeRED umi nove bezet na UniPi. Vim, ze to tu neni uplne oblibena platforma, ale ta moznost mit NodeRED primo na PLC mi prijde zajimava:
https://www.unipi.technology/cs/content/default/detail/234
to jako ze nodered pobezi i na tom Axonu? To je zajimavy. Tim padem to neni az tak jednoucelovy PLC jak sem si myslel. Takze je uvnitr stejne zase nejakej Raspbery zaklad 😉
co by mne ale zajimalo, jestli maji pro ten NodeREd nejaky vlastni plugin jak jednoduse NodeRED spojit s temi jejich vstupy a vystupy
No prave o to podle me jde, ze tim primo ovladas i vstupy a vystupy na PLCcku. Nevim vic, nez co maji v navodu na netu, ale nevypada to slozite: https://kb.unipi.technology/en:sw:03-3rd-party:nodered:installation-axon
vypada to, ze maji vlastni. to neni spatny.
sice mam nodered v dockeru a vstupy/vystupy pres papoucha, ale tomuhle fandim.
tohle by uz mohlo byt i stabilni a pristupne pro lidi, co nechteji jit do zelene.
No az na to ze nodered je s tym ich idiotskym postojom k mnozstvu vstupov/vystupov per logicky objekt vlastne totalne nepouzitelny na akekolvek riadenie cohokolvek.
no jako hlavni ridici system to neni, ale na podruzny je to dobry.
kdyz se to zkombinuej s nejakym HomeAsistatnem nebo tak neco.
na druhou stranu, ja osobne bych ten NodeRed drzel idealne jinde nez na konkretnim HW. ale co se mi libi, ze maji do NodeRED primo ty sve pluginy.
takze v nejakym kontrolnim SW napises logiku, a pak to jen v noderedu pripadne prekladas z nejakych prikazu na konkretni protokoly (mqtt/udp/…).
“vypada to, ze maji vlastni. to neni spatny.”
Nene. Mají vlastní, je to špatný….
Tady je můj obsáhlejší koment:
https://forum.unipi.technology/topic/863/clumsy-complicated
Tak to mne mrzi. A to sem si rikal, ze snad vemu UniPi na milost. Ale to co tam popisujes, to je kompletni nepochopeni NodeRedu ;-(
Dobré dopoledne,
nemáteprosím odkaz, kde najdu příkazy v té větě HTTP?
Jde mi o to, že nechci jen posílat impulsy pro rozsvícení světla a podobně.
Mám do nodered natažené inormce z rekuperace přes modbus contrib a tyto informace potřebuji předat na virtuální vstupy do loxonu.
Díky
TP
Ted uplne nevim, na koho byl ten dotaz smerovany 😉
Na lidičky co se v tom orientují více než já (na všechny tu) 🙂 NodeRED jsem objevil teprve před pár týdny a v neděli jsem měl konečně čas si s nim chvilku hrát. Rozvěcování světel a spouštění vstupů určitě najde využití, primárně jsem ale hledal způsob jak by rekuperace předávala informace ze svých čidel do loxonu a jak by loxone mohl rozhodovat například o režimu v jakém rekuperace poběží.
Moje představa je vysoká vlhkost v koupelně v koupelně aktivuje na 5 minut boost režim rekuperace.
Aktuálně má NodeRED informaci o tom jaký je běžící režim na rekuperaci, jakou teplotu má vzduch přivaděný do místností, atd.
Tyto informace potřebuji nějak předat loxonu v nodeRED a pak přijde druhá fáze.
Loxone rozhodne co má rekuperace udělat.
Díky
Takze ti jde o to, jak predat info z NodeRED do Loxone, chapu-li to spravne 😉 (protoze se v tech dotazech opravdu trochu ztracim).
—-
Pokud ano, mrkni na blog a hledej clanky o NodeRED, tam je to popsane.
—-
Updated:
Uz blbnu, myslel sem, ze je to dotaz z fora. Vzdyt ten postup na to, jak to predat do Loxone je popsan primo tady v clanku ;-). Udelas virtualni vstup a odkazes se na nej pres HTTP adresu jak je popsano.
Co teda nechapes, nebo co ti nejde?
Zvládám předat z NodeRED příkaz rozsviť světlo.
Mou snahou je ae nepředat jen nějaký příkaz ale přenést numerickou hodnotu, string nebo array na nějaký vstup v loxone.
TP