Syntax von if-Bedingung im Befehlsteil eines DOIF

Begonnen von MichaelO, 23 Oktober 2015, 11:45:53

Vorheriges Thema - Nächstes Thema

MichaelO

Hallo,

ich habe ein DOIF, welches im Prinzip funktioniert. Es sollen zu bestimmten Zeiten 2 Dinge gemacht werden, wobei eines davon noch an eine Bedingung geknüpft ist. Ich wollte nun der Übersichtlichkeit halber nicht 2 DOELSEIF schreiben in denen ja jedesmal der Teil der Zeit identisch ist, sondern nur einmal den Teil mit der Zeit und dann im Befehlseil des DOIF die Bedingung prüfen.

hier ein Teil der Def:
([{sunrise("REAL",0,"07:30","08:30")}|7] or [{sunrise("REAL",0,"05:00","05:30")}|8])
     (set WZ_Rolladen position 0,
     {if (Value ("Schlafbesuch") eq "nein")
          {fhem("set GZ_Rolladen position 0")}
     })


Das if hab ich so geschrieben, weil ich es aus Beispielen raus gelesen hab. Dann habe ich es einfach im DOIF verwendet. Nun scheint (wenn ich andere Postings richtig interpretiere) dies aber eine Mischung von fhem und perl zu sein.

Ist diese Schreibweise so OK, oder gibt es einen "besseren" Syntax, das Gewünschte auszudrücken?

Danke
Michael

Ellert

Es gibt das Perl if es ist klein geschrieben. Dann gibt es ein FHEM IF, das ist groß geschrieben. es vereinfacht die Syntax.

siehe Commandref http://fhem.de/commandref_DE.html#IF

MichaelO

Zitat von: Ellert am 23 Oktober 2015, 12:24:19
Es gibt das Perl if es ist klein geschrieben. Dann gibt es ein FHEM IF, das ist groß geschrieben. es vereinfacht die Syntax.

siehe Commandref http://fhem.de/commandref_DE.html#IF

Danke, das hatte ich dann so richtig gelesen. Nur noch eine Frage. Das perl-if wird ja nach dem Komma als zweiter Befehl im DOIF in {} geschrieben. Wie muss ich das dann mit dem fhem-IF machen? Einfach (set Blabla on,IF (Gedoens) (Anweisung)) oder muss das noch speziell geklammert werden?

Ellert

ZitatIF (<Bedingung>) (<FHEM-Kommandos1>) ELSE (<FHEM-Kommandos2>)
gleich nach dem Komma ohne Klammern.

micha0815

Hallo, ich habe hierzu auch noch eine Frage. Stehe hier bischen auf dem Schlauch.

Ich will mir einen Text zusammenbauen, der mir morgens das Wetter vorliest. Das DOIF wird getriggert, wenn ich morgens ein Licht anschalte. Aber irgendwie bekomme ich das mit dem IF Block im DOIF Ausführungsteil nicht hin.
Damit das Modul nur einmal pro Tag ausgeführt wird habe ich noch das DOELSE um das Modul nachts zurückzusetzen.

Hier meine Definition:

defmod di_testtts DOIF ([05:30-09:00] and ["^0_ku_li_:on"])\
(\
  setreading $SELF tts Guten Morgen. Die Außentemperatur beträgt [wetterstation1:temperature:d0] Grad,\
  IF ([wetterstation1:isRaining] eq "yes") (\
    setreading $SELF tts [$SELF:tts] und es regnet\
  ) ELSE (\
    setreading $SELF tts [$SELF:tts] und es regnet nicht\
  )\
  setreading $SELF tts [$SELF:tts].\
  set MyTTS tts [$SELF:tts]\
)\
DOELSEIF ( [23:55] )\
(\
  setreading $SELF tts ""\
)
attr di_testtts readingList tts

Ellert

#5
setreading $SELF tts [$SELF:tts].\ es fehlt ein Komma davor und der Punkt sollte auch eines sein.

Ich würde den Text in einer Perl-Funktion in der 99_myUtils erstellen, falls Du mehrere bedingte Textabschnitte zusammensetzt oder DOIF im Perl-Mode nuztzen.

Ein Beispiel mit 99_myUtils gibt es hier: https://wiki.fhem.de/wiki/Automatisierung#Beispiel_einer_Automatisierungsaufgabe

micha0815

Danke, jetzt funktioniert es.
Es lag an dem fehlenden Komma nach dem IF Block.