mr-manuel / venus-os_dbus-mqtt-pv

This Venus OS driver gets the data from MQTT and displays it as pv inverter.
MIT License
55 stars 12 forks source link

JSON Syntax #14

Closed CharlieBerghammer closed 1 year ago

CharlieBerghammer commented 1 year ago

Hallo Manuel, habe längere Zeit gesucht, wie ich meine älteren Wechselrichter in Victron integrieren kann. Hier ist dein dbus-mqtt-pv Adapter super. Vielen Dank dafür. Meine PV Daten bekomme ich per http get. Ich mache hier in Node Red 4 Abfragen für PV Leistung "Gesamt" "L1" "L2" und "L3". Dann nehme ich die Funktion "change", wandle den Wert in das JSON Format und schicke es mit "mqtt out" wieder weiter. Das Readme habe ich gelesen, komme aber nicht weiter. Mit der PV Gesamtleistung funktioniert alles bestens. In Node Red gebe ich für das JSON Format value JSON {"pv": { "power":payload } } und alles funktioniert perfekt. Möchte ich aber auch L1 L2 L3 anzeigen lassen, weiß ich nicht wie ich das Ganze ins JSON Format bringen kann. Beim Versuch {"pv": {"power": 0.0, "L1": {"power": 0.0 }, "L2": {"power": 0.0 }, "L3": {"power": 0.0 }} einzubinden komme ich nicht weiter. Kannst Du mir hier bitte einen Tip geben wie ich hier weiter komme. Grüße Charlie

mr-manuel commented 1 year ago

Hallo Charlie, wenn ich es richtig verstanden habe, dann weißt du nicht wie du die vier Werte der getrennten Abfragen zusammenzufassen kannst und als eine JSON auszugeben kannst? Ich würde die vier Ausgaben in einer Flow Variable speichern und mit einem Injection und Function Node die Werte alle 5 Sekunden (oder wie benötigt/abgefragt) ausgeben. Kannst du den Flow den du bis jetzt hast als JSON hier posten?

CharlieBerghammer commented 1 year ago

Hallo Manuel, Ich habe leider von Node Red wenig und von JSON gar keine Ahnung, Ich poste mal was ich bis jetzt vergeblich gemacht habe.

Node-RED Flow ```json [ { "id": "8e44be37516623b7", "type": "mqtt out", "z": "bb3cd8119f4b05ce", "name": "Power", "topic": "Victron-PV/power", "qos": "", "retain": "", "respTopic": "", "contentType": "", "userProps": "", "correl": "", "expiry": "", "broker": "9b344c22b0d918b9", "x": 850, "y": 80, "wires": [] }, { "id": "1e7173c2e8662ce5", "type": "change", "z": "bb3cd8119f4b05ce", "name": "Gesamtleistung", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "{\"pv\": { \"power\":payload } }", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 540, "y": 80, "wires": [ [ "8e44be37516623b7" ] ] }, { "id": "3cb3062cf062eed5", "type": "http request", "z": "bb3cd8119f4b05ce", "name": "", "method": "GET", "ret": "txt", "paytoqs": "ignore", "url": "http://192.168.2.15:8087/getPlainValue/solarviewdatareader.0.pvi3.current", "tls": "", "persist": true, "proxy": "", "insecureHTTPParser": true, "authType": "", "senderr": false, "headers": [], "x": 350, "y": 140, "wires": [ [ "8e8ae80541a3b932" ] ] }, { "id": "8e8ae80541a3b932", "type": "change", "z": "bb3cd8119f4b05ce", "name": "Leistung L3", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "{\"pv\": { \"L3\":payload } }", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 530, "y": 140, "wires": [ [ "3a2556d6aa807cde" ] ] }, { "id": "b0811b1b1eed3152", "type": "inject", "z": "bb3cd8119f4b05ce", "name": "jede Sekunde abfragen", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 120, "y": 140, "wires": [ [ "3cb3062cf062eed5" ] ] }, { "id": "3a2556d6aa807cde", "type": "mqtt out", "z": "bb3cd8119f4b05ce", "name": "Power-L3", "topic": "Victron-PV/power", "qos": "", "retain": "", "respTopic": "", "contentType": "", "userProps": "", "correl": "", "expiry": "", "broker": "9b344c22b0d918b9", "x": 860, "y": 140, "wires": [] }, { "id": "6b67f69a77de97ef", "type": "inject", "z": "bb3cd8119f4b05ce", "name": "jede Sekunde abfragen", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 120, "y": 200, "wires": [ [ "1d5ffcc0a1dd435a" ] ] }, { "id": "8ac82e8b5a8fea2f", "type": "inject", "z": "bb3cd8119f4b05ce", "name": "jede Sekunde abfragen", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 120, "y": 260, "wires": [ [ "95e53ee925a0bb06" ] ] }, { "id": "1d5ffcc0a1dd435a", "type": "http request", "z": "bb3cd8119f4b05ce", "name": "", "method": "GET", "ret": "txt", "paytoqs": "ignore", "url": "http://192.168.2.15:8087/getPlainValue/solarviewdatareader.0.pvi2.current", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [], "x": 350, "y": 200, "wires": [ [ "095670e8eac99b83" ] ] }, { "id": "95e53ee925a0bb06", "type": "http request", "z": "bb3cd8119f4b05ce", "name": "", "method": "GET", "ret": "txt", "paytoqs": "ignore", "url": "http://192.168.2.15:8087/getPlainValue/solarviewdatareader.0.pvi1.current", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [], "x": 350, "y": 260, "wires": [ [ "ad729ab2b94eb06c" ] ] }, { "id": "095670e8eac99b83", "type": "change", "z": "bb3cd8119f4b05ce", "name": "Leistung L2", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "{\"pv\": { \"L2\":payload } }", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 530, "y": 200, "wires": [ [ "a01c2e3742d8c97c" ] ] }, { "id": "ad729ab2b94eb06c", "type": "change", "z": "bb3cd8119f4b05ce", "name": "Leistung L1", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "{\"pv\": { \"L1\":payload } }", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 530, "y": 260, "wires": [ [ "641af76bda3a25d4" ] ] }, { "id": "a01c2e3742d8c97c", "type": "mqtt out", "z": "bb3cd8119f4b05ce", "name": "Power-L2", "topic": "Victron-PV/power", "qos": "", "retain": "", "respTopic": "", "contentType": "", "userProps": "", "correl": "", "expiry": "", "broker": "9b344c22b0d918b9", "x": 860, "y": 200, "wires": [] }, { "id": "641af76bda3a25d4", "type": "mqtt out", "z": "bb3cd8119f4b05ce", "name": "Power_L1", "topic": "Victron-PV/power", "qos": "", "retain": "", "respTopic": "", "contentType": "", "userProps": "", "correl": "", "expiry": "", "broker": "9b344c22b0d918b9", "x": 860, "y": 260, "wires": [] }, { "id": "fff8b543ef288bf3", "type": "inject", "z": "bb3cd8119f4b05ce", "name": "jede Sekunde abfragen", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "1", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 130, "y": 80, "wires": [ [ "cdd4da71fa6a5970" ] ] }, { "id": "cdd4da71fa6a5970", "type": "http request", "z": "bb3cd8119f4b05ce", "name": "", "method": "GET", "ret": "txt", "paytoqs": "ignore", "url": "http://192.168.2.15:8087/getPlainValue/solarviewdatareader.0.pvig.current", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [], "credentials": {}, "x": 350, "y": 80, "wires": [ [ "1e7173c2e8662ce5" ] ] }, { "id": "9b344c22b0d918b9", "type": "mqtt-broker", "name": "iobroker", "broker": "192.168.2.15", "port": "1884", "clientid": "", "autoConnect": true, "usetls": false, "protocolVersion": "4", "keepalive": "60", "cleansession": true, "birthTopic": "", "birthQos": "0", "birthPayload": "", "birthMsg": {}, "closeTopic": "", "closeQos": "0", "closePayload": "", "closeMsg": {}, "willTopic": "", "willQos": "0", "willPayload": "", "willMsg": {}, "userProps": "", "sessionExpiry": "" } ] ```
mr-manuel commented 1 year ago

Try with this:

Node-RED Flow ```json [ { "id": "a06b3000d15dbefd", "type": "tab", "label": "Flow 1", "disabled": false, "info": "", "env": [] }, { "id": "8e44be37516623b7", "type": "mqtt out", "z": "a06b3000d15dbefd", "name": "Venus OS - PV Power", "topic": "Victron-PV/power", "qos": "", "retain": "", "respTopic": "", "contentType": "", "userProps": "", "correl": "", "expiry": "", "broker": "9b344c22b0d918b9", "x": 860, "y": 180, "wires": [] }, { "id": "3cb3062cf062eed5", "type": "http request", "z": "a06b3000d15dbefd", "name": "L3", "method": "GET", "ret": "txt", "paytoqs": "ignore", "url": "http://192.168.2.15:8087/getPlainValue/solarviewdatareader.0.pvi3.current", "tls": "", "persist": true, "proxy": "", "insecureHTTPParser": true, "authType": "", "senderr": false, "headers": [], "x": 350, "y": 240, "wires": [ [ "554dfd7ba5f6effa" ] ] }, { "id": "1d5ffcc0a1dd435a", "type": "http request", "z": "a06b3000d15dbefd", "name": "L2", "method": "GET", "ret": "txt", "paytoqs": "ignore", "url": "http://192.168.2.15:8087/getPlainValue/solarviewdatareader.0.pvi2.current", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [], "x": 350, "y": 180, "wires": [ [ "512a5cab6e008f21" ] ] }, { "id": "95e53ee925a0bb06", "type": "http request", "z": "a06b3000d15dbefd", "name": "L1", "method": "GET", "ret": "txt", "paytoqs": "ignore", "url": "http://192.168.2.15:8087/getPlainValue/solarviewdatareader.0.pvi1.current", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [], "x": 350, "y": 120, "wires": [ [ "91da76f1d0669029" ] ] }, { "id": "fff8b543ef288bf3", "type": "inject", "z": "a06b3000d15dbefd", "name": "jede Sekunde abfragen", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "1", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 150, "y": 60, "wires": [ [ "cdd4da71fa6a5970", "3cb3062cf062eed5", "1d5ffcc0a1dd435a", "95e53ee925a0bb06" ] ] }, { "id": "cdd4da71fa6a5970", "type": "http request", "z": "a06b3000d15dbefd", "name": "Gesamt", "method": "GET", "ret": "txt", "paytoqs": "ignore", "url": "http://192.168.2.15:8087/getPlainValue/solarviewdatareader.0.pvig.current", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [], "x": 360, "y": 60, "wires": [ [ "ac67fc95470991b9" ] ] }, { "id": "ac67fc95470991b9", "type": "function", "z": "a06b3000d15dbefd", "name": "Set topic", "func": "msg.topic = \"total\"\n\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 540, "y": 60, "wires": [ [ "cf770896b740f206" ] ] }, { "id": "91da76f1d0669029", "type": "function", "z": "a06b3000d15dbefd", "name": "Set topic", "func": "msg.topic = \"L1\"\n\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 540, "y": 120, "wires": [ [] ] }, { "id": "512a5cab6e008f21", "type": "function", "z": "a06b3000d15dbefd", "name": "Set topic", "func": "msg.topic = \"L2\"\n\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 540, "y": 180, "wires": [ [ "cf770896b740f206" ] ] }, { "id": "554dfd7ba5f6effa", "type": "function", "z": "a06b3000d15dbefd", "name": "Set topic", "func": "msg.topic = \"L3\"\n\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 540, "y": 240, "wires": [ [ "cf770896b740f206" ] ] }, { "id": "cf770896b740f206", "type": "join", "z": "a06b3000d15dbefd", "name": "", "mode": "custom", "build": "object", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n", "joinerType": "str", "accumulate": true, "timeout": "", "count": "4", "reduceRight": false, "reduceExp": "", "reduceInit": "", "reduceInitType": "", "reduceFixup": "", "x": 710, "y": 60, "wires": [ [ "9e51ff454671f833" ] ] }, { "id": "9e51ff454671f833", "type": "function", "z": "a06b3000d15dbefd", "name": "Create JSON", "func": "msg.payload = {\n \"pv\": {\n \"power\": msg.payload[\"total\"],\n \"L1\": {\n \"power\": msg.payload[\"L1\"]\n },\n \"L2\": {\n \"power\": msg.payload[\"L2\"]\n },\n \"L3\": {\n \"power\": msg.payload[\"L3\"]\n }\n }\n}\n\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 890, "y": 60, "wires": [ [ "471ed82353febcc2" ] ] }, { "id": "471ed82353febcc2", "type": "json", "z": "a06b3000d15dbefd", "name": "", "property": "payload", "action": "", "pretty": false, "x": 850, "y": 120, "wires": [ [ "8e44be37516623b7" ] ] }, { "id": "9b344c22b0d918b9", "type": "mqtt-broker", "name": "iobroker", "broker": "192.168.2.15", "port": "1884", "clientid": "", "autoConnect": true, "usetls": false, "protocolVersion": "4", "keepalive": "60", "cleansession": true, "birthTopic": "", "birthQos": "0", "birthPayload": "", "birthMsg": {}, "closeTopic": "", "closeQos": "0", "closePayload": "", "closeMsg": {}, "willTopic": "", "willQos": "0", "willPayload": "", "willMsg": {}, "userProps": "", "sessionExpiry": "" } ] ```
CharlieBerghammer commented 1 year ago

Vielen Dank Manuel , das hat mir, auch für mein Verständnis wirklich weitergeholfen. In dem Flow ist ein kleiner Fehler, denn die Verbindung von L1 "Set topic" zu "join" fehlte und damit ist nach "join" nichts rausgekommen. Sehe jetzt alle Daten :-). Habe jetzt nur noch ein Problem mit der grafischen Anzeige der Victron Console. Hier sehe ich nur den Gesamtwert und nicht die einzelnen Phasen. In der Geräteliste unter MQTT PV sind aber alle Phasen vorhanden. Habe ich hier in der config.ini noch etwas übersehen?

Console1 Console2

mr-manuel commented 1 year ago

Das ist richtig so. Wenn du alle Phasen sehen willst musst du die GuiMods installieren.