da ich "doif" sehr liebe und langsam der meinung war, ich könnte dann doch mal ein wenig "anspruchsvolleres" mit fhem machen, hab ich mir ein doif für mein aussenrollo gebastelt.
scheinbar bin ich noch nicht wirklich so weit, oder hab wieder mal einen geistigen dreher in meinen verbliebenen 3 gehirnzellen.
auf jeden fall will folgendes doif in der früh so überhaupt gar nix tun obwohl die readings alle passen würden.
aussehen tut das ganze so:(
[?06:30-10:30]
and
[Ping_FatBastard:state] eq "present"
and
([FritzBox:mac_xx_xx_xx_xx_xx_xx] eq "Arbeits-PC" or [Ping_Mrs_Lock:state] eq "present")
)
(set WZ_Terrasse_Rollo off;)
DOELSEIF
( [?21:00-24:00]
and
[MK_Fliegengitter:state] eq "closed"
and
[MK_Katzentuer:state] eq "closed"
)
(set WZ_Terrasse_Rollo on;)
zusätzliches:
do always <-- in der hoffnung, dass dann mal mehr passiert als nix
wait 14400 <-- in weiterer hoffnung, dass mein befehl nur 1 mal in den oben angegebenen zeitpsannen ausgeführt wird
erklärung:
(nur falls sich wer fragt, warum der Arbeits-PC nicht wie die anderen gepinged wird - der würde nichts zurück melden, aber in der fritzbox kann ich ihn sehen.)
was will ich eigentlich erreichen?
in der früh zw. 6:30 und 10:30 soll ein aussenrollo hochfahren wenn mein pc und einer der beiden anderen pc's laufen.
abends zw. 21 und 24 uhr soll das rollo runter fahren, wenn die beiden magnetkontakte geschlossen sind
beides soll innerhalb der angegebenen zeiten nur 1 mal geschehen. würde ich also nachträglich händisch die rollo bewegen, soll das dann auch so bleiben, bis die nächste zeitblase kommt.
Gib mal bitte ein list damit man alle Readings und versteckten Helper sehen kann.
ach servus:
hier bitte:Internals:
DEF (
[?06:30-10:30]
and
[Ping_FatBastard:state] eq "present"
and
[FritzBox:mac_xx_xx_xx_xx_xx_xx] eq "Arbeits_PC"
)
(set WZ_Terrasse_Rollo off;)
DOELSEIF
( [?21:00-24:00]
and
[MK_Fliegengitter:state] eq "closed"
and
[MK_Katzentuer:state] eq "closed"
)
(set WZ_Terrasse_Rollo on;)
NAME Rollo_Terasse
NR 329
NTFY_ORDER 50-Rollo_Terasse
STATE cmd_1
TYPE DOIF
Helper:
Dblog:
Cmd_event:
Logdb:
TIME 1460011253.1528
VALUE Ping_FatBastard
Cmd_nr:
Logdb:
TIME 1460011253.1528
VALUE 1
State:
Logdb:
TIME 1460011253.1528
VALUE cmd_1
Timer_1_c1:
Logdb:
TIME 1460008209.5745
VALUE 08.04.2016 06:30:00
Timer_2_c1:
Logdb:
TIME 1460008209.60604
VALUE 07.04.2016 10:30:00
Timer_3_c2:
Logdb:
TIME 1460008209.63747
VALUE 07.04.2016 21:00:00
Timer_4_c2:
Logdb:
TIME 1460008209.66792
VALUE 08.04.2016 00:00:00
Wait_timer:
Logdb:
TIME 1460011264.14422
VALUE no timer
Readings:
2016-04-07 08:40:53 Device Ping_FatBastard
2016-04-07 08:40:53 cmd_event Ping_FatBastard
2016-04-07 08:40:53 cmd_nr 1
2016-04-07 08:40:24 e_FritzBox_mac_xx_xx_xx_xx_xx_xx Arbeits_PC
2016-04-07 08:40:53 e_Ping_FatBastard_state present
2016-04-07 07:45:09 e_Ping_Mrs_Lock_state absent
2016-04-07 08:40:53 state cmd_1
2016-04-07 07:50:09 timer_1_c1 08.04.2016 06:30:00
2016-04-07 07:50:09 timer_2_c1 07.04.2016 10:30:00
2016-04-07 07:50:09 timer_3_c2 07.04.2016 21:00:00
2016-04-07 07:50:09 timer_4_c2 08.04.2016 00:00:00
2016-04-07 08:41:04 wait_timer no timer
Condition:
0 DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and ReadingValDoIf($hash,'Ping_FatBastard','state','','',AttrVal($hash->{NAME},'notexist',undef)) eq "present" and ReadingValDoIf($hash,'FritzBox','mac_xx_xx_xx_xx_xx_xx','','',AttrVal($hash->{NAME},'notexist',undef)) eq "Arbeits_PC"
1 DOIF_time($hash,$hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"") and ReadingValDoIf($hash,'MK_Fliegengitter','state','','',AttrVal($hash->{NAME},'notexist',undef)) eq "closed" and ReadingValDoIf($hash,'MK_Katzentuer','state','','',AttrVal($hash->{NAME},'notexist',undef)) eq "closed"
Days:
Devices:
0 Ping_FatBastard FritzBox
1 MK_Fliegengitter MK_Katzentuer
all Ping_FatBastard FritzBox MK_Fliegengitter MK_Katzentuer
Do:
0:
0 set WZ_Terrasse_Rollo off;
1:
0 set WZ_Terrasse_Rollo on;
Helper:
event present,presence: present
globalinit 1
last_timer 4
sleeptimer -1
timerdev Ping_FatBastard
timerevent present,presence: present
triggerDev Ping_FatBastard
timerevents:
present
presence: present
triggerEvents:
present
presence: present
Internals:
Interval:
0 -1
1 0
2 -1
3 2
Itimer:
Localtime:
0 1460089800
1 1460017800
2 1460055600
3 1460066400
Readings:
0 Ping_FatBastard:state FritzBox:mac_xx_xx_xx_xx_xx_xx
1 MK_Fliegengitter:state MK_Katzentuer:state
all Ping_FatBastard:state FritzBox:mac_xx_xx_xx_xx_xx_xx MK_Fliegengitter:state MK_Katzentuer:state
Realtime:
0 06:30:00
1 10:30:00
2 21:00:00
3 00:00:00
Regexp:
0:
All:
State:
Time:
0 06:30:00
1 10:30:00
2 21:00:00
3 24:00:00
Timecond:
0 0
1 0
2 1
3 1
Timer:
0 0
1 0
2 0
3 0
Trigger:
Triggertime:
1460017800:
localtime 1460017800
Hash:
1460055600:
localtime 1460055600
Hash:
1460066400:
localtime 1460066400
Hash:
1460089800:
localtime 1460089800
Hash:
Attributes:
DbLogExclude 1
alias Rollo Terrasse Automatik
do always
icon fts_shutter_updown
room Szenen
wait 14400
ich merk übrigens, dass zumindest meine and's und or zu passen scheinen, da die rollo ohne dem "wait" alle 10 min. (entspräche der pause beim pingen) am hochfahren wäre. mein problem scheint dann wohl zu sein, dass "wait" wohl der falsche ansatz is um nur einmal im zeitfenster zu schalten?
Das ständige kommt vom do always das muss raus.
Das wait bedeutet das er mit dem Befehl x sekunden warten soll bevor er ihn aus führt.
Also wait raus und do always raus und dann mal schauen
Der Rest sollte wohl passen
o.k. - das währ ja super einfach und schon mal ein danke an dich dafür.
aber nur zum verständis für mich: wie verhindere ich, dass das rollo innerhalb der 2 zeitfenster mehrfach fährt, weil ich z.b. das ding selber betätigt hab und ein rechner neu gestartet wurde?
oder hab ich bis jetzt doif total mißverstanden, und ein befehl wird generell nur 1 mal in einem zeitfenster ausgeführt?
Das sollte es nicht. Wenn Du das do always rausgenommen hast und 2 Bedingungen hast arbeitet das DOIF wie eine SState Machine. Also auf Basis einer Zustandsänderung.
Ist die erste Bedingung erfüllt und cmd1 abgesetzt kann so lange cmd1 nicht mehr abgesetzt werden bevor nicht ein anderer Zustand statt gefunden hat. Also ein cmd2 Was bei dir ja nur abends und unter bestimmten anderen bedingungen erfolgen kann
jetzt kapier ichs - vielen dank cooltux!
hab ich (wieder mal) viel zu kompliziert und um die ecke gedacht ...