DOIF Eingangslicht macht Probleme

Begonnen von Spartacus, 30 Dezember 2015, 17:21:01

Vorheriges Thema - Nächstes Thema

Spartacus

Hallo,
ich habe mit diesem DOIF ein Problem. Die Auschaltverzögerung (wait 120) arbeitet nicht korrekt.
Eigentlich benötige ich ein DO resetwait, wenn während der Ausschaltverzögerung die Geräte "EG.ss.TK.Haustuer:buttons" und "EG.ss.LS.Eingang:buttons" erneut den Zustand "pressed" annehmen. Aber das mit dem resetwait wird hier ignoriert!

Wo liegt da der Fehler?
Internals:
   CFGFN      Config/05-Eingang.cfg
   DEF        (([EG.ss.TK.Haustuer:buttons] eq "pressed" or [EG.ss.LS.Eingang:buttons] eq "pressed") and
  [?EI.ss.SA.Licht] eq "off" and [?help.01.Eingangslicht.dum] eq "off" and [?help.Tageslicht.dum] eq "dunkel")
  (set EI.ss.SA.Licht on)
DOELSEIF ([seq.01.EG.fl.WS.Eingangslicht:?partial_1] and [EI.ss.SA.Licht] eq "off")
(set EI.ss.SA.Licht on)
DOELSEIF ([00:00] and [?hl.01.Feiertag] eq "Silvester")
         (set EI.ss.SA.Licht on)
DOELSEIF ([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and
          [EI.ss.SA.Licht] eq "on" and [?di.02.EI.ss.SA.Licht] eq "Sensor_on")
(set EI.ss.SA.Licht off)
DOELSEIF ([seq.01.EG.fl.WS.Eingangslicht:?partial_1] and [EI.ss.SA.Licht] eq "on")
(set EI.ss.SA.Licht off)
DOELSEIF ([02:00] and [?hl.01.Feiertag] eq "Neujahr")
         (set EI.ss.SA.Licht off)
DOELSEIF ([help.01.Eingangslicht.dum] eq "on")
   NAME       di.02.EI.ss.SA.Licht
   NR         759
   NTFY_ORDER 50-di.02.EI.ss.SA.Licht
   STATE      Sensor_off
   TYPE       DOIF
   Readings:
     2015-12-30 17:07:50   Device          EG.ss.TK.Haustuer
     2015-12-30 17:07:45   cmd_event       EG.ss.TK.Haustuer
     2015-12-30 17:07:45   cmd_nr          4
     2015-12-30 17:03:05   e_EG.ss.LS.Eingang_buttons released
     2015-12-30 17:03:05   e_EG.ss.LS.Eingang_events buttons: released
     2015-12-30 17:07:50   e_EG.ss.TK.Haustuer_buttons released
     2015-12-30 17:07:50   e_EG.ss.TK.Haustuer_events buttons: released
     2015-12-30 17:07:46   e_EI.ss.SA.Licht_STATE off
     2015-12-30 17:07:46   e_EI.ss.SA.Licht_events off
     2015-12-30 16:37:05   e_help.01.Eingangslicht.dum_STATE off
     2015-12-30 16:37:05   e_help.01.Eingangslicht.dum_events off
     2015-12-30 16:45:43   e_seq.01.EG.fl.WS.Eingangslicht_events partial_1
     2015-12-30 17:07:45   state           Sensor_off
     2015-12-30 00:00:00   timer_1_c3      31.12.2015 00:00:00
     2015-12-30 02:00:00   timer_2_c6      31.12.2015 02:00:00
     2015-12-30 17:07:45   wait_timer      no timer
   Condition:
     0          (ReadingValDoIf('EG.ss.TK.Haustuer','buttons','') eq "pressed" or ReadingValDoIf('EG.ss.LS.Eingang','buttons','') eq "pressed") and   InternalDoIf('EI.ss.SA.Licht','STATE','') eq "off" and InternalDoIf('help.01.Eingangslicht.dum','STATE','') eq "off" and InternalDoIf('help.Tageslicht.dum','STATE','') eq "dunkel"
     1          EventDoIf('seq.01.EG.fl.WS.Eingangslicht',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'partial_1') and InternalDoIf('EI.ss.SA.Licht','STATE','') eq "off"
     2          DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and InternalDoIf('hl.01.Feiertag','STATE','') eq "Silvester"
     3          ReadingValDoIf('EG.ss.TK.Haustuer','buttons','') eq "released" and ReadingValDoIf('EG.ss.LS.Eingang','buttons','') eq "released" and           InternalDoIf('EI.ss.SA.Licht','STATE','') eq "on" and InternalDoIf('di.02.EI.ss.SA.Licht','STATE','') eq "Sensor_on"
     4          EventDoIf('seq.01.EG.fl.WS.Eingangslicht',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'partial_1') and InternalDoIf('EI.ss.SA.Licht','STATE','') eq "on"
     5          DOIF_time_once($hash,$hash->{timer}{1},$wday,"") and InternalDoIf('hl.01.Feiertag','STATE','') eq "Neujahr"
     6          InternalDoIf('help.01.Eingangslicht.dum','STATE','') eq "on"
   Days:
   Devices:
     0           EG.ss.TK.Haustuer EG.ss.LS.Eingang
     1           seq.01.EG.fl.WS.Eingangslicht EI.ss.SA.Licht
     3           EG.ss.TK.Haustuer EG.ss.LS.Eingang EI.ss.SA.Licht
     4           seq.01.EG.fl.WS.Eingangslicht EI.ss.SA.Licht
     6           help.01.Eingangslicht.dum
     all         EG.ss.TK.Haustuer EG.ss.LS.Eingang seq.01.EG.fl.WS.Eingangslicht EI.ss.SA.Licht help.01.Eingangslicht.dum
   Do:
     0:
       0          set EI.ss.SA.Licht on
     1:
       0          set EI.ss.SA.Licht on
     2:
       0          set EI.ss.SA.Licht on
     3:
       0          set EI.ss.SA.Licht off
     4:
       0          set EI.ss.SA.Licht off
     5:
       0          set EI.ss.SA.Licht off
     6:
       0
     7:
   Helper:
     globalinit 1
     last_timer 2
     sleepdevice EG.ss.TK.Haustuer
     sleepsubtimer -1
     sleeptimer -1
     triggerDev EG.ss.TK.Haustuer
     triggerEvents:
       buttons: released
   Internals:
     1           EI.ss.SA.Licht:STATE
     3           EI.ss.SA.Licht:STATE
     4           EI.ss.SA.Licht:STATE
     6           help.01.Eingangslicht.dum:STATE
     all         EI.ss.SA.Licht:STATE help.01.Eingangslicht.dum:STATE
   Itimer:
   Readings:
     0           EG.ss.TK.Haustuer:buttons EG.ss.LS.Eingang:buttons
     3           EG.ss.TK.Haustuer:buttons EG.ss.LS.Eingang:buttons
     all         EG.ss.TK.Haustuer:buttons EG.ss.LS.Eingang:buttons
   Realtime:
     0          00:00:00
     1          02:00:00
   State:
   Time:
     0          00:00:00
     1          02:00:00
   Timecond:
     0          2
     1          5
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     2           0  0
     5           1  1
   Trigger:
     all         seq.01.EG.fl.WS.Eingangslicht
Attributes:
   alias      autom. Eingangslicht
   cmdState   Sensor_on|manual_on|Silvester_on|Sensor_off|manual_off|Silvester_off|Notaus
   disable    0
   group      Scripte
   initialize manual_off
   room       05-Eingang
   wait       0:0:0:120:0:0:0


Danke und Gruß,
Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Ellert

#1
Um dem Fehler auf die Spur zu kommen köntest Du die Events des DOIF loggen, dann siehst Du, was genau nicht klappt.
Loggen mit: define logni notify di.02.EI.ss.SA.Licht.* {Log 1, $NAME.": ".$EVENT)}
Zusätzlich könntest Du das DOIF zum Testen auf das Wesentliche reduzieren, und wenn dieser Teil funktioniert, erweitern usw.

Noch ein Hinweis zu do resetwait

ZitatDie Auschaltverzögerung (wait 120) arbeitet nicht korrekt.
Was meinst Du damit genau?

Spartacus

Hi Elbert,
danke für die Hinweise ich werde das mal versuchen, um dem Fehler auf die Schliche zu kommen. Aber es kann nur an diesem DOELSEIF liegen, welches auch die Ausschaltverzögerung für "EI.ss.SA.Licht" enthält

DOELSEIF ([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and
          [EI.ss.SA.Licht] eq "on" and [?di.02.EI.ss.SA.Licht] eq "Sensor_on")
(set EI.ss.SA.Licht off)


Wenn die "Haustür" und die "Lichtschranke" den Zustand "released" haben, dann läuft fangen die 120s an zu ticken. Dieser Timer muss aber abgebrochen werden, wenn Haustür oder Lichtschranke wieder auf "pressed" wechseln. Das hat alles mal funktioniert und hängt irgendwie mit der Tatsache zusammen, das im DOIF die Rekursion unterbunden wird. Ursprünglich lautet die Zeile:
DOELSEIF ([EG.ss.TK.Haustuer:buttons] eq "released" and [EG.ss.LS.Eingang:buttons] eq "released" and
          [EI.ss.SA.Licht] eq "on" and [di.02.EI.ss.SA.Licht] eq "Sensor_on")
(set EI.ss.SA.Licht off)
. Heisst, dass auf das DOIF selbst (di.02.EI.ss.SA.Licht) getriggert wurde. Aber Damin hat dies in einer der letzten Versionen unterbunden und gab mirden Tipp mit dem "?" vor  dem "di.02.EI.ss.SA.Licht". Nur leider funktioniert das immer noch nicht sauber!

Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Ellert

Welche Funktion hat das
Zitatand [EI.ss.SA.Licht] eq "on"
? Könntest Du das ggf. mit FILTER lösen, um die Bedingung zu vereinfachen? http://fhem.de/commandref_DE.html#devspec

Spartacus

#4
Hallo,
Das mit dem Filter verstehe ich in diesem Zusammenhang nicht!  Ich glaube, das and [EI.ss.SA.Licht] eq "on"
Kann man weglassen. Den Sinn verstehe ich auch nicht mehr!

Das war damals eine Hilfskonstruktion, da DOIF noch nicht den Funktionsumfang hatte!
Ich glaube, ich muss das ganz neu aufdröseln....

Ich beschreibe noch mal, was das Ziel sein soll:

Es gibt drei Sensoren:
1. Lichtschranke (LS: EG.ss.LS.Eingang:buttons)
2. Türkontakt (TK:EG.ss.TK.Haustuer:buttons )
3. Taster (seq.01.EG.fl.WS.Eingangslicht:?partial_1)

Funktionen:
a) Wenn es dunkel ist (help.Tageslicht.dum), soll das Licht (EI.ss.SA.Licht) eingeschaltet werden, sobald LS oder TK auf "pressed" gehen. Solange der Zustand "pressed" anhält, wird nachgetriggert. Erst wenn beide Sensoren den state "released" haben, läuft die Ausschaltverzögerung des Lichtes von 120s. Wird während des Timers erneut LS oder TK betätigt, wird nachgetriggert und der Timer abgebrochen.

b) Wenn LS oder TK länger als 600s auf "pressed" stehen (Hilfsvariable: "help.Tageslicht.dum" wird in einem anderen DOIF gesetzt) schaltet das Licht dauerhaft ab. Der Reset erfolgt durch das Zurücksetzten der Sensoren LS und TK auf "released".

c) Der Taster kann das Licht zu jeder Zeit ein und ausschalten, unabhängig von TK und LS.

d) Silverster um Mitternacht geht das Licht für 2h an, unabhängig von TK und LS und die Sicherheitsabschaltung nach 600s

Hat, wie gesagt, bis vor ein paar Wochen mit dem o.a. Code einwandfrei funktioniert.
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Ellert

ZitatDas mit dem Filter verstehe ich in diesem Zusammenhang nicht!

Falls Du damit
Zitatand [EI.ss.SA.Licht] eq "on"
erreichen wolltest, dass EI.ss.SA.Licht nur off gesetzt wird, wenn es on ist, dann könntest Du das mit set  EI.ss.SA.Licht:FILTER=STATE=on off erreichen.

Auf den ersten Blick müsste das Rücksetzen des Waittimers klappen. Das gewünschte Verhalten ist aber recht komplex. Ich  denke, man kann den Fehler nur aufdecken, wenn man jeden Zustand mitloggt und die tatsächlichen Zustände aller beteiligten Parameter (und ggf. die Zeitstempel) mit den erwarteten Zuständen abgleicht.

Erstmal würde ich klären, ob die Bedingungen im 1. Bedingungszweig nach Beginn des waittimers, auch wirklich alle vorliegen und ein Trigger vorhanden ist.

Das verhindern von "LOOPS" könnte eigentlich nur [EI.ss.SA.Licht] betreffen, denke ich.



Spartacus

Hallo Ellert,
danke Dir für Deine Unterstützung. Werde heute nicht mehr dazu kommen, aber ich denke, am WE werde ich die Sache abspecken, neu aufbauen und hier berichten.

Ich wünsche Dir und allen anderen fhem Usern einen guten Rutsch ins Jahr 2016.

Bis bald,
Spartacus.

Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R