[Gelöst] Ich finde den Fehler in meinen doif nicht

Begonnen von Jogi, 20 Dezember 2017, 14:04:41

Vorheriges Thema - Nächstes Thema

Jogi

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

kumue

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...

Amenophis86

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?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Jogi

#3
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



Amenophis86

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?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Jogi

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

Amenophis86

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?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...