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

Ich beiße mir hier an einer Sache echt die Zähne aus  >:(

# Beleuchtung WZ, EZ, KU#
define EsIstDunkel DOIF ([[SunDNr]-[SunDNc]] and [brightness.av:state] < 145) (set IT1SW(1|20|3|6|8) on,set HM2DI1_1 50 0 60) \
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)

# Beleuchtung, Lüfter #
define CynthiaZimmer1 DOIF ([[SunDNr]-[SunDNc]] and [brightness.av:state] < 145) (set IT1SW4 on) \
DOELSEIF ([06:40|8] and [NDS:state] eq "none") (set IT1SW4 on-for-timer 1800) \
DOELSEIF ([23:00|01234] and [NDS:tomorrow] eq "none") (set IT1SW4 off) \
DOELSEIF ([00:00|7]) (set IT1SW4 off)

EsIstDunkel funktioniert problemlos. Sobald innerhalb der Zeitspanne zwischen sunset_abs('REAL') und sunset_abs('CIVIL') (SunDNr und SunDNc) die Außenhelligkeit unter 145 sinkt, wird der Befehlsteil ausgeführt.
Bei CynthiaZimmer1 aber, in dem exakt die gleiche Bedingung steht, wird der Befehlsteil nie ausgeführt...
Ich habe zum Testen auch gestern mal alle DOELSEIF weg genommmen und nur die DOIF- Zeilen stehen lassen. Das hat aber auch nichts verändert: Erster Block funktioniert, zweiter Block nicht  :-\ :-\ :-\

Das ist doch nicht normal, oder?


automatisierer

das ist in der Tat seltsam...
was haste denn so für attribute bei den DOIF's...
sonst mach doch mal ein list von den DOIF's

M_I_B

#2
... öhem *KopfKratz* Was meinst Du mit Attributen?
List kannst Du aber haben.
Was auffällt ist "error: Wrong timespec ???: either HH:MM:SS or {perlcode}". Woher das kommt, hab ich keine Ahnung. Aber da es bei beiden identisch ist, kann es ja nicht die Ursache sein, oder?
EDIT sagt: Is schon OK. Ich hatte heute die Dummy's umgestellt und der hat die neuen Werte noch nicht geholt. Daher steht da Quatsch drin ... Ich habe jetzt mal Mitternacht abgewartet und noch mal neu gelistet...


EsIstDunkel:
Internals:
   CFGFN      /opt/fhem/ablauf.cfg
   DEF        ([[SunDNr]-[SunDNc]] and [brightness.av:state] < 145) (set IT1SW(1|20|3|6|8) on,set HM2DI1_1 50 0 60)
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)
   NAME       EsIstDunkel
   NR         888
   NTFY_ORDER 50-EsIstDunkel
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-05-31 00:09:06   Device          brightness.av
     2016-05-30 23:04:24   cmd             1
     2016-05-30 23:04:24   cmd_event       brightness.av
     2016-05-30 23:04:24   cmd_nr          1
     2016-05-31 00:09:06   e_brightness.av_state 12
     2016-05-30 23:04:24   state           cmd_1
     2016-05-31 00:10:00   timer_1_c1      31.05.2016 21:27:41
     2016-05-20 10:01:37   timer_1_c2      20.05.2016 23:00:00
     2016-05-31 00:10:00   timer_2_c1      31.05.2016 22:22:57
     2016-05-20 10:01:37   timer_2_c3      21.05.2016 01:30:00
     2016-05-31 00:09:03   timer_3_c2      31.05.2016 23:00:00
     2016-05-31 00:09:03   timer_4_c3      31.05.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
     1          DOIF_time_once($hash,$hash->{timer}{2},$wday,"")
     2          DOIF_time_once($hash,$hash->{timer}{3},$wday,"")
     3          ReadingValDoIf($hash,'brightness.av','state','','',AttrVal($hash->{NAME},'notexist',undef)) > 150
   Days:
   Devices:
     0           brightness.av
     3           brightness.av
     all         brightness.av
   Do:
     0:
       0          set IT1SW(1|20|3|6|8) on,set HM2DI1_1 50 0 60
     1:
       0          set IT1SW(20|3) off,set HM2DI1_1 0 0 3000
     2:
       0          set IT1SW(1|6|8) off,set HM2DI1_(1|2) off
     3:
       0          set IT1SW(1|20|3|6|8) off,set HM2DI1_1 off
   Helper:
     event      12
     globalinit 1
     last_timer 4
     sleeptimer -1
     timerdev   brightness.av
     timerevent 12
     triggerDev brightness.av
     timerevents:
       12
     timereventsState:
       state: 12
     triggerEvents:
       12
     triggerEventsState:
       state: 12
   Internals:
   Interval:
     0          -1
     1          0
   Itimer:
     all         SunDNr SunDNc
   Localtime:
     0          1464722861
     1          1464726177
     2          1464728400
     3          1464651000
   Readings:
     0           brightness.av:state
     3           brightness.av:state
     all         brightness.av:state
   Realtime:
     0          21:27:41
     1          22:22:57
     2          23:00:00
     3          01:30:00
   Regexp:
     0:
     All:
   State:
   Time:
     0          [SunDNr]
     1          [SunDNc]
     2          23:00:00
     3          01:30:00
   Timecond:
     0          0
     1          0
     2          1
     3          2
   Timer:
     0          0
     1          0
     2          0
     3          0
   Timers:
     0           0  1
     1           2
     2           3
   Trigger:
   Triggertime:
     1464651000:
       localtime  1464651000
       Hash:
     1464722861:
       localtime  1464722861
       Hash:
     1464726177:
       localtime  1464726177
       Hash:
     1464728400:
       localtime  1464728400
       Hash:
Attributes:


CynthiaZimmer1:
Internals:
   CFGFN      /opt/fhem/ablauf.cfg
   DEF        ([[SunDNr]-[SunDNc]] and [brightness.av:state] < 145) (set IT1SW4 on)
DOELSEIF ([06:40|8] and [NDS:state] eq "none") (set IT1SW4 on-for-timer 1800)
DOELSEIF ([23:00|01234] and [NDS:tomorrow] eq "none") (set IT1SW4 off)
DOELSEIF ([00:00|7]) (set IT1SW4 off)
   NAME       CynthiaZimmer1
   NR         891
   NTFY_ORDER 50-CynthiaZimmer1
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-05-31 00:10:21   Device          brightness.av
     2016-05-31 00:00:07   cmd             1
     2016-05-31 00:00:07   cmd_event       brightness.av
     2016-05-31 00:00:07   cmd_nr          1
     2016-05-31 00:09:03   e_NDS_state     Schulfrei Prüfungen
     2016-05-19 00:00:02   e_NDS_today     0
     2016-05-31 00:09:03   e_NDS_tomorrow  none
     2016-05-31 00:10:21   e_brightness.av_state 12
     2016-05-31 00:00:07   state           cmd_1
     2016-05-31 00:10:00   timer_1_c1      31.05.2016 21:27:41
     2016-05-20 10:01:37   timer_1_c2      21.05.2016 06:40:00|8
     2016-05-31 00:10:00   timer_2_c1      31.05.2016 22:22:57
     2016-05-18 23:00:00   timer_2_c2      19.05.2016 23:00:00|01234
     2016-05-20 10:01:37   timer_2_c3      20.05.2016 23:00:00|01234
     2016-05-31 00:09:03   timer_3_c2      31.05.2016 06:40:00|8
     2016-05-19 06:40:00   timer_3_c3      20.05.2016 06:40:00|8
     2016-05-20 10:01:37   timer_3_c4      21.05.2016 00:00:00|7
     2016-05-31 00:09:03   timer_4_c3      31.05.2016 23:00:00|01234
     2016-05-18 22:00:00   timer_4_c4      19.05.2016 16:00:00
     2016-05-31 00:09:03   timer_5_c4      01.06.2016 00:00:00|7
   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
     1          DOIF_time_once($hash,$hash->{timer}{2},$wday,"8") and ReadingValDoIf($hash,'NDS','state','','',AttrVal($hash->{NAME},'notexist',undef)) eq "none"
     2          DOIF_time_once($hash,$hash->{timer}{3},$wday,"01234") and ReadingValDoIf($hash,'NDS','tomorrow','','',AttrVal($hash->{NAME},'notexist',undef)) eq "none"
     3          DOIF_time_once($hash,$hash->{timer}{4},$wday,"7")
   Days:
     2          8
     3          01234
     4          7
   Devices:
     0           brightness.av
     1           NDS
     2           NDS
     all         brightness.av NDS
   Do:
     0:
       0          set IT1SW4 on
     1:
       0          set IT1SW4 on-for-timer 1800
     2:
       0          set IT1SW4 off
     3:
       0          set IT1SW4 off
     4:
   Helper:
     event      12
     globalinit 1
     last_timer 5
     sleeptimer -1
     timerdev   brightness.av
     timerevent 12
     triggerDev brightness.av
     timerevents:
       12
     timereventsState:
       state: 12
     triggerEvents:
       12
     triggerEventsState:
       state: 12
   Internals:
   Interval:
     0          -1
     1          0
   Itimer:
     all         SunDNr SunDNc
   Localtime:
     0          1464722861
     1          1464726177
     2          1464669600
     3          1464728400
     4          1464732000
   Readings:
     0           brightness.av:state
     1           NDS:state
     2           NDS:tomorrow
     all         brightness.av:state NDS:state NDS:tomorrow
   Realtime:
     0          21:27:41
     1          22:22:57
     2          06:40:00
     3          23:00:00
     4          00:00:00
   Regexp:
     0:
     1:
     2:
     3:
     All:
   State:
   Time:
     0          [SunDNr]
     1          [SunDNc]
     2          06:40:00
     3          23:00:00
     4          00:00:00
   Timecond:
     0          0
     1          0
     2          1
     3          2
     4          3
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timers:
     0           0  1
     1           2
     2           3
     3           4
   Trigger:
   Triggertime:
     1464669600:
       localtime  1464669600
       Hash:
     1464722861:
       localtime  1464722861
       Hash:
     1464726177:
       localtime  1464726177
       Hash:
     1464728400:
       localtime  1464728400
       Hash:
     1464732000:
       localtime  1464732000
       Hash:
Attributes:

Ellert

Das 2. DOIF hat doch geschaltet

Zitat2016-05-31 00:00:07   cmd             1

Wenn IT1SW4 nicht geschaltet hat könnte es an der Funkverbindung liegen. Hast Du in dem Gerät schon mal das Attribut ITRepetition ausprobiert?

automatisierer

#4
attribute hast du auch keine gesetzt - mal angenommen, dass bei dem zweiten DOIF die DOELSE Fälle nicht wahr werden, schaltet der nur ein mal auf CMD1 und dann erst wieder wenn ein ander DOELSEIF Fall wahr geworden ist - wenn das nicht so soll, dann muss da ein 'attr ... do always' rein.

EDIT:

Das meine ich mit attribute:

Spezifische Attribute

    Verzögerungen attr <name> wait <timer_1_1>,<timer_1_2>,...:<timer_2_1>,<timer_2_2>,...:...
        Zeit in Sekunden als direkte Angabe oder Berechnung, ein Doppelpunkt trennt die Timer der Bedingungsweige, ein Komma die Timer der Befehlssequenzen eines Bedingungszweiges.
    Verzögerung von Timern attr <name> timerWithWait
        erweitert wait auf Zeitangaben
    Befehlswiederholung zulassen attr <name> do always
        wiederholt den Ausführungsteil, wenn die selbe Bedingung wiederholt wahr wird.
    Zurücksetzen des Waittimers bei Wiederholung attr <name> do resetwait
        setzt den Waittimer zurück, wenn die selbe Bedingung wiederholt wahr wird.
    Befehle wiederholen attr <name> repeatcmd <timer Bedingungszweig 1>:<timer Bedingungszweig 2>:...
        Zeit in Sekunden als direkte Angabe oder Berechnung, nach der Befehle wiederholt werden.
    Pause für Wiederholung attr <name> cmdpause <Pause cmd_1>:<Pause cmd_2>:...
        Zeit in Sekunden als direkte Angabe oder Berechnung, blockiert die Befehlsausführung während der Pause.
    Begrenzung von Wiederholungen attr <name> repeatsame <maximale Anzahl von cmd_1>:<maximale Anzahl von cmd_2>:...
        Anzahl als direkte Angabe oder Berechnung, begrenzt die maximale Anzahl unmittelbar folgender Befehlsausführungen.
    Warten auf Wiederholung attr <name> waitsame <Wartezeit cmd_1>:<Wartezeit cmd_2>:...
        Wartezeit in Sekunden als direkte Angabe oder Berechnung, für ein unmittelbar wiederholtes Zutreffen einer Bedingung.
    Löschen des Waittimers attr <name> waitdel <timer_1_1>,<timer_1_2>,...:<timer_2_1>,<timer_2_2>,...:...
        Zeit in Sekunden als direkte Angabe oder Berechnung, ein laufender Timer wird gelöscht und die Befehle nicht ausgeführt, falls eine Bedingung vor Ablauf des Timers wiederholt wahr wird.
    Auswertung von Readings auf passende Events beschränken attr <name> checkReadingEvent <0|ungleich Null>
        ungleich Null aktiviert, 0 deaktiviert
    Eindeutige Statuserkennung attr <name> addStateEvent <0|ungleich Null>
        fügt einem Gerätestatus-Event "state:" hinzu. ungleich Null aktiviert, 0 deaktiviert, siehe auch addStateEvent
    Selbsttriggerung attr <name> selftrigger <wait|all>
        lässt die Triggerung des Gerätes durch sich selbst zu. wait zugelassen für verzögerte Befehle, all zugelassen auch für nicht durch wait verzögerte Befehle; es ist nur eine Rekusion möglich
    Event beim Setzen eines Timers attr <name> timerevent <0|ungleich Null>
        erzeugt beim Setzen eines Timers ein Event. ungleich Null aktiviert, 0 deaktiviert
    Gerätestatus ersetzen attr <name> cmdState <Ersatz cmd_1_1>,...,<Ersatz cmd_1>|<Ersatz cmd_2_1>,...,<Ersatz cmd_2>|...
        ersetzt die Standartwerte des Gerätestatus als direkte Angabe oder Berechnung, die Ersatzstati von Befehlssequenzen werden durch Kommata, die von Befehlszweigen durch Pipe Zeichen getrennt.
    dynamischer Status attr <name> state <dynamischer Inhalt>
        Zum Erstellen von <dynamischer Inhalt> können die für Befehle verfügbaren Operanden verwendet werden.
    Ersatzwert für nicht existierende Readings oder Stati attr <name> notexist "<Ersatzwert>"

    Status Initialisierung nach Neustart attr <name> intialize <Status nach Neustart>

    Gerät vollständig deaktivieren attr <name> disable <0|1>
        1 deaktiviert das Modul vollständig, 0 aktiviert es.


wenn du kein 'do always' setzt, dann wird ein DOIF Zweig nicht wiederholt, auch wenn die Bedingungen wiederholt wahr werden.


M_I_B

Zitat von: Ellert am 31 Mai 2016, 03:19:40... könnte es an der Funkverbindung liegen. ... Attribut ITRepetition ausprobiert?
Fehler in der Funkstrecke kann ich ausschließen, da ja auch das Symbol in FHEM im Status OFF verblieben ist und manuelle Schaltungen ausnahmslos ankommen. ITRep. steht bei mir auf 18 ...

Zitat von: automatisierer am 31 Mai 2016, 07:31:15... mal angenommen, dass bei dem zweiten DOIF die DOELSE Fälle nicht wahr werden, schaltet der nur ein mal auf CMD1 und dann erst wieder wenn ein ander DOELSEIF Fall wahr geworden ist - wenn das nicht so soll, dann muss da ein 'attr ... do always' rein.
Doch, das soll so, u.a. auch deswegen, damit man manuell umsteuern kann. Mit do always würde ja eine manuelle Umsteuerung sogleich zunichte gemacht...

Zitat von: automatisierer am 31 Mai 2016, 07:31:15Das meine ich mit attribute:
... jo ... peinlich, peinlich ... ich schäme mich ::) ::) ::) Hab ich gestern Abend irgendwie nicht mehr gerafft ;)

Ok... Ich habe gerade mal die Zeiten aus den SunDN- Dummys von heute manuell eingetragen. Das lasse ich mal in Ruhe durchlaufen. Falls das Problem weiterhin besteht, werde ich mal einen Zeitsatz um +2min. versetzen und dann noch mal in Ruhe durchlaufen lassen. Dauert also 2 Tage im Life- Betrieb. Ich werde berichten, ob sich dadurch was ändert... Ich hab da so eine dumpfe Ahnung ...

M_I_B

#6
... immer noch  >:( >:( >:(

Ich hatte ja die SunDNr und SunDNc durch die echten Werte ersetzt, was für heute 21:27:41 - 22:22:57 war.
Gerade habe ich im Logfile für die Helligkeit nachgeschaut. Nach der Startzeit um 21:27:52 der Eintrag 142 für die Helligkeit. Somit ist die DOIF- Bedingung erfüllt.

Ich schreibe die AKtionen in ein gemeinsames Logfile wie folgt:
define FileLog_CynthiaZimmer1 FileLog ./log/%Y-%m_CynthiaZimmer1.log CynthiaZimmer1
attr FileLog_CynthiaZimmer1 logtype text
attr FileLog_CynthiaZimmer1 room _Logdateien_

define FileLog_IT1SW4 FileLog ./log/%Y-%m_CynthiaZimmer1.log IT1SW4
attr FileLog_IT1SW4 logtype text
attr FileLog_IT1SW4 room _Logdateien_

In dem Logfile war nach der Erfüllung der Bedingung nichts zu finden. Da meine Tochter Licht in ihrem Zimmer wollte, habe ich dann um 21:42:26 manuell das Licht eingeschaltet. Und jetzt kommt's (das komplette Logfile):
2016-05-31_21:42:26 IT1SW4 on
2016-05-31_21:44:59 IT1SW4 off
2016-05-31_21:45:01 IT1SW4 on

Irgendwas oder irgendwer hat um 21:44:59 das Licht wieder ausgeschaltet, ich habe es um 21:45:01 nach Mecker der MiniZicke wieder eingeschaltet.

Also irgend etwas läuft hier vollkommen verquer. Die EsIstDunkel-DOIF hat wie bisher einwandfrei funktioniert... ich blicke es einfach nicht, wo hier das Problem liegt...

Hier noch mal das LIST, das ich selber mangels Kenntnisse nicht auswerten kann:
Internals:
   CFGFN      /opt/fhem/ablauf.cfg
   DEF        ([[SunDNr]-[SunDNc]] and [brightness.av:state] < 145) (set IT1SW4 on)
DOELSEIF ([06:40|8] and [NDS:state] eq "none") (set IT1SW4 on-for-timer 1800)
DOELSEIF ([23:00|01234] and [NDS:tomorrow] eq "none") (set IT1SW4 off)
DOELSEIF ([00:00|7]) (set IT1SW4 off)
   NAME       CynthiaZimmer1
   NR         885
   NTFY_ORDER 50-CynthiaZimmer1
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-05-31 22:05:59   Device          brightness.av
     2016-05-31 00:00:07   cmd             1
     2016-05-31 00:00:07   cmd_event       brightness.av
     2016-05-31 00:00:07   cmd_nr          1
     2016-05-31 11:36:39   e_NDS_state     Schulfrei Prüfungen
     2016-05-19 00:00:02   e_NDS_today     0
     2016-05-31 11:36:39   e_NDS_tomorrow  none
     2016-05-31 22:05:59   e_brightness.av_state 75.5
     2016-05-31 00:00:07   state           cmd_1
     2016-05-31 11:36:39   timer_1_c1      31.05.2016 21:27:41
     2016-05-20 10:01:37   timer_1_c2      21.05.2016 06:40:00|8
     2016-05-31 11:36:39   timer_2_c1      31.05.2016 22:22:57
     2016-05-18 23:00:00   timer_2_c2      19.05.2016 23:00:00|01234
     2016-05-20 10:01:37   timer_2_c3      20.05.2016 23:00:00|01234
     2016-05-31 11:36:39   timer_3_c2      01.06.2016 06:40:00|8
     2016-05-19 06:40:00   timer_3_c3      20.05.2016 06:40:00|8
     2016-05-20 10:01:37   timer_3_c4      21.05.2016 00:00:00|7
     2016-05-31 11:36:39   timer_4_c3      31.05.2016 23:00:00|01234
     2016-05-18 22:00:00   timer_4_c4      19.05.2016 16:00:00
     2016-05-31 11:36:39   timer_5_c4      01.06.2016 00:00:00|7
   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
     1          DOIF_time_once($hash,$hash->{timer}{2},$wday,"8") and ReadingValDoIf($hash,'NDS','state','','',AttrVal($hash->{NAME},'notexist',undef)) eq "none"
     2          DOIF_time_once($hash,$hash->{timer}{3},$wday,"01234") and ReadingValDoIf($hash,'NDS','tomorrow','','',AttrVal($hash->{NAME},'notexist',undef)) eq "none"
     3          DOIF_time_once($hash,$hash->{timer}{4},$wday,"7")
   Days:
     2          8
     3          01234
     4          7
   Devices:
     0           brightness.av
     1           NDS
     2           NDS
     all         brightness.av NDS
   Do:
     0:
       0          set IT1SW4 on
     1:
       0          set IT1SW4 on-for-timer 1800
     2:
       0          set IT1SW4 off
     3:
       0          set IT1SW4 off
     4:
   Helper:
     event      75.5
     globalinit 1
     last_timer 5
     sleeptimer -1
     timerdev   brightness.av
     timerevent 75.5
     triggerDev brightness.av
     timerevents:
       75.5
     timereventsState:
       state: 75.5
     triggerEvents:
       75.5
     triggerEventsState:
       state: 75.5
   Internals:
   Interval:
     0          -1
     1          0
   Itimer:
     all         SunDNr SunDNc
   Localtime:
     0          1464722861
     1          1464726177
     2          1464756000
     3          1464728400
     4          1464732000
   Readings:
     0           brightness.av:state
     1           NDS:state
     2           NDS:tomorrow
     all         brightness.av:state NDS:state NDS:tomorrow
   Realtime:
     0          21:27:41
     1          22:22:57
     2          06:40:00
     3          23:00:00
     4          00:00:00
   Regexp:
     0:
     1:
     2:
     3:
     All:
   State:
   Time:
     0          [SunDNr]
     1          [SunDNc]
     2          06:40:00
     3          23:00:00
     4          00:00:00
   Timecond:
     0          0
     1          0
     2          1
     3          2
     4          3
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timers:
     0           0  1
     1           2
     2           3
     3           4
   Trigger:
   Triggertime:
     1464726177:
       localtime  1464726177
       Hash:
     1464728400:
       localtime  1464728400
       Hash:
     1464732000:
       localtime  1464732000
       Hash:
     1464756000:
       localtime  1464756000
       Hash:
Attributes:


Nachtrag: Das Abschalten um 23:00 hat fehlerfrei funktioniert (das zweite DOELSEIF):
2016-05-31_21:45:01 IT1SW4 on
2016-05-31_23:00:00 IT1SW4 off
2016-05-31_23:00:00 CynthiaZimmer1 cmd_nr: 3
2016-05-31_23:00:00 CynthiaZimmer1 cmd: 3
2016-05-31_23:00:00 CynthiaZimmer1 cmd_event: timer_4
2016-05-31_23:00:00 CynthiaZimmer1 cmd_3

Stimmt hier vielleicht was mit "([[SunDNr]-[SunDNc]] and [brightness.av:state] < 145) ..." nicht, vielleicht bei der Klammerung am Anfang, was beim EsIstDunkel nichts ausmacht, dann aber hier? Oder "denkt" die zweite DOIF vielleicht ob der gleichen Bedingung, das sie das ja eben gerade schon getan hat und nun nicht noch mal tun soll? ... alles wilde Vermutungen, die mir gerade so durch die graue Masse gehen ...

automatisierer

was für einen Status hat das du denn jetzt aktuell?
immer noch CMD1?

M_I_B

#8
... nö ... Ich habe natürlich nicht explizit nachgesehen per List, aber im Logfile steht's ja auch.
Ich habe es mal beigefügt und dokumentiert, was bis heute Morgen hier aufgelaufen ist:
2016-05-31_21:42:26 IT1SW4 on #> Manuell
2016-05-31_21:44:59 IT1SW4 off #> Trigger unbekannt
2016-05-31_21:45:01 IT1SW4 on #> Manuell
2016-05-31_23:00:00 IT1SW4 off #> Automatik: korrekt
2016-05-31_23:00:00 CynthiaZimmer1 cmd_nr: 3
2016-05-31_23:00:00 CynthiaZimmer1 cmd: 3
2016-05-31_23:00:00 CynthiaZimmer1 cmd_event: timer_4
2016-05-31_23:00:00 CynthiaZimmer1 cmd_3
#> Neues Logfile / Monatswechsel <#
2016-06-01_00:00:01 IT1SW4 off
2016-06-01_00:00:02 CynthiaZimmer1 cmd_nr: 4
2016-06-01_00:00:02 CynthiaZimmer1 cmd: 4
2016-06-01_00:00:02 CynthiaZimmer1 cmd_event: timer_5
2016-06-01_00:00:02 CynthiaZimmer1 cmd_4
2016-06-01_06:40:00 IT1SW4 on #> Automatik: korrekt
2016-06-01_06:40:00 CynthiaZimmer1 cmd_nr: 2
2016-06-01_06:40:00 CynthiaZimmer1 cmd: 2
2016-06-01_06:40:00 CynthiaZimmer1 cmd_event: timer_3
2016-06-01_06:40:00 CynthiaZimmer1 cmd_2
2016-06-01_07:10:01 IT1SW4 off #> Automatik: korrekt
2016-06-01_10:20:59 CynthiaZimmer1 cmd_nr: 5
2016-06-01_10:20:59 CynthiaZimmer1 cmd: 5
2016-06-01_10:20:59 CynthiaZimmer1 cmd_event: NDS
2016-06-01_10:20:59 CynthiaZimmer1 cmd_5


automatisierer

ich hab mir grad das list von gestern nochmal angesehen.


2016-05-31 00:00:07   state           cmd_1
    2016-05-31 11:36:39   timer_1_c1      31.05.2016 21:27:41

demnach müsste das DOIF seit gesten morgen 00:00:07 auf CMD1 gestanden haben. Daher wurde das wegen dem fehlenden 'do always' dann auch abends nicht nochmal ausgeführt...

jetzt aktuell müsste das doif ja auf cmd4 stehen und daher sollte heute abend dann auch das cmd1 funktionieren.

ich habe auch bei einigen doif kein 'do always' gesetzt, damit die befehle nicht dauernd wiederholt werden. Das habe ich dann mit einem DOELSE ohne Befehl gelöst, damit würd dein doif immer cmd5 annehmen wenn keine der Bedingungen zu einem wechsel in ein anderes cmd führen.

Ich vermute, dass die Bedingungen für cmd2 cmd3 und cmd4 nicht jeden Tag zu einem cmd wechsel des doif führen und es daher auf cmd1 bleibt, welches dann nich wiederholt ausgeführt wird.



M_I_B

#10
Zitat von: automatisierer am 01 Juni 2016, 08:39:33demnach müsste das DOIF seit gesten morgen 00:00:07 auf CMD1 gestanden haben. Daher wurde das wegen dem fehlenden 'do always' dann auch abends nicht nochmal ausgeführt...
Dein Wort in des FHEM's Gehörgang  ::) ::)
DoAlways hatte ich am Anfang mal. Aber wie Du selber sagt, werden die Befehle dann ständig wiederholt, was natürlich eine manuelle Steuerung bei Bedarf jedesmal sofort zunichte macht.
Das leere DOELSE hatte ich auch mal, aber auf Grund eines Hinweises an anderer Stelle in diesem Forum wieder entfernt, da es nach der Aussage sinnlos sei.
Ich habe es jetzt wieder rein genommen. Also warten wir mal heute Abend ab, was denn so passiert ...

EDIT: Ich habe das Logfile zwei Beiträge zuvor noch mal erweitert mit dem, was bis jetzt aufgelaufen ist. Steht demnach derzeit auf cmd_5 (was immer das auch bedeuten mag). Der nächste Event müsste demnach heute Abend generiert werden, wenn es dunkel wird... Ich bin ja mal gespannt ...

automatisierer

das er auf cmd5 steht, bedeutet, dass das DOELSE zugeschlagen hat, weil keines der anderen DOIF odser DOELSEIF "wahr" ist

M_I_B

 ;D ;D ;D <<< will sagen, das es zumindest heute Abend funktioniert hat. Jetzt schaue ich noch, ob auch das Abschalten nachher um 23:00 funktioniert und der Rest der Woche und Wochenende auch alles gut läuft.

Auf jeden Fall an dieser Stelle allerbesten Dank für die Hilfe und Geduld. Netter Nebeneffekt: Ich fange jetzt auch so langsam an, hinter die Interna des ganzen DOIF- Zeugs zu blicken und es nicht nur stumpf zu benutzen ...

M_I_B

#13
... alles schwerzfrei. Funktioniert jetzt über Tage ohne Probleme  ;D

Einen hätte ich aber noch zu DOIF im Zusammenhang mit meinen Sonnenaufgang/untergang- Dummys, was keinen neuen Thred lohnt (denke ich).

define A43_it notify A43 set IT1SW2 $EVENT # IT Handsender zu IT Steckdose
...
define A43_A DOIF ([SunUPr]) (set A43 on-till [SunDNr]) DOELSE
... oder ...
define A43_A DOIF ([SunUPr]) (set A43 on) DOELSEIF ([SunDNr]) (set A43 off) DOELSE
... oder ...
define A43_A DOIF ([SunUPr] and [IT1SW2] eq "off") (set A43 on) DOELSEIF ([SunDNr] and [IT1SW2] eq "on") (set A43 off) DOELSE


Am elegantesten finde ich ja die erste Lösung, aber da bin ich mir vollkommen unsicher, ob man überhaupt im Befehlsteil "on-till" mit dem Dummy füttern darf. Aber auch wenn... Alle drei Varianten funktionieren nicht, auch nicht, wenn ich die in doppelte eckige Klammern setze ([[SunDNr]] ...) z.B.
Ich hatte die REF zu DOIF eigentlich so verstanden, das Zeiten in einfachen [] zu stehen haben und Von/Bis gemeinsam in [] stehen müssen. Also entweder eine einzelne Zeitangabe ala ([23:00]) oder Zeitfenster ala ([[21:00] - [23:00]]) ...
In der Kommandozeile funktioniert aber "set A43 on|off". Ich hätte in der Kommandozeile auch gerne mal den "set A43 on-till [SunDNr]" probiert, aber da bin ich noch nicht dahinter gekommen, wie man auf Kommandoebene den Dummywert einbauen muss ...

How to?

Per

Du hast

define A43_A DOIF ([SunUPr] - [SunDNr]) (set A43 on) DOELSE (set A43 off)

vergessen.
Einfache [] reichen aus, allerdings sollten sich in [SunDNr] und [SunUPr] auch Zeiten in einem Format befinden, welche sowohl DOIF als auch set till-on verstehen. Mal mitgeloggt? Fehlermeldungen geprüft?
In der Kommandozeile gehen die eckigen Klammern natürlich nicht, entweder auf Perl -Ebene mit ReadingsVal arbeiten oder "manuell übersetzen".