Zwei identische DOIF: Eines geht, dsa andere nicht ?!?

Begonnen von M_I_B, 30 Mai 2016, 21:43:55

Vorheriges Thema - Nächstes Thema

M_I_B

... erstmal Dank für Deine Antwort ... Hakt trotzdem noch bei mir im Hirn  ::)

DOIF ([SunUPr] - [SunDNr]) (set A43 on) DOELSE (set A43 off)
Das heißt ja übersetzt "WENN zwischen Sonnenauf- bis Untergang DANN A43 AN, SONST AUS"

DOIF ([SunUPr]) (set A43 on-till [SunDNr])
Mein Gedankengang ist aber "WENN Sonnenaufgang DANN A43 AN bis Sonnenuntergang erreicht ist".

Ich dachte, die Zeit aus einem Dummy ist eine indirekte Zeitangabe (http://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben)? Diese SunBlaBlub benutze ich ja noch an anderer Stelle und da geht es nicht ohne die umschließende Klammer?!? In SunDNr u.s.w. stehen natürlich konkrete Zeiten drin, die aus sun[set|rise]_abs('[REAL|CIVIL|NATIC|ASTRONOMIC]') um Mitternacht gesetzt werden. Die stehen bei einem List auch korrekt in den beiden Timern (s.u.)

Mitgeloggt habe ich diesen Fall noch nicht; mache ich mal gleich. Fehlermeldungen ansonsten aber keine im fhem.log. Auch das List zeigte keine Ungereimtheiten. Ich bin aber seit gestern Abend wieder auf die Version 3 umgestiegen (die heute morgen auch nicht reagiert hat). Dazu das List:
Internals:
   CFGFN      /opt/fhem/ablauf.cfg
   DEF        ([SunUPr] and [A43] eq "off") (set A43 on) DOELSEIF ([SunDNr] and [A43] eq "on") (set A43 off) DOELSE
   NAME       A43_A
   NR         949
   NTFY_ORDER 50-A43_A
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-06-11 00:00:00   Device          SunUPr
     2016-06-11 00:00:01   cmd             1
     2016-06-11 00:00:01   cmd_event       SunUPr
     2016-06-11 00:00:01   cmd_nr          1
     2016-06-11 00:00:00   e_SunUPr_STATE  05:03:51
     2016-06-11 00:00:01   state           cmd_1
     2016-06-10 05:04:09   timer_1_c1      11.06.2016 05:04:09
     2016-06-10 00:02:21   timer_2_c2      10.06.2016 21:36:51
   Condition:
     0          InternalDoIf($hash,'SunUPr','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) and InternalDoIf($hash,'A43','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "off"
     1          InternalDoIf($hash,'SunDNr','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) and InternalDoIf($hash,'A43','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on"
   Devices:
     0           SunUPr A43
     1           SunDNr A43
     all         SunUPr A43 SunDNr
   Do:
     0:
       0          set A43 on
     1:
       0          set A43 off
     2:
       0
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Internals:
     0           SunUPr:STATE A43:STATE
     1           SunDNr:STATE A43:STATE
     all         SunUPr:STATE A43:STATE SunDNr:STATE
   Itimer:
   Regexp:
     All:
   State:
Attributes:

Da tauchen nun bei Condition Fehler auf, wobei es egal ist, ob ich mit dem AND den Zustand der FB (A43) abfrage oder direkt den Zustand des Aktors (IT1SW2) und/oder ob ich beim SET die FB oder den Aktor direkt schalten will.

M_I_B

... da fange ich mir gleich ne Motte  >:( >:( >:(

# Beleuchtung WZ, EZ, KU#
define EsIstDunkel DOIF ([[SunDNr]-[SunDNc]] and [brightness.av:state] < 145 and [HM2DI1_1:state] eq "off") (set IT1SW(1|20|3|6|8) on,set HM2DI1_1 25 0 60) \
DOELSEIF ([[SunDNr]-[SunDNc]] and [brightness.av:state] < 145 and [HM2DI1_1:state] ne "off") (set IT1SW(1|20|3|6|8) on) \
DOELSEIF ([23:00]) (set IT1SW(20|3) off,set HM2DI1_1 0 0 3000) \
DOELSEIF ([01:30]) (set IT1SW(1|6|8) off,set HM2DI1_(1|2) off) \
DOELSEIF ([brightness.av:state] > 150) (set IT1SW(1|20|3|6|8) off,set HM2DI1_1 off) \
DOELSE

Ist ja schon bekannt die Nummer (ganz am Anfang und Basis dieses Threads). Hat seit Beseitigung der Fehler bis gestern auch funktioniert. Offensichtlich ist es aber so (wenn ich das Listing korrekt interpretiere), das die Nummer dann nicht funktioniert, wenn die Helligkeit von 145 bereits unterschritten wurde, wärend die Zeit in SunDNr überschritten wird und sich im Bereich SunDNr-SunDNc bewegt. Genau diesen Fall haben wir heute Abend hier vor Ort offensichtlich das erste mal seit dem... Wenn ich aber ein ReloadConfig mache, kommt die Schaltung nachträglich in die Hufe und schaltet wie gewohnt; da ist doch was faul am Code?!?
Ich kann mir nur nicht erklären, was und warum :o

Hier mal das Listing:
Internals:
   CFGFN      /opt/fhem/ablauf.cfg
   DEF        ([[SunDNr]-[SunDNc]] and [brightness.av:state] < 145 and [HM2DI1_1:state] eq "off") (set IT1SW(1|20|3|6|8) on,set HM2DI1_1 25 0 60)
DOELSEIF ([[SunDNr]-[SunDNc]] and [brightness.av:state] < 145 and [HM2DI1_1:state] ne "off") (set IT1SW(1|20|3|6|8) on)
DOELSEIF ([23:00]) (set IT1SW(20|3) off,set HM2DI1_1 0 0 3000)
DOELSEIF ([01:30]) (set IT1SW(1|6|8) off,set HM2DI1_(1|2) off)
DOELSEIF ([brightness.av:state] > 150) (set IT1SW(1|20|3|6|8) off,set HM2DI1_1 off)
DOELSE
   NAME       EsIstDunkel
   NR         879
   NTFY_ORDER 50-EsIstDunkel
   STATE      cmd_6
   TYPE       DOIF
   Readings:
     2016-06-13 21:31:27   Device          brightness.av
     2016-06-13 20:58:41   cmd             6
     2016-06-13 20:58:41   cmd_event       HM2DI1_1
     2016-06-13 20:58:41   cmd_nr          6
     2016-06-13 21:31:10   e_HM2DI1_1_state off
     2016-06-13 21:31:27   e_brightness.av_state 128.5
     2016-06-13 20:58:41   state           cmd_6
     2016-06-13 21:30:59   timer_1_c1      13.06.2016 21:38:44
     2016-05-20 10:01:37   timer_1_c2      20.05.2016 23:00:00
     2016-06-13 21:30:59   timer_2_c1      13.06.2016 22:36:33
     2016-05-20 10:01:37   timer_2_c3      21.05.2016 01:30:00
     2016-06-13 21:30:59   timer_3_c2      13.06.2016 21:38:44
     2016-06-13 21:30:59   timer_4_c2      13.06.2016 22:36:33
     2016-06-01 01:30:02   timer_4_c3      02.06.2016 01:30:00
     2016-06-13 21:30:59   timer_5_c3      13.06.2016 23:00:00
     2016-06-13 21:30:59   timer_6_c4      14.06.2016 01:30:00
   Condition:
     0          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and ReadingValDoIf($hash,'brightness.av','state','','',AttrVal($hash->{NAME},'notexist',undef)) < 145 and ReadingValDoIf($hash,'HM2DI1_1','state','','',AttrVal($hash->{NAME},'notexist',undef)) eq "off"
     1          DOIF_time($hash,$hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"") and ReadingValDoIf($hash,'brightness.av','state','','',AttrVal($hash->{NAME},'notexist',undef)) < 145 and ReadingValDoIf($hash,'HM2DI1_1','state','','',AttrVal($hash->{NAME},'notexist',undef)) ne "off"
     2          DOIF_time_once($hash,$hash->{timer}{4},$wday,"")
     3          DOIF_time_once($hash,$hash->{timer}{5},$wday,"")
     4          ReadingValDoIf($hash,'brightness.av','state','','',AttrVal($hash->{NAME},'notexist',undef)) > 150
   Days:
   Devices:
     0           brightness.av HM2DI1_1
     1           brightness.av HM2DI1_1
     4           brightness.av
     all         brightness.av HM2DI1_1
   Do:
     0:
       0          set IT1SW(1|20|3|6|8) on,set HM2DI1_1 25 0 60
     1:
       0          set IT1SW(1|20|3|6|8) on
     2:
       0          set IT1SW(20|3) off,set HM2DI1_1 0 0 3000
     3:
       0          set IT1SW(1|6|8) off,set HM2DI1_(1|2) off
     4:
       0          set IT1SW(1|20|3|6|8) off,set HM2DI1_1 off
     5:
       0
   Helper:
     event      128.5
     globalinit 1
     last_timer 6
     sleeptimer -1
     timerdev   brightness.av
     timerevent 128.5
     triggerDev brightness.av
     timerevents:
       128.5
     timereventsState:
       state: 128.5
     triggerEvents:
       128.5
     triggerEventsState:
       state: 128.5
   Internals:
   Interval:
     0          -1
     1          0
     2          -1
     3          2
   Itimer:
     all         SunDNr SunDNc
   Localtime:
     0          1465846724
     1          1465850193
     2          1465846724
     3          1465850193
     4          1465851600
     5          1465860600
   Readings:
     0           brightness.av:state HM2DI1_1:state
     1           brightness.av:state HM2DI1_1:state
     4           brightness.av:state
     all         brightness.av:state HM2DI1_1:state
   Realtime:
     0          21:38:44
     1          22:36:33
     2          21:38:44
     3          22:36:33
     4          23:00:00
     5          01:30:00
   Regexp:
     0:
     1:
     2:
     3:
     4:
     All:
   State:
   Time:
     0          [SunDNr]
     1          [SunDNc]
     2          [SunDNr]
     3          [SunDNc]
     4          23:00:00
     5          01:30:00
   Timecond:
     0          0
     1          0
     2          1
     3          1
     4          2
     5          3
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timers:
     0           0  1
     1           2  3
     2           4
     3           5
   Trigger:
   Triggertime:
     1465846724:
       localtime  1465846724
       Hash:
     1465850193:
       localtime  1465850193
       Hash:
     1465851600:
       localtime  1465851600
       Hash:
     1465860600:
       localtime  1465860600
       Hash:
Attributes: