Ich arbeite momentan an dem folgenden Sourcecode.
Aufgabenstellung: Überschussleistung berechnen und die Information nach etwas Glättung an eine Wallbox weitergeben, um dort die Ladung zu steuern.
Jetzt würde ich das ganze gerne erweitern:
Wenn der berechnete Überschuss weniger als x Watt für maximal y Sekunden ist, dann die Mindestladung weitergeben ansonsten 0.
Ich möchte damit verhindern dass die Ladung pausiert wird, weil mal die Kaffeemaschine angemacht wird, ein kurzes Wölkchen vorbeikommt usw.
Hat jemand eine Idee?
([+60] )
{
my $lastladung=ReadingsNum("HTTPMOD_Wallbox","devices_01_power_w",0);
my $ischarging=ReadingsNum("HTTPMOD_Wallbox","devices_01_evse_charging",0);
my $ladungage=ReadingsAge("HTTPMOD_Wallbox","devices_01_power_w",0);
my $leistungpvanteil=ReadingsNum("DOIF_Auto_Ladestrom","LeistungPVAnteil",0);
my $bezugwallbox=ReadingsNum("HTTPMOD_Wallbox","devices_01_total_energy",0);
my $erzeugung=ReadingsNum("Stromverbrauch_Zaehler11","P_act-get",0);
my $verbrauch=ReadingsNum("Stromverbrauch_Zaehler10","P_act-get",0);
my $ehz=ReadingsNum("Stromverbrauch_Zaehler1_EHZ","aktuellerverbrauch-get",0);
my $speicher=ReadingsNum("BatterieWR","BatteryPower",0);
if ($speicher<0) {$speicher=0};
my $ueberschuss=$erzeugung-$verbrauch-$ehz;
my $ueberschuss2=$speicher-$ehz+($lastladung/1000); ##so berechnet es cfos, aber da gehört das Auto noch dazu
Log(3,"speicher ".$ueberschuss2." ".($lastladung/1000)." ".$speicher." ".$ehz );
if ($ischarging>0) {
my $pvanteil=$lastladung-$ueberschuss;
Log(3,"pvanteil ".$ischarging." ".$pvanteil." ".$leistungpvanteil." ".$ladungage." ".$lastladung);
if ($pvanteil>0) {
$leistungpvanteil=sprintf("%.0f",$leistungpvanteil+(($ladungage*$lastladung)/3600)); ##addiert die Ladeleistung seit dem letzten Aufruf
}else {
$pvanteil=0;
}
my $netzanteil=$bezugwallbox-$leistungpvanteil;
fhem("sleep .1; setreading DOIF_Auto_Ladestrom LeistungNetzAnteilkwh ".$netzanteil/1000);
}
fhem("sleep .1; setreading DOIF_Auto_Ladestrom LeistungPVAnteil ".$leistungpvanteil); ##Wert immer schreiben, sonst sieht das statistics Modul komisch aus
##Log(3,"lade ".$ueberschuss." ".$erzeugung." ".$verbrauch." ".$ehz);
if ($ueberschuss<0) {$ueberschuss=0};
$ueberschuss=$ueberschuss*1000;
$ueberschuss2=$ueberschuss2*1000;
##Stromverbrauch_Zaehler10 Verbrauch gesamt (ohne E-Auto)
##Stromverbrauch_Zaehler11 Erzeugung gesamt
my $ladeleistung=$ueberschuss;
my $zusatz=AttrVal("DOIF_Auto_Ladestrom","zusatzladung",0);
my $akkuvolloffset=AttrVal("DOIF_Auto_Ladestrom","offsetpvakkuvoll",0);
if ($akkuvolloffset!=0) {
my $soc=ReadingsNum("BatterieWR","BatteryCapacity",0);
if ($soc>95) {
##der Akku ist voll also den Offset für vollen Akku verwenden
$zusatz=$akkuvolloffset;
Log(3,"lade wehcsel weil der Akku voll ist ".$zusatz);
}
}
my $mindestladung=AttrVal("DOIF_Auto_Ladestrom","mindestladung",0);
my $maxladung=AttrVal("DOIF_Auto_Ladestrom","maxladung",0);
fhem("sleep .1; setreading DOIF_Auto_Ladestrom ladeleistungin ".$ladeleistung);
fhem("sleep .1; setreading DOIF_Auto_Ladestrom ladeleistungin2 ".$ueberschuss2);
$ladeleistung=$ladeleistung+$zusatz;
if ($mindestladung>0) {
if ($ladeleistung<$mindestladung) {
$ladeleistung=$mindestladung;
}
}
if ($maxladung>0 ) {
if ($ladeleistung>$maxladung) {
$ladeleistung=$maxladung;
}
}
if ($ladeleistung<0) {$ladeleistung=0};
fhem("sleep .1; setreading DOIF_Auto_Ladestrom ladeleistung ".$ladeleistung);
}
Dein eigentlichen Versand macht dabei ein notify auf ladeleistungavg (dies wird etwas geglättet da es auch mal "Messfehler" durch den zeitlichen Versatz der Erfassungen gibt)
Komplettes define, innerhalb eines DOIF
define DOIF_Auto_Ladestrom DOIF ([+60] )\
{\
my $lastladung=ReadingsNum("HTTPMOD_Wallbox","devices_01_power_w",0);;\
my $ischarging=ReadingsNum("HTTPMOD_Wallbox","devices_01_evse_charging",0);;\
\
my $ladungage=ReadingsAge("HTTPMOD_Wallbox","devices_01_power_w",0);;\
\
my $leistungpvanteil=ReadingsNum("DOIF_Auto_Ladestrom","LeistungPVAnteil",0);;\
my $bezugwallbox=ReadingsNum("HTTPMOD_Wallbox","devices_01_total_energy",0);;\
\
\
my $erzeugung=ReadingsNum("Stromverbrauch_Zaehler11","P_act-get",0);;\
my $verbrauch=ReadingsNum("Stromverbrauch_Zaehler10","P_act-get",0);;\
my $ehz=ReadingsNum("Stromverbrauch_Zaehler1_EHZ","aktuellerverbrauch-get",0);;\
\
my $speicher=ReadingsNum("BatterieWR","BatteryPower",0);;\
if ($speicher<0) {$speicher=0};;\
\
\
my $ueberschuss=$erzeugung-$verbrauch-$ehz;;\
my $ueberschuss2=$speicher-$ehz+($lastladung/1000);; ##so berechnet es cfos, aber da gehört das Auto noch dazu\
Log(3,"speicher ".$ueberschuss2." ".($lastladung/1000)." ".$speicher." ".$ehz );;\
\
if ($ischarging>0) {\
my $pvanteil=$lastladung-$ueberschuss;;\
Log(3,"pvanteil ".$ischarging." ".$pvanteil." ".$leistungpvanteil." ".$ladungage." ".$lastladung);;\
\
if ($pvanteil>0) {\
$leistungpvanteil=sprintf("%.0f",$leistungpvanteil+(($ladungage*$lastladung)/3600));; ##addiert die Ladeleistung seit dem letzten Aufruf\
\
\
}else {\
$pvanteil=0;;\
}\
my $netzanteil=$bezugwallbox-$leistungpvanteil;;\
fhem("sleep .1;; setreading DOIF_Auto_Ladestrom LeistungNetzAnteilkwh ".$netzanteil/1000);;\
}\
fhem("sleep .1;; setreading DOIF_Auto_Ladestrom LeistungPVAnteil ".$leistungpvanteil);; ##Wert immer schreiben, sonst sieht das statistics Modul komisch aus\
\
\
##Log(3,"lade ".$ueberschuss." ".$erzeugung." ".$verbrauch." ".$ehz);;\
if ($ueberschuss<0) {$ueberschuss=0};;\
$ueberschuss=$ueberschuss*1000;;\
$ueberschuss2=$ueberschuss2*1000;;\
\
\
##Stromverbrauch_Zaehler10 Verbrauch gesamt (ohne E-Auto)\
##Stromverbrauch_Zaehler11 Erzeugung gesamt\
\
my $ladeleistung=$ueberschuss;;\
\
\
my $zusatz=AttrVal("DOIF_Auto_Ladestrom","zusatzladung",0);;\
my $akkuvolloffset=AttrVal("DOIF_Auto_Ladestrom","offsetpvakkuvoll",0);;\
if ($akkuvolloffset!=0) {\
my $soc=ReadingsNum("BatterieWR","BatteryCapacity",0);;\
if ($soc>95) {\
\
##der Akku ist voll also den Offset für vollen Akku verwenden\
$zusatz=$akkuvolloffset;;\
Log(3,"lade wehcsel weil der Akku voll ist ".$zusatz);;\
}\
}\
\
my $mindestladung=AttrVal("DOIF_Auto_Ladestrom","mindestladung",0);;\
my $maxladung=AttrVal("DOIF_Auto_Ladestrom","maxladung",0);;\
fhem("sleep .1;; setreading DOIF_Auto_Ladestrom ladeleistungin ".$ladeleistung);;\
fhem("sleep .1;; setreading DOIF_Auto_Ladestrom ladeleistungin2 ".$ueberschuss2);;\
\
$ladeleistung=$ladeleistung+$zusatz;;\
\
\
if ($mindestladung>0) {\
if ($ladeleistung<$mindestladung) {\
$ladeleistung=$mindestladung;;\
}\
}\
if ($maxladung>0 ) {\
if ($ladeleistung>$maxladung) {\
$ladeleistung=$maxladung;;\
}\
}\
\
if ($ladeleistung<0) {$ladeleistung=0};;\
fhem("sleep .1;; setreading DOIF_Auto_Ladestrom ladeleistung ".$ladeleistung);;\
\
}\
attr DOIF_Auto_Ladestrom userattr zusatzladung mindestladung maxladung offsetpvakkuvoll
attr DOIF_Auto_Ladestrom DOIF_Readings ladeleistungavg:[DOIF_Auto_Ladestrom:ladeleistung:avg3]
attr DOIF_Auto_Ladestrom DbLogExclude .*
attr DOIF_Auto_Ladestrom DbLogInclude ladeleistung.*
attr DOIF_Auto_Ladestrom comment zusatzladung: bei -200 wird immer mit 200W weniger geladen, bei +200 werden 200W aus dem Netz dazu gezogen\
LeistungPVAnteil: Aufsummierter Wert des PVLeistungsanteils\
offsetpvakkuvoll: Wenn der Hausspeicher voll ist diesen Offset verwenden, denn der Akku muss dann nicht mehr geladen werden\
mindestladung: Wenn ein Wert>0 eingetragen ist, dann wird mindestens der eingestellte Wert übertragen, sinnvoll um eine Zwangslaudung sicherzustellen
attr DOIF_Auto_Ladestrom do always
attr DOIF_Auto_Ladestrom maxladung 24000
attr DOIF_Auto_Ladestrom mindestladung 1500
attr DOIF_Auto_Ladestrom offsetpvakkuvoll -100
attr DOIF_Auto_Ladestrom room Technik_Auto
attr DOIF_Auto_Ladestrom userReadings LeistungPVAnteilkwh:LeistungPVAnteil.* {sprintf("%.1f",ReadingsNum($name,"LeistungPVAnteil",0)/1000)}
attr DOIF_Auto_Ladestrom zusatzladung -300
# CFGFN
# DEF ([+60] )
# {
#my $lastladung=ReadingsNum("HTTPMOD_Wallbox","devices_01_power_w",0);
#my $ischarging=ReadingsNum("HTTPMOD_Wallbox","devices_01_evse_charging",0);
#
#my $ladungage=ReadingsAge("HTTPMOD_Wallbox","devices_01_power_w",0);
#
#my $leistungpvanteil=ReadingsNum("DOIF_Auto_Ladestrom","LeistungPVAnteil",0);
#my $bezugwallbox=ReadingsNum("HTTPMOD_Wallbox","devices_01_total_energy",0);
#
#
# my $erzeugung=ReadingsNum("Stromverbrauch_Zaehler11","P_act-get",0);
#my $verbrauch=ReadingsNum("Stromverbrauch_Zaehler10","P_act-get",0);
#my $ehz=ReadingsNum("Stromverbrauch_Zaehler1_EHZ","aktuellerverbrauch-get",0);
#
#my $speicher=ReadingsNum("BatterieWR","BatteryPower",0);
#if ($speicher<0) {$speicher=0};
#
#
#my $ueberschuss=$erzeugung-$verbrauch-$ehz;
#my $ueberschuss2=$speicher-$ehz+($lastladung/1000); ##so berechnet es cfos, aber da gehört das Auto noch dazu
#Log(3,"speicher ".$ueberschuss2." ".($lastladung/1000)." ".$speicher." ".$ehz );
#
#if ($ischarging>0) {
#my $pvanteil=$lastladung-$ueberschuss;
#Log(3,"pvanteil ".$ischarging." ".$pvanteil." ".$leistungpvanteil." ".$ladungage." ".$lastladung);
#
# if ($pvanteil>0) {
# $leistungpvanteil=sprintf("%.0f",$leistungpvanteil+(($ladungage*$lastladung)/3600)); ##addiert die Ladeleistung seit dem letzten Aufruf
#
#
# }else {
# $pvanteil=0;
# }
# my $netzanteil=$bezugwallbox-$leistungpvanteil;
# fhem("sleep .1; setreading DOIF_Auto_Ladestrom LeistungNetzAnteilkwh ".$netzanteil/1000);
#}
#fhem("sleep .1; setreading DOIF_Auto_Ladestrom LeistungPVAnteil ".$leistungpvanteil); ##Wert immer schreiben, sonst sieht das statistics Modul komisch aus
#
#
###Log(3,"lade ".$ueberschuss." ".$erzeugung." ".$verbrauch." ".$ehz);
#if ($ueberschuss<0) {$ueberschuss=0};
#$ueberschuss=$ueberschuss*1000;
#$ueberschuss2=$ueberschuss2*1000;
#
#
###Stromverbrauch_Zaehler10 Verbrauch gesamt (ohne E-Auto)
###Stromverbrauch_Zaehler11 Erzeugung gesamt
#
#my $ladeleistung=$ueberschuss;
#
#
# my $zusatz=AttrVal("DOIF_Auto_Ladestrom","zusatzladung",0);
# my $akkuvolloffset=AttrVal("DOIF_Auto_Ladestrom","offsetpvakkuvoll",0);
# if ($akkuvolloffset!=0) {
# my $soc=ReadingsNum("BatterieWR","BatteryCapacity",0);
# if ($soc>95) {
#
# ##der Akku ist voll also den Offset für vollen Akku verwenden
# $zusatz=$akkuvolloffset;
# Log(3,"lade wehcsel weil der Akku voll ist ".$zusatz);
# }
# }
#
# my $mindestladung=AttrVal("DOIF_Auto_Ladestrom","mindestladung",0);
# my $maxladung=AttrVal("DOIF_Auto_Ladestrom","maxladung",0);
#fhem("sleep .1; setreading DOIF_Auto_Ladestrom ladeleistungin ".$ladeleistung);
#fhem("sleep .1; setreading DOIF_Auto_Ladestrom ladeleistungin2 ".$ueberschuss2);
#
#$ladeleistung=$ladeleistung+$zusatz;
#
#
#if ($mindestladung>0) {
# if ($ladeleistung<$mindestladung) {
# $ladeleistung=$mindestladung;
# }
# }
# if ($maxladung>0 ) {
# if ($ladeleistung>$maxladung) {
# $ladeleistung=$maxladung;
# }
# }
#
#if ($ladeleistung<0) {$ladeleistung=0};
#fhem("sleep .1; setreading DOIF_Auto_Ladestrom ladeleistung ".$ladeleistung);
#
#}
#
# FUUID 6482eccd-f33f-ae17-06ef-04d1126ad1038c2c
# MODEL FHEM
# NAME DOIF_Auto_Ladestrom
# NOTIFYDEV DOIF_Auto_Ladestrom,global
# NR 3417
# NTFY_ORDER 50-DOIF_Auto_Ladestrom
# STATE cmd_1
# TYPE DOIF
# VERSION 27487 2023-04-26 08:04:04
# eventCount 10894
# DOIF_Readings:
# ladeleistungavg ::ReadingValDoIf($hash,'DOIF_Auto_Ladestrom','ladeleistung','','avg3')
# Helper:
# DBLOG:
# ladeleistung:
# logdb:
# TIME 1686470606.14841
# VALUE 3085
# ladeleistungavg:
# logdb:
# TIME 1686470606.14841
# VALUE 3493.33333333333
# ladeleistungin:
# logdb:
# TIME 1686470606.12923
# VALUE 3385
# ladeleistungin2:
# logdb:
# TIME 1686470606.1375
# VALUE 3313
# OLDREADINGS:
# READINGS:
# 2023-06-11 10:01:26 LeistungNetzAnteilkwh 57.013
# 2023-06-11 10:03:26 LeistungPVAnteil 27437
# 2023-06-11 10:03:26 LeistungPVAnteilkwh 27.4
# 2023-06-11 10:03:26 cmd 1
# 2023-06-11 10:03:26 cmd_event timer_1
# 2023-06-11 10:03:26 cmd_nr 1
# 2023-06-11 10:03:26 ladeleistung 3085
# 2023-06-11 10:03:26 ladeleistungavg 3493.33333333333
# 2023-06-11 10:03:26 ladeleistungin 3385
# 2023-06-11 10:03:26 ladeleistungin2 3313
# 2023-06-11 08:07:26 mode enabled
# 2023-06-11 10:03:26 statLeistungNetzAnteilkwh Hour: -0.514 Day: -1.960 Month: -1.960 Year: -1.960 (since: 2023-06-11 )
# 2023-06-11 09:59:55 statLeistungNetzAnteilkwhLast Hour: -0.981 Day: -1.025 Month: - Year: - (since: 2023-06-10_14:49:16 )
# 2023-06-11 10:03:26 statLeistungPVAnteilkwh Hour: 0.5 Day: 4.7 Month: 4.7 Year: 4.7 (since: 2023-06-11 )
# 2023-06-11 09:59:55 statLeistungPVAnteilkwhLast Hour: 2.7 Day: 22.8 Month: - Year: - (since: 2023-06-10_08:48:38 )
# 2023-06-11 10:03:26 state cmd_1
# 2023-06-11 10:03:26 timer_01_c01 11.06.2023 10:04:26
# Regex:
# DOIF_Readings:
# DOIF_Auto_Ladestrom:
# ladeleistungavg:
# ladeleistung ^DOIF_Auto_Ladestrom$:^ladeleistung:
# accu:
# DOIF_Auto_Ladestrom:
# accu:
# ladeleistung ^DOIF_Auto_Ladestrom$:^ladeleistung:
# bar:
# barAvg:
# collect:
# accu:
# DOIF_Auto_Ladestrom ladeleistung:
# dim 3
# value:
# 4328
# 3067
# 3085
# attr:
# cmdState:
# wait:
# waitdel:
# condition:
# 0 ::DOIF_time_once($hash,0,$wday)
# days:
# do:
# 0:
# 0 { my $lastladung=ReadingsNum("HTTPMOD_Wallbox","devices_01_power_w",0); my $ischarging=ReadingsNum("HTTPMOD_Wallbox","devices_01_evse_charging",0); my $ladungage=ReadingsAge("HTTPMOD_Wallbox","devices_01_power_w",0); my $leistungpvanteil=ReadingsNum("DOIF_Auto_Ladestrom","LeistungPVAnteil",0); my $bezugwallbox=ReadingsNum("HTTPMOD_Wallbox","devices_01_total_energy",0); my $erzeugung=ReadingsNum("Stromverbrauch_Zaehler11","P_act-get",0); my $verbrauch=ReadingsNum("Stromverbrauch_Zaehler10","P_act-get",0); my $ehz=ReadingsNum("Stromverbrauch_Zaehler1_EHZ","aktuellerverbrauch-get",0); my $speicher=ReadingsNum("BatterieWR","BatteryPower",0); if ($speicher<0) {$speicher=0}; my $ueberschuss=$erzeugung-$verbrauch-$ehz; my $ueberschuss2=$speicher-$ehz+($lastladung/1000); Log(3,"speicher ".$ueberschuss2." ".($lastladung/1000)." ".$speicher." ".$ehz ); if ($ischarging>0) { my $pvanteil=$lastladung-$ueberschuss; Log(3,"pvanteil ".$ischarging." ".$pvanteil." ".$leistungpvanteil." ".$ladungage." ".$lastladung); if ($pvanteil>0) { $leistungpvanteil=sprintf("%.0f",$leistungpvanteil+(($ladungage*$lastladung)/3600)); }else { $pvanteil=0; } my $netzanteil=$bezugwallbox-$leistungpvanteil; fhem("sleep .1; setreading DOIF_Auto_Ladestrom LeistungNetzAnteilkwh ".$netzanteil/1000); } fhem("sleep .1; setreading DOIF_Auto_Ladestrom LeistungPVAnteil ".$leistungpvanteil); if ($ueberschuss<0) {$ueberschuss=0}; $ueberschuss=$ueberschuss*1000; $ueberschuss2=$ueberschuss2*1000; my $ladeleistung=$ueberschuss; my $zusatz=AttrVal("DOIF_Auto_Ladestrom","zusatzladung",0); my $akkuvolloffset=AttrVal("DOIF_Auto_Ladestrom","offsetpvakkuvoll",0); if ($akkuvolloffset!=0) { my $soc=ReadingsNum("BatterieWR","BatteryCapacity",0); if ($soc>95) { $zusatz=$akkuvolloffset; Log(3,"lade wehcsel weil der Akku voll ist ".$zusatz); } } my $mindestladung=AttrVal("DOIF_Auto_Ladestrom","mindestladung",0); my $maxladung=AttrVal("DOIF_Auto_Ladestrom","maxladung",0); fhem("sleep .1; setreading DOIF_Auto_Ladestrom ladeleistungin ".$ladeleistung); fhem("sleep .1; setreading DOIF_Auto_Ladestrom ladeleistungin2 ".$ueberschuss2); $ladeleistung=$ladeleistung+$zusatz; if ($mindestladung>0) { if ($ladeleistung<$mindestladung) { $ladeleistung=$mindestladung; } } if ($maxladung>0 ) { if ($ladeleistung>$maxladung) { $ladeleistung=$maxladung; } } if ($ladeleistung<0) {$ladeleistung=0}; fhem("sleep .1; setreading DOIF_Auto_Ladestrom ladeleistung ".$ladeleistung); }
# 1:
# helper:
# NOTIFYDEV DOIF_Auto_Ladestrom,global
# _98_statistics STATISTICS_VERBRAUCH
# event ladeleistung: 3085,statLeistungPVAnteilkwh: Hour: 0.5 Day: 4.7 Month: 4.7 Year: 4.7 (since: 2023-06-11 ),statLeistungNetzAnteilkwh: Hour: -0.514 Day: -1.960 Month: -1.960 Year: -1.960 (since: 2023-06-11 )
# globalinit 1
# last_timer 1
# sleeptimer -1
# timerdev
# timerevent timer_1
# triggerDev DOIF_Auto_Ladestrom
# DOIF_Readings_events:
# ladeleistungavg: 1255.33333333333
# ladeleistungavg: 1000
# ladeleistungavg: 1500
# ladeleistungavg: 1743.33333333333
# ladeleistungavg: 2213.66666666667
# ladeleistungavg: 2099.33333333333
# ladeleistungavg: 1913.66666666667
# ladeleistungavg: 2204
# ladeleistungavg: 2395.66666666667
# ladeleistungavg: 2417.66666666667
# ladeleistungavg: 2448
# ladeleistungavg: 2468.33333333333
# ladeleistungavg: 2375.33333333333
# ladeleistungavg: 2276.33333333333
# ladeleistungavg: 2160
# ladeleistungavg: 2167
# ladeleistungavg: 2173.66666666667
# ladeleistungavg: 2308.66666666667
# ladeleistungavg: 2445.33333333333
# ladeleistungavg: 2568
# ladeleistungavg: 2573.33333333333
# ladeleistungavg: 2689.66666666667
# ladeleistungavg: 2684
# ladeleistungavg: 2686.66666666667
# ladeleistungavg: 2583
# ladeleistungavg: 2607.66666666667
# ladeleistungavg: 2632.33333333333
# ladeleistungavg: 2262.33333333333
# ladeleistungavg: 1892.33333333333
# ladeleistungavg: 1500
# ladeleistungavg: 1945.66666666667
# ladeleistungavg: 2402.66666666667
# ladeleistungavg: 2863.33333333333
# ladeleistungavg: 2891
# ladeleistungavg: 2879.66666666667
# ladeleistungavg: 2942
# ladeleistungavg: 2980.33333333333
# ladeleistungavg: 3033.66666666667
# ladeleistungavg: 3031
# ladeleistungavg: 3024.33333333333
# ladeleistungavg: 3044.66666666667
# ladeleistungavg: 3045.33333333333
# ladeleistungavg: 3483
# ladeleistungavg: 3486
# ladeleistungavg: 3493.33333333333
# DOIF_Readings_eventsState:
# ladeleistungavg: 1255.33333333333
# ladeleistungavg: 1000
# ladeleistungavg: 1500
# ladeleistungavg: 1743.33333333333
# ladeleistungavg: 2213.66666666667
# ladeleistungavg: 2099.33333333333
# ladeleistungavg: 1913.66666666667
# ladeleistungavg: 2204
# ladeleistungavg: 2395.66666666667
# ladeleistungavg: 2417.66666666667
# ladeleistungavg: 2448
# ladeleistungavg: 2468.33333333333
# ladeleistungavg: 2375.33333333333
# ladeleistungavg: 2276.33333333333
# ladeleistungavg: 2160
# ladeleistungavg: 2167
# ladeleistungavg: 2173.66666666667
# ladeleistungavg: 2308.66666666667
# ladeleistungavg: 2445.33333333333
# ladeleistungavg: 2568
# ladeleistungavg: 2573.33333333333
# ladeleistungavg: 2689.66666666667
# ladeleistungavg: 2684
# ladeleistungavg: 2686.66666666667
# ladeleistungavg: 2583
# ladeleistungavg: 2607.66666666667
# ladeleistungavg: 2632.33333333333
# ladeleistungavg: 2262.33333333333
# ladeleistungavg: 1892.33333333333
# ladeleistungavg: 1500
# ladeleistungavg: 1945.66666666667
# ladeleistungavg: 2402.66666666667
# ladeleistungavg: 2863.33333333333
# ladeleistungavg: 2891
# ladeleistungavg: 2879.66666666667
# ladeleistungavg: 2942
# ladeleistungavg: 2980.33333333333
# ladeleistungavg: 3033.66666666667
# ladeleistungavg: 3031
# ladeleistungavg: 3024.33333333333
# ladeleistungavg: 3044.66666666667
# ladeleistungavg: 3045.33333333333
# ladeleistungavg: 3483
# ladeleistungavg: 3486
# ladeleistungavg: 3493.33333333333
# timerevents:
# timer_1
# timereventsState:
# timer_1
# triggerEvents:
# ladeleistung: 3085
# statLeistungPVAnteilkwh: Hour: 0.5 Day: 4.7 Month: 4.7 Year: 4.7 (since: 2023-06-11 )
# statLeistungNetzAnteilkwh: Hour: -0.514 Day: -1.960 Month: -1.960 Year: -1.960 (since: 2023-06-11 )
# ladeleistungavg: 3493.33333333333
# triggerEventsState:
# ladeleistung: 3085
# statLeistungPVAnteilkwh: Hour: 0.5 Day: 4.7 Month: 4.7 Year: 4.7 (since: 2023-06-11 )
# statLeistungNetzAnteilkwh: Hour: -0.514 Day: -1.960 Month: -1.960 Year: -1.960 (since: 2023-06-11 )
# ladeleistungavg: 3493.33333333333
# interval:
# intervalfunc:
# localtime:
# 0 1686470666
# realtime:
# 0 10:04:26
# time:
# 0 +60
# timeCond:
# 0 0
# timer:
# 0 0
# timers:
# 0 0
# triggertime:
# 1686470666:
# localtime 1686470666
# hash:
# uiState:
# uiTable:
#
setstate DOIF_Auto_Ladestrom cmd_1
setstate DOIF_Auto_Ladestrom 2023-06-11 10:01:26 LeistungNetzAnteilkwh 57.013
setstate DOIF_Auto_Ladestrom 2023-06-11 10:03:26 LeistungPVAnteil 27437
setstate DOIF_Auto_Ladestrom 2023-06-11 10:03:26 LeistungPVAnteilkwh 27.4
setstate DOIF_Auto_Ladestrom 2023-06-11 10:03:26 cmd 1
setstate DOIF_Auto_Ladestrom 2023-06-11 10:03:26 cmd_event timer_1
setstate DOIF_Auto_Ladestrom 2023-06-11 10:03:26 cmd_nr 1
setstate DOIF_Auto_Ladestrom 2023-06-11 10:03:26 ladeleistung 3085
setstate DOIF_Auto_Ladestrom 2023-06-11 10:03:26 ladeleistungavg 3493.33333333333
setstate DOIF_Auto_Ladestrom 2023-06-11 10:03:26 ladeleistungin 3385
setstate DOIF_Auto_Ladestrom 2023-06-11 10:03:26 ladeleistungin2 3313
setstate DOIF_Auto_Ladestrom 2023-06-11 08:07:26 mode enabled
setstate DOIF_Auto_Ladestrom 2023-06-11 10:03:26 statLeistungNetzAnteilkwh Hour: -0.514 Day: -1.960 Month: -1.960 Year: -1.960 (since: 2023-06-11 )
setstate DOIF_Auto_Ladestrom 2023-06-11 09:59:55 statLeistungNetzAnteilkwhLast Hour: -0.981 Day: -1.025 Month: - Year: - (since: 2023-06-10_14:49:16 )
setstate DOIF_Auto_Ladestrom 2023-06-11 10:03:26 statLeistungPVAnteilkwh Hour: 0.5 Day: 4.7 Month: 4.7 Year: 4.7 (since: 2023-06-11 )
setstate DOIF_Auto_Ladestrom 2023-06-11 09:59:55 statLeistungPVAnteilkwhLast Hour: 2.7 Day: 22.8 Month: - Year: - (since: 2023-06-10_08:48:38 )
setstate DOIF_Auto_Ladestrom 2023-06-11 10:03:26 state cmd_1
setstate DOIF_Auto_Ladestrom 2023-06-11 10:03:26 timer_01_c01 11.06.2023 10:04:26
Moin,
ich mache dies über einen MovingAverage.
https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen (https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen)
danke für den Tipp, das ist sicherlich sauberer als meine Lösung es im DOIF mit avg3 zu glätten.
Aber bei meiner Anforderung eine Leistungsunterschreitung temporär zu ignorieren kann mir das nicht helfen oder? Hätte es gerne im selben Perl Code drin, da ich davon ausgehe dass ich in dem Bereich demnächst noch öfter erweitern werde.
Der MovingAverage sollte Dir helfen können.
Du setzt den MovingAverage auf die Überschussleistung und kannst im DOIF direkt darauf zugreifen.
Ich mache es beispielsweise so:
Einschalten eines Verbraucherns wenn die aktuelle Einspeiseleistung UND der über x-Perioden gleitende Durchschnitt über einem bestimmten Wert liegt.
Abschaltung bei Unterschreitung des gleitenden Durschnitts.
Damit nimmst Du die kurzen Unterschreitungen durch eine Wolke oder die Kaffeemaschine raus.
hmmm.... bei dem Ansatz könnte ich auch einfach meine Leistungsausgabe von avg3 auf avg5 umstellen oder?
avg5 geht natürlich auch.
Bei mir werden die Daten alle 10 Sekunden aktualisiert und ich spiele im Bereich von 10 bis 20 Perioden, je nach Anwendungsfall.
danke, werd mal rumprobieren. Mich würde trotzdem der Programmieransatz mit definierten Sekunden usw interessieren.
Man kann neuerdings statt avg mit diffpsec die Änderungsrate berechnen. Hier muss man allerdings den absoluten Wert des Zählers nehmen.
siehe: https://fhem.de/commandref_DE.html#DOIF_Reading_Funktionen
Danke für die Tipps, aber mich würde trotzdem interessieren, wie ich das realisieren kann:
Wenn der berechnete Überschuss weniger als x Watt für maximal y Sekunden ist, dann die Mindestladung weitergeben ansonsten 0.
Ohne den Eingangswert zu glätten oder ähnliches.
DOIF ([Uebeschuss:state] > x) (ladung starten) DOELSE (ladung beenden)
attr wait y:z
so kannst du bestimmen, nach welcher Zeit die Ladung beginnen soll (y) und nach welcher sie wieder endet (z) abhängig vom Überschuss.
stimmt, mit DOIF is das mit wait Ideal, aber wie kann ich das in mein DOIF Perl Mischmasch Konstrukt einbauen?
Perl ist sehr angenehm zum berechnen des Überschuss und PVAnteils. AVG und Wait geht mit DOIF sehr gut
Zitat von: andi11 am 13 Juni 2023, 21:00:16stimmt, mit DOIF is das mit wait Ideal, aber wie kann ich das in mein DOIF Perl Mischmasch Konstrukt einbauen?
Perl ist sehr angenehm zum berechnen des Überschuss und PVAnteils. AVG und Wait geht mit DOIF sehr gut
Du kannst im DOIF-FHEM-Modus Perl verwenden oder den DOIF-Perl-Modus nehmen, dort musst du aber statt wait eine Perlfunktion set_Exec benutzen.
Zitat von: Damian am 13 Juni 2023, 20:06:40DOIF ([Uebeschuss:state] > x) (ladung starten) DOELSE (ladung beenden)
attr wait y:z
so kannst du bestimmen, nach welcher Zeit die Ladung beginnen soll (y) und nach welcher sie wieder endet (z) abhängig vom Überschuss.
So mach ich das schon seit Jahren. Ich warte 30 sec. Und regle den Strom runter, falls in der Zwischenzeit die Sonne wieder kommen sollte