Problem mit meiner Lichtsteuerung

Begonnen von Spartacus, 07 Juni 2016, 22:43:55

Vorheriges Thema - Nächstes Thema

Spartacus

Hallo,
habe heute ein Problem mit diesem DOIF festgestellt. Ich könnte schwören, es hat mal funktioniert:
Internals:
   CFGFN      Config/05-Garten.cfg
   DEF        ([16:30-[help.01.GA.ss.SA.Licht.dum]] and
[help.Tageslicht.dum] eq "dunkel" and
[?help.Tageslicht.dum:SU] lt {TimeOffset (OffTimeLicht(),'-30')})
(set GA.ss.SA.Licht on, set help.01.EG.wz.RO.dum on, set help.01.GA.ss.SA.Licht.dum {(OffTimeLicht())})
DOELSE
(set GA.ss.SA.Licht off)

   NAME       di.01.GA.ss.SA.Licht
   NR         613
   NTFY_ORDER 50-di.01.GA.ss.SA.Licht
   STATE      off
   TYPE       DOIF
   Readings:
     2016-06-07 21:53:30   Device          help.Tageslicht.dum
     2016-06-07 22:00:00   cmd             2
     2016-06-07 22:00:00   cmd_event       timer_2
     2016-06-07 22:00:00   cmd_nr          2
     2016-06-07 21:53:30   e_help.Tageslicht.dum_STATE dunkel
     2016-06-07 21:53:30   e_help.Tageslicht.dum_SU 21:54:19
     2016-06-07 22:00:00   state           off
     2016-06-07 22:00:00   timer_1_c1      08.06.2016 16:30:00
     2016-06-07 22:00:00   timer_2_c1      08.06.2016 22:00:00
   Condition:
     0          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and   InternalDoIf($hash,'help.Tageslicht.dum','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "dunkel" and   ReadingValDoIf($hash,'help.Tageslicht.dum','SU','','',AttrVal($hash->{NAME},'notexist',undef)) lt {TimeOffset (OffTimeLicht(),'-30')}
   Days:
   Devices:
     0           help.Tageslicht.dum
     all         help.Tageslicht.dum
   Do:
     0:
       0          set GA.ss.SA.Licht on, set help.01.EG.wz.RO.dum on, set help.01.GA.ss.SA.Licht.dum {(OffTimeLicht())}
     1:
       0          set GA.ss.SA.Licht off
   Helper:
     event      timer_2
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev
     timerevent timer_2
     triggerDev
     timerevents:
       timer_2
     timereventsState:
       state: dunkel
     triggerEvents:
       timer_2
     triggerEventsState:
       state: dunkel
   Internals:
     0           help.Tageslicht.dum:STATE
     all         help.Tageslicht.dum:STATE
   Interval:
     0          -1
     1          0
   Itimer:
     all         help.01.GA.ss.SA.Licht.dum
   Localtime:
     0          1465396200
     1          1465416000
   Readings:
     0           help.Tageslicht.dum:SU
     all         help.Tageslicht.dum:SU
   Realtime:
     0          16:30:00
     1          22:00:00
   Regexp:
     0:
     All:
   State:
   Time:
     0          16:30:00
     1          [help.01.GA.ss.SA.Licht.dum]
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timers:
     0           0  1
   Trigger:
   Triggertime:
     1465396200:
       localtime  1465396200
       Hash:
     1465416000:
       localtime  1465416000
       Hash:
Attributes:
   alias      autom. Gartenlicht
   cmdState   on|off
   devStateIcon .*on:general_an@lightgreen .*off:general_aus@red
   do         always
   group      Scripte
   room       05-Garten
   sortby     01


Folgendes Problem:
das and
[?help.Tageslicht.dum:SU] lt {TimeOffset (OffTimeLicht(),'-30')})
soll verhindern, dass "GA.ss.SA.Licht" nicht eingeschaltet wird, wenn "OffTimeLicht() -30min" kleiner als "help.Tageslicht.dum:SU "ist.
OfftimeLicht() ist 22:00 und help.Tageslicht.dum:SU=21:54:19. Also ist die Bedingung unwahr und das Licht sollte nicht schalten.
Komischerweise wird aber trotzdem bei [help.Tageslicht.dum] eq "dunkel"eingeschaltet.
Wieso passiert das, wo ist hier der Wurm drin? Die TimeOffset-Routine ist hier aus dem Forum uns sollte korrekt laufen.

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

Logge das Schaltverhalten des DOIF mit, dann kannst Du dem Fehler auf die Spur kommen.


define listDOIF DOIF (["^di.01.GA.ss.SA.Licht$"]) (({Log 3, "listDOIF: Gerät: $DEVICE:[$DEVICE] --> Event: $EVENT"}))
attr listDOIF do always


Zusätzlich könntest Du alle relevanten Readings und Funktionen in den Log-Befehl mit einbauen.

Spartacus

Hi Ellert,
danke für den Tipp! Ich lasse das heute mal laufen. Irgendwie ist das schon sehr komisch! Das Einschalten wird einfach nicht verhindert! Leider habe ich das Log vom letzten Jahr nicht mehr! Aber wie gesagt, da hat das funktioniert! Offenbar hat sich irgendwo ein Fehler (unbewußt) eingeschlichen.
.....
2016-06-05_21:51:45 GA.ss.SA.Licht on
2016-06-05_22:00:00 GA.ss.SA.Licht off
2016-06-06_21:52:39 GA.ss.SA.Licht on
2016-06-06_22:00:00 GA.ss.SA.Licht off
2016-06-07_21:53:30 GA.ss.SA.Licht on
2016-06-07_22:00:00 GA.ss.SA.Licht off
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

Du könntest mal die geschweiften Klammern weglassen. Im Bedingungsteil ist alles ausserhalb [] wie Perlcode zu schreiben.

DOIF hat einige Updates erfahren, falls Du kürzlich aktualisiert hast, daran könnte es liegen.

Spartacus

Hi,
ah! Meinst bei TimeOffset und OfftimeLicht?
dann würde das so aussehen.

([16:30-[help.01.GA.ss.SA.Licht.dum]] and
[help.Tageslicht.dum] eq "dunkel" and
[?help.Tageslicht.dum:SU] lt TimeOffset (OffTimeLicht(),'-30'))
(set GA.ss.SA.Licht on, set help.01.EG.wz.RO.dum on, set help.01.GA.ss.SA.Licht.dum (OffTimeLicht()))
DOELSE
(set GA.ss.SA.Licht off)


Ich merke schon, Updates zu machen kann nicht immer gut sein. Wenn das so ist, muss ic meine anderen DOIFs auch mal durchsuchen...

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

Nein, nur im Bedingungsteil die geschweiften Klammern weglassen.

Spartacus

Moin,
hm! Habe es jetzt gestern Abend so wie oben beschrieben, laufen lassen und es hat eigentlich funktioniert. Wahrscheinlich aber nur, weil "set help.01.GA.ss.SA.Licht.dum (OffTimeLicht())" sowieso auf 22:00 Uhr gesetzt war. Also mache ich hier die Klammern wieder drum und lass es heute Abend noch mal laufen.

(set GA.ss.SA.Licht on, set help.01.EG.wz.RO.dum on, set help.01.GA.ss.SA.Licht.dum {(OffTimeLicht())})

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

Per

set help.01.GA.ss.SA.Licht.dum (OffTimeLicht()) ist gleichzeitig ein Trigger, also solltest du dir mal attr selftrigger näher anschauen.

Spartacus

Hallo Per,
danke für den Tipp,
damals musste man das so lösen, da die Berechnung aus OfftimeLicht() nicht ausgeführt wurde, nachdem das Licht eingeschaltet wurde.
Allerdings habe ich noch nicht ganz verstanden, wie ich das nun ändern muss.

([16:30-(OffTimeLicht())] and
[help.Tageslicht.dum] eq "dunkel" and
[?help.Tageslicht.dum:SU] lt TimeOffset (OffTimeLicht(),'-30'))
(set GA.ss.SA.Licht on, set help.01.EG.wz.RO.dum on)
DOELSE
(set GA.ss.SA.Licht off)


Kann ich die Funktion OfftimeLicht() direkt für die zweite Schaltzeit verwenden, sodass ich die Variable " help.01.GA.ss.SA.Licht.dum" sparen kann?
Ansonsten erkenne ich den Vorteil des attributs "selftrigger all" nicht ganz, bzw. verstehe nicht, wie es eingesetzt werden soll. Habe die commandref zwar gelesen, aber es hat nicht "klick" gemacht!

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

Spartacus

Hallo,
das mit dem "selftrigger" von Per verstehe ich nicht!
Habe den Code nun so gelassen. Das funktioniert soweit wieder!
([16:30-[help.01.GA.ss.SA.Licht.dum]] and
[help.Tageslicht.dum] eq "dunkel" and
[?help.Tageslicht.dum:SU] lt TimeOffset (OffTimeLicht(),'-30'))
(set GA.ss.SA.Licht on, set help.01.EG.wz.RO.dum on, set help.01.GA.ss.SA.Licht.dum {(OffTimeLicht())})
DOELSE
(set GA.ss.SA.Licht off)


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