PV Inverter Plugin von mr-manuel

moin,

ich habe venus os 3,5 am laufen und möchte einen Solax Inverter einbinden, ich habe auch das plugin von mr-manuel installiert, nun stehe ich aber vor folgendem Problem: Mein Solax schreibt über tasmota direkt in den venus os eigenen mqtt broker und erzeugt dort auch sein eigenes Topic, worin alle nötigen Daten enthalten sind, allerdings scheint das Plugin ein anderes topic zu erwarten und kommt folglich nicht an die im json Format vorliegenden Daten, in Node Red lässt sich das auch nicht zurechtbiegen…eine Idee?

Ich verwende das Plugin auch um meine Bosswerk und meinen Solmate einzubinden. Über NodeRed verbinde ich mich zu meinem MQTT Broker und baue die Daten in NodeRed um, damit sie vom Script verarbeitet werden können. Da gibt es gute Anleitungen auf YouTube. https://meintechblog.de/ hat einiges zu dem Thema gemacht

Mit der Frage/Problem solltest du dich dann an diesen “mr-manuel” wenden.

Hi EmptySoft,
ja, vielen Dank, da habe ich das auch ursprünglich her! In Node Red kriege ich die Daten aus dem mqtt Broker auch als Payload zu fassen, aber der Flow (ebenfalls aus meintechblog abgeschaut und angepasst) will das nicht an das Plugin weiterleiten und eine Victron Instanz emulieren…darf ich mir deinen Flow mal ansehen? Der läuft einwandfrei?

Das ist mein Flow


und das der Formatierungsteil
node.status({fill:'green', shape: 'dot', text: ${msg.payload.Voltage} V, ${msg.payload.Current} A, ${msg.payload.Power} W, ${msg.payload.Energy} kWh`});

var message = {
pv: {
voltage: msg.payload.Voltage,
current: msg.payload.Current,
power: msg.payload.Power,
energy_forward: msg.payload.Energy,
}
};

return { payload: message };`

ich hoffe, das hilft Dir weiter

Danke dir! Leider werde ich daraus auch nicht schlau, ich sehe die Daten sauber einlaufen:
tele/tasmota_F95BEB/SENSOR : msg.payload : Object

object

Time: “2024-09-20T09:43:07”

ENERGY: object

TotalStartTime: “2024-08-24T21:24:02”

Total: 9.798

Yesterday: 0

Today: 0.3

Power: 332

Frequency: 50

Voltage: 232

Current: 1.5

SolarPower: 348

Pv1Voltage: 134

Pv1Current: 2.6

Pv1Power: 348

Temperature: 27

Runtime: 18303

Status: “arbeitet”

Error: 0

aber ich komme wohl mit der Syntax nicht klar und ein emulierter PV Inverter taucht auch nicht auf…möglicherweise ist das Plugin unter der aktuellen Version nicht lauffähig, habe mr-manuel auch schon mehrfach angeschrieben, aber da kommt leider nichts zurück.

moin,
Danke dir! Leider nicht, mit den funktionen komme ich nicht klar, da wirft er ständig Fehler…ich glaube das plugin läuft nicht richtig unter der aktuellen Venus Version. Der Autor des plugins antwortet leider nicht zu dem Problem

das plugin läuft bei mir unter VenusOS 3.41 einwandfrei.
Allerdings verfütter ich ihm die daten über ein perl-script über einen externen MQTT-server, in sachen NodeRed kann ich leider nix beitragen.

Also Du bekommst die Daten (bei meinem debug 8) noch nicht hin? Als Beispiel meine Solmate Voltage Funktion

node.status({fill:'green', shape: 'dot', text: `Voltage: ${msg.payload.voltage} V`});

msg.topic="Voltage";
msg.payload=msg.payload.voltage;

return msg;

Falls das dot noch passt, was kommt bei Dir raus (was bei mir Debug Solmate Output heisst)? Dort muss das Format stimmen, damit das Script arbeitet (sonst kommt einfach nichts). Bei mir ist es dort so formatiert
Bildschirmfoto_20240920_130923

Die Formatierung ist ja ähnlich, im Debug steht Voltage: undefined V

eigentlich sollte ja hier die aus dem Topic “extrahierte” Spannung dargestellt werden…vielleicht bin ich auch durch die Nachtdienstwoche übermüdet und sehe vor lauter Bäumen den Wald nicht;-)

Mit den ungültigen Wert, wird das Script halt nichts machen, somit siehst Du nichts. Poste mal einen Output vom Debug (auch von den vorigen Schritten), dann finden wir den Fehler sicher.

tail -n 100 -f /data/log/dbus-mqtt-pv/current | tai64nlocal

damit könntest Du am Venus sehen, was das Script so sagt (welches Script vom mr-manuel verwendest Du? Er hat da ja mehrere)

mit dem Konsolenbefehl gibt er folgendes aus:

2024-09-21 09:50:00.376924500 ERROR:root:Received JSON MQTT message does not include a pv object. Expected at least: {“pv”: {“power”: 0.0}"}

somit scheint wenigstens das plugin zu laufen, kriegt aber nix verwertbares am Eingang.Ich bin mit dem selbständigen schreiben von Flows noch nicht so gangsicher und handhabe das eher wie mit “LEGO” bauen indem ich mir bestehende Nodes einfach zu etwas funktionierendem zusammensetze…ich habe meinen Flow erstmal eingestampft und werde mit Hilfe des “meintechblog” und deinem Flow versuchen, die Daten Richtung Plugin zu bekommen. Ich finde das etwas umständlich, da ich ja mein mqtt Topic quasi “parse” um ein neues Topic für das plugin zu bauen, statt dem Plugin gleich den Pfad zum mqtt Topic zu verraten.
Auf jeden Fall schon mal vielen Dank für deine Hilfe bis hierher, das muss ja hinzukriegen sein!

ich habe mir gerade nochmal die config.ini des Plugins angesehen und da habe ich tatsächlich den Pfad zu meinem Solax Topic eingegeben, das könnte der Fehler sein, da das Plugin ja die aufbereiteten Daten erwartet die durch den Flow im mqtt out Node dort reingeschrieben werden…Ich hoffe ich habe das so verstanden…

So, es bleibt im debug nach der Funktion leider “payload:undefined” folglich bleibt der mqtt output auch leer, allerdings wird zumindest das enphase topic ausgegeben, das kann ich im mqtt Explorer schön erkennen…ich habe deine Voltage Funktion nun einfach mal übernommen, auch wenn ich den Inhalt nicht so recht verstehe, sinngemäß soll es aber wohl den Wert aus dem Topic übernehmen und als payload anzeigen und auch weitergeben…

Kannst Du einmal den DebugOutput der ersten beiden Debugs (aus meinem Screenshot) posten? Ich hänge Dir meinen Flow an, den kannst Du in einen neuen Flow importieren und an Dein System anpassen.

[
    {
        "id": "5be1c62d1f531358",
        "type": "tab",
        "label": "PV Solmate venus-os_dbus-mqtt-pv",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "20ba33fe091ffc4d",
        "type": "debug",
        "z": "5be1c62d1f531358",
        "name": "Debug Solmate output",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1200,
        "y": 160,
        "wires": []
    },
    {
        "id": "c99d1fecd0dcda45",
        "type": "join",
        "z": "5be1c62d1f531358",
        "name": "Solmate Join",
        "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": 640,
        "y": 340,
        "wires": [
            [
                "4c4c9eb36e6fbe0c",
                "f99086f7465ed07f"
            ]
        ]
    },
    {
        "id": "4c4c9eb36e6fbe0c",
        "type": "function",
        "z": "5be1c62d1f531358",
        "name": "Solmate Format",
        "func": "node.status({fill:'green', shape: 'dot', text: `${msg.payload.Voltage} V, ${msg.payload.Current} A, ${msg.payload.Power} W, ${msg.payload.Energy} kWh`});\n\nvar message = {\n    pv: {\n        voltage: msg.payload.Voltage,\n        current: msg.payload.Current,\n        power: msg.payload.Power,\n        energy_forward: msg.payload.Energy,\n    }\n};\n\nreturn { payload: message };",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 880,
        "y": 340,
        "wires": [
            [
                "20ba33fe091ffc4d",
                "ee07793c1625de4e"
            ]
        ]
    },
    {
        "id": "4c8e761b185c3131",
        "type": "debug",
        "z": "5be1c62d1f531358",
        "name": "Debug Solmate MQTT",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 420,
        "y": 160,
        "wires": []
    },
    {
        "id": "31aeede28bd02196",
        "type": "mqtt in",
        "z": "5be1c62d1f531358",
        "name": "Solmate",
        "topic": "shellies/shellypro1pm-30c6f780e6e8/status/switch:0",
        "qos": "2",
        "datatype": "auto-detect",
        "broker": "b7219642acb18fcb",
        "nl": false,
        "rap": true,
        "rh": 0,
        "inputs": 0,
        "x": 120,
        "y": 340,
        "wires": [
            [
                "8b8e6344232258a2",
                "a1b74b03c04ee3ea",
                "4c8e761b185c3131",
                "b78952526edfdb23",
                "7b9bba10483ca6b4"
            ]
        ]
    },
    {
        "id": "a1b74b03c04ee3ea",
        "type": "function",
        "z": "5be1c62d1f531358",
        "name": "Solmate Power",
        "func": "node.status({fill:'green', shape: 'dot', text: `Power: ${msg.payload.apower * -1} W`});\n\nmsg.topic=\"Power\";\nmsg.payload=msg.payload.apower * -1;\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 400,
        "y": 400,
        "wires": [
            [
                "c99d1fecd0dcda45",
                "b6bfaa5d76281ccf"
            ]
        ]
    },
    {
        "id": "8b8e6344232258a2",
        "type": "function",
        "z": "5be1c62d1f531358",
        "name": "Solmate Current",
        "func": "node.status({fill:'green', shape: 'dot', text: `Current: ${msg.payload.current} A`});\n\nmsg.topic=\"Current\";\nmsg.payload=msg.payload.current;\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 400,
        "y": 340,
        "wires": [
            [
                "c99d1fecd0dcda45",
                "b6bfaa5d76281ccf"
            ]
        ]
    },
    {
        "id": "b78952526edfdb23",
        "type": "function",
        "z": "5be1c62d1f531358",
        "name": "Solmate Voltage",
        "func": "node.status({fill:'green', shape: 'dot', text: `Voltage: ${msg.payload.voltage} V`});\n\nmsg.topic=\"Voltage\";\nmsg.payload=msg.payload.voltage;\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 400,
        "y": 280,
        "wires": [
            [
                "c99d1fecd0dcda45",
                "b6bfaa5d76281ccf"
            ]
        ]
    },
    {
        "id": "f99086f7465ed07f",
        "type": "debug",
        "z": "5be1c62d1f531358",
        "name": "Debug Solmate join",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 890,
        "y": 160,
        "wires": []
    },
    {
        "id": "b6bfaa5d76281ccf",
        "type": "debug",
        "z": "5be1c62d1f531358",
        "name": "debug 8",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 680,
        "y": 160,
        "wires": []
    },
    {
        "id": "7b9bba10483ca6b4",
        "type": "function",
        "z": "5be1c62d1f531358",
        "name": "Solmate Energy",
        "func": "node.status({fill:'green', shape: 'dot', text: `Energ total: ${msg.payload.aenergy.total} W`});\n\nmsg.topic=\"Energy\";\nmsg.payload=msg.payload.aenergy.total / 1000;\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 400,
        "y": 460,
        "wires": [
            [
                "c99d1fecd0dcda45"
            ]
        ]
    },
    {
        "id": "ee07793c1625de4e",
        "type": "mqtt out",
        "z": "5be1c62d1f531358",
        "name": "Victron PV Solmate",
        "topic": "enphase/envoy-s/meter",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "b2fd9079e92351a0",
        "x": 1190,
        "y": 340,
        "wires": []
    },
    {
        "id": "b7219642acb18fcb",
        "type": "mqtt-broker",
        "name": "EmptySoft MQTT",
        "broker": "intranet.emptysoft.net",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "autoUnsubscribe": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthRetain": "false",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closeRetain": "false",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willRetain": "false",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    },
    {
        "id": "b2fd9079e92351a0",
        "type": "mqtt-broker",
        "name": "Venos OS (Grid)",
        "broker": "localhost",
        "port": "1883",
        "clientid": "gr001",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "autoUnsubscribe": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthRetain": "false",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "device/gr001/Status",
        "closeQos": "0",
        "closeRetain": "false",
        "closePayload": "{ \"clientId\": \"gr001\",\"connected\" : 0, \"version\": \"V1.0\"}",
        "closeMsg": {},
        "willTopic": "device/gr001/Status",
        "willQos": "0",
        "willRetain": "false",
        "willPayload": "{ \"clientId\": \"gr001\",\"connected\" : 0, \"version\": \"V1.0\"}",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    }
]

P.S.: Kann man in diesem Forum keine privaten Nachrichten senden?

Das Script bekommt die mindestens erforderlichen Daten nicht
{“pv”: {“power”: 0.0}"}
deswegen macht es nicht weiter.

Neee, leider ist dieses Feature deaktiviert, zumindest für uns User, Mods dürfen…
Die Begründing finde ich für meinen Teil nicht wirklich schlüssig, aber es wird ja in Aussicht gestellt, sich dem Thema zukünfig nicht völlig zu verwehren.

Vielleicht startet man mal eine Umfrage diesbezüglich? :wink:

Leider bleibt es bei undefined…

…und im solmate output debug: pv:object

Aber was steht im Output vom 1. Debug? und vom 2. und vom 3.? Bitte alle posten, damit wir sehen, wo es falsch lauft. Ansonsten kann ich nur ins grüne raten…