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?
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
... ö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:
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?
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.
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 ...
... 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 ...
was für einen Status hat das du denn jetzt aktuell?
immer noch CMD1?
... 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
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.
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 ...
das er auf cmd5 steht, bedeutet, dass das DOELSE zugeschlagen hat, weil keines der anderen DOIF odser DOELSEIF "wahr" ist
;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 ...
... 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?
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".
... 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.
... 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: