Hallo,
hab hier ein perlbasiertes DOIF, bei dem mir eine Zwiebel angezeigt wird (siehe Bild). Per Mouseover kann ich über der Zwiebel ( :P ) jedoch bereits ein "idle" erkennen, was auch dem momentanen "state" entspricht. "cmdState" kann ja leider in diesem Fall leider nicht "wie bei einem normal DOIF" gesetzt werden.
Gruß Chris
Das "list":
Internals:
DEF ## ==eq !=ne <lt >gt le<= ge>=
## trigger perl ss setzt sonnenstand disable auf idle zurück
## {if([10:00]) {fhem("set HM_rolloEsszimmer pct 10")}} ## schlecht
## {if([10:00]) {fhem_set("HM_rolloEsszimmer pct 10")}} ## gut
## {if([10:00]) {set_Reading("doifState","fhemCmd")}} ## Reading im selben Device ändern, ohne dass Events erzeugt werden
{if (fhem("uptime raw") > 12 ) ## Mit Versatz starten, um eintreffende Meldungen der CCU2 zu ignorieren
{
{if([":fhemCmd"] or ([HM_rolloEsszimmer:""] and [?HM_rolloEsszimmer:control] <= "20")) ## 16.5 Bei fhemCmd, oder wenn morgens händisch erstmalig am Tag der Rollo betätigt wird
{set_State("running"); ## Ersatz für cmdState
set_Reading("doifState","running");
set_Exec("fhemCmdTimer",41,'set_Reading("doifState","idle")')} ## def. Zeit das doifState auf fhemCmd setzen.
elsif([HM_rolloEsszimmer:""] and get_Reading("doifState") eq "idle" and [?HM_rolloEsszimmer:control] > "20") ## 16.5
{set_State("sonnenstDisabled"); ## Ersatz für cmdState
set_Reading("doifState","sonnenstDisabled");
fhem_set("perlSonnenstand disable")}}
{if([23:59] or ["^perl$:^ss$"]) ## "trigger perl ss"
{set_State("idle"); ## Ersatz für cmdState
set_Reading("doifState","idle");
fhem_set("perlSonnenstand enable")}} ## Um 23:59 Uhr: perlSonnenstand aktivieren, da sich perlSonnenstand um 0:00 Uhr selber auf "idle" zurücksetzt.
}
}
FUUID 5c7e4478-f33f-b9fb-79dd-e240eeeeeb5890a8
MODEL Perl
NAME perl
NR 68
NTFY_ORDER 50-perl
STATE idle
TYPE DOIF
VERSION 18706 2019-02-23 21:48:22
READINGS:
2019-03-05 19:14:50 block_01 executed
2019-03-05 19:14:50 doifState idle
2019-03-05 19:10:36 mode enabled
2019-03-05 19:14:50 state idle
2019-03-05 19:10:36 timer_01_c01 05.03.2019 23:59:00
Regex:
accu:
cond:
:
0:
":fhemCmd" :fhemCmd
"^perl$:^ss$" ^perl$:^ss$
condition:
0 if (fhem("uptime raw") > 12 ) {
{if(::EventDoIf('',$hash,'fhemCmd',0) or (::EventDoIf('HM_rolloEsszimmer',$hash,'',1) and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') <= "20")) {set_State("running"); set_Reading("doifState","running");
set_Exec("fhemCmdTimer",41,'set_Reading("doifState","idle")')}
elsif(::EventDoIf('HM_rolloEsszimmer',$hash,'',1) and get_Reading("doifState") eq "idle" and ::ReadingValDoIf($hash,'HM_rolloEsszimmer','control') > "20") {set_State("sonnenstDisabled"); set_Reading("doifState","sonnenstDisabled");
fhem_set("perlSonnenstand disable")}}
{if(::DOIF_time_once($hash,0,$wday) or ::EventDoIf('^perl$',$hash,'^ss$',0)) {set_State("idle"); set_Reading("doifState","idle");
fhem_set("perlSonnenstand enable")}}
}
days:
devices:
0 HM_rolloEsszimmer
all HM_rolloEsszimmer
helper:
event ss
globalinit 1
last_timer 1
sleeptimer -1
triggerDev perl
triggerEvents:
ss
idle
doifState: idle
block_01: executed
triggerEventsState:
ss
idle
doifState: idle
block_01: executed
internals:
intervalfunc:
itimer:
localtime:
0 1551826740
perlblock:
0
readings:
realtime:
0 23:59:00
time:
0 23:59:00
timeCond:
0 0
timer:
0 0
timers:
0 0
trigger:
all HM_rolloEsszimmer
triggertime:
1551826740:
localtime 1551826740
hash:
uiState:
uiTable:
Attributes:
alias doif_SonnenstandPerl
stateFormat state
Device gelöscht und neu angelegt- selbes Problem. :-\
Edit: Oh je- ich hab die Lösung. Das DOIF darf nicht "perl" heissen. ::) Da muss man auch erstmal draufkommen- hilfe! :-\