Hallo zusammen,
ich habe ein DOIF, dass schon länger nicht verändert wurde, jetzt aber nicht mehr richtig auf die EVENTS reagiert.
Momentan geht es um das cmd_6 .
Ein "set WR_1_Speicher_1_ExternControl cmd_6" führt die Perl Kommandos korrekt aus und die gewünsche Funktion arbeitet perfekt.
Was nicht klappt ist das Auslösen mit dem uiTable, was aber bereits seit einem Jahr funktioniert hat.
Im EVENT Monitor kommt dieer Event jedoch!
[$SELF:ui_command] eq "3 Minuten Wiederholung"
Auch der Timer alle drei Mintuen klappt nicht verlässlich
and [+180]
Hier nochmal alle Bedingungen
DOELSEIF
([$SELF:ui_command] eq "3 Minuten Wiederholung" or
[WR_1_API:Battery_Control] > 0 and ## Wenn die ExternControl am WR konfiguriert ist
ReadingsVal("$SELF","SpeicherCmdRepeatActive","") eq "An" and ## Wenn die ExternControl Aktiviert ist
ReadingsVal("$SELF","SpeicherCmdRepeatRunning","") eq "An" and ## Wenn es ExternControl Kommandos zum Senden gibt
[ {sunrise_abs("HORIZON=+5.0",0,"6:00","08:35")}
- {sunset_abs("HORIZON=+8.0",0,"15:00","21:00")} ] and [+180] ) ## alle 3 Minuten den Befehl wiederholen
Das merkwürdige ist jedoch, dass ab und an der Timer wohl doch auslöst, was ich dann im Log durch meine Meldungen sehen kann.
==> mit dem set command...
2022.02.27 10:28:55.642 3: WR_1_Speicher_1_ExternControl cmd_6 : SpeicherMiddayControlActive laden wegen MaxSoc von 08:00 auf 12:00 Uhr verschoben
2022.02.27 10:29:08.057 3: WR_1_Speicher_1_ExternControl cmd_6 : SpeicherMiddayControlActive laden wegen MaxSoc von 08:00 auf 12:00 Uhr verschoben
2022.02.27 10:29:21.100 3: WR_1_Speicher_1_ExternControl cmd_6 : SpeicherMiddayControlActive laden wegen MaxSoc von 08:00 auf 12:00 Uhr verschoben
==> noch mal das set command
2022.02.27 10:36:20.036 3: WR_1_Speicher_1_ExternControl cmd_6 : SpeicherMiddayControlActive laden wegen MaxSoc von 08:00 auf 12:00 Uhr verschoben
==> jetzt habe ich mal nichts gemacht
==> und hier kommt wohl wieder ein timer
2022.02.27 10:42:20.036 3: WR_1_Speicher_1_ExternControl cmd_6 : SpeicherMiddayControlActive laden wegen MaxSoc von 08:00 auf 12:00 Uhr verschoben
==> jetzt fehlt der timer wieder
==> aber nach 6 Minuten löst wieder einer aus
2022.02.27 10:48:20.075 3: WR_1_Speicher_1_ExternControl cmd_6 : SpeicherMiddayControlActive laden wegen MaxSoc von 08:00 auf 12:00 Uhr verschoben
2022.02.27 10:54:20.066 3: WR_1_Speicher_1_ExternControl cmd_6 : SpeicherMiddayControlActive laden wegen MaxSoc von 08:00 auf 12:00 Uhr verschoben
2022.02.27 11:12:20.032 3: WR_1_Speicher_1_ExternControl cmd_6 : SpeicherMiddayControlActive laden wegen MaxSoc von 08:00 auf 12:00 Uhr verschoben
2022.02.27 11:18:20.049 3: WR_1_Speicher_1_ExternControl cmd_6 : SpeicherMiddayControlActive laden wegen MaxSoc von 08:00 auf 12:00 Uhr verschoben
2022.02.27 11:24:20.078 3: WR_1_Speicher_1_ExternControl cmd_6 : SpeicherMiddayControlActive laden wegen MaxSoc von 08:00 auf 12:00 Uhr verschoben
2022.02.27 11:36:20.047 3: WR_1_Speicher_1_ExternControl cmd_6 : SpeicherMiddayControlActive laden wegen MaxSoc von 08:00 auf 12:00 Uhr verschoben
Events...
2022-02-27 11:24:20.029 DOIF WR_1_Speicher_1_ExternControl ui_command: ---
2022-02-27 11:24:20.069 HTTPMOD WR_1_API 23_07_Battery_ExternControl_MaxChargePowerAbs 0
2022-02-27 11:24:20.099 DOIF WR_1_Speicher_1_ExternControl cmd_nr: 6
2022-02-27 11:24:20.099 DOIF WR_1_Speicher_1_ExternControl cmd: 6
2022-02-27 11:24:20.099 DOIF WR_1_Speicher_1_ExternControl cmd_event: timer_8
2022-02-27 11:24:20.099 DOIF WR_1_Speicher_1_ExternControl 3 Minuten Wiederholung
2022-02-27 11:36:20.016 DOIF WR_1_Speicher_1_ExternControl ui_command: ---
2022-02-27 11:36:20.040 HTTPMOD WR_1_API 23_07_Battery_ExternControl_MaxChargePowerAbs 0
2022-02-27 11:36:20.058 DOIF WR_1_Speicher_1_ExternControl cmd_nr: 6
2022-02-27 11:36:20.058 DOIF WR_1_Speicher_1_ExternControl cmd: 6
2022-02-27 11:36:20.058 DOIF WR_1_Speicher_1_ExternControl cmd_event: timer_8
2022-02-27 11:36:20.058 DOIF WR_1_Speicher_1_ExternControl 3 Minuten Wiederholung
defmod WR_1_Speicher_1_ExternControl DOIF ################################################################################################################\
## 1 Speicher Status vom WR_1_Speicher_1 aktualisieren.\
## Dies geschieht über das WR_1_API Device, da der Speicher direkt am Wechselrichter angeschlossen ist.\
##\
< snip>
################################################################################################################\
## 6 Wiederhole alle 180s die Kommandos der ExternControl Steuerung\
##\
DOELSEIF\
([$SELF:ui_command] eq "3 Minuten Wiederholung" or\
[WR_1_API:Battery_Control] > 0 and ## Wenn die ExternControl am WR konfiguriert ist\
ReadingsVal("$SELF","SpeicherCmdRepeatActive","") eq "An" and ## Wenn die ExternControl Aktiviert ist\
ReadingsVal("$SELF","SpeicherCmdRepeatRunning","") eq "An" and ## Wenn es ExternControl Kommandos zum Senden gibt\
[ {sunrise_abs("HORIZON=+5.0",0,"6:00","08:35")} \
- {sunset_abs("HORIZON=+8.0",0,"15:00","21:00")} ] and [+180] ) ## alle 3 Minuten den Befehl wiederholen\
\
{\
CommandSetReading(undef, "$SELF ui_command ---");;\
my $MaxChargePowerTime = 0;;\
my $MaxChargePowerAbs_midday = 0;;\
\
if (ReadingsVal("$SELF","SpeicherMiddayControlRunning","") eq "An" ) { ## Wurde ein Mittagshoch ermittelt und aktiviert?\
\
if ( time < time_str2num(POSIX::strftime("%Y-%m-%d",localtime(time))." [$SELF:SpeicherMidday_NotBefore]") and\
[WR_1:Act_state_of_charge] >= [WR_1_API:Battery_InternControl_MinSoc] *3 ) {\
CommandSet(undef, "WR_1_API 23_07_Battery_ExternControl_MaxChargePowerAbs 0");; ## nicht vor z.B. 09:00 Uhr starten. Ladung auf 0 Watt setzen\
if (AttrVal("$SELF","verbose",0) >=3) { ## Es wird nur langsam geladen und MaxSOC limitiert.\
Log 3, "$SELF cmd_6 : SpeicherMiddayControl vor [$SELF:SpeicherMidday_NotBefore] Uhr noch nicht laden";;\
};;\
} else { \
if ( time < time_str2num(POSIX::strftime("%Y-%m-%d",localtime(time))." [WR_1:Solar_middayhigh_fc0_start]") ) { ## Ist noch Vormittag?\
CommandSet(undef, "WR_1_API 23_07_Battery_ExternControl_MaxChargePowerAbs [$SELF:SpeicherMidday_MaxChargePowerAbs_morning]");;\
CommandSet(undef, "WR_1_API 23_09_Battery_ExternControl_MaxSocRel [$SELF:SpeicherMidday_MaxSOC]");;\
if (AttrVal("$SELF","verbose",0) >=3) { ## Es wird nur langsam geladen und MaxSOC limitiert.\
Log 3, "$SELF cmd_6 : SpeicherMiddayControl vor [WR_1:Solar_middayhigh_fc0_start] limitieren";;\
Log 3, "$SELF cmd_6 : Battery_ExternControl_MaxChargePowerAbs auf [$SELF:SpeicherMidday_MaxChargePowerAbs_morning] limitiert";;\
Log 3, "$SELF cmd_6 : Battery_ExternControl_MaxSOC auf [$SELF:SpeicherMidday_MaxSOC] % limitiert";;\
};;\
};;\
};;\
\
if (time_str2num(POSIX::strftime("%Y-%m-%d",localtime(time))." [WR_1:Solar_middayhigh_fc0_start]") <= time and ## Es ist Mittag\
time <= time_str2num(POSIX::strftime("%Y-%m-%d",localtime(time))." [WR_1:Solar_middayhigh_fc0_stop]") ) {\
\
if (ReadingsVal("$SELF","SpeicherMaxSOCControlRunning","") eq "An" and ## Somit bleibt weniger Platz im Speicher und es ist\
time < time_str2num(POSIX::strftime("%Y-%m-%d",localtime(time))." 12:00") ) { ## besser nicht vor 12:00 Uhr zu beginnen.\
CommandSet(undef, "WR_1_API 23_07_Battery_ExternControl_MaxChargePowerAbs 0");;\
if (AttrVal("$SELF","verbose",0) >=3)\
{Log 3, "$SELF cmd_6 : SpeicherMiddayControlActive laden wegen MaxSoc von [WR_1:Solar_middayhigh_fc0_start] auf 12:00 Uhr verschoben"};;\
} else { ## auch jetzt nicht mit voller Leistung laden\
\
if ([$SELF:SpeicherMidday_MaxChargePowerAbs_midday] == 0) { ## dynamische Leistungsermittlung oder vorgewählter Wert\
$MaxChargePowerTime = round((time_str2num(POSIX::strftime("%Y-%m-%d",localtime(time))." [WR_1:Solar_middayhigh_fc0_stop]") - time) / 3600 , 2);; ## Mittags Ladezeit bestimmen\
if ( $MaxChargePowerTime < 1 ) { $MaxChargePowerTime = 1;;};;\
$MaxChargePowerAbs_midday = round( [WR_1:Battery_work_capacity] * ([$SELF:SpeicherMaxSOC_Actual] - [WR_1:Act_state_of_charge]) / 100 / $MaxChargePowerTime , 0);;\
if ($MaxChargePowerAbs_midday < 0) { $MaxChargePowerAbs_midday = 0 };; ## Nicht unter 0\
Log 3, "$SELF Test : Mittags $MaxChargePowerTime h mit $MaxChargePowerAbs_midday W laden";;\
} else {\
$MaxChargePowerAbs_midday = [$SELF:SpeicherMidday_MaxChargePowerAbs_midday];; ## Nimm den vorgewählten Wert\
};;\
\
CommandSet(undef, "WR_1_API 23_07_Battery_ExternControl_MaxChargePowerAbs $MaxChargePowerAbs_midday");;\
CommandSet(undef, "WR_1_API 23_09_Battery_ExternControl_MaxSocRel [$SELF:SpeicherMaxSOC_Actual]");;\
if (AttrVal("$SELF","verbose",0) >=3) {\
Log 3, "$SELF cmd_6 : SpeicherMiddayControlActive laden von [WR_1:Solar_middayhigh_fc0_start] bis [WR_1:Solar_middayhigh_fc0_stop] freigegeben";;\
Log 3, "$SELF cmd_6 : Battery_ExternControl_MaxChargePowerAbs auf $MaxChargePowerAbs_midday limitiert";;\
Log 3, "$SELF cmd_6 : Battery_ExternControl_MaxSocRel [$SELF:SpeicherMaxSOC_Actual] % halten"\
};;\
};;\
};;\
\
if (time > time_str2num(POSIX::strftime("%Y-%m-%d",localtime(time))." [WR_1:Solar_middayhigh_fc0_stop]") ) { ## Es ist Nachmittag und die\
CommandSetReading(undef, "$SELF SpeicherMiddayControlRunning Aus");; ## Mittagssteuerung wird abgeschaltet\
CommandSet(undef, "WR_1_API 23_09_Battery_ExternControl_MaxSocRel [$SELF:SpeicherMaxSOC_Actual]");;\
if (AttrVal("$SELF","verbose",0) >=3) {\
Log 3, "$SELF cmd_6 : Battery_ExternControl_MaxSocRel [$SELF:SpeicherMaxSOC_Actual] % halten";;\
Log 3, "$SELF cmd_6 : SpeicherMiddayControl nach [WR_1:Solar_middayhigh_fc0_stop] beendet";;\
};;\
};;\
};;\
\
if (ReadingsVal("$SELF","SpeicherMaxSOCControlRunning","") eq "An" and ## Nur MaxSOC soll begrenzt werden\
[$SELF:SpeicherMaxSOC_Actual] <= 100 and \
ReadingsVal("$SELF","SpeicherMiddayControlRunning","") eq "Aus") { ## sobald die Mittagssteuerung fertig ist\
CommandSet(undef, "WR_1_API 23_09_Battery_ExternControl_MaxSocRel [$SELF:SpeicherMaxSOC_Actual]");;\
if (AttrVal("$SELF","verbose",0) >=3)\
{Log 3, "$SELF cmd_6 : Battery_ExternControl_MaxSocRel [$SELF:SpeicherMaxSOC_Actual] % halten"};;\
};;\
\
if (AttrVal("$SELF","verbose",0) >=4)\
{Log 3, "$SELF cmd_6 : ExternControl Kommandowiederholung erledigt"};;\
}\
\
################################################################################################################\
## 7 Bestimmung eines möglichen SOC für den nächsten Morgen und\
## Vorbereitung für ein Leistungshoch am Mittag\
##\
< snip >
attr WR_1_Speicher_1_ExternControl DbLogExclude .*
attr WR_1_Speicher_1_ExternControl alias WR_1_Speicher_1_ExternControl
attr WR_1_Speicher_1_ExternControl checkall event
attr WR_1_Speicher_1_ExternControl cmdState Status gelesen|smart_Laden Start|smart_Laden Beendet|extern Trigger Freigabe|extern Trigger Sperren|3 Minuten Wiederholung|MinSOC Bestimmung|ExternControl Reset|MinSOC auf Winter|MinSOC auf Sommer|MaxSOC 100% vermeiden|DC_Power_Abs gesetzt|BYD Status Abfrage
attr WR_1_Speicher_1_ExternControl disable 0
attr WR_1_Speicher_1_ExternControl group PV Eigenverbrauch
attr WR_1_Speicher_1_ExternControl icon measure_battery_100
attr WR_1_Speicher_1_ExternControl readingList SpeicherExternTrigger SpeicherCmdRepeatActive SpeicherZeitStart SpeicherZeitEnde SpeicherEntladung SpeicherTrigger SpeicherMiddayControlActive SpeicherMidday_Inverter_Max_Power SpeicherMidday_MaxChargePowerAbs_morning SpeicherMidday_MaxChargePowerAbs_midday SpeicherMidday_MaxSOC SpeicherMidday_NotBefore SpeicherMinSOC_Sommer SpeicherMinSOC_Winter SpeicherMinSOC_fc1_Limit SpeicherMaxSOCControlActive SpeicherMaxSOC_Actual SpeicherMaxSOC_DayBefore SpeicherMaxSOC_fc1_Limit
attr WR_1_Speicher_1_ExternControl room Strom->Photovoltaik
attr WR_1_Speicher_1_ExternControl setList SpeicherExternTrigger:frei,gesperrt SpeicherCmdRepeatActive:0,1 SpeicherZeitStart:time SpeicherZeitEnde:time SpeicherEntladung:Automatik,Zeit,Trigger SpeicherTrigger:entladen,gesperrt,none SpeicherMiddayControlActive:0,1 SpeicherMidday_Inverter_Max_Power:slider,3000,500,20000 SpeicherMidday_MaxChargePowerAbs_morning:slider,0,50,4700 SpeicherMidday_MaxChargePowerAbs_midday:slider,0,100,4700 SpeicherMidday_MaxSOC:slider,20,5,50 SpeicherMidday_NotBefore:time SpeicherMinSOC_Sommer:slider,5,1,20 SpeicherMinSOC_Winter:slider,5,1,20 SpeicherMinSOC_fc1_Limit:slider,7000,500,17000 SpeicherMaxSOCControlActive:0,1 SpeicherMaxSOC_Actual:slider,60,5,100 SpeicherMaxSOC_DayBefore:slider,15,5,100 SpeicherMaxSOC_fc1_Limit:slider,10000,2000,50000
attr WR_1_Speicher_1_ExternControl sortby 122
attr WR_1_Speicher_1_ExternControl uiTable {\
package ui_Table;;\
## $TR{0} = "style='color:yellow;;text-align:left;;font-weight:bold;;font-size:18px'";; ## Reihe 0 für Überschrift\
$TABLE = "style='width:100%;;'";;\
\
$TD{0..9}{0} = "align='center' style='font-size:16px;;border-right-style:solid;;border-color:darkgreen;;border-right-width:2px;;width:26%'";;\
\
$TD{0..9}{1} = "style='border-top-style:solid;;border-bottom-style:solid;;border-right-style:solid;;border-color:darkgreen;;border-top-width:2px;;border-bottom-width:2px;;border-right-width:1px;;width:36%;;font-weight:bold;;'";;\
$TD{0..9}{2..4} = "style='border-top-style:solid;;border-bottom-style:solid;;border-right-style:solid;;border-color:darkgreen;;border-top-width:2px;;border-bottom-width:2px;;border-right-width:1px;;width:8%;;text-align:center;;'";;\
$TD{0..9}{5} = "style='border-top-style:solid;;border-bottom-style:solid;;border-right-style:solid;;border-color:darkgreen;;border-top-width:2px;;border-bottom-width:2px;;border-right-width:2px;;width:8%;;text-align:center;;'";;\
\
sub FUNC_batt {\
my($val)=@_;;\
my $ret="position:absolute;;left:".(90*$val/100)."px;;width:90px;;height:20px;;background:linear-gradient( to right,#F8F8E0 ".(90-(90*$val/100))."px,rgba(0,0,0,0) ".(90-(90*$val/100))."px);;";;\
return $ret;;\
}\
sub FUNC_Status {\
my($value, $min, $colorMin, $statusMin, $colorMiddel, $statusMiddle, $max, $colorMax, $statusMax)=@_;;\
my $ret = ($value < $min)? '<span style="color:'.$colorMin.'">'.$statusMin.'</span>' : ($value > $max)? '<span style="color:'.$colorMax.'">'.$statusMax.'</span>' : '<span style="color:'.$colorMiddel.'">'.$statusMiddle.'</span>';;\
return $ret;;\
}\
}\
\
#########################################################\
## "Spalte 0"|"Spalte 1"|"Spalte 2"|"Spalte 3"|"Spalte 4"|"Spalte 5"\
\
"$SELF"|"Kommando<dd>Auswahl / DcPowerAbs / Status</dd>" | widget([$SELF:ui_command],"uzsuDropDown,---,smart_Laden start,smart_Laden beenden,3 Minuten Wiederholung,Reset,DC_Power_Abs,Sommer,Winter") | widget([$SELF:SpeicherDcPowerAbs],"selectnumbers,-4500,250,4500,0,lin")."W" |[WR_1_API:Battery_EM_State]|([$SELF:SpeicherExternTrigger] eq "gesperrt" and [WR_1_API:Battery_InternControl_MinHomeConsumption] eq "30000")?'<span style="color:red">smart_Laden aktiv</span>':""\
\
|"Speicher<dd>Steuerung</dd>" | widget([$SELF:SpeicherEntladung],"uzsuDropDown,Automatik,Trigger,Zeit") |""|\
FUNC_Status([WR_1:Actual_Battery_charge_-minus_or_discharge_-plus_P],-10,"#00FF00","Laden","orange","Standby",15,"red","Entladen").FUNC_Status([WR_1:Act_state_of_charge],15,"red","Speicher SOC","orange","Speicher SOC",49,"#00FF00","Speicher SOC")|\
\
FUNC_Status([WR_1:Actual_Battery_charge_-minus_or_discharge_-plus_P],-10,"green",[WR_1:Actual_Battery_charge_-minus_or_discharge_-plus_P],"orange",[WR_1:Actual_Battery_charge_-minus_or_discharge_-plus_P],15,"red",[WR_1:Actual_Battery_charge_-minus_or_discharge_-plus_P])." W"."<div style='border-width:2px;;border-style:solid;;border-color:gray;;position:relative;;width:90px;;height:20px;;background:linear-gradient( to right, red 0px,yellow 30px,green 50px);;'>".STY(" ",FUNC_batt([WR_1:Act_state_of_charge])).STY(::round([WR_1:Act_state_of_charge],0)."%","font-size:16px;;position:absolute;;top:2px;;left:30px")."</div>"\
\
\
|"Trigger<dd>Status / ExternTrigger / Start / Ende</dd>" | widget([$SELF:SpeicherTrigger],"uzsuDropDown,entladen,gesperrt,none") | widget([$SELF:SpeicherExternTrigger],"uzsuDropDown,frei,gesperrt,none") | widget([$SELF:SpeicherZeitStart],"time") | widget([$SELF:SpeicherZeitEnde],"time")\
\
|"Kommando Wiederholung<dd>aktiviert / läuft</dd>" | widget([$SELF:SpeicherCmdRepeatActive],"uzsuToggle,Aus,An") | widget([$SELF:SpeicherCmdRepeatRunning],"uzsuToggle,Aus,An") |""|""\
\
|"MaxSOC Kontrolle<dd>aktiviert / läuft</dd>" | widget([$SELF:SpeicherMaxSOCControlActive],"uzsuToggle,Aus,An") | widget([$SELF:SpeicherMaxSOCControlRunning],"uzsuToggle,Aus,An") |""|""\
\
|"MaxSOC Limit<dd>fc1_Limit / Minimum SOC Zeit / gestern / geplant</dd>" |\
FUNC_Status([WR_1:Solar_Calculation_fc1_day],[$SELF:SpeicherMaxSOC_fc1_Limit],"red","<","","",[$SELF:SpeicherMaxSOC_fc1_Limit]-1,"#00FF00",">="). widget([$SELF:SpeicherMaxSOC_fc1_Limit],"selectnumbers,2000,1000,40000,0,lin") | widget([$SELF:SpeicherMaxSOC_MinSOC_Time],"time"). widget([$SELF:SpeicherMaxSOC_MinSOC_MinSOC],"selectnumbers,5,1,100,0,lin") |\
"<div style='border-width:2px;;border-style:solid;;border-color:gray;;position:relative;;width:90px;;height:20px;;background:linear-gradient( to right, red 0px,yellow 30px,green 50px);;'>".STY(" ",FUNC_batt([$SELF:SpeicherMaxSOC_DayBefore])).STY("gestern","font-size:12px;;position:absolute;;top:3px;;left:25px")."</div>".widget([$SELF:SpeicherMaxSOC_DayBefore],"selectnumbers,5,1,100,0,lin")."%" |\
"<div style='border-width:2px;;border-style:solid;;border-color:gray;;position:relative;;width:90px;;height:20px;;background:linear-gradient( to right, red 0px,yellow 30px,green 50px);;'>".STY(" ",FUNC_batt([$SELF:SpeicherMaxSOC_Actual])).STY("geplant","font-size:12px;;position:absolute;;top:3px;;left:25px")."</div>".widget([$SELF:SpeicherMaxSOC_Actual],"selectnumbers,5,1,100,0,lin")."%"\
\
|"Mittags Kontrolle<dd>aktiviert / läuft</dd>" | widget([$SELF:SpeicherMiddayControlActive],"uzsuToggle,Aus,An") | widget([$SELF:SpeicherMiddayControlRunning],"uzsuToggle,Aus,An")|""|""\
\
|"Mittags Limits<dd>Inverter_Max_Power / Laden nicht vor / Start /Stop<br>MaxSOC morgens / Power morgens / Power mittags</dd>" | widget([$SELF:SpeicherMidday_Inverter_Max_Power],"selectnumbers,1000,250,15000,0,lin")."W<br>".widget([$SELF:SpeicherMidday_MaxSOC],"selectnumbers,5,1,100,0,lin")."%" | widget([$SELF:SpeicherMidday_NotBefore],"time").widget([$SELF:SpeicherMidday_MaxChargePowerAbs_morning],"selectnumbers,0,50,2000,0,lin")."W" | widget([WR_1:Solar_middayhigh_fc0_start],"time").widget([$SELF:SpeicherMidday_MaxChargePowerAbs_midday],"selectnumbers,0,1,5000,0,lin")."W" | widget([WR_1:Solar_middayhigh_fc0_stop],"time").([$SELF:SpeicherMidday_MaxChargePowerAbs_midday] == 0)?"dynamisch":""\
\
|"MinSOC Steuerung<dd>fc1_Limit / Winter | Sommer /aktuell</dd>"|\
FUNC_Status([WR_1:Solar_Calculation_fc1_day],[$SELF:SpeicherMinSOC_fc1_Limit],"red","<","","",[$SELF:SpeicherMinSOC_fc1_Limit]-1,"#00FF00",">=").widget([$SELF:SpeicherMinSOC_fc1_Limit],"selectnumbers,2000,1000,40000,0,lin")."wh" |\
widget([$SELF:SpeicherMinSOC_Winter],"selectnumbers,10,1,30,0,lin").widget([$SELF:SpeicherMinSOC_Sommer],"selectnumbers,5,1,10,0,lin")."%" |""|[WR_1_API:Battery_InternControl_MinSoc]." %"
attr WR_1_Speicher_1_ExternControl verbose 3
setstate WR_1_Speicher_1_ExternControl 3 Minuten Wiederholung
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:57:03 Device WR_1
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:30:46 SpeicherCmdRepeatActive An
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:30:47 SpeicherCmdRepeatRunning An
setstate WR_1_Speicher_1_ExternControl 2021-10-19 13:17:51 SpeicherDcPowerAbs 0
setstate WR_1_Speicher_1_ExternControl 2021-12-09 14:52:08 SpeicherEntladung Automatik
setstate WR_1_Speicher_1_ExternControl 2022-02-26 14:37:07 SpeicherExternTrigger none
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:30:51 SpeicherMaxSOCControlActive An
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:30:53 SpeicherMaxSOCControlRunning An
setstate WR_1_Speicher_1_ExternControl 2022-02-26 17:06:01 SpeicherMaxSOC_Actual 95
setstate WR_1_Speicher_1_ExternControl 2022-02-26 17:02:35 SpeicherMaxSOC_DayBefore 100.00
setstate WR_1_Speicher_1_ExternControl 2022-02-27 07:48:03 SpeicherMaxSOC_MinSOC_MinSOC 6
setstate WR_1_Speicher_1_ExternControl 2022-02-27 07:48:03 SpeicherMaxSOC_MinSOC_Time gefunden
setstate WR_1_Speicher_1_ExternControl 2021-09-02 16:23:44 SpeicherMaxSOC_fc1_Limit 30000
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:30:59 SpeicherMiddayControlActive An
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:30:58 SpeicherMiddayControlRunning An
setstate WR_1_Speicher_1_ExternControl 2021-09-02 16:22:22 SpeicherMidday_Inverter_Max_Power 8500
setstate WR_1_Speicher_1_ExternControl 2021-09-05 15:00:35 SpeicherMidday_MaxChargePowerAbs_midday 0
setstate WR_1_Speicher_1_ExternControl 2021-09-02 16:24:57 SpeicherMidday_MaxChargePowerAbs_morning 450
setstate WR_1_Speicher_1_ExternControl 2021-09-02 16:26:39 SpeicherMidday_MaxSOC 30
setstate WR_1_Speicher_1_ExternControl 2021-09-05 09:02:56 SpeicherMidday_NotBefore 09:00
setstate WR_1_Speicher_1_ExternControl 2021-09-02 16:26:15 SpeicherMinSOC_Sommer 5
setstate WR_1_Speicher_1_ExternControl 2021-09-02 16:26:03 SpeicherMinSOC_Winter 20
setstate WR_1_Speicher_1_ExternControl 2021-12-06 16:43:35 SpeicherMinSOC_fc1_Limit 15000
setstate WR_1_Speicher_1_ExternControl 2021-12-06 16:38:01 SpeicherTrigger entladen
setstate WR_1_Speicher_1_ExternControl 2021-12-05 14:14:07 SpeicherZeitEnde 18:00
setstate WR_1_Speicher_1_ExternControl 2021-12-09 14:58:15 SpeicherZeitStart 09:00
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:54:20 cmd 6
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:54:20 cmd_event timer_8
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:54:20 cmd_nr 6
setstate WR_1_Speicher_1_ExternControl 2022-02-26 12:47:30 e_Kia_eNiro_PV_WR_1_Speicher_1_ExternControl_smart_laden_before aktiv
setstate WR_1_Speicher_1_ExternControl 2022-02-26 13:11:41 e_WB_1_lp_1_ChargeStat not loading
setstate WR_1_Speicher_1_ExternControl 2022-02-26 13:11:42 e_WR_1_API_Battery_InternControl_MinHomeConsumption 50
setstate WR_1_Speicher_1_ExternControl 2022-02-20 10:09:01 e_WR_1_API_Battery_InternControl_MinSoc 5
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:54:05 e_WR_1_Act_state_of_charge 66.00
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:57:03 e_WR_1_SW_Home_own_consumption 1474
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:57:03 e_WR_1_SW_Home_own_consumption_from_PV 1474
setstate WR_1_Speicher_1_ExternControl 2022-02-27 07:00:01 e_WR_1_Solar_Calculation_fc0_day 64394
setstate WR_1_Speicher_1_ExternControl 2022-02-27 06:55:01 e_WR_1_Solar_Calculation_fc1_day 69672
setstate WR_1_Speicher_1_ExternControl 2022-02-26 12:47:30 e_WR_1_Speicher_1_ExternControl_SpeicherExternTrigger gesperrt
setstate WR_1_Speicher_1_ExternControl 2022-02-24 09:00:32 e_WR_1_Speicher_1_ExternControl_SpeicherMaxSOC_Actual 100
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:31:18 e_WR_1_Speicher_1_ExternControl_ui_command ---
setstate WR_1_Speicher_1_ExternControl 2022-01-11 18:23:57 mode enabled
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:54:20 state 3 Minuten Wiederholung
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:18:20 timer_01_c01 27.02.2022 10:58:00
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:18:20 timer_02_c04 28.02.2022 09:00:00
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:18:20 timer_03_c04 27.02.2022 18:00:00
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:18:20 timer_04_c05 27.02.2022 18:00:00
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:18:20 timer_05_c05 28.02.2022 09:00:00
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:18:20 timer_06_c06 28.02.2022 07:52:10
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:18:20 timer_07_c06 27.02.2022 17:06:20
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:54:20 timer_08_c06 27.02.2022 10:57:20
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:18:20 timer_09_c07 28.02.2022 07:45:37
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:18:20 timer_10_c07 28.02.2022 10:00:00
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:18:20 timer_11_c08 27.02.2022 17:06:20
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:18:20 timer_12_c10 28.02.2022 10:09:00
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:18:20 timer_13_c11 27.02.2022 15:06:20
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:54:00 timer_14_c13 27.02.2022 11:00:00
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:18:20 timer_15_c13 27.02.2022 11:00:00
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:30:00 timer_16_c13 27.02.2022 11:30:00
setstate WR_1_Speicher_1_ExternControl 2022-02-27 10:54:20 ui_command ---
Lösche das doif einfach einmal und leg es identisch neu an. Ich hatte das auch gerade, dass mein doif auf meinen Knx Luftfeuchtigkeitmesser im Schwimmbad nicht mehr funktionierte und der Entfeuchter dadurch nicht eingeschalten wurde. Hab da ewig gesucht, nichts gefunden. Auch Neustart etc half nicht. Habs dann aus mehr aus Verzweifelung gelöscht und identisch neu angelegt. Seit dem gehts wieder... magic. Frag mich nicht wieso, aber vielleicht hilfts bei dir auch, wenn es vorher funktionierte.
Zitat von: Guybrush am 27 Februar 2022, 23:21:30
Lösche das doif einfach einmal und leg es identisch neu an. Ich hatte das auch gerade, dass mein doif auf meinen Knx Luftfeuchtigkeitmesser im Schwimmbad nicht mehr funktionierte und der Entfeuchter dadurch nicht eingeschalten wurde. Hab da ewig gesucht, nichts gefunden. Auch Neustart etc half nicht. Habs dann aus mehr aus Verzweifelung gelöscht und identisch neu angelegt. Seit dem gehts wieder... magic. Frag mich nicht wieso, aber vielleicht hilfts bei dir auch, wenn es vorher funktionierte.
Okay, das probiere ich beim nächsten Mal aus, mal schauen ob es morgen wieder passiert.
Zitat von: ch.eick am 27 Februar 2022, 23:45:50
Okay, das probiere ich beim nächsten Mal aus, mal schauen ob es morgen wieder passiert.
Ein Restart kann nur Symptome beheben aber nicht die Ursache.
Attribut checkallevent, kein do always und viel Perlcode - da kann man schnell die Übersicht verlieren.
Ich würde es versuchen an deiner Stelle in den Perlmodus umzuschreiben.
Zitat von: Damian am 28 Februar 2022, 00:41:44
Ein Restart kann nur Symptome beheben aber nicht die Ursache.
Hat eh nicht geklappt :-)
Zitat
Attribut checkallevent, kein do always und viel Perlcode - da kann man schnell die Übersicht verlieren.
Die Code Menge hat sich nicht verändert und do always wird auch nicht verwendet.
Zitat
Ich würde es versuchen an deiner Stelle in den Perlmodus umzuschreiben.
Da bin ich schon länger dran, jedoch reagiert die Auslösung der Blöcke doch danders als gewohnt.
Das merkwürdige ist ja auch, dass das Timer Event anstatt im 180s in dem Zustand alle 360s auslöst.
Jetzt im Moment arbeiten die Timer wieder korrekt. Ich beobachte das mal morgen früh wieder, da der Speicher jetzt gerade voll ist.
Zitat von: ch.eick am 28 Februar 2022, 11:57:21
Hat eh nicht geklappt :-)Die Code Menge hat sich nicht verändert und do always wird auch nicht verwendet.Da bin ich schon länger dran, jedoch reagiert die Auslösung der Blöcke doch danders als gewohnt.
Das merkwürdige ist ja auch, dass das Timer Event anstatt im 180s in dem Zustand alle 360s auslöst.
Jetzt im Moment arbeiten die Timer wieder korrekt. Ich beobachte das mal morgen früh wieder, da der Speicher jetzt gerade voll ist.
Dann musst du abspecken und dich herantasten. Was sich im DOIF geändert hat, ist das grundsätzliche Setzen des NOTIFDEV-Filters, allerdings hast du bei dir einen ganz simplen Trigger drin, der kein Problem darstellen sollte. An den Timern hat sich länger nichts geändert.
Hallo Damian
was auch nicht mehr geht ist das einfache Auslösen aus einem uiTable Pull Down Menü
################################################################################################################
## 12 WR_1_Speicher_1 DC_Power_Abs setzen z.B. zur Zwangsentladung
## dies muss manuell wiederholt werden. Danach hängt es vom WR ab, wie er die Speichersteuerung fortsetzt.
DOELSEIF
([$SELF:ui_command] eq "DC_Power_Abs")
{
CommandSetReading(undef, "$SELF ui_command ---");
CommandSet(undef, "WR_1_API 23_05_Battery_ExternControl_DcPowerAbs [$SELF:SpeicherDcPowerAbs]");
if (AttrVal("$SELF","verbose",0) >=3) {
Log 3, "$SELF cmd_12 : Battery_ExternControl_DcPowerAbs auf [$SELF:SpeicherDcPowerAbs] gesetzt";
};
}
Das reading wird gesetzt, wenn ich das widget bediene.
ui_command DC_Power_Abs 2022-02-28 13:04:17
Das Event wird erzeugt
2022-02-28 13:04:17.599 DOIF WR_1_Speicher_1_ExternControl ui_command: DC_Power_Abs
2022-02-28 13:04:17.599 DOIF WR_1_Speicher_1_ExternControl e_WR_1_Speicher_1_ExternControl_ui_command: DC_Power_Abs
Aber das DOELSEIF wird nicht durchlaufen, da als erstes ja das reading wieder zurück gesetzt würde.
Das ist echt alles sehr merkwürdig, da es ja wie gesagt genau so seit einem Jahr gelaufen ist.
Ich such mal ein altes DOIF, und mache da mal ein reload.
Hallo zusammen,
leider haben sich die Phenomene im FHEM Modus nicht wieder gelegt.
Ich habe deshalb, da ich auch sehr viel Perl im DOIF verwende, das ganze in den Perl Modus migriert, was ich auch schon mal vor Monaten begonnen hatte.
Nun habe ich bereits die test Phase erreicht und das Verhalten entspricht wieder dem wie es vorher gewesen ist. Dazu sind natürlich doch diverse Änderungen notwendig
geworden, die aber auch vorher schon hier und da mal probleme bereitet haben.
Vielen Dank für den Motivations schubser :-)
Christian
Zitat von: ch.eick am 01 März 2022, 11:21:49
Hallo zusammen,
leider haben sich die Phenomene im FHEM Modus nicht wieder gelegt.
Ich habe deshalb, da ich auch sehr viel Perl im DOIF verwende, das ganze in den Perl Modus migriert, was ich auch schon mal vor Monaten begonnen hatte.
Nun habe ich bereits die test Phase erreicht und das Verhalten entspricht wieder dem wie es vorher gewesen ist. Dazu sind natürlich doch diverse Änderungen notwendig
geworden, die aber auch vorher schon hier und da mal probleme bereitet haben.
Vielen Dank für den Motivations schubser :-)
Christian
Da du ohnehin schon viel mit Perl gemacht hast, ist das der richtige Weg. Auf Dauer wirst du davon profitieren. Du kannst nun im Modul eigene Funktionen definieren, mit Instanzvariablen hantieren, mehrere Blöcke gleichzeitig und unabhängig voneinander ausführen, den Status setzen, wie du willst usw.
Zitat von: Damian am 01 März 2022, 12:07:16
Da du ohnehin schon viel mit Perl gemacht hast, ist das der richtige Weg. Auf Dauer wirst du davon profitieren. Du kannst nun im Modul eigene Funktionen definieren, mit Instanzvariablen hantieren, mehrere Blöcke gleichzeitig und unabhängig voneinander ausführen, den Status setzen, wie du willst usw.
Hallo Damian,
ja, den Weg beschreite ich ja schon einige Zeit mit meiner PV-Anlagen Steuerung. Ich möchte halt kein propritäres Modul erstellen und habe somit die verschiedenen Module aus FHEM mit Perl erweitert. Beim DOIF hast Du mir auch eine schöne "GUI" Oberfläche mit dem uiTable geliefert. Leider ist das uiTable nicht in mehr Modulen vertreten, aber da man oft eins drum herum verwendet stelle ich dann eben im DOIF auch den Status dar und erledige die Variablen Konfiguration :-)
VG Christian
ja, man kann da unterschiedlich vorgehen.
Ich habe für meine Statusübersicht einige DOIF-Device definiert, die nur aus uiTable bestehen, um Informationen zu visualisieren, die in anderen Modulen gesammelt werden (siehe Anhang)
Immer mehr programmiere ich aber DOIF-Devices, die nicht nur Daten sammeln, sondern auch diese visualisieren bzw. über die Weboberfläche Daten verändern lassen. Mit Hilfe von Templates lässt sich dann eine Definition auf beliebig viele Szenarien anwenden.
Also, man kann im Perlmodus in einer Definition, das schaffen, was man sonst mit Programmierung eigenständiger Module tut - meistens aber nur mit einfacher Visualisierung ;)
Wie z. B. meine letzten Einträge zur DOIF-Automatisierung mit Benutzeroberfläche - also das volle Programm
siehe: https://wiki.fhem.de/wiki/DOIF/Automatisierung#Steuerung_von_Raumthermostaten_f.C3.BCr_mehrere_R.C3.A4ume_mit_GUI
Im Anhang meine aktuelle Statusübersicht
Zitat von: Damian am 01 März 2022, 12:57:13
ja, man kann da unterschiedlich vorgehen.
Ich habe für meine Statusübersicht einige DOIF-Device definiert, die nur aus uiTable bestehen, um Informationen zu visualisieren, die in anderen Modulen gesammelt werden (siehe Anhang)
Immer mehr programmiere ich aber DOIF-Devices, die nicht nur Daten sammeln, sondern auch diese visualisieren bzw. über die Weboberfläche Daten verändern lassen. Mit Hilfe von Templates lässt sich dann eine Definition auf beliebig viele Szenarien anwenden.
Also, man kann im Perlmodus in einer Definition, das schaffen, was man sonst mit Programmierung eigenständiger Module tut - meistens aber nur mit einfacher Visualisierung ;)
Wie z. B. meine letzten Einträge zur DOIF-Automatisierung mit Benutzeroberfläche - also das volle Programm
siehe: https://wiki.fhem.de/wiki/DOIF/Automatisierung#Steuerung_von_Raumthermostaten_f.C3.BCr_mehrere_R.C3.A4ume_mit_GUI
Im Anhang meine aktuelle Statusübersicht
Ach herje :-)
Na zum Glück regelt sich mein Haus mit der KWL selber und ich brauche garkeine Raum Thermostate.
Die Darstellung der PV mache ich dann auch lieber im Grafana ;-)
Zitat von: ch.eick am 01 März 2022, 14:53:05
Na zum Glück regelt sich mein Haus mit der KWL selber und ich brauche garkeine Raum Thermostate.
Bei mir regelt sich das Haus selber, aber irgendwo will man vielleicht eine Temperatur eines Raumes festlegen ;)
Zitat von: Damian am 01 März 2022, 15:14:25
Bei mir regelt sich das Haus selber, aber irgendwo will man vielleicht eine Temperatur eines Raumes festlegen ;)
Wenn die Zimmertüren geschlossen sind regelt sich das über den Hydraulischen Abgleich, so ist das Bad wärmer als die anderen Räume und auch Schlafräume sind etwas kühler wie das Wohnzimmer.
Zitat von: ch.eick am 01 März 2022, 16:48:13
Wenn die Zimmer türen geschlossen sind regelt sich das über den Hydraulischen Abgleich, so ist das Bad wärmer als die anderen Räume und auch Schlafräume sind etwas kühler wie das Wohnzimmer.
Klar, das ist komfortabel. Läuft bei meinen Eltern auch so. Unsere Heizung ist etwas älter, da lässt sich der hydraulischer Abgleich schlecht vornehmen. Der Komfort kann aber etwas mehr Heizkosten bedeuten, weil er punktuell pro Raum nicht steuerbar ist. Abgesehen davon, wollte ich sehen, wann tatsächlich die Ventile in den Räumen offen sind, um den Heizbedarf der Räume etwas abschätzen zu können.
Zitat von: Damian am 01 März 2022, 16:59:11
Klar, das ist komfortabel. Läuft bei meinen Eltern auch so. Unsere Heizung ist etwas älter, da lässt sich der hydraulischer Abgleich schlecht vornehmen. Der Komfort kann aber etwas mehr Heizkosten bedeuten, weil er punktuell pro Raum nicht steuerbar ist. Abgesehen davon, wollte ich sehen, wann tatsächlich die Ventile in den Räumen offen sind, um den Heizbedarf der Räume etwas abschätzen zu können.
Das ist alles legitiem und würde ich auch so machen und Dein Monitoring sieht auch sehr gut aus :-)
Zitat von: Damian am 01 März 2022, 12:07:16
Da du ohnehin schon viel mit Perl gemacht hast, ist das der richtige Weg. Auf Dauer wirst du davon profitieren. Du kannst nun im Modul eigene Funktionen definieren, mit Instanzvariablen hantieren, mehrere Blöcke gleichzeitig und unabhängig voneinander ausführen, den Status setzen, wie du willst usw.
Hallo Damin,
das DOIF Perl Modus reagiert doch anders auf die Events und ich habe das Problem, dass es zu doppelten Ausführungen der Blöcke kommt.
Hast Du da mal einen Tipp, wie ich das verriegeln kann?
2022.03.03 17:43:57.648 3: WR_1_Speicher_1_ExternControl cmd_3 : Batterie wird mit Automatik gesteuert
2022.03.03 17:43:57.649 3: WR_1_Speicher_1_ExternControl cmd_3 : Batterie auf 97.00 %, Entlademodus freigegeben
2022.03.03 17:43:57.682 3: WR_1_Speicher_1_ExternControl cmd_3 : Batterie wird mit Automatik gesteuert
2022.03.03 17:43:57.683 3: WR_1_Speicher_1_ExternControl cmd_3 : Batterie auf 97.00 %, Entlademodus freigegeben
Das setzen von readings innerhalb des Blocks ist wohl zu langsam, da die Events erst später ausgelöst werden.
Zitat von: ch.eick am 03 März 2022, 18:38:32
Hallo Damin,
das DOIF Perl Modus reagiert doch anders auf die Events und ich habe das Problem, dass es zu doppelten Ausführungen der Blöcke kommt.
Hast Du da mal einen Tipp, wie ich das verriegeln kann?
2022.03.03 17:43:57.648 3: WR_1_Speicher_1_ExternControl cmd_3 : Batterie wird mit Automatik gesteuert
2022.03.03 17:43:57.649 3: WR_1_Speicher_1_ExternControl cmd_3 : Batterie auf 97.00 %, Entlademodus freigegeben
2022.03.03 17:43:57.682 3: WR_1_Speicher_1_ExternControl cmd_3 : Batterie wird mit Automatik gesteuert
2022.03.03 17:43:57.683 3: WR_1_Speicher_1_ExternControl cmd_3 : Batterie auf 97.00 %, Entlademodus freigegeben
Das setzen von readings innerhalb des Blocks ist wohl zu langsam, da die Events erst später ausgelöst werden.
Ich kenne deinen Block nicht. Wenn ein Block zwei mal ausgeführt wurde, dann muss es auch zwei Trigger gegeben haben.
Zitat von: Damian am 03 März 2022, 18:40:46
Ich kenne deinen Block nicht. Wenn ein Block zwei mal ausgeführt wurde, dann muss es auch zwei Trigger gegeben haben.
Ja, beim durchlaufen des Blocks wir auch in einem anderen Device ein neuer Status abgeholt, was eine zweite Bedingung für den selben Block auslöst.
Trotzdem soll der Block aber nur einmal durchlaufen werden, weshalb ich das gerne verriegeln möchte.
3_Automatik_smart_Laden_beenden
{if( !([$SELF:state] eq "off") ## DOIF enabled
and
[$SELF:SpeicherEntladung] eq "Automatik" and ## Nur für den Automatik Modus
(
[WR_1_API:Battery_InternControl_MinHomeConsumption] > 100 ## Das Speicher Entladen ist geperrt
and
[$SELF:ui_command_1] ne "smart_Laden_start" ## Das verriegelt gegen das smart_Laden_start
and
(
[WB_1:lp_1_ChargeStat] ne "loading" ## Es wird gerade kein Fahrzeug geladen
and
(
[WR_1:Act_state_of_charge] >= 90 ## Der Speicher ist bereits 90% voll oder vor dem <<< dieses EVENT scheint die zweite Auslösung zu erzeugen
or ## Fahrzeug Laden war der Speicher frei gegeben
[Kia_eNiro_PV:WR_1_Speicher_1_ExternControl_smart_laden_before] eq "inaktiv"
)
)
or [$SELF:ui_command_1] eq "smart_Laden_beenden" ## Hier wird das uiTable select ausgewertet <<< Das war der erste EVENT, den ich verwendet hatte
)
) {
if( [$SELF:ui_command_1] eq "smart_Laden_beenden" ) { ## Hier wurde manuell aktiviert
set_Reading("ui_command_1_before",[$SELF:ui_command_1]);
}
if ( [WB_1:lp_1_ChargeStat] ne "loading" ) { ## Es wird gerade kein Fahrzeug geladen
fhem("setreading Kia_eNiro_PV WR_1_Speicher_1_ExternControl_smart_laden_before ---"); ## den Merker wieder zurück setzen
if (AttrVal("$SELF","verbose",0) >=3)
{Log 3, "$SELF cmd_3 : Batterie wird mit Automatik gesteuert";
Log 3, "$SELF cmd_3 : Batterie auf ".[WR_1:Act_state_of_charge]." %, Entlademodus freigegeben"};
::CommandSet(undef, "WR_1_API 22_03_Battery_MinHomeConsumption 50"); <<< hier wird im Speicher ein Wert gesetzt und impliziet auch der Status abgefragt
set_Reading("SpeicherExternTrigger","none"); ## den externen Trigger wieder freigeben
} else {
if (AttrVal("$SELF","verbose",0) >= 0)
{Log 3, "$SELF cmd_3 : Kia_eNiro_PV es wird gerade geladen"; ## Es wird noch ein Fahrzeug geladen.
Log 3, "$SELF cmd_3 : Kia_eNiro_PV smart_laden bleibt aktiviert"};
}
set_Reading("ui_command_1","---"); ## Hier wird das uiTable select wieder zurückgesetzt, ansonsten
## kann das Kommando nicht sofort wiederholt werden
}
}
Trigger rausnehmen kannst du mit [?...]
Zitat von: Damian am 03 März 2022, 19:30:57
Trigger rausnehmen kannst du mit [?...]
Das verstehe ich nicht, welchen Trigger soll ich raus nehmen?
Der wird ja in einer anderen Situation verwendet.
Das eine wäre eine manuelle Steuerung und das andere wird für den Automatismus verwendet.
Es darf nur nicht in dem Moment, wo ich es manuell mache noch zusätzlich automatisch passieren.
Also im Perlmodus wird im Gegensatz zum FHEM-Modus der ganze Block ausgeführt, egal wo die Triggerangaben stehen.
Wenn du Teile davon getrennt ausführen willst, dann musst du den Block in mehrere Blöcke auftrennen. Gemeinsamkeiten der Blöcke werden dann über Funktionen realisiert, so wie beim strukturierten Programmieren.