Über openDTU das Hoymiles-Limit vom Victron Cerbo GX mit NodeRed ansteuern?

Moin, da hier ja die verschiedensten Fakultäten versammelt sind, wende ich mich mal mit der Bitte um Hilfe an euch:

Mit meiner Hausautomatisierung (IPS auf einem Windows-PC) regel ich meine PV-Batterienladung/Entladung, das läuft im Großen u. Ganzen sehr stabil.

-Tagsüber wird die Batterie von der PV mit einem Victron MPPT-Laderegler (Kontrolle MPPT/Batterie durch Victron Cerbo GX / Pylontech-Batt.-BMS) bis zu einem Batterie-SoC von 89% geladen, ist ein weiterer Erhöhung des SoC (Überschuß) vorhanden, wird über openDTU und angeschlossenem Hoymiles-Wechselrichter die Leistung ins Netzt geleitet, mit einer Hysterese von 4% SoC.

-Die Entladung erfolgt nachts indem ich über openDTU und dort angeschlossenem Hoymiles-Wechselrichter die Batterie wieder bis auf einen SoC < 15% ins Hausnetz entlade.

Versagt nun die übergeordnete Hausautomatisierungssteuerung wird die Batterie zwar durch das BMS geschützt, aber weiter bis auf 0% entladen und abgeschaltet.

Dies möchte ich zur Schonung der Batterie und Aufrechterhaltung der Funktion des Cerbo GX durch Abschaltung der Entladung ab einem SoC<10 verhindern.

Dazu möchte ich auf dem Cerbo GX (dort läuft auch NodeRed) den SoC überwachen und über ein http-request-Node die openDTU/Hoymiles auf WR-Output-Limit 0% einstellen.

Als zweiten Schritt, evtl. auch über eine vor dem Windows-PC vorgeschalteten Shelly-Plug, den PC ausschalten u. danach einschalten um die Hausautomatisierung wieder zu aktivieren. Nun sitze ich schon einige Zeit um in NodeRed die Ansteuerung des WR-Output-Limit der openDTU hin zu bekommen, leider krieg ich es nicht zum Laufen.

Ansprechen mit cURL unter Windows auf dem PC klappt, das Limit kann ich einstellen, d.h. user/password der openDTU und Seriennummer des Hoymiles stimmen. Ich habe dazu folgendes cURL verwendet:

curl --include --request POST --data "data={'serial':'114190xxxxx', 'limit_type':1, 'limit_value':99}" --user "admin:openDTU42" http://192.168.178.20/api/limit/config

Setze ich nun (zusammengesucht aus dem inet, da ich von NodeRed wenig Ahnung habe) die cURL Abfolge in NodeRed um, mit anschließendem http-request, erhalte ich nur ein: „warning , no values found, code 1002“ (d.h. das WR-Limit wird nicht verändert).

Hier meine Eingaben in der function-Node von NodeRed (natürlich mit den richtigen Adressen) :

msg.method = "POST";

msg.url = 'http://192.168.178.20/api/limit/config';

msg.headers = {

'Authorization': 'Basic '+(Buffer.from('admin:openDTU42')).toString('base64')

};

msg.payload = {

'serial': '114190xxxxxx',

'limit_type': 1,

'limit_value': 55

};

return msg;

Setze ich falsche Werte in die 'Authorization' erhalte ich überhaupt keine Rückmeldung, also scheint das ja hoffentlich schon mal zu stimmen. Wie gesagt kenne ich mich leider mit NodeRed nicht so aus, um den Fehler einzukreisen.

Hat jemand eine Idee oder das schon mal in NodeRed so umgesetzt? Für eure Hilfe wäre ich dankbar.

Gruß fdmarder

When POSTing config data to OpenDTU, always send all settings back, even if only one setting was changed. Sending single settings is not supported and you will receive a response {"type":"warning","message":"Values are missing!"}

@und-mehr ja, das hatte ich auch schon in der Doku von git openDTU gefunden, aber daran liegt es nicht.

Wollte die Lösung hier eingeben , wird aber von der Forums-SW blockiert.

dann musst du in die Qeulle gucken:

void WebApiLimitClass::onLimitPost(AsyncWebServerRequest* request)
{
if (!WebApi.checkCredentials(request)) {
return;
}
AsyncJsonResponse* response = new AsyncJsonResponse();
JsonObject retMsg = response->getRoot();
retMsg["type"] = "warning";
if (!request->hasParam("data", true)) {
retMsg["message"] = "No values found!";
retMsg["code"] = WebApiError::GenericNoValueFound;

request->hasParam("data", true) ist nicht true
oder versuch es mit mqtt

Ich hatte nur Erfolg mittels MQTT zwischen Node-Red und OpenDTU. Am besten mit dem SetPersistance-Parameter. Ist ausreichend in Github dokumentiert.

schau mal unter https://github.com/tbnobody/OpenDTU/discussions/1925

dort hab ich die Umsetzung mit http-request beschrieben.

(Kann ich hier leider nicht als Antwort hinzufügen)

in dem Flow4 in der Diskussion, sind ausser der ser nr und der ip noch mehr Sachen zu ändern, und was muss ich dort ändern, wenn ich 2 Hoimiles wr habe?
habe bisher die ip der dtu und die ser nr geändert , aber bekomme nicht die antwort, welche unten angegeben ist?!
Gruß Ralf

Hallo, hier ist die Lösung per NodeRed http request:

[
    {
        "id": "550ff65f05ef0bf3",
        "type": "tab",
        "label": "Nulleinspeisung",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "0ba9ccc7df75dd77",
        "type": "function",
        "z": "550ff65f05ef0bf3",
        "name": "function 10/set limit",
        "func": "//\nvar inData = msg.payload;\nvar outData = inData.replace('[', '').replace(']', '');\n\nvar URLopenDTU = \"http://192.168.XXX.XXX\";\n\nvar NewMsg={};\nNewMsg.method = \"POST\";\nNewMsg.url = URLopenDTU + '/api/limit/config';\n\n\nNewMsg.headers = {\n    'Authorization': 'Basic '+(Buffer.from('Benutzer:PW')).toString('base64'),\n    \"Content-Type\": \"application/x-www-form-urlencoded\"\n}\n\nNewMsg.payload = 'data=' + outData;\n\n//.payload = {serial:114XXXXXX, limit_type:1, limit_value:88\n\nreturn NewMsg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 730,
        "y": 260,
        "wires": [
            [
                "09798895a1313e08"
            ]
        ]
    },
    {
        "id": "09798895a1313e08",
        "type": "http request",
        "z": "550ff65f05ef0bf3",
        "name": "",
        "method": "use",
        "ret": "txt",
        "paytoqs": "ignore",
        "url": "",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 910,
        "y": 260,
        "wires": [
            [
                "18d6074ca5c3f9c3"
            ]
        ]
    },
    {
        "id": "18d6074ca5c3f9c3",
        "type": "debug",
        "z": "550ff65f05ef0bf3",
        "name": "debug 31",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 1060,
        "y": 260,
        "wires": []
    },
    {
        "id": "33c63d5f3b48b97c",
        "type": "function",
        "z": "550ff65f05ef0bf3",
        "name": "function 11/snr,limit-setting",
        "func": "var Hoymiles_SNR = \"116XXXXX\";\nvar Hoymiles_Limit = msg.payload;\n\nmsg.payload=[{serial:Hoymiles_SNR,\n            limit_type:1,\n            limit_value:Hoymiles_Limit}];\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 380,
        "y": 160,
        "wires": [
            [
                "0883d2ed62bd19da"
            ]
        ]
    },
    {
        "id": "0883d2ed62bd19da",
        "type": "json",
        "z": "550ff65f05ef0bf3",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 570,
        "y": 260,
        "wires": [
            [
                "0ba9ccc7df75dd77"
            ]
        ]
    },
    {
        "id": "dc4dc2cdb362c02b",
        "type": "comment",
        "z": "550ff65f05ef0bf3",
        "name": "setzen des Hoymiles-Limit über die openDTU",
        "info": "",
        "x": 250,
        "y": 40,
        "wires": []
    },
    {
        "id": "a2e1525603151aed",
        "type": "victron-input-battery",
        "z": "550ff65f05ef0bf3",
        "service": "com.victronenergy.battery/512",
        "path": "/Soc",
        "serviceObj": {
            "service": "com.victronenergy.battery/512",
            "name": "Pylontech battery"
        },
        "pathObj": {
            "path": "/Soc",
            "type": "float",
            "name": "State of charge (%)"
        },
        "name": "SOC",
        "onlyChanges": false,
        "roundValues": "0",
        "x": 70,
        "y": 420,
        "wires": [
            [
                "52fbb70a8eedae13",
                "5794626a6eca3662"
            ]
        ]
    },
    {
        "id": "52fbb70a8eedae13",
        "type": "change",
        "z": "550ff65f05ef0bf3",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "SOC",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 240,
        "y": 420,
        "wires": [
            [
                "ea9e1490badfc249"
            ]
        ]
    },
    {
        "id": "066ff3abde622c32",
        "type": "inject",
        "z": "550ff65f05ef0bf3",
        "name": "Abfrage Status",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 160,
        "y": 980,
        "wires": [
            [
                "5ce9c2ca9acf943b"
            ]
        ]
    },
    {
        "id": "5ce9c2ca9acf943b",
        "type": "http request",
        "z": "550ff65f05ef0bf3",
        "name": "",
        "method": "GET",
        "ret": "txt",
        "paytoqs": "ignore",
        "url": "http://192.168.XXX.XXX/api/limit/status",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 330,
        "y": 980,
        "wires": [
            [
                "f234030fefafb3b2"
            ]
        ]
    },
    {
        "id": "f234030fefafb3b2",
        "type": "debug",
        "z": "550ff65f05ef0bf3",
        "name": "debug 75",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 500,
        "y": 980,
        "wires": []
    },
    {
        "id": "a62074643064cca6",
        "type": "comment",
        "z": "550ff65f05ef0bf3",
        "name": "setzen des Hoymiles-Limit HM1500_OG",
        "info": "",
        "x": 230,
        "y": 100,
        "wires": []
    },
    {
        "id": "fae0d0e2d21d1dfc",
        "type": "function",
        "z": "550ff65f05ef0bf3",
        "name": "function 11/snr,limit-setting",
        "func": "var Hoymiles_SNR = \"114XXXX\";\nvar Hoymiles_Limit = msg.payload;\n\nmsg.payload=[{serial:Hoymiles_SNR,\n            limit_type:1,\n            limit_value:Hoymiles_Limit}];\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 200,
        "y": 280,
        "wires": [
            [
                "0883d2ed62bd19da"
            ]
        ]
    },
    {
        "id": "e5162d290937acd9",
        "type": "comment",
        "z": "550ff65f05ef0bf3",
        "name": "setzen des Hoymiles-Limit HM800_OG",
        "info": "",
        "x": 230,
        "y": 240,
        "wires": []
    },
    {
        "id": "ea9e1490badfc249",
        "type": "hysteresis",
        "z": "550ff65f05ef0bf3",
        "name": "",
        "ThresholdType": "fixed",
        "ThresholdRising": "95",
        "ThresholdFalling": "97",
        "TopicThreshold": "",
        "TopicCurrent": "SOC",
        "ThresholdDeltaRising": "",
        "ThresholdDeltaFalling": "",
        "InitialMessage": true,
        "OutRisingType": "bool",
        "OutRisingValue": "true",
        "OutFallingType": "bool",
        "OutFallingValue": "false",
        "OutTopicType": "top",
        "OutTopicValue": "",
        "DynRaiseError": false,
        "x": 400,
        "y": 420,
        "wires": [
            [
                "769768ba5055664d"
            ]
        ]
    },
    {
        "id": "16e00cb7e56afcb2",
        "type": "victron-input-pvinverter",
        "z": "550ff65f05ef0bf3",
        "service": "com.victronenergy.pvinverter/34",
        "path": "/Ac/Power",
        "serviceObj": {
            "service": "com.victronenergy.pvinverter/34",
            "name": "HM800_OG"
        },
        "pathObj": {
            "path": "/Ac/Power",
            "type": "float",
            "name": "Total Power (W)"
        },
        "name": "",
        "onlyChanges": true,
        "x": 180,
        "y": 820,
        "wires": [
            [
                "a41c19232e186b79",
                "31e6f3a23ef8fe40"
            ]
        ]
    },
    {
        "id": "6ac84814d9f7bb8d",
        "type": "victron-input-pvinverter",
        "z": "550ff65f05ef0bf3",
        "service": "com.victronenergy.pvinverter/35",
        "path": "/Ac/Power",
        "serviceObj": {
            "service": "com.victronenergy.pvinverter/35",
            "name": "HM1500_OG"
        },
        "pathObj": {
            "path": "/Ac/Power",
            "type": "float",
            "name": "Total Power (W)"
        },
        "name": "",
        "onlyChanges": true,
        "x": 190,
        "y": 900,
        "wires": [
            [
                "d34799375ff1e209",
                "31e6f3a23ef8fe40"
            ]
        ]
    },
    {
        "id": "2295daf29bd4836d",
        "type": "inject",
        "z": "550ff65f05ef0bf3",
        "name": "Manuell auslösen",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 220,
        "y": 580,
        "wires": [
            [
                "6ea43d27acfeb5ab",
                "9aaea2111b36a9fe"
            ]
        ]
    },
    {
        "id": "a3067c52fbc897f5",
        "type": "http request",
        "z": "550ff65f05ef0bf3",
        "name": "",
        "method": "use",
        "ret": "txt",
        "paytoqs": "ignore",
        "url": "",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 910,
        "y": 680,
        "wires": [
            [
                "8043fd14d0aeabd0"
            ]
        ]
    },
    {
        "id": "8043fd14d0aeabd0",
        "type": "debug",
        "z": "550ff65f05ef0bf3",
        "name": "debug 76",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1080,
        "y": 680,
        "wires": []
    },
    {
        "id": "d9fe8ad839437d07",
        "type": "function",
        "z": "550ff65f05ef0bf3",
        "name": "function 10/set limit",
        "func": "//\nvar inData = msg.payload;\nvar outData = inData.replace('[', '').replace(']', '');\n\nvar URLopenDTU = \"http://192.168.XXX.XXX\";\n\nvar NewMsg={};\nNewMsg.method = \"POST\";\nNewMsg.url = URLopenDTU + '/api/power/config';\n\n\nNewMsg.headers = {\n    'Authorization': 'Basic '+(Buffer.from('Benutzer:PW')).toString('base64'),\n    \"Content-Type\": \"application/x-www-form-urlencoded\"\n}\n\nNewMsg.payload = 'data=' + outData;\n\n//.payload = {serial:114XXX, limit_type:1, limit_value:88\n\nreturn NewMsg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 730,
        "y": 680,
        "wires": [
            [
                "a3067c52fbc897f5"
            ]
        ]
    },
    {
        "id": "94dbbfdebdae17d6",
        "type": "function",
        "z": "550ff65f05ef0bf3",
        "name": "function 11/snr,limit-setting",
        "func": "var Hoymiles_SNR = \"1161XXXX\";\n\nmsg.payload=[{serial:Hoymiles_SNR,\n            restart:true}];\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 360,
        "y": 660,
        "wires": [
            [
                "fe7654e1e3ca0aba"
            ]
        ]
    },
    {
        "id": "fe7654e1e3ca0aba",
        "type": "json",
        "z": "550ff65f05ef0bf3",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 570,
        "y": 680,
        "wires": [
            [
                "d9fe8ad839437d07"
            ]
        ]
    },
    {
        "id": "a41c19232e186b79",
        "type": "change",
        "z": "550ff65f05ef0bf3",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "HM800",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 420,
        "y": 820,
        "wires": [
            [
                "16c615bea3f906b1"
            ]
        ]
    },
    {
        "id": "d34799375ff1e209",
        "type": "change",
        "z": "550ff65f05ef0bf3",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "HM1500",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 420,
        "y": 900,
        "wires": [
            [
                "16c615bea3f906b1"
            ]
        ]
    },
    {
        "id": "f78bc873d677f5b8",
        "type": "function",
        "z": "550ff65f05ef0bf3",
        "name": "HM_Summe",
        "func": "var HM800 = msg.payload['HM800'];\nvar HM1500 = msg.payload['HM1500'];\nvar summe = 99999;\n\nsumme = HM800 + HM1500;\nmsg.topic = 'HM_Summe';\nmsg.payload = summe;\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 730,
        "y": 860,
        "wires": [
            [
                "947e9d51b4d0e733"
            ]
        ]
    },
    {
        "id": "947e9d51b4d0e733",
        "type": "debug",
        "z": "550ff65f05ef0bf3",
        "name": "debug 78",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 900,
        "y": 860,
        "wires": []
    },
    {
        "id": "16c615bea3f906b1",
        "type": "join",
        "z": "550ff65f05ef0bf3",
        "name": "",
        "mode": "custom",
        "build": "object",
        "property": "payload",
        "propertyType": "msg",
        "key": "topic",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": true,
        "timeout": "",
        "count": "2",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 590,
        "y": 860,
        "wires": [
            [
                "f78bc873d677f5b8"
            ]
        ]
    },
    {
        "id": "cc36198118411da1",
        "type": "delay",
        "z": "550ff65f05ef0bf3",
        "name": "",
        "pauseType": "delay",
        "timeout": "5",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "allowrate": false,
        "outputs": 1,
        "x": 160,
        "y": 160,
        "wires": [
            [
                "33c63d5f3b48b97c"
            ]
        ]
    },
    {
        "id": "6ea43d27acfeb5ab",
        "type": "delay",
        "z": "550ff65f05ef0bf3",
        "name": "",
        "pauseType": "delay",
        "timeout": "10",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "allowrate": false,
        "outputs": 1,
        "x": 130,
        "y": 660,
        "wires": [
            [
                "94dbbfdebdae17d6"
            ]
        ]
    },
    {
        "id": "5c981916b7435167",
        "type": "function",
        "z": "550ff65f05ef0bf3",
        "name": "function 11/snr,limit-setting",
        "func": "var Hoymiles_SNR = \"114XXXX\";\n\nmsg.payload=[{serial:Hoymiles_SNR,\n            restart:true}];\n\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 360,
        "y": 720,
        "wires": [
            [
                "fe7654e1e3ca0aba"
            ]
        ]
    },
    {
        "id": "9aaea2111b36a9fe",
        "type": "delay",
        "z": "550ff65f05ef0bf3",
        "name": "",
        "pauseType": "delay",
        "timeout": "15",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "allowrate": false,
        "outputs": 1,
        "x": 130,
        "y": 720,
        "wires": [
            [
                "5c981916b7435167"
            ]
        ]
    },
    {
        "id": "b13bb38936129d9c",
        "type": "comment",
        "z": "550ff65f05ef0bf3",
        "name": "Wechselrichter neu starten nach Änderung",
        "info": "",
        "x": 200,
        "y": 540,
        "wires": []
    },
    {
        "id": "ef0233d4cd3c4d49",
        "type": "comment",
        "z": "550ff65f05ef0bf3",
        "name": "Wechselrichter Summen",
        "info": "",
        "x": 170,
        "y": 780,
        "wires": []
    },
    {
        "id": "769768ba5055664d",
        "type": "switch",
        "z": "550ff65f05ef0bf3",
        "name": "true_false",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "true"
            },
            {
                "t": "false"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 560,
        "y": 420,
        "wires": [
            [
                "292c78e623057893"
            ],
            [
                "42313bba97428ef9"
            ]
        ]
    },
    {
        "id": "42313bba97428ef9",
        "type": "change",
        "z": "550ff65f05ef0bf3",
        "name": "100%",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "100",
                "tot": "num"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 710,
        "y": 440,
        "wires": [
            [
                "c47813a9c9cdebe1"
            ]
        ]
    },
    {
        "id": "5794626a6eca3662",
        "type": "ui-chart",
        "z": "550ff65f05ef0bf3",
        "group": "67d47c41b5deede7",
        "name": "SOC",
        "label": "SOC",
        "order": 4,
        "chartType": "line",
        "category": "topic",
        "categoryType": "msg",
        "xAxisLabel": "",
        "xAxisProperty": "",
        "xAxisPropertyType": "timestamp",
        "xAxisType": "time",
        "xAxisFormat": "",
        "xAxisFormatType": "auto",
        "xmin": "",
        "xmax": "",
        "yAxisLabel": "",
        "yAxisProperty": "payload",
        "yAxisPropertyType": "msg",
        "ymin": "",
        "ymax": "",
        "bins": 10,
        "action": "append",
        "stackSeries": false,
        "pointShape": "circle",
        "pointRadius": 4,
        "showLegend": true,
        "removeOlder": 1,
        "removeOlderUnit": "3600",
        "removeOlderPoints": "",
        "colors": [
            "#0095ff",
            "#ff0000",
            "#ff7f0e",
            "#2ca02c",
            "#a347e1",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "textColor": [
            "#666666"
        ],
        "textColorDefault": true,
        "gridColor": [
            "#e5e5e5"
        ],
        "gridColorDefault": true,
        "width": 6,
        "height": 8,
        "className": "",
        "interpolation": "linear",
        "x": 210,
        "y": 460,
        "wires": [
            []
        ]
    },
    {
        "id": "f4e8a1b8151aeeba",
        "type": "ui-text",
        "z": "550ff65f05ef0bf3",
        "group": "17e64c2ae1f10395",
        "order": 2,
        "width": 0,
        "height": 0,
        "name": "Limit Anzeige",
        "label": "Aktuelles Limit PV WR",
        "format": "{{msg.payload}}",
        "layout": "row-spread",
        "style": false,
        "font": "",
        "fontSize": 16,
        "color": "#717171",
        "wrapText": false,
        "className": "",
        "x": 1090,
        "y": 400,
        "wires": []
    },
    {
        "id": "292c78e623057893",
        "type": "change",
        "z": "550ff65f05ef0bf3",
        "name": "20%",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "20",
                "tot": "num"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 710,
        "y": 380,
        "wires": [
            [
                "c47813a9c9cdebe1"
            ]
        ]
    },
    {
        "id": "c47813a9c9cdebe1",
        "type": "ui-slider",
        "z": "550ff65f05ef0bf3",
        "group": "17e64c2ae1f10395",
        "name": "Variable Limit",
        "label": "Limit PV WR",
        "tooltip": "",
        "order": 0,
        "width": 0,
        "height": 0,
        "passthru": true,
        "outs": "end",
        "topic": "payload",
        "topicType": "msg",
        "thumbLabel": "true",
        "showTicks": "always",
        "min": 0,
        "max": "100",
        "step": "5",
        "className": "",
        "iconPrepend": "",
        "iconAppend": "",
        "color": "",
        "colorTrack": "",
        "colorThumb": "",
        "showTextField": false,
        "x": 880,
        "y": 400,
        "wires": [
            [
                "f4e8a1b8151aeeba",
                "0be6805b80528996"
            ]
        ]
    },
    {
        "id": "31e6f3a23ef8fe40",
        "type": "ui-chart",
        "z": "550ff65f05ef0bf3",
        "group": "67d47c41b5deede7",
        "name": "PV Leistung",
        "label": "PV Leistung",
        "order": 4,
        "chartType": "line",
        "category": "topic",
        "categoryType": "msg",
        "xAxisLabel": "",
        "xAxisProperty": "",
        "xAxisPropertyType": "timestamp",
        "xAxisType": "time",
        "xAxisFormat": "",
        "xAxisFormatType": "auto",
        "xmin": "",
        "xmax": "",
        "yAxisLabel": "",
        "yAxisProperty": "payload",
        "yAxisPropertyType": "msg",
        "ymin": "",
        "ymax": "",
        "bins": 10,
        "action": "append",
        "stackSeries": false,
        "pointShape": "circle",
        "pointRadius": 4,
        "showLegend": true,
        "removeOlder": 1,
        "removeOlderUnit": "3600",
        "removeOlderPoints": "",
        "colors": [
            "#0095ff",
            "#ff0000",
            "#ff7f0e",
            "#2ca02c",
            "#a347e1",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "textColor": [
            "#666666"
        ],
        "textColorDefault": true,
        "gridColor": [
            "#e5e5e5"
        ],
        "gridColorDefault": true,
        "width": 6,
        "height": 8,
        "className": "",
        "interpolation": "linear",
        "x": 410,
        "y": 860,
        "wires": [
            []
        ]
    },
    {
        "id": "0be6805b80528996",
        "type": "link out",
        "z": "550ff65f05ef0bf3",
        "name": "link out 18",
        "mode": "link",
        "links": [
            "165c1b7dc6e58ecb",
            "802ec6a9fee2d989"
        ],
        "x": 1035,
        "y": 360,
        "wires": []
    },
    {
        "id": "165c1b7dc6e58ecb",
        "type": "link in",
        "z": "550ff65f05ef0bf3",
        "name": "link in 30",
        "links": [
            "0be6805b80528996"
        ],
        "x": 45,
        "y": 200,
        "wires": [
            [
                "cc36198118411da1",
                "fae0d0e2d21d1dfc"
            ]
        ]
    },
    {
        "id": "802ec6a9fee2d989",
        "type": "link in",
        "z": "550ff65f05ef0bf3",
        "name": "link in 31",
        "links": [
            "0be6805b80528996"
        ],
        "x": 65,
        "y": 600,
        "wires": [
            [
                "6ea43d27acfeb5ab",
                "9aaea2111b36a9fe"
            ]
        ]
    },
    {
        "id": "67d47c41b5deede7",
        "type": "ui-group",
        "name": "Status",
        "page": "4ae927567d652ecd",
        "width": "6",
        "height": "1",
        "order": 1,
        "showTitle": true,
        "className": "",
        "visible": "true",
        "disabled": "false",
        "groupType": "default"
    },
    {
        "id": "17e64c2ae1f10395",
        "type": "ui-group",
        "name": "PV Steuerung",
        "page": "4ae927567d652ecd",
        "width": "6",
        "height": "1",
        "order": -1,
        "showTitle": true,
        "className": "",
        "visible": "true",
        "disabled": "false",
        "groupType": "default"
    },
    {
        "id": "4ae927567d652ecd",
        "type": "ui-page",
        "name": "Page 1",
        "ui": "19b2e30c247df37a",
        "path": "/page1",
        "icon": "home",
        "layout": "grid",
        "theme": "483129d71a0645d7",
        "breakpoints": [
            {
                "name": "Default",
                "px": "0",
                "cols": "3"
            },
            {
                "name": "Tablet",
                "px": "576",
                "cols": "6"
            },
            {
                "name": "Small Desktop",
                "px": "768",
                "cols": "9"
            },
            {
                "name": "Desktop",
                "px": "1024",
                "cols": "12"
            }
        ],
        "order": 1,
        "className": "",
        "visible": true,
        "disabled": false
    },
    {
        "id": "19b2e30c247df37a",
        "type": "ui-base",
        "name": "My Dashboard",
        "path": "/dashboard",
        "appIcon": "",
        "includeClientData": true,
        "acceptsClientConfig": [
            "ui-notification",
            "ui-control"
        ],
        "showPathInSidebar": false,
        "headerContent": "page",
        "navigationStyle": "default",
        "titleBarStyle": "default",
        "showReconnectNotification": true,
        "notificationDisplayTime": "1",
        "showDisconnectNotification": true
    },
    {
        "id": "483129d71a0645d7",
        "type": "ui-theme",
        "name": "Default Theme",
        "colors": {
            "surface": "#ffffff",
            "primary": "#0094CE",
            "bgPage": "#eeeeee",
            "groupBg": "#ffffff",
            "groupOutline": "#cccccc"
        },
        "sizes": {
            "density": "default",
            "pagePadding": "12px",
            "groupGap": "12px",
            "groupBorderRadius": "4px",
            "widgetGap": "12px"
        }
    }
]

Es beinhaltet eine Hysterese und ein Dashboard um das Limit zu ändern. Das wird in deiner Installation fehlen und muss nachinstalliert oder entfernt werden. Die IP der DTU, Seriennummern und Benutzerdaten müssen geändert werden.

Liebe Grüße
Marcel

Hallo, wenn ich das versuche zu importieren, dann kommt der fehler:

davon stand auch zuanfang etwas mit qote und so das hab ich gelöscht, dann kam dieser, aber wo ist reihe 1135??

Benutzt das kopier Symbol im Codeblock. Dann sollte es klappen, habs selbst ausprobiert.

mit kopieren geht, aber nu hat er einpaar funktionen die er nicht kennt, kannst mir sagen was ich da nach installieren muß?

wenn er die nicht kennt, nimmt er alle flows off

man, lesen muss man können, grins

mit was hast du die hysterese geschrieben?

hab es soweit zum laufen bekommen.
welches value muss ich angeben statt hoymiles,limit wenn ich ihn ausschalten will?

wofür dient der neustart nach änderung?
solang der an ist geht er nach ablauf der zeit immer wieder auf 100%
wenn ich ihn aus mach, bleibt er bei 0%

Für die Hysterese musst du das node-red-contrib-hysteresis installieren. Dann erkennt er den Node automatisch.

Ausschalten kann ich dir nicht genau sagen. Vielleicht einfach nur das Limit runter setzen.

Ich hatte den Eindruck, dass er nur mit einem Neustart die Änderung von dem Limit übernimmt. Kannst ja mal ohne testen.

hallo Marpi, dein flow funzt nach ein paar anpassungen wunder bar,
hast du auch dafür ne lösung?

hat jemand einen node red flow, der die tibber api ausliest und aus den daten dann den aktuellen tages durchschnitt ausrechnet und dann als nummer bereitstellt? also die trennlinie zwischen dem gelben und dem grünen bereich.

Kann ich dir leider nicht helfen. Tibber ist bei mir im Iobroker drin. Mache damit aktuell nix. Wenn ich die Batterie aufladen möchte, nutze ich die Funktion im Venus mit dem geplanten Laduzuständen, nur das diese über ein Iobroker Dashboard manuell gesetzt werden.