Wie kann mit Victron Systemen das Solarspitzengesetz (60%) umgesetzt werden

Hallo @solarwolfi : Danke für deine Rückmeldung. Hier geht es nicht um eine Schuldzuweisung, dass man mit Victron nicht andere AC-Inveter steuern kann, sondern die Frage, was man machen muss, damit man mit einem Victron-System die Anforderung des Netz-Providers im Abnahmeprotokoll umgesetzt bekommt → Einspeisung ist auf 60% reduziert und kann durch den Nutzer nicht verändert werden.

Ja genau so etwas suche ich. Ich habe allerdings die Version 3,75 im Einsatz und kann diese Einstellungen über den Remotezugang nicht finden.

Leider lässt sich da kein individuelles Passwort setzen und da ist das Victron Standardpasswort drin.
(zumindest war es noch das letzte Mal so, als ich das getestet habe)

Zudem werden damit praktisch alle Einstellungen gesperrt, auch die, an die der Nutzer evtl doch mal ran muss.

Also wie schon oben geschrieben, hatte wir da, so weit ich weiß, noch keine Probleme und es wurde auch noch nie ein Nachweis verlangt.

REMOTE KONSOLE - Geräteliste - Einstellungen - Allgemeines

Das wäre mein Plan.

Naja, man kann da nicht viel falsch machen. Ich schalte den Shelly meines alten Balkonkraftwerks nicht, sondern hab’ den nur als “virtuellen PV-Inverter” per NodeRed eingebunden. Das war vor einigen Monaten mein erstes NodeRed/Javascript-Projekt, und das habe ich im laufenden Betrieb meines Victron Systems umgesetzt. Hier ist es:

[
    {
        "id": "9b8d5eacacb78531",
        "type": "tab",
        "label": "TomsBKW",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "c16a0bfd8dee5cea",
        "type": "victron-virtual",
        "z": "9b8d5eacacb78531",
        "name": "TomsBKW",
        "outputs": 1,
        "device": "pvinverter",
        "default_values": true,
        "battery_capacity": 25,
        "include_battery_temperature": false,
        "grid_nrofphases": 1,
        "include_motor_temp": false,
        "include_controller_temp": false,
        "include_coolant_temp": false,
        "include_motor_rpm": true,
        "include_motor_direction": true,
        "position": "1",
        "pvinverter_nrofphases": 1,
        "fluid_type": 0,
        "include_tank_battery": false,
        "include_tank_temperature": false,
        "tank_battery_voltage": 3.3,
        "tank_capacity": 0.2,
        "temperature_type": 2,
        "include_humidity": false,
        "include_pressure": false,
        "include_temp_battery": false,
        "temp_battery_voltage": 3.3,
        "x": 120,
        "y": 60,
        "wires": [
            []
        ]
    },
    {
        "id": "35275ec1f27f2af7",
        "type": "victron-output-custom",
        "z": "9b8d5eacacb78531",
        "service": "com.victronenergy.pvinverter/101",
        "path": "/Ac/L1/Power",
        "serviceObj": {
            "service": "com.victronenergy.pvinverter/101",
            "name": "TomsBKW (101)"
        },
        "pathObj": {
            "path": "/Ac/L1/Power",
            "name": "/Ac/L1/Power",
            "type": "number",
            "value": 11.3
        },
        "name": "",
        "onlyChanges": false,
        "outputs": 0,
        "x": 790,
        "y": 360,
        "wires": []
    },
    {
        "id": "6a8d240e49b53320",
        "type": "inject",
        "z": "9b8d5eacacb78531",
        "name": "permanent",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "2",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 150,
        "y": 240,
        "wires": [
            [
                "042cf6a11932a8be"
            ]
        ]
    },
    {
        "id": "ce2636d2240cf373",
        "type": "victron-output-custom",
        "z": "9b8d5eacacb78531",
        "service": "com.victronenergy.pvinverter/101",
        "path": "/Ac/L1/Voltage",
        "serviceObj": {
            "service": "com.victronenergy.pvinverter/101",
            "name": "TomsBKW (101)"
        },
        "pathObj": {
            "path": "/Ac/L1/Voltage",
            "name": "/Ac/L1/Voltage",
            "type": "number",
            "value": 0
        },
        "name": "",
        "onlyChanges": false,
        "outputs": 0,
        "x": 800,
        "y": 240,
        "wires": []
    },
    {
        "id": "a7bfe9166a69cb9e",
        "type": "victron-output-custom",
        "z": "9b8d5eacacb78531",
        "service": "com.victronenergy.pvinverter/101",
        "path": "/Ac/L1/Current",
        "serviceObj": {
            "service": "com.victronenergy.pvinverter/101",
            "name": "TomsBKW (101)"
        },
        "pathObj": {
            "path": "/Ac/L1/Current",
            "name": "/Ac/L1/Current",
            "type": "number",
            "value": 0
        },
        "name": "",
        "onlyChanges": false,
        "outputs": 0,
        "x": 800,
        "y": 300,
        "wires": []
    },
    {
        "id": "6a9257942e76f89f",
        "type": "victron-output-custom",
        "z": "9b8d5eacacb78531",
        "service": "com.victronenergy.pvinverter/101",
        "path": "/Ac/Power",
        "serviceObj": {
            "service": "com.victronenergy.pvinverter/101",
            "name": "TomsBKW (101)"
        },
        "pathObj": {
            "path": "/Ac/Power",
            "name": "/Ac/Power",
            "type": "number",
            "value": 0
        },
        "name": "",
        "onlyChanges": false,
        "outputs": 0,
        "x": 780,
        "y": 420,
        "wires": []
    },
    {
        "id": "e5b35642815ff4c2",
        "type": "victron-output-custom",
        "z": "9b8d5eacacb78531",
        "service": "com.victronenergy.pvinverter/101",
        "path": "/Ac/Energy/Forward",
        "serviceObj": {
            "service": "com.victronenergy.pvinverter/101",
            "name": "TomsBKW (101)"
        },
        "pathObj": {
            "path": "/Ac/Energy/Forward",
            "name": "/Ac/Energy/Forward",
            "type": "number",
            "value": 0.025317999999999303
        },
        "name": "",
        "onlyChanges": false,
        "outputs": 0,
        "conditionalMode": false,
        "outputTrue": "",
        "outputFalse": "",
        "debounce": "",
        "x": 810,
        "y": 480,
        "wires": []
    },
    {
        "id": "b53fdec136fc0d9b",
        "type": "inject",
        "z": "9b8d5eacacb78531",
        "name": "atMidNight",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "01 00 * * *",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 150,
        "y": 160,
        "wires": [
            [
                "712dd5e3c5be2f7a"
            ]
        ]
    },
    {
        "id": "905529d86a6c8c30",
        "type": "change",
        "z": "9b8d5eacacb78531",
        "name": "EnergyMidNight",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "payload.switch0.aenergy.total",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 480,
        "y": 160,
        "wires": [
            [
                "9ab0ab5738569f61"
            ]
        ]
    },
    {
        "id": "9ab0ab5738569f61",
        "type": "change",
        "z": "9b8d5eacacb78531",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "dailystart",
                "pt": "flow",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 670,
        "y": 160,
        "wires": [
            []
        ]
    },
    {
        "id": "042cf6a11932a8be",
        "type": "shelly-gen2",
        "z": "9b8d5eacacb78531",
        "hostname": "192.168.1.98",
        "description": "TomsBKW",
        "mode": "polling",
        "verbose": false,
        "server": "",
        "outputmode": "event",
        "uploadretryinterval": 5000,
        "pollinginterval": 5000,
        "pollstatus": false,
        "getstatusoncommand": true,
        "devicetype": "S3SW-001P16EU",
        "devicetypemustmatchexactly": true,
        "captureblutooth": false,
        "outputs": 1,
        "x": 310,
        "y": 240,
        "wires": [
            [
                "5132accc2b308517"
            ]
        ]
    },
    {
        "id": "712dd5e3c5be2f7a",
        "type": "shelly-gen2",
        "z": "9b8d5eacacb78531",
        "hostname": "192.168.1.98",
        "description": "TomsBKW",
        "mode": "polling",
        "verbose": false,
        "server": "",
        "outputmode": "event",
        "uploadretryinterval": 5000,
        "pollinginterval": 5000,
        "pollstatus": false,
        "getstatusoncommand": true,
        "devicetype": "S3SW-001P16EU",
        "devicetypemustmatchexactly": true,
        "captureblutooth": false,
        "outputs": 1,
        "x": 310,
        "y": 160,
        "wires": [
            [
                "905529d86a6c8c30"
            ]
        ]
    },
    {
        "id": "5132accc2b308517",
        "type": "function",
        "z": "9b8d5eacacb78531",
        "name": "Split BKW data",
        "func": "let voltage = msg.payload.switch0.voltage;\nlet current = msg.payload.switch0.current;\nlet power = Math.abs(msg.payload.switch0.apower);\nlet energy = msg.payload.switch0.aenergy.total;\n\nlet startvalue = flow.get('dailystart') || 0;\nenergy = (energy - startvalue) / 1000.0;\n\nglobal.set ('pv_inverter', power);\n\nreturn [\n    {payload: voltage},\n    {payload: current},\n    {payload: power},\n    {payload: energy}\n];",
        "outputs": 4,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 320,
        "y": 400,
        "wires": [
            [
                "9553977e9932e6f1"
            ],
            [
                "a0d07accd66352e6"
            ],
            [
                "83bd7b882b32efca"
            ],
            [
                "677c58173e46c816"
            ]
        ]
    },
    {
        "id": "677c58173e46c816",
        "type": "rbe",
        "z": "9b8d5eacacb78531",
        "name": "",
        "func": "deadband",
        "gap": "0.001",
        "start": "",
        "inout": "out",
        "septopics": false,
        "property": "payload",
        "topi": "topic",
        "x": 560,
        "y": 480,
        "wires": [
            [
                "e5b35642815ff4c2"
            ]
        ]
    },
    {
        "id": "83bd7b882b32efca",
        "type": "rbe",
        "z": "9b8d5eacacb78531",
        "name": "",
        "func": "deadband",
        "gap": "1",
        "start": "",
        "inout": "out",
        "septopics": false,
        "property": "payload",
        "topi": "topic",
        "x": 560,
        "y": 360,
        "wires": [
            [
                "6a9257942e76f89f",
                "35275ec1f27f2af7"
            ]
        ]
    },
    {
        "id": "a0d07accd66352e6",
        "type": "rbe",
        "z": "9b8d5eacacb78531",
        "name": "",
        "func": "deadband",
        "gap": "0.1",
        "start": "",
        "inout": "out",
        "septopics": false,
        "property": "payload",
        "topi": "topic",
        "x": 560,
        "y": 300,
        "wires": [
            [
                "a7bfe9166a69cb9e"
            ]
        ]
    },
    {
        "id": "9553977e9932e6f1",
        "type": "rbe",
        "z": "9b8d5eacacb78531",
        "name": "",
        "func": "deadband",
        "gap": "1",
        "start": "",
        "inout": "out",
        "septopics": false,
        "property": "payload",
        "topi": "topic",
        "x": 560,
        "y": 240,
        "wires": [
            [
                "ce2636d2240cf373"
            ]
        ]
    },
    {
        "id": "e878b25df3586218",
        "type": "global-config",
        "env": [],
        "modules": {
            "@victronenergy/node-red-contrib-victron": "1.6.64",
            "node-red-contrib-shelly": "11.7.5"
        }
    }
]

Danke - das ist jetzt hier - scheint aber auch nicht zu greifen wenn ich M_Lange richtig verstanden habe.

Danke - schau ich mir mal an. Muss mich aber erst mal schau machen - wie das mit den NoteRed so geht :roll_eyes:

Hallo RD, ich habe das bisher über NodeRed gelöst, die Max Einspeiseleistung wird über nodered abhängig von den 3 oder 4 Eingängen auf 0-30-60-100% geschrieben. Auf 60% eine Brücke rein und das Kabel zum Zählerschrank. Somit ist man auf die Steuerbox vorbereitet. Das ganze mit den 60% unterschreibt man auf dem IBN Formular. Soetwas wie eine Abnahme habe ich noch nie erlebt, wenn jemand fragen sollte ist es über „ 4 Eingänge eines HEMS gelöst“ was es im Prinzip auch ist. Das ganze kann man optimieren dass bei undefinierten Kontaktzuständen die Einspeisung aussetzt.

Wenn die Steuerbox dann mal kommen sollte ist eine absichtliche Manipulation sowieso ein Kinderspiel, da braucht es kein Passwort oder Programmierkenntnisse. Vielleicht sollte man einfach davon ausgehen dass die Betreiber gewollt sind das es funktioniert. Theoretisch kann der Netzbetreiber am ImSys kontrollieren ob eine Abregelung stattfindet und das ist auch völlig in Ordnung.

Das wird alles heißer gekocht als gegessen.

Achso…Ergänzend: das funktioniert natürlich nur wenn die AC WR via Modbus vom GX gesteuert werden können.

… eine Lösung ohne Netzanschluss halte ich für eine schlechte Idee. Das ist kaum zu schaffen.

Naja, ehrlicherweise muss man schon konstatieren, dass es von Anbeginn der Energiewende an völlig klar war, dass wir sehr viel mehr an EE-Erzeugungskapazität installieren müssen, als wir jemals an Last im Stromnetz haben. Wir wollen ja auch andere Energiebedarfe decken als nur den Strom. Und weil das schon immer klar war, war damit auch völlig klar, dass wir im Lauf der Energiewende an einen Punkt geraten, an dem man die Netzeinspeisung auch aus kleinen PV-Anlagen regulieren muss. Es geht aus simplen physikalischen Gründen nicht, dass jeder jederzeit so viel Strom ins Netz ballern darf, wie seine Anlage nur hergibt.

Weil diese jetzt durchgeführte Regulierung schon immer absehbar war, sollte also niemand überrascht sein. Dass es jetzt schon zu solchen absolut notwendigen Regulierungen kommt, dürfen wir vielmehr als großen Erfolg der Energiewende verstehen!

Deine Anlage wg dieser alternativlos notwendigen Regulierung auf eine echte Inselanlage umzustellen, wäre ein äußerst schlechtes Vorbild. Deine ins Netz gespeisten Überschüsse sind ja durchaus notwendig, um die Energiewende voran zu bringen.

Davon gehe ich auch aus. Dass das überhaupt zu einem Problem geworden ist, hat die deutsche Stromwirtschaft selbst verbaselt, weil sie die flächendeckende Einführung von Smartmetern geradezu torpediert hat.

Ja das ist eine ungünstige Übergangsphase, natürlich wäre es allen am liebsten irgendwo 4 Eingange anzuschließen und ein häckchen zu setzen aber da wo es nicht geht werden mMn in aller Regel auch Kompromisslösungen akzeptiert. Am besten nicht fragen sondern bestmöglich umsetzen.

So Node-Red ist installiert und aktiviert und der Shelly ist auch via Node-Red auslesbar:

Jetzt muss noch der Part “if Akku 100% → than AC-Inverter aus”.

Spannendes Thema :upside_down_face:

Du könntest ihn wegschalten wenn deine Einspeisung 4,7kw übersteigt, das wird deutlich seltener passieren. Und wieder einschalten wenn soc unter x.

Wenn Du aber etwas tüftelst bekommst Du vielleicht eine Modbusverbindung zum GX hin, was ist das denn für ein Inverter? Vielleicht (oder wahrscheinlich) könntest Du auch ein Relais vom GX verwenden um einen DI am Inverter anzusteuern und den Inverter drosseln

Es ist ein APsystems DS3-M AC-Inverter. Der sehr effektiv, preiswert, aber leider “dumm” ist.

@TomBerger : Wie bekomme ich denn den Shelly (1PM Gen 4) in Node-Red eingebunden, das ich den an oder ausmachen kann?

Derzeit bekomme ich ihn entweder als AC-Load oder als PV Inverter eingebunden. Aber wie schaltet man den ???

Aber bestimmt mehrere aufgeteilt auf die Phasen? Kannst du nicht einfach nur 1/3 wegschalten?

Du musst den passenden Shelly Node mit der korrekten IP verwenden. Da gibt es dann ein “switch” Objekt, und meine Vermutung ist, dass man das dann schalten kann. Ausprobiert habe ich das Schalten noch nie.

Danke - zu dem Schritt werde ich heute nicht mehr kommen - ggf etwas für morgen :roll_eyes:

Was schon geht ist, dass ich den Shelly ausgelesen bekomme und im Cerbo GX angezeigt bekomme als PV-Inverter (auch wenn derzeit nur ein Lüfter im Testaufbau dran hängt und der keinen Strom liefert sondern frißt).

Des weiteren wird überprüft, ob der Akku ein gewisses Level hat und ob der AC-Inverter eine bestimmte Leistung liefert. Sind beide Konditionen erfüllt, soll der Shelly den AC-Inverter vom Netz nehmen.

Das wären dann bei mir 4 von 8 AC-Invertern die ich vom Netz nehmen müsste - also halbe Leistung dann nur noch bis der Akku auf 98% runter ist.

Dann schauen wir mal, ob ich den Shelly überhaupt über Node-Red abgeschaltet bekomme :joy:

Die einzige Sorge, die ich dabei hätte, wäre die, ob die PV-Inverter solche harten Abschaltungen dauerhaft schadlos überstehen. Ich kann mir gut vorstellen, dass die Kondensatoren in der Elektronik das nicht lange mitmachen.

Wg ständiger Wiederholung: das Programmiersystem heisst “Node Red”. Node bedeutet “Knoten”, und das Programmieren funktioniert eben hauptsächlich durch Verbindungen zwischen passend platzierten Knoten. Das System wurde übrigens von IBM entwickelt und frei gegeben, ist also ganz und gar nicht auf Victron beschränkt.

Danke für den Hinweis - ich hoffe ich habe nun alle Stellen entsprechend korrigiert. Einmal falsch - immer falsch :face_with_peeking_eye: