Umstellung von einem Sensor auf mehrere tut nicht

Begonnen von tschaedl, 11 Februar 2018, 10:12:18

Vorheriges Thema - Nächstes Thema

tschaedl

Hallo liebe Gemeinde,

vielleicht kann mir hier jemand helfen, steh grad auf dem Schlauch.
Habe bisher nur die Luftfeuchte im Bad überwacht. Wollte heute die Überwachung auf alle Sensoren umstellen und habe deshalb aus dem DOIF

([Bad.Temp:humidity] > 70)
(defmod at_$DEVICE at +00:15 set defmod at_badhumidityt at +*00:00:30 {fhem "setreading Bad.Temp timer " . (ReadingsVal("Bad.Temp","timer","")+30)})
DOELSEIF
([Bad.Temp:humidity] <= 70)
(delete at_$DEVICE, delete at_badhumidityt, setreading Bad.Temp time 0, setreading Bad.Temp Mintimer 0)


folgendes gemacht:

(["\.Temp:^humidity"] > [$DEVICE:Maxhumidity])
(defmod at_$DEVICE at +00:15 defmod at_$DEVICE_humidityt at +*00:00:30 {fhem "setreading $device timer " . (ReadingsVal($device,"timer","")+30)})
DOELSEIF
(["\.Temp:^humidity"] <= [$DEVICE:Maxhumidity])
(delete at_$DEVICE, delete at_$DEVICE_humidityt, setreading $DEVICE time 0, setreading $DEVICE Mintimer 0,{Log 1, "[$DEVICE:humidity]<=[$DEVICE:Maxhumidity]"})


Leider verharrt der DOIF jetzt in Cmd2 (attr do always ist gesetzt) und ich blicke es nicht, warum. Anbei der Auszug aus dem Log.

2018-02-10 20:02:03 LaCrosse Wohn.Temp T: 21.6 H: 50
2018.02.10 20:02:24 2 : nt.luftfeuchtehoch: delete at_Wohn.Temp: Please define at_Wohn.Temp first
2018.02.10 20:02:24 2 : nt.luftfeuchtehoch: delete at_Wohn.Temp_humidityt: Please define at_Wohn.Temp_humidityt first
2018.02.10 20:02:24 1 : 50<=45


Vielen Dank!
Thomas

Damian

Ein DOIF mit Zustandsauswertung (ohne do always) funktioniert nur sinnvoll bei konkreten Devices, hier also  [Bad.Temp:humidity]. Wenn du etwas verallgemeinerst, dann ist auch die Zustandsverwaltung meistens nicht mehr sinnvoll, dann muss man do always setzen und sich selbst drum kümmern, Wiederholungen bei zyklisch sendenden Sensoren zu unterbinden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tschaedl

Vielen Dank für den Hinweis, aber wie oben schon geschrieben, habe ich das Attribut bereits gesetzt. Die Frage ist doch die, warum er nicht in das erste IF geht sondern in das 2., was offensichtlich ja falsch ist, da 50<=45 (wie im log zu sehen) nach Adam Riese nicht korrekt ist.

Damian

["\.Temp:^humidity"] liefert keine Zahl, sondern nur den Wahrheitswert "wahr" oder "falsch"

Du kannst es mit der neuen DOIF-Syntax (eingeleitet durch ein Defaultwert) probieren:

["\.Temp:^humidity",0]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tschaedl

Vielen Dank, das war das Problem. Steht auch so in der Doku...
Asche auf mein Haupt.