Energie-Dashboard: Beispiel Fronius Gen24 & BYD Speicher
Das Home Assistant Energy Dashboard zeigt alle relevanten Energie-Daten in einer fertigen Übersicht. Als Basis für das Dashboard können die Leistungsdaten unterschiedlichster Hersteller oder Komponenten verwendet werden. Damit die Oberfläche mit Daten versorgt wird, werden lediglich Sensoren mit den entsprechenden Leistungsdaten benötigt.
Initiale Einrichtung
Die Einrichtung des Energy-Dashboards erfolgt unter "Einstellungen", "Dashboards", "Energy":
Das Dashboard kann mit Sensoren für das Stromnetz: Bezug und Einspeisung, mit Details zur Stromerzeugung von einem oder mehrerer Wechselrichter, sowie den Leistungsdaten eines Batteriespeichers bedient werden. Zudem kann der Gasverbrauch, Wasserverbrauch oder Stromverbrauch einzelner Geräte visualisiert werden.
Soweit so einfach, für den Einsatz im Energy-Dashboard müssen die Sensoren aber bestimmte Kriterien erfüllen
Sensor-Voraussetzungen
Das Energie-Dashboard kann Sensoren mit der Eigenschaft "state_class: total_increasing" verwenden. Die Leistungsdaten für den Stromverbrauch, Einspeisung, Sonnenkollektoren, Batteriespeicher oder einzelne Geräte setzen zudem als Einheit ( unit_of_measurement) Wh oder kWh und die Geräteklasse (device_class) Energy voraus:
- state_class: total_increasing
- unit_of_measurement: Wh oder kWh
- device_class: energy
Ein Blick in die Entwicklerwerkzeuge / Zustände verrät uns, ob der Sensor bereit für die Verwendung im Energie-Dashboard ist:
Details zu den Eigenschaften und den dahinterliegenden Datenbanktabellen, siehe: HA Verlauf: mehr als 10 Tage? Long Time Statistic (LTS)
Der Teufel liegt im Detail
Mein Setup besteht aus einem Smart Meter, einem Fronius Gen24 Wechselrichter mit 2 Strings: Ost/West und einer BYD-HVS-Batterie. Für die PV-Panels meines Balkons verwende ich zusätzlich einen Hoymiles Mikrowechselrichter.
Abhängig davon, wie die Sensoren der jeweiligen Integrationen zur Verfügung stehen, müssen diese eventuell über einen Helfer aufbereitet werden. Als Beispiel bietet die Fronius-Integration für den Gen24 Wechselrichter einen Gesamtzähler für die gesamte produzierte Energie: leider aber inklusive der Energie die von der Batterie abgerufen wird. Somit kann der Energiezähler des Wechselrichters nicht für die PV-Leistung der Panels, im Dashboard "Sonnenkollektoren" verwendet werden. Laut der offizielle Home Assistant Dokumentation werden Batteriesysteme nicht unterstützt:
Fronius Integration: "Batteriesysteme" werden nicht direkt unterstützt.
Die offizielle Home Assistant Dokumentation empfiehlt die Verwendung eines "Riemann Summenintegralsensor" Helfers für die PV-Panels.
Der Summenintergralsensor hat an dieser Stelle einen entscheidenden Nachteil: sollte Home Assistant nicht verfügbar sein - und sei es nur für ein Upgrade auf eine neuere Version - würde der Sensor die in der Zwischenzeit angefallene Energie nicht zählen. Aus diesem Grund versuche ich den Summenintegralsensor möglichst zu vermeiden und bevorzugt Gesamtzähler zu verwenden. Im Falle des Fronius Gen24 Wechselrichter liefert dieser über Modbus für jeden MPPT-Tracker auch die gesamt erzeugte PV-Leistung der Panels. Um möglichst einfach auf die Modbus-Werte zuzugreife, kann die HACS-Integration "SunSpec" verwendet werden:
Details zur Modbus-Einrichtung und Sunspec, siehe: Fronius: Daten & Einstellungen übers Netzwerk (Modbus).
Die für das Energy-Dashboard relevanten Werte liefert das Gerät: "Multiple MPPT Inverter Extension Model":
Die Entität: Module 0 Lifetime Energy (sonsor.fronius_mppt_module_0_lifetime_energy) spiegelt die gesamte erzeugte Energie von String 1 wider und Module 1 Lifetime Energy die Energie von String 2:
Die Entitäten können entweder direkt und einzeln, oder zusammengefasst über einen Helfer ins Dashboard eingebunden werden. Nachdem ich die PV-Panels anfangs ohne Batterie über den Gesamtzähler des Wechselrichters eingebunden habe und die Statistik-Daten weiterführen wollte, habe ich die beiden MPPT-Werte über einen Helfer-Sensor zu einer Entität zusammengefasst:
Source-Code für das Zustandstemplate:
{% if states('sensor.fronius_mppt_module_0_lifetime_energy') | is_number
and
states('sensor.fronius_mppt_module_1_lifetime_energy') | is_number
%}
{{ (states("sensor.fronius_mppt_module_0_lifetime_energy") | float + states("sensor.fronius_mppt_module_1_lifetime_energy") | float) }}
{% else %}
{{ states('sensor.pv_dach_energy') }}
{% endif %}
Die Prüfung "is_number" stellt sicher, dass der letzte verfügbare Wert verwendet wird, auch wenn die Integration kurz keine Daten liefern sollte: Was für Module 0 und 1 kein Problem darstellt, sehr wohl aber für die Werte von Module 2 und 3:
Lifetime für Module 2 und 3: Batterie laden und entladen:
Interessant sind an dieser Stelle auch die beiden MPPT Lifetime-Werte von Module 2 und Module 3:
Module 2 zählt die Energie mit der eine angeschlossene Batterie geladen wurde und Module 3 die Energie welche der Batterie gesamt entnommen wurde. Die beiden Werte für die Batterie haben aber ein Problem: Die Daten sind nicht immer verfügbar und wenn dann abwechselnd. Die Ursache für das Verhalten dürfte in der Modbus-Umsetzung von Fronius zu finden sein.
Nachdem die MPPT-Entität für das Entladen der Batterie relativ stabil geliefert wird, habe ich einen weiteren Template-Sensor dafür erstellt:
Source-Code für das Zustandstemplate:
{% if states('sensor.fronius_mppt_module_3_lifetime_energy') | is_number %}
{{ states("sensor.fronius_mppt_module_3_lifetime_energy") | float / 1000 }}
{% else %}
{{ states('sensor.byd_total_discharging') }}
{% endif %}
Auch hier kommt die Prüfung "is_number" zum Einsatz: hier ist diese essenziell, da damit der zuletzt aufgerufene Wert zur Verfügung steht: zumindest über länger Phasen hinweg. Sollte der Wert nicht mehr aktualisiert werden, hilft ein Neuladen der kompletten Sunspec-Integration:
An dieser Stelle bin ich mir unsicher, ob eine Integration die nur zeitweise die gewünschten Daten liefert die richtige Lösung sein kann. Die Verwendung der MPPT-Tracker-Werte für die Batterie ist keine schöne Sache, aber es kommt noch unschöner: die Verwendung einer Automatisierung für das Neustarten der Integration:
Workaround: Watchdog für das Neu laden der Integration
Der Vorteil des Gesamtzählers ist sicherlich, dass Daten die nicht erfasst wurden aufgeholt werden, sollte der Gesamtzähler wieder mal verfügbar sein. Kombiniert mit einer Automatisierung für das Neustarten der Integration liefert der Sensor bei mir konstant ab. Hier meine eingesetzte Automatisierung für das Überwachen der Integration und dessen Neustart im Fehlerfall:
alias: Sunspec MPPT Watchdog
description: ""
trigger:
- platform: time_pattern
hours: /3
enabled: true
- platform: state
entity_id:
- sensor.fronius_mppt_module_3_lifetime_energy
to: unavailable
for:
hours: 0
minutes: 30
seconds: 0
condition:
- condition: state
entity_id: sensor.fronius_mppt_module_3_lifetime_energy
state: unavailable
enabled: true
action:
- service: homeassistant.reload_config_entry
data: {}
target:
device_id: ???
mode: single
trace:
stored_traces: 100
Für den Entladezähler bevorzuge ich die Sunspec-Integration und für den Ladezähler verwende ich dennoch einen Summenintegralsensor, da der Ladezähler nur sehr selten verfügbar ist. Der Ladezähler ist aufgrund der Ladeverluste etwas höher als der Entladezähler, für die Langzeitstatistik meiner Meinung nach aber nicht ganz so relevant. Nicht ganz so relevant zumal der Entladezähler einen Aufschluss darüber gibt, wie viel Energie von der Batterie zur Verfügung gestellt und somit durch den Einsatz der Batterie nicht vom Netz abgerufen werden musste.
Riemann Summenintegralsensor
Als Basis für den Summenintegralsensor werden die aktuellen Leistungsdaten benötigt. Die Informationen von der Fronius Integration für Byd sind hier ziemlich spärlich:
Zwar könnten hier die Leistung mit Strom * Spannung in einem eigenen Template-Sensor berechnet werden, besser ist aber die Verwendung der Fronius SolarNet-Integration.
Die Fronius SolarNet-Integration ist hier etwas gesprächiger, besitzt aber - wie bereits erwähnt - auch keinen Gesamtzähler, aber zumindest die Leistung von der Batterie: "SolarNet Leistung von der Batterie":
Der Wert für SolarNet Leistung von der Batterie spiegelt die Lade und Entladeleistung wider. Positive Werte entsprechen der Entladeleistung, negative Werte der Ladeleistung. Für die Verwendung im Energie-Dashboard benötigen wir an dieser Stelle zwei unterschiedliche Zähler, daher habe für den Ladezähler ein eigenes Template erstellt, welches nur die Negativen Werte verwendet:
Template-Sensor: "sensor.byd_charging"
{{ 0 - states('sensor.solarnet_leistung_von_der_batterie') | float if states('sensor.solarnet_leistung_von_der_batterie') | float < 0 else 0 }}
Um aus den Daten des Leistungszählers einen Energiezähler zu erstellen, kann ein "Riemann Summenintegralsensor - Helfer" verwendet werden:
Quellen
- Home-Assistant Integration Fronius: https://www.home-assistant.io/integrations/fronius/
- Github Issue Sunspec: "Fronius temporariliy "unavailabe" data on MPPTs 2 and 3, used for the battery": https://github.com/CJNE/ha-sunspec/issues/138
Fazit
Das Home Assistant Energy-Dashboard ist großartig, zumal mit sehr wenig Aufwand alle relevanten Daten für den Energieverbrauch und der Energieerzeugung aufbereitet werden können. Im Vergleich zur Weboberfläche bestimmter Wechselrichterhersteller unterstützt Home Assistant unterschiedlichste Hersteller und zudem die Möglichkeit die Leistungsdaten verschiedenster Verbraucher auszuwerten.
{{percentage}} % positiv