Skip to content

Devirex/FHEM-SolarPower

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

SolarPower – FHEM Module zur Solarstrom-Optimierung

Übersicht

Das SolarPower-Modulpaket besteht aus zwei FHEM-Modulen, die zusammenarbeiten, um den Eigenverbrauch von Solarstrom zu maximieren:

  • 77_SolarPowerController.pm – Der zentrale Controller, der die verfügbare Solarleistung überwacht und Verbraucher intelligent ein-/ausschaltet.
  • 77_SolarPowerConsumer.pm – Repräsentiert einen steuerbaren Verbraucher mit Zeitplänen, Prioritäten und Laufzeitbeschränkungen.

Funktionsweise

Der SolarPowerController liest die aktuell verfügbare Solarleistung (Überschuss) aus einem konfigurierten Reading und entscheidet bei jeder Änderung, welche Verbraucher ein- oder ausgeschaltet werden sollen. Die Entscheidung basiert auf:

  1. Priorität – Verbraucher mit höherer Priorität werden bevorzugt.
  2. Notwendige Laufzeit – Geräte, deren Mindestlaufzeit noch nicht erreicht ist, werden priorisiert.
  3. Verfügbare Leistung – Ein Gerät wird nur eingeschaltet, wenn genug Überschuss vorhanden ist.
  4. Min. Ein-/Ausschaltzeit – Verhindert zu häufiges Schalten.
  5. Eltern-Abhängigkeiten – Geräte können von anderen abhängen (z.B. Ventilator-Stufen).

Installation

Die Moduldateien in das FHEM-Modulverzeichnis kopieren:

cp 77_SolarPowerController.pm /opt/fhem/FHEM/
cp 77_SolarPowerConsumer.pm /opt/fhem/FHEM/

Anschließend FHEM neu laden:

reload 77_SolarPowerController
reload 77_SolarPowerConsumer

Konfiguration

SolarPowerController

define <name> SolarPowerController <Device>:<Reading>

Parameter:

Parameter Beschreibung
Device FHEM-Gerät, das die Solarleistung liefert (z.B. ein Wechselrichter)
Reading Reading des Geräts mit dem aktuellen Leistungsüberschuss in Watt

Beispiel:

define PV_Controller SolarPowerController Inverter:GridFeedIn

Der Controller reagiert automatisch auf Änderungen des konfigurierten Readings und steuert alle definierten SolarPowerConsumer.


SolarPowerConsumer

define <name> SolarPowerConsumer <device>

Parameter:

Parameter Beschreibung
device Das zu steuernde FHEM-Gerät

Beispiel:

define PV_Fridge SolarPowerConsumer Fridge

Set-Befehle

Befehl Beschreibung
on Gerät einschalten (nutzt onCmd falls definiert)
off Gerät ausschalten (nutzt offCmd falls definiert)
enable Steuerung durch den Controller aktivieren
disable Steuerung durch den Controller deaktivieren
reset_daily_runtime Tägliche Laufzeit zurücksetzen

Attribute

Attribut Format Beschreibung
priority Zahl Priorität des Geräts (höher = wichtiger)
power Zahl (Watt) Leistungsaufnahme des Geräts
schedule Zeitplan Zeitfenster für die Steuerung (siehe unten)
minDailyRuntime HH:MM Minimale tägliche Laufzeit
maxDailyRuntime HH:MM Maximale tägliche Laufzeit
minOnTime HH:MM Minimale Einschaltdauer pro Zyklus
minOffTime HH:MM Minimale Ausschaltdauer vor erneutem Einschalten
onCmd Befehl Alternativer Einschaltbefehl für das Gerät
offCmd Befehl Alternativer Ausschaltbefehl für das Gerät
stateReading Reading:Wert Reading zur Zustandserkennung
parent Name Übergeordneter SolarPowerConsumer (Abhängigkeit)
disabled - Deaktiviert den Consumer

Schedule-Format

HH:MM-HH:MM[|Tage][,HH:MM-HH:MM[|Tage]]

Tages-Codes:

Code Bedeutung
0 Sonntag
1 Montag
2 Dienstag
3 Mittwoch
4 Donnerstag
5 Freitag
6 Samstag
7 Wochenende
8 Arbeitstage
9 Tag vor Wochenende/Feiertag
X Tag vor Arbeitstag

Beispiele:

# Täglich 08:00 bis 18:00
attr PV_Fridge schedule 08:00-18:00

# Mo-Mi 09:00-17:00, vor Arbeitstag 08:00-18:00, vor Wochenende 07:00-19:00
attr PV_Fridge schedule 09:00-17:00|123,08:00-18:00|X,07:00-19:00|9

# Zwei Zeitfenster am gleichen Tag (dürfen sich nicht überschneiden)
attr PV_Fridge schedule 09:00-12:00|123,13:00-19:00|123

Das Gerät wird am Ende jedes Zeitfensters automatisch ausgeschaltet.

Readings

Reading Beschreibung
state Aktueller Zustand (on/off/defined)
control Steuerungszustand (enabled/disabled)
dailyRuntime Bisherige Laufzeit heute (HH:MM)
availableRuntime Verbleibende verfügbare Laufzeit im aktuellen Schedule
nextOn Zeitpunkt der nächsten geplanten Aktivierung
nextOff Zeitpunkt der nächsten geplanten Deaktivierung
power Aktuell gemessene Leistung des Geräts

Praxisbeispiel: Ventilator mit mehreren Stufen

Ein Ventilator mit 3 Geschwindigkeitsstufen (100W, +50W, +40W):

# Stufe 1: 100W
define PV_Fan1 SolarPowerConsumer Fan
attr PV_Fan1 power 100
attr PV_Fan1 onCmd speed 1
attr PV_Fan1 offCmd off
attr PV_Fan1 stateReading speed:1
attr PV_Fan1 priority 3
attr PV_Fan1 schedule 08:00-20:00

# Stufe 2: zusätzlich 50W (braucht Stufe 1)
define PV_Fan2 SolarPowerConsumer Fan
attr PV_Fan2 power 50
attr PV_Fan2 onCmd speed 2
attr PV_Fan2 offCmd speed 1
attr PV_Fan2 stateReading speed:2
attr PV_Fan2 priority 2
attr PV_Fan2 parent PV_Fan1
attr PV_Fan2 schedule 08:00-20:00

# Stufe 3: zusätzlich 40W (braucht Stufe 2)
define PV_Fan3 SolarPowerConsumer Fan
attr PV_Fan3 power 40
attr PV_Fan3 onCmd speed 3
attr PV_Fan3 offCmd speed 2
attr PV_Fan3 stateReading speed:3
attr PV_Fan3 priority 1
attr PV_Fan3 parent PV_Fan2
attr PV_Fan3 schedule 08:00-20:00

Durch die parent-Abhängigkeit wird sichergestellt, dass Stufe 3 nur eingeschaltet wird, wenn Stufe 2 aktiv ist, und Stufe 2 nur wenn Stufe 1 aktiv ist.

Praxisbeispiel: Einfacher Verbraucher (Kühlschrank)

Ein Getränkekühlschrank mit 60W, der täglich mindestens 3 Stunden laufen soll:

# MQTT-Gerät (z.B. Shelly) als Schalter
define MyFridge MQTT2_DEVICE

# SolarPowerConsumer für den Kühlschrank
define PV_MyFridge SolarPowerConsumer MyFridge
attr PV_MyFridge power 60
attr PV_MyFridge schedule 06:00-22:00
attr PV_MyFridge minDailyRuntime 03:00
attr PV_MyFridge minOnTime 00:05
attr PV_MyFridge minOffTime 00:05
attr PV_MyFridge room PV

Ergebnis-Readings im Betrieb:

Reading Beispielwert Beschreibung
state off Gerät aktuell ausgeschaltet
control enabled Steuerung aktiv
dailyRuntime 04:19 Heute bereits 4:19h gelaufen
availableRuntime 11:02 Noch 11:02h im Schedule verfügbar
nextOn 2026-05-22 06:00:00 Nächstes Einschalten morgen 06:00
nextOff 2026-05-21 22:00:00 Schedule-Ende heute 22:00
power 0 Aktuelle Leistung (0 = aus)

Der Controller schaltet den Kühlschrank bei Solarüberschuss ein und stellt sicher, dass die Mindestlaufzeit von 3 Stunden innerhalb des Zeitfensters 06:00–22:00 erreicht wird.

Steuerungslogik

Bei jeder Änderung der Solarleistung durchläuft der Controller folgende Schritte:

  1. Alle aktiven Consumer (control = enabled) sammeln
  2. Sortierung nach notwendiger Restlaufzeit und Priorität
  3. Für eingeschaltete Geräte: Wenn Mindesteinschaltzeit erreicht, Leistung zum Budget addieren und als abschaltbar markieren
  4. Für abschaltbare Geräte:
    • Einschalten erzwingen, wenn Mindestlaufzeit sonst nicht erreichbar
    • Mindest-Ausschaltzeit beachten
    • Maximale Tageslaufzeit prüfen
    • Parent-Abhängigkeiten prüfen
    • Bei genügend Überschuss einschalten, sonst ausschalten

Lizenz

GNU General Public License v2.0 – siehe GPL_V2.txt

(c) 2024-2025 Devirex

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages