NodeRED – Propojení všeho se vším, od Arduina po Loxone

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.

Použité linky

forumlink
Link na diskuzní fórum o Loxonu a Arduinu

Pomohl Vám náš blog? Chcete nás podpořit? I málo udělá radost 😉

33 thoughts on “NodeRED – Propojení všeho se vším, od Arduina po Loxone

  1. Z tej “dokumentacie” jednotlivych url pre Loxone tiez rastiem. Dolamal by som im za to ruky, skoro som chcipol nez som to vsetko nasiel …

    1. 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

  2. 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”).

      1. 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”

            1. 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.

              1. 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.

                1. 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

    1. 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).

        1. 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.

          1. 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

            1. 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ů.

              1. 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

                1. 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.

  3. 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.

  4. 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?

    1. 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

        1. 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.

          1. 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] ); }

            1. 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.

              1. 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 ;-(

                1. 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.

  5. Trochu OT, ale nechci kvuli možná zbytečnýmu dotazu zakladat thread. Zkoušeli jste někdo rozchodit na Loxberry Docker? Úspěšně?

Leave a Reply

Your email address will not be published. Required fields are marked *