DOIF funktioniert plötzlich nicht mehr: Überschussladen PV

Begonnen von Nogga, 11 November 2022, 15:31:43

Vorheriges Thema - Nächstes Thema

Nogga

Ich habe mein PV-Überschuss-Laden DOIF sukzessive erweitert und bisher hat es auch tadellos funktioniert. Seit kurzem jedoch nicht mehr. Ich weiss aber auch nicht, ob es an einem kürzlichen FHEM-Update lag.
Die PV-Bedinungen (cmd_1) scheint zu funktionieren, aber der manuelle Modus (egal welcher in cmd_2) geht nicht mehr. Auch wenn alle Bedingungen aus cmd_2 wahr sind, geht er trotzdem immer in den ELSE-Zweig (cmd_3).

Hat einer eine Idee?

define Doif_Wallbox_Steuerung DOIF (\
## PV MODUS\
\
[$SELF:Mode] eq "PV" ## PV-Modus des DOIFs\
&& [Wallbox:pvmode] eq "manual" ## Manueller Modus\
&& [Wallbox:chargecontrols_01_connected] eq "1" ## Auto angesteckt\
\
&& [my_rct_device:battery_soc] >= 60 ## Batterie ist schon ausreichend geladen\
&& ([{sunrise()}-{sunset(-7200)}] || [my_rct_device:battery_soc] >= 90) ## bis maximal 2h vor Sonnenuntergang (damit die Batterie sich nochmal erholen kann) oder alternativ die Batterie noch voll...\
&& (\
[my_rct_device:power_solarCombined] ## PV-Leistung\
+ (6 * 240) ## Mindestladung, einphasig\
+ ([my_rct_device:power_battery] < 0 ? ([my_rct_device:power_battery] * -1 - 500) : 0) ## Batterie Ladung (= negativ) ignorieren, bis auf x Watt Reserve...\
- [my_rct_device:power_household_external] ## abzüglich Hausverbrauch\
+ [Wallbox:loading_power] ## abzüglich gegenwärtige Wallbox Ladung\
) >= ((6 * 240 * [Wallbox:phases_connected]) + 100)\
) \
{ \
## Prüfe wieviel Ampere noch möglich sind\
for (my $ampere = 16;; $ampere >= 6;; $ampere = $ampere - 2) \
{\
\
Log 5, "for check ampere: ".$ampere;;\
\
## checke ob PV-Leistung noch reicht\
if (\
(\
[my_rct_device:power_solarCombined] ## PV-Leistung\
+ (6 * 240) ## Mindestladung, einphasig\
+ ([my_rct_device:power_battery] < 0 ? ([my_rct_device:power_battery] * -1 - 500) : 0) ## Batterie Ladung (= negativ) ignorieren, bis auf x Watt Reserve...\
- [my_rct_device:power_household_external] ## abzüglich Hausverbrauch\
+ [Wallbox:loading_power] ## abzüglich gegenwärtige Wallbox Ladung\
)\
>= (($ampere * 240 * [Wallbox:phases_connected]) + 100)\
   )\
   \
{\
\
## Wenn die Batterie angezapft wird (unter 85%), dann gehe auf Minimal-Ladung...\
if (int(ReadingsVal('my_rct_device','battery_soc', '0') < 85))\
{\
$ampere = 6;;\
}\
\
## setze nur neu, wenn sich Werte ändern\
if ([$SELF:ampere] ne $ampere)\
{\
fhem("setreading $SELF ampere ".$ampere);;\
fhem("set Wallbox manual_amp ".$ampere);;\
Log 5, "neue ampere: ".$ampere;;\
}\
\
## Leistung reicht, also laden!\
fhem("setreading $SELF charge on");;\
fhem("set Wallbox charge start");; \
last;; ## Schleife abbrechen, wenn Wert gefunden \
\
}\
\
}\
}\
DOELSEIF\
(\
## MANUELL Modus\
\
(\
[$SELF:Mode] eq "ManualMin" \
|| [$SELF:Mode] eq "ManualMax"\
|| [$SELF:Mode] eq "MinPlusPV"\
)\
&& [Wallbox:pvmode] eq "manual" ## Manueller Modus\
&& [Wallbox:chargecontrols_01_connected] eq "1" ## Auto angesteckt\
) \
{ \
\
## setze nur neu, wenn sich Werte ändern\
if ("[$SELF:Mode]" eq "ManualMin")\
{\
fhem("setreading $SELF ampere 6");;\
fhem("set Wallbox manual_amp 6");;\
}\
elsif ("[$SELF:Mode]" eq "MinPlusPV")\
{\
my $ampere;;\
\
## Prüfe wieviel Ampere noch möglich sind\
for ($ampere = 16;; $ampere >= 6;; $ampere = $ampere - 2) \
{\
\
Log 5, "for check ampere: ".$ampere;;\
\
## checke ob PV-Leistung noch reicht\
if (\
(\
[my_rct_device:power_solarCombined] ## PV-Leistung\
+ (6 * 240) ## Mindestladung, einphasig\
+ ([my_rct_device:power_battery] < 0 ? ([my_rct_device:power_battery] * -1 - 500) : 0) ## Batterie Ladung (= negativ) ignorieren, bis auf x Watt Reserve...\
- [my_rct_device:power_household_external] ## abzüglich Hausverbrauch\
+ [Wallbox:loading_power] ## abzüglich gegenwärtige Wallbox Ladung\
)\
>= (($ampere * 240 * [Wallbox:phases_connected]) + 100)\
   )\
\
{\
\
## Wenn die Batterie angezapft wird (unter 85%), dann gehe auf Minimal-Ladung...\
if (int(ReadingsVal('my_rct_device','battery_soc', '0') < 90))\
{\
$ampere = 6;;\
}\
\
## setze nur neu, wenn sich Werte ändern\
if ([$SELF:ampere] ne $ampere)\
{\
fhem("setreading $SELF ampere ".$ampere);;\
fhem("set Wallbox manual_amp ".$ampere);;\
Log 5, "neue ampere: ".$ampere;;\
} \
last;; ## Schleife abbrechen, wenn Wert gefunden \
}\
}\
\
fhem("setreading $SELF ampere $ampere");;\
fhem("set Wallbox manual_amp $ampere");;\
} \
else\
{\
fhem("setreading $SELF ampere 16");;\
fhem("set Wallbox manual_amp 16");;\
}\
\
## Ladung starten!\
fhem("setreading $SELF charge on");; \
fhem("set Wallbox charge start");; \
}\
DOELSE\
{\
Log 5, "off check";;\
if ("[$SELF:charge]" eq "on")\
{ \
fhem("setreading $SELF ampere 6");;\
fhem("setreading $SELF charge off");;\
Log 5, "neue ampere 6 und off";;\
\
fhem("set Wallbox manual_amp 6");;\
fhem("set Wallbox charge stop");;\
}\
}
attr Doif_Wallbox_Steuerung do always
attr Doif_Wallbox_Steuerung group Auto
attr Doif_Wallbox_Steuerung readingList Mode
attr Doif_Wallbox_Steuerung room Automatisierung,Steuerung
attr Doif_Wallbox_Steuerung setList Mode:PV,MinPlusPV,ManualMin,ManualMax
attr Doif_Wallbox_Steuerung wait 60:30:180
attr Doif_Wallbox_Steuerung webCmd Mode
#   DEF        (
# ## PV MODUS
#
# [$SELF:Mode] eq "PV" ## PV-Modus des DOIFs
# && [Wallbox:pvmode] eq "manual" ## Manueller Modus
# && [Wallbox:chargecontrols_01_connected] eq "1" ## Auto angesteckt
#
# && [my_rct_device:battery_soc] >= 60 ## Batterie ist schon ausreichend geladen
# && ([{sunrise()}-{sunset(-7200)}] || [my_rct_device:battery_soc] >= 90) ## bis maximal 2h vor Sonnenuntergang (damit die Batterie sich nochmal erholen kann) oder alternativ die Batterie noch voll...
# && (
# [my_rct_device:power_solarCombined] ## PV-Leistung
# + (6 * 240) ## Mindestladung, einphasig
# + ([my_rct_device:power_battery] < 0 ? ([my_rct_device:power_battery] * -1 - 500) : 0) ## Batterie Ladung (= negativ) ignorieren, bis auf x Watt Reserve...
# - [my_rct_device:power_household_external] ## abzüglich Hausverbrauch
# + [Wallbox:loading_power] ## abzüglich gegenwärtige Wallbox Ladung
# ) >= ((6 * 240 * [Wallbox:phases_connected]) + 100)
#)
#{
# ## Prüfe wieviel Ampere noch möglich sind
# for (my $ampere = 16; $ampere >= 6; $ampere = $ampere - 2)
# {
#
# Log 5, "for check ampere: ".$ampere;
#
# ## checke ob PV-Leistung noch reicht
# if (
# (
# [my_rct_device:power_solarCombined] ## PV-Leistung
# + (6 * 240) ## Mindestladung, einphasig
# + ([my_rct_device:power_battery] < 0 ? ([my_rct_device:power_battery] * -1 - 500) : 0) ## Batterie Ladung (= negativ) ignorieren, bis auf x Watt Reserve...
# - [my_rct_device:power_household_external] ## abzüglich Hausverbrauch
# + [Wallbox:loading_power] ## abzüglich gegenwärtige Wallbox Ladung
# )
# >= (($ampere * 240 * [Wallbox:phases_connected]) + 100)
#    )
#    
# {
#
# ## Wenn die Batterie angezapft wird (unter 85%), dann gehe auf Minimal-Ladung...
# if (int(ReadingsVal('my_rct_device','battery_soc', '0') < 85))
# {
# $ampere = 6;
# }
#
# ## setze nur neu, wenn sich Werte ändern
# if ([$SELF:ampere] ne $ampere)
# {
# fhem("setreading $SELF ampere ".$ampere);
# fhem("set Wallbox manual_amp ".$ampere);
# Log 5, "neue ampere: ".$ampere;
# }
#
# ## Leistung reicht, also laden!
# fhem("setreading $SELF charge on");
# fhem("set Wallbox charge start");
# last; ## Schleife abbrechen, wenn Wert gefunden
#
# }
#
# }
#}
#DOELSEIF
#(
# ## MANUELL Modus
#
# (
# [$SELF:Mode] eq "ManualMin"
# || [$SELF:Mode] eq "ManualMax"
# || [$SELF:Mode] eq "MinPlusPV"
# )
# && [Wallbox:pvmode] eq "manual" ## Manueller Modus
# && [Wallbox:chargecontrols_01_connected] eq "1" ## Auto angesteckt
#)
#{
#
# ## setze nur neu, wenn sich Werte ändern
# if ("[$SELF:Mode]" eq "ManualMin")
# {
# fhem("setreading $SELF ampere 6");
# fhem("set Wallbox manual_amp 6");
# }
# elsif ("[$SELF:Mode]" eq "MinPlusPV")
# {
# my $ampere;
#
# ## Prüfe wieviel Ampere noch möglich sind
# for ($ampere = 16; $ampere >= 6; $ampere = $ampere - 2)
# {
#
# Log 5, "for check ampere: ".$ampere;
#
# ## checke ob PV-Leistung noch reicht
# if (
# (
# [my_rct_device:power_solarCombined] ## PV-Leistung
# + (6 * 240) ## Mindestladung, einphasig
# + ([my_rct_device:power_battery] < 0 ? ([my_rct_device:power_battery] * -1 - 500) : 0) ## Batterie Ladung (= negativ) ignorieren, bis auf x Watt Reserve...
# - [my_rct_device:power_household_external] ## abzüglich Hausverbrauch
# + [Wallbox:loading_power] ## abzüglich gegenwärtige Wallbox Ladung
# )
# >= (($ampere * 240 * [Wallbox:phases_connected]) + 100)
#    )
#
# {
#
# ## Wenn die Batterie angezapft wird (unter 85%), dann gehe auf Minimal-Ladung...
# if (int(ReadingsVal('my_rct_device','battery_soc', '0') < 90))
# {
# $ampere = 6;
# }
#
# ## setze nur neu, wenn sich Werte ändern
# if ([$SELF:ampere] ne $ampere)
# {
# fhem("setreading $SELF ampere ".$ampere);
# fhem("set Wallbox manual_amp ".$ampere);
# Log 5, "neue ampere: ".$ampere;
# }
# last; ## Schleife abbrechen, wenn Wert gefunden
# }
# }
#
# fhem("setreading $SELF ampere $ampere");
# fhem("set Wallbox manual_amp $ampere");
# }
# else
# {
# fhem("setreading $SELF ampere 16");
# fhem("set Wallbox manual_amp 16");
# }
#
# ## Ladung starten!
# fhem("setreading $SELF charge on");
# fhem("set Wallbox charge start");
#}
#DOELSE
#{
# Log 5, "off check";
# if ("[$SELF:charge]" eq "on")
# {
# fhem("setreading $SELF ampere 6");
# fhem("setreading $SELF charge off");
# Log 5, "neue ampere 6 und off";
#
# fhem("set Wallbox manual_amp 6");
# fhem("set Wallbox charge stop");
# }
#}
#   FUUID      636187e5-f33f-bfba-3690-a0a89961f1260e7a
#   MODEL      FHEM
#   NAME       Doif_Wallbox_Steuerung
#   NOTIFYDEV  Doif_Wallbox_Steuerung,global,my_rct_device,Wallbox
#   NR         330
#   NTFY_ORDER 50-Doif_Wallbox_Steuerung
#   STATE      cmd_3
#   TYPE       DOIF
#   VERSION    26655 2022-11-05 18:33:59
#   eventCount 3368
#   READINGS:
#     2022-11-11 15:30:20   Device          my_rct_device
#     2022-11-11 15:24:01   Mode            ManualMin
#     2022-11-09 15:18:10   ampere          6
#     2022-11-09 15:18:10   charge          off
#     2022-11-11 15:15:41   cmd             3
#     2022-11-11 15:15:41   cmd_event       timer_2
#     2022-11-11 15:15:41   cmd_nr          3
#     2022-11-11 15:24:01   e_Doif_Wallbox_Steuerung_Mode ManualMin
#     2022-11-11 15:29:39   e_Wallbox_chargecontrols_01_connected 1
#     2022-11-11 15:29:41   e_Wallbox_loading_power 1402.9
#     2022-11-11 15:29:41   e_Wallbox_phases_connected 1
#     2022-11-11 15:29:40   e_Wallbox_pvmode manual
#     2022-11-11 15:30:20   e_my_rct_device_battery_soc 95.54
#     2022-11-11 15:30:20   e_my_rct_device_power_battery 810.42
#     2022-11-11 15:30:20   e_my_rct_device_power_household_external 2031.99
#     2022-11-11 15:30:20   e_my_rct_device_power_solarCombined 1286.62
#     2022-11-08 10:39:22   mode            enabled
#     2022-11-11 15:15:41   state           cmd_3
#     2022-11-11 15:15:41   timer_01_c01    12.11.2022 06:41:59
#     2022-11-11 15:15:41   timer_02_c01    12.11.2022 15:14:29
#     2022-11-11 15:29:41   wait_timer      11.11.2022 15:32:41 cmd_3 Wallbox
#   Regex:
#     accu:
#     collect:
#     cond:
#       Doif_Wallbox_Steuerung:
#         0:
#           Mode       ^Doif_Wallbox_Steuerung$:^Mode:
#         1:
#           Mode       ^Doif_Wallbox_Steuerung$:^Mode:
#       Wallbox:
#         0:
#           chargecontrols_01_connected ^Wallbox$:^chargecontrols_01_connected:
#           loading_power ^Wallbox$:^loading_power:
#           phases_connected ^Wallbox$:^phases_connected:
#           pvmode     ^Wallbox$:^pvmode:
#         1:
#           chargecontrols_01_connected ^Wallbox$:^chargecontrols_01_connected:
#           pvmode     ^Wallbox$:^pvmode:
#       my_rct_device:
#         0:
#           battery_soc ^my_rct_device$:^battery_soc:
#           power_battery ^my_rct_device$:^power_battery:
#           power_household_external ^my_rct_device$:^power_household_external:
#           power_solarCombined ^my_rct_device$:^power_solarCombined:
#         1:
#   attr:
#     cmdState:
#     wait:
#       0:
#         60
#       1:
#         30
#       2:
#         180
#     waitdel:
#   condition:
#     0            ::ReadingValDoIf($hash,'Doif_Wallbox_Steuerung','Mode') eq "PV" && ::ReadingValDoIf($hash,'Wallbox','pvmode') eq "manual" && ::ReadingValDoIf($hash,'Wallbox','chargecontrols_01_connected') eq "1" && ::ReadingValDoIf($hash,'my_rct_device','battery_soc') >= 60 && (::DOIF_time($hash,0,1,$wday,$hms) || ::ReadingValDoIf($hash,'my_rct_device','battery_soc') >= 90) && ( ::ReadingValDoIf($hash,'my_rct_device','power_solarCombined') + (6 * 240) + (::ReadingValDoIf($hash,'my_rct_device','power_battery') < 0 ? (::ReadingValDoIf($hash,'my_rct_device','power_battery') * -1 - 500) : 0) - ::ReadingValDoIf($hash,'my_rct_device','power_household_external') + ::ReadingValDoIf($hash,'Wallbox','loading_power') ) >= ((6 * 240 * ::ReadingValDoIf($hash,'Wallbox','phases_connected')) + 100)
#     1            ( ::ReadingValDoIf($hash,'Doif_Wallbox_Steuerung','Mode') eq "ManualMin"  || ::ReadingValDoIf($hash,'Doif_Wallbox_Steuerung','Mode') eq "ManualMax" || ::ReadingValDoIf($hash,'Doif_Wallbox_Steuerung','Mode') eq "MinPlusPV" ) && ::ReadingValDoIf($hash,'Wallbox','pvmode') eq "manual" && ::ReadingValDoIf($hash,'Wallbox','chargecontrols_01_connected') eq "1"
#   days:
#   do:
#     0:
#       0          {  for (my $ampere = 16; $ampere >= 6; $ampere = $ampere - 2)  { Log 5, "for check ampere: ".$ampere; if ( ( [my_rct_device:power_solarCombined] + (6 * 240) + ([my_rct_device:power_battery] < 0 ? ([my_rct_device:power_battery] * -1 - 500) : 0) - [my_rct_device:power_household_external] + [Wallbox:loading_power] ) >= (($ampere * 240 * [Wallbox:phases_connected]) + 100)    )     {   if (int(ReadingsVal('my_rct_device','battery_soc', '0') < 85)) { $ampere = 6; if ([Doif_Wallbox_Steuerung:ampere] ne $ampere) { fhem("setreading Doif_Wallbox_Steuerung ampere ".$ampere); fhem("set Wallbox manual_amp ".$ampere); Log 5, "neue ampere: ".$ampere; fhem("setreading Doif_Wallbox_Steuerung charge on"); fhem("set Wallbox charge start"); last;   } } }
#     1:
#       0          {    if ("[Doif_Wallbox_Steuerung:Mode]" eq "ManualMin") { fhem("setreading Doif_Wallbox_Steuerung ampere 6"); fhem("set Wallbox manual_amp 6"); } elsif ("[Doif_Wallbox_Steuerung:Mode]" eq "MinPlusPV") { my $ampere; for ($ampere = 16; $ampere >= 6; $ampere = $ampere - 2)  Log 5, "for check ampere: ".$ampere;  if ( ( [my_rct_device:power_solarCombined] + (6 * 240) + ([my_rct_device:power_battery] < 0 ? ([my_rct_device:power_battery] * -1 - 500) : 0) - [my_rct_device:power_household_external] + [Wallbox:loading_power] ) >= (($ampere * 240 * [Wallbox:phases_connected]) + 100)    )  if (int(ReadingsVal('my_rct_device','battery_soc', '0') < 90)) { $ampere = 6; if ([Doif_Wallbox_Steuerung:ampere] ne $ampere) { fhem("setreading Doif_Wallbox_Steuerung ampere ".$ampere); fhem("set Wallbox manual_amp ".$ampere); Log 5, "neue ampere: ".$ampere; } last; } } fhem("setreading Doif_Wallbox_Steuerung ampere $ampere"); fhem("set Wallbox manual_amp $ampere"); else { fhem("setreading Doif_Wallbox_Steuerung ampere 16"); fhem("set Wallbox manual_amp 16"); } fhem("setreading Doif_Wallbox_Steuerung charge on"); fhem("set Wallbox charge start"); }
#     2:
#       0          { Log 5, "off check"; if ("[Doif_Wallbox_Steuerung:charge]" eq "on") { fhem("setreading Doif_Wallbox_Steuerung ampere 6"); fhem("setreading Doif_Wallbox_Steuerung charge off"); Log 5, "neue ampere 6 und off";  fhem("set Wallbox manual_amp 6"); fhem("set Wallbox charge stop"); } }
#   helper:
#     NOTIFYDEV  Doif_Wallbox_Steuerung,global,my_rct_device,Wallbox
#     event      energy_month_household_external: 75343.20,energy_day_household_external: 3223.54,energy_total: 12908918.00,battery_soc: 95.54,energy_day_grid_feed_in: -7599.53,energy_day: 11437.62,energy_month: 163284.75,energy_day_household: 7069.16,energy_month_household: 190290.50,power_solarA: 1132.78,power_solarB: 153.84,power_battery: 810.42,power_grid_total: 11.64,power_household_total: 2031.32,power_household_external: 2031.99,power_solarCombined: 1286.62
#     globalinit 1
#     last_timer 2
#     sleepdevice Wallbox
#     sleepsubtimer 0
#     sleeptimer 2
#     timerdev   my_rct_device
#     timerevent energy_month_household_external: 75343.20,energy_day_household_external: 3223.54,energy_total: 12908918.00,battery_soc: 95.54,energy_day_grid_feed_in: -7599.53,energy_day: 11437.62,energy_month: 163284.75,energy_day_household: 7069.16,energy_month_household: 190290.50,power_solarA: 1132.78,power_solarB: 153.84,power_battery: 810.42,power_grid_total: 11.64,power_household_total: 2031.32,power_household_external: 2031.99,power_solarCombined: 1286.62
#     triggerDev my_rct_device
#     timerevents:
#       energy_month_household_external: 75343.20
#       energy_day_household_external: 3223.54
#       energy_total: 12908918.00
#       battery_soc: 95.54
#       energy_day_grid_feed_in: -7599.53
#       energy_day: 11437.62
#       energy_month: 163284.75
#       energy_day_household: 7069.16
#       energy_month_household: 190290.50
#       power_solarA: 1132.78
#       power_solarB: 153.84
#       power_battery: 810.42
#       power_grid_total: 11.64
#       power_household_total: 2031.32
#       power_household_external: 2031.99
#       power_solarCombined: 1286.62
#     timereventsState:
#       energy_month_household_external: 75343.20
#       energy_day_household_external: 3223.54
#       energy_total: 12908918.00
#       battery_soc: 95.54
#       energy_day_grid_feed_in: -7599.53
#       energy_day: 11437.62
#       energy_month: 163284.75
#       energy_day_household: 7069.16
#       energy_month_household: 190290.50
#       power_solarA: 1132.78
#       power_solarB: 153.84
#       power_battery: 810.42
#       power_grid_total: 11.64
#       power_household_total: 2031.32
#       power_household_external: 2031.99
#       power_solarCombined: 1286.62
#     triggerEvents:
#       energy_month_household_external: 75343.20
#       energy_day_household_external: 3223.54
#       energy_total: 12908918.00
#       battery_soc: 95.54
#       energy_day_grid_feed_in: -7599.53
#       energy_day: 11437.62
#       energy_month: 163284.75
#       energy_day_household: 7069.16
#       energy_month_household: 190290.50
#       power_solarA: 1132.78
#       power_solarB: 153.84
#       power_battery: 810.42
#       power_grid_total: 11.64
#       power_household_total: 2031.32
#       power_household_external: 2031.99
#       power_solarCombined: 1286.62
#     triggerEventsState:
#       energy_month_household_external: 75343.20
#       energy_day_household_external: 3223.54
#       energy_total: 12908918.00
#       battery_soc: 95.54
#       energy_day_grid_feed_in: -7599.53
#       energy_day: 11437.62
#       energy_month: 163284.75
#       energy_day_household: 7069.16
#       energy_month_household: 190290.50
#       power_solarA: 1132.78
#       power_solarB: 153.84
#       power_battery: 810.42
#       power_grid_total: 11.64
#       power_household_total: 2031.32
#       power_household_external: 2031.99
#       power_solarCombined: 1286.62
#   internals:
#   interval:
#     0          -1
#     1          0
#   intervalfunc:
#   intervaltimer:
#   localtime:
#     0          1668231719
#     1          1668262469
#   perlblock:
#   readings:
#     all         Doif_Wallbox_Steuerung:Mode Wallbox:pvmode Wallbox:chargecontrols_01_connected my_rct_device:battery_soc my_rct_device:power_solarCombined my_rct_device:power_battery my_rct_device:power_household_external Wallbox:loading_power Wallbox:phases_connected
#   realtime:
#     0          06:41:59
#     1          15:14:29
#   time:
#     0          {sunrise()}
#     1          {sunset(-7200)}
#   timeCond:
#     0          0
#     1          0
#   timer:
#     0          0
#     1          0
#   timers:
#     0           0  1
#   trigger:
#   triggertime:
#     1668231719:
#       localtime  1668231719
#       hash:
#     1668262469:
#       localtime  1668262469
#       hash:
#   uiState:
#   uiTable:
#
setstate Doif_Wallbox_Steuerung cmd_3
setstate Doif_Wallbox_Steuerung 2022-11-11 15:30:20 Device my_rct_device
setstate Doif_Wallbox_Steuerung 2022-11-11 15:24:01 Mode ManualMin
setstate Doif_Wallbox_Steuerung 2022-11-09 15:18:10 ampere 6
setstate Doif_Wallbox_Steuerung 2022-11-09 15:18:10 charge off
setstate Doif_Wallbox_Steuerung 2022-11-11 15:15:41 cmd 3
setstate Doif_Wallbox_Steuerung 2022-11-11 15:15:41 cmd_event timer_2
setstate Doif_Wallbox_Steuerung 2022-11-11 15:15:41 cmd_nr 3
setstate Doif_Wallbox_Steuerung 2022-11-11 15:24:01 e_Doif_Wallbox_Steuerung_Mode ManualMin
setstate Doif_Wallbox_Steuerung 2022-11-11 15:29:39 e_Wallbox_chargecontrols_01_connected 1
setstate Doif_Wallbox_Steuerung 2022-11-11 15:29:41 e_Wallbox_loading_power 1402.9
setstate Doif_Wallbox_Steuerung 2022-11-11 15:29:41 e_Wallbox_phases_connected 1
setstate Doif_Wallbox_Steuerung 2022-11-11 15:29:40 e_Wallbox_pvmode manual
setstate Doif_Wallbox_Steuerung 2022-11-11 15:30:20 e_my_rct_device_battery_soc 95.54
setstate Doif_Wallbox_Steuerung 2022-11-11 15:30:20 e_my_rct_device_power_battery 810.42
setstate Doif_Wallbox_Steuerung 2022-11-11 15:30:20 e_my_rct_device_power_household_external 2031.99
setstate Doif_Wallbox_Steuerung 2022-11-11 15:30:20 e_my_rct_device_power_solarCombined 1286.62
setstate Doif_Wallbox_Steuerung 2022-11-08 10:39:22 mode enabled
setstate Doif_Wallbox_Steuerung 2022-11-11 15:15:41 state cmd_3
setstate Doif_Wallbox_Steuerung 2022-11-11 15:15:41 timer_01_c01 12.11.2022 06:41:59
setstate Doif_Wallbox_Steuerung 2022-11-11 15:15:41 timer_02_c01 12.11.2022 15:14:29
setstate Doif_Wallbox_Steuerung 2022-11-11 15:29:41 wait_timer 11.11.2022 15:32:41 cmd_3 Wallbox



Beim obigen Extract sind man, dass er eigentlich in cmd_2 (wg Mode=ManualMin) sein sollte, aber immer in cmd_3 hängt :-(

Damian

Ohne den Code im Einzelnen zu verifizieren, kann man sagen, der DOELSE-Fall kann nur dann eintreten, wenn alle anderen Fälle nicht wahr sind, sonst nicht.

An der Stelle hat sich beim DOIF nichts geändert.

Der Auslöser für cmd_3 war der zweiter Timer.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Nogga

Danke Dir für den Hinweis.
Mir ist prinzipiell klar, wie If/Then/Else Bedingungen funktionieren.
Wenn ich die Timer-Conditions richtig interpretiere, dann greift dieser bei Sonnernuntergang-2h in der ersten Bedingung - ok. Die Bedingung kann schonmal nicht wahr werden.

Aber die zweite Bedingung wird komplett erfüllt?
(\
      [$SELF:Mode] eq "ManualMin" \
      || [$SELF:Mode] eq "ManualMax"\
      || [$SELF:Mode] eq "MinPlusPV"\
   )\
   && [Wallbox:pvmode] eq "manual"                  ## Manueller Modus\
   && [Wallbox:chargecontrols_01_connected] eq "1"      ## Auto angesteckt\

Und trotzdem rutscht er in das ELSE? Das verstehe ich nicht...

Damian

Zitat von: Nogga am 11 November 2022, 20:41:55
Danke Dir für den Hinweis.
Mir ist prinzipiell klar, wie If/Then/Else Bedingungen funktionieren.
Wenn ich die Timer-Conditions richtig interpretiere, dann greift dieser bei Sonnernuntergang-2h in der ersten Bedingung - ok. Die Bedingung kann schonmal nicht wahr werden.

Aber die zweite Bedingung wird komplett erfüllt?
(\
      [$SELF:Mode] eq "ManualMin" \
      || [$SELF:Mode] eq "ManualMax"\
      || [$SELF:Mode] eq "MinPlusPV"\
   )\
   && [Wallbox:pvmode] eq "manual"                  ## Manueller Modus\
   && [Wallbox:chargecontrols_01_connected] eq "1"      ## Auto angesteckt\

Und trotzdem rutscht er in das ELSE? Das verstehe ich nicht...

Aber die zweite Bedingung wird bei diesem Timer erst gar nicht ausgewertet, weil er dort nicht vorkommt, daher direkt DOELESE :)

Das steht in den ersten Absätzen der Commandref zu DOIF:

ZitatZu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten. Kommt ein Device in mehreren Bedingungen vor, so wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist.

Du kannst das Verhalten ändern mit dem Attribut: https://fhem.de/commandref_DE.html#DOIF_checkall
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Nogga

Ohje - und ich suche schon seit 3 Monaten nach dem Grund... Manchmal funktioniert es manchmal nicht.
Grrr - das Modul ist einfach zu mächtig ;-)


Jetzt geht es!
Manno-Mann...

Damian

Da du bereits viel in Perl kodierst, ist vielleicht für dich der Perlmodus die bessere Wahl, da kannst du in einem Perl-Block beliebig mit if-else schachteln und dieser wird komplett abgearbeitet, sobald irgendein Trigger des Blocks auslöst.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Nogga

Danke für den Hinweis. "Noch" viel ich mich mit diesem Setup wohler. Wenn ich mal zu viel Zeit habe, dann muss ich mich mal in die Perl Version reinfuchsen...
Meine Perl-Erfahrungen sind sicher 15 Jahre her ;-)

Damian

Zitat von: Nogga am 11 November 2022, 22:20:03
Danke für den Hinweis. "Noch" viel ich mich mit diesem Setup wohler. Wenn ich mal zu viel Zeit habe, dann muss ich mich mal in die Perl Version reinfuchsen...
Meine Perl-Erfahrungen sind sicher 15 Jahre her ;-)

ja, im Perlmodus musst du dich selbst drum kümmern, wiederholende Ausführung zu vermeiden.

Viele haben gar keine Perl-Erfahrung (gehabt) :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF