FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Decki am 21 August 2016, 20:34:07

Titel: DoIf Syntax
Beitrag von: Decki am 21 August 2016, 20:34:07
Hallo zusammen,

ich krieg es nicht hin ein doif mit Abfragen:

(*[11:30] and ($month >= 5 && $month <= 9) and ReadingsVal(Aussentemperatur:temperature) > 16) (set RolloGWC,RolloBad,RolloCompZ oben) (set RolloErker*,RolloKueche,RolloSchlafZ,RolloBuegelZ Schatten)

Die Fehlermeldung: perl error in condition: *DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and ($month >= 5 && $month <= 9) and ReadingsVal(Aussentemperatur:temperature) > 16: syntax error at (eval 4101) line 1, near "*DOIF_time_once("

Was mach ich falsch? Hab schon viele Varianten getestet, && gegen and und viele doif Forumseinträge gelesen
Danke für eure Hilfe
Titel: Antw:DoIf Syntax
Beitrag von: Damian am 21 August 2016, 22:08:31
Zitat von: Decki am 21 August 2016, 20:34:07
Hallo zusammen,

ich krieg es nicht hin ein doif mit Abfragen:

(*[11:30] and ($month >= 5 && $month <= 9) and ReadingsVal(Aussentemperatur:temperature) > 16) (set RolloGWC,RolloBad,RolloCompZ oben) (set RolloErker*,RolloKueche,RolloSchlafZ,RolloBuegelZ Schatten)

Die Fehlermeldung: perl error in condition: *DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and ($month >= 5 && $month <= 9) and ReadingsVal(Aussentemperatur:temperature) > 16: syntax error at (eval 4101) line 1, near "*DOIF_time_once("

Was mach ich falsch? Hab schon viele Varianten getestet, && gegen and und viele doif Forumseinträge gelesen
Danke für eure Hilfe

Wie kommst du auf diese Syntax?

ReadingsVal(Aussentemperatur:temperature)

ReadingsVal ist eine Perlfunktion,  sie erwartet drei Parameter, die man mit Komma trennt.

In der commandref zu DOIF wirst du aber keine ReadingsVal-Funktion finden, da das Modul ohne Perlfunktionen für Readingangaben auskommt. Du brauchst nur eines der ersten Beispiele aus der commandref zu DOIF dir anzuschauen, dann solltest du direkt drauf kommen, wie du die Aussentemperatur abfragst:

Zitat:

ZitatKombinierte Ereignis- und Zeitsteuerung: define di_lamp DOIF ([06:00-09:00] and [sensor:brightness] < 40) (set lamp on) DOELSE (set lamp off)

Gruß

Damian
Titel: Antw:DoIf Syntax
Beitrag von: Decki am 23 August 2016, 09:59:17
Hallo Damian,

danke für deinen Hinweis. Ich testete schon alle Varianten, die ich im Forum gefunden habe.
Habe es nun so geändert:

(*[09:26] and ($month >= 5 && $month <= 9) and [Aussentemperatur:temperature] > 16) (set RolloGWC,RolloBad,RolloCompZ oben) (set RolloErker*,RolloKueche,RolloSchlafZ,RolloBuegelZ Schatten)


und bekomme als Meldung:
perl error in condition: *DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and ($month >= 5 && $month <= 9) and ReadingValDoIf($hash,'Aussentemperatur','temperature','','',AttrVal($hash->{NAME},'notexist',undef)) > 16: syntax error at (eval 15765) line 1, near "*DOIF_time_once("
Titel: DoIf Syntax
Beitrag von: KernSani am 23 August 2016, 10:07:20
Guck dir mal die Klammersetzung im Ausführungsteil nochmal an (und das Beispiel in der commandref dazu)

Edit: und das * am Anfang gehört da auch nicht hin...
Titel: Antw:DoIf Syntax
Beitrag von: Decki am 23 August 2016, 14:27:57
Hallo Damian,

danke, hab es nun kapiert:
([13:26] and ($month >= 5 && $month <= 9) and [Aussentemperatur:temperature] > 20) ((set RolloGWC,RolloBad,RolloCompZ oben) (set RolloErker*,RolloKueche,RolloSchlafZ,RolloBuegelZ Schatten))

Für andere Newbies hier die damit auch ein Problem haben.
Die Rolläden der Westseite sollen um 13:26 Uhr und Außentemperatur größer als 20°C und  in den Sommermonaten heruntefahren und die der Ostseite wieder hoch
Titel: Antw:DoIf Syntax
Beitrag von: KernSani am 23 August 2016, 14:46:51
Hast du auch do always gesetzt? Sonst macht er das genau einmal...
Titel: Antw:DoIf Syntax
Beitrag von: Damian am 23 August 2016, 15:35:34
Zitat von: Decki am 23 August 2016, 14:27:57
Hallo Damian,

danke, hab es nun kapiert:
([13:26] and ($month >= 5 && $month <= 9) and [Aussentemperatur:temperature] > 20) ((set RolloGWC,RolloBad,RolloCompZ oben) (set RolloErker*,RolloKueche,RolloSchlafZ,RolloBuegelZ Schatten))

Für andere Newbies hier die damit auch ein Problem haben.
Die Rolläden der Westseite sollen um 13:26 Uhr und Außentemperatur größer als 20°C und  in den Sommermonaten heruntefahren und die der Ostseite wieder hoch

Ich würde dir empfehlen  hierbei mit Zeitintervallen zu arbeiten. Denn, wenn die Temperatur erst nach 13:26 sich auf über 20 Grad erhöht bleiben deine Rollläden oben, daher:

([13:26-18:00] and ($month >= 5 && $month <= 9) and [Aussentemperatur:temperature] > 20) ((set RolloGWC,RolloBad,RolloCompZ oben, set RolloErker*,RolloKueche,RolloSchlafZ,RolloBuegelZ Schatten))

Gruß

Damian