Temperaturüberwachung mit DOIF funktioniert nicht

Begonnen von spacejay, 10 Februar 2016, 21:59:03

Vorheriges Thema - Nächstes Thema

spacejay

Hallo Zusammen,

ich versuche gerade mit DOIF die Temperatur zu überwachen. Sobald die Temperatur unter einen Wert (z.B. 18 Grad) für länger als x Sekunden fällt, soll eine Nachricht verschickt werden. Die Nachricht sollte solange die Temperatur noch unter dem Schwellwert liegt 3 mal wiederholt werden. Ich habe mich an folgendes Beispiel in der Commandref gehalten:

Anwendungsbeispiel: Nach dem Eintreffen des Ereignisses wird die push-Meldung stündlich wiederholt, bis Frost ungleich "on" ist.

define di_push DOIF ([frost] eq "on")(set pushmsg "danger of frost")
attr di_push repeatcmd 3600

Eine Begrenzung der Wiederholungen kann mit dem Attribut repeatsame vorgenommen werden
attr di_push repeatsame 3

Die Verzögerung habe ich mit wait realisiert:

Anwendungsbeispiel: Benachrichtung "Waschmaschine fertig", wenn Verbrauch mindestens 5 Minuten unter 2 Watt (Perl-Code wird in geschweifte Klammern gesetzt):

define di_washer DOIF ([power:watt]<2) ({system("wmail washer finished")})
attr di_washer wait 300


Leider funktioniert es nicht so wie gewünscht. Zunächst wird das DO trotzdem ausgeführt, obwohl die Temperatur während der wait-Zeit wieder über dem Schwellwert liegt. Er führt die DO unabhängig vom Schwellwert repeatsame Mal aus. Außerdem reagiert er danach nicht mehr auf das unterschreiten des Schwellwerts. D.h. wenn die Temperatur unter den Schwellwert fällt wird DO nicht mehr ausgefürt. Nach der wait Zeit geht der wait_timer wieder auf no timer zurück. Ich benutzte die folgende Konfig:

Internals:
   CFGFN
   DEF        ([TempTest:temperature]<18)(set Push msg 'Achtung' 'Die Temperatur im Bad ist zur Zeit [TempTest:temperature]°C' 'Christian' 0 '')
   NAME       triggerBadTempLow
   NR         3991
   NTFY_ORDER 50-triggerBadTempLow
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-02-10 21:30:24   Device          TempTest
     2016-02-10 21:33:11   cmd_count       3
     2016-02-10 21:33:11   cmd_event       TempTest
     2016-02-10 21:33:11   cmd_nr          1
     2016-02-10 21:30:24   e_TempTest_temperature 20
     2016-02-10 21:33:11   state           cmd_1
     2016-02-10 21:34:11   wait_timer      no timer
   Condition:
     0          ReadingValDoIf('TempTest','temperature','')<18
   Devices:
     0           TempTest
     all         TempTest
   Do:
     0:
       0          set Push msg 'Achtung' 'Die Temperatur im Bad ist zur Zeit [TempTest:temperature]°C' 'Christian' 0 ''
     1:
   Helper:
     globalinit 1
     last_timer 0
     sleepdevice TempTest
     sleepsubtimer -1
     sleeptimer -1
   Internals:
   Itimer:
   Readings:
     0           TempTest:temperature
     all         TempTest:temperature
   State:
   Timerfunc:
   Trigger:
Attributes:
   repeatcmd  60
   repeatsame 3
   room       LaCrosse
   wait       60


Vielleicht kann einer der Profis mal drüber schauen. Irgendwie muss ich die Beispiele in der Commandref falsch verstanden haben.

Danke und Gruß
Christian