NEWS
Shelly 3EM in Node Red - Werte extrahieren und addieren
-
Hallo,
Ich habe ein Shelly 3EM Energiemesser im Verteilerkasten verbaut und erhalte im Node-red über die "Shelly Palette" wunderbar die Werte.
Das kann man über den "debug 3EM" gut sehen.Mein erster Schnitt wäre es die die "power" werte zu extrahieren und im "debug power 0" anzeigen zu lassen.
Ich verstehe einfach nicht warum das nicht geht. Bei den momentanen Code kommt einfach kein debug node.Im nächsten Schritt würde ich gern 0: power, 1: power, 2: power zusammen addieren und dann ausgeben.
Dann wäre ich schon am Ziel denn den wert könnte ich an meine InfluxDB weiter leiten und mit Grafana weiter verarbeiten.Kann mir jemand ein Tipp geben wie die Funktion aussehen sollte?
Würde mich über Hilfe riesig freuen.Gruß
Damian -
@damian-m
Dass bei Einbindung mittels Shelly Adapter alle Werte für L1-L3 einzeln kommen incl. einem Gesamtwert ist bekannt? -
@damian-m Als erstes kopier den Pfad - und programmiere doch nicht - dazu sind doch die Change Nodes da. VERMEIDE function Nodes so gut du kannst - ausser Du willst nicht die Vorteile von NodeRed und liebst es zu programmieren.
Da ist doch gar keine payload - aus der du den Wert extrahierst.
Kopiere Dir den Pfad aus dem Debug-Fenster.
In der Regel macht es auch Sinn - zusätzlich zum Screenshot die Daten hier in Code-Tags einzustellen - in dem Du wie auf dem Bild vorher den ganzen Wert einstellst.
In der Regel extrahiert man Werte einfach über eine ChangeNode - in dem man die payload auf den Pfad des ursprünglichen Nachrichtenobjektes setzt:
-
Wenn Du das ganze addieren willst, dann wäre es ein großer Fehler diese Werte zu extrahieren. Im Gegenteil Du nutzt die Tatsache das alles in einem Objekt enthalten ist.
Um also 3 Powerwerte aus dem Array zu addieren - nutzt Du am Besten JSONATA oder Du nutzt die einzelnen Nodes mit Split und JOIN.
Gehen wir also mal davon aus, dass Du in dem Array - die 3 Powerwerte addieren möchtest.
Dann selektierst Du erst mal das ganze Array!
dann teilst Du das Array in Einzelnachrichten auf.
und summierst das ganze in einer JOIN Node auf:
Einfacher geht es natürlich, wenn Du Dich mit JSONATA beschäftigst.
So summiert alles ohne Extrahieren - einfach auf:
Alle Beispiele hier zum Import:
-
@samson71 sagte in Shelly 3EM in Node Red - Werte extrahieren und addieren:
ass bei Einbindung mittels Shelly Adapter alle Werte für L1-L3 einzeln kommen incl. einem Gesamtwert ist bekannt?
Nein das ist mir nicht bekannt. Welcher von den Soll der Gesamtwert sein?
-
@mickym
Vielen dank schon einmal für die große Mühe.
Dein ersten Beitrag mit der ChangeNode wollte ich erst einmal probieren.
Leider ohne Erfolg. in meinem debug L1 kommt nichts an. Dabei habe ich es exakt nach der Anleitung gemacht. Hier mein Flow:[ { "id": "8929ae3780467ce9", "type": "tab", "label": "Flow 1", "disabled": false, "info": "", "env": [] }, { "id": "e3efbd0143f062e0", "type": "shelly-gen1", "z": "8929ae3780467ce9", "hostname": "192.168.178.69", "description": "Shelly 3EM", "mode": "polling", "server": "", "outputmode": "event", "uploadretryinterval": 5000, "pollinginterval": "30000", "pollstatus": true, "getstatusoncommand": true, "devicetype": "Measure", "outputs": 2, "x": 330, "y": 200, "wires": [ [ "c6b5e4ae381e4b49" ], [ "738f58d61f60564e" ] ] }, { "id": "e63516c2437467fb", "type": "debug", "z": "8929ae3780467ce9", "name": "L1", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 730, "y": 220, "wires": [] }, { "id": "c6b5e4ae381e4b49", "type": "debug", "z": "8929ae3780467ce9", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 550, "y": 140, "wires": [] }, { "id": "738f58d61f60564e", "type": "change", "z": "8929ae3780467ce9", "name": "L1", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "payload.emeters[0].power", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 530, "y": 220, "wires": [ [ "e63516c2437467fb" ] ] } ]
-
@damian-m sagte in Shelly 3EM in Node Red - Werte extrahieren und addieren:
Du gehst in das Debug-Fenster gehst - rechts mit der Maus auf das Symbol Pfad kopieren und fügst es dann in die Change node ein.
Ich sehe in meinem Post https://forum.iobroker.net/post/1067614 nichts von einer payload.
Das ist doch Dein gesamtes Nachrichtenobjekt:
Ich sehe hier in dem GESAMTEN NACHRICHTENOBJEKT keine Eigenschaft die PAYLOAD heißt.
Deshalb das in Zukunft die Daten auch in CodeTags posten.
Oft sind die Daten zwar in einer payload - aber das ist NICHT zwingend. Jedes Nachrichtenobjekt kann beliebige Eigenschaften enthalten. Eine payload ist also NICHT zwangsläufig in einem Nachrichtenobjekt vorhanden!!!
-
Importiere einfach mal meinen Flow und hänge statt der Inject Node - Deine Shelly Nodes vorne dran.
-
-
@samson71 Nun ich kann auch den NodeRed Adapter verwenden - und Nodes verwenden, für die es alternativ auch einen Adapter im iobroker gibt. - So nutze ich zum Beispiel auch die Harmony Nodes - da der entsprechende Adapter im iobroker zu langsam ist. Oder auch der SMTP Adapter war in der vorangegangen Version buggy und deshalb nutze ich auch im NodeRed Adapter SMTP Nodes. Ich denke auch wenn man den NodeRed Adapter im iobroker nutzt - muss man ja nicht die anderen Adapter zwangsläufig nutzen.
-
@mickym
Das mit deinem Flow habe ich auch versucht. Ich habe den Inject ausgetauscht. Aber leider immer noch kein debug note noch dem change.Übrigens wenn ich aus dem vorderem "debug note", den power wert über dem Button "Pfad kopieren" wähle. Kommt der pfad mit PAYLOAD vorweg.
genau so: "payload.emeters[0].power"Jetzt habe ich mal den debug mal auf "Kompletten Nachrichten Objekt" gestellt. so kann ich noch mehr Informationen sehen.
mein gewünschter Wert lässt sich trotzdem nicht separieren.
-
@damian-m Ok - ich sehe - ist doch unter payload - magst Du mal die payload den Wert aus dem Debug Fenster kopieren und hier in CodeTags einstellen - dann kann ich die Daten in eine Inject Node kopieren. Ich habe die Shelly Nodes nicht - da ich direkt mqtt nutze
Wahrscheinlich wird dann folgendes funktionieren in der Change Node - aber sicher kann ich es erst sagen, wenn Du mir hier die Daten aus dem Debug Fenster hier in code-tags kopierst.
Denn eigentlich hätte Dein Flow funktionieren müssen.
Auch mit einem Punkt sollte es gehen.
Wie gesagt kopiere mir mal Deine payload hier rein.Sonst kann ich es nicht nachvollziehen.========================================================================
Gehe also bitte in Dein Debug Fenster kopiere die payload aus dem debug Fenster:
und stelle es hier in CodeTags ein:
{"emeters":[{"power":154.9},{"power":201},{"power":44.5}]}
-
@mickym
Das ist der Payload Wert:{"relays":[{"ison":false,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"overpower":false,"is_valid":true,"source":"input"}],"emeters":[{"power":17.58,"pf":0.25,"current":0.31,"voltage":232.87,"is_valid":true,"total":6193.8,"total_returned":0},{"power":12.94,"pf":0.22,"current":0.25,"voltage":232.92,"is_valid":true,"total":1736.5,"total_returned":0},{"power":267.69,"pf":0.72,"current":1.59,"voltage":234.04,"is_valid":true,"total":6458.1,"total_returned":0}]}
Hier ist der status Wert.. der ist in soweit interessant da hier tatsächlich auch die Total_Power (von L1+L2+L3) vorhanden ist:
{"wifi_sta":{"connected":true,"ssid":"WLAN Home","ip":"192.168.178.69","rssi":-76},"cloud":{"enabled":false,"connected":false},"mqtt":{"connected":true},"time":"00:09","unixtime":1698271762,"serial":1375,"has_update":false,"mac":"485519D749CD","cfg_changed_cnt":0,"actions_stats":{"skipped":0},"relays":[{"ison":false,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"overpower":false,"is_valid":true,"source":"input"}],"emeters":[{"power":17.58,"pf":0.25,"current":0.31,"voltage":232.87,"is_valid":true,"total":6193.8,"total_returned":0},{"power":12.94,"pf":0.22,"current":0.25,"voltage":232.92,"is_valid":true,"total":1736.5,"total_returned":0},{"power":267.69,"pf":0.72,"current":1.59,"voltage":234.04,"is_valid":true,"total":6458.1,"total_returned":0}],"total_power":298.21,"emeter_n":{"current":0,"ixsum":1.5,"mismatch":false,"is_valid":false},"fs_mounted":true,"v_data":1,"ct_calst":0,"update":{"status":"idle","has_update":false,"new_version":"20230913-114244/v1.14.0-gcb84623","old_version":"20230913-114244/v1.14.0-gcb84623"},"ram_total":49920,"ram_free":30888,"fs_size":233681,"fs_free":155118,"uptime":18281}
seperieren kann ich aber immer noch keinen von den.
Das ist im übrigen der Komplette Inhalt:
{"status":{"wifi_sta":{"connected":true,"ssid":"WLAN Home","ip":"192.168.178.69","rssi":-76},"cloud":{"enabled":false,"connected":false},"mqtt":{"connected":true},"time":"00:21","unixtime":1698272482,"serial":1405,"has_update":false,"mac":"485519D749CD","cfg_changed_cnt":0,"actions_stats":{"skipped":0},"relays":[{"ison":false,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"overpower":false,"is_valid":true,"source":"input"}],"emeters":[{"power":17.79,"pf":0.25,"current":0.3,"voltage":232.2,"is_valid":true,"total":6197.4,"total_returned":0},{"power":13.58,"pf":0.23,"current":0.25,"voltage":232.35,"is_valid":true,"total":1739.2,"total_returned":0},{"power":272.29,"pf":0.72,"current":1.61,"voltage":233.1,"is_valid":true,"total":6512.7,"total_returned":0}],"total_power":303.66,"emeter_n":{"current":0,"ixsum":1.5,"mismatch":false,"is_valid":false},"fs_mounted":true,"v_data":1,"ct_calst":0,"update":{"status":"idle","has_update":false,"new_version":"20230913-114244/v1.14.0-gcb84623","old_version":"20230913-114244/v1.14.0-gcb84623"},"ram_total":49920,"ram_free":30892,"fs_size":233681,"fs_free":155118,"uptime":19000},"payload":{"relays":[{"ison":false,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"overpower":false,"is_valid":true,"source":"input"}],"emeters":[{"power":17.79,"pf":0.25,"current":0.3,"voltage":232.2,"is_valid":true,"total":6197.4,"total_returned":0},{"power":13.58,"pf":0.23,"current":0.25,"voltage":232.35,"is_valid":true,"total":1739.2,"total_returned":0},{"power":272.29,"pf":0.72,"current":1.61,"voltage":233.1,"is_valid":true,"total":6512.7,"total_returned":0}]},"_msgid":"377aa860cfb4334f"}
-
Also wenn das erste die payload ist - dann sehe ich das Problem nicht - bei mir tut da.
Importiere diesen Flow mal und vergleiche die payload nochmal .
-
@mickym
Ich verstehe es auch nicht wo der Fehler sein soll. -
Und das ist aus dem status extrahiert:
-
@mickym
der debug 7 sieht in den Einstellungen so aus:Nicht das hier etwas falsch ist.
-
@damian-m sagte in Shelly 3EM in Node Red - Werte extrahieren und addieren:
@mickym
Ich verstehe es auch nicht wo der Fehler sein soll.Da steht aber nicht die debug 7. Hast Du denn mal meine Flows importiert - die sollten aber funktionieren.
-
@damian-m sagte in Shelly 3EM in Node Red - Werte extrahieren und addieren:
@mickym
der debug 7 sieht in den Einstellungen so aus:Nicht das hier etwas falsch ist.
Sag mal Du hast oben und unten bei den Shellies was angeschlossen - debug 7 kann ich gar nicht entdecken. Warum hast Du das unten angeschlossen?
Wenn debug7 Deine debug Node ist dann muss das auch im Debug Fenster stehen:
-
@mickym
Ich wusste nicht dass es ein Unterschied macht ob oben oder unten.
Ich glaube jetzt hast du den Fehler gefunden.
Das nächste Kaltgetränk geht auf mich.Vielen Lieben dank. Und Gute Nacht...