Hallo zusammen,
leider habe ich nach mehrstündiger Suche keine Lösung für mein Problem gefunden. Daher eröffne ich nun ein neues Thema. Ich hoffe ihr verzeiht mir, wenn es dazu schon einmal etwas gab.
Ich möchte eine (später mehrere per structure) Funksteckdose(n) abschalten, wenn ich die Wohnung verlasse oder wenn die Energieaufnahme eine bestimmte Zeit x unter einem Wert y war.
Da ich keine andere Möglichkeit gefunden habe, versuche ich die vergangene Zeit mit einem Dummy und ReadingsAge herauszufinden. Mein Dummy wird auf "false" gestellt, wenn die Energieaufnahme y unterschritten wurde.
Mein Dummy:
Internals:
CFGFN
NAME wz_switch_active_dummy
NR 1497
STATE false
TYPE dummy
READINGS:
2018-04-25 22:20:19 state false
Attributes:
alias 1 Aktivität Wohnzimmer
group DOIF_Strom
icon helper_doiftools
room DOIF
Wird geschaltet, wenn y unterschritten:
Internals:
CFGFN
DEF ([wz_switch_Pwr:power] > 100)(set wz_switch_active_dummy true) DOELSE(set wz_switch_active_dummy false)
NAME di_wz_activity
NR 1506
NTFY_ORDER 50-di_wz_activity
STATE cmd_2
TYPE DOIF
READINGS:
2018-04-25 22:35:25 Device wz_switch_Pwr
2018-04-25 22:20:19 cmd 2
2018-04-25 22:20:19 cmd_event set_cmd_2
2018-04-25 22:20:19 cmd_nr 2
2018-04-25 22:35:25 e_wz_switch_Pwr_power 0
2018-04-25 18:52:06 mode enabled
2018-04-25 22:20:19 state cmd_2
Regex:
condition:
0 ReadingValDoIf($hash,'wz_switch_Pwr','power') > 100
devices:
0 wz_switch_Pwr
all wz_switch_Pwr
do:
0:
0 set wz_switch_active_dummy true
1:
0 set wz_switch_active_dummy false
helper:
DOIF_Readings_events
DOIF_eventas
event boot: off,current: 0,eState: E: 3214.7 P: 0 I: 0 U: 233.5 f: 49.99,energy: 3214.7,energyCalc: 3214.7,frequency: 49.99,power: 0,3214.7,voltage: 233.5
globalinit 1
last_timer 0
sleeptimer -1
timerdev wz_switch_Pwr
timerevent boot: off,current: 0,eState: E: 3214.7 P: 0 I: 0 U: 233.5 f: 49.99,energy: 3214.7,energyCalc: 3214.7,frequency: 49.99,power: 0,3214.7,voltage: 233.5
triggerDev wz_switch_Pwr
timerevents:
boot: off
current: 0
eState: E: 3214.7 P: 0 I: 0 U: 233.5 f: 49.99
energy: 3214.7
energyCalc: 3214.7
frequency: 49.99
power: 0
3214.7
voltage: 233.5
timereventsState:
boot: off
current: 0
eState: E: 3214.7 P: 0 I: 0 U: 233.5 f: 49.99
energy: 3214.7
energyCalc: 3214.7
frequency: 49.99
power: 0
state: 3214.7
voltage: 233.5
triggerEvents:
boot: off
current: 0
eState: E: 3214.7 P: 0 I: 0 U: 233.5 f: 49.99
energy: 3214.7
energyCalc: 3214.7
frequency: 49.99
power: 0
3214.7
voltage: 233.5
triggerEventsState:
boot: off
current: 0
eState: E: 3214.7 P: 0 I: 0 U: 233.5 f: 49.99
energy: 3214.7
energyCalc: 3214.7
frequency: 49.99
power: 0
state: 3214.7
voltage: 233.5
internals:
itimer:
readings:
0 wz_switch_Pwr:power
all wz_switch_Pwr:power
trigger:
uiState:
uiTable:
Attributes:
alias 2 Wohnzimmer Aktivität Trigger
devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1
group DOIF_Strom
icon helper_doif
room DOIF
Soweit funktioniert alles wunderbar. Je nach y (in diesem Fall 100) hat mein Dummy state true oder false.
Nun möchte ich anhand dieses Dummys und ReadingsAge dessen states meine Funksteckdose deaktivieren, wenn state länger als x Sekunden in state false ist. Hier testweise nach 60 Sekunden.
Hier die eigentlich relevante DOIF Schaltung:
Internals:
CFGFN
DEF ([Bewohner] eq "home" and [di_struct_electricity] eq "off")(set di_struct_electricity on)
DOELSEIF([Bewohner] eq "home" and [wz_switch_activity_dummy:state] eq "false" and [ReadingsAge('wz_switch_activity_dummy','state','0')] > 60 and [wz_switch_Sw:state] eq "on")(set wz_switch_Sw off)
DOELSEIF([Bewohner] ne "home" and [di_struct_electricity] eq "on")(set di_struct_electricity off)
NAME di_electricity
NR 705
NTFY_ORDER 50-di_electricity
STATE initialized
TYPE DOIF
READINGS:
2018-04-25 22:51:04 Device Bewohner
2018-04-25 22:50:56 cmd 0
2018-04-25 22:51:04 e_Bewohner_STATE home
2018-04-25 22:50:56 mode enabled
2018-04-25 22:50:56 state initialized
2018-04-25 22:50:56 timer_01_c02 error: Wrong timespec ReadingsAge('wz_switch_activity_dummy','state','0'): either HH:MM:SS or {perlcode}
Regex:
condition:
0 InternalDoIf($hash,'Bewohner','STATE') eq "home" and InternalDoIf($hash,'di_struct_electricity','STATE') eq "off"
1 InternalDoIf($hash,'Bewohner','STATE') eq "home" and ReadingValDoIf($hash,'wz_switch_activity_dummy','state') eq "false" and DOIF_time_once($hash,0,$wday) > 60 and ReadingValDoIf($hash,'wz_switch_Sw','state') eq "on"
2 InternalDoIf($hash,'Bewohner','STATE') ne "home" and InternalDoIf($hash,'di_struct_electricity','STATE') eq "on"
devices:
0 Bewohner di_struct_electricity
1 Bewohner wz_switch_activity_dummy wz_switch_Sw
2 Bewohner di_struct_electricity
all Bewohner di_struct_electricity wz_switch_activity_dummy wz_switch_Sw
do:
0:
0 set di_struct_electricity on
1:
0 set wz_switch_Sw off
2:
0 set di_struct_electricity off
3:
helper:
DOIF_Readings_events
DOIF_eventas
event durTimerPresence_cr: 88,durTimerPresence: 01:28:08
globalinit 1
last_timer 1
sleeptimer -1
triggerDev Bewohner
triggerEvents:
durTimerPresence_cr: 88
durTimerPresence: 01:28:08
triggerEventsState:
durTimerPresence_cr: 88
durTimerPresence: 01:28:08
internals:
0 Bewohner:STATE di_struct_electricity:STATE
1 Bewohner:STATE
2 Bewohner:STATE di_struct_electricity:STATE
all Bewohner:STATE di_struct_electricity:STATE
itimer:
localtime:
readings:
1 wz_switch_activity_dummy:state wz_switch_Sw:state
all wz_switch_activity_dummy:state wz_switch_Sw:state
time:
0 ReadingsAge('wz_switch_activity_dummy','state','0')
timeCond:
0 1
timer:
0 0
timers:
1 0
trigger:
uiState:
uiTable:
Attributes:
alias Stromautomatik
devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1
group DOIF_Strom
icon helper_doif
room DOIF
Kommando 1 und 3 funktionieren wunderbar.
Leider jedoch nicht Kommando 2. Dieses scheint nie erreicht zu werden. Ich bin langsam am verzweifeln.
Ich hoffe es kann mir jemand einen Tipp geben, was ich falsch mache.
Vielen Dank und liebe Grüße
Xargon
Hi Xargon,
also ich denke ja dein Konstrukt mit ReadingsAge steht in keiner Doku (PerlCode in eckigen Klammern) :o - aber mag sein ich liege falsch.
Dafür habe ich das gefunden -> https://commandref.fhem.de/commandref_DE.html#DOIF_Zeitspanne_eines_Readings_seit_der_letzten_Aenderung
Gruß Otto
Hi Otto,
vielen Dank für deine schnelle Antwort.
Ich gebe zu, dass ich ReadingsAge in diesem Zusammenhang nirgendwo dokumentiert gesehen habe. Ich habe einfach gehofft, dass es hier auch funktioniert.
Ich werde mir die DOIF Zeitspanne morgen mal anschauen.
Ich befürchte jedoch, dass mein Problem bereits beim auslesen des state meines Dummys liegt. Denn auch ohne die ReadingsAge Bedingung wird die Bedingung für das Kommando 2 scheinbar nie erfüllt.
Möglicherweise ist es einfach irgendwo ein Tippfehler, aber ich finde ihn einfach nicht.
Ich habe ehrlich gesagt auch noch nicht ganz verstanden wann DOIF getriggert wird. Nur, wenn sich etwas im ersten Bedinungsblock ändert oder auch, wenn sich etwas in den ELSEDOIF Blöcken andert?
Viele Grüße
Xargon
Zitat von: Xargon am 25 April 2018, 23:41:25
Ich gebe zu, dass ich ReadingsAge in diesem Zusammenhang nirgendwo dokumentiert gesehen habe. Ich habe einfach gehofft, dass es hier auch funktioniert.
Ich werde mir die DOIF Zeitspanne morgen mal anschauen.
das die syntax so nicht gepasst hat, siehst du auch daran:
Zitat2018-04-25 22:50:56 timer_01_c02 error: Wrong timespec ReadingsAge('wz_switch_activity_dummy','state','0'): either HH:MM:SS or {perlcode}
aber da hat otto ja schon was zu geschrieben.
Zitat von: Xargon am 25 April 2018, 23:41:25
Ich befürchte jedoch, dass mein Problem bereits beim auslesen des state meines Dummys liegt. Denn auch ohne die ReadingsAge Bedingung wird die Bedingung für das Kommando 2 scheinbar nie erfüllt.
Möglicherweise ist es einfach irgendwo ein Tippfehler, aber ich finde ihn einfach nicht.
tippfehler oder die bedingungen sind wirklich nie erfüllt bisher??
Zitat von: Xargon am 25 April 2018, 23:41:25
Ich habe ehrlich gesagt auch noch nicht ganz verstanden wann DOIF getriggert wird. Nur, wenn sich etwas im ersten Bedinungsblock ändert oder auch, wenn sich etwas in den ELSEDOIF Blöcken andert?
auch in den DOELSEIF-Teilen, wenn kein ? vorangestellt ist.
die commandref zu DOIF ist sehr, sehr, sehr umfangreich (auch mit beispielen!), die muss man schon öfter als einmal lesen. :)
wäre es auch eine mögliche lösung deinen dummy verzögert zu setzen durch das DOIF ?? (wait Attribut in der DOIF commandref angucken!)
dann brauchst du dich - wenn ich es richtig verstanden habe - nicht mit ReadingsAge(...) befassen.
Moin Xargon,
den Teil
Zitatand [wz_switch_Sw:state] eq "on")(set wz_switch_Sw off)
Würde ich unabhängig vom Rest so lösen wie in der allgemeinen Doku beschrieben (https://commandref.fhem.de/commandref_DE.html#devspec):
(set wz_switch_Sw:FILTER=STATE=on off)
Gilt auch hier:
(set di_struct_electricity:FILTER=STATE=on off)
Getriggert wird ein DOIF bei einer Änderung einer der Werte die Du abfragst. Dann wird von oben abgearbeitet und jeder Zweig entschieden ob er wahr ist. Wenn Einer wahr ist wird dieser ausgeführt, die folgenden bleiben bis zum nächsten Trigger unbeachtet.
Gruß Otto
Hi Nils und Otto,
Ich habe es nun hinbekommen. Mein DOIF sieht nun folgendermaßen aus:
Internals:
CFGFN
DEF ([Bewohner] eq "home" and [di_struct_electricity] eq "off")(set di_struct_electricity on)
DOELSEIF([Bewohner] eq "home" and [bu_switch_active_dummy:state] eq "false" and [bu_switch_active_dummy:state:sec]>600)(set wz_switch_Sw:FILTER=STATE=on off)
DOELSEIF([Bewohner] eq "home" and [wz_switch_active_dummy:state] eq "false" and [wz_switch_active_dummy:state:sec]>300)(set wz_switch_Sw:FILTER=STATE=on off)
DOELSEIF([Bewohner] ne "home" and [di_struct_electricity] eq "on")(set di_struct_electricity:FILTER=STATE=on off)
NAME di_electricity
NR 705
NTFY_ORDER 50-di_electricity
STATE cmd_2
TYPE DOIF
READINGS:
2018-04-27 00:53:47 Device di_struct_electricity
2018-04-27 00:53:47 cmd 2
2018-04-27 00:53:47 cmd_event Bewohner
2018-04-27 00:53:47 cmd_nr 2
2018-04-27 00:53:47 e_Bewohner_STATE home
2018-04-27 00:53:47 e_di_struct_electricity_STATE on
2018-04-27 00:53:12 e_wz_switch_active_dummy_state false
2018-04-27 00:50:48 mode enabled
2018-04-27 00:53:47 state cmd_2
Regex:
condition:
0 InternalDoIf($hash,'Bewohner','STATE') eq "home" and InternalDoIf($hash,'di_struct_electricity','STATE') eq "off"
1 InternalDoIf($hash,'Bewohner','STATE') eq "home" and ReadingValDoIf($hash,'bu_switch_active_dummy','state') eq "false" and ReadingSecDoIf('bu_switch_active_dummy','state')>600
2 InternalDoIf($hash,'Bewohner','STATE') eq "home" and ReadingValDoIf($hash,'wz_switch_active_dummy','state') eq "false" and ReadingSecDoIf('wz_switch_active_dummy','state')>300
3 InternalDoIf($hash,'Bewohner','STATE') ne "home" and InternalDoIf($hash,'di_struct_electricity','STATE') eq "on"
devices:
0 Bewohner di_struct_electricity
1 Bewohner bu_switch_active_dummy
2 Bewohner wz_switch_active_dummy
3 Bewohner di_struct_electricity
all Bewohner di_struct_electricity bu_switch_active_dummy wz_switch_active_dummy
do:
0:
0 set di_struct_electricity on
1:
0 set wz_switch_Sw:FILTER=STATE=on off
2:
0 set wz_switch_Sw:FILTER=STATE=on off
3:
0 set di_struct_electricity:FILTER=STATE=on off
4:
helper:
DOIF_Readings_events
DOIF_eventas
event on
globalinit 1
last_timer 0
sleeptimer -1
timerdev Bewohner
timerevent durTimerPresence_cr: 1,durTimerPresence: 00:01:00
triggerDev di_struct_electricity
timerevents:
durTimerPresence_cr: 1
durTimerPresence: 00:01:00
timereventsState:
durTimerPresence_cr: 1
durTimerPresence: 00:01:00
triggerEvents:
on
triggerEventsState:
state: on
internals:
0 Bewohner:STATE di_struct_electricity:STATE
1 Bewohner:STATE
2 Bewohner:STATE
3 Bewohner:STATE di_struct_electricity:STATE
all Bewohner:STATE di_struct_electricity:STATE
itimer:
readings:
1 bu_switch_active_dummy:state
2 wz_switch_active_dummy:state
all bu_switch_active_dummy:state wz_switch_active_dummy:state
trigger:
uiState:
uiTable:
Attributes:
alias Stromautomatik
devStateIcon cmd_1:user_available@green cmd_2|cmd_3:time_eco_mode@red cmd_4:user_away@red initialized:message_attention@yellow
group DOIF_Strom
icon helper_doif
room DOIF
Ich hatte testweise die Zeit zum Abschalten auf 10 Sekunden gesetzt. Dabei ist mir aufgefallen, dass die Abschaltung erst nach mehr als 10 Sekunden in Kraft getreten ist. Ich nehme an, das liegt daran, dass die Readings nicht sekündlich aktualisiert werden und es so zu zeitlichen Abweichungen kommen kann. Liege ich damit richtig?
An meinem Dummy und "Hilfs-DOIF" habe ich nichts geändert. Es ist ja schon fast peinlich zuzugeben, aber ich habe in meiner Bedingung nicht den korrekten Namen meines Dummys verwendet.
wz_switch_active_dummy != wz_switch_activity_dummy
Vielen Dank euch beiden!
VG Xargon
Hi,
ich wollte Deinen Code ja mit meinem Einwurf etwas verkürzen.
Du hast das zwar übernommen, aber im letzten Zweig ist die Abfrage ist noch redundant drin.
Der Ausdruck: and [di_struct_electricity] eq "on" im Abfrageteil bewirkt das gleiche wie di_struct_electricity:FILTER=STATE=on im Ausführungsteil.
Ich finde es aber eleganter, weil damit erst bei der Ausführung entschieden wird. Es erfolgt vorher zum Einen keine Triggerung (kann man auch verhindern) zum Anderen wird der logische Ausdruck einfacher.
Gruß Otto
Hi nochmal,
Ich versuche die Readings Zeitspanne zu verwenden, um die beiden Schalter nach einer halben, bzw. vollen Stunde abzuschalten, nachdem der Leistungsschwellwert unterschritten wurde, also meine Dummy states auf false gesetzt wurden.
Leider springt er aktuell nach maximal zehn Sekunden in cmd_3 und verharrt dann dort. Meinem Verständnis aus commandref nach sollte das erst passieren, nachdem 3600 Sekunden vergangen sind und somit die Zeitspanne größer als 3600 geworden ist. Und wieso springt er zuerst in cmd_3 und nicht in cmd_2, da doch eigentlich 1800<3600?
Habe ich irgendwo einen Denkfehler?
Internals:
CFGFN
DEF ([Bewohner] eq "home" and [di_struct_electricity] eq "off")(set di_struct_electricity:FILTER=STATE=off on)
DOELSEIF([Bewohner] eq "home" and [wz_switch_active_dummy:state] eq "false" and [wz_switch_active_dummy:state:sec]>1800)(set wz_switch_Sw:FILTER=STATE=on off)
DOELSEIF([Bewohner] eq "home" and [bu_switch_active_dummy:state] eq "false" and [bu_switch_active_dummy:state:sec]>3600)(set bu_switch_Sw:FILTER=STATE=on off)
DOELSEIF([Bewohner] ne "home")(set di_struct_electricity:FILTER=STATE=on off)
NAME di_electricity
NR 705
NTFY_ORDER 50-di_electricity
STATE cmd_3
TYPE DOIF
READINGS:
2018-04-27 20:51:02 Device Bewohner
2018-04-27 20:49:02 cmd 3
2018-04-27 20:49:02 cmd_event Bewohner
2018-04-27 20:49:02 cmd_nr 3
2018-04-27 20:51:02 e_Bewohner_STATE home
2018-04-27 20:49:02 e_di_struct_electricity_STATE on
2018-04-27 20:48:27 e_wz_switch_active_dummy_state false
2018-04-27 20:46:49 mode enabled
2018-04-27 20:49:02 state cmd_3
Regex:
condition:
0 InternalDoIf($hash,'Bewohner','STATE') eq "home" and InternalDoIf($hash,'di_struct_electricity','STATE') eq "off"
1 InternalDoIf($hash,'Bewohner','STATE') eq "home" and ReadingValDoIf($hash,'wz_switch_active_dummy','state') eq "false" and ReadingSecDoIf('wz_switch_active_dummy','state')>1800
2 InternalDoIf($hash,'Bewohner','STATE') eq "home" and ReadingValDoIf($hash,'bu_switch_active_dummy','state') eq "false" and ReadingSecDoIf('bu_switch_active_dummy','state')>3600
3 InternalDoIf($hash,'Bewohner','STATE') ne "home"
devices:
0 Bewohner di_struct_electricity
1 Bewohner wz_switch_active_dummy
2 Bewohner bu_switch_active_dummy
3 Bewohner
all Bewohner di_struct_electricity wz_switch_active_dummy bu_switch_active_dummy
do:
0:
0 set di_struct_electricity:FILTER=STATE=off on
1:
0 set wz_switch_Sw:FILTER=STATE=on off
2:
0 set bu_switch_Sw:FILTER=STATE=on off
3:
0 set di_struct_electricity:FILTER=STATE=on off
4:
helper:
DOIF_Readings_events
DOIF_eventas
event durTimerPresence_cr: 3,durTimerPresence: 00:03:00
globalinit 1
last_timer 0
sleeptimer -1
timerdev Bewohner
timerevent durTimerPresence_cr: 3,durTimerPresence: 00:03:00
triggerDev Bewohner
timerevents:
durTimerPresence_cr: 3
durTimerPresence: 00:03:00
timereventsState:
durTimerPresence_cr: 3
durTimerPresence: 00:03:00
triggerEvents:
durTimerPresence_cr: 3
durTimerPresence: 00:03:00
triggerEventsState:
durTimerPresence_cr: 3
durTimerPresence: 00:03:00
internals:
0 Bewohner:STATE di_struct_electricity:STATE
1 Bewohner:STATE
2 Bewohner:STATE
3 Bewohner:STATE
all Bewohner:STATE di_struct_electricity:STATE
itimer:
readings:
1 wz_switch_active_dummy:state
2 bu_switch_active_dummy:state
all wz_switch_active_dummy:state bu_switch_active_dummy:state
trigger:
uiState:
uiTable:
Attributes:
alias Stromautomatik
devStateIcon cmd_1:user_available@green cmd_2|cmd_3:time_eco_mode@red cmd_4:user_away@red initialized:message_attention@yellow
group DOIF_Strom
icon helper_doif
room DOIF
VG Xargon
Hallo,
das wird jetzt schwierig in der Beurteilung. Was ich aus deinem list sehe: der Bewohnerstatus triggert offenbar ständig. Das muss kein Problem sein.
Eventuell musst Du noch dies hier beachten -> https://forum.fhem.de/index.php/topic,87322.msg797656.html#msg797656
Du musst mit Eventmonitor beobachten, in welcher Reihenfolge was passiert. Von aussen ist das schwer zu beurteilen.
Gruß Otto
Zitat von: Otto123 am 27 April 2018, 09:34:31Der Ausdruck: and [di_struct_electricity] eq "on" im Abfrageteil bewirkt das gleiche wie di_struct_electricity:FILTER=STATE=on im Ausführungsteil.
Das Gleiche bewirkt es nicht. Der Status des DOIF und die Ausführung der nachfolgenden cmd sind schon sehr unterschiedlich, je nachdem, wie ich die Abfrage stelle.
Ob es in diesen Fall eine Relevanz hat, beurteile ich aber mal nicht.
Zitat von: Per am 02 Mai 2018, 11:37:23
Das Gleiche bewirkt es nicht. Der Status des DOIF und die Ausführung der nachfolgenden cmd sind schon sehr unterschiedlich, je nachdem, wie ich die Abfrage stelle.
Ob es in diesen Fall eine Relevanz hat, beurteile ich aber mal nicht.
Aussagen zerpflücken :'(
Es geht um den ursprünglichen Code in der Frage des TE.
Da der Ausführungsteil nur aus set <> on besteht und in der Abfrage in jedem Zweig mit "and" als Hauptkriterium für das Schalten einbezogen wird, ist das Ergebnis das Gleiche aber kürzer.
Gruß Otto
Hallo zusammen,
tut mir Leid, dass ich nicht früher Rückmeldung gegeben habe. Ich hatte die letzten Tage wenig Zeit.
Ich habe nun herausgefunden, was bei mir noch unerwünschte Effekte verursacht hat. Wie zuvor schon erwähnt, arbeite ich mit Dummys, um zu bestimmen, wann der Stromverbrauch einen bestimmten Schwellwert unterschritten hat.
Wenn ich also heimgekommen bin, wurden meine Funksteckdosen aktiviert.
Dabei überschreitet mein Fernseher kurzzeitig den Schwellwert und unterschreitet ihn anschließend schnell wieder. Die Folge davon ist jedoch, dass das Reading meines Dummys neu gesetzt wurde.
Im Büro hingegen, wo nur mein Notebook und ein Bildschirm an der Steckdose hängen, wird der Schwellwert jedoch nicht überschritten. Daher konnte das Dummy Reading schon erheblich älter sein.
Ich habe es nun so gelöst, dass ich beim Heimkommen nun nicht nur die Steckdosen aktiviere, sondern auch meine Hilf-Dummys auf true setze. Somit stelle ich sicher, dass sie nicht bereits "zu alt" sind. Sicherlich gibt es schönere Lösungen. Aber damit verhalten sich meine Steckdosen wie gewünscht.
Mein DOIF sieht nun wie folgt aus:
Internals:
DEF ([Bewohner] eq "home" and [di_struct_electricity] eq "off")
(set di_struct_electricity:FILTER=STATE=off on, set bu_switch_active_dummy true, set wz_switch_active_dummy true)
DOELSEIF([Bewohner] eq "home" and [wz_switch_active_dummy:state] eq "false" and [wz_switch_active_dummy:state:sec]>3600)
(set wz_switch_Sw:FILTER=STATE=on off)
DOELSEIF([Bewohner] eq "home" and [bu_switch_active_dummy:state] eq "false" and [bu_switch_active_dummy:state:sec]>5400)
(set bu_switch_Sw:FILTER=STATE=on off)
DOELSEIF([Bewohner] ne "home")(set di_struct_electricity:FILTER=STATE=on off)
MODEL FHEM
NAME di_electricity
NR 129
NTFY_ORDER 50-di_electricity
STATE cmd_2
TYPE DOIF
READINGS:
2018-05-03 21:25:39 Device Bewohner
2018-05-03 21:25:39 cmd 2
2018-05-03 21:25:39 cmd_event Bewohner
2018-05-03 21:25:39 cmd_nr 2
2018-05-03 21:25:39 e_Bewohner_STATE home
2018-05-03 21:25:35 mode enabled
2018-05-03 21:25:39 state cmd_2
Regex:
condition:
0 InternalDoIf($hash,'Bewohner','STATE') eq "home" and InternalDoIf($hash,'di_struct_electricity','STATE') eq "off"
1 InternalDoIf($hash,'Bewohner','STATE') eq "home" and ReadingValDoIf($hash,'wz_switch_active_dummy','state') eq "false" and ReadingSecDoIf('wz_switch_active_dummy','state')>3600
2 InternalDoIf($hash,'Bewohner','STATE') eq "home" and ReadingValDoIf($hash,'bu_switch_active_dummy','state') eq "false" and ReadingSecDoIf('bu_switch_active_dummy','state')>5400
3 InternalDoIf($hash,'Bewohner','STATE') ne "home"
devices:
0 Bewohner di_struct_electricity
1 Bewohner wz_switch_active_dummy
2 Bewohner bu_switch_active_dummy
3 Bewohner
all Bewohner di_struct_electricity wz_switch_active_dummy bu_switch_active_dummy
do:
0:
0 set di_struct_electricity:FILTER=STATE=off on, set bu_switch_active_dummy true, set wz_switch_active_dummy true
1:
0 set wz_switch_Sw:FILTER=STATE=on off
2:
0 set bu_switch_Sw:FILTER=STATE=on off
3:
0 set di_struct_electricity:FILTER=STATE=on off
4:
helper:
DOIF_Readings_events
DOIF_eventas
event durTimerPresence_cr: 188,durTimerPresence: 03:08:02
globalinit 1
last_timer 0
sleeptimer -1
timerdev Bewohner
timerevent durTimerPresence_cr: 188,durTimerPresence: 03:08:02
triggerDev Bewohner
timerevents:
durTimerPresence_cr: 188
durTimerPresence: 03:08:02
timereventsState:
durTimerPresence_cr: 188
durTimerPresence: 03:08:02
triggerEvents:
durTimerPresence_cr: 188
durTimerPresence: 03:08:02
triggerEventsState:
durTimerPresence_cr: 188
durTimerPresence: 03:08:02
internals:
0 Bewohner:STATE di_struct_electricity:STATE
1 Bewohner:STATE
2 Bewohner:STATE
3 Bewohner:STATE
all Bewohner:STATE di_struct_electricity:STATE
itimer:
readings:
1 wz_switch_active_dummy:state
2 bu_switch_active_dummy:state
all wz_switch_active_dummy:state bu_switch_active_dummy:state
trigger:
uiState:
uiTable:
Attributes:
alias Stromautomatik
devStateIcon cmd_1:user_available@green cmd_2|cmd_3:time_eco_mode@red cmd_4:user_away@red initialized:message_attention@yellow
group DOIF_Strom
icon helper_doif
initialize initialized
room DOIF
VG Xargon und vielen Dank für eure Hilfe!