Ladeleistung länger als xxx Sekunden unterschritten

Begonnen von andi11, 11 Juni 2023, 10:10:20

Vorheriges Thema - Nächstes Thema

andi11

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



andi11

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.

PotatoFritz

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.



andi11

hmmm.... bei dem Ansatz könnte ich auch einfach meine Leistungsausgabe von avg3 auf avg5 umstellen oder?

PotatoFritz

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.



andi11

danke, werd mal rumprobieren. Mich würde trotzdem der Programmieransatz mit definierten Sekunden usw interessieren.

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

andi11

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.

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

andi11

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

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

satprofi

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
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram