Ankündigung

Einklappen
Keine Ankündigung bisher.

mein node-red Tagebuch

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    mein node-red Tagebuch

    Ich betreibe derzeit eine Vielzahl von Logiken auf einem (alten) Wiregate, zusätzlich ein paar Daemons, hier mal eine kleine Auflistung.

    Standalone daemons:
    • knxdmxd (zur Steuerung eines ArtNet nodes mit RGBW Bändern)
      • dafür notwendigerweise olad für DMX <-> ArtNet
    • fhem zur Kopplung von
      • enOcean (Hoppe Fenstergriffe): enOcean -> KNX
      • CUL (InterTechno schaltbare Steckdosen), KNX -> CUL
    • eHZ Reader (befüllt derzeit nur RRDs)
    • Wiregate Plugins für:
      • Zentralfunktionen für Anwesenheitserkennung
      • simple Logikfunktionen und Verknüpfung von Elementen die als Szene nicht realisierbar waren
      • Abruf Wetterdaten von Unwetterzentrale und Senden von Warnungen an KNX
      • Abruf Wetterdaten von Weather Underground und Aufbereitung für die Visu (CometVisu)
      • diverse Schaltuhren (uhrzeitabhängige Aktionen)
      • diversen Kleinkram
    • homebridge-knx für Apple HomeKit / Siri Integration
    In der Pipeline:
    • Miele@Home Gateway
    • NIBE RS422 Gateway

    Das ist über die letzten 6 Jahre einfach so gewachsen und vieles wurde einfach gemacht, weil es verfügbar war oder sich aus bestehenden Information herleiten ließ. Von der Wartbarkeit ist es natürlich eine Katastrophe. Das meiste (aber nicht alles, z.B. homebridge-knx) läuft derzeit noch auf dem WG. Da Lenny aber schon in die Jahre gekommen ist, habe ich zunehmend Probleme noch neuere Projekte zu integrieren oder (Bug)Fixes für die alten Versionen zu kommen. Deshalb bin ich seit einer Weile auf der Suche nach "etwas Neuem". Es mag sein, dass vieles davon mit dem Wiregate-Nachfolger möglich sein wird, aber da ich ein großer Freund von OpenSource bin, habe ich beschlossen, mich nach Alternativen umzuschauen. Generell wollte ich weg von der Vielfalt der unterschiedlichen Programmiersprachen und Anbindungen. Nach langer Suche bin ich nun bei "node-red" hängengeblieben. Das ist ein nodejs basiertes Framework mit genialem UI und vielen vorhandenen nodes als Gateways zu den unterschiedlichsten Projekten. Als kleinsten gemeinsamen Nenner könnte man immer mqtt nehmen, einen universellen Messagebus. Den habe ich aber für meine Anwendungen bisher noch nicht gebraucht und konnte mit node-red "Hausmitteln" alles realiseren. Wer den visuellen Logikeditor des GIRA Homeserver kennt, der wird sich sofort mit node-red anfreunden können. Doch anstatt nur vorgefertigte Blöcke mitzubringen, lässt sich an jeder Stelle ein "Funktionsblock" mit Javascript einfügen. Dadurch behält man die Flexibilität einer Scriptsprache gekoppelt mit fertigen Gateways für die unterschiedlichsten Anwendungen. Aufgesetzt habe ich das ganze auf einem Raspberry Pi 3 mit Ubuntu Xenial (wohlgemerkt nicht basierend auf einem fertigen Image, einfach plain vanilla Ubuntu).

    Was ich innerhalb von 2 Abenden komplett Nachbauen konnte waren:
    • ArtNet-Ansteuerung, ersetzt olad und knxdmxd
    • enOcean "read" Gateway (Empfang von enOcean Telegrammen und Umsetzungen in KNX), ersetzt fhem
    • CUL "write" Gateway (Empfang von KNX Telegrammen und Umsetzung in Intertechno Schaltbefehle), ersetzt fhem
    • ein paar einfache Logiken, die sukzessive die Wiregate-Plugins ersetzen werden
    Auf der todo-Liste stehen noch folgende Anwendungen:
    • eHZ (vermutlich über serialinput Plugin lösbar)
    • Miele@Home Gateway (noch nicht weiter geprüft)
    • NIBE RS422 Gateway (vermutlich über serialinput Plugin lösbar)

    homebridge-knx werde ich vermutlich erstmal separat laufen lassen (auf dem gleichen RPi). Es gibt zwar auch eine node-red Integration, aber hier sehe ich im Moment keinen Mehrwert.

    Und hier mal ein paar Screenshots von ein paar Flows: node-red-screenshot-knx.png
    Empfang von KNX Telegrammen. Der Switch gibt mir an Output 2 nur "writes" aus, mit dem GA Filter schaue ich auf GA's die mich in meinen Flows interessieren und gebe die per "link" in den entsprechenden Flow weiter. Genauso kommen per "link" diverse messages aus anderen Flows an, die per Funktion in das richtige Format gebracht werden und dann auf den Bus gesendet werden.

    node-red-screenshot-artnet.png

    Die 4 "link"-Inputs links kommen vom KNX Flow und repräsentieren die 4 GA's für RGBW-Steuerung. Mit einer Queue verhindere ich zuviele Daten auf einmal, mache daraus eine einzelnes Message mit RGBW Werten und schicke die ins Netz zum ArtNet node.

    node-red-screenshot-enocean.png

    Hier werde ich noch einem nativen enOcean Input arbeiten, derzeite nehme ich die "Hello World" Applikation aus dem eoLink SDK und parse deren Output. Die Werte werden dann an den Bus gesendet.

    node-red-screenshot-funksteckdosen.png

    Obwohl ein fertiges nodejs Project für CUL gibt, steuere ich hier direkt den seriellen Port an. Die Befehle sind wirklich simpel und meine kruden Baumarkt Steckdosen folgen sowieso keinem Standard.



    Bei den Screenshots habe ich mir Mühe gegeben, dass man in der Spalte links immer unterschiedliche Nodes für Input, Output und Funktionen sieht, damit man einen Eindruck bekommt, wie mächtig und gleichzeitig simpel das Ganze ist.


    Ich werde hier immer mal von meinen Erfahrungen und dem Stand der "Migration" von node-red berichten. Falls dabei Flows zustande kommen, die über ein bisschen Klicken hinausgehen, werde ich diese veröffentlichen. Hier mal ein Beispiel mein "Intertechno" Funktion:
    Code:
    if (msg.payload.dstgad === "0/0/65") {
        if (msg.payload.value === 0) {
            newMsg = { topic: "Lichterkette", payload: "is0FFF0F0FFFF0\n" };
        } else {
            newMsg = { topic: "Lichterkette", payload: "is0FFF0F0FFFFF\n" };
        }
        node.send(newMsg);
    } else if (msg.payload.dstgad === "0/0/69") {
        if (msg.payload.value === 0) {
            newMsg = { topic: "Weihnachtsbaum", payload: "is0FFF0F0FF0F0\n" };
        } else {
            newMsg = { topic: "Weihnachtsbaum", payload: "is0FFF0F0FF0FF\n" };
        }
        node.send(newMsg);
    }
    return [null, msg];
    Das ist wirklich kein schöner Code, man kann noch viel optimieren, aber es gibt einen Eindruck wie einfach man hier Zusammenhänge herstellen kann.

    Ganze vergessen, node-red findet man hier: https://www.nodered.org/ einen Überblick über vorhandene Nodes und Flows gibt es hier: https://flows.nodered.org/
    Zuletzt geändert von ctr; 22.12.2016, 01:15. Grund: node-red

    #2
    Ich habe mich übrigens mit Absicht für die "alte" eibd Integration entschieden (Kommunikation per tcp/6720 mit eibd oder knxd). Bei den neueren knx oder knxjs-Bindings gibt es *entweder* die dstgad in der Message (node: "knx-in") *oder* den DPT (node: "knx-device"), ich hätte für diverse Logiken aber gern beides. Außerdem läuft auf der Maschine sowieso ein knxd, ich hatte das Gefühl, dass mit den knx bzw knx.js Bindings Probleme mit der doppelten Nutzung der lokalen multicast-Adresse entstehen (alle paar Sekunden hatte ich ein disconect/reconnect im Log). Nachteil: man muss sich selbst um "Responses" kümmern.

    Kommentar


      #3
      Wenn ich Deine Screenshots so sehe, brauche ich nur einen Raspi mit Anbindung an KNX und Nodered, um KNX direkt mit meinem Volumio2-Multiroom sprechen zu lassen (websocket)

      Kommentar


        #4
        Ich kenne die Volumio2 Websocket Syntax nicht, aber wenn Du weißt, was Du da senden musst: ja, dann sollte es so einfach sein.

        Kommentar


          #5
          Letzte Woche habe ich mir dann mein Miele@Home Gateway (XGW3000) vorgenommen. Womit ich in C am meisten Probleme hat war in node-red in Sekunden erledigt: Die Multicast Listener. Es wird jetzt per Multicast das Gateway erkannt sowie alle angeschlossenen Devices. Für jedes Device wird eine Webabfrage gemacht (nur initial) und dann werden die Parameter über Multicast aktualisiert. Eine Umsetzung auf eine KNX-GA habe ich noch nicht vorgenommen, aber nur weil ich mir erstmal eine Struktur überlegen muss, was denn Überhaupt auf den Bus soll.
          mah_flow.jpeg

          Kommentar


            #6
            Hallo,

            ich versuche gerade meine ersten Schritte mit node-red. Wie hast Du den eibd node installiert? Ich habe ihn per

            Code:
            sudo npm install node-red-contrib-eibd
            installiert. Ich kann ihn aber in der node liste danach nicht finden. Fehlt da noch etwas?
            (node red habe ich natürlich danach neu gestartet)

            Danke für einen kleinen Hinweis.

            Uli

            Kommentar


              #7
              Genau so habe ich ihn installiert, bei mir tauchen die Input/Output Nodes dann ganz unten in der Liste verfügbarer Nodes auf, unter dem Reiter "home_automation"

              Kommentar


                #8
                Hallo,

                inzwischen habe ich das Problem gefunden. Der eibd muss im Verzeichnis $HOME/.node-red installiert werden; wie hier beschrieben. Wer lesen kann ist klar im Vorteil.

                Uli

                Kommentar


                  #9
                  Coole Sache, dass es hier auch Node-Red begeisterte gibt.
                  Ich sehe da richtig viel Potenzial für Heimautomation - durch die modulare Struktur und extreme Vielfalt an Nodes sind der Fantasie keine Grenzen gesetzt. Es gibt sogar IBM Watson AI - Nodes. Vielleicht weiß das Haus bald schon vor uns wann das Licht an gehen muss

                  Leider habe ich ein kleines Problem mit der Homekit - Node. Ich kann neue Homekit Accessories hinzufügen, aber nach jedem "Deployen" verliert die Home-App die Verbindung zu dem Accessory und ich muss dieses neu hinzufügen. Das nervt natürlich bei der Entwicklung. Hat jemand von euch ähnliche Erfahrungen gemacht?

                  ctr - Du benutzt homebridge parallel zu NodeRed wenn ich das richtig verstanden habe. Wie bringst du denn z.B. Wiregate Temperaturdaten von NodeRed auf Homekit?

                  Gruß
                  Ludwig

                  Kommentar


                    #10
                    Was meinst Du denn mit "Wiregate Temperaturdaten"? Falls Du One-Wire meinst, so benutze ich den KNX, d.h. Wiregate sendet etwas auf eine KNX-GA und im Homekit habe ich dann ein Accessory welches über die GA bedient wird. Bevor ich das Wiregate komplett einmotte, werde ich vorher owfs mit node-red verheiraten und damit dann die Werte auch wieder auf den Bus senden.

                    Kommentar


                      #11
                      Ja, meinte 1wire - danke
                      Hast du denn schon mal mit der HomeKit node experimentiert?

                      Kommentar


                        #12
                        hallo... hast du schon eine Lösung für den Nibe Wärmepumpen Gateway?

                        Kommentar


                          #13
                          Lustig, dass noch von anderer Seite Interesse besteht, siehe: https://knx-user-forum.de/forum/%C3%...bus-nibe/page2

                          Ja es ist tatsächlich mein Plan meine bereits vorhandene Anbindung auf nodejs oder node-red zu portieren.

                          Kommentar


                            #14
                            Hallo,

                            wie schaut es denn mit DatenTyp DTP9 aus? Ich würde mir gerne die Temperaturverläufe der Raumtemperaturen anzeigen lassen.
                            Irgendwie komme ich damit aber nicht weiter.

                            Kommentar


                              #15
                              Hi ctr

                              Kannst mal deine Flows, wie im ersten Post abgebildet, veröffentlichen? Möchte für ein paar Anwendungsfälle direkt von Node-red auf den Bus schreiben. Habe mal die knx node probiert, aber das lief irgendwie nicht wirklich rund.
                              Spiele gerade mit MQTT 2 Edomi rum, aber ich möchte in den Fällen kurze Wege.

                              Danke.

                              ---
                              Martin

                              Kommentar

                              Lädt...
                              X