Shelly & Hoymiles WS Kalkulationsfrage

Hi, ich bin recht neu in der HA Welt, habe aber von anderen Programmiersprachen (Phyton, visual basic, etc) relativ gute kenntnisse.

Zu meiner Anlage:

Solarpannel → Xoro Batterie → WS → Hausnetz

Die Batterie hat ein eigenes GUI, welches auf 800W Ausgabe steht, 10% SOC.
Ich habe mir ein Script geschrieben und vermute das ich hier einen Logikfehler habe.
Die Hoymiles WR Leistungsbegrenzung kann von 0%-100% geregelt werden. 100% sind also 800 W Einspeisung pro Stunde, wenn ich mich nicht irre(?).
Da Shelly in der total active power die PV ja bereits abzieht (negativer Wert, wenn PV eingespeist wird), habe ich einen Helfer erstellt, welcher die AC Leistung des WR wieder on top rechnet um so den momentanverbrauch zu erhalten.
Da ich im WR aber auf % umwandeln muss, habe ich die Max Ausgabeleistung durch 800 x 100 um auf % zu kommen:

 {{ ((float(states('sensor.shellypro3em_34987a45ff58_total_active_power')) / 800* 100) 
 + (float(states('sensor.wechselrichter_ac_leistung')) / 800* 100)
 | round(0)) }}

Das liefert mir den Wert, welcher im WS eingestellt werden muss um genau so viel ein zu speisen, wie gerade verbraucht wird (Mir ist bewusst, dass dieser immer etwas Verzug hat und keine 100% Nulleinspeisung erreicht wird).

Das funktioniert auch wunderbar und er regelt die Leistungsbegrenzung nach, so dass sie immer etwas über dem Verbraucht liegt.


overview2

Das lief nun seit gestern so ohne Komplikationen durch und suggeriert, dass die eingespeiste Energie ~ die benötigte Energie war.
Schau ich aber auf meinen Stromzähler, habe ich in der Zeit ~14KW verbraucht. Ich denke ich habe einen Logikfehler, weil Shelly den aktuellen Momentanverbrauch anzeigt und der WS aber W/h ausgibt, komme aber nicht drauf. Oder es ist etwas ganz anderes was ich nicht berücksichtigt habe. Bin daher für alle Vorschläge offen :slight_smile:

Hallo,

ich nutze HA schon länger, dafür sind meine Programmierkenntnisse (vor ewigen Jahren Delphi usw…) recht eingestaubt…

Ich habe ein Skript ausprobiert, dass zuverlässig funktionieren soll. Hoymiles 800 Wifi und Shelly 3em. Wie den Code für das Saldieren des 3EMs habe ich diesen in die YAML kopiert und angepasst…
Jetzt kommen aber Fehlermeldungen:

Ich kann schon nachvollziehen, was da läuft, evtl. liegt es an der zu verwendeten Formatierung ???

Hier der Auszug:

trigger:
  - platform: state
    entity_id: sensor.power_import
condition: []
action:
  - service: number.set_value
    target:
      entity_id: number.wechselrichter_leistungsbegrenzung
    data:
      value: >-
        {% set power =
        states('sensor.power_import') | float %}
        {% set max_power = 800 %} {% if power > max_power %}
          100
        {% else %}
          {{ (power / max_power * 100) | round(2) }}
        {% endif %}
mode: single

vielleicht hilft Dir das weiter und Du könntest mir unter die Arme greifen…
Wäre ja cool, wenns bei uns beiden (und den Lesern hier) funktionert
bei sensor.power_import wird das saldierte Ergebnis genommen. Falls Du das noch nicht in die YAML integriert bzw ungesetzt hast, ist hier der Link samt einem Konfigurator für die YAML - Inhalte, der sehr einfach ist :wink:

:crayon:by HarryP: Post formatiert

Hi, ich hab es jetzt erstmal hinbekommen indem ich die Shelly Werte saldiert habe mit dieser Anleitung:Shelly 3EM, Photovoltaik und Home Assistant: Richtig saldieren.

In HA hab ich den Hoymiles HACS installiert: GitHub - suaveolent/ha-hoymiles-wifi: Home Assistant custom component for Hoymiles DTUs and the HMS-XXXXW-2T microinverters
welcher auch die Leistungsbegrenzung einstellen kann.
Über einen helfer berechne ich, welche Begrenzung (zwischen 0 - 100%) eingestellt werden muss um pari mit dem aktuellen Bedarf zu sein.

Dazu nutze ich das folgende Script. Die shelly plug links/rechts sind einfache Shelly Steckdosen, welche den durchfluss messen, der Wert könnte aber auch vom AC Ausgang des Wechselrichters aus dem HACS genommen werden (kaum abweichung erkennbar).
Power_Consumption kommt von dem Link oben (Shelly Saldieren):

{% set WR1 = states('sensor.shelly_plug_links_switch_0_power') | float %}
{% set WR2 = states('sensor.shelly_plug_rechts_switch_0_power') | float %}

{% if WR1 > 0 and WR2 > 0 %}
{{ ((float(states('sensor.power_consumption')) / 1600 * 100) 
| round(0)) }}
          
{% elif WR1 > 0 and WR2 == 0 %}
{{ ((float(states('sensor.power_consumption')) / 800 * 100) 
| round(0)) }}

{% elif WR1 == 0 and WR2 > 0 %}
{{ ((float(states('sensor.power_consumption')) / 800 * 100) 
| round(0)) }}

{% elif WR1 == 0 and WR2 == 0 %}
20
{% else %}
20
{% endif %}

Über ein Autoscript (siehe Bild) wird hier jede Minute nachgeregelt (denke sekündlich macht keinen Sinn, da es eh einen delay in der Kommunikation gibt). Dabei nehme ich aktuell nur eine Veränderung vor, wenn der neue Wert ±2% über dem alten liegt (hier überlege ich auch noch auf 5% hoch zu gehen um weniger ANpassungen zu haben).

So geht jetzt erstmal der Überschuss in meine beiden Akkus. Leider kann ich diese aktuell noch nicht in HA einbinden, damit ich ne sinnvolle Steuerung (batterie voll, leer, verteilung) basteln kann aber erstmal funktioniert es so stabil. Man muss dazu sagen, dass meine Batterien (Xoro SPS2150) in der app geregelt werden können, was etwas hilft, da ich Zeiten einstellen kann, wann diese mit dem entladen beginnen sollen.

Autoscript:


Cool :slight_smile:

Hast Du eine Idee, warum mein Code nicht funzt ??

Beim prüfen der Konfig in “Entwicklerwerkzeuge” kommt:

Konfigurationswarnungen

Integration error: condition - Integration ‘condition’ not found.
Integration error: mode - Integration ‘mode’ not found.
Integration error: trigger - Integration ‘trigger’ not found.
Integration error: action - Integration ‘action’ not found.

der sucht scheinbar eine Integration - sollte also irgendwie mit der Syntax / Formatierung zu tun haben… ???

Dieser Code sollte auch funktionieren, ist aber scheinbar mit einem Anker / Variable…
Denke, dass da an anderer Stelle (Helfer o.ä.) noch was fehlt???

sensor11 ist mein Tasmota Volkszähler…

alias: Nulleinspeisung HMS800
description: >-
  Stellt die Leistung des Wechselrichters basierend auf dem Shelly Plug Power
  Sensor ein.
trigger:
  - platform: state
    entity_id: sensor.11_strom_power_cur
condition: []
action:
  - service: number.set_value
    target:
      entity_id: number.wechselrichter_leistungsbegrenzung
    data:
      value: >-
        {% set power =
        states('sensor.11_strom_power_cur') | float %}
        {% set max_power = 800 %} {% if power > max_power %}
          100
        {% else %}
          {{ (power / max_power * 100) | round(2) }}
        {% endif %}
mode: single

:crayon:by HarryP: Codezeilen Formatiert

Wie gesagt ich bin jetzt nicht der YAML Profi aber wie wird denn der service getriggert?

Ich hab den set vallue in einem automatierungsscript, der jede minute anläuft.

Wenn du die formel in Entwicklerwerkzeuge → Template zum testen einfügst, zeigt er einen Wert an?

Hallo,

vielen Dank für Deine Nachricht. Ich war unterwegs und habe es erst jetzt probiert.
Die Möglichkeit hatte ich noch nicht auf dem Schirm.

Der letzte Post mit &gt wirft Fehler…
der erste gibt bei Value einen vernünftigen Wert aus - YIPPIE :slight_smile:

Dieser ändert sich auch plausibel…

Nur kommt eben die Fehlermeldung:
Logger: homeassistant.helpers.translation
Quelle: helpers/translation.py:226
Erstmals aufgetreten: 20:43:48 (4 Vorkommnisse)
Zuletzt protokolliert: 20:43:48

Failed to load integration for translation: Integration ‘mode’ not found.
Failed to load integration for translation: Integration ‘action’ not found.
Failed to load integration for translation: Integration ‘trigger’ not found.
Failed to load integration for translation: Integration ‘condition’ not found.

und die Leistungsbegrenzung beim Hoymiles ändert sich nicht…