Hallo, ich verwende einen HMS 2250. Ich hatte auch mal dieses Problem. Bei mir verschwand es als ich den Code so anpasste (Schnippsel kopierte) dass immer etwas eingespeist wurde. D.h. der Wechselrichter nie auf null heruntergeregelt wurde.
VG Johi
Hallo, ich verwende einen HMS 2250. Ich hatte auch mal dieses Problem. Bei mir verschwand es als ich den Code so anpasste (Schnippsel kopierte) dass immer etwas eingespeist wurde. D.h. der Wechselrichter nie auf null heruntergeregelt wurde.
VG Johi
Welchen Schnipsel meinst du?
In den BeitrĂ€gen ab #35 ist beschrieben wie man mindestwerte setzt, bzw. Zeitsteuerungen implementiert. Aus diesen BeitrĂ€gen habe ich fĂŒr mich passende âSchnippselâ kopiert, angepasst und in meinen Flows verwendet.
hhm, komm leider nicht weiter.
kannst du eventuell deinen kompletten Flow zur VerfĂŒgung stellen?
[{"id":"f19035e05f3e1cc0","type":"tab","label":"Flow 3","disabled":true,"info":"","env":[]},{"id":"0e814cab1830de6f","type":"junction","z":"f19035e05f3e1cc0","x":220,"y":140,"wires":[[]]},{"id":"2b19c160a65668d1","type":"inject","z":"f19035e05f3e1cc0","name":"Alle 15 Sekunden","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"15","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":300,"wires":[["723a87dcf40df33f","254aa6cc7c45d8ed"]]},{"id":"e0a4ae180d2b8fad","type":"api-current-state","z":"f19035e05f3e1cc0","name":"Momentane Leistung Tasmota ZĂ€hler(+Solar Prod)","server":"","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.einspeisung","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"30","forType":"num","forUnits":"seconds","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":550,"y":220,"wires":[["456bbad353a8f413"]]},{"id":"a95a4f6a785efdf2","type":"function","z":"f19035e05f3e1cc0","name":"Berechnung fĂŒr Wechselrichterlimit","func":"var maxPower = 2250;\n\n// Die aktuelle Leistung oder den Maximalleistung\nvar power = context.get('power') || maxPower;\n\n// Berechnet die prozentuale Differenz zwischen aktuellem und vorherigem Wert\nvar percentageDiff = Math.abs((msg.payload - power) / power) * 100;\n\n// Vorherige Wert muss 10% gröĂer oder kleiner sein gleich vorherigen Wert\nif (percentageDiff > 10) {\n if (msg.payload > maxPower) {\n if (msg.payload > 1640) {\n power = maxPower;\n } else {\n power = msg.payload;\n }\n } else if (msg.payload < 50) {\n power = 51;\n } else {\n power = msg.payload;\n }\n}\n\n// Aktuelle Leistungsgrenze speichern und Nachricht aktualisieren\ncontext.set('power', power);\nmsg.payload = power;\n\n// ĂberprĂŒfen Sie, ob der aktuelle Wert mit dem vorherigen ĂŒbereinstimmt\nif (msg.payload === context.get('previousPower')) {\n return null; // Verlassen Sie die Funktion, ohne etwas zurĂŒckzugeben, bei gleichem Wert\n}\n\n// Speichern Sie den aktuellen Leistungswert wie zuvor fĂŒr die nĂ€chste Berechnung\ncontext.set('previousPower', msg.payload);\n\nreturn msg;","outputs":2,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":880,"y":320,"wires":[["92ba9cfb922d9ec5","fff1ca5b48d21750"],[]]},{"id":"bfc187c3264f44c5","type":"mqtt out","z":"f19035e05f3e1cc0","name":"number.HMT2250_limit_nonpersistent_absolute","topic":"solar/138281321796/cmd/limit_nonpersistent_absolute","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"9eefe9c92eb3326b","x":940,"y":160,"wires":[]},{"id":"92ba9cfb922d9ec5","type":"debug","z":"f19035e05f3e1cc0","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"","statusType":"msg","x":1000,"y":520,"wires":[]},{"id":"723a87dcf40df33f","type":"api-current-state","z":"f19035e05f3e1cc0","name":"Momentane Leistung HMT 2250","server":"","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.hmt2250_power","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"20","forType":"num","forUnits":"seconds","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":550,"y":460,"wires":[[]]},{"id":"456bbad353a8f413","type":"rbe","z":"f19035e05f3e1cc0","name":"entprellen","func":"deadband","gap":"50","start":"","inout":"out","septopics":true,"property":"payload","topi":"topic","x":620,"y":380,"wires":[["a95a4f6a785efdf2"]]},{"id":"254aa6cc7c45d8ed","type":"time-range-switch","z":"f19035e05f3e1cc0","name":"Zeitsteuerung","lat":"","lon":"","startTime":"sunrise","endTime":"sunset","startOffset":"150","endOffset":"-60","x":400,"y":280,"wires":[["e0a4ae180d2b8fad"],[]]},{"id":"fff1ca5b48d21750","type":"rbe","z":"f19035e05f3e1cc0","name":"entprellen","func":"deadband","gap":"50","start":"","inout":"out","septopics":true,"property":"payload","topi":"topic","x":540,"y":60,"wires":[["bfc187c3264f44c5"]]},{"id":"9eefe9c92eb3326b","type":"mqtt-broker","name":"WR","broker":"core-mosquitto","port":"1883","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":""}]
by HarryP: Codezeilen formatiert (bitte immer in </> einbinden)
Den Flow kann man leider nicht einfĂŒgen, es kommt irgendein Formatierungsfehler. Kannst du den bitte als âFlowâ einfĂŒgen? Danke
erledigt bei HarryP
Mal ne andere Frage an alle: Werden bei euch auch das âpersistant limitâ mit geĂ€ndert oder nur das non-persistant limit? Bei mir wird beides immer gleich geĂ€ndert und ich meine mal gelesen zu haben, das wĂ€re nicht so gut. Kann das mal jemand ĂŒberprĂŒfen? Danke
Ich hatte mal die gleiche Frage in Github gestellt. Die Antwort war dass bei Aenderung vo â Non Persistent Limit: Im Wechselrichter auch nur Non Persistent geĂ€ndert wird aber in OpenDTU der Wert beider geĂ€ndert erscheint.
Ok danke, das beruhigt mich dann etwas.
Servus,
ich wollte auch danke sagen fĂŒr die vorlage!
Ich habe mich heute 10h mit dem erstellen des scripts beschÀftigt und glaube das es jetzt funktioniert
- ich habe vorher noch nie was mit node red gemacht!
was mir noch fehlt ist ein zeitabhĂ€ngige Steuerung sowie bin ich mir unsicher ob der Wechselrichter bis auf 0 geregelt wird oder er ein Minimum von 10% hatâŠ
Ich habe noch ein Offset von 150w eingebaut die ich gerne einspeisen wĂŒrden - einfach das man fĂŒr kleine lasten etwas Puffer hat.
mein Setup:
Tibber Puls
HMS-1600
OpenDTU
[
{
"id": "7bf3afac51a18e13",
"type": "tab",
"label": "PVNull",
"disabled": false,
"info": "",
"env": []
},
{
"id": "2dacc22b5419c832",
"type": "mqtt out",
"z": "7bf3afac51a18e13",
"name": "WR MQTT",
"topic": "solar/116484658617/cmd/limit_nonpersistent_absolute",
"qos": "",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "87b2d138566ff5cc",
"x": 1370,
"y": 300,
"wires": []
},
{
"id": "992140f008964c0e",
"type": "function",
"z": "7bf3afac51a18e13",
"name": "Berechnung fĂŒr WR Limit",
"func": "// MAX generation of the inverter Watts\nvar maxPower = 1600;\n\n// Get current power limit or default\nvar power = context.get('power') || maxPower;\npower += msg.payload;\n\n// clamp power between 0 and max\nif (power > maxPower) power = maxPower;\nif (power < 10) power = 1;\n\n\n// store current powerlimit and update message\ncontext.set('power', power);\nmsg.payload = power;\n\nreturn msg;",
"outputs": 1,
"timeout": "",
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1070,
"y": 300,
"wires": [
[
"cfc7a51cd2515e7c",
"2dacc22b5419c832"
]
]
},
{
"id": "cfc7a51cd2515e7c",
"type": "debug",
"z": "7bf3afac51a18e13",
"name": "WR Wert",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1360,
"y": 220,
"wires": []
},
{
"id": "7c9607b020e57be9",
"type": "tibber-feed",
"z": "7bf3afXXXXXXXXXXX",
"name": "B4D",
"active": true,
"apiEndpointRef": "acaea9118c2d1751",
"homeId": "6453fa8f-XXXXXXXXXXX",
"timestamp": false,
"power": "1",
"lastMeterConsumption": false,
"accumulatedConsumption": false,
"accumulatedProduction": false,
"accumulatedConsumptionLastHour": false,
"accumulatedProductionLastHour": false,
"accumulatedCost": false,
"accumulatedReward": false,
"currency": false,
"minPower": false,
"averagePower": false,
"maxPower": false,
"powerProduction": false,
"minPowerProduction": false,
"maxPowerProduction": false,
"lastMeterProduction": false,
"powerFactor": false,
"voltagePhase1": false,
"voltagePhase2": false,
"voltagePhase3": false,
"currentL1": false,
"currentL2": false,
"currentL3": false,
"signalStrength": false,
"x": 190,
"y": 300,
"wires": [
[
"303c3a9e684e3aca",
"727ade03c58e2d2b"
]
]
},
{
"id": "303c3a9e684e3aca",
"type": "debug",
"z": "7bf3afac51a18e13",
"name": "Tibber output",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 440,
"y": 220,
"wires": []
},
{
"id": "f2cca6ecae7ad5fc",
"type": "debug",
"z": "7bf3afac51a18e13",
"name": "Tibber output payload",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 740,
"y": 220,
"wires": []
},
{
"id": "727ade03c58e2d2b",
"type": "change",
"z": "7bf3afac51a18e13",
"name": "",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "payload.power",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 450,
"y": 300,
"wires": [
[
"f2cca6ecae7ad5fc",
"52b31c00780196ab"
]
]
},
{
"id": "52b31c00780196ab",
"type": "delay",
"z": "7bf3afac51a18e13",
"name": "",
"pauseType": "rate",
"timeout": "10",
"timeoutUnits": "seconds",
"rate": "1",
"nbRateUnits": "10",
"rateUnits": "second",
"randomFirst": "1",
"randomLast": "5",
"randomUnits": "seconds",
"drop": true,
"allowrate": false,
"outputs": 1,
"x": 750,
"y": 300,
"wires": [
[
"992140f008964c0e",
"aed44dec4557ee97"
]
]
},
{
"id": "aed44dec4557ee97",
"type": "debug",
"z": "7bf3afac51a18e13",
"name": "nach delay",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1030,
"y": 220,
"wires": []
},
{
"id": "87b2d138566ff5cc",
"type": "mqtt-broker",
"name": "",
"broker": "192.168.1.2",
"port": "1883",
"clientid": "",
"autoConnect": true,
"usetls": false,
"protocolVersion": "4",
"keepalive": "60",
"cleansession": true,
"autoUnsubscribe": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"birthMsg": {},
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"closeMsg": {},
"willTopic": "",
"willQos": "0",
"willPayload": "",
"willMsg": {},
"userProps": "",
"sessionExpiry": ""
},
{
"id": "acaea9118c2d1751",
"type": "tibber-api-endpoint",
"queryUrl": "https://api.tibber.com/v1-beta/gql",
"feedConnectionTimeout": "30",
"feedTimeout": "60",
"queryRequestTimeout": "30",
"name": "B4D"
}
]
das mit der Zeitstuerung habe ich soweit gelöst - auch das aus dem Tibber node zwei getrennte werte fĂŒr positiv und negativ kommen.
ich bin im nĂ€chsten schritt am ĂŒberlegen wie ich eine Logik baue mit meinen 3 Wechselrichtern - wann welcher wie skaliert wird.
zwei Gleichzeit macht doch eigentlich keinen sinn weil sie sich dann gegenseitig aufschaukeln oder habe ich einen Denkfehler?
Hallo an alle,
vielleicht kann mir jemand weiterhelfen.
Nutze Node-Red zum ersten mal im Home Assistant und komme mit der Konfiguration noch nicht klar.
Meine Konfiguration:
Shelly 3EM
Hoymiles HM-300
24V Lifepo4 Akku (3,6V x 8 Zellen)
Der Akku ist am Hoymiles angeschlossen, OpenDTU lÀuft auch und die MQTT Verbindung zu HA habe ich auch. Ich kann alle Daten vom Wechselrichter sehen, die WR-Leistung regeln usw. Das funktioniert alles.
Allerdings bekomme ich im Node-Red keine Verbindung zum Wechselrichter.
Hier ein paar Screenshots von den DTU und Node-Red Einstellungen:

Bei dem WR MQTT Node habe ich meine Seriennummer und das topic aus OpenDTU eingetragen. Trotzdem steht dort immer âVerbindung wird hergestelltâ
Kann mir jemand weiterhelfen, was ich falsch mache ?
Edit:
Hier noch ein Auszug vom Node-Red log:
[mqtt-broker:87b2d138566ff5cc] Connection failed to broker: mqtt://192.168.178.17:1883
Danke und GruĂ
Thomas
Hallo in die Runde.
Ich bin in Sachen Home Assistent und Node Red noch sehr unerfahren. Ich habe diesen Flow mal bei mir eingegeben. Mit meinen IR Lesekopf klappte es wunderbar. Nur mein Wechselrichter funktioniert dort nicht. Ich haben einen Apsyszems EZ1. Ich vermute das er kein MQTT hat. Gibt es eine andere Möglichkeit ihn anzusteuern ?
Danke!!
Moin ToBoeh,
kennst du diesen Beitrag aus der HA-Community? In dem dort verlinkten Video gibt es auch einen Abschnitt zur HA-Integration.
GrĂŒĂe
LL
Moin LL
Ja das Video kenne ich. Ich hab nur keine Ahnung was genau ich wie machen muss um das zu realisieren. BeschÀftige mich gerade mal seit einer Woche mit Homeassistent.
Gibt es irgendwo eine ErklĂ€rung fĂŒr AnfĂ€nger
?
Dank dir
Moin berowicz,
du musst auch in Node Red beim mqtt-Server den Benutzernamen und das Passwort eintragen, hast du das gemacht?
GrĂŒĂe
LL
Die HA-Integration ist hier beschrieben, aus meiner Sicht auch fĂŒr AnfĂ€nger geeignet.
GrĂŒĂe
LL
Das habe ich schon gemacht. In Homeassistent ist mein Wechselrichter integriert und auch einsehbar. Zudem diese ich meinen ZĂ€hlerstand ĂŒber einen Tasmota ab. Dieser ist auch schon im HA drin. Nur wo muss ich jetzt was machen um eine Nulleinspeisung zu bekommen ? Muss ich dann, wenn ich auf der API Seite des WR bin unter Skripte
das Python Skript hinzufĂŒgen von dem er in dem Video spricht ? Vor ein paar Tagen konnte ich nirgendwo was eintragen. Es ist immer eine Art Fehlermeldung gekommen. Jetzt wenn ich Skripte öffne, steht zumindest was.
Ich habe glaube, so langsam könnte Licht ins Dunkel kommen
. Wie schon gesagt, ich beschĂ€fftige mich da seit einer Woche etwa mit. Ist alles noch sehr kompliziert fĂŒr mich.
Nachtrag:
Habe mir das Video nochmals angeschaut. Habe von dem Script ein Screenshot gemacht. Muss das dann in HA unter Skripte hinzugefĂŒgt werde ?
by HarryP:
ZusammenfĂŒhrung Doppelpost
Codezeilen besser ĂŒber </> (s.o.) einfĂŒgen als mit screenshot