Automatische Regelung des Wechselrichter bei zu viel Einspeisung

RudiP

Active member
Ich habe meine Regelung endlich am laufen. Nie wieder mehr Einspeisen, als nötig. :D
Problem bei mir, ich produziere mit meiner PV schon mal mehr Strom, als ich sollte. Darin sehe ich normalerweise kein Problem, da dies im laufe eines Monats kaum auffallen dürfte.
Da ich aber einen neuen Energielieferanten habe, von dem ich Tagesaktuelle Preise bekomme, kann der natürlich auch sehen, was ich täglich an Strom verbrauche.
Je nachdem, wie gut deren Auswertesoftware ist, sofern die eine einsetzen, könnte das natürlich mal blöd kommen. So reifte der Gedanke in mir, das HA da ja eigentlich prima für geeignet wäre, das zu unterbinden.
Vorraussetzungen:
Ein Smartmeter oder andere geeignete Meßeinrichtung, die erkennen kann, wie viel man gerade Einspeist.
Wechselrichter, die man Fernsteuern kann. Bei mir Hoymiles 600 mit DTU

Zunächst einmal habe ich in meiner templates.yaml folgenden Code.
Code:
  - sensor:
    - name: PV Einspeisung
      unique_id: PV_Einspeisung
      unit_of_measurement: "W"
      device_class: power
      state_class: measurement
      state: >
        {{  ( 850 + (states('sensor.electricity_rodgener_strasse_22_total_power') | int /2)) }}
Der Sensor "sensor.electricity_rodgener_strasse_22_total_power" ist mein Smartmeter, das bei Einspeisung negative Werte ausgibt.
Berechnet wird hier nun der Wert, der an den Wechselrichter geschickt wird, wenn die Einspeisung zu groß wird.
Beispiel:

feste ZahlEinspeisungWert für Wechselrichter
850-200 /2750
850-400 /2650
850-600 /2550
850-700 /2500

Wenn wir also 700 Watt einspeisen, würden die Wechselrichter auf max. Output 500 Watt gestellt. Also 200 Watt weniger, als sie könnten.
Bitte jetzt keine Diskussion darüber, warum zwei Wechselrichter oder warum keine Nulleinspeisung !

Soweit also erst mal die Berechnung. Nun kommen wir zu der Logik, die den Output des Wechselrichter steuert.

Code:
# Stört euch nicht an dem Namen.
alias: Nulleinspeisung
description: ""
# Alle 10 Sekunden prüfen wir, ob eine der Bedingungen zutrifft.
trigger:
  - platform: time_pattern
    seconds: /10
action:
# wenn mehr als 550 Watt eingespeist werden, dann ....
  - if:
      - type: is_power
        condition: device
        device_id: 2e562692166a7f556412a313a97fe3eb
        entity_id: e08cbf7ef28d8daf1565733651991cdb
        domain: sensor
        below: -550
    then:
        # setzen wir den Output von beiden Wechselrichtern auf den zuvor errechneten Wert
      - service: number.set_value
        data:
          value: "{{ states('sensor.pv_einspeisung')|float }}"
        target:
          entity_id: f1f3f486dcc5f83cfb8921b981e478bb
        enabled: true
      - service: number.set_value
        data:
          value: "{{ states('sensor.pv_einspeisung')|float }}"
        target:
          entity_id: 3d92ed40c51df0d25c983576bee09282
        enabled: true
  - if:
      # sinkt die Einspeisung auf weniger als 400 Watt, dann......
      - type: is_power
        condition: device
        device_id: 2e562692166a7f556412a313a97fe3eb
        entity_id: e08cbf7ef28d8daf1565733651991cdb
        domain: sensor
        above: -400
    then:
        # setzen wir beide Wechselrichter auf 700 Watt Output.
      - device_id: 1104e25f8f413428dd29d04b13169ab3
        domain: number
        entity_id: 6311b5b2385d6f86b15ddfa06bde927f
        type: set_value
        value: 700
      - device_id: 9bfd33a5996fa6a0c98a283d065ea50b
        domain: number
        entity_id: e76f11aae03459148dde6ae0100434c9
        type: set_value
        value: 700
mode: single

Die Routine prüft alle 10 Sekunden, ob wir mehr als 550 Watt in das öffentliche Netz einspeisen. Sicher kann man das öfter prüfen, aber das kostet auch jedes mal Zeit und ich will HA nicht unnötig belasten. Ich denke, alle 10 Sekunden ist ein guter Kompromiss.
Wenn wir dann mehr als 550 Watt einspeisen, den Wert kann ja jeder nach seinen eigenen Vorstellungen anpassen, dann werden beide Wechselrichter auf einen max. Output gestellt. Den Wert hatten wir ja vorher berechnet. Der Vorteil an der Berechnung ist, das man auf veränderten Verbrauch auch recht flott reagieren kann. Schaltet sich also die Waschmaschine ein, sinkt automatisch die Einspeisung und die Wechselrichter geben wieder mehr Leistung ab.
Klar könnte man die auch brutal auf 0 setzen, aber darin sehe ich keinen Sinn bzw. würde mich 10 Sekunden lang unnötig Strom kosten. Hört sich wenig an, kann aber im laufe eines Tages sich durchaus aufsummieren.
So, wenn nun wieder weniger eingespeist wird, als 400 Watt, werden die Wechselrichter wieder auf max Output gesetzt. Die HM-600 können durchaus etwas mehr als die 600 Watt abgeben, ich hatte die schon mal bei 620 Watt, bei nur 320 Watt Modulen.

Die Zahlen für Entity_id und Device_id kann man wie folgt erhalten.
Einstellungen -> Automatisierung & Szene -> Automatisierung erstellen.
Da geht man dann einfach mal unten in den Aktionen Bereich und wählt "Gerät". Unter "Gerät" wählt man dann seinen Wechselrichter und bei Aktion die Aktion, mit der ihr die Leistung des Wechselrichter regeln könnte. Bei mir heißt das "Wert für Wechselrichter Limit NonPersistent Absolut setzen"
Dann klickt ihr recht knapp oberhalb des Wechselrichter auf die 3 Punkte und sagt "als yaml bearbeiten". Sort seht ihr dann die Werte für device_id und entity_id.
Warum müssen wir diesen Umweg gehen ?
Weil wir in dem Visual Editor keine templates angeben können, sprich, unseren berechneten Wert.
Wir müssen also stattdessen ganz oben rechts die 3 Punkte auswählen, "Als yaml bearbeiten" und dann obigen Code einfügen. Vorher alles andere löschen.
Dann ersetzt ihr die Zahlen durch eure werte und fertig.

Das wars. Damit solltet ihr nie wieder mehr Einspeisen, als nötig.
Viel Spaß damit.
 
Hallo,
ich habe mal eine Frage zu meinem HM-1500.
Wenn ich einen zweiten HM-600 an den HM-1500 anschliesse, wird dann die Leistung in der OpenDTU vom beiden addiert und als "Gesamtleisung", "Gesamtertrag heute" und "Gesamtertrag insgesamt" im HM-1500 angezeigt?

Danke
Transputer
 
Zuletzt bearbeitet:
Hallo zusammen!

Kann mir jemand helfen, die automatische Regelung bei mir einzurichten?

Ich habe genau die gleiche Konfiguration wie Rudi sie beschrieben, ich schaffe es einfach nicht.
Bin gerade neu in Home Assistant und habe mir zwei Balkonkraftwerke zugelegt.

Liebe Grüße
Günter
 
Hallo,
ich habe mal eine Frage zu meinem HM-1500.
Wenn ich einen zweiten HM-600 an den HM-1500 anschliesse, wird dann die Leistung in der OpenDTU vom beiden addiert und als "Gesamtleisung", "Gesamtertrag heute" und "Gesamtertrag insgesamt" im HM-1500 angezeigt?

Danke
Transputer
Ja, wird Dir dann genau so angezeigt.
 
Hallo zusammen!

Kann mir jemand helfen, die automatische Regelung bei mir einzurichten?

Ich habe genau die gleiche Konfiguration wie Rudi sie beschrieben, ich schaffe es einfach nicht.
Bin gerade neu in Home Assistant und habe mir zwei Balkonkraftwerke zugelegt.

Liebe Grüße
Günter
Ich muß zugeben, meine Lösung läuft zwar, ist aber nicht so gut, weil sie einem das Logbuch vollmüllt. Alle 10 Sekunden steht da dann ein Eintrag und eventuell wichtige Einträge sind schwer zu finden.
Ich bin aber schon dabei, nach einer anderen Lösung zu suchen Gebt mir ein wenig Zeit.
 
ich finde die templates.yaml nicht...
Die musst Du auch erst anlegen, wenn Du es noch mit der Lösung versuchen willst. Grundkonzept: https://www.home-assistant.io/docs/configuration/splitting_configuration/

Lege eine Datei namens templates.yaml in dem gleichen Ordner an, in dem auch die configuration.yaml liegt.

Danach fügst Du diese Zeile in der configuration.yaml hinzu: template: !include templates.yaml - ohne Einrückung, und vermutlich hast Du ähnliche Einträge schon recht weit oben stehen, dann einfach dazupacken.

Danach kannst Du die templates.yaml befüllen und - Konfiguration neu laden / neu starten nicht vergessen - auch nutzen.
 
Die musst Du auch erst anlegen, wenn Du es noch mit der Lösung versuchen willst. Grundkonzept: https://www.home-assistant.io/docs/configuration/splitting_configuration/

Lege eine Datei namens templates.yaml in dem gleichen Ordner an, in dem auch die configuration.yaml liegt.

Danach fügst Du diese Zeile in der configuration.yaml hinzu: template: !include templates.yaml - ohne Einrückung, und vermutlich hast Du ähnliche Einträge schon recht weit oben stehen, dann einfach dazupacken.

Danach kannst Du die templates.yaml befüllen und - Konfiguration neu laden / neu starten nicht vergessen - auch nutzen.
Ich werde es nochmal versuchen, Danke für den Tipp
 
So, ich habe meinen Code oben mal etwas modifiziert. Der Trigger auf Zeit ist raus, der war blöd. :D
Code:
alias: Einspeisebegrenzung
description: ""
trigger:
  - platform: numeric_state
    entity_id: sensor.electricity_rodgener_strasse_22_total_power
    below: -550
  - platform: numeric_state
    entity_id: sensor.electricity_rodgener_strasse_22_total_power
    above: -400
condition: []
Ich frage hier den Verbrauch meines Haus via SmartMeter ab. Die Werte werden negativ, wenn ich Einspeise. Deswegen zwei Trigger, die Auslösen, wenn ich mehr als 550 Watt einspeise bzw. wenn ich wieder weniger als 400 Watt einspeise. Der Witz dabei ist, die Trigger lösen nur aus, wenn einer der Werte über bzw. unterschritten wird, also nicht ständig immer wieder, wenn mehr als 550 Watt eingespeist würden.
Den Aktion Part habe ich mit zwei Bedingungen versehen, da wir ja nach Auslösung feststellen müssen, welches Ereignis eingetreten ist.
Ich habe mich von Osorkon dazu inspirieren lassen und alle entity_id, die die Automatik einfach mit Zahlen dargestellt hat, durch ihre richtigen Namen zu ersetzen. Außer im letzten Teil der Aktion, da bin ich noch nicht so ganz sicher, wie das gehen soll, muß ich noch testen.

Code:
action:
  - if:
      - condition: numeric_state
        entity_id: sensor.electricity_rodgener_strasse_22_total_power
        below: -550
    then:
      - service: number.set_value
        data:
          value: "{{ states('sensor.pv_einspeisung')|float }}"
        target:
          entity_id: number.wechselrichter_1_limit_persistent_absolute
        enabled: true
      - service: number.set_value
        data:
          value: "{{ states('sensor.pv_einspeisung')|float }}"
        target:
          entity_id: number.wechselrichter_2_limit_persistent_absolute
        enabled: true
    alias: Wenn Einspeisung größer -550 Watt
  - if:
      - condition: numeric_state
        entity_id: sensor.electricity_rodgener_strasse_22_total_power
        above: -400
    then:
      - device_id: 1104e25f8f413428dd29d04b13169ab3
        domain: number
        entity_id: 6311b5b2385d6f86b15ddfa06bde927f
        type: set_value
        value: 700
      - device_id: 9bfd33a5996fa6a0c98a283d065ea50b
        domain: number
        entity_id: e76f11aae03459148dde6ae0100434c9
        type: set_value
        value: 700
    alias: Wenn Einspeisung kleiner -400 Watt
Hier wird also nichts anderes gemacht, wenn Einspeisung mehr als 550 Watt, dann setze bei beiden Wechselrichtern den max. Output auf den errechneten Wert "{{ states('sensor.pv_einspeisung')|float }}". Woher dieser Wert kommt und warum der berechnet wird, steht im ersten Text. Wird wieder weniger eingespeist, werden ab einer Einspeisung von -440 Watt beide Wechselrichter auf 700 Watt max. Output gesetzt. 700 deswegen, weil die Module etwas mehr als jeweils 300 Watt liefern und so nicht auf 600 Watt begrenzt wird, sondern das, was möglich ist, auch raus kommt.
ACHTUNG !!! Aktuell sind nur 600 Watt erlaubt. Wer den Wert höher setzt, macht das auf eigene Gefahr.
Aber, da wir hier die Einspeisung in das öffentliche Netz begrenzen, wird davon ja niemals jemand erfahren. :D

So, jetzt noch ein paar Bilder, die die Automatisierung im Editor Mode zeigen.
1694522832112.png1694522849848.png
1694522918521.png

Ist etwas schwierig, das hier darzustellen. Wenn Unklarheiten sind, einfach melden.
Hier nochmal den yaml Code in einem Stück.

Code:
alias: Einspeisebegrenzung
description: ""
trigger:
  - platform: numeric_state
    entity_id: sensor.electricity_rodgener_strasse_22_total_power
    below: -550
  - platform: numeric_state
    entity_id: sensor.electricity_rodgener_strasse_22_total_power
    above: -400
condition: []
action:
  - if:
      - condition: numeric_state
        entity_id: sensor.electricity_rodgener_strasse_22_total_power
        below: -550
    then:
      - service: number.set_value
        data:
          value: "{{ states('sensor.pv_einspeisung')|float }}"
        target:
          entity_id: number.wechselrichter_1_limit_persistent_absolute
        enabled: true
      - service: number.set_value
        data:
          value: "{{ states('sensor.pv_einspeisung')|float }}"
        target:
          entity_id: number.wechselrichter_2_limit_persistent_absolute
        enabled: true
    alias: Wenn Einspeisung größer -550 Watt
  - if:
      - condition: numeric_state
        entity_id: sensor.electricity_rodgener_strasse_22_total_power
        above: -400
    then:
      - device_id: 1104e25f8f413428dd29d04b13169ab3
        domain: number
        entity_id: 6311b5b2385d6f86b15ddfa06bde927f
        type: set_value
        value: 700
      - device_id: 9bfd33a5996fa6a0c98a283d065ea50b
        domain: number
        entity_id: e76f11aae03459148dde6ae0100434c9
        type: set_value
        value: 700
    alias: Wenn Einspeisung kleiner -400 Watt
mode: single
 
Hallo,
danke für die ausführliche und sehr gute Anleitung für die Begrenzung der Einspeisung. Ich habe einen Hoymiles 1500 und 600 am laufen. Was für ein Wert muss bei Aktion / Wenn Einspeisung kleiner -400 Watt / Dann* eingegeben werden. Kommen dort die maximalen Werte was die Wechselrichter können, also 1500 und 600 rein, oder was die max ausgeben dürfen damit die Einspeisung nicht überschritten wird?
Eine Frage habe ich noch, wenn ich z.B. die Spülmaschine anmache und der Stromverbrauch stark ansteigt, fahren die Wechselrichter dann auf volle Leistung hoch, oder werden die auf 600 Watt begrenzt?
Morgen früh werde ich den ersten Test laufen lassen.

Transputer
 

Anhänge

  • Screenshot_20230912_222916_Home Assistant.jpg
    Screenshot_20230912_222916_Home Assistant.jpg
    402,1 KB · Aufrufe: 12
Es geht bei dieser Automatisierung nur darum, die Einspeisung in das öffentliche Netz zu begrenzen.
Ich sag mal so. Wenn deine PV 2000 Watt produziert und Du gerade wenig verbrauchst und dann 1800 Watt ins öffentliche Netz einspeist, könnte rein theoretisch jemand sagen "Stopp, das kann und darf ja nicht sein", auch wenn ich denke, das da eh niemand so genau hingucken wird.
Aber für dich ist es ja eher egal, ob Du nun nur 600 Watt oder weniger einspeist. Wichtig ist nur, das für dich selbst genug Strom übrig bleibt.
Die -400 Watt sagen nur, ab wann die Wechselrichter wieder auf, in meinem Fall, volle Leistung fahren sollen.

Das Problem mit dem stark Ansteigend Stromverbrauch versuche ich mal so dar zu stellen.

aktueller Verbrauch/EinspeisungWechselrichter sind eingestellt auf
-500volle Leistung
-600Reduziert auf z.B: 550daraus ergibt sich dann...
-550bleibt auf -550jetzt Schalten wir die Spülmaschine ein
+1500volle Leistungweil die -400 überschritten wurden.

Schwachpunkt bei dieser Regelung ist, wenn das überschreiten der -400 nicht erkannt wird, z.B. weil HA gerade neu startet, dann bleiben die Wechselrichter auf den zuletzt eingestellten Wert stehen, bringen also eventuell nicht die volle Leistung.
Da könnte man noch eine Automatisierung machen, die z.B. alle 30 Minuten mal nachschaut, was wird gerade ins öffentliche Netz eingespeist und wenn weniger als -400, dann ganz pauschal mal die Wechselrichter wieder auf max. Power setzen.

Wo ihr die Schaltschwellen setzt, bleibt jedem selbst überlassen. Sie sollten nur weit genug auseinander sein, damit nicht die Regelung einsetzt und die WR begrenzt, damit dann aber gleich wieder die nächste Bedingung (-400) eintrifft und die WR wieder hoch fährt und das dann munter hin und her macht.

Ich bin auch noch nicht so ganz zufrieden mit der Lösung, weil die Wechselrichter nur einmal begrenzt werden, mir dem dann gültigen errechneten Wert. Schwankt die Einspeisung dann zwischen -550 und -450 Watt, werden die Wechselrichter nicht angepasst, so wie es bei dem Beispiel oben war, wo wir alle 10 Sekunden nachgesehen haben, was Sache ist und dann entsprechend neu eingestellt haben.
 
Hallo,
so, ich glaub, ich habe es geschafft, zumindest tut sich was an der Regelung😊
Jetzt habe ich aber noch eine Frage, die feste Zahl von 850 in dem Code für die templates.yaml ist die für zwei HM-600 oder bleibt die auch bei meinen zwei Wechselrichter Hoymiles 1500 und Hoymiles 600 unverändert.

LG
transputer
 
Hallo,
sorry, die Frage hätte ich mir glaub ich sparen können.
Es ist ja egal ob HM-1500 oder HM-600. Watt ist Watt ob 200,400 ich ich vom WR haben will🫣
 
:) Ja, so war es angedacht. Wenn ich zu viel Einspeise, soll der Wechselrichter ja nicht auf 0 runter geregelt werden, sondern nur so weit, das er knapp unten den erlaubten 600 Watt bleibt und das abhängig davon, was ich selbst gerade verbrauche bzw. die PV liefert.
Wenn nächstes Jahr 800 Watt erlaubt sind, dann müssen wir den Wert anpassen.
 
Hallo zusammen, ich möchte was ähnliches zusammenstellen und einen Hoymiles 600 (allerdings wird von eine Batteriesystem versorgt) so steuern dass die abgegebene Leitung laufend genau oder knapp unter der tatsächlichen Bedarf/Verbrauch eingestellt wird. Als Powermeter nutze ich den Powerfox. OpenDTU ist mit mqtt in HA integriert. Muß man es wie oben getaktet machen (if/then) oder kann der von Poweropti gelesene Wert als Basis (Variabel Wert) genommen werden und die openDTU/Hoymiles steuern? Danke
 
Du mußt ja irgendeinen Auslöser haben, der die Automatisierung startet.
Ich sehe aber gerade, das man tatsächlich auf das ändern eines Wert reagieren kann.
Auslöser hinzufügen, Entität wählen und dann Zustand. Als Entität wählst Du dann dein Powerfox.
Bei "von" oder "zu" wählst Du dann "Beliebiger Status.
Bei "Dann mache" reicht ja eine Routine, die den Wert von deinem Powerfox ausliest und in den HM-600 schreibt.
Wenn Du knapp drunter bleiben willst, dann halt noch einen Wert X abziehen.
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
4.543
Beiträge
46.534
Mitglieder
4.179
Neuestes Mitglied
CColli
Zurück
Oben