Zum Inhalt springen

Was ist der Power-Splitter?

Der Power-Splitter analysiert den Stromverbrauch von E-Auto, Wärmepumpe, Haus und benutzerdefinierten Verbrauchern. Er teilt den Verbrauch auf in den Anteil, der mit Photovoltaik-Strom gedeckt wird, und den Anteil, der aus dem Netz stammt. Auf dieser Aufteilung beruhen die Verbrauchskosten je Verbraucher.

Dazu drei Hinweise:

  • Die Berechnung erfolgt für sämtliche Verbrauchswerte, die in der InfluxDB vorhanden sind. Das bedeutet, dass nicht nur zukünftige Messwerte, sondern auch die Messwerte der Vergangenheit berücksichtigt werden.

  • Die Berechnung erledigt ein eigener Docker-Container (der eigentliche Power-Splitter). Er läuft dauerhaft im Hintergrund, berechnet die Aufteilung und schreibt sie in ein neues Measurement der InfluxDB.

  • Der Power-Splitter setzt voraus, dass neben dem Hausverbrauch weitere Verbraucher überwacht werden, etwa ein E-Auto, eine Wärmepumpe oder benutzerdefinierte Verbraucher. Fehlen sie, gibt es nichts aufzuteilen. Dann genügt die Autarkie, die SOLECTRUS auch ohne den Power-Splitter berechnet.

Der Power-Splitter schreibt die folgenden Werte als Field in das Measurement power_splitter der InfluxDB:

  • wallbox_power_grid: Netzbezug der Wallbox, in Watt
  • house_power_grid: Netzbezug des Hauses, in Watt
  • heatpump_power_grid: Netzbezug der Wärmepumpe, in Watt
  • custom_power_XX_grid: Netzbezug eines benutzerdefinierten Verbrauchers (XX von 01 bis 20), in Watt
  • battery_charging_power_grid: Netzbezug der Batterie, in Watt

Beim Start prüft der Power-Splitter zunächst, ob Messwerte aus der Vergangenheit vorliegen, für die noch kein Split erfolgt ist. Diese arbeitet er nach, beginnend beim ältesten noch unbearbeiteten Tag. Je nach Datenmenge dauert das eine Weile, etwa 30 Minuten sind nicht ungewöhnlich.

Anschließend erfolgt die Berechnung für den aktuellen Tag. Der Power-Splitter läuft dann im Endlosmodus und berechnet den aktuellen Tag in einem vorgegebenen Intervall (in einer Installation mit HELIOS alle 5 Minuten) permanent neu, um hinzugekommene Messwerte zu berücksichtigen. Um Mitternacht wird der Tag abgeschlossen und der nächste Tag begonnen.

Mitunter sollen die berechneten Werte verworfen und neu berechnet werden, etwa nach einem nachträglichen Import historischer Messwerte.

Dafür bekommt der laufende Container das Signal USR1:

Terminal-Fenster
docker compose kill --signal USR1 power-splitter

Der Container beendet sich dabei nicht, sondern beginnt von vorn. Der Fortschritt steht im Protokoll. Danach wechselt er zurück in den Endlosmodus.

Ist die Vergangenheit abgearbeitet, leert der Power-Splitter den Redis-Cache und setzt die Tageszusammenfassungen zurück. Beides erledigt er selbst, denn die Zusammenfassungen enthalten auch seine Werte. Nötig sind dafür DB_HOST, DB_USER, DB_PASSWORD und REDIS_URL – in einer Installation mit HELIOS sind sie immer gesetzt.

Der Power-Splitter schreibt ein Protokoll ins Docker-Log, das im Normalfall so aussieht:

Power Splitter for SOLECTRUS, Version v1.0.2, built at 2026-05-26 15:10:41 +0200
Using Ruby 4.0.5 on platform aarch64-linux-musl
Copyright (c) 2024-2026 Georg Ledermann <georg@ledermann.dev>
https://github.com/solectrus/power-splitter
Accessing InfluxDB at http://influxdb:8086, bucket solectrus
Sensor initialization started
- Sensor 'grid_import_power' mapped to 'SENEC:grid_power_plus'
- Sensor 'house_power' mapped to 'SENEC:house_power'
- Sensor 'heatpump_power' mapped to 'Consumer:power'
- Sensor 'wallbox_power' mapped to 'SENEC:wallbox_charge_power'
- Sensor 'battery_charging_power' mapped to 'SENEC:bat_power_plus'
- Sensor 'custom_power_01' mapped to 'Washer:power'
- Sensor 'custom_power_02' mapped to 'Fridge:power'
- Sensor 'custom_power_03' mapped to 'KabelFritz:power'
- Sensor 'custom_power_04' mapped to 'Synology:power'
- Sensor 'custom_power_05' mapped to 'iMac:power'
- Sensor 'custom_power_06' mapped to 'Dishwasher:power'
- Sensor 'house_power' excluded 'heatpump_power'
Sensor initialization completed
Starting endless loop for processing current data...
2026-07-14 10:16:17 +0200 - Processing day 2026-07-14
Pushing 123 records to InfluxDB
Sleeping for 300 seconds...
...

Fehler protokolliert der Power-Splitter ebenfalls, etwa wenn die InfluxDB nicht erreichbar ist.

Der Power-Splitter ist in Ruby implementiert, der Quelltext ist auf GitHub verfügbar:
github.com/solectrus/power-splitter