Hallo zusammen.
Habe im garten einen Lichtwechsel programmiert. (LW).
Lichtwechsel 1 un d 2 funktionieren auch ohne Probleme. Siehe Code. Nur der LW3 macht Probleme. der Wurde initialisiert und erreicht dann bei der Zeit keinen Status. Habe auch aus den funktionierenden LW den Code nachher kopiert und die Zeiten angepasst. Aber nix funzt.
Kann mir evtl. jemand sagen warum.
Hier erstmal der Code von LW3
Internals:
DEF ([([TWL:ss_indoor] + [04:00:00])]) (set EG_g_bl_Licht off,set EG_g_ku_Licht off) DOELSEIF ([([TWL:ss_indoor] + [04:01:00])]) (set EG_g_bl_Licht off,set EG_g_ku_Licht off)
NAME LW3
NR 187
NTFY_ORDER 50-LW3
STATE initialize
TYPE DOIF
Readings:
2016-04-06 13:47:17 state initialize
2016-04-06 13:45:49 timer_1_c1 07.04.2016 00:10:08
2016-04-06 13:45:49 timer_2_c2 07.04.2016 00:11:08
Condition:
0 DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
1 DOIF_time_once($hash,$hash->{timer}{1},$wday,"")
Days:
Devices:
Do:
0:
0 set EG_g_bl_Licht off,set EG_g_ku_Licht off
1:
0 set EG_g_bl_Licht off,set EG_g_ku_Licht off
Helper:
globalinit 1
last_timer 2
sleeptimer -1
Itimer:
all TWL
Localtime:
0 1459980608
1 1459980668
Realtime:
0 00:10:08
1 00:11:08
Regexp:
State:
Time:
0 ([TWL:ss_indoor]+[04:00:00])
1 ([TWL:ss_indoor]+[04:01:00])
Timecond:
0 0
1 1
Timer:
0 0
1 0
Timers:
0 0
1 1
Triggertime:
1459980608:
localtime 1459980608
Hash:
1459980668:
localtime 1459980668
Hash:
und hier der Code von LW1 und LW2:
Internals:
DEF ([([TWL:ss_indoor] + [0:00:02])]) (set EG_g_bl_Licht on,set EG_g_ku_Licht off) DOELSEIF ([([TWL:ss_indoor] + [01:00:00])]) (set EG_g_bl_Licht off,set EG_g_ku_Licht on)
NAME LW1
NR 183
NTFY_ORDER 50-LW1
STATE cmd_2
TYPE DOIF
Readings:
2016-04-05 21:08:28 cmd_event timer_2
2016-04-05 21:08:28 cmd_nr 2
2016-04-05 21:08:28 state cmd_2
2016-04-06 13:50:49 timer_1_c1 06.04.2016 20:10:10
2016-04-06 13:50:49 timer_2_c2 06.04.2016 21:10:08
Condition:
0 DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
1 DOIF_time_once($hash,$hash->{timer}{1},$wday,"")
Days:
Devices:
Do:
0:
0 set EG_g_bl_Licht on,set EG_g_ku_Licht off
1:
0 set EG_g_bl_Licht off,set EG_g_ku_Licht on
Helper:
globalinit 1
last_timer 2
sleeptimer -1
Itimer:
all TWL
Localtime:
0 1459966210
1 1459969808
Realtime:
0 20:10:10
1 21:10:08
Regexp:
State:
Time:
0 ([TWL:ss_indoor]+[0:00:02])
1 ([TWL:ss_indoor]+[01:00:00])
Timecond:
0 0
1 1
Timer:
0 0
1 0
Timers:
0 0
1 1
Internals:
DEF ([([TWL:ss_indoor] + [02:00:00])]) (set EG_g_bl_Licht on,set EG_g_ku_Licht off) DOELSEIF ([([TWL:ss_indoor] + [03:00:00])]) (set EG_g_bl_Licht off,set EG_g_ku_Licht on)
NAME LW2
NR 185
NTFY_ORDER 50-LW2
STATE cmd_2
TYPE DOIF
Readings:
2016-04-05 23:10:09 cmd_event timer_2
2016-04-05 23:10:09 cmd_nr 2
2016-04-05 23:10:09 state cmd_2
2016-04-06 13:50:49 timer_1_c1 06.04.2016 22:10:08
2016-04-06 13:50:49 timer_2_c2 06.04.2016 23:10:08
Condition:
0 DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
1 DOIF_time_once($hash,$hash->{timer}{1},$wday,"")
Days:
Devices:
Do:
0:
0 set EG_g_bl_Licht on,set EG_g_ku_Licht off
1:
0 set EG_g_bl_Licht off,set EG_g_ku_Licht on
Helper:
globalinit 1
last_timer 2
sleeptimer -1
Itimer:
all TWL
Localtime:
0 1459973408
1 1459977008
Realtime:
0 22:10:08
1 23:10:08
Regexp:
State:
Time:
0 ([TWL:ss_indoor]+[02:00:00])
1 ([TWL:ss_indoor]+[03:00:00])
Timecond:
0 0
1 1
Timer:
0 0
1 0
Timers:
0 0
1 1
Vielen Dank schonmal
Gruß
Sascha
Zitat von: sash.sc am 06 April 2016, 13:54:36
([([TWL:ss_indoor] + [04:00:00])]) (set EG_g_bl_Licht off,set EG_g_ku_Licht off) DOELSEIF ([([TWL:ss_indoor] + [04:01:00])]) (set EG_g_bl_Licht off,set EG_g_ku_Licht off)
Vllt. deshalb?
?
Von mobil gesendet daher kurze Antwort
wie Per schon schrieb... ein Lichtwechsel findet bei LW3 nicht statt, weil nichts eingeschaltet wird, sondern nur aus...
Es soll ja auch alles ausgeschaltet werden. Es wird ja über den LW2 eine Lampe ein und die andere ausgeschaltet.
Also am besten über den at Befehl ausschalten ?
Gruß
Sascha
Zitat von: sash.sc am 06 April 2016, 20:39:09
Es soll ja auch alles ausgeschaltet werden. Es wird ja über den LW2 eine Lampe ein und die andere ausgeschaltet.
Also am besten über den at Befehl ausschalten ?
Gruß
Sascha
Nein. Wenn es sich um die gleichen Lampen handelt, dann solltest du alles in einem DOIF lösen. Nach dem Motto: "wer die Lampe einschaltet, soll die Lampe wieder ausschalten" - das habe ich auch so in der Commandref geschrieben. Alles Andere ist ein Spagetti-Code, der ein Problem in verschiedenen Definitionen abdeckt. Leider ist das in FHEM der Standard, der mich an die Programmierung vor 30 Jahren erinnert, weil die meisten mit notify und at arbeiten und diese Module nur mit einem Ereignis bzw. einer Zeit umgehen können und damit nur einen Teil des Problems in einer Definition abdecken.
Probiere es erst mal selbst zu lösen.
P. S. ZU LW3: Per hat es dir hier schon geschrieben, wer die Lampen nur ausmacht braucht sich nicht zu wundern, dass sie nicht angehen ;)
Edit: Wenn du in LW3 nur ausschalten willst, dann musst du bis morgen warten, denn dann wir lt. deiner Definition erst wieder ausgeschaltet.
Gruß
Damian
Zitat
P. S. ZU LW3: Per hat es dir hier schon geschrieben, wer die Lampen nur ausmacht braucht sich nicht zu wundern, dass sie nicht angehen ;)
Edit: Wenn du in LW3 nur ausschalten willst, dann musst du bis morgen warten, denn dann wir lt. deiner Definition erst wieder ausgeschaltet.
Hi Damian.
Beim LW3 sollen ja auch die Lampen komplett ausgehen, habe mit dem DOELSE noch einmal den Ausschaltbefehl nach einer Minute abgesetzt.
Wenn ich mir die States von LW3 angeschaut habe, stand auch die richtige Uhrzeit zum ausschalten. Bis ich dann morgens gesehen habe, dass die Lampe noch an war.
Aber egal, werde es mal versuchen. Wird schon klappen.;-)
Gruß
Sascha
Zitat von: sash.sc am 06 April 2016, 21:45:02
Hi Damian.
Beim LW3 sollen ja auch die Lampen komplett ausgehen, habe mit dem DOELSE noch einmal den Ausschaltbefehl nach einer Minute abgesetzt.
Wenn ich mir die States von LW3 angeschaut habe, stand auch die richtige Uhrzeit zum ausschalten. Bis ich dann morgens gesehen habe, dass die Lampe noch an war.
Aber egal, werde es mal versuchen. Wird schon klappen.;-)
Gruß
Sascha
Ob das Modul etwas gemacht hat oder nicht, kannst du immer im Status oder an den Readings des Moduls ablesen.
Was ich machen würde:
Ich packe erst mal alles in ein Modul:
DOIF ([([TWL:ss_indoor] + [0:00:02])]) (set EG_g_bl_Licht on,set EG_g_ku_Licht off) DOELSEIF ([([TWL:ss_indoor] + [01:00:00])]) (set EG_g_bl_Licht off,set EG_g_ku_Licht on)
DOELSEIF ([([TWL:ss_indoor] + [02:00:00])]) (set EG_g_bl_Licht on,set EG_g_ku_Licht off) DOELSEIF ([([TWL:ss_indoor] + [03:00:00])]) (set EG_g_bl_Licht off,set EG_g_ku_Licht on)
DOELSEIF ([([TWL:ss_indoor] + [04:00:00])]) (set EG_g_bl_Licht off,set EG_g_ku_Licht off)
DOELSEIF ([([TWL:ss_indoor] + [04:01:00])]) (set EG_g_bl_Licht off,set EG_g_ku_Licht off)
Nun vereinfache ich:
DOIF ([([TWL:ss_indoor]+2)] or [([TWL:ss_indoor]+[02:00])]) (set EG_g_bl_Licht on, set EG_g_ku_Licht off)
DOELSEIF ([([TWL:ss_indoor] + [01:00])] or [([TWL:ss_indoor] + [03:00])]) (set EG_g_bl_Licht off, set EG_g_ku_Licht on)
DOELSEIF ([([TWL:ss_indoor] + [04:00])] or [([TWL:ss_indoor] + [04:01])] ) (set EG_g_bl_Licht off, set EG_g_ku_Licht off)
Denke allerdings daran, dass alle per Minuten deine Timer aktualisiert werden. Das kann man mit
checkReadingEvent als Attribut abstellen mit dieser Version, die bald eingecheckt wird: https://forum.fhem.de/index.php/topic,51060.0.html
Gruß
Damian
Danke für den Griff unter die Arme! :-)
Gruß Sascha
Von mobil gesendet daher kurze Antwort