PV-Überschussladen mit go-eCharger, Ledvance Hybrid-Wechselrichter und Tibber-PreissteuerungHallo 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:
| Modus | Beschreibung |
| Winter | Tibber-Preissteuerung, Batterie komplett gesperrt |
| Smart | Standardmodus 16A / 3 Phasen |
| PV | dynamische PV-Überschussladung |
| Turbo | maximale Ladeleistung |
| Tibber | reine 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 verwendenGrid_FeedIn ist bei Netzbezug immer 0.
Dadurch würde die Regelung den Ladestrom nicht reduzieren.
Battery_Discharge_Limit ist nur ein SetpointWenn 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.
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
Hallo, habe es im ersten Beitrag nun mit Codeschnippsel und am Ende alle DeviceList als Text Datei mit eingefügt.
Gruß Albi