FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: dieter56 am 09 März 2016, 10:20:50

Titel: [gelöst] DOIF - Berechnung und ReadingsVal in wait
Beitrag von: dieter56 am 09 März 2016, 10:20:50
Hallo,

Der Modul DOIF macht mir viel Freude. Danke dafür.
Mit einem Problem komme ich nicht weiter.

In der folgenden Definition:


define di_BueroFenster_offen DOIF ([Buero.Fenstersensor] ne "closed" and [Wetter:temp_c] < 16)\
   (set Nachricht 'Bürofenster noch offen!')
attr di_BueroFenster_offen wait {( 180 * exp(0.160943791243 * ReadingsVal("Wetter", "temp_c", 0)) )}


soll die Wartezeit abhängig von der Außentemperatur sein.
Wenn ich den Ausdruck in den geschweiften Klammern in die Kommandozeile eingebe wird er korrekt berechnet.
Nach dem Triggern steht aber im READING wait-timer des DOIFs immer "no timer" und cmd_1 wird sofort ausgeführt.

Hat jemand eine Idee wo mein Denkfehler ist?

Viele Grüße aus Magdeburg.

Titel: Antw:DOIF - Berechnung und ReadingsVal in wait
Beitrag von: Damian am 09 März 2016, 12:29:56
Zitat von: dieter56 am 09 März 2016, 10:20:50
Hallo,

Der Modul DOIF macht mir viel Freude. Danke dafür.
Mit einem Problem komme ich nicht weiter.

In der folgenden Definition:


define di_BueroFenster_offen DOIF ([Buero.Fenstersensor] ne "closed" and [Wetter:temp_c] < 16)\
   (set Nachricht 'Bürofenster noch offen!')
attr di_BueroFenster_offen wait {( 180 * exp(0.160943791243 * ReadingsVal("Wetter", "temp_c", 0)) )}


soll die Wartezeit abhängig von der Außentemperatur sein.
Wenn ich den Ausdruck in den geschweiften Klammern in die Kommandozeile eingebe wird er korrekt berechnet.
Nach dem Triggern steht aber im READING wait-timer des DOIFs immer "no timer" und cmd_1 wird sofort ausgeführt.

Hat jemand eine Idee wo mein Denkfehler ist?

Viele Grüße aus Magdeburg.

So etwas funktioniert noch nicht, das liegt wohl am Komma als Trennzeichen beim Wait.
Das wird erst mit dem nächsten Update von DOIF funktionieren. Dann kannst du auch so etwas definieren:

(180*exp(0.160943791243 *[Wetter:temp_c])

bis dahin kannst du das über einen Dummy umleiten:

180*exp(0.160943791243 *[d_Wetter])

d_Wetter musst du dann per DOIF oder notify abhängig  vom Reading temp_c entsprechend belegen.

Gruß

Damian
Titel: [gelöst] Antw:DOIF - Berechnung und ReadingsVal in wait
Beitrag von: dieter56 am 09 März 2016, 13:16:51
Danke für superschnellen und kompetenten Support.

Ich habe es inzwischen etwas anders gelöst:
in meiner "99_myUtils.pm" habe ich ein sub



sub
TempWait
{
  return (sprintf("%.0f", 180 * exp(0.160943791243 * ReadingsVal("Wetter", "temp_c", 0))));
}


definiert und in wait so eingebaut:


define di_BueroFenster_offen DOIF ([Buero.Fenstersensor] ne "closed" and [Wetter:temp_c] < 16)\
   (set Nachricht 'Bürofenster noch offen!')
attr di_BueroFenster_offen wait {( TempWait() )}


Das hat funktioniert und den Vorteil, das ich die sub für andere Fenstersensoren auch noch benutzen kann.

Danke nochmal für das tolle Modul DOIF.