DOIF: merkwürdiges Verhalten mit sunset()

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

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: JoeALLb am 11 Januar 2016, 21:51:31
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 ;-)

error wird aber auch schon mal gesetzt, obwohl das Kommando funktioniert hat, nämlich dann, wenn eine Funktion einen Wert ungleich "" liefert.

Du kannst aber mit Attribut state dir den error selbst in den Status holen. Am besten in Kombination mit dem neuen Attribut notexist in dieser Version http://forum.fhem.de/index.php/topic,46327.msg381054.html#msg381054.

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

MrRight

Hallo Damian,

nachdem es zwei Tage funktioniert hat, waren heute die Lampen wieder aus....

Das DOIF schaltet mit cmd_2 die Lampen aus, obwohl m. E. die erste Bedingung erfüllt ist. Ich kann mir das Verhalten nicht erklären.

Hier ein aktuelles list auf das DOIF:


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_2
   TYPE       DOIF
   CHANGETIME:
   Readings:
     2016-01-12 16:41:10   cmd_event       timer_3
     2016-01-12 16:41:10   cmd_nr          2
     2016-01-12 16:41:10   state           cmd_2
     2016-01-12 16:41:10   timer_1_c1      13.01.2016 16:42:40|01234
     2016-01-11 23:00:00   timer_2_c1      12.01.2016 23:00:00|01234
     2016-01-12 16:41:10   timer_3_c1      13.01.2016 16:42:40|56
     2016-01-11 23:59:00   timer_4_c1      12.01.2016 23:59:00|56
     2016-01-12 06:00:03   timer_5_c1      13.01.2016 06:00:00|8
     2016-01-12 08:38:54   timer_6_c1      13.01.2016 08:38:10|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:42:40
     1          23:00:00
     2          16:42:40
     3          23:59:00
     4          06:00:00
     5          08:38:10
   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:
   group      Licht
   room       EG_WoZi


und der passende Logeintrag:


2016.01.12 16:41:10 3: EG_WoZi_Stehlampen white slot 4 set on 0
2016.01.12 16:41:10 3: EG_WoZi_Stehlampen set HSV 0, 0, 100 with ramp: 0, flags:
2016.01.12 16:41:10 3: EG_WoZi_Stehlampen white slot 4 set off 0
2016.01.12 16:41:10 3: EG_WoZi_Stehlampen RGBW2 slot 4 dim 0 0
2016.01.12 16:41:10 3: EG_WoZi_Stehlampen set HSV 0, 0, 0 with ramp: 0, flags:


Es wird offensichtlich 2 mal in der gleichen Sekunde geschaltet. Ein anderes DOIF oder notify gibt es nicht.

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 12 Januar 2016, 19:26:58
Hallo Damian,

nachdem es zwei Tage funktioniert hat, waren heute die Lampen wieder aus....

Das DOIF schaltet mit cmd_2 die Lampen aus, obwohl m. E. die erste Bedingung erfüllt ist. Ich kann mir das Verhalten nicht erklären.

Es wird offensichtlich 2 mal in der gleichen Sekunde geschaltet. Ein anderes DOIF oder notify gibt es nicht.

Gruß,
Carsten


Ich denke, ich weiß was das Problem ist:


Bei dir hat zuerst um 16:41:10 Timer  timer_1_c1 zugeschlagen das führte zur Ausführung von cmd1, der Timer wird daraufhin auf 16:42:40 gesetzt. Danach in der gleichen Sekunde hat timer_1_c3 zugeschlagen jetzt ist das erste Intervall noch nicht wahr, weil es ja jetzt bei 16:42:40 anfängt und das zweite Intervall ist ja aufgrund von 56 ja sowieso heute nicht wahr, daher kommt cmd_2.

Zukünftig werde ich die Programmlogik des Moduls ändern, sodass soetwas nicht mehr passieren kann. Solange musst du dir so behelfen:


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


Gruß

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

MrRight

Hallo Damian,

danke fürs anschauen! Kein Stress mit der Anpassung, ich kann mit dem Workaround leben.

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