Hauptmenü

DOIF schaltet nicht !

Begonnen von sash.sc, 06 April 2016, 13:54:36

Vorheriges Thema - Nächstes Thema

sash.sc

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
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Per

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?

sash.sc

?

Von mobil gesendet daher kurze Antwort

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

kumue

wie Per schon schrieb... ein Lichtwechsel findet bei LW3 nicht statt, weil nichts eingeschaltet wird, sondern nur aus...

sash.sc

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
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Damian

#5
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

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

sash.sc

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
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

sash.sc

Danke für den Griff unter die Arme!  :-)

Gruß Sascha

Von mobil gesendet daher kurze Antwort

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb