Hauptmenü

DoIf Syntax

Begonnen von Decki, 21 August 2016, 20:34:07

Vorheriges Thema - Nächstes Thema

Decki

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
Raspi 2 im Schaltschrank, USB IR Lesekopf am EHz21, Gaszähler mit Reedkontakt, Jeelink,  16 FS20 Aktoren,  3 Ufos für LED, 11 FS20 Rolladenaktore, AMAD 4.0 mit Sprachausgabe, Esp12 mit EspEasy

Damian

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

Decki

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("
Raspi 2 im Schaltschrank, USB IR Lesekopf am EHz21, Gaszähler mit Reedkontakt, Jeelink,  16 FS20 Aktoren,  3 Ufos für LED, 11 FS20 Rolladenaktore, AMAD 4.0 mit Sprachausgabe, Esp12 mit EspEasy

KernSani

#3
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...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Decki

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
Raspi 2 im Schaltschrank, USB IR Lesekopf am EHz21, Gaszähler mit Reedkontakt, Jeelink,  16 FS20 Aktoren,  3 Ufos für LED, 11 FS20 Rolladenaktore, AMAD 4.0 mit Sprachausgabe, Esp12 mit EspEasy

KernSani

Hast du auch do always gesetzt? Sonst macht er das genau einmal...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Damian

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