FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: chris1284 am 30 Dezember 2016, 10:34:13

Titel: DOIF at definieren - Syntaxfehler bei Zeitangabe
Beitrag von: chris1284 am 30 Dezember 2016, 10:34:13
moin,

ich versuche gerade folgendes at im doif zu erstellen:

([str_windows_sen] eq "open" and defined $defs{'at_str_windows_opentimer')(
  delete at_str_windows_opentimer,
  define at_str_windows_opentimer at +00:10:00 set fire01 ttsMsg 'Ein Fenster steht seit 10 Minuten offen!',
  attr at_str_windows_opentimer room at )
DOELSEIF ([str_windows_sen] eq "open" and !defined $defs{'at_str_windows_opentimer')(
  define at_str_windows_opentimer at +00:10:00 set fire01 ttsMsg 'Ein Fenster steht seit 10 Minuten offen!',
  attr at_str_windows_opentimer room at )
DOELSEIF ([str_windows_sen] eq "closed" and defined $defs{'at_str_windows_opentimer'}) ( delete at_str_windows_opentimer )


er stört sich immer an der zeitangabe. wie muss ich diese escapen(?) damit doif das at erstellen kann?

EDIT:wenn man fhem befehle in {} packt kanns ja nicht gehen... >:(
Titel: Antw:DOIF at definieren - Syntaxfehler bei Zeitangabe
Beitrag von: Per am 30 Dezember 2016, 11:31:49
Warum überhaupt "escapen", lass die geschweiften Klammern weg, du bist doch im Fhem.
Und: statt delete at + define at nimm defmod at
Dann kannst du dir auch die Abfrage nach der Existenz des Timers schenken.
Titel: Antw:DOIF at definieren - Syntaxfehler bei Zeitangabe
Beitrag von: Damian am 30 Dezember 2016, 11:34:57
noch einfacher:

statt

!defined $defs{'at_str_windows_opentimer')(define at_str_windows_opentimer at ....

verwenden:

defmod at ...
Titel: Antw:DOIF at definieren - Syntaxfehler bei Zeitangabe
Beitrag von: Per am 30 Dezember 2016, 11:56:52
Rein als DOIF:

([str_windows_sen] eq "open") (set fire01 ttsMsg 'Ein Fenster steht seit 10 Minuten offen!')
DOELSE

attr wait 600:0

Titel: Antw:DOIF at definieren - Syntaxfehler bei Zeitangabe
Beitrag von: chris1284 am 30 Dezember 2016, 12:01:29
Zitat von: Damian am 30 Dezember 2016, 11:34:57
defmod at ...

nee, da sie structure ja so lange open ist wie ein window open ist. doif triggert nur einmal auf open. somit dürfte es die situation, dass das at existiert, eigentlich nie eintreten. somit würd edefmode denke ich stets auf einen fehler laufen.

@Per: ein paar sekunden vor dir hatte ich die lösung oben als EDIT gepostet... die klammern waren der grund und ein überbleibsel meines ersten versuchesn mit perl-befehlen
Titel: Antw:DOIF at definieren - Syntaxfehler bei Zeitangabe
Beitrag von: Per am 30 Dezember 2016, 12:10:35
Zitat von: chris1284 am 30 Dezember 2016, 12:01:29somit würd edefmode denke ich stets auf einen fehler laufen.
defmod heisst define or modify, je nachdem, ob das Device schon exsistiert oder nicht. Ganz automatisch.

Zitat von: chris1284 am 30 Dezember 2016, 12:01:29@Per: ein paar sekunden vor dir hatte ich die lösung oben als EDIT gepostet...
Hatte ich gelesen, aber ich hatte ja noch mehr geschrieben ;). Und Editieren wollte ich nicht.
Titel: Antw:DOIF at definieren - Syntaxfehler bei Zeitangabe
Beitrag von: chris1284 am 30 Dezember 2016, 12:29:45
ich ging davon aus das es die definition modifiziert aber nicht das es auch nur definiert wenn kein mod möglich ist weil das device nicht da ist
Titel: Antw:DOIF at definieren - Syntaxfehler bei Zeitangabe
Beitrag von: chris1284 am 30 Dezember 2016, 12:34:16
drüber nachgedacht macht attr wait natürlich am meisten sinn, dann brauchts den doelse doch aber auch nicht oder?
er müsste doch dann bei closed meldung das warten abbrechen oder?
Titel: Antw:DOIF at definieren - Syntaxfehler bei Zeitangabe
Beitrag von: Per am 30 Dezember 2016, 12:56:25
Zitat von: chris1284 am 30 Dezember 2016, 12:34:16
drüber nachgedacht macht attr wait natürlich am meisten sinn, dann brauchts den doelse doch aber auch nicht oder?
er müsste doch dann bei closed meldung das warten abbrechen oder?
Ohne DOELSE hat er keinen zweiten Zweig, in den er springen kann zum Abbrechen.
Titel: Antw:DOIF at definieren - Syntaxfehler bei Zeitangabe
Beitrag von: chris1284 am 30 Dezember 2016, 13:56:36
offenbar doch. ich bekomme wenn innerhalb des wait closed wird keine nachricht, somit bricht er das warte/ausführen ab. doelse scheitn man somit nicht zu brauchen
Titel: Antw:DOIF at definieren - Syntaxfehler bei Zeitangabe
Beitrag von: Damian am 30 Dezember 2016, 15:21:53

Aus der Commandref

Zitat... Wenn das Attribut do always nicht gesetzt ist, wird dagegen bei Definitionen mit einer einzigen Bedingung, wie im obigen Beispiel, der Zustand "cmd_2" bei Nichterfüllung der Bedingung automatisch gesetzt. Ohne diesen automatischen Zustandswechsel, wäre ansonsten die Definition nicht sinnvoll, da der Zustand "cmd_1" ohne do always nur ein einziges Mal ausgeführt werden könnte.
Titel: Antw:DOIF at definieren - Syntaxfehler bei Zeitangabe
Beitrag von: Per am 30 Dezember 2016, 16:30:16
Wenn das mit wait auch geht, passt es ja. So wurden aus 8 Zeilen 1,5 :D