yaml Profi Tricks für Zendure - surfer1264/Zendure-Stuff GitHub Wiki
Zwei Kernfragen werden hier gelöst:
- Wie bekommt man die Powersensoren der Akkus sauber genullt? (Pack Input Power und Output Pack Power)
- Wie bekomme ich die Energiewerte des Akkus in das Energiedashboard vom Home Assistent?
- Zusatzpunkt: Wie bekomme ich das hin für Output Home Power?
SF Pack Input Power (Energieabgabe Akku ans Hausnetz) und SF Output Pack Power (Energiebezug Akku von Solar) werden weniger kontinuierlich geliefert. Gleiches gilt für SF Output Home Power (Die Lösung ist aber speziell). Besonders ärgerlich ist, dass bei Wegfall der Daten die letzten Werte einfach stehen bleiben (beim Wechsel vom Laden des Akkus in den Standby oder beim Wechsel vom Entladen in den AUS-Modus in der Nacht). Die Werte sind dann einfach undefiniert oder falsch. Damit sind die Daten nicht gut weiter verwendbar.
Ich habe für mich daher folgende Lösung gefunden (gibt bestimmt auch andere).
Es gibt das Konzept der Template Sensoren im HA (aus einzelnen Werten anderer Sensoren, können eigenständige Sensoren abgeleitet werden). Der Definition kann man eine Reihe von Verarbeitungsregeln mitgeben, z.B. auf Null setzen, wenn eine Bedingung erfüllt ist usw. usf. (Aha)
Was muss man tun?
- Erzeuge eine template.yaml.
- Lege sie am gleichen Ort ab, wie die mqtt.yaml
- Binde die template.yaml in die configuration.yaml ein mit:
template: !include template.yaml
In der im Code Bereich abgelegten _template.yaml_
werden zwei neue Sensoren angelegt und von Ihren Ursprungssensoren (MQTT) abgeleitet:
- name: "SF Output Pack Power Filtered" => abgeleitet von "SF Output Pack Power" (Laden Akku)
- name: "SF Pack Input Power Filtered" => abgeleitet von ""SF Pack Input Power" (Entladen Akku)
Achtung: achtet auf Eure Namensgebung!! Entitäten heißen bei Euch ggf. anders!!!
Vorab: Die neuen Sensoren werden in Abhängigkeit von _pack state_
zum richtigen Zeitpunkt bei Statusübergängen erfolgreich genullt (siehe weiter unten).
die template.yaml enthält:
- sensor:
- name: "SF Output Pack Power Filtered"
unique_id: sf_output_pack_power_filtered
unit_of_measurement: "W"
device_class: power
state_class: measurement
state: >-
{% set pack_state = states('sensor.solarflow_pack_state') %}
{% set output_power = states('sensor.solarflow_sf_output_pack_power') %}
{% if pack_state in ['2', '0'] %}
0
{% elif output_power is not none and output_power | float(default=0) >= 0 %}
{{ output_power | float }}
{% else %}
0
{% endif %}
- name: "SF Pack Input Power Filtered"
unique_id: sf_pack_input_power_filtered
unit_of_measurement: "W"
device_class: power
state_class: measurement
state: >-
{% set pack_state = states('sensor.solarflow_pack_state') %}
{% set input_power = states('sensor.solarflow_sf_pack_input_power') %}
{% if pack_state in ['1', '0'] %}
0
{% elif input_power is not none and input_power | float(default=0) >= 0 %}
{{ input_power | float }}
{% else %}
0
{% endif %}
Die Werte werden in Abhängigkeit von _pack state_
zum richtigen Zeitpunkt bei Statusübergängen erfolgreich genullt.
Der Wert "1" von Pack State steht für Laden des Akkus, der Wert "0" steht für Standby, der Wert "2" steht für Entladen der Akkus. Wenn also der Hub in den Status „1“ Laden wechselt, dann wird mein neuer Sensor „SF Pack Input Power Filtered“ auf den Wert 0 gesetzt, ansonsten übernimmt er natürlich den aktuellen oder auch zuletzt gelieferten Wert der mqtt Nachricht. Dafür muss man die Pack State Definition etwas robuster machen. Die pack state Definition in der mqtt.yaml sieht wie folgt aus (Wichtig). Ausgehend davon, dass Ihr die pack_state
bereits in Eurer mqtt.yaml definiert habt, müsst Ihr nur die korrekte Definition überprüfen (oder einfach mit den folgenden Zeilen ersetzen):
- name: Pack State
unique_id: <deviceID>SFpackState
state_topic: <appKey>/<deviceID>/state
value_template: >-
{% if value_json.packState is defined and value_json.packState | string != "" %}
{{ value_json.packState }}
{% else %}
{{ states('sensor.solarflow_pack_state') | default('N/A') }}
{% endif %}
device:
name: SolarFlow
identifiers: <EurePVHubSeriennummer>
manufacturer: Zendure
model: SmartPV Hub 1200 Controller
Somit entstehen reale Wertekurven. Diese obigen (neuen filtered) Sensoren lassen sich normal weiterverwenden (siehe Bild), zum Beispiel für:
- Energiewerte ableiten. Dafür muss man jeweils einen weiteren Sensor erzeugen (Stichwort Helfer => Integralsensor)
- Die Integralsensoren sind dann einbindbar in das Energie-Dashboard vom HA.
Im Bild seht ihr den ständig wechselnden pack State und die dazugehörigen Lade-/Entladekurven (Power)
Wofür braucht man die? Um Werte im Energie-Dashboard des HA anzuzeigen. Das Energie-Dashboard benötigt Energiewerte (keine Powerwerte). Home Assistent kann die Energiewerte berechnen. Das ist pure Mathematik: die Fläche unter der (Power)Kurve ist das Integral, und in diesem Fall dann genau der Energiewert des jeweiligen Sensors.😀 Wenn man also die Energiewerte (Laden-/Entladen der Akkus) im Energie-Dashboard des HA sichtbar machen möchte, muss man weitere Sensoren bauen mit dem Helfer Integralsensor.
Wie das geht, wird hier kurz gezeigt: (Menü: Geräte/Dienste => Helfer, Add Integralsensor)
Es werden wieder zwei neue (Helfer-)Sensoren angelegt, z.B.: PackInputPowerIntegral
.
Dieser nutzt SF Pack Input Power Filtered
als Input für die Bildung des Energiewertes. Folgende Bilder zeigen das an der Oberfläche.
Und mit diesen beiden neuen Sensoren könnt Ihr im HA-Energie-Dashboard Euren Akku konfigurieren.
Achtung: achtet auf Eure Namensgebung!! Entitäten/Sensoren heißen bei Euch ggf. anders!!!