FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: shamal2008 am 29 September 2020, 21:37:12

Titel: DOIF mit Teilausdruck und dabei Konvertierung in Zahl
Beitrag von: shamal2008 am 29 September 2020, 21:37:12
Hallo zusammen,

ich stehe irgendwie an:
Offensichtlich ist es nicht möglich, in einem Teilausdruck mit :d den Zahlenwert zu extrahieren, um damit zu vergleichen.

Funktioniendes Beispiel:
(([hz.wt.wz:desiredTemperature:d1]) < ([hz.wt.wz:temperature:d1]))
(set MaLaBot message @T. TestDoif Heizung $DEVICE aktiv!)
DOELSE (set MaLaBot message @T. TestDoif-Heizung $DEVICE deaktiviert!)


Wenn ich jetzt versuche, mit einem Teilausdruck zu filtern:

((["hz.wt:desiredTemperature:d1"]) > (["$DEVICE:temperature:d1"]))
(set MaLaBot message @T. TestDoif Heizung $DEVICE aktiv!)
DOELSE (set MaLaBot message @T. TestDoif-Heizung $DEVICE deaktiviert!)


Sobald ich die :d1 weglasse, bekomme ich den Fehler, dass c1 not numeric ist.

Wie kann ich die beiden Werte (alle Devices sind MAX! Wandthermostate) vergleichen bzw. vorher in eine Zahl umwandeln? ReadingsVal geht ja nicht, ist eine Perl Funktion.

Hintergrund: Sobald einer der 4 Wandthermostate eine gewünschte höhere Temperatur hat, als tatsächlich vorherrscht, soll der Brenner aktiviert werden. Da hängt ein simples Shelly dran, welches einfach einschaltet. Mehr Intelligenz hatte die Heizung bis jetzt nicht.

Ich wollte damit dieses DOIF ersetzen:
(([hz.wt.wz:temperature] < [hz.wt.wz:desiredTemperature]) or
([hz.wt.bz:temperature] < [hz.wt.bz:desiredTemperature]) or
([hz.wt.vz:temperature] < [hz.wt.vz:desiredTemperature]) or
([hz.wt.jz:temperature] < [hz.wt.jz:desiredTemperature]) or
([hz.ve.sz.1:temperature] < [hz.ve.sz.1:desiredTemperature]))
(set MaLaBot message @#Home Heizung wurde eingeschaltet!)
(set sw.bz.therme on)
DOELSE (set sw.bz.therme off) (set MaLaBot message @#Home Gewünschte Temperatur errreicht - Heizung wieder ausgeschalten!)


lg Shamal
Titel: Antw:DOIF mit Teilausdruck und dabei Konvertierung in Zahl
Beitrag von: Damian am 29 September 2020, 23:05:37
Warum hast du die Vergleiche in Anführungszeichen gesetzt? Ohne sollte es wie gewohnt funktionieren:

(["^hz.:temperature"] and [$DEVICE:desiredTemperature:d1] > [$DEVICE:temperature:d1])
(set MaLaBot message @T. TestDoif Heizung $DEVICE aktiv!)
DOELSE (set MaLaBot message @T. TestDoif-Heizung $DEVICE deaktiviert!)
Titel: Antw:DOIF mit Teilausdruck und dabei Konvertierung in Zahl
Beitrag von: shamal2008 am 02 Oktober 2020, 16:04:45
Hallo Damian,

danke - jetzt funktioniert es. Ich hatte wohl irgendwo ein Brett vorm Kopf.

Jetzt muss ich mir dann nur noch eine Variante überlegen, wie ich vor dem Ausschalten checke, ob irgendeines der 4 Thermostate doch noch "Wärme" (=on) benötigt, sprich die Therme "eingeschalten" lässt.

Grüße aus Wien,
shamal2008