Hilfe mein DOIF startet morgens nicht - aber tagsüber ohne Probleme

Begonnen von visionsurfer, 23 November 2016, 07:53:45

Vorheriges Thema - Nächstes Thema

visionsurfer

Guten Morgen,

ich habe ein DOIF was jeden morgen 5 Minuten nach der Weckzeit mein Licht anfangen soll zu dimmen. Zusätzlich habe ich noch ein anderes DOIF, welches auch 5 Minuten nach Weckzeit meine morgen Routine startet. Da es mit dem KNX Dimmer etwas schwierig ist, hab ich es also in ein extra DOIF gebaut.

Mein DOIF für die morgen Routine ist hier zu sehen:

https://forum.fhem.de/index.php/topic,61091.0.html

Nun hab ich das Problem das morgens mein Licht nicht beginnt zu dimmen. Gestern Abend hab ich den ganzen Ablauf mehrfach getestet. Also Wecker einfach innerhalb der nächsten 10 Minuten gestellt und zack ist alles gestartet. Meine morgen Routine und auch mein Licht. Wie gewünscht. Danach 30 Minuten gewartet und noch mal von vorne. Lief alles perfekt. Immer 5 Minuten nach dem klingeln vom Wecker ist auch mein Licht angegangen.

Dann also gestern Abend vor Mitternacht den Wecker gestellt für heute 6.45 Uhr. Um 6.45 klingelte der Wecker auch und um 6.50 hätte mein Licht angehen müssen. Tat es aber nicht.
Warum funktioniert es, wenn ich es abends teste und dann am nächsten Tag nicht mehr ?

Ich hab auch ein do always drin. Ich dachte erst ich hätte das vergessen.

Hier mein List vom Licht DOIF:


Internals:
   DEF        ([([TabletNexus:nextAlarmTime2]+[00:05])]) (set schlafzimmer_LED_ww value ({([schlafzimmer_LED_ww:getG3:d]+5)}) g1) DOELSEIF ([schlafzimmer_LED_ww:getG3:d] >= 65)
   NAME       wakeup_neu
   NR         413
   NTFY_ORDER 50-wakeup_neu
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2016-11-22 22:18:11   Device          schlafzimmer_LED_ww
     2016-11-22 22:18:09   cmd             2
     2016-11-22 22:18:09   cmd_event       schlafzimmer_LED_ww
     2016-11-22 22:18:09   cmd_nr          2
     2016-11-22 22:18:11   e_schlafzimmer_LED_ww_getG3 0 %
     2016-11-22 22:18:09   state           cmd_2
     2016-11-23 07:45:01   timer_1_c1      24.11.2016 06:50:00
     2016-11-22 21:55:18   wait_timer      no timer
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
     1          ReadingValDoIf($hash,'schlafzimmer_LED_ww','getG3','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) >= 65
   Days:
   Devices:
     1           schlafzimmer_LED_ww
     all         schlafzimmer_LED_ww
   Do:
     0:
       0          set schlafzimmer_LED_ww value ({([schlafzimmer_LED_ww:getG3:d]+5)}) g1
     1:
       0
     2:
   Helper:
     event      getG3: 0 %,last-sender: 1/1/68,0 %
     globalinit 1
     last_timer 1
     sleepdevice timer_1
     sleepsubtimer 0
     sleeptimer -1
     timerdev   schlafzimmer_LED_ww
     timerevent setG2: off,off
     triggerDev schlafzimmer_LED_ww
     timerevents:
       setG2: off
       off
     timereventsState:
       setG2: off
       state: off
     triggerEvents:
       getG3: 0 %
       last-sender: 1/1/68
       0 %
     triggerEventsState:
       getG3: 0 %
       last-sender: 1/1/68
       state: 0 %
   Internals:
   Interval:
   Itimer:
     all         TabletNexus
   Localtime:
     0          1479966600
   Readings:
     1           schlafzimmer_LED_ww:getG3
     all         schlafzimmer_LED_ww:getG3
   Realtime:
     0          06:50:00
   Regexp:
     0:
     1:
     All:
   State:
   Time:
     0          ([TabletNexus:nextAlarmTime2]+[00:05])
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Trigger:
   Triggertime:
     1479966600:
       localtime  1479966600
       Hash:
Attributes:
   do         always
   repeatcmd  10
   repeatsame 100
   room       Schlafzimmer


Ich komme nicht drauf, an was das liegen kann. Ich habe ja noch ein 3. DOIF, welches in meinem Tablet ein neues Reading erzeugt. Dieses neue Reading lasse ich dann von der morgen Routine auswerten und halt vom Licht DOIF. Wenn ich jetzt wieder den Wecker in 5 Minuten stellen würde, würde alles wunderbar laufen.

Ich kapier das nicht ?

Kann mir da bitte jemand helfen ?

Grüße,
Visionsurfer

Brockmann

Da kann nur etwas mit der Weckzeit nicht stimmen. An den Readings sieht man, dass das DOIF seit gestern abend 22:18 im jetzigen Zustand ist. Also vermutlich seit Deinen Tests.
Also hast Du NextAlarmTime2 hinterher nicht auf 6:45 Uhr gestellt. Denn darauf hätte das DOIF heute in jedem Fall reagiert, da es keine weiteren Bedingungen gibt.

Dass Du in dem einen DOIF das Reading nextAlarmTime verwendest und in diesem NextAlarmTime2 ist aber so beabsichtigt? Dann musst Du die Weckzeit also immer an zwei Stellen einstellen.

Für morgen früh gibt es jedenfalls einen passenden Timer (6:50 Uhr), da sollte es also laufen, wenn Du bis dahin nichts mehr anfasst...  ;)

Morgennebel

Ist auf Deinem Nexus WiFi immer aktiv oder nachts im Standby?

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

l2r

wieso steht dein Timer auf dem 24.11? heute haben wir den 23.11...

Für diese ganzen Wecker und Statusgeschichten kann ich nur immer wieder auf die ROOMMATE/RESIDENTS-Familie hinweisen. Da sind viele Automatationen schon drin bzw. es gibt fertige Templates die man erweitern kann.

Bei deinem Beipsiel müsste man hat für den Wakeuptimer das NextRun setzen, nachdem du an deinem Handy den Wecker gestellt hast. Aber das musst du ja jetzt auch ... Du hättest nur den Vorteil dass du die ganzen Aufwachszenarien nachher sehr flexibel erweitern kannst.

http://www.fhemwiki.de/wiki/Weckautomation

Ich setze bei mir bei den Residents zum Beispiel über ein DOIF den location-Status eines Roommates. Die Anwesenheut der entsprechenden Person und der Residents. Für jeden Roomate kann man mehrere Wecker definieren. Zu jedem Wecker gibt es dann morgenroutinen. Zusätzlich gibts dann auch noch morgenroutinen für die Residents, die dann starten wenn der erste aufsteht.
Will man sich über Stati per Nachricht informieren lassen fügt sich der MSG-Befehlt auch wunderbar ein. Und das sind bis jetzt nur ein paar wenige Vorteile die einem das Leben leichter machen können. Man muss sich halt nur einmal reinarbeiten.

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

visionsurfer

Moin,

ich verwende ich beiden DOIF´s das NextAlarmTime2.

So sieht mein DOIF für die Morgenroutine aus:


([([TabletNexus:nextAlarmTime2]+[00:05])])
      (
      set keymatic_wohnung unlock,
      IF ([wetterstation_regen] eq "nein")
         (set TabletNexus ttsMsg Guten Morgen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet nicht. Hier kommt dein Lieblingsradiosender.)
      ELSE
        (set TabletNexus ttsMsg Guten Morgen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet. Hier kommt dein Lieblingsradiosender.),
        set TabletNexus sendIntent org.smblott.intentradio.PLAY url http://mp3ad.radioprimavera.c.nmdn.net/fs_radioprimavera/livestream.mp3 name RadioPrimavera
      )


Und so sieht das DOIF aus, welches dafür sorgt das im Tablet ein 2. Reading gemacht wird, weil das normale Reading ja auch mal ein "off" hat, wenn der Wecker ausgestellt ist.


define Test DOIF ([TabletNexus:nextAlarmTime] ne "off") (set <deindoifwasdiezeitauswertet> enable) (setreading TabletNexus nextAlarmTime2 [TabletNexus:nextAlarmTime]) DOELSE (set <deindoifwasdiezeitauswertet> disable)
attr Test do always
attr Test wait 0,1:0


Wenn ich jetzt den Wecker am Tablet stelle, z.B. auf 10:50 heute, dann läuft das alles wunderbar. Morgenroutine geht durch und Licht startet auch.

Interessant ist ja auch, das bei meinem Licht gleich eine Weckzeit für morgen um 6:50 drin steht. Ich denke das kommt daher, das ja im Reading nextAlarmTime2 noch die Weckzeit drin steht. Erst wenn ich ja eine neue Weckzeit im Reading nextAlarmTime setze, wird das andere Reading überschrieben.

Aber warum funktioniert das wenn ich jetzt aktuell für heute eine neue Weckzeit setze und warum funktioniert das dann morgen nicht?

Gestern Abend haben 2 Tests hintereinander, wunderbar geklappt. Ich kapier das nicht.

Grüße,
Visionsurfer

l2r

was für ein Datum steht in dem Timer-Reading wenn du einen Wecker für morgen früh stellst?

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

visionsurfer


l2r

jo, oder besser mach einfach mal ein List von beiden DOIFs, nachdem du den Wecker auf morgen gestellst hast, dann haben wir sofort alles.
Wissen ist Macht.
Ich weiß nix.
Macht nix.

visionsurfer

ok. Mach ich. Kann ich leider erst heute Abend wieder zu Hause. Hab noch kein Zugriff vom Büro auf FHEM :) Wobei mal probieren, vielleicht komme ich doch drauf. Dann melde ich mich gleich noch mal.
Ich sitze zwar dann nicht vor dem Tablet, aber ich denke durch ein SET nextAlarmTime kann ich das ja auch aus der Ferne setzen lassen, oder ?

Grüße,
Visionsurfer

l2r

Wissen ist Macht.
Ich weiß nix.
Macht nix.

visionsurfer

Hi,

so sehr gut. Ich hab mal schnell einen externen Zugriff eingerichtet.
Es sind ja insgesamt 3 DOIFS mit meiner "morgen Routine" beschäftigt.

1. DOIF, welches das 2. Reading im Tablet setzt
2. DOIF, welches das Licht dimmt
3. DOIF, welches die restlichen Sachen abarbeitet.

Im Reading vom Tablet steht aktuell folgendes:


nextAlarmTime off 2016-11-23 06:45:04
nextAlarmTime2 06:45 2016-11-23 06:45:02


Hier erst mal für alle 3 DOIFs die Lists BEVOR ich die Weckzeit eintrage:

List wecker_uebergabe:

Internals:
   CFGFN
   DEF        ([TabletNexus:nextAlarmTime] ne "off") (set morgen_routine enable) (setreading TabletNexus nextAlarmTime2 [TabletNexus:nextAlarmTime]) DOELSE (set morgen_routine disable)
   NAME       wecker_uebergabe
   NR         3048
   NTFY_ORDER 50-wecker_uebergabe
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2016-11-23 12:08:31   Device          TabletNexus
     2016-11-23 11:46:21   cmd             2
     2016-11-23 11:46:21   cmd_event       TabletNexus
     2016-11-23 11:46:21   cmd_nr          2
     2016-11-23 12:08:31   e_TabletNexus_nextAlarmTime off
     2016-11-23 11:46:21   state           cmd_2
     2016-11-23 11:46:31   wait_timer      23.11.2016 12:19:51 cmd_2 TabletNexus
   Condition:
     0          ReadingValDoIf($hash,'TabletNexus','nextAlarmTime','','',AttrVal($hash->{NAME},'notexist',undef)) ne "off"
   Devices:
     0           TabletNexus
     all         TabletNexus
   Do:
     0:
       0          set morgen_routine enable
       1          setreading TabletNexus nextAlarmTime2 [TabletNexus:nextAlarmTime]
     1:
       0          set morgen_routine disable
   Helper:
     event      flowsetVersionAtDevice: 2.6.4,flow_SetCommands: aktiv,deviceState: online,checkActiveTask: 0,lastStatusRequestState: statusRequest_done
     globalinit 1
     last_timer 0
     sleepdevice TabletNexus
     sleepsubtimer 0
     sleeptimer 1
     timerdev   TabletNexus
     timerevent flowsetVersionAtDevice: 2.6.4,flow_SetCommands: aktiv,deviceState: online,checkActiveTask: 0,lastStatusRequestState: statusRequest_done
     triggerDev TabletNexus
     timerevents:
       flowsetVersionAtDevice: 2.6.4
       flow_SetCommands: aktiv
       deviceState: online
       checkActiveTask: 0
       lastStatusRequestState: statusRequest_done
     timereventsState:
       flowsetVersionAtDevice: 2.6.4
       flow_SetCommands: aktiv
       deviceState: online
       checkActiveTask: 0
       lastStatusRequestState: statusRequest_done
     triggerEvents:
       flowsetVersionAtDevice: 2.6.4
       flow_SetCommands: aktiv
       deviceState: online
       checkActiveTask: 0
       lastStatusRequestState: statusRequest_done
     triggerEventsState:
       flowsetVersionAtDevice: 2.6.4
       flow_SetCommands: aktiv
       deviceState: online
       checkActiveTask: 0
       lastStatusRequestState: statusRequest_done
   Internals:
   Itimer:
   Readings:
     0           TabletNexus:nextAlarmTime
     all         TabletNexus:nextAlarmTime
   Regexp:
     0:
     All:
   State:
   Trigger:
Attributes:
   do         always
   room       Schlafzimmer
   wait       0,1:2000


List wakeup_neu

Internals:
   DEF        ([([TabletNexus:nextAlarmTime2]+[00:05])]) (set schlafzimmer_LED_ww value ({([schlafzimmer_LED_ww:getG3:d]+5)}) g1) DOELSEIF ([schlafzimmer_LED_ww:getG3:d] >= 65)
   NAME       wakeup_neu
   NR         413
   NTFY_ORDER 50-wakeup_neu
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2016-11-22 22:18:11   Device          schlafzimmer_LED_ww
     2016-11-22 22:18:09   cmd             2
     2016-11-22 22:18:09   cmd_event       schlafzimmer_LED_ww
     2016-11-22 22:18:09   cmd_nr          2
     2016-11-22 22:18:11   e_schlafzimmer_LED_ww_getG3 0 %
     2016-11-22 22:18:09   state           cmd_2
     2016-11-23 12:09:32   timer_1_c1      24.11.2016 06:50:00
     2016-11-22 21:55:18   wait_timer      no timer
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
     1          ReadingValDoIf($hash,'schlafzimmer_LED_ww','getG3','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) >= 65
   Days:
   Devices:
     1           schlafzimmer_LED_ww
     all         schlafzimmer_LED_ww
   Do:
     0:
       0          set schlafzimmer_LED_ww value ({([schlafzimmer_LED_ww:getG3:d]+5)}) g1
     1:
       0
     2:
   Helper:
     event      getG3: 0 %,last-sender: 1/1/68,0 %
     globalinit 1
     last_timer 1
     sleepdevice timer_1
     sleepsubtimer 0
     sleeptimer -1
     timerdev   schlafzimmer_LED_ww
     timerevent setG2: off,off
     triggerDev schlafzimmer_LED_ww
     timerevents:
       setG2: off
       off
     timereventsState:
       setG2: off
       state: off
     triggerEvents:
       getG3: 0 %
       last-sender: 1/1/68
       0 %
     triggerEventsState:
       getG3: 0 %
       last-sender: 1/1/68
       state: 0 %
   Internals:
   Interval:
   Itimer:
     all         TabletNexus
   Localtime:
     0          1479966600
   Readings:
     1           schlafzimmer_LED_ww:getG3
     all         schlafzimmer_LED_ww:getG3
   Realtime:
     0          06:50:00
   Regexp:
     0:
     1:
     All:
   State:
   Time:
     0          ([TabletNexus:nextAlarmTime2]+[00:05])
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Trigger:
   Triggertime:
     1479966600:
       localtime  1479966600
       Hash:
Attributes:
   do         always
   repeatcmd  10
   repeatsame 100
   room       Schlafzimmer


List morgen_routine:

Internals:
   DEF        ([([TabletNexus:nextAlarmTime2]+[00:05])])
      (
      set keymatic_wohnung unlock,
      IF ([wetterstation_regen] eq "nein")
         (set TabletNexus ttsMsg Guten Morgen Ihr Schlafmützen. Zeit zum aufstehen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet nicht. Hier kommt dein Lieblingsradiosender.)
      ELSE
        (set TabletNexus ttsMsg Guten Morgen Ihr Schlafmützem. Zeit zum aufstehen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet. Hier kommt dein Lieblingsradiosender.),
        set TabletNexus sendIntent org.smblott.intentradio.PLAY url http://mp3ad.radioprimavera.c.nmdn.net/fs_radioprimavera/livestream.mp3 name RadioPrimavera
      )
(set TabletNexus sendIntent org.smblott.intentradio.STOP)
   NAME       morgen_routine
   NR         466
   NTFY_ORDER 50-morgen_routine
   STATE      disabled
   TYPE       DOIF
   Readings:
     2016-11-23 07:10:02   cmd             1.2
     2016-11-23 07:10:02   cmd_event       timer_1
     2016-11-23 07:10:02   cmd_nr          1
     2016-11-23 07:10:02   cmd_seqnr       2
     2016-11-23 11:46:21   last_cmd        disabled
     2016-11-23 11:46:21   mode            disabled
     2016-11-23 11:46:21   state           disabled
     2016-11-23 12:10:01   timer_1_c1      24.11.2016 06:50:00
     2016-11-23 07:10:02   wait_timer      no timer
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
   Days:
   Devices:
   Do:
     0:
       0                 set keymatic_wohnung unlock,       IF ([wetterstation_regen] eq "nein")          (set TabletNexus ttsMsg Guten Morgen Ihr Schlafmützen. Zeit zum aufstehen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet nicht. Hier kommt dein Lieblingsradiosender.)       ELSE         (set TabletNexus ttsMsg Guten Morgen Ihr Schlafmützem. Zeit zum aufstehen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet. Hier kommt dein Lieblingsradiosender.),         set TabletNexus sendIntent org.smblott.intentradio.PLAY url http://mp3ad.radioprimavera.c.nmdn.net/fs_radioprimavera/livestream.mp3 name RadioPrimavera
       1          set TabletNexus sendIntent org.smblott.intentradio.STOP
   Helper:
     event      timer_1
     globalinit 1
     last_timer 1
     sleepdevice timer_1
     sleepsubtimer -1
     sleeptimer -1
     timerdev
     timerevent timer_1
     timereventsState
     triggerDev
     triggerEventsState
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   Internals:
   Interval:
   Itimer:
     all         TabletNexus
   Localtime:
     0          1479966600
   Readings:
   Realtime:
     0          06:50:00
   Regexp:
   State:
   Time:
     0          ([TabletNexus:nextAlarmTime2]+[00:05])
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Triggertime:
     1479966600:
       localtime  1479966600
       Hash:
Attributes:
   do         always
   room       Schlafzimmer
   wait       0,1200


Nun stelle ich die Weckzeit mit dem Befehl "set TabletNexus nextAlarmTime 06:30" auf morgen früh.

Im Reading vom Tablet hat sich nun sofort folgendes verändert:


nextAlarmTime 06:30 2016-11-23 12:12:04
nextAlarmTime2 06:30 2016-11-23 12:12:08


Hier nun erneut die Lists der einzelnen DOIFs.

List wecker_uebergabe:

Internals:
   CFGFN
   DEF        ([TabletNexus:nextAlarmTime] ne "off") (set morgen_routine enable) (setreading TabletNexus nextAlarmTime2 [TabletNexus:nextAlarmTime]) DOELSE (set morgen_routine disable)
   NAME       wecker_uebergabe
   NR         3048
   NTFY_ORDER 50-wecker_uebergabe
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-11-23 12:14:01   Device          TabletNexus
     2016-11-23 12:14:02   cmd             1.2
     2016-11-23 12:14:02   cmd_event       TabletNexus
     2016-11-23 12:14:02   cmd_nr          1
     2016-11-23 12:14:02   cmd_seqnr       2
     2016-11-23 12:14:01   e_TabletNexus_nextAlarmTime 06:30
     2016-11-23 12:14:02   state           cmd_1
     2016-11-23 12:14:02   wait_timer      no timer
   Condition:
     0          ReadingValDoIf($hash,'TabletNexus','nextAlarmTime','','',AttrVal($hash->{NAME},'notexist',undef)) ne "off"
   Devices:
     0           TabletNexus
     all         TabletNexus
   Do:
     0:
       0          set morgen_routine enable
       1          setreading TabletNexus nextAlarmTime2 [TabletNexus:nextAlarmTime]
     1:
       0          set morgen_routine disable
   Helper:
     event      deviceState: online,flowsetVersionAtDevice: 2.6.4,flow_SetCommands: aktiv,lastStatusRequestState: statusRequest_done
     globalinit 1
     last_timer 0
     sleepdevice TabletNexus
     sleepsubtimer -1
     sleeptimer -1
     timerdev   TabletNexus
     timerevent deviceState: online,flowsetVersionAtDevice: 2.6.4,flow_SetCommands: aktiv,lastStatusRequestState: statusRequest_done
     triggerDev TabletNexus
     timerevents:
       deviceState: online
       flowsetVersionAtDevice: 2.6.4
       flow_SetCommands: aktiv
       lastStatusRequestState: statusRequest_done
     timereventsState:
       deviceState: online
       flowsetVersionAtDevice: 2.6.4
       flow_SetCommands: aktiv
       lastStatusRequestState: statusRequest_done
     triggerEvents:
       deviceState: online
       flowsetVersionAtDevice: 2.6.4
       flow_SetCommands: aktiv
       lastStatusRequestState: statusRequest_done
     triggerEventsState:
       deviceState: online
       flowsetVersionAtDevice: 2.6.4
       flow_SetCommands: aktiv
       lastStatusRequestState: statusRequest_done
   Internals:
   Itimer:
   Readings:
     0           TabletNexus:nextAlarmTime
     all         TabletNexus:nextAlarmTime
   Regexp:
     0:
     All:
   State:
   Trigger:
Attributes:
   do         always
   room       Schlafzimmer
   wait       0,1:2000


List wakeup_neu


Internals:
   DEF        ([([TabletNexus:nextAlarmTime2]+[00:05])]) (set schlafzimmer_LED_ww value ({([schlafzimmer_LED_ww:getG3:d]+5)}) g1) DOELSEIF ([schlafzimmer_LED_ww:getG3:d] >= 65)
   NAME       wakeup_neu
   NR         413
   NTFY_ORDER 50-wakeup_neu
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2016-11-22 22:18:11   Device          schlafzimmer_LED_ww
     2016-11-22 22:18:09   cmd             2
     2016-11-22 22:18:09   cmd_event       schlafzimmer_LED_ww
     2016-11-22 22:18:09   cmd_nr          2
     2016-11-22 22:18:11   e_schlafzimmer_LED_ww_getG3 0 %
     2016-11-22 22:18:09   state           cmd_2
     2016-11-23 12:14:32   timer_1_c1      24.11.2016 06:35:00
     2016-11-22 21:55:18   wait_timer      no timer
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
     1          ReadingValDoIf($hash,'schlafzimmer_LED_ww','getG3','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) >= 65
   Days:
   Devices:
     1           schlafzimmer_LED_ww
     all         schlafzimmer_LED_ww
   Do:
     0:
       0          set schlafzimmer_LED_ww value ({([schlafzimmer_LED_ww:getG3:d]+5)}) g1
     1:
       0
     2:
   Helper:
     event      getG3: 0 %,last-sender: 1/1/68,0 %
     globalinit 1
     last_timer 1
     sleepdevice timer_1
     sleepsubtimer 0
     sleeptimer -1
     timerdev   schlafzimmer_LED_ww
     timerevent setG2: off,off
     triggerDev schlafzimmer_LED_ww
     timerevents:
       setG2: off
       off
     timereventsState:
       setG2: off
       state: off
     triggerEvents:
       getG3: 0 %
       last-sender: 1/1/68
       0 %
     triggerEventsState:
       getG3: 0 %
       last-sender: 1/1/68
       state: 0 %
   Internals:
   Interval:
   Itimer:
     all         TabletNexus
   Localtime:
     0          1479965700
   Readings:
     1           schlafzimmer_LED_ww:getG3
     all         schlafzimmer_LED_ww:getG3
   Realtime:
     0          06:35:00
   Regexp:
     0:
     1:
     All:
   State:
   Time:
     0          ([TabletNexus:nextAlarmTime2]+[00:05])
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Trigger:
   Triggertime:
     1479965700:
       localtime  1479965700
       Hash:
Attributes:
   do         always
   repeatcmd  10
   repeatsame 100
   room       Schlafzimmer


List morgen_routine:

Internals:
   DEF        ([([TabletNexus:nextAlarmTime2]+[00:05])])
      (
      set keymatic_wohnung unlock,
      IF ([wetterstation_regen] eq "nein")
         (set TabletNexus ttsMsg Guten Morgen Ihr Schlafmützen. Zeit zum aufstehen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet nicht. Hier kommt dein Lieblingsradiosender.)
      ELSE
        (set TabletNexus ttsMsg Guten Morgen Ihr Schlafmützem. Zeit zum aufstehen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet. Hier kommt dein Lieblingsradiosender.),
        set TabletNexus sendIntent org.smblott.intentradio.PLAY url http://mp3ad.radioprimavera.c.nmdn.net/fs_radioprimavera/livestream.mp3 name RadioPrimavera
      )
(set TabletNexus sendIntent org.smblott.intentradio.STOP)
   NAME       morgen_routine
   NR         466
   NTFY_ORDER 50-morgen_routine
   STATE      disabled
   TYPE       DOIF
   Readings:
     2016-11-23 07:10:02   cmd             1.2
     2016-11-23 07:10:02   cmd_event       timer_1
     2016-11-23 07:10:02   cmd_nr          1
     2016-11-23 07:10:02   cmd_seqnr       2
     2016-11-23 12:15:01   mode            enable
     2016-11-23 12:12:38   state           disabled
     2016-11-23 12:15:02   timer_1_c1      24.11.2016 06:35:00
     2016-11-23 07:10:02   wait_timer      no timer
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
   Days:
   Devices:
   Do:
     0:
       0                 set keymatic_wohnung unlock,       IF ([wetterstation_regen] eq "nein")          (set TabletNexus ttsMsg Guten Morgen Ihr Schlafmützen. Zeit zum aufstehen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet nicht. Hier kommt dein Lieblingsradiosender.)       ELSE         (set TabletNexus ttsMsg Guten Morgen Ihr Schlafmützem. Zeit zum aufstehen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet. Hier kommt dein Lieblingsradiosender.),         set TabletNexus sendIntent org.smblott.intentradio.PLAY url http://mp3ad.radioprimavera.c.nmdn.net/fs_radioprimavera/livestream.mp3 name RadioPrimavera
       1          set TabletNexus sendIntent org.smblott.intentradio.STOP
   Helper:
     event      timer_1
     globalinit 1
     last_timer 1
     sleepdevice timer_1
     sleepsubtimer -1
     sleeptimer -1
     timerdev
     timerevent timer_1
     timereventsState
     triggerDev
     triggerEventsState
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   Internals:
   Interval:
   Itimer:
     all         TabletNexus
   Localtime:
     0          1479965700
   Readings:
   Realtime:
     0          06:35:00
   Regexp:
   State:
   Time:
     0          ([TabletNexus:nextAlarmTime2]+[00:05])
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Triggertime:
     1479965700:
       localtime  1479965700
       Hash:
Attributes:
   do         always
   room       Schlafzimmer
   wait       0,1200


So das ist nun also der ultimative vorher / nachher Vergleich.

Ich hoffe das man da irgendwo das Problem erkennen kann. Ich weiß das man es auch anders lösen kann, wie hier schon empfohlen wurde. Ich würde es nur auch gerne so hinbekommen. Muss doch auch funktionieren, bzw. hat gestern Abend 2 mal hintereinander wunderbar funktioniert.

Grüße,
Visionsurfer








l2r

also sieht erstmal alles gut aus.

wakeup_neu sollte in jedem Fall laufen, da es ja nicht disabled wird es sein denn der Abfragewert ist größer 65.

Die einzige Erklärung für das Verhalten dass es beim Testen funktionierte und heute morgen nicht ist, dass du beim Testen einen Wecker gestellt hast, der weniger als 2000 (Wait von wecker_uebergabe) Sekunden in der Zukunft lag. Es hat irgendwas getriggert, wecker_uebergabe ist in den DOELSE-Fall gegangen, hat aber noch 2000 Sekunden gewartet bis morgen_routine disabled wurde. Da der Wecker vorher aktiv wurde, ist das DOIF morgen_routine durchgelaufen.

Heute Nacht ist dann der Wait-Timer abgelaufen und hat morgen_routine disabled.

Oder:
Das DOIF ist noch nicht schnell genug initialisiert, nachdem du es beim setzen des Weckers enabled hast und kann somit den Trigger auf [TabletNexus:nextAlarmTime2] nicht auswerten. Oder du hast bei TabletNexus ein event-on-change-Reading drin was nextAlarmTime2 nicht berücksichtigt.

die letzen beiden Vermuntungen sind eher geraten und spiegeln eig. nicht den Zustand wieder den du mit den Lists nach dem Stellen des Weckers hast.

Vllt. war ja ein Hinweis dabei der dich weiter bringt.

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

visionsurfer

Hi,

hmmm. Danke für deine Mühe.

Leider bringt mich das noch nicht weiter.

Weil, mein DOIF morgen_routine lief heute früh ohne Probleme durch. Alles hat geklappt, wie es sollte. Nur das Licht ist nicht angegangen, welches ja im wakeup_neu behandelt wird.

wakeup_neu greift ja auf das Reading nextAlarmTime2 zu. Dieses Reading wird sofort gesetzt, wenn ich eine neue Alarmzeit setze. Klingelt der Wecker, dann wird das Reading nextAlarmTime auf OFF gesetzt, aber das nextAlarmTime2 bleibt ja bestehen. Also die Zeit bleibt dort drin. Solange bis ich eine neue Weckzeit stelle.

Somit hat mein wakeup_neu eigentlich überhaupt nichts mit den anderen zu tun. Jetzt aktuell steht ja beim Licht wakeup_neu auch ein Timer_1_c1 Reading von 6:35 drin. Aber ich habe das Gefühl er springt einfach nicht auf cmd_1 ? Weil aktuell steht er ja in cmd_2.

Puh ich bin leider wirklich ratlos.

Grüße,
Visionsurfer

l2r

ok,

eine alternative für das Übergabe DOIF hätte ich nocht. nextAlarmTimer2 kannst du auch über ein Userreading setzten:

attr TabletNexus userReadings nextAlarmTime2 {my $nextAlarmTime=ReadingsVal($name, "nextAlarmTime", "0"); if( ReadingsVal("$name","nextAlarmTime","off") eq 'off') { "00:00"} else { "$nextAlarmTime"}}

im DOIF muss dann die Bedingung erweitert werden:

([([TabletNexus:nextAlarmTime2]+[00:05])] and [TabletNexus:nextAlarmTime] ne "off" )
Dann musst du das DOIF nicht disablen. Ist aber Geschmackssache.

Dann ist mir noch eine Idee gekommen:

hat das DOIF wakeup_neu gestern abend auch in cmd_2 gestanden?

Weil es könnte folgendes Passiert sein:
Du hast gestest, aber nicht gewartet bis ([schlafzimmer_LED_ww:getG3:d] >= 65)  erreicht wurde bzw. wakeup_neu hat seine 100 ausführungen gemacht, ist aber nicht über 65 gekommen. Somit ist das DOIF im Status cmd_1 geblieben, wollte heute morgen zur passenden Zeit auslösen, durfte aber nicht mehr, da cmd_1 schon 100 Mal ausgeführt wurde.

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

Per

Wäre es sinnvoll, das Datum aus der Weckzeit herauszunehmen? Wenn es beim heutigen Test (Datum identisch) geht, beim Stellen des Weckers für morgen (Datum + 1) nicht, würde ich dort mal suchen.