FHEM Forum

FHEM => Automatisierung => Perl für FHEM-User => Thema gestartet von: andi11 am 11 Juni 2023, 10:10:20

Titel: Ladeleistung länger als xxx Sekunden unterschritten
Beitrag von: andi11 am 11 Juni 2023, 10:10:20
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

Titel: Aw: Ladeleistung länger als xxx Sekunden unterschritten
Beitrag von: PotatoFritz am 11 Juni 2023, 10:17:33
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)
Titel: Aw: Ladeleistung länger als xxx Sekunden unterschritten
Beitrag von: andi11 am 11 Juni 2023, 10:21:51
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.
Titel: Aw: Ladeleistung länger als xxx Sekunden unterschritten
Beitrag von: PotatoFritz am 11 Juni 2023, 10:52:17
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.


Titel: Aw: Ladeleistung länger als xxx Sekunden unterschritten
Beitrag von: andi11 am 11 Juni 2023, 11:03:12
hmmm.... bei dem Ansatz könnte ich auch einfach meine Leistungsausgabe von avg3 auf avg5 umstellen oder?
Titel: Aw: Ladeleistung länger als xxx Sekunden unterschritten
Beitrag von: PotatoFritz am 11 Juni 2023, 11:09:00
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.


Titel: Aw: Ladeleistung länger als xxx Sekunden unterschritten
Beitrag von: andi11 am 11 Juni 2023, 11:46:01
danke, werd mal rumprobieren. Mich würde trotzdem der Programmieransatz mit definierten Sekunden usw interessieren.
Titel: Aw: Ladeleistung länger als xxx Sekunden unterschritten
Beitrag von: Damian am 11 Juni 2023, 12:41:05
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
Titel: Aw: Ladeleistung länger als xxx Sekunden unterschritten
Beitrag von: andi11 am 13 Juni 2023, 19:34:56
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.
Titel: Aw: Ladeleistung länger als xxx Sekunden unterschritten
Beitrag von: Damian am 13 Juni 2023, 20:06:40
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.
Titel: Aw: Ladeleistung länger als xxx Sekunden unterschritten
Beitrag von: andi11 am 13 Juni 2023, 21:00:16
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
Titel: Aw: Ladeleistung länger als xxx Sekunden unterschritten
Beitrag von: Damian am 13 Juni 2023, 22:21:25
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.
Titel: Aw: Ladeleistung länger als xxx Sekunden unterschritten
Beitrag von: satprofi am 21 Dezember 2023, 08:27:34
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