Autor Thema: Vorstellung E-Auto PV-Überschuss laden  (Gelesen 1650 mal)

Offline Nogga

  • Full Member
  • ***
  • Beiträge: 250
Vorstellung E-Auto PV-Überschuss laden
« am: 22 Juli 2022, 11:03:10 »
Meine Wallbox (Hardy Barth) kann zwar Überschuss-Laden, aber trotzdem hat das nicht so wirklich funktioniert und er hat mir regelmäßig meine Batterie (RCT Wechselrichter mit Batterie) leergesaugt.

Ich dachte mir, das kann ich besser ;-)

Wichtig: ich habe noch einen manuellen Umschalter zwischen 1 und 3 Phasigem Laden vor der Wallbox - damit kann ich runter bis auf rund 1500 Watt Ladeleistung (6A x 1 Phase x 240 Volt). Bei Bedarf, kann ich manuell auf 3 Phasen hochschalten.

Die Logik steckt in folgendem DOIF:

defmod Doif_Wallbox_Steuerung DOIF (\
## PV MODUS\
\
[$SELF:Mode] eq "PV" ## PV-Modus des DOIFs\
&& [Wallbox:pvmode] eq "manual" ## Manueller Modus\
&& [Wallbox:chargecontrols_01_connected] eq "1" ## Auto angesteckt\
\
&& [my_rct_device:battery_soc] >= 60 ## Batterie ist schon ausreichend geladen\
&& ([{sunrise()}-{sunset(-7200)}] || [my_rct_device:battery_soc] >= 90) ## bis maximal 2h vor Sonnenuntergang (damit die Batterie sich nochmal erholen kann) oder alternativ die Batterie noch voll...\
&& (\
[my_rct_device:power_solarCombined] ## PV-Leistung\
+ (6 * 240) ## Mindestladung, einphasig\
+ ([my_rct_device:power_battery] < 0 ? ([my_rct_device:power_battery] * -1 - 500) : 0) ## Batterie Ladung (= negativ) ignorieren, bis auf x Watt Reserve...\
- [my_rct_device:power_household_external] ## abzüglich Hausverbrauch\
+ [Wallbox:loading_power] ## abzüglich gegenwärtige Wallbox Ladung\
) >= ((6 * 240 * [Wallbox:phases_connected]) + 100)\
) \
{ \
## Prüfe wieviel Ampere noch möglich sind\
for (my $ampere = 16;; $ampere >= 6;; $ampere = $ampere - 2) \
{\
\
Log 5, "for check ampere: ".$ampere;;\
\
## checke ob PV-Leistung noch reicht\
if (\
(\
[my_rct_device:power_solarCombined] ## PV-Leistung\
+ (6 * 240) ## Mindestladung, einphasig\
+ ([my_rct_device:power_battery] < 0 ? ([my_rct_device:power_battery] * -1 - 500) : 0) ## Batterie Ladung (= negativ) ignorieren, bis auf x Watt Reserve...\
- [my_rct_device:power_household_external] ## abzüglich Hausverbrauch\
+ [Wallbox:loading_power] ## abzüglich gegenwärtige Wallbox Ladung\
)\
>= (($ampere * 240 * [Wallbox:phases_connected]) + 100)\
   )\
   \
{\
\
## Wenn die Batterie angezapft wird (unter 85%), dann gehe auf Minimal-Ladung...\
if (int(ReadingsVal('my_rct_device','battery_soc', '0') < 85))\
{\
$ampere = 6;;\
}\
\
## setze nur neu, wenn sich Werte ändern\
if ([$SELF:ampere] ne $ampere)\
{\
fhem("setreading $SELF ampere ".$ampere);;\
fhem("set Wallbox manual_amp ".$ampere);;\
Log 5, "neue ampere: ".$ampere;;\
}\
\
## Leistung reicht, also laden!\
fhem("setreading $SELF charge on");;\
fhem("set Wallbox charge start");; \
last;; ## Schleife abbrechen, wenn Wert gefunden \
\
}\
\
}\
}\
DOELSEIF\
(\
## MANUELL Modus\
\
(\
[$SELF:Mode] eq "ManualMin" \
|| [$SELF:Mode] eq "ManualMax"\
|| [$SELF:Mode] eq "MinPlusPV"\
)\
&& [Wallbox:pvmode] eq "manual" ## Manueller Modus\
&& [Wallbox:chargecontrols_01_connected] eq "1" ## Auto angesteckt\
) \
{ \
\
## setze nur neu, wenn sich Werte ändern\
if ("[$SELF:Mode]" eq "ManualMin")\
{\
fhem("setreading $SELF ampere 6");;\
fhem("set Wallbox manual_amp 6");;\
}\
elsif ("[$SELF:Mode]" eq "MinPlusPV")\
{\
my $ampere;;\
\
## Prüfe wieviel Ampere noch möglich sind\
for ($ampere = 16;; $ampere >= 6;; $ampere = $ampere - 2) \
{\
\
Log 5, "for check ampere: ".$ampere;;\
\
## checke ob PV-Leistung noch reicht\
if (\
(\
[my_rct_device:power_solarCombined] ## PV-Leistung\
+ (6 * 240) ## Mindestladung, einphasig\
+ ([my_rct_device:power_battery] < 0 ? ([my_rct_device:power_battery] * -1 - 500) : 0) ## Batterie Ladung (= negativ) ignorieren, bis auf x Watt Reserve...\
- [my_rct_device:power_household_external] ## abzüglich Hausverbrauch\
+ [Wallbox:loading_power] ## abzüglich gegenwärtige Wallbox Ladung\
)\
>= (($ampere * 240 * [Wallbox:phases_connected]) + 100)\
   )\
\
{\
\
## Wenn die Batterie angezapft wird (unter 85%), dann gehe auf Minimal-Ladung...\
if (int(ReadingsVal('my_rct_device','battery_soc', '0') < 90))\
{\
$ampere = 6;;\
}\
\
## setze nur neu, wenn sich Werte ändern\
if ([$SELF:ampere] ne $ampere)\
{\
fhem("setreading $SELF ampere ".$ampere);;\
fhem("set Wallbox manual_amp ".$ampere);;\
Log 5, "neue ampere: ".$ampere;;\
} \
last;; ## Schleife abbrechen, wenn Wert gefunden \
}\
}\
\
fhem("setreading $SELF ampere $ampere");;\
fhem("set Wallbox manual_amp $ampere");;\
} \
else\
{\
fhem("setreading $SELF ampere 16");;\
fhem("set Wallbox manual_amp 16");;\
}\
\
## Ladung starten!\
fhem("setreading $SELF charge on");; \
fhem("set Wallbox charge start");; \
}\
DOELSE\
{\
Log 5, "off check";;\
fhem("setreading $SELF ampere 6");;\
fhem("setreading $SELF charge off");;\
Log 5, "neue ampere 6 und off";;\
\
fhem("set Wallbox manual_amp 6");;\
fhem("set Wallbox charge stop");;\
}
attr Doif_Wallbox_Steuerung checkall all
attr Doif_Wallbox_Steuerung do always
attr Doif_Wallbox_Steuerung group Auto
attr Doif_Wallbox_Steuerung readingList Mode
attr Doif_Wallbox_Steuerung room Automatisierung,Steuerung
attr Doif_Wallbox_Steuerung setList Mode:PV,MinPlusPV,ManualMin,ManualMax
attr Doif_Wallbox_Steuerung wait 60:30:180
attr Doif_Wallbox_Steuerung webCmd Mode

Und das ist das Ergebnis (angehängt). Den Peak um 8:45 ignorieren - das war ein Inseltest meiner PV-Anlage...

Kurz zur Funktionsweise:
Zunächst prüft er ob ein Auto angeschlossen ist und die PV Leistung abzüglich Hausleistung und minimaler Wallbox-Ladeleistung einen Überschuss hergibt. Wenn ja, dann durchläuft er eine Schleife und zählt von maximaler Ladung (16 A) runter auf minimale Ladeleistung (6 A) - sobald diese gefunden wurde startet die Ladung.
Das ganze mit einer Hysterese von 60 Sekunden für Start und Einstellung Stromstärke. Abschalten erst nach 5 Min (um Wolkenzüge, Wasserkocher, etc. abzufangen).
« Letzte Änderung: 15 November 2022, 17:12:22 von Nogga »
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Nogga

  • Full Member
  • ***
  • Beiträge: 250
Antw:Vorstellung E-Auto PV-Überschuss laden
« Antwort #1 am: 27 Juli 2022, 22:37:53 »
Habe noch eine Zukauf-Logik hinzugebaut, inspiriert von
https://forum.fhem.de/index.php/topic,123644.0.html

Offline Nogga

  • Full Member
  • ***
  • Beiträge: 250
Antw:Vorstellung E-Auto PV-Überschuss laden
« Antwort #2 am: 28 Juli 2022, 12:11:31 »
Anbei noch ein schönes Chart von vorgestern, dass die Funktionsweise nochmal schön illustriert.
Das zweite "wilde" Chart hat mehr Ladung aber keine schöne Kurve zeigt aber, dass auch bei Wolkenhimmel die Batterie (bzw. das Netz) selten (= Hysterese) bis gar nicht belastet wird...

Offline immerdasgleiche

  • New Member
  • *
  • Beiträge: 9
Antw:Vorstellung E-Auto PV-Überschuss laden
« Antwort #3 am: 06 September 2022, 18:20:59 »
Schönes Projekt! Habe das gleiche Problem.

Wie hast du deine Hardy Barth Wallbox in FHEM eingebunden? Ich habe ein passendes Modul bis jetzt nicht finden können :/

Offline Nogga

  • Full Member
  • ***
  • Beiträge: 250
Antw:Vorstellung E-Auto PV-Überschuss laden
« Antwort #4 am: 07 September 2022, 08:06:54 »
Ich habe kein Modul genutzt, sondern die REST-API und das HTTPMOD-Modul drangekoppelt:

http://apidoc.ecb1.de/#/

Das ist das HTTMOD-Device. Aber natürlich komplett auf meine Bedürfnisse zugeschnitten.
Ich nutze den manuellen Modus für meine PV-Steuerung.

defmod Wallbox HTTPMOD http://192.168.178.152/api/v1/all 60
attr Wallbox DbLogInclude wallbox_meter,loading_power
attr Wallbox eventMap /charging_mode eco:eco/charging_mode quick:quick/charging_mode manual:manual/pv_overage true:AI on/pv_overage false:AI off
attr Wallbox extractAllJSON 1
attr Wallbox get01ExtractAllJSON 1
attr Wallbox get01Name pvmode
attr Wallbox get01Poll 1
attr Wallbox get01PollDelay 60
attr Wallbox get01URL http://192.168.178.152/api/v1/pvmode
attr Wallbox get02ExtractAllJSON 1
attr Wallbox get02Name ai_mode
attr Wallbox get02Poll 1
attr Wallbox get02PollDelay 60
attr Wallbox get02URL http://192.168.178.152/api/v1/chargecontrols/1/mode/eco/startstop
attr Wallbox get03CheckAllReadings 1
attr Wallbox get03JSON 1-0:1.8.0
attr Wallbox get03Name wallbox_meter
attr Wallbox get03Poll 1
attr Wallbox get03PollDelay 60
attr Wallbox get03URL http://192.168.178.152/api/v1/meters/1
attr Wallbox getHeader1 Content-Type: application/json
attr Wallbox group Auto
attr Wallbox reading1JSON meter_data_1-0:1.8.0
attr Wallbox reading1Name wallbox_meter
attr Wallbox reading2JSON meter_data_1-0:1.4.0
attr Wallbox reading2Name loading_power
attr Wallbox reading3JSON meter_data_1-0:32.4.0
attr Wallbox reading3Name L1_voltage
attr Wallbox reading4JSON meter_data_1-0:52.4.0
attr Wallbox reading4Name L2_voltage
attr Wallbox reading5JSON meter_data_1-0:72.4.0
attr Wallbox reading5Name L3_voltage
attr Wallbox reading6JSON chargecontrols_01_manualmodeamp
attr Wallbox reading6Name current_manual_amp
attr Wallbox room Steuerung
attr Wallbox set01Data pvmode=$val
attr Wallbox set01FollowGet pvmode
attr Wallbox set01Header Accept: application/json
attr Wallbox set01Hint eco,quick,manual
attr Wallbox set01Method POST
attr Wallbox set01Name charging_mode
attr Wallbox set01TextArg eco,quick,manual
attr Wallbox set01URL http://192.168.178.152/api/v1/chargecontrols/1/mode
attr Wallbox set02Data autostartstop=$val
attr Wallbox set02FollowGet ai_mode
attr Wallbox set02Header Accept: application/json
attr Wallbox set02Hint true,false
attr Wallbox set02Method POST
attr Wallbox set02Name pv_overage
attr Wallbox set02TextArg true,false
attr Wallbox set02URL http://192.168.178.152/api/v1/chargecontrols/1/mode/eco/startstop
attr Wallbox set03Data empty
attr Wallbox set03Header Accept: application/json
attr Wallbox set03Hint start,stop
attr Wallbox set03Method POST
attr Wallbox set03Name charge
attr Wallbox set03TextArg start,stop
attr Wallbox set03URL http://192.168.178.152/api/v1/chargecontrols/1/$val
attr Wallbox set04Data manualmodeamp=$val
attr Wallbox set04FollowGet pvmode
attr Wallbox set04Header Accept: application/json
attr Wallbox set04Hint 6,6.5,7,7.5,8,8.5,9,9.5,10,10.5,11,11.5,12,12.5,13,13.5,14,14.5,15,15.5,16
attr Wallbox set04Method POST
attr Wallbox set04Name manual_amp
attr Wallbox set04TextArg 6,6.5,7,7.5,8,8.5,9,9.5,10,10.5,11,11.5,12,12.5,13,13.5,14,14.5,15,15.5,16
attr Wallbox set04URL http://192.168.178.152/api/v1/chargecontrols/1/mode/manual/ampere
attr Wallbox stateFormat pvmode / Phasen: phases_connected / Ladeleistung: loading_power W
attr Wallbox userReadings phases_connected { (ReadingsVal($name, "L2_voltage","0") eq "0") ? "1" : "3" }
attr Wallbox webCmd eco:quick:manual:AI on:AI off
Gefällt mir Gefällt mir x 2 Liste anzeigen

Offline Juergen

  • Newbie
  • Beiträge: 2
Antw:Vorstellung E-Auto PV-Überschuss laden
« Antwort #5 am: 05 Oktober 2022, 11:50:55 »
Danke, Nogga! Da habe ich lange drauf gewartet! Funktioniert einwandfrei!!!

Offline Nogga

  • Full Member
  • ***
  • Beiträge: 250
Antw:Vorstellung E-Auto PV-Überschuss laden
« Antwort #6 am: 15 November 2022, 17:15:32 »
Update:

Habe meine neueste Version des DOIF zur Verfügung gestellt. Zukauf-Logik habe ich entfernt - die brauche ich persönlich eigentlich nicht wirklich.
Stattdessen sind nun noch Manuell-Lademodi hinzugekommen:
- ManualMin = Immer mit Minimal-Leistung laden (6A)
- ManualMax = Das gleiche mit Maximum (16A)
Beide Modi gibt es natürlich auch built-in - aber damit kann ich alles aus FHEM bequem steuern.

Zusätzlich noch ein
ManualMinPlusPV = Er lädt immer mit 6A ODER: wenn die Batterie mindestens zu 90% geladen ist UND genügend Überschuss da ist - auch mit mehr (dynamisch mit der gleichen Logik wie PV).
Damit kann ich eine Mindestladung über den Tag PLUS bedarfsweise Überschuss laden... Für mich ideal in der Übergangszeit und im Winter... (bisher klappt das prima).

Bisher konnte ich damit seit Juli fast 5500 km komplett vom Dach laden...

 

decade-submarginal