Steuerung einer Tinkerforge WARP Wallbox

Begonnen von chris_kmn, 04 November 2021, 12:04:13

Vorheriges Thema - Nächstes Thema

smoudo

#60
Ich denke ich hab das teil jetzt ziemlich final.

Mein Wallbox device:
defmod WARP2_CP HTTPMOD http://192.168.1.60/evse/state 5
attr WARP2_CP alias Wallbox
attr WARP2_CP devStateIcon 1.3:message_socket_on2@green 1.2:message_socket_enabled@orange 1.1:message_socket_enabled@blue 1.0:message_socket_off@red\
2.1:robot 2.0:time_manual_mode
attr WARP2_CP enableControlSet 0
attr WARP2_CP enableCookies 1
attr WARP2_CP event-on-change-reading charger_state,button_press_time,vehicle_state
attr WARP2_CP event-on-update-reading power
attr WARP2_CP eventMap tagstart:Ladefreigabe tagstop:STOP
attr WARP2_CP extractAllJSON 0
attr WARP2_CP get01Name autostart
attr WARP2_CP get01Poll 67
attr WARP2_CP get01PollDelay 30
attr WARP2_CP get01URL http://192.168.1.60/evse/auto_start_charging
attr WARP2_CP get04ExtractAllJSON 1
attr WARP2_CP get04Name power
attr WARP2_CP get04Poll 11
attr WARP2_CP get04URL http://192.168.1.60/meter/values
attr WARP2_CP get05ExtractAllJSON 1
attr WARP2_CP get05Name phases
attr WARP2_CP get05Poll 69
attr WARP2_CP get05URL http://192.168.1.60/meter/phases
attr WARP2_CP get06ExtractAllJSON 1
attr WARP2_CP get06Name button_state
attr WARP2_CP get06Poll 17
attr WARP2_CP get06URL http://192.168.1.60/evse/button_state
attr WARP2_CP getHeader1 Content-Type: application/json
attr WARP2_CP group Wallbox
attr WARP2_CP httpVersion 1.1
attr WARP2_CP icon electric_car_icon
attr WARP2_CP reading01Name vehicle_state
attr WARP2_CP reading01Regex "iec61851_state":([\d])
attr WARP2_CP reading02Name charger_state
attr WARP2_CP reading02Regex "charger_state":([\d])
attr WARP2_CP reading03Name MaxCurrent
attr WARP2_CP reading03Regex "allowed_charging_current":([\d]+)
attr WARP2_CP reading04Name vehicle_state
attr WARP2_CP reading04Regex vehicle_state":([\w]+)
attr WARP2_CP requestHeader Content-Type: application/json
attr WARP2_CP room Outdoor
attr WARP2_CP set01Data {"current":$val}
attr WARP2_CP set01Header Content-Type: application/json
attr WARP2_CP set01Header2 Accept: */*
attr WARP2_CP set01Method PUT
attr WARP2_CP set01Name current
attr WARP2_CP set01URL http://192.168.1.60/evse/external_current_update
attr WARP2_CP set02Data {"auto_start_charging":$val}
attr WARP2_CP set02Header Content-Type: application/json
attr WARP2_CP set02Header2 Accept: */*
attr WARP2_CP set02IMap false:0, true:1
attr WARP2_CP set02Map false:0, true:1
attr WARP2_CP set02Method PUT
attr WARP2_CP set02Name auto_start_charging
attr WARP2_CP set02URL http://192.168.1.60/evse/auto_start_charging_update
attr WARP2_CP set03Data null
attr WARP2_CP set03Header Content-Type: application/json
attr WARP2_CP set03Method PUT
attr WARP2_CP set03Name stop_charging
attr WARP2_CP set03NoArg 1
attr WARP2_CP set03URL http://192.168.1.60/evse/stop_charging
attr WARP2_CP set04Data null
attr WARP2_CP set04Header Content-Type: application/json
attr WARP2_CP set04Method PUT
attr WARP2_CP set04Name start_charging
attr WARP2_CP set04NoArg 1
attr WARP2_CP set04NoData 0
attr WARP2_CP set04URL http://192.168.1.60/evse/start_charging
attr WARP2_CP set05Data {"tag_type":0,"tag_id":"D3:B1:4F:B7"}
attr WARP2_CP set05Header Content-Type: application/json
attr WARP2_CP set05Method PUT
attr WARP2_CP set05Name tagstart
attr WARP2_CP set05NoArg 1
attr WARP2_CP set05URL http://192.168.1.60/nfc/inject_tag_start
attr WARP2_CP set06Data {"tag_type":0,"tag_id":"D3:B1:4F:B7"}
attr WARP2_CP set06Header Content-Type: application/json
attr WARP2_CP set06Method PUT
attr WARP2_CP set06Name tagstop
attr WARP2_CP set06NoArg 1
attr WARP2_CP set06URL http://192.168.1.60/nfc/inject_tag_stop
attr WARP2_CP showBody 0
attr WARP2_CP sortby 3
attr WARP2_CP stateFormat {sprintf("1:%d\n2:%d\n Ladestrom: %.2f A\n | Leistung: %.3f kW\n | Zähler Total: %.3f kWh",\
ReadingsNum($name,"charger_state",0),\
ReadingsNum($name,"autostart",0),\
ReadingsNum($name,"MaxCurrent",0)/1000,\
ReadingsNum($name,"power",0)/1000,\
ReadingsNum($name,"energy_abs",0))}
attr WARP2_CP timeout 10
attr WARP2_CP userReadings PwrFaktor {ReadingsNum($name,"phases_active_0",0)+ReadingsNum($name,"phases_active_1",0)+ReadingsNum($name,"phases_active_2",0)}
attr WARP2_CP verbose 0
attr WARP2_CP webCmd Ladefreigabe:STOP


Meine 99_myUtil:
#-------------------------------------------------------------------------------
# Überschussladen PV zu Wallbox
#-------------------------------------------------------------------------------
# Ladestrom berechnen  kontinuierlich
sub myChargeCurrent() {
my $overpow = 0; # Leistungsüberschuss ("-" = Überschuss)
### PV-Wechselrichter + Battterie (RCT-Power):
my $BatteryPower = ReadingsNum("Primo","PowerFlow_Site_P_Akku",0); # Leistung Batterie ("-" = laden)
my $GridPower = ReadingsNum("Primo","PowerFlow_Site_P_Grid",0); # Leistung Netz ("-" = einspeisen)
### Wallbox:
my $maxcurr = ReadingsNum("WARP2_CP","MaxCurrent",0); # Maximaler Ladestrom Wallbox
my $ChargePower = ReadingsNum("WARP2_CP","power",0); # Ladestrom
my $VehicleState = ReadingsNum("WARP2_CP","charger_state",0); # Fahrzeugstatus
#my $PwrFaktor = ReadingsNum("WARP2_CP","PwrFaktor",1); # Faktor Anzahl aktive Phasen
### FHEM Devices zur Steuerung:
my $FixStrom = ReadingsNum("WB_pmode","current",0); # Ladestrom Vorgabe
my $WB_pmode = ReadingsVal("WB_pmode","state",0); # Sollwert PV-Lademodus

#if ($PwrFaktor == 0) {$PwrFaktor = 1}; # Initialisierung Leistungsfaktor (hier zwei Phasen, Autospezifisch)

$overpow = $GridPower + $BatteryPower; # Leistungsüberschuss ("-" = Überschuss)

if ($VehicleState == 1 ){ # Fahrzeug ist angeschlossen
if (ReadingsNum("WARP2_CP","autostart",1) == 1) { # Autostart ?
fhem("set WARP2_CP auto_start_charging 0"); # manuelles Starten
}
if (ReadingsVal("dSofortLaden","state",0) eq "on") { # Sofortladen gesetzt ?
if ($maxcurr != $FixStrom ) {
fhem("set WARP2_CP current $FixStrom");
}
fhem("set WARP2_CP start_charging");
return; # bei Sofortladen Routine verlassen
}
elsif ($WB_pmode eq "minPV" ) { # minPV Laden: Ladevorgang sofort starten mit min Ladestrom
$maxcurr = 6000;
fhem("set WARP2_CP current $maxcurr");
fhem("set WARP2_CP start_charging");
}
elsif ($WB_pmode eq "nurPV") { # nurPV Laden: Ladevorgang bei Überschuss starten
if ($overpow <= -1420) { # Laden starten bei PV Überschuss  (1A ca. 430 Watt)
$maxcurr = 6000;
fhem("set WARP2_CP current $maxcurr");
                        fhem("set WARP2_CP tagstart")
                        fhem("set WARP2_CP start_charging");
}
}
elsif ($WB_pmode eq "BattPV") { # BattPV Laden: Ladevorgang bei Überschuss starten
if ($GridPower <= 20 && $BatteryPower <= 5300) { # Laden starten bei Leistungsüberschuss
$maxcurr = 6000;
fhem("set WARP2_CP current $maxcurr");
                        fhem("set WARP2_CP tagstart")
fhem("set WARP2_CP start_charging");
}
}
elsif ($WB_pmode eq "fix") { # fix Laden: Ladevorgang mit festem Strom laden
if ($maxcurr != $FixStrom ) {
fhem("set WARP2_CP current $FixStrom");
}
fhem("set WARP2_CP start_charging");
}
return;
}

if ($VehicleState == 3)  { # Fahrzeug lädt

if (ReadingsVal("dSofortLaden","state",0) eq "on") { # Sofortladen gesetzt ?
if ($maxcurr != $FixStrom ) {
fhem("set WARP2_CP current $FixStrom");
}
return; # bei Sofortladen Routine verlassen
}
elsif ($WB_pmode eq "minPV" || $WB_pmode eq "nurPV") { # minPV Laden:
if ($overpow <= -400) { # bei Überschuss Strom anheben
$maxcurr = int((100 + $ChargePower)/21.5)*100; # Berechnung Ladestrom [mAmp] (2-phasig)
}
elsif ($overpow > 0 ) { # Strom absenken bei Strommangel
$maxcurr = int(($ChargePower-$overpow-100)/21.5)*100; # Berechnung Ladestrom [mAmp] (2-phasig)
}
else {
return;
}
if ($maxcurr < 6000) {
$maxcurr = 6000;
if ($WB_pmode eq "nurPV" ) {
fhem("set WARP2_CP auto_start_charging 0"); # manuelles Starten
fhem("set WARP2_CP stop_charging"); # Laden unterbrechen bei nurPV !
}
}
if ($maxcurr > 16000) {$maxcurr = 16000};
fhem("set WARP2_CP current $maxcurr");
}
elsif ($WB_pmode eq "BattPV") {
if ($GridPower <= 20 && $BatteryPower <= 7000) { # keine Stromentnahme aus Netz und Batt-Leistung kleiner 7kW ?
$maxcurr = int((500 + $ChargePower)/21.5)*100; # Strom anheben
if ($maxcurr > 16000) {$maxcurr = 16000};
}
if ($GridPower > 100 ) { # Strom aus Netz ?
$maxcurr = int(($ChargePower-$overpow-400)/21.5)*100; # Ladestrom reduzieren
}
if ($maxcurr < 6000) { # Laden unterbrechen wenn zu wenig Leistung
$maxcurr = 6000;
fhem("set WARP2_CP auto_start_charging 0"); # manuelles Starten
fhem("set WARP2_CP stop_charging"); # Laden unterbrechen bei nurPV !
}
fhem("set WARP2_CP current $maxcurr");
}
elsif ($WB_pmode eq "fix") { # fix Strom laden
if ($maxcurr != $FixStrom) {
fhem("set WARP2_CP current $FixStrom");
}
}
}
} #End Sub


Die Phasenerkennung habe ich raus genommen und die Berechnung des Ladestroms wieder auf deinen Wert gesetzt.

Im Wallbox Device habe ich noch den tag_stop hinzugefügt und das ganze im webcmd gemappt.
Jetzt kann man praktisch mit der "Ladefreigabe" den Tag Start setzen und mit "STOP" die Freigabe entziehen. z.b. um einen bestehenden Ladevorgang abzubrechen. Die Steuerung läuft dann über minpv oder fixstrom. Bei nurpv und battpv bekommt es den virtuellen tag direkt zugeordnet.
Bei hardware nfc tag an der Box + Knopf drücken ist das ganze weiterhin funktionell + als tag separat erfasst.

Für mich ist es so top. Vielleicht findet noch jemand gefallen daran.

Vielen Dank nochmals an Chris für Deine Geduld!!

Viele Grüße

Matze

chris_kmn

#61
Prima, dann geht es ja endlich voran :) und danke auch dir für's Teilen, Matze. Die Ergänzung von tag stop ist prima :)

chris_kmn

Was mir gerade noch eingefallen ist, wo du über das Poll-Intervall sprichst.

Man muss natürlich sicherstellen, dass im Rahmen des Intervalls der Wallbox auch ein aktueller Wert vom WR kommt. Sonst läuft ggf. die Leistung der Wallbox dem Stromüberschuss-Wert des WR weg.

smoudo

Ja den WR habe ich auch auf 10sek. Gestellt. Allerdings werden die logfiles so riesig. Wird aber für den elektrocitycalculator benötigt.

chris_kmn

Du kannst ja mit dem Attribut:

event-min-interval battery_soc:1800,energy_day_grid_feed_in:1800,energy_day:1800,energy_day_grid_load:1800

Die Intervalle vom WR reading-spezifisch setzen, sodass nur die für das Überschussladen nötigen Readings im 10 sek. Takt kommen

chris_kmn

Auf Userwunsch stelle ich nochmals mein aktuelles Setup mit den Funktionen der letzten Posts hier zusammen.

Wallbox device:

defmod WARP2_CP HTTPMOD http://192.168.0.82/evse/state 23
attr WARP2_CP DbLogExclude .*
attr WARP2_CP alias Wallbox
attr WARP2_CP devStateIcon 1.3:message_socket_on2@red:tagstop 1.2:message_socket_enabled@orange 1.1:message_socket_unknown@blue:tagstart 1.0:message_socket_off@green\
2.1:robot 2.0:time_manual_mode
attr WARP2_CP enableControlSet 0
attr WARP2_CP enableCookies 1
attr WARP2_CP event-on-change-reading charger_state,button_press_time,vehicle_state
attr WARP2_CP event-on-update-reading power
attr WARP2_CP eventMap tagstart:Laden-Start tagstop:Laden-Stop
attr WARP2_CP extractAllJSON 0
attr WARP2_CP get01Name autostart
attr WARP2_CP get01Poll 67
attr WARP2_CP get01URL http://192.168.0.82/evse/auto_start_charging
attr WARP2_CP get04ExtractAllJSON 1
attr WARP2_CP get04Name power
attr WARP2_CP get04Poll 11
attr WARP2_CP get04URL http://192.168.0.82/meter/values
attr WARP2_CP get05ExtractAllJSON 1
attr WARP2_CP get05Name phases
attr WARP2_CP get05Poll 69
attr WARP2_CP get05URL http://192.168.0.82/meter/phases
attr WARP2_CP get06ExtractAllJSON 1
attr WARP2_CP get06Name button_state
attr WARP2_CP get06Poll 17
attr WARP2_CP get06URL http://192.168.0.82/evse/button_state
attr WARP2_CP getHeader1 Content-Type: application/json
attr WARP2_CP group 01-Energie
attr WARP2_CP httpVersion 1.1
attr WARP2_CP icon wallbox
attr WARP2_CP reading01Name vehicle_state
attr WARP2_CP reading01Regex "iec61851_state":([\d])
attr WARP2_CP reading02Name charger_state
attr WARP2_CP reading02Regex "charger_state":([\d])
attr WARP2_CP reading03Name MaxCurrent
attr WARP2_CP reading03Regex "allowed_charging_current":([\d]+)
attr WARP2_CP requestHeader Content-Type: application/json
attr WARP2_CP room Carport,Haus
attr WARP2_CP set01Data {"current":$val}
attr WARP2_CP set01Header Content-Type: application/json
attr WARP2_CP set01Method PUT
attr WARP2_CP set01Name current
attr WARP2_CP set01URL http://192.168.0.82/evse/external_current_update
attr WARP2_CP set02Data {"auto_start_charging":$val}
attr WARP2_CP set02Header Content-Type: application/json
attr WARP2_CP set02IMap false:0, true:1
attr WARP2_CP set02Method PUT
attr WARP2_CP set02Name auto_start_charging
attr WARP2_CP set02URL http://192.168.0.82/evse/auto_start_charging_update
attr WARP2_CP set03Data null
attr WARP2_CP set03Header Content-Type: application/json
attr WARP2_CP set03Method PUT
attr WARP2_CP set03Name stop_charging
attr WARP2_CP set03NoArg 1
attr WARP2_CP set03URL http://192.168.0.82/evse/stop_charging
attr WARP2_CP set04Data null
attr WARP2_CP set04Header Content-Type: application/json
attr WARP2_CP set04Method PUT
attr WARP2_CP set04Name start_charging
attr WARP2_CP set04NoArg 1
attr WARP2_CP set04URL http://192.168.0.82/evse/start_charging
attr WARP2_CP set05Data {"tag_type":0,"tag_id":"F4:E8:8E:4F"}
attr WARP2_CP set05Header Content-Type: application/json
attr WARP2_CP set05Method PUT
attr WARP2_CP set05Name tagstart
attr WARP2_CP set05NoArg 1
attr WARP2_CP set05URL http://192.168.0.82/nfc/inject_tag_start
attr WARP2_CP set06Data {"tag_type":0,"tag_id":"F4:E8:8E:4F"}
attr WARP2_CP set06Header Content-Type: application/json
attr WARP2_CP set06Method PUT
attr WARP2_CP set06Name tagstop
attr WARP2_CP set06NoArg 1
attr WARP2_CP set06URL http://192.168.1.82/nfc/inject_tag_stop
attr WARP2_CP showBody 0
attr WARP2_CP sortby 3
attr WARP2_CP stateFormat {sprintf("1:%d\n2:%d\n Imax: %.2f A\n . . Pch: %.3f kW\n .  . Ech: %.3f kWh",\
ReadingsNum($name,"charger_state",0),\
ReadingsNum($name,"autostart",0),\
ReadingsNum($name,"MaxCurrent",0)/1000,\
ReadingsNum($name,"power",0)/1000,\
ReadingsNum($name,"energy_abs",0))}
attr WARP2_CP timeout 10
attr WARP2_CP userReadings PwrFaktor {ReadingsNum($name,"phases_active_0",0)+ReadingsNum($name,"phases_active_1",0)+ReadingsNum($name,"phases_active_2",0)}
attr WARP2_CP verbose 0


Notify für Taster an der Wallbox (Sofortladen):

defmod nty_WARP_CP_btn notify WARP2_CP:button_press_time:.* IF ([WARP2_CP:button_press_time] > 0) (set dSofortLaden on)
attr nty_WARP_CP_btn group Notify
attr nty_WARP_CP_btn room Carport


Dummy für Sofortladen:

defmod dSofortLaden dummy
attr dSofortLaden alexaName Sofortladen
attr dSofortLaden alias Sofortladen
attr dSofortLaden devStateIcon on:rc_GREEN:off off:rc_RED:on
attr dSofortLaden genericDeviceType switch
attr dSofortLaden group 01-Energie
attr dSofortLaden homebridgeMapping clear On=state,valueOn=on,valueOff=off,cmdOn=on,cmdOff=off
attr dSofortLaden icon control_arrow_rightward
attr dSofortLaden realRoom Carport
attr dSofortLaden room Carport,Haus,Homekit
attr dSofortLaden setList on off
attr dSofortLaden siriName Sofortladen
attr dSofortLaden sortby 5
attr dSofortLaden webCmd on:off


Notify zum Resetten von "Sofortladen" bei Fahrzeug abstöpseln:

defmod nty_Vehiclestate_uplg notify WARP2_CP:vehicle_state:.0 set dSofortLaden off
attr nty_Vehiclestate_uplg disable 0
attr nty_Vehiclestate_uplg group Notify
attr nty_Vehiclestate_uplg room Carport


Notify zur Stromsteuerung/aufrufen myUtils:

defmod nty_WARP_CP_chg notify WARP2_CP:power:.* IF ([WARP2_CP:charger_state] >= 1) ({myChargeCurrent()})
attr nty_WARP_CP_chg group Notify
attr nty_WARP_CP_chg room Carport


Dummy zum einstellen des Lademodes und des Fixstroms bei Sofortladen:

defmod WB_pmode dummy
attr WB_pmode alias Lademode Wallbox
attr WB_pmode group 01-Energie
attr WB_pmode icon measure_photovoltaic_inst
attr WB_pmode readingList state current clouds
attr WB_pmode room Carport,Haus
attr WB_pmode setList state:minPV,nurPV,BattPV,fix current:slider,6000,500,16000
attr WB_pmode sortby 4
attr WB_pmode stateFormat {sprintf("Lademode: %s . . Wolken: %d%% . . Strom:",\
ReadingsVal($name,"state",0),\
ReadingsNum($name,"clouds",0))}
attr WB_pmode webCmd current:state


Funktion im myUtils:

##########################################################
# Ladestrom berechnen  kontinuierlich
sub myChargeCurrent() {
### PV-Wechselrichter + Battterie (RCT-Power):
my $overpow = 0;                                                                 # Leistungsüberschuss ("-" = Überschuss)
my $BatteryPower = ReadingsNum("RCTPower_AR","power_battery",0); # Leistung Batterie ("-" = laden)
my $GridPower = ReadingsNum("RCTPower_AR","power_grid_total",0); # Leistung Netz ("-" = einspeisen)
### Wallbox:
my $maxcurr = ReadingsNum("WARP2_CP","MaxCurrent",0); # Maximaler Ladestrom Wallbox
my $ChargePower = ReadingsNum("WARP2_CP","power",0); # Ladestrom
my $VehicleState = ReadingsNum("WARP2_CP","charger_state",0); # Fahrzeugstatus
my $PwrFaktor = ReadingsNum("WARP2_CP","PwrFaktor",0); # Faktor Anzahl aktive Phasen
### FHEM Devices zur Steuerung:
my $FixStrom = ReadingsNum("WB_pmode","current",0); # Ladestrom Vorgabe
my $WB_pmode = ReadingsVal("WB_pmode","state",0); # Sollwert PV-Lademodus

if ($PwrFaktor == 0) {$PwrFaktor = 2}; # Anzahl aktive Phasen (gelesen von WB-Stromzähler)

$overpow = $GridPower + $BatteryPower; # Leistungsüberschuss ("-" = Überschuss)

if ($VehicleState == 1){ # Fahrzeug ist angeschlossen
if (ReadingsNum("WARP2_CP","autostart",1) == 1) { # Autostart ?
fhem("set WARP2_CP auto_start_charging 0"); # manuelles Starten
}
if (ReadingsVal("dSofortLaden","state",0) eq "on") { # Sofortladen gesetzt ?
if ($maxcurr != $FixStrom) {
fhem("set WARP2_CP current $FixStrom");
}
fhem("set WARP2_CP start_charging");
return; # bei Sofortladen Routine verlassen
}
elsif ($WB_pmode eq "minPV") { # minPV Laden: Ladevorgang sofort starten mit min Ladestrom
$maxcurr = 6000;
fhem("set WARP2_CP current $maxcurr");
fhem("set WARP2_CP start_charging");
}
elsif ($WB_pmode eq "nurPV") { # nurPV Laden: Ladevorgang bei Überschuss starten
if ($overpow <= -(1500*$PwrFaktor)) { # Laden starten bei PV Überschuss  (1A ca. 430 Watt)
$maxcurr = 6000;
fhem("set WARP2_CP current $maxcurr");
fhem("set WARP2_CP start_charging");
}
}
elsif ($WB_pmode eq "BattPV") { # BattPV Laden: Ladevorgang bei Überschuss starten
if ($GridPower <= 20 && $BatteryPower <= 5300) { # Laden starten bei Leistungsüberschuss
$maxcurr = 6000;
fhem("set WARP2_CP current $maxcurr");
fhem("set WARP2_CP start_charging");
}
}
elsif ($WB_pmode eq "fix") { # fix Laden: Ladevorgang mit festem Strom laden
if ($maxcurr != $FixStrom) {
fhem("set WARP2_CP current $FixStrom");
}
fhem("set WARP2_CP start_charging");
}
return;
}

if ($VehicleState == 3)  { # Fahrzeug lädt
 
if (ReadingsVal("dSofortLaden","state",0) eq "on") { # Sofortladen gesetzt ?
if ($maxcurr != $FixStrom) {
fhem("set WARP2_CP current $FixStrom");
}
return; # bei Sofortladen Routine verlassen
}
elsif ($WB_pmode eq "minPV" || $WB_pmode eq "nurPV") { # minPV Laden:
if ($overpow <= -1000) { # bei Überschuss Strom anheben
$maxcurr = int((500 + $ChargePower)/($PwrFaktor*21.5))*100; # Berechnung Ladestrom [mAmp] (2-phasig)
}
elsif ($overpow > 0) { # Strom absenken bei Strommangel
$maxcurr = int(($ChargePower-$overpow-400)/($PwrFaktor*21.5))*100; # Berechnung Ladestrom [mAmp] (2-phasig)
}
else {
return;
}
if ($maxcurr < 6000) {
$maxcurr = 6000;
if ($WB_pmode eq "nurPV") {
fhem("set WARP2_CP auto_start_charging 0"); # manuelles Starten
fhem("set WARP2_CP stop_charging"); # Laden unterbrechen bei nurPV !
}
}
if ($maxcurr > 16000) {$maxcurr = 16000};
fhem("set WARP2_CP current $maxcurr");
}
elsif ($WB_pmode eq "BattPV") {
if ($GridPower <= 20 && $BatteryPower <= 7000) { # keine Stromentnahme aus Netz und P-Batt < 7kW ?
$maxcurr = int((500 + $ChargePower)/($PwrFaktor*21.5))*100; # Strom anheben
if ($maxcurr > 16000) {$maxcurr = 16000};
}
if ($GridPower > 100) { # Strom aus Netz ?
$maxcurr = int(($ChargePower-$overpow-400)/($PwrFaktor*21.5))*100; # Ladestrom reduzieren
}
if ($maxcurr < 6000) { # Laden unterbrechen wenn zu wenig Leistung
$maxcurr = 6000;
fhem("set WARP2_CP auto_start_charging 0"); # manuelles Starten
fhem("set WARP2_CP stop_charging"); # Laden unterbrechen bei nurPV !
}
fhem("set WARP2_CP current $maxcurr");
}
elsif ($WB_pmode eq "fix") { # fix Strom laden
if ($maxcurr != $FixStrom) {
fhem("set WARP2_CP current $FixStrom");
}
}
}
}



Funktion:

- Laden kann mit NFC Tag gestartet werden (muss in WB konfiguriert werden) oder über taginject-Befehl des Wallbox-Devices (NFC Freigabe kann natürlich auch komplett in der WB abgeschalet werden)
- mit dem Taster wird der Modus Sofortladen gesetzt. Dann wir mit dem im Dummy eingestellten Strom (Slider) geladen.
- Der Taster muss in der WB auf "keine Funktion" konfiguriert werden. Sonst wird das Laden abgebrochen. Wichtig: Das muss nach jedem WB-Firmware-Update erneut gemacht werden, da der Taster standardmäßig auf Ladestop gesetzt ist.
- Die Konfiguration ist auf 2-phasen-Laden eingestellt. Wenn das bei euch anders ist bitte die Variable $PwrFaktor anpassen (Defaultwert 1-3) Ich bin noch dabei das ganze
automatisch einstellen zu lassen. Dann muss aber ein Zähler in der WB verbaut sein.
- Im Wallbox-Device müssen die IP-Adressen und die Tag-ID angepasst werden

Wechselrichter:

- power_battery: ist die Leistung des PV Speichers, (-)=laden (+)=entladen.  Der Ladestrom für das Auto wird so lange erhöht, bis der PV Speicher nicht weiter geladen wird. Wenn man keinen Speicher hat kann man den Wert statisch auf 0 setzen.
- power_grid_total: ist Einspeisung vom Wechselrichter in das Netz (-) bzw. die Entnahmeleistung aus dem Netz (+)

Diese Variablen müssen an den eigenen Wechselrichter angepasst werden. Die Daten sollten im 10 Sekunden Takt aktualisiert werden.

smoudo

Moin,

Aufgrund aktueller Probleme eines Users hätte ich zu dem Thema nochmal gerne Feedback und eine Idee um das Ganze robuster bei verschiedenen WR zu bekommen.

Problematik:
Anscheinend gibt es ähnlich zu dem Problem welches ich hatte, ständiges Ein-Aus der Wallbox im nurPV Betrieb. Da es sich um ein timing Problem handeln dürfte, habe ich mir überlegt vielleicht einen Mittelwert über 60sek. rechnen zu lassen. Das sollte die Problematik glätten. Nachteil ist, das dementsprechend auch öfter ein paar Watt aus dem Netz gezogen würden. Fände ich jetzt nicht ganz so schlimm. Wie seht ihr das?

Viele Grüße

Matze

chris_kmn

Könnte man machen mit dem von dir genannten Nebeneffekt.

Aber vielleicht sollten man in dem speziellen Fall erstmal rausfinden woher das an/aus kommt und dann das Problem bekämpfen und nicht die Auswirkung ?!

allgaier

Servus,
mit dem Vorschlag die Ursache finden, bin ich auf einverstanden.
Vorschlag, wir drei schreiben uns per PM zusammen und klären das untereinander und posten dann die Lösung hier im Forum.
Ausprobieren geht halt immer nur "Live" wenn die Sonne scheint, der Haus-Akku voll ist und ein Überschuss über 1,4kW, oder?

Gruß Markus

smoudo

Ich hatte die Tage auch wieder Probleme mit dem "nurPV" Überschussladen.
Ich denke ich habe den Fehler gefunden.

Fehlerbeschreibung:
Wenn die Wallbox bei genügend Überschuss das Laden mit 6A anfängt, sprich "$maxcurr 6000" werden nicht sofort die 6A am Ausgang zur Verfügung gestellt, sondern erst ein paar sekunden später. Was sich in den Readings mit falschen werten in der Funktion "$ChargePower" bemerbar machen kann. Hier sollten eigentlich rund 1450W stehen. Meist aber Anfangs eher kleinere Werte. Deshalb wird der Ladevorgang sofort wieder unterbrochen.

Lösungsansatz:
Ich lasse die Wallbox nur noch alle 20 sek. events schreiben.
Beisielkonfiguration im DEF:
http://ipadresse/evse/state 20
Damit funktioniert die Funktion bei mir jetzt einwandfrei.

Ein weiterer Ansatz währe bevor die Box ausschaltet, eine mindest Ladezeit zu generieren. Damit würde häufiges Ein/Aus geglättet werden. Vielleicht hat da jemand eine Idee in der Umsetzung.



Viele Grüße

Matze