DOIF nur bei Schwellwertunterschreitung triggern lassen

Begonnen von dan1824, 04 November 2015, 17:58:32

Vorheriges Thema - Nächstes Thema

dan1824

Hallo nabend zusammen,

Ich habe hier ein DOIF, das von der Logik her folgends tun soll.

  - Wenn der Schwellwert von [HM_2DA4EE_SenPwr:state] unter 20 sinkt
  - Wobei das nur innerhalb der letzten 20 Sekunden interessiert
  - Und die Außenhelligkeit unter 600 liegt,

define TVLichteinschalten DOIF ([HM_2DA4EE_SenPwr:state] < 20 and [HM_2DA4EE_SenPwr:state:sec] < 20 and [EnO_4BS_019421D0:brightness] < 600) (set LS_Wohnzimmer scene TV_Licht1)


dann das TV-Licht einschalten.

Die Definition oben triggert allerdings auch, wenn sich das Reading state von HM_2DA4EE_SenPwr zwischendurch auf Werte zwischen 8 und 12 aktualisiert wird, ohne dass zuvor die 20 wieder erreicht wurden.

Im commandref steht das hier, es müsste also generell gehen:


define di_heating DOIF ([sens:temperature] < 20) (set heating on)
... erst wieder "set heating on" ausgeführt, wenn der Zustand des Moduls gewechselt hat, also die Temperatur zwischendurch größer oder gleich 20 Grad war.


Hat jemand einen Tipp für mich, was ich falsch mache?

Besten Dank vorab und schönen Abend noch!

Damian

Zitat von: dan1824 am 04 November 2015, 17:58:32
Hallo nabend zusammen,

Ich habe hier ein DOIF, das von der Logik her folgends tun soll.

  - Wenn der Schwellwert von [HM_2DA4EE_SenPwr:state] unter 20 sinkt
  - Wobei das nur innerhalb der letzten 20 Sekunden interessiert
  - Und die Außenhelligkeit unter 600 liegt,

define TVLichteinschalten DOIF ([HM_2DA4EE_SenPwr:state] < 20 and [HM_2DA4EE_SenPwr:state:sec] < 20 and [EnO_4BS_019421D0:brightness] < 600) (set LS_Wohnzimmer scene TV_Licht1)


dann das TV-Licht einschalten.

Die Definition oben triggert allerdings auch, wenn sich das Reading state von HM_2DA4EE_SenPwr zwischendurch auf Werte zwischen 8 und 12 aktualisiert wird, ohne dass zuvor die 20 wieder erreicht wurden.

Im commandref steht das hier, es müsste also generell gehen:


define di_heating DOIF ([sens:temperature] < 20) (set heating on)
... erst wieder "set heating on" ausgeführt, wenn der Zustand des Moduls gewechselt hat, also die Temperatur zwischendurch größer oder gleich 20 Grad war.


Hat jemand einen Tipp für mich, was ich falsch mache?

Besten Dank vorab und schönen Abend noch!

In der Commandref ist nur eine Abfrage, die nicht erfüllt sein kann - bei dir sind es drei. Sobald eine Bedingung nicht erfüllt ist, wird ein Zustandswechsel provoziert. Wenn danach wieder alle Bedingungen erfüllt sind, wird dein set Befehl wieder ausgeführt.

Gruß

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

dan1824


Hallo Damian,

danke für Deinen Hinweis! Das habe ich völlig übersehen -- patsch :o.

Dann ist es klar, denn die Updates dauern teils länger als 20 Sekunden.

Vielen Dank und Dir noch einen schönen Abend!