DOIF: merkwürdiges Verhalten mit sunset()

Begonnen von MrRight, 08 Januar 2016, 18:14:45

Vorheriges Thema - Nächstes Thema

MrRight

Hallo,

ich schalte Abend zu Sonnenuntergang eine Lampe mit DOIF an und um 23:00h (in der Woche) bzw. um 23:59 (am Wochenende) wieder aus. Zusätzlich schalte ich in der Woche morgens die Lampe um 6:00 bis zum Sonnenaufgang an.


Internals:
   DEF        ([{sunset("REAL",0,"16:00","21:30")} - 23:00|01234]) (set EG_WoZi_Stehlampen on)
DOELSEIF ([{sunset("REAL",0,"16:00","21:30")} - 23:59|56]) (set EG_WoZi_Stehlampen on)
DOELSEIF ([06:00 - ({sunrise("REAL",0,"06:10","9:00")})|8]) (set EG_WoZi_Stehlampen on)
DOELSE (set EG_WoZi_Stehlampen off)

   NAME       Automatiklicht_EG_WoZi
   NR         1616
   NTFY_ORDER 50-Automatiklicht_EG_WoZi
   STATE      cmd_4
   TYPE       DOIF
   CHANGETIME:
   Readings:
     2016-01-08 16:35:29   cmd_event       timer_1
     2016-01-08 16:35:29   cmd_nr          4
     2016-01-08 16:35:29   state           cmd_4
     2016-01-08 16:35:29   timer_1_c1      09.01.2016 16:36:51|01234
     2016-01-07 23:38:17   timer_2_c1      08.01.2016 23:00:00|01234
     2016-01-08 16:35:29   timer_3_c2      09.01.2016 16:36:51|56
     2016-01-07 23:59:02   timer_4_c2      08.01.2016 23:59:00|56
     2016-01-08 06:00:00   timer_5_c3      09.01.2016 06:00:00|8
     2016-01-08 08:41:19   timer_6_c3      09.01.2016 08:40:47|8
   Condition:
     0          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"01234")
     1          DOIF_time($hash,$hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"56")
     2          DOIF_time($hash,$hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"8")
   Days:
     0          01234
     1          01234
     2          56
     3          56
     4          8
     5          8
   Devices:
   Do:
     0:
       0          set EG_WoZi_Stehlampen on
     1:
       0          set EG_WoZi_Stehlampen on
     2:
       0          set EG_WoZi_Stehlampen on
     3:
       0          set EG_WoZi_Stehlampen off
   Helper:
     globalinit 1
     last_timer 6
     sleeptimer -1
   Internals:
   Itimer:
   Readings:
   Realtime:
     0          16:36:51
     1          23:00:00
     2          16:36:51
     3          23:59:00
     4          06:00:00
     5          08:40:47
   State:
   Time:
     0          {sunset("REAL",0,"16:00","21:30")}
     1          23:00:00
     2          {sunset("REAL",0,"16:00","21:30")}
     3          23:59:00
     4          06:00:00
     5          ({sunrise("REAL",0,"06:10","9:00")})
   Timecond:
     0          0
     1          0
     2          1
     3          1
     4          2
     5          2
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
     2           4  5
Attributes:
   group      Licht
   room       EG_WoZi


Während die morgendliche Schaltung problemlos funktioniert, klappt es abends nicht. Zum Einschaltzeitpunkt wird die Lampe eingeschaltet und in der gleichen Sekunde wieder ausgeschaltet.


2016.01.08 16:35:29 3: EG_WoZi_Stehlampen white slot 4 set on 0
2016.01.08 16:35:29 3: EG_WoZi_Stehlampen set HSV 0, 0, 100 with ramp: 0, flags:
2016.01.08 16:35:29 3: EG_WoZi_Stehlampen white slot 4 set off 0
2016.01.08 16:35:29 3: EG_WoZi_Stehlampen RGBW2 slot 4 dim 0 0
2016.01.08 16:35:29 3: EG_WoZi_Stehlampen set HSV 0, 0, 0 with ramp: 0, flags:


Scheinbar wird das erste command ausgeführt und in der gleichen Sekunde auch cmd_4. Auch wenn ich weiss, dass DOIF nur ein command ausführt, kann ich mir das Verhalten nicht anders erklären.

Vielleicht hat ja jemand von Euch eine Idee!? Danke!

Gruß,
Carsten
FHEM 5.7 auf Cubietruck mit MySQL
CUL + HMLAN + HUE Bridge + Firmata over Ethernet + Ardunino + 1wire + MiLight + FTUI + Homekit

Damian

Zitat von: MrRight am 08 Januar 2016, 18:14:45
Hallo,

ich schalte Abend zu Sonnenuntergang eine Lampe mit DOIF an und um 23:00h (in der Woche) bzw. um 23:59 (am Wochenende) wieder aus. Zusätzlich schalte ich in der Woche morgens die Lampe um 6:00 bis zum Sonnenaufgang an.


Internals:
   DEF        ([{sunset("REAL",0,"16:00","21:30")} - 23:00|01234]) (set EG_WoZi_Stehlampen on)
DOELSEIF ([{sunset("REAL",0,"16:00","21:30")} - 23:59|56]) (set EG_WoZi_Stehlampen on)
DOELSEIF ([06:00 - ({sunrise("REAL",0,"06:10","9:00")})|8]) (set EG_WoZi_Stehlampen on)
DOELSE (set EG_WoZi_Stehlampen off)

   


Scheinbar wird das erste command ausgeführt und in der gleichen Sekunde auch cmd_4. Auch wenn ich weiss, dass DOIF nur ein command ausführt, kann ich mir das Verhalten nicht anders erklären.

Vielleicht hat ja jemand von Euch eine Idee!? Danke!

Gruß,
Carsten

Ja, in der aktuellen Version triggert jeder Timer das Modul unabhängig von den anderen gesetzten Timer, auch dann wenn die Timer die gleiche Zeit haben. Dabei ist die Reihenfolge der Timer mit der gleichen Zeit nicht gewährleistet. Das führt zu diesem Phänomen. Zukünftig werden Timer mit gleicher Zeit nur einmal triggern.

Du kannst das Problem aber so lösen:

([{sunset("REAL",0,"16:00","21:30")} - 23:00|01234]
   or [{sunset("REAL",0,"16:00","21:30")} - 23:59|56]
   or [06:00 - {sunrise("REAL",0,"06:10","9:00")}|8])
(set EG_WoZi_Stehlampen on)
DOELSE
(set EG_WoZi_Stehlampen off)


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

MrRight

wow! Danke für die wahnsinnig schnelle Antwort!

Gruß,
Carsten
FHEM 5.7 auf Cubietruck mit MySQL
CUL + HMLAN + HUE Bridge + Firmata over Ethernet + Ardunino + 1wire + MiLight + FTUI + Homekit

MrRight

Hallo Damian,

da habe ich mich wohl zu früh gefreut.  :-[

Heute habe ich mit Deiner vorgeschlagenen Lösung wieder das gleiche Problem:


2016.01.09 16:36:51 3: EG_WoZi_Stehlampen white slot 4 set on 0
2016.01.09 16:36:51 3: EG_WoZi_Stehlampen set HSV 0, 0, 100 with ramp: 0, flags:
2016.01.09 16:36:51 3: EG_WoZi_Stehlampen white slot 4 set off 0
2016.01.09 16:36:51 3: EG_WoZi_Stehlampen RGBW2 slot 4 dim 0 0


Hast Du noch eine andere Idee?

Gruß,
Carsten
FHEM 5.7 auf Cubietruck mit MySQL
CUL + HMLAN + HUE Bridge + Firmata over Ethernet + Ardunino + 1wire + MiLight + FTUI + Homekit

Damian

Zitat von: MrRight am 09 Januar 2016, 18:14:29
Hallo Damian,

da habe ich mich wohl zu früh gefreut.  :-[

Heute habe ich mit Deiner vorgeschlagenen Lösung wieder das gleiche Problem:


2016.01.09 16:36:51 3: EG_WoZi_Stehlampen white slot 4 set on 0
2016.01.09 16:36:51 3: EG_WoZi_Stehlampen set HSV 0, 0, 100 with ramp: 0, flags:
2016.01.09 16:36:51 3: EG_WoZi_Stehlampen white slot 4 set off 0
2016.01.09 16:36:51 3: EG_WoZi_Stehlampen RGBW2 slot 4 dim 0 0


Hast Du noch eine andere Idee?

Gruß,
Carsten

Poste mal list von deinem Modul.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

MrRight

sehr gerne:


Internals:
   CFGFN
   DEF        ([{sunset("REAL",0,"16:00","21:30")} - 23:00|01234]
   or [{sunset("REAL",0,"16:00","21:30")} - 23:59|56]
   or [06:00 - {sunrise("REAL",0,"06:10","9:00")}|8])
(set EG_WoZi_Stehlampen on)
DOELSE
(set EG_WoZi_Stehlampen off)
   NAME       EG_Wohnen_Stehlampenautomatik_DOIF
   NR         11559
   NTFY_ORDER 50-EG_Wohnen_Stehlampenautomatik_DOIF
   STATE      cmd_1
   TYPE       DOIF
   CHANGETIME:
   Readings:
     2016-01-09 23:00:00   cmd_event       timer_2
     2016-01-09 23:00:00   cmd_nr          1
     2016-01-09 23:00:00   state           cmd_1
     2016-01-09 16:36:51   timer_1_c1      10.01.2016 16:38:15|01234
     2016-01-09 23:00:00   timer_2_c1      10.01.2016 23:00:00|01234
     2016-01-09 16:36:51   timer_3_c1      10.01.2016 16:38:15|56
     2016-01-08 23:59:02   timer_4_c1      09.01.2016 23:59:00|56
     2016-01-09 06:00:00   timer_5_c1      10.01.2016 06:00:00|8
     2016-01-09 08:40:47   timer_6_c1      10.01.2016 08:40:13|8
   Condition:
     0          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"01234")   or DOIF_time($hash,$hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"56")   or DOIF_time($hash,$hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"8")
   Days:
     0          01234
     1          01234
     2          56
     3          56
     4          8
     5          8
   Devices:
   Do:
     0:
       0          set EG_WoZi_Stehlampen on
     1:
       0          set EG_WoZi_Stehlampen off
   Helper:
     globalinit 1
     last_timer 6
     sleeptimer -1
   Internals:
   Itimer:
   Readings:
   Realtime:
     0          16:38:15
     1          23:00:00
     2          16:38:15
     3          23:59:00
     4          06:00:00
     5          08:40:13
   State:
   Time:
     0          {sunset("REAL",0,"16:00","21:30")}
     1          23:00:00
     2          {sunset("REAL",0,"16:00","21:30")}
     3          23:59:00
     4          06:00:00
     5          {sunrise("REAL",0,"06:10","9:00")}
   Timecond:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timerfunc:
   Timers:
     0           0  1  2  3  4  5
Attributes:
   cmdpause   300
   group      Licht
   room       EG_WoZi


DOIF Version


98_DOIF.pm          10337 2016-01-02 22:38:32Z damian-s


Gruß,
Carsten
FHEM 5.7 auf Cubietruck mit MySQL
CUL + HMLAN + HUE Bridge + Firmata over Ethernet + Ardunino + 1wire + MiLight + FTUI + Homekit

Damian

Zitat von: MrRight am 09 Januar 2016, 23:57:20
sehr gerne:


Internals:
   CFGFN
   DEF        ([{sunset("REAL",0,"16:00","21:30")} - 23:00|01234]
   or [{sunset("REAL",0,"16:00","21:30")} - 23:59|56]
   or [06:00 - {sunrise("REAL",0,"06:10","9:00")}|8])
(set EG_WoZi_Stehlampen on)
DOELSE
(set EG_WoZi_Stehlampen off)
   NAME       EG_Wohnen_Stehlampenautomatik_DOIF
   NR         11559
   NTFY_ORDER 50-EG_Wohnen_Stehlampenautomatik_DOIF
   STATE      cmd_1
   TYPE       DOIF
   CHANGETIME:
   Readings:
     2016-01-09 23:00:00   cmd_event       timer_2
     2016-01-09 23:00:00   cmd_nr          1
     2016-01-09 23:00:00   state           cmd_1
     2016-01-09 16:36:51   timer_1_c1      10.01.2016 16:38:15|01234
     2016-01-09 23:00:00   timer_2_c1      10.01.2016 23:00:00|01234
     2016-01-09 16:36:51   timer_3_c1      10.01.2016 16:38:15|56
     2016-01-08 23:59:02   timer_4_c1      09.01.2016 23:59:00|56
     2016-01-09 06:00:00   timer_5_c1      10.01.2016 06:00:00|8
     2016-01-09 08:40:47   timer_6_c1      10.01.2016 08:40:13|8
   Condition:
     0          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"01234")   or DOIF_time($hash,$hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"56")   or DOIF_time($hash,$hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"8")
   Days:
     0          01234
     1          01234
     2          56
     3          56
     4          8
     5          8
   Devices:
   Do:
     0:
       0          set EG_WoZi_Stehlampen on
     1:
       0          set EG_WoZi_Stehlampen off
   Helper:
     globalinit 1
     last_timer 6
     sleeptimer -1
   Internals:
   Itimer:
   Readings:
   Realtime:
     0          16:38:15
     1          23:00:00
     2          16:38:15
     3          23:59:00
     4          06:00:00
     5          08:40:13
   State:
   Time:
     0          {sunset("REAL",0,"16:00","21:30")}
     1          23:00:00
     2          {sunset("REAL",0,"16:00","21:30")}
     3          23:59:00
     4          06:00:00
     5          {sunrise("REAL",0,"06:10","9:00")}
   Timecond:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timerfunc:
   Timers:
     0           0  1  2  3  4  5
Attributes:
   cmdpause   300
   group      Licht
   room       EG_WoZi


DOIF Version


98_DOIF.pm          10337 2016-01-02 22:38:32Z damian-s


Gruß,
Carsten

Anhand der Definition kann ich keinen Fehler erkennen. Leider ist der Zustand des Moduls kurz nach dem Sonnenuntergang um 16:36:51 nicht sichtbar, da bereits der Timer um 23:00 gelaufen ist. Schaue bitte heute kurz nach 16:38:15 nach, ob sich das Modul im Zustand cmd_2 befindet. Wir wollen nicht hoffen, dass da noch ein anderes Modul definiert ist, welches um diese Zeit schaltet.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

JoeALLb

Ich hänge mich hier mal mit dran,  hatte gestern das selbe Phänomen und suche nach einer Lösung.... Könnte cmdpause als Workaround helfen?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Damian

Zitat von: JoeALLb am 10 Januar 2016, 08:45:43
Ich hänge mich hier mal mit dran,  hatte gestern das selbe Phänomen und suche nach einer Lösung.... Könnte cmdpause als Workaround helfen?

Ich habe es gerade bei mir nachgebaut mit:

([({sunset("REAL",0,"16:00","21:30")}-[06:42]) - 23:00|01234] or [({sunset("REAL",0,"16:00","21:30")}-[06:42]) - 23:59|56] ) (set bla on) DOELSE (set bla off)


mit [06:42] habe ich die Sonnenuntergangszeit zum Testen auf jetzt verschoben. Bei mir wird sauber nur der cmd_1-Fall ausgeführt.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

JoeALLb

@Damian Hatte gerade im Test einen Ausdruckfehler im Doif, darum hat mein aktueller Test nicht funktioniert.
perl error in condition: ReadingValDoIf...

Dazu eine Anregung: Wäre es nicht hilfreich, wenn der state des doifs von "initialized" auf "error" geht, wenn solch ein Auswertefehler kommt?

sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Damian

Zitat von: JoeALLb am 10 Januar 2016, 10:31:10
@Damian Hatte gerade im Test einen Ausdruckfehler im Doif, darum hat mein aktueller Test nicht funktioniert.
perl error in condition: ReadingValDoIf...

Dazu eine Anregung: Wäre es nicht hilfreich, wenn der state des doifs von "initialized" auf "error" geht, wenn solch ein Auswertefehler kommt?

sG
Joe

Na ja, ich hoffe du machst die Änderungen direkt über die Weboberfläche (DEF-Editor), dann wird doch die Meldung unmittelbar ausgegeben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

JoeALLb

Zitat von: Damian am 10 Januar 2016, 10:40:13
Na ja, ich hoffe du machst die Änderungen direkt über die Weboberfläche (DEF-Editor), dann wird doch die Meldung unmittelbar ausgegeben.

Natürlich!
Ich werte im DOELSEIF eine Perlfunktion aus, die einzeln funktioniert. ich hatte noch keine Zeit, es mir genauer anzusehen, mir ist nur aufgefallen, dass
in der Detailansicht des DOIFS der Perl-Fehler angezeigt wird. Ich (für mich) hätte früher entdeckt, dass dieses DOIF gar nicht mehr funktioniert,
wenn dieser Fehler im State gestanden hätte... daher mein Feature-Wunsch hier ;-)
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Damian

Zitat von: JoeALLb am 10 Januar 2016, 13:51:34
Natürlich!
Ich werte im DOELSEIF eine Perlfunktion aus, die einzeln funktioniert. ich hatte noch keine Zeit, es mir genauer anzusehen, mir ist nur aufgefallen, dass
in der Detailansicht des DOIFS der Perl-Fehler angezeigt wird. Ich (für mich) hätte früher entdeckt, dass dieses DOIF gar nicht mehr funktioniert,
wenn dieser Fehler im State gestanden hätte... daher mein Feature-Wunsch hier ;-)

Ein solches Feature hätte aber auch einen Nebeneffekt. Es gäbe einen weiteren Zustand mit dem die heutigen DOIF-User nicht rechnen. Und wenn sie den Zustand des Moduls woanders abfragen, dann müssten sie neuerdings mit einem weiteren Zustand rechnen und ihre Definitionen anpassen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

JoeALLb

Der Zustand kommt ja nur,  wenn ein Fehler vorliegt. Und zwar genau dann,  wenn doif nicht mehr funktioniert, da ex eben einen Fehler gefunden hat und stoppt, also eh nicht mehr funktioniert. 
Wie auch immer,  dass waren nur meine 2 cent zu dem Thema,  ich bin wieder am testen ;-)
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

MrRight

Hallo Damian,

jetzt hat es zwei Tage geklappt. Ich beobachte es weiter.

Nochmals vielen Dank für Deine Hilfe ... und auch für das geniale Modul!

Gruß,
Carsten
FHEM 5.7 auf Cubietruck mit MySQL
CUL + HMLAN + HUE Bridge + Firmata over Ethernet + Ardunino + 1wire + MiLight + FTUI + Homekit