DOIF: Wann Komma, wann Semikolon?

Begonnen von dero, 09 Oktober 2016, 13:43:08

Vorheriges Thema - Nächstes Thema

dero

Hi,

ich stelle gerade viele Sachen auf DOIF um. Ich habe gesehen, dass man mehrere Befehle sowohl mit Komma als auch Semikolon trennen kann.

Wann nehme ich was und warum?

Danke!

dero

Otto123

Hallo Dero,

sthet doch aber eindeutig in der commandref?
ZitatAngaben im Ausführungsteil:   back

Der Ausführungsteil wird immer, wie die Bedingung, in runden Klammern angegeben. Es werden standardmäßig FHEM-Befehle angegeben, wie z. B.: ...(set lamp on)

Sollen mehrere FHEM-Befehle ausgeführt werden, so werden sie mit Komma statt mit Semikolon angegeben ... (set lamp1 on, set lamp2 off)

Falls ein Komma nicht als Trennzeichen zwischen FHEM-Befehlen gelten soll, so muss der FHEM-Ausdruck zusätzlich in runde Klammern gesetzt werden: ...((set lamp1,lamp2 on),set switch on)

Perlbefehle müssen zusätzlich in geschweifte Klammern gesetzt werden: ... ({system ("wmail Peter is at home")})

Mehrere Perlbefehle hintereinander werden im DEF-Editor mit zwei Semikolons angegeben: ...({system ("wmail Peter is at home");;system ("wmail Marry is at home")})

FHEM-Befehle lassen sich mit Perl-Befehlen kombinieren: ... ({system ("wmail Peter is at home")}, set lamp on)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

dero

Ich hatte nur irgendwo gelesen, dass man bei sleep ein Semikolon nehmen soll...?

Otto123

Das hat nix mit DOIF zu tun, Wenn hinter sleep nichts mehr kommt, auch kein semikolon -> dann wirkt es blockierend!
http://fhem.de/commandref_DE.html#sleep

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

dero

Okay verstehe. Aber warum nimmt man bei DOIF dann nicht ein Semikolon statt eines Kommas?

Otto123

Du meinst warum DOIF Kommas als Trenner nimmt zwischen Befehlen nimmt? Das musst Du Damian (Modulauthor) fragen, oder es ist hier schon mal irgendwo beantwortet worden.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ellert

Zitat von: dero am 09 Oktober 2016, 15:26:28
Okay verstehe. Aber warum nimmt man bei DOIF dann nicht ein Semikolon statt eines Kommas?
Im DOIF werden auf der FHEM-Ebene ausschliesslich Kommata als Befehlstrenner verwendet.
Das FHEM sleep gilt im DOIF als überholt, dafür gibt es das Attribut wait, unter Anderem wegen des erforderlichen Semikolons.
Das Komma wurde gewählt, damit die Verdoppelung des Befehlstrenner entfallen kann.

dero

Ja, das wait habe ich schon gesehen. Was passiert eigentlich, wenn sich der DOIF-Zustand während der Wait-Phase ändert? Wird zuende gewartet und weitergemacht oder abgebrochen?

Ellert

Standardmässig wird abgebrochen, das kann man aber verhindern, indem die alternativen Bedingungen erst wahr werden können, wenn der Wait-Zweig beendet ist, z.B. mit ... and [$SELF] eq "cmd_x"