Beispiel: Loxone mit node-red auf rPi 3, influxDB und grafana (Visu)

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Xenobiologist
    Lox Guru
    • 15.01.2016
    • 1116

    #16
    Zitat von Programie
    Wow, danke fuer den genialen Tipp mit InfluxDB/Grafana!

    Von Grafana habe ich vorher schon gehoert, aber als ich das gesehen habe musste ich es direkt mal selbst ausprobieren.

    Ich habe das jetzt bei mir so gemacht, dass ich alle Temperaturwerte mit einer einzigen "Stream in" Node aus dem Miniserver auslese. Ich denke mal, damit hat man dann nur einen Request statt fuer jeden Sensor jeweils einen Requests. Zwischen der InfluxDB-Node und der "Stream in" Node habe ich dann noch eine Function-Node gepackt, welche aus der Payload aus der "Stream in" Node entsprechende Tags fuer InfluxDB erstellt.

    Die Funktion sieht so aus:

    Code:
    if (msg.state == "value") {
    return {
    payload: [
    {
    value: msg.payload
    },
    {
    room: msg.room,
    name: msg.topic
    }
    ]
    };
    }
    Das ganze habe ich jetzt schon ein paar Tage aktiv und sieht bisher echt gut aus. Soetwas habe ich lange gesucht!

    Kann man eigentlich auch irgendwie die bisherigen Statistikdaten die aktuell noch auf der SD Karte vom Miniserver liegen in die InfluxDB schreiben?
    Wie genau sieht dein influx node aus? Ich wollte das mal ausprobieren. Ggf. kann man mit der Node-RED 0.18 auch gleich den batch und join node nehmen.
    Node-RED mit influxDB und Grafana - z.B. Statistiken auslagern:
    https://www.loxforum.com/forum/germa...d-grafana-visu
    Mit Loxone einen Windows-PC steuern:
    https://www.loxforum.com/forum/faqs-...indows-steuern

    Kommentar


    • Programie
      Programie kommentierte
      Kommentar bearbeiten
      Ich verwende nur den "influxdb out" Node. Mittlerweile habe ich meinen Loxone Flow, wie schon in einem Issue auf Github (https://github.com/codmpm/node-red-c...xone/issues/22) beschrieben, noch etwas angepasst. Problem war ja, dass die Werte nur geschrieben werden, wenn sie sich aendern. Wenn aber ein Temperaturwert in dem Zeitraum, welcher in Grafana ausgewaehlt wurde, nicht geschrieben wurde weil er sich nicht geaendert hat, wird der Wert nicht angezeigt.
  • bastelbert
    LoxBus Spammer
    • 25.08.2016
    • 237

    #17
    Programie
    Ich hätte definitiv Interesse an einer verbesserten Version deines Skriptes, die Idee dahinter finde ich genial!
    Ich habe heute ein wenig mit node-red und InfluxDB gebastelt, sehr geniales Tool!
    Nachdem ich noch ein paar Module auf meinem Raspi nachinstallieren musste...
    apt install python3-requests
    apt install python3-influxdb
    ... funktioniert nun der Import von Zimmertemperaturen schonmal sehr gut mit deinem Skript.
    Leider scheitere ich bisher noch am Import weiterer Daten wie z.B. dem Hausstrom (über Loxberry gesammelt) oder der Außentemperatur (per FHEM von einer Novelan Wärmepumpe in Loxone gesammelt):

    Code:
    stats_map = {
        "[I]**UUID**[/I]": {
            "measurement": "Hausstrom",
            "tags": {
                "Zeitraum": "Aktuell"
            }
        },
        "[I]**UUID**[/I]": {
            "measurement": "Temperatur",
            "tags": {
                "room": "Badezimmer"
            }
        },
        "[I]**UUID**[/I]": {
            "measurement": "Temperatur",
            "tags": {
                "room": "DuschWc"
            }
        }
    }
    Dabei kommen viele Meldungen wie
    Room ID **UUID* not mapped, skipping

    Hast du hierzu eine Idee?
    Vielen Dank!

    Kommentar


    • Programie
      Programie kommentierte
      Kommentar bearbeiten
      Die Meldung "Room ID **UUID** not mapped, skipping" bekommst du, wenn es die UUID von einem Raum in der Stats Map nicht gibt. Da sollte als Key eben genau das drin stehen was auch in der Meldung als Room ID ausgegeben wird. Hast du dich bei der ID vielleicht vertippt? Oder vielleicht ein Leerzeichen am Anfang/Ende (Klassiker)?

      Ich werde das Script die Tage mal verbessern. :-)
  • bastelbert
    LoxBus Spammer
    • 25.08.2016
    • 237

    #18
    Programie
    Hhhmm, evtl. habe ich das ganze Konstrukt mit der UUID noch nicht ganz verstanden.
    Ich möchte aus dem nachfolgenden Auszug nur die Einträge zu "Aktuell" (ganz unten) auslesen:
    Code:
            "1040a3a0-00f6-4efa-ffffcce15125b0a9": {
                "name": "1.0 Hausstrom",
                "type": "Meter",
                "uuidAction": "1040a3a0-00f6-4efa-ffffcce15125b0a9",
                "room": "0f8fc690-0022-0953-ffffcce15125b0a9",
                "cat": "1041d710-00e5-8970-ffffcce15125b0a9",
                "defaultRating": 10,
                "isFavorite": false,
                "isSecured": false,
                "details": {
                    "actualFormat": "%.0fW",
                    "totalFormat": "%.0fkWh"
                },
                "states": {
                    "actual": "1040a3a0-00f6-4eef-ffff4334b36f02a3",
                    "total": "1040a3a0-00f6-4eee-ffff4334b36f02a3"
                },
                "statistic": {
                    "frequency": 1,
                    "outputs": [{
                        "id": 0,
                        "name": "Gesamt",
                        "format": "%.0fkWh",
                        "uuid": "1040a3a0-00f6-4eee-ffff4334b36f02a3",
                        "visuType": 2
                    },
                    {
                        "id": 1,
                        "name": "Aktuell",
                        "format": "%.0fW",
                        "uuid": "1040a3a0-00f6-4eef-ffff4334b36f02a3",
                        "visuType": 0
                    }]
    Wenn ich dazu in deinem Skript die uuid 1040a3a0-00f6-4eef-ffff4334b36f02a3 verwende, bekomme ich nur den "skipping"-Fehler.
    Wenn ich den ersten Eintrag 1040a3a0-00f6-4efa-ffffcce15125b0a9 ins Skript eintrage, so werden brav die einzelnen Werte zu "Hausstrom gesamt" ausgelesen und danach kommen noch einige "skipping"-Fehler. "Hausstrom aktuell" bekomme ich damit nicht in die DB.

    Nebenbei:
    Ist es möglich, die Werte ohne Tags in die DB zu schreiben? Ich würde danach gerne die neuen Werte per node-red aus Loxone auslesen und an die DB ins selbe Measurement senden. In dem node sehe ich aber keine Möglichkeit, Tags anzugeben.

    DANKE!

    Kommentar


    • bastelbert
      bastelbert kommentierte
      Kommentar bearbeiten
      Ok scheinbar laufen beide Werte unter derselben UUID und das Skript liest nur den ersten Wert V1 anstelle des gewollten V2 aus:

      <Statistics Name="1.0 Hausstrom" NumOutputs="2" Outputs="Gesamt,Aktuell">
      <S T="2018-03-01 00:00:00" V="2461.397" V2="287.000"/>
      <S T="2018-03-01 00:01:03" V="2461.413" V2="226.000"/>
      <S T="2018-03-01 00:05:04" V="2461.428" V2="225.000"/>
      (Auszug aus http://dein-miniserver/stats)

    • bastelbert
      bastelbert kommentierte
      Kommentar bearbeiten
      Ich hab's gelöst indem ich das Skript auf V2 umgesetzt habe:
      value_string = stat.get("V2")
      Jetzt liest es die gewünschten Werte ein.
      GENIAL! DANKE!

    • Programie
      Programie kommentierte
      Kommentar bearbeiten
      Ah... OK das habe ich im Script nicht beruecksichtigt, dass es auch mehrere Werte geben kann. Werde ich noch anpassen. Danke fuer den Hinweis!
  • Christian Fenzl
    Lebende Foren Legende
    • 31.08.2015
    • 11217

    #19
    Xenobiologist Hast du (bzw. habt ihr) eine Anleitung für die Grafana-Installation am Pi?
    Bezüglich https://www.loxforum.com/forum/proje...ox-mit-grafana

    LG, Christian
    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

    Kommentar

  • kerrick
    Smart Home'r
    • 03.09.2015
    • 91

    #20
    Hallo zusammen,

    ich habe mir gestern mal via Docker das Node-RED, InfluxDB, Grafana Trio auf meinen Raspi geholt. Das ging schonmal relativ einfach, auch dank des Funktionsblocks von Programie . Jetzt bekomme ich auch einen Chart in Grafana angezeigt aber das, was in der DB steht ist eigentlich Murks: Als "name" steht die Beschreibung des Sensors, und als "room" die Kategorie, also immer nur "Temperatur".
    Code:
    > select * from "temperature"
    name: temperature
    time                name                               room       value
    ----                ----                               ----       -----
    ...
    1526325319242555407 Temperatursensor AZ Fenster        Temperatur 25.4375
    In der Beschreibung steht bei mir zufällig noch der Raum, daher könnte ich den Raum schon irgendwie ermitteln aber das kann's ja nicht sein.
    Daraufhin habe ich mal geschaut, was denn vom Miniserver bei Nodered für msg Objekte ankommen:

    Code:
    {
    "payload":25.75,
    "topic":"Temperatursensor AZ Fenster",
    "state":"value",
    "room":"Temperatur",
    "category":null,
    ...}
    Es kommt also schon Murks an. In Loxone Config sind die Werte "Kategorie" und "Raum" korrekt gesetzt.
    Kommt mir wie ein Offset-Fehler vor, wo der "category"-Wert in den "room" rutscht und category dann null bleibt, aber ich weiß nicht, wo ich da als nächstes suchen müsste.
    Programie scheint das Problem ja nicht zu haben, sonst sähe der Funktionsblock ja nicht so aus.
    Gleichzeitig mal ein Ping an pmayer, den Entwickler des node-red nodes; vielen Dank für die Arbeit übrigens!
    Hat jemand eine Idee, was bei mir schief läuft?

    Ich benutze node-red-contrib-loxone V0.10.0 und Miniserver V9.3.3.26.

    Kommentar


    • pmayer
      pmayer kommentierte
      Kommentar bearbeiten
      Hmm,

      ich hole den Raum und die Kategorie über die UUID des Control's... es ist also ziemlich unwahrscheinlich, dass es hier zu einem Offset-Fehler kommt.
      Für Grafana musst du den gewünschen "Namen" in msg.measurement packen. Und wichtig, die Werte müssen vom richtigen Datentyp sein. String kannst du nachehr nicht in Grafana parsen, also vorher in Int oder Float umwandeln.

      Kannst du dir mal deine anderen Control-In's angucken, ob es da auch category oder room Probleme gibt?

      Welche Versionen setzt du ein? (nodeJS, node-red-contrib-loxone)
      Zuletzt geändert von pmayer; 15.05.2018, 00:39.

    • kerrick
      kerrick kommentierte
      Kommentar bearbeiten
      pmayer Danke für die schnelle Antwort: node-red-contrib-loxone hat die neuste Version 0.10.0 aber der NodeRED Container benutzt nodeJS v6.11.0. Das scheint ja weder eine LongTermSupport- noch die aktuelle Version zu sein.. werde mal schauen wie ich das aktualisiert bekomme; danke für den Tipp!

    • kerrick
      kerrick kommentierte
      Kommentar bearbeiten
      Das Update ging schnell... nodeJS hat jetzt Version v10.0.0 - Problem besteht aber weiterhin.
  • Xenobiologist
    Lox Guru
    • 15.01.2016
    • 1116

    #21

    update-nodejs-and-nodered
    Node-RED mit influxDB und Grafana - z.B. Statistiken auslagern:
    https://www.loxforum.com/forum/germa...d-grafana-visu
    Mit Loxone einen Windows-PC steuern:
    https://www.loxforum.com/forum/faqs-...indows-steuern

    Kommentar


    • kerrick
      kerrick kommentierte
      Kommentar bearbeiten
      nodeJS hat jetzt v10.0.0 und Node-RED hatte vorher auch schon v0.18.5, also alles auf dem neusten stable-Stand; das Problem besteht auch nach dem Update von nodeJS.
  • pmayer
    LoxBus Spammer
    • 27.02.2017
    • 379

    #22
    Hm, ok...
    ist das bei jedem Control so? Was ist in der LoxConfig für den Baustein eingestellt?
    https://allgeek.de/

    https://twitter.com/pregopm, https://github.com/codmpm/
    https://github.com/codmpm/node-red-contrib-loxone
    https://github.com/codm/wled-controller

    Kommentar


    • kerrick
      kerrick kommentierte
      Kommentar bearbeiten
      In LoxoneConfig ist Raum: Arbeitszimmer und Kategorie: Temperatur eingestellt. Also so, wie ich es erwarten würde.
  • pmayer
    LoxBus Spammer
    • 27.02.2017
    • 379

    #23
    Das kann ich mir leider nicht erklären, da die Zuweisung über die UUID stattfindet.

    Schau doch bitte mal in dein Structure-File unter http://<ip-miniserver>/data/LoxAPP3.json und such dort mal nach deinem Control. Was steht da bei 'room' und 'category'? Kopier mal diese UUID's und such der Datei mal danach.
    https://allgeek.de/

    https://twitter.com/pregopm, https://github.com/codmpm/
    https://github.com/codmpm/node-red-contrib-loxone
    https://github.com/codm/wled-controller

    Kommentar

    • kerrick
      Smart Home'r
      • 03.09.2015
      • 91

      #24
      Das sieht auch prima aus:
      controls
      0c1361a8-008a-19e3-ffffeee000000000
      name "Temperatursensor AZ Fenster"
      type "InfoOnlyAnalog"
      uuidAction "0c1361a8-008a-19e3-ffffeee000000000"
      room "00000010-00e8-0027-0f00000000000000"
      cat "00000010-00e8-0008-0d00000000000000"
      defaultRating 0
      isFavorite false
      isSecured false
      defaultIcon null
      details
      format "%.1f°"
      states
      value "0c1361a8-008a-19e3-ffffeee000000000"
      error "0c1361a8-008a-19e2-ffff504f94000000"

      ROOM UUID:
      rooms
      00000010-00e8-0027-0f00000000000000
      uuid "00000010-00e8-0027-0f00000000000000"
      name "Arbeitszimmer"
      image "00000000-0000-0011-2100000000000000.svg"
      defaultRating 1
      isFavorite true
      type 2
      CAT UUID:
      cats
      00000010-00e8-0008-0d00000000000000
      uuid "00000010-00e8-0008-0d00000000000000"
      name "Temperatur"
      image "00000000-0000-0009-2000000000000000.svg"
      defaultRating 0
      isFavorite false
      type "indoortemperature"
      color "#69C350"

      Kommentar

      • pmayer
        LoxBus Spammer
        • 27.02.2017
        • 379

        #25
        Das ist sehr sehr komisch. Kannst du den miniserver in node-red mal neu anlegen? Neustart hast du sicherlich schon gemacht, oder?
        https://allgeek.de/

        https://twitter.com/pregopm, https://github.com/codmpm/
        https://github.com/codmpm/node-red-contrib-loxone
        https://github.com/codm/wled-controller

        Kommentar


        • kerrick
          kerrick kommentierte
          Kommentar bearbeiten
          Fehler gefunden und behoben - habe dir einen PR in Github erstellt.

        • pmayer
          pmayer kommentierte
          Kommentar bearbeiten
          Ach herrje, was ein dummer dummer Fehler...

          Sorry, dass ich da heute nicht nachgeguckt habe... das hätte mir auffallen müssen. Der Fehler ist mit 0.10.0 eingezogen. Mist.
      • pmayer
        LoxBus Spammer
        • 27.02.2017
        • 379

        #26
        Version 0.10.1 published. Sollte in den nächsten Minuten per Manage Palette installierbar sein.

        Danke kerrick !!
        https://allgeek.de/

        https://twitter.com/pregopm, https://github.com/codmpm/
        https://github.com/codmpm/node-red-contrib-loxone
        https://github.com/codm/wled-controller

        Kommentar

        • Gast

          #27
          I apologise but my german is not so good. How do you read the information from the Loxone server and get it into influxdb?

          Kommentar


          • pmayer
            pmayer kommentierte
            Kommentar bearbeiten
            No problem with the language... What did you try already?
        • Gast

          #28
          Zitat von pmatos
          I apologise but my german is not so good. How do you read the information from the Loxone server and get it into influxdb?
          I have easily configured Grafana and Influxdb. However, I can't see how to get all logs out of the miniserver. Also, can't understand how node-red fits in the picture. Is node-red just a visual programming tool to throw the logs at influxdb?

          (pmayer: just noticed I cannot seem to find out how to actually reply to your comment)

          Kommentar


          • pmayer
            pmayer kommentierte
            Kommentar bearbeiten
            Well, yes ;-)

            As the miniserver can not connect to an influxDB directly, simply use node-red to bridge the gap.
            node-red-contrib-loxone brings a stream-all-node which will catch EVERY event from the miniserver. Theres also a stream-in-node which could listen to a specific category (e.g. Temperature).

            Just take the nodes in node-red to "get" the data, process it and pass it to the influx node which connects to your influxdb.

            Did you dig a little into the node-red basics, yet?
            Maybe read up on https://github.com/codmpm/node-red-contrib-loxone as I've tried to explain the different nodes of node-red-contrib-loxone there. Including examples with vidoes...
            Zuletzt geändert von pmayer; 09.07.2018, 15:44.
        • Gast

          #29
          I have never actually used node-red so I will have to do a bit of reading. Thanks for the explanation.

          Kommentar


          • kerrick
            kerrick kommentierte
            Kommentar bearbeiten
            I found Node RED usage to be really straightforward. I spent much more time figuring out how to store the data in InfluxDB (Retention Policies, Continuous Queries for downsampling) and presenting it with Grafana (putting as much information into a chart as possible without overloading it).
        • bastelbert
          LoxBus Spammer
          • 25.08.2016
          • 237

          #30
          @Programie:
          Ich möchte noch einmal unseren kleinen Austausch aus März bzgl. deines Datenimport-Skriptes ansprechen.
          Mit der aktuellen Version deines Skriptes habe ich wieder das oben angesprochene Problem, dass sich hinter einer UUID zwei Werte (V und V2) verbergen und vom Skript leider nur V in die Datenbank importiert wird.
          Wie dem auch sei, in der älteren Version deines Skripte habe ich wie letztes Mal einfach value_string = stat.get("V2") umgesetzt, damit komme ich an die gewünschten Werte.
          Nun habe ich aber das Problem, dass die Daten mit einem Timestamp zwei Stunden in der Zukunft in die Influxdb ("test") geladen werden.
          Hast du dazu eine Idee?

          Erklärung Screenshot:
          DB "statistics" (oben) = aktuell über node-red gesammelte Werte
          DB "test" (unten) = aus Loxone importierte Werte

          Kommentar


          • bastelbert
            bastelbert kommentierte
            Kommentar bearbeiten
            Das Problem ist, dass das Skript die Daten mit (derzeit) Sommerzeit aus den Loxone Dateien ausliest und dann aber mit UTC in die InfluxDB schreibt.
            Ein Datensatz von 16:05 (MESZ) steht dann in der InfluxDB mit 16:05 (UTC).
            Wenn ich in Grafana das Dashboard auf Time Zone UTC konfiguriere, werden mir die richtigen Timestamps angezeigt.
            Leider sind dann aber die Daten, die node-red in die InfluxDB schreibt, zwei Stunden in der Vergangenheit.
            node-red schreibt einen Datensatz von 16:05 (MESZ) richtigerweise mit 14:05 (UTC) in die InfluxDB.
            Somit passen alte und neue Daten nicht zusammen
            Zuletzt geändert von bastelbert; 31.07.2018, 17:30.

          • Programie
            Programie kommentierte
            Kommentar bearbeiten
            Wie gerade schon per PN geschrieben (dachte es ist vielleicht besser es hier zu schreiben) habe ich im Script angepasst, dass die lokale Zeitzone jetzt richtig nach UTC konvertiert wird.

            Die aktuelle Version gibt es hier: https://gitlab.com/Programie/LoxoneStats2InfluxDB

          • bastelbert
            bastelbert kommentierte
            Kommentar bearbeiten
            Besten Dank für die klasse Arbeit, der Import funktioniert jetzt wie gewünscht!
        Lädt...