Hallo,
ich bin dabei mir eine Zeitschaltuhr zu bauen und habe dazu den Tipp für ein doif erhalten, dass ich mir so angepasst habe:
define Zeitschaltuhr1 dummy
attr Zeitschaltuhr1 group Zeitschaltuhr
attr Zeitschaltuhr1 room 95.Freigaben
#attr Zeitschaltuhr1 alias Wohnzimmer
define Timer1_d1 DOIF (["$SELF:P_mybutton: on"] or [[$SELF:P_mybegin,"00:00"]])\
(set Zeitschaltuhr1 on)\
DOELSEIF (["$SELF:P_mybutton: off"] or [[$SELF:P_myend,"00:01"]])\
(set Zeitschaltuhr1 off)
attr Timer1_d1 alias Schaltuhr 1
attr Timer1_d1 cmdState on|off
attr Timer1_d1 group Zeitschaltuhr
attr Timer1_d1 readingList P_mybutton P_mybegin P_myend
attr Timer1_d1 room 95.Freigaben
attr Timer1_d1 setList P_mybutton:Zeitschaltuhr1,on,off P_mybegin:time P_myend:time
attr Timer1_d1 webCmd P_mybutton:P_mybegin:P_myend
Das funktioniert.
Nun will ich mir eine 2.Zeitschaltung bauen, die noch mit Freigaben versehen ist. Das habe ich so umgesetzt:
define Zeitschaltuhr2 dummy
attr Zeitschaltuhr2 group Zeitschaltuhr
attr Zeitschaltuhr2 room 95.Freigaben
#attr Zeitschaltuhr2 alias Wohnzimmer
define Timer2_d2 DOIF ((["$SELF:P_mybutton: on"] or [[$SELF:P_mybegin,"00:00"]]) and ["$SELF:EINaktiv: aktiv"])\
(set Zeitschaltuhr2 on)\
DOELSEIF ((["$SELF:P_mybutton: off"] or [[$SELF:P_myend,"00:01"]]) and ["$SELF:AUSaktiv: aktiv"])\
(set Zeitschaltuhr2 off)
attr Timer2_d2 alias Schaltuhr 2
attr Timer2_d2 cmdState on|off
attr Timer2_d2 group Zeitschaltuhr
attr Timer2_d2 readingList P_mybutton P_mybegin P_myend EINaktiv AUSaktiv
attr Timer2_d2 room 95.Freigaben
attr Timer2_d2 setList P_mybutton:Zeitschaltuhr2,on,off P_mybegin:time P_myend:time EINaktiv:aktiv,deaktiviert AUSaktiv:aktiv,deaktiviert
attr Timer2_d2 webCmd P_mybutton:P_mybegin:EINaktiv:P_myend:AUSaktiv
Leider funktioniert es aber nicht und ich habe irgendwo einen Fehler eingebaut, den ich aber nicht finde.
Was habe ich falsch gemacht? Ein Tipp wäre super.
Vielen Dank,
Jogi
denke, du solltest nicht das event
["$SELF:EINaktiv: aktiv"]
abfragen, sondern das reading.
hintergrund: es kann nicht mehr als einen event zur gleichen zeit (and-verknüpfung) geben.
das wäre mein tip...
1. Schreibst du direkt in die cfg? Dann versuch es mal über das Webinterface, da werden einige Fehler schon abgefangen.
2. Was heißt es funktioniert nicht? Gibt es Fehler? Wie ist der Zustand des nicht funktionierenden DOIF?
Zitat von: Amenophis86 am 20 Dezember 2017, 14:36:59
1. Schreibst du direkt in die cfg? Dann versuch es mal über das Webinterface, da werden einige Fehler schon abgefangen.
2. Was heißt es funktioniert nicht? Gibt es Fehler? Wie ist der Zustand des nicht funktionierenden DOIF?
Ich habe den Befehl direkt in den DEF-Editor eingegeben.
Was funktioniert nicht?:
Bei dem ersten Zeitschalter ist es so, dass beim Schalten auf on im ersten Slider die Lampe angeht.
Auch das Schalten über die Zeiten funktioniert.
Beim 2. Zeitschalter passiert gar nichts.
Beispiel:
Bei meinem 2.Zeitschalter schaltet die Lampe nicht "on" obwohl die Bedingungen erfüllt sind.
Der erste Silder steht auf on und EINactive steht auf aktiv.
State ändert sich aber nicht.
Hier ein List:
Internals:
DEF ((["$SELF:P_mybutton: on"] or [[$SELF:P_mybegin,"00:00"]]) and ["$SELF:EINaktiv: aktiv"])
(set Zeitschaltuhr2 on)
DOELSEIF ((["$SELF:P_mybutton: off"] or [[$SELF:P_myend,"00:01"]]) and ["$SELF:AUSaktiv: aktiv"])
(set Zeitschaltuhr2 off)
NAME Timer2_d2
NR 1432
NTFY_ORDER 50-Timer2_d2
STATE initialize
TYPE DOIF
READINGS:
2017-12-20 14:44:00 AUSaktiv aktiv
2017-12-20 14:45:19 Device Timer2_d2
2017-12-20 14:44:32 EINaktiv aktiv
2017-12-20 14:45:41 P_mybegin 12:55
2017-12-20 14:45:33 P_mybutton Zeitschaltuhr2
2017-12-20 14:44:11 P_myend 09:00
2017-12-20 14:45:52 state initialize
2017-12-20 14:45:41 timer_01_c01 21.12.2017 12:55:00
2017-12-20 14:44:11 timer_02_c02 21.12.2017 09:00:00
Regex:
cond:
:
0:
"Timer2_d2:EINaktiv: aktiv" Timer2_d2:EINaktiv: aktiv
"Timer2_d2:P_mybutton: on" Timer2_d2:P_mybutton: on
1:
"Timer2_d2:AUSaktiv: aktiv" Timer2_d2:AUSaktiv: aktiv
"Timer2_d2:P_mybutton: off" Timer2_d2:P_mybutton: off
condition:
0 (EventDoIf('Timer2_d2',$hash,'P_mybutton: on',0) or DOIF_time_once($hash,0,$wday)) and EventDoIf('Timer2_d2',$hash,'EINaktiv: aktiv',0)
1 (EventDoIf('Timer2_d2',$hash,'P_mybutton: off',0) or DOIF_time_once($hash,1,$wday)) and EventDoIf('Timer2_d2',$hash,'AUSaktiv: aktiv',0)
days:
devices:
do:
0:
0 set Zeitschaltuhr2 on
1:
0 set Zeitschaltuhr2 off
2:
helper:
DOIF_Readings_events
DOIF_eventas
event P_mybutton: off
globalinit 1
last_timer 2
sleeptimer -1
triggerDev Timer2_d2
triggerEvents:
P_mybutton: off
Device: Timer2_d2
triggerEventsState:
P_mybutton: off
Device: Timer2_d2
internals:
itimer:
all Timer2_d2
localtime:
0 1513857300
1 1513843200
readings:
realtime:
0 12:55:00
1 09:00:00
time:
0 [Timer2_d2:P_mybegin,"00:00"]
1 [Timer2_d2:P_myend,"00:01"]
timeCond:
0 0
1 1
timer:
0 0
1 0
timers:
0 0
1 1
trigger:
triggertime:
1513843200:
localtime 1513843200
hash:
1513857300:
localtime 1513857300
hash:
uiState:
uiTable:
Attributes:
alias Schaltuhr 2
cmdState on|off
group Zeitschaltuhr
readingList P_mybutton P_mybegin P_myend EINaktiv AUSaktiv
room 95.Freigaben
setList P_mybutton:Zeitschaltuhr2,on,off P_mybegin:time P_myend:time EINaktiv:aktiv,deaktiviert AUSaktiv:aktiv,deaktiviert
webCmd P_mybutton:P_mybegin:EINaktiv:P_myend:AUSaktiv
Wundert mich, dass du im DEF Fenster schreibst und nicht in der CFG, da deine Codzeilen mit \ enden und der gepostete Code aussieht, als ob er aus der cfg ist, auch durch die Auflistung der Attr.
P_mybutton Zeitschaltuhr2
ist nicht gleich ["$SELF:P_mybutton: on"]
, liegt es vielleicht daran?
Ich habe noch etwas rumgebastelt und jetzt funktioniert es:
define Zeitschaltuhr2 dummy
attr Zeitschaltuhr2 alias Wohnzimmer
attr Zeitschaltuhr2 group Zeitschaltuhr
attr Zeitschaltuhr2 room 95.Freigaben
attr Zeitschaltuhr2 sortby 5
#attr Zeitschaltuhr2 alias Wohnzimmer
define Timer2_d2 DOIF ((["$SELF:P_mybutton: on"] or [[$SELF:P_mybegin,"00:00"]]) and [Timer2_d2:EINaktiv] eq "aktiv")\
(set Zeitschaltuhr2 on)\
DOELSEIF ((["$SELF:P_mybutton: off"] or [[$SELF:P_myend,"00:01"]]) and [Timer2_d2:AUSaktiv] eq "aktiv")\
(set Zeitschaltuhr2 off)
attr Timer2_d2 alias Schaltuhr 2
attr Timer2_d2 cmdState on|off
attr Timer2_d2 do always
attr Timer2_d2 group Zeitschaltuhr
attr Timer2_d2 readingList P_mybutton P_mybegin P_myend EINaktiv AUSaktiv
attr Timer2_d2 room 95.Freigaben
attr Timer2_d2 setList P_mybutton:Zeitschaltuhr2,on,off P_mybegin:time P_myend:time EINaktiv:aktiv,deaktiviert AUSaktiv:aktiv,deaktiviert
attr Timer2_d2 sortby 2
attr Timer2_d2 webCmd P_mybutton:P_mybegin:EINaktiv:P_myend:AUSaktiv
Und "ja" manchmal gebe ich auch Dinge direkt in die CFG ein.
Das doif habe ich aber direkt in der DEF bearbeitet und da kam keine Fehlermeldung. Aber egal, jetzt funktioniert es.
Gruß,
Jogi
Zitat von: Jogi am 20 Dezember 2017, 19:44:36
Und "ja" manchmal gebe ich auch Dinge direkt in die CFG ein.
Kann ich nur von abraten, aber musst du selbst wissen.
Freut mich, dass es nun geht. Woran lag es genau?