FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Invers am 03 Januar 2014, 21:07:00

Titel: Erbitte Codekorrektur (einzeiliger Code) :-)
Beitrag von: Invers am 03 Januar 2014, 21:07:00
define LuefterEin at +*00:20:00 {if (ReadingsVal("FHT_4955","temperature",0)+0.1 < ReadingsVal("FHT_4955","desired-temp",0)) && (ReadingsVal("FHT_4955","actuator",0) > 15% { fhem ("set Luefter on")}}

Wäre jemand so nett, den Code zu prüfen? Ich kann gerade nicht testen, vermute aber, dass Fehler drinnen sind. Ich denke, dass der Wertevergleich des Actuators nicht funktionieren wird.

Der Lüfter soll eingeschaltet werden, wenn die Temperatur+0,1 Grad unter der Solltempereatur liegt und der Actuator mindestens 15% anzeigt.

Danke im Voraus.
Titel: Antw:Erbitte Codekorrektur (einzeiliger Code) :-)
Beitrag von: Damian am 03 Januar 2014, 23:37:29
Bedingung müssen komplett geklammert sein in perl und Prozentzeichen hinter der Zahl 15 wird auch nicht klappen, daher:

define LuefterEin at +*00:20:00 {if ((ReadingsVal("FHT_4955","temperature",0)+0.1 < ReadingsVal("FHT_4955","desired-temp",0)) && (ReadingsVal("FHT_4955","actuator",0) > 15)) { fhem ("set Luefter on")}}


oder etwas kürzer mit IF:

define LuefterEin at +*00:20:00 IF ((FHT_4955:temperature + 0.1 < FHT_4955:desired-temp) && (FHT_4955:actuator > 15)) (set Luefter on)

Gruß

Damian
Titel: Antw:Erbitte Codekorrektur (einzeiliger Code) :-)
Beitrag von: Invers am 03 Januar 2014, 23:50:58
Vielen Dank, aber kann es denn überhaupt klappen? Der Actuator liefert ja 21% und nicht 21
Ich will baber nur die Zahlen vergleichen, damit auch grösser und kleiner geht.
Geschaltet soll halt werden, wenn actuator grösser 21% ist.
Hast du da noch einen Tipp?

Edit:
Hab schon probiert, es scheint so, als würde das % rausgefiltert werden.

Die kurze Variante hat er allerdings angemeckert, weil er wohl IF nicht kennt.:
2014.01.03 23:58:44 3: TestLuefterEin: Unknown command IF, try help.
Titel: Antw:Erbitte Codekorrektur (einzeiliger Code) :-)
Beitrag von: Damian am 04 Januar 2014, 00:22:50
Dann wirst du dich noch mit regulären Ausdrücken beschäftigen müssen:


define LuefterEin at +*00:20:00 {my $actuator = ReadingsVal("FHT_4955","actuator",0);; $actuator =~ /([\d.]*)%/;;  if ((ReadingsVal("FHT_4955","temperature",0)+0.1 < ReadingsVal("FHT_4955","desired-temp",0)) && ($1 > 15)) { fhem ("set Luefter on")}}



oder demnächst:

define LuefterEin at +*00:20:00 IF ((FHT_4955:temperature + 0.1 < FHT_4955:desired-temp) && (FHT_4955:actuator:([\d.]*)% > 15)) (set Luefter on)

Gruß

Damian
Titel: Antw:Erbitte Codekorrektur (einzeiliger Code) :-)
Beitrag von: Invers am 04 Januar 2014, 00:29:59
Mist. Da hast du wohl Recht. :-)
Ich werde mich wohl noch mit seeeeehhhhrrr vielem beschäftigen müssen. LOL

Nochmals Danke.
Titel: Antw:Erbitte Codekorrektur (einzeiliger Code) :-)
Beitrag von: gubbl am 04 Januar 2014, 18:26:29
Zitat von: Damian am 04 Januar 2014, 00:22:50

oder demnächst:

define LuefterEin at +*00:20:00 IF ((FHT_4955:temperature + 0.1 < FHT_4955:desired-temp) && (FHT_4955:actuator:([\d.]*)% > 15)) (set Luefter on)

Gruß

Damian

Aiaiai. Das sieht ja schick aus. Darf man das so deuten, dass diese Syntax mit einem der naechsten Updates kommt?  :)
Titel: Antw:Erbitte Codekorrektur (einzeiliger Code) :-)
Beitrag von: Damian am 04 Januar 2014, 22:15:03
Zitat von: gubbl am 04 Januar 2014, 18:26:29
Aiaiai. Das sieht ja schick aus. Darf man das so deuten, dass diese Syntax mit einem der naechsten Updates kommt?  :)

Per FHEM-Update erst mal nicht. Den Befehl IF kannst du aber schon heute haben:

http://forum.fhem.de/index.php/topic,17895.0.html

Gruß

Damian