FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: ujaudio am 08 Januar 2016, 22:49:28

Titel: [gelöst] DOIF Zeitvzögerung
Beitrag von: ujaudio am 08 Januar 2016, 22:49:28
Aus der Commandref stammt
Beispieldefinition bei mehreren DO-Blöcken mit mehreren Sequenzen:

DOIF (Bedingung1)
(set ...) ## erster Befehl der ersten Sequenz soll um eine Sekunde verzögert werden
(set ...) ## zweiter Befehl der ersten Sequenz soll um 2 Sekunden verzögert werden
DOELSE (Bedingung2)
(set ...) ## erster Befehl der zweiten Sequenz soll um 3 Sekunden verzögert werden
(set ...) ## zweiter Befehl der zweiten Sequenz soll um 0,5 Sekunden verzögert werden

attr <DOIF-modul> wait 1,2:3,0.5


Frage 1: Muss es nicht DOELSEIF heißen, wenn noch eine 2. Bedingung folgt?
Frage 2: Wie muss der Code aussehen, wenn ich nach Erfüllen einer Bedingung nur mehrere Befehle zeitverzögert haben will? Ich bekomme immer eine Fehlermeldung wenn ich mehrere (set..)(set..) habe, aber kein DOELSE oder DOELSEIF. Das wait-Attribut wäre dann auch nur eine Liste mit Komma ohne Doppelpunkt.
Titel: Antw:DOIF Zeitvzögerung
Beitrag von: Amenophis86 am 09 Januar 2016, 00:37:55
1: Richtig, da kannst du Damian mal drauf hinweisen
2: Wie sieht denn deine Definition aus und welcher Fehler kommt?

Beispiel:

Define Test DOIF ([10:00-11:00]) (set Test2 on) (set Test3 on)
Attr Test wait 2,3


Hier wird nach 2 sek Test2 an geschaltet und nach 3 sek Test3 an. Wichtig ist, dass bei wait kein Leerzeichen in der Liste ist und ein . für halbe Zeiten genommen wird.
Titel: Antw:DOIF Zeitvzögerung
Beitrag von: ujaudio am 09 Januar 2016, 15:19:03
Ich habe mal dein Beispiel auf meine vorhandenenNamen/Geräte angepasst und es gibt keine Fehlermeldung mehr. Da ich im DEF-Fenster arbeite muss ich zwar ein Restart machen (oder gibt es einen anderen Trick?), aber das läuft nun fehlerfrei durch. Damit lautet mein DOIF aus fhem.cfg kopiert:
define tr_Brunnen DOIF ([08:00-22:00])\
  (set tr_BrunnenBaum onb)(set tr_BrunnenBaum offb)
attr tr_Brunnen repeatcmd 3600
attr tr_Brunnen room Terrasse
attr tr_Brunnen wait 0,1800

Ich will aber, dass es nicht im Januar und Dezember passiert. Ich habe deshalb folgenden Ausdruck hinter DOIF:
({$month}<>11 && {$month}<>0 && [08:00-22:00])
und die Fehlermeldung bei Restart lautet:
Error messages while initializing FHEM:
configfile: tr_Brunnen DOIF: no trigger in condition: {$month}<>11 && {$month}<>0statefile: Please define tr_Brunnen first
Please define tr_Brunnen first
Please define tr_Brunnen first

Aufgrund des Fehlers wird tr_Brunnen nicht angelegt, deshalb die Folgefehler.
In einem anderen DOIF macht der Code
(({$month}==11 || {$month}==0) && ([05:30-08:30] || [15:30-22:30]))
keine Probleme.

Nachtrag: Ich könnte mich hinterrücks in den Popo beißen! Dutzendmal den Code angeschaut, bevor ich überhaut den Thread eröffnet habe, durch die Hinweise nochmals alles von vorne gemacht - und wieder war eine Klammer zuviel schuld. Das ärgert mich wirklich, weil man durch solche Fehler die Gemeinschaft belastet - eigentlich unnötigerweise. Insofern: Entschuldigung.
Titel: Antw:[Gelöst] DOIF Zeitvzögerung
Beitrag von: Amenophis86 am 09 Januar 2016, 15:40:34
Kein Problem, helfen doch gerne. Aber daran siehst du, dass es immer wieder hilfreicher ist, wenn man den Code mit seinem Problem postet und nicht nur das Problem beschreibt ;)
Titel: Antw:DOIF Zeitvzögerung
Beitrag von: ujaudio am 10 Januar 2016, 10:29:07
Heute Morgen im Log:
perl error in condition: DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") && $month <> 12 && $month <> 1: syntax error at (eval 8150) line 1, near "<>"
Die Definition meines DOIF ist:
([08:00-22:00] && $month <> 12 && $month <> 1)
  (set tr_BrunnenBaum onb)(set tr_BrunnenBaum offb)


Klassischer Fehler von Programmieranfängern: in Perl heißt es !=
Damit wird es also funktionieren: :)
([08:00-22:00] && $month != 12 && $month != 1)
  (set tr_BrunnenBaum onb)(set tr_BrunnenBaum offb)