Repository navigation
Releases: dr-apple/Solar-Load-Split
Release list
v1.0.2
Home Assistant 2026.8 thread-safety fix.
- Keeps delayed automatic discovery callbacks on Home Assistant's event loop.
- Prevents
hass.async_create_taskfrom being called from a worker thread. - Restores reliable delayed sensor discovery after startup.
- Includes regression coverage.
Solar Load Split 1.0.1
Home Assistant 2026.8 compatibility release. Fixes startup availability, entity naming migration, discovery retries, option reloads, validation, and adds automated tests.
V0.30
das war ein echter Integrationsfehler und ich habe ihn gefixt.
Die Ursache war, dass pv_device_split an zwei Stellen hass.async_create_task(...) benutzt hat. Diese Variante darf nur direkt im Event-Loop-Thread aufgerufen werden. In deinem Fall wurde das offenbar manchmal aus einem anderen Kontext ausgelöst, daher die Meldung:
custom integration 'pv_device_split' calls hass.async_create_task from a thread other than the event loop
Ich habe die Stellen auf die thread-sichere HA-Variante umgestellt:
discovery.py
config_flow.py
V0.20
Solar Load Split kann pro Gerät jetzt optional einen Geräte-Energiesensor nutzen, also den kWh-Sensor vom gleichen Shelly/Zwischenstecker. Wenn du den setzt, verteilt die Integration nicht mehr nachgerechnete Energie aus Watt, sondern die echten kWh-Deltas des Messgeräts auf PV und Netz. Genau das sollte solche Ausreißer wie bei der Klima deutlich sauberer machen.
Die Änderungen sitzen in config_flow.py, sensor.py, const.py und den Übersetzungen in de.json. Die Doku habe ich auch angepasst in README.md.
Geprüft mit:
python3 -m compileall -q custom_components/pv_device_split
Wichtig für dich jetzt: Bei den bestehenden Einträgen auf Konfigurieren gehen und den passenden Energiesensor des Geräts (optional) auswählen. Erst dann läuft der jeweilige Eintrag auf der neuen, genaueren kWh-Basis. Für Obergeschoss Klima würde ich genau damit anfangen.
V0.19
ich glaube jetzt ist der wahrscheinlichere Fehler gefunden: nicht mehr die Aufteilungsformel selbst, sondern die Rundung vor der Energieintegration.
Bisher hat Solar Load Split erst die Leistung auf 0,01 kW gerundet und dann daraus die kWh aufsummiert. Dadurch konnten sich PV- und Netz-Tageswerte über den Tag merklich vom echten Gesamtverbrauch wegdrücken.
Ich habe das geändert:
intern jetzt volle Präzision
Rundung auf 2 Nachkommastellen erst bei der Anzeige
dadurch sollten PV + Netz viel sauberer zum Gesamtverbrauch passen
Geändert in sensor.py, Doku ergänzt in README.md.
Geprüft mit:
python3 -m compileall -q custom_components/pv_device_split
Wichtig: Bereits angelaufene Tageswerte werden dadurch nicht rückwirkend repariert. Am besten Integration neu laden und den nächsten frischen Tageslauf vergleichen. Wenn es dann immer noch stark abweicht, schauen wir als Nächstes auf den Quellsensor für den Hausverbrauch und ob er zeitlich wirklich exakt zur gleichen Basis zählt wie unsere PV-/Netz-Tageszähler.
V0.18
Der Netzsensor misst am Hausanschluss nachdem das Auto schon lädt. Deshalb war die alte Formel falsch.
Alt war sinngemäß:
PV = nur die sichtbare Einspeisung
Das ist beim Überschussladen falsch, weil dein Auto den PV-Überschuss ja schon verbraucht hat. Wenn nach dem Laden noch wenig oder keine Einspeisung sichtbar ist, heißt das nicht, dass das Auto aus dem Netz geladen hat.
Ich habe die Berechnung jetzt geändert auf:
netz_anteil = aktueller positiver Netzbezug, begrenzt auf Geräte-Leistung
pv_akku_anteil = Geräte-Leistung - netz_anteil
Beispiel:
Auto lädt: 11.000 W
Haus-Netzbezug: 500 W
Auto Netz = 500 W
Auto PV/Akku = 10.500 W
Bei Einspeisung oder innerhalb der Netz-Totzone:
Auto Netz = 0 W
Auto PV/Akku = komplette Auto-Leistung
Damit kann dein Auto-Sensor nicht mehr mehr Netz-kWh zählen als am Hausanschluss überhaupt bezogen wurde. In deinem Beispiel mit nur 3,16 kWh realem Netzbezug hätte 7,18 kWh Auto-Netzbezug also genau aus der alten falschen Logik kommen können.
Geändert in sensor.py und die Berechnungsbeschreibung in README.md angepasst.
V0.17
Ich habe die Totzone jetzt korrigiert:
-100 W bis +100 W = PV/Akku-Versorgung
Also bei deinem Beispiel:
Gerät zieht 500 W
Netzsensor schwankt bei +9 W bis +80 W
Netz-Totzone steht auf 100 W
Dann rechnet Solar Load Split jetzt:
PV Leistung = 0,50 kW
Netz Leistung = 0,00 kW
Und die kWh laufen entsprechend auf PV Energie, nicht auf Netz und nicht ins Nirvana.
Geändert in sensor.py und die README-Erklärung in README.md angepasst.
V0.16
Es gibt eine neue Einstellung „Netz-Totzone“ in Watt.
Standard ist jetzt:
Netz-Totzone = 100 W
Bedeutet konkret:
Netzsensor +9 W bis +80 W → wird als neutral behandelt
kein Netzbezug wird gezählt
keine PV-Einspeisung wird gezählt
erst oberhalb der Totzone zählt es wieder als echter Netzbezug
erst unterhalb der negativen Totzone zählt es wieder als echte Einspeisung
Das passt gut für Batterie-/Wechselrichter-Regelrauschen. Wenn dein Haus gerade aus der Batterie versorgt wird und der Zähler nur so kleine positive Werte pendelt, zählt Solar Load Split dadurch nicht mehr fälschlich Netzbezug.
Du findest den Wert an diesen Stellen:
Beim ersten Einrichten:
Solar Load Split einrichten → Netz-Totzone
Bei bestehenden Einträgen:
Einstellungen → Geräte & Dienste → Solar Load Split → Konfigurieren → Netz-Totzone
Standardwert ist:
100 W
Für deinen Fall würde ich so starten:
100 W, wenn die Schwankungen meistens bis ca. 80 W gehen
150 W, wenn es öfter kurze Peaks über 100 W gibt
0 W, wenn du die Filterung komplett ausschalten willst
Wichtig: Die Totzone wirkt auf deinen Netz-/Einspeisesensor nach optionaler Vorzeichenumkehr. Also weiterhin:
positiv = Netzbezug
negativ = Einspeisung
-100 W bis +100 W = neutral, wird nicht gezählt
V0.15
Der Netz-/Einspeisesensor bleibt weiterhin so interpretiert:
positiv = Netzbezug
negativ = Einspeisung
Der Puffer macht jetzt keinen Durchschnitt der Leistung mehr. Vorher konnte genau dadurch bei schwankenden Werten, Akku-Regelung oder kurzer Einspeisung rechnerisch trotzdem Netzbezug entstehen. Jetzt entprellt der Puffer nur noch den Vorzeichenwechsel zwischen Netzbezug und Einspeisung. Die aktuelle Leistung bleibt erhalten.
Außerdem ist der Standard jetzt:
Zeitlicher Netzpuffer = 0 Sekunden
Wichtig für bereits eingerichtete Geräte: Wenn dort noch ein alter Pufferwert gespeichert ist, bitte in Home Assistant bei der Integration auf Konfigurieren gehen und den Wert testweise auf 0 setzen. Danach Integration neu laden oder Home Assistant einmal neu starten.