Beispiel: Loxone mit node-red auf rPi 3, influxDB und grafana (Visu)
Einklappen
X
-
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-
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.
-
-
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" } } }
Room ID **UUID* not mapped, skipping
Hast du hierzu eine Idee?
Vielen Dank!Kommentar
-
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. :-)
-
-
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 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
-
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) -
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!
-
-
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, ChristianHilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraineKommentar
-
danke, ist schon mal ein guter Start! -
Das Installieren schlägt schon mal auf, weil die Signatur des Repo's nicht passt.
-
-
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
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, ...}
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
-
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. -
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!
-
-
update-nodejs-and-noderedNode-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-steuernKommentar
-
Hm, ok...
ist das bei jedem Control so? Was ist in der LoxConfig für den Baustein eingestellt?Kommentar
-
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.Kommentar
-
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:CAT 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 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
-
Das ist sehr sehr komisch. Kannst du den miniserver in node-red mal neu anlegen? Neustart hast du sicherlich schon gemacht, oder?Kommentar
-
Version 0.10.1 published. Sollte in den nächsten Minuten per Manage Palette installierbar sein.
Danke kerrick !!Kommentar
-
(pmayer: just noticed I cannot seem to find out how to actually reply to your comment)Kommentar
-
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.
-
-
I have never actually used node-red so I will have to do a bit of reading. Thanks for the explanation.Kommentar
-
@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
1 BildKommentar
-
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 zusammenZuletzt geändert von bastelbert; 31.07.2018, 17:30. -
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 -
Besten Dank für die klasse Arbeit, der Import funktioniert jetzt wie gewünscht!
-
Kommentar