<update> Intelligente PV-Überschussladung für E-Auto mit Akkuschutz

Begonnen von Albi, 02 März 2026, 23:22:02

Vorheriges Thema - Nächstes Thema

Albi

PV-Überschussladen mit go-eCharger, Ledvance Hybrid-Wechselrichter und Tibber-Preissteuerung

Hallo zusammen,

ich möchte mein Projekt zur intelligenten E-Auto-Ladesteuerung mit FHEM vorstellen.
Das System nutzt PV-Überschuss, Batterieschutz und Tibber-Strompreise, um das Auto möglichst günstig und grün zu laden. Über telebot werden mir auch Daten zugeschickt aufs Handy. und ich kann Abfragen über den Bot an Fhem schicken.

Ich habe ein paar Code Schnippsel mit dabei in der Anlage sind alle Device List abgelegt damit der Beitrag nicht zu lange wird ;-)

Eines noch, ohne KI hätte ich das nicht hinbekommen. Mein größter Helfer war ClaudeCode das direkt auf meinem Optiplex 3070 installiert wurde, auf dem mein FHEM läuft!

Hardware:

  • PV-Anlage mit Ledvance / Envertech Hybrid-Wechselrichter (Modbus TCP)
  • Hausbatterie am Wechselrichter
  • go-eCharger Wallbox
  • Shelly Plus 2PM für Status-LED in der Garage
  • Tibber dynamischer Stromtarif

---

# 1. Modus-Auswahl (Dummy)

Über einen Dummy werden die Lademodi gewählt.

define GoE_Modus dummy
attr GoE_Modus devStateIcon Winter:frost@blue:Smart Smart:robot@orange:PV PV:weather_sun@green:Turbo Turbo:text_max@black:Tibber Tibber:flamme@purple:Winter
attr GoE_Modus group Laden
attr GoE_Modus icon hue_room_garage
attr GoE_Modus room 0_E-Auto
attr GoE_Modus setList state:Winter,Smart,PV,Turbo,Tibber
attr GoE_Modus webCmd state

Verfügbare Modi:


ModusBeschreibung
WinterTibber-Preissteuerung, Batterie komplett gesperrt
SmartStandardmodus 16A / 3 Phasen
PVdynamische PV-Überschussladung
Turbomaximale Ladeleistung
Tibberreine Strompreissteuerung

---

# 2. go-eCharger Wallbox

define myGoE GoECharger 192.168.0.114
attr myGoE alias Wallbox GoE
attr myGoE cmdIcon on:electric_car_charger@green off:electric_car_charger@red
attr myGoE group Laden
attr myGoE icon electric_car_icon
attr myGoE interval 60
attr myGoE room 0_E-Auto
attr myGoE webCmd on:off

Das devStateIcon zeigt Ladezustand, Ampere und Phasen an.

---

# 3. Ledvance / Envertech Wechselrichter (Modbus TCP)

define Ledvance ModbusAttr 1 60 192.168.0.57:502 TCP
attr Ledvance event-on-change-reading .*
attr Ledvance group Solar Hausdach
attr Ledvance icon measure_photovoltaic_inst
attr Ledvance room 4_Solar

Beispiel wichtige Register:

attr Ledvance obj-i33057-reading PV_Leistung
attr Ledvance obj-i33057-type S32

attr Ledvance obj-i33139-reading Battery_SOC
attr Ledvance obj-i33139-type U16

attr Ledvance obj-i33130-reading Grid_Power_Meter
attr Ledvance obj-i33130-type S32

attr Ledvance obj-i33147-reading Leistung_Haus
attr Ledvance obj-i33147-type U16

Interpretation:

  • Grid_Power_Meter positiv → Einspeisung
  • Grid_Power_Meter negativ → Netzbezug

---

# 4. Tibber Strompreise

define Tibber HTTPMOD https://api.tibber.com/v1-beta/gql 900
attr Tibber extractAllJSON 1
attr Tibber requestHeader1 Authorization: Bearer API_TOKEN
attr Tibber requestHeader2 Content-Type: application/json
attr Tibber timeout 10
attr Tibber room 0_E-Auto
attr Tibber group Messen

UserReadings berechnen u.a.:

  • aktueller Preis
  • Preislevel
  • günstigste Stunde heute
  • günstigste Stunde morgen

---

# 5. Modus → Wallbox Steuerung

define n_LadeControl_GoE notify GoE_Modus:.* {
my $modus = ReadingsVal("GoE_Modus","state","Winter");

if ($modus eq "Smart") {
fhem("set myGoE on");
fhem("set myGoE amp_current 16");
fhem("set myGoE force_single_phase 3_Phases");
}

elsif ($modus eq "PV") {
fhem("set myGoE on");
fhem("set myGoE amp_current 6");
fhem("set myGoE force_single_phase 1_Phase");
}

elsif ($modus eq "Turbo") {
fhem("set myGoE on");
fhem("set myGoE amp_current 16");
}
}

---

# 6. Tibber Preissteuerung

define n_LadeControl_Tibber notify Tibber:current_price.* {
my $price = ReadingsVal("Tibber","current_price",99);
my $level = ReadingsVal("Tibber","price_level","EXPENSIVE");

if ($price > 30 || $level eq "EXPENSIVE") {
fhem("set myGoE off");
}

elsif ($level eq "NORMAL") {
fhem("set myGoE on");
fhem("set myGoE amp_current 10");
}

else {
fhem("set myGoE on");
fhem("set myGoE amp_current 16");
}
}

---

# 7. Automatischer PV / Tibber Wechsel

define n_PV_Tibber_Switch DOIF
([Ledvance:PV_Leistung] > 2000 and [?GoE_Modus] eq "Tibber")
(set GoE_Modus Smart)
DOELSEIF
([Ledvance:PV_Leistung] <= 2000 and ([?GoE_Modus] eq "Smart" or [?GoE_Modus] eq "PV"))
(set GoE_Modus Tibber)

attr n_PV_Tibber_Switch wait 300,300

---

# 8. Dynamische PV-Ampere-Regelung

define n_LadeControl_PV_Ampere notify Ledvance:Grid_Power_Meter.* {

my $feedin = ReadingsVal("Ledvance","Grid_Power_Meter",0);
my $current_amp = ReadingsVal("myGoE","amp_current",6);

my $available = $current_amp*230 + $feedin;
my $new_amp = int($available / 230);

$new_amp = 6 if ($new_amp < 6);
$new_amp = 16 if ($new_amp > 16);

if (abs($new_amp-$current_amp) >= 2) {
fhem("set myGoE amp_current $new_amp");
}

}

---

# 9. Batterie-Schutz

define n_LadeControl_Batterie notify myGoE:state {

my $state = Value("myGoE");
my $modus = ReadingsVal("GoE_Modus","state","Winter");

if ($state =~ /charging/ && $modus eq "Winter") {

```
 fhem("set Ledvance Battery_Force_Mode 1");
 fhem("set Ledvance Battery_Discharge_Limit 0");
```

}

elsif ($state =~ /finished|ready/) {

```
 fhem("set Ledvance Battery_Force_Mode 0");
 fhem("set Ledvance Battery_Discharge_Limit 0");
```

}

}

---

# 10. Ladestatistik

Die Statistik berechnet:

  • PV-Anteil
  • Batterie-Anteil
  • Netzanteil
  • Kosten
  • Ersparnis

Grundprinzip:

Kosten = Netzstrom × Tibber Preis
Ersparnis = (PV + Batterie) × Tibber Preis

---

# Erfahrungen

Grid_Power_Meter statt Grid_FeedIn verwenden

Grid_FeedIn ist bei Netzbezug immer 0.

Dadurch würde die Regelung den Ladestrom nicht reduzieren.

Battery_Discharge_Limit ist nur ein Setpoint

Wenn der Setpoint höher als die Hauslast ist, speist die Batterie ins Netz ein.

Hysterese einbauen

  • 5 Minuten für Moduswechsel
  • Ampereänderung erst ab 2A
  • Phasenwechsel mit 1000W Abstand

---

Viel Spaß beim Nachbauen 🙂
Bei Fragen gerne melden.
Fhem auf Optiplex 3070 mit Linux Mint

TabletUI mit Abfallkalender - Verkehrsmeldung über Google - Sonnoff mit Tasmota (mqtt) und Shelly (mqtt und mqtt2) - Alexa Verknüpfung - Benzinpreis auf Tablet UI über HTTPMOD - Wetter + Pollen - PV Überschußladung - Heizung über ESP32 Lesen und Steuern (mqtt)

Prof. Dr. Peter Henning

Nett, aber ohne Code kann das keiner nachvollziehen.

Das sollte also in allen Details im Wiki beschrieben werden, so wie wir das auch mit unseren "Projekten" gemacht haben.

LG

pah

Albi

Hallo, habe es im ersten Beitrag nun mit Codeschnippsel und am Ende alle DeviceList als Text Datei mit eingefügt.

Gruß Albi
Fhem auf Optiplex 3070 mit Linux Mint

TabletUI mit Abfallkalender - Verkehrsmeldung über Google - Sonnoff mit Tasmota (mqtt) und Shelly (mqtt und mqtt2) - Alexa Verknüpfung - Benzinpreis auf Tablet UI über HTTPMOD - Wetter + Pollen - PV Überschußladung - Heizung über ESP32 Lesen und Steuern (mqtt)