Zendure+ Ap System = eigener CT Modus

Hallo zusammen,

ich möchte hier eine Automatisierung teilen, die ich entwickelt habe, um die maximale Leistung meines Solar-Wechselrichters in Abhängigkeit von der aktuellen Stromaufnahme zu steuern. Um unnötige Schaltvorgänge zu vermeiden und die Stabilität zu erhöhen, habe ich eine Hysterese in die Steuerung eingebaut.

Ziel der Automatisierung:

Die Automatisierung passt die maximale Leistung des Solar-Wechselrichters (number.solar_maximale_leistung) an den aktuellen Stromverbrauch (sensor.gesamt_strom) an. Eine Hysterese sorgt dafür, dass kleine Schwankungen im Stromverbrauch nicht sofort zu Änderungen führen, um die Häufigkeit der Anpassungen zu reduzieren.

Bei AP-Systems lässt sich der Bezug leider nicht auf 0 setzen. Daher setze ich es auf 30W als Minimum.

Ich verwende einen Helper um den letzten Wert zwischen zu speichern.

Im Zendure habe ich keinen Modus ausgewählt und den Maximal Output Richtung WR auf den Maximalen Wert 600 gesetzt

alias: Verbrauchssteuerung Hysterese
description: ""
trigger:
  - platform: time_pattern
    seconds: /5
    enabled: false
  - platform: state
    entity_id:
      - sensor.gesamt_strom
action:
  - data:
      entity_id: number.solar_maximale_leistung
      value: >
        {% set power = states('sensor.gesamt_strom') | float %}  
        {% set max_wr = states('number.solar_maximale_leistung') | int %}  
        {% set new_wr = max_wr + power + 5 | int %}  
        {% set last_power = states('input_number.last_power') | int %}  
        {% set hysteresis = 15 %} 
        {% set difference = max_wr - last_power %}  
        {% if difference > hysteresis or difference < -hysteresis %}
          {% if -5 < power < 30 %}
            {{ max_wr }}
          {% else %}
            {% if new_wr < 30 %}
              30
            {% else %}
              {{ [new_wr | int, 600] | min }}
            {% endif %}
          {% endif %}
        {% else %}
          {{ max_wr }}
        {% endif %}
    action: number.set_value
  - data:
      entity_id: input_number.last_power
      value: |
        {{ states('sensor.gesamt_strom') | float }}
    action: input_number.set_value

Klingt interessant. Limitiert Zendure auf 600W oder dein WR?
Wie verhält es sich mit den Verlusten? Wenn voll in den WR eingespeist wird, müsste doch dort der Strom in Form von Wärme “verbrannt” werden, oder liege ich falsch (ähnlich als wenn die Panels ohne Speicher volle Leistung auf den WR geben und er limitiert) ?

Der Hub gibt immer die maximalen 600bzw.800 Watt raus.
Der Wechselrichter “nimmt aber nur das raus” was wirklich gebraucht wird. Ich habe mich da an opendtu 4batterie orientiert. Die machen es auch mit hoymiles Wechselrichtern.

Ich bin kein Physiker. Ich sehe aber keine Verluste. Es ist also nicht so dass alles was der WR nicht annimmt in Wärme umgewandelt wird. Das wäre ja heftig wenn ich zum Beispiel nur 30W am WR erlaube, der Hub aber 600 schickt. Ich möchte aber nicht ausschließen dass es da auch Verluste gibt. Die sind nur Mut meinen Messungen nicht erkennbar.

Der Vorteil ist dass ich viel besser justieren kann ob ich lieber 10 Watt zuviel ins Haus schicke und dadurch verschenke, oder ob ich 10Watt weniger schicke und dafür immer etwas aus dem Netz beziehe aber nichts verschenke.

Hi,
du hast auf meinen Beitrag in der Zendure App geantwortet. Danke erstmal dafür.
Kannst du mir noch etwas genauere Infos zu dem Helfer geben?
Ansonsten finde ich deine Lösung sehr gut, da ich meinen Ap-Systems Wechselrichter auch lokal eingebunden habe.
Das sollte dann eigentlich gut laufen.
Du holst dir den aktuellen Verbrauch auch von einem Shelly oder?
Wie hast du den Shelly eingebunden? Bei mir wurde er einfach gefunden und ich habe ihn dann hinzugefügt. bin mir aber unsicher ob ich das über die Cloud läuft oder nicht.

Beste Grüße und vielen Dank!

Hallo,

ich habe den Shelly 3Em bei mir im Home Assistant eingebunden

  - data:
      entity_id: input_number.last_power
      value: |
        {{ states('sensor.gesamt_strom') | float }}
    action: input_number.set_value

Hier wird der Helper verwendet. Einfach bei Geräte&Dienste einen Helfer für Typ Number anlegen. Diese wird dann für das Zwischenspeichern verwendet.
Das gute ist du veränderst garnichts am Zendure da er dauerhaft auf den passenden Wert ist.

Wenn du konkret Fragen hast gerne stellen. Wenn du zum Beispiel nicht ganz verstehst welcher Wert in der Automation was abbildet

Servus,
danke für die Erläuterung. Was braucht der Helfer für ein Max/Min Wert und was muss man noch einstellen?

PS: Automation läuft schon.
an welcher Stelle muss ich einwirken, damit er immer etwas mehr als gerade gebraucht wird einspeist?
Magst du die Werte kurz erklären? Habe eine grobe Vorstellung, aber wäre für Andere bestimmt auch hilfreich.

Lg

Ok, super. Wert kannst du wahrscheinlich -9999 bis +9999 oder so setzen.

ich kann es versuchen:

{% set new_wr = max_wr + power + 5 | int %}  

Hier werden immer +5 Watt zu dem was der Verbrauch ist hinzugefügt. Mit dem Wert kann man etwas spielen.

Der Zweite Wert ist die Hysterese mit der man spielen kann:

 {% set hysteresis = 15 %} 

Damit wird entschieden ob überhaupt etwas getan wird.

{% if -5 < power < 30 %}

Hier schaue ich das wenn der Verbrauch zwischen -5 und +30 ist nichts gemacht wird. Der maximal Wert für die Wechselrichter Leistung wird einfach wieder auf den alten Wert gesetzt( {{ max_wr }})

Wenn du also möchtest das er nichts einspeist und lieber etwas aus dem Netz zieht kannst du sowas machen wie {% if 0 < power < 50 %}

Ich hoffe das hilft.

Im übrigen kann ich für Home Assistant Automations auch ChatGPT empfehlen wenn man nicht so richtig klar kommt
Ich habe mal meine Automation in ChatGPT geworfen, es aber versteckt damit es nicht stört. Nur als Beispiel

Zusammenfassung

Diese Home Assistant Automation scheint eine Regelung für die maximale Leistungsabgabe eines Wechselrichters (WR) in einem Solarsystem zu steuern. Die Automatisierung passt die maximale Leistung basierend auf dem aktuellen Gesamtstromverbrauch an. Hier ist eine Erklärung der einzelnen Teile:

  1. power (Gesamtstromverbrauch):

python

Code kopieren

{% set power = states('sensor.gesamt_strom') | float %}

Dieser Wert holt den aktuellen Gesamtstromverbrauch aus einem Sensor (sensor.gesamt_strom) und konvertiert ihn in eine Fließkommazahl.
2. max_wr (Maximale Leistung des Wechselrichters):

python

Code kopieren

{% set max_wr = states('number.solar_maximale_leistung') | int %}

Dies ist die aktuell eingestellte maximale Leistung des Wechselrichters, die aus einem number-Objekt geholt und in eine Ganzzahl konvertiert wird.
3. new_wr (Neuer Wert für die maximale Leistung):

python

Code kopieren

{% set new_wr = max_wr + power + 5 | int %}

Hier wird ein neuer Wert für die maximale Leistung des Wechselrichters berechnet, indem der aktuelle Wert (max_wr) um den Gesamtstromverbrauch (power) und einen festen Wert von 5 erhöht wird.
4. last_power (Letzter gespeicherter Gesamtstromverbrauch):

python

Code kopieren

{% set last_power = states('input_number.last_power') | int %}

Der Wert last_power ist der zuletzt gespeicherte Gesamtstromverbrauch, der aus einem input_number-Objekt geholt und in eine Ganzzahl konvertiert wird.
5. hysteresis (Hysterese):

python

Code kopieren

{% set hysteresis = 15 %}

Die Hysterese gibt an, wie viel Unterschied im Stromverbrauch notwendig ist, bevor eine Anpassung der maximalen Leistung vorgenommen wird. Hier ist der Wert auf 15 festgelegt.
6. difference (Unterschied zur letzten Leistung):

python

Code kopieren

{% set difference = max_wr - last_power %}

Dieser Wert berechnet die Differenz zwischen der aktuellen maximalen Leistung und der letzten aufgezeichneten Leistung.
7. Hysterese-Überprüfung:

python

Code kopieren

{% if difference > hysteresis or difference < -hysteresis %}

Hier wird überprüft, ob der Unterschied zur letzten Leistung die Hysterese überschreitet, also ob eine Anpassung erforderlich ist.
8. Leistungsanpassung basierend auf dem Gesamtstromverbrauch:

  • Wenn der Gesamtstromverbrauch (power) zwischen -5 und 30 liegt, bleibt die maximale Leistung (max_wr) unverändert:

python

Code kopieren

{% if -5 < power < 30 %}
  {{ max_wr }}
  • Wenn der neue Wert für die maximale Leistung (new_wr) kleiner als 30 ist, wird der Wert auf 30 gesetzt (vermutlich ein Mindestwert):

python

Code kopieren

{% if new_wr < 30 %}
  30
  • Ansonsten wird der neue Wert auf den kleineren von new_wr und 600 gesetzt, wobei 600 vermutlich eine Obergrenze darstellt:

python

Code kopieren

{{ [new_wr | int, 600] | min }}
  1. Standardfall:

python

Code kopieren

{% else %}
  {{ max_wr }}
{% endif %}

Wenn die Hysterese nicht überschritten wird, bleibt die maximale Leistung unverändert.

Zusammenfassend: Diese Automation passt die maximale Leistungsabgabe des Wechselrichters dynamisch an den aktuellen Gesamtstromverbrauch an. Sie berücksichtigt eine Hysterese, um zu verhindern, dass kleine Schwankungen im Stromverbrauch zu häufigen Anpassungen führen. Es gibt definierte Mindest- und Höchstwerte für die Leistung des Wechselrichters, die durch die Automation ebenfalls berücksichtigt werden.

Ja, Chat ist schon klasse.
Finde es aber besser mit den Leuten zu interagieren😄
Gibt es einen Grund, dass du noch bei den 600 Watt bist?

Ich spiele morgen mal ein wenig rum und werde berichten.

Ich hatte die Anlage damals mit 600W im Register angemeldet und mich noch nicht weiter damit beschäftigt.

Edit:

Ich habe spaßeshalber die ganze Automation mal so umgebaut das nur Strom aus der Batterie genutzt wird wenn der Strompreis über 30Cent ist. Ich habe zwar keinen variablen Strompreis aber ich möchte mal validieren ob das ganze auch ohne E-Auto Sinn macht.

Gibt gerade einen interessanten Beitrag dazu.

Hast du den Bypass eigentlich an?
Zendure habe ich auch keinen Modus und Ausgangsleitung 800 Watt.

Ja das habe ich gesehen. Muss ich mal schauen. Im Moment teste ich es gerade. Ich hole mir den aktuellen Strompreis pro Stunde und lass Home Assistant ausrechnen was das am Tag ergibt. Im Moment komme ich immer auf einen Strompreis von unter 30Cent. Der günstigste Fixpreis sind 32Cent. Bei 3Cent und 4000kWh wären das 120Euro im Jahr ohne das ich etwas machen muss.
Das gute ist ich kann das ganze einfach mitlaufen lassen und schauen wie es sich im Winter mit dem Strompreis entwickelt.

Ich habe sogar einen Dynamischen Tarif. Im Winter wäre dann eine Ladung der Akkus bei guten Preisen ne mega Sache. Dafür bräuchte man aber den ACE noch.

Habe heute festgestellt, dass er ohne Bypass ewig den Akku im Standby hält. Obwohl mehr Bedarf da ist. Erst als ich dann den Herd angemacht habe und richtig Leistung abgerufen wurde, hat er dann endlich mal den Akku dazu genommen. Da scheint es wohl ne Schwelle zu geben. Morgen probiere ich mal mit Bypass automatisch. Hatte ihn heute aus.

Welche Firmware hast du und Hub 1200 oder 2000?

An sowas hab ich ja Spaß :wink:

Ich habe den bypass auf immer aus. Das Problem mit dem Akku in Standby habe ich noch nicht beobachtet.

Ich habe einen hub2000 mit 2x Ab2000.

Ace hatte ich auch schon überlegt. Alleine wegen dem laden des Akkus im Winter zur Erhaltung.

Das war mein Tag heute


Das ist mein Tag. Das Problem siehst du bei 16 Uhr rum. Der dümpelt da rum, ohne den Akku dazu zu holen obwohl mein Verbrauch eigentlich höher gewesen wäre.

Moinsen, hab hier gerade mal so lesetechnisch angedockt.
Ich habe schon vor langem aufgehört die Zendure daten zum CT Modus oder als nutzbare Werte in HA zu nutzen, da mir denn doch die Risiken zu hoch sind, den Datenaustausch zu trauen. Kommt immer wieder zu zeitlichen Unterschieden.okay, vielleicht etwas u deutlich ausgedrückt :wink:
Ich stelle immer wieder fest, dass der Austausch der Daten von Zendure etwas hagt und somit eine angestrebte Nullspeisung damit für die Katz sind.
Icb selber mache es dann doch lieber mit der open DTU Variante. Habe aber auch das Glück, zwei Hubs betreiben zu können. Somit muss ich mich nicht immer über die Zendure Daten ärgern. Ein Hub läuft komplett auf 800 W und die Abnahme wird von OpenDTU geregelt und die zweite Anlage wird mit der Zeitsteuerung gemanaget (Terminmodus).
Da beide über je eine OpenDTU mit je einem Hoymiles WR verdügen, kann man das dann in Ruhe über HA zusammengelegt auf 800W abriegeln.

Aber was ich eigentlich hier schreiben wollte…
Dein Bild der Zendure App zeigt aber doch eigentlich, dass die Batterien voll sind und er deine Stromabnahme auch ab 16Uhr mit dem Solarertrag der noch reinkam abgedeckt hat oder irre ich. Der gelbe Solarbalken läuftvdoch unter dem Blauen Verbrauch. Also was soll er dann den Akku antasten?
Oder hab ich da was übersehen?

Grundsätzlich hast du Recht. Das Problem ist nur, dass mein Verbrauch im Haus eigentlich höher war. Ist entweder ein Bug oder ein Darstellungsproblem. Die Automation läuft echt Klasse und steht der Open DTU meiner Meinung nach in nichts nach. Das schöne ist halt an der Lösung, dass sie auch komplett lokal läuft.

Gibt es Updates zu deinen Versuchen mit den Strompreisen?

Liebe Grüße

Hallo.
Ich bin ganz zufrieden mit dem Versuch des Strompreises.
Wenn Interesse besteht kann ich meine Version die Tage Mal teilen.

Gerne😜
Harder gerade damit, mir den Ace 1500 zuzulegen.

Geht mir ähnlich. Aber eigentlich müsste ich dann meine Kapazitäten auch noch etwas erhöhen. 4kWh sind da schon knapp.

Und dann kann man sich für den gleichen Preis ein hyper mit ab2000 zum gleichen Preis wie den ace und ab2000 kaufen.

Meine Idee wäre den ace dann mit Home Assistent und einer schaltbaren Steckdose aus dem Netz zu laden. Das würde soweit ich das sehe beim hyper nicht gehen.

Der Vorteil dass mit HA zu machen ist, das ich dort den prozentualen Preis im Vergleich zum teuersten heute habe.
Das heißt wenn der Strom abends 1 Euro kostet kann es sich lohnen mittags für 40 Cent zu laden. In zendure kann man aber nur absolute Werte setzen.

Ja da hast du recht, aber ab2000 bekommst du ja schon für 600€ mittlerweile.
Sag mal könntest du noch eine Wetterabhängigkeit mit einbauen?
Also sowas wie, wenn Bewölkt, dann den Wert des Wechselrichters auf Wert x begrenzen, wenn nicht ganz normal nach Bedarf.
Merke gerade das bei dem Wetter gerade er immer Akku paar Prozent läd, ihn dann wieder auf eigestellten Schwellenwert saugt and so on.

Lg