DOIF mit Teilausdruck und dabei Konvertierung in Zahl

Begonnen von shamal2008, 29 September 2020, 21:37:12

Vorheriges Thema - Nächstes Thema

shamal2008

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
FHEM auf RasPiI 3+, MapleCUL 868+433MhZ, MAX! via CUL, LD686 LED-Controller, GHoma Plugins,, Shelly, ConbeeII + IKEA + Xiaomi, div. Infodienste & Google Assistant via FHEM;

Damian

#1
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!)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

shamal2008

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
FHEM auf RasPiI 3+, MapleCUL 868+433MhZ, MAX! via CUL, LD686 LED-Controller, GHoma Plugins,, Shelly, ConbeeII + IKEA + Xiaomi, div. Infodienste & Google Assistant via FHEM;