Klammerebenen: Unterschied zwischen den Versionen

Aus FHEMWiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
K (BerndArnold verschob Seite Klammerebnen nach Klammerebenen: Name korrigiert; nur eine Seite (Notify) verweist hierauf)

Version vom 22. Dezember 2014, 17:08 Uhr

Nachdem das Thema im Forum zum xten mal aufkam, hier ein schneller Stub zum Thema Klammern und Mischen von Perl und Fhem Kommandos.

Ich mach das später schön.

Fhem kennt einges an Befehlen um Aktoren zu Schalten und auf Dinge zu reagieren. Es kann aber insbesondere keine komplexeren Operationen wie "if...else". Will man diese nutzen, muss man Fhem mit Perl-Einzeilern versehen.

Die Perl Ebene wird mittels geschweifter Klammern aufgerufen: { }

INNERHALB von Perlausdrücken will man aber oft doch Fhem Kommandos abgeben. Dies macht man indem man Perl sagt, das bestimmte Kommandos an Fhem übergeben werden sollen. Dies macht man durch den Ausdruck: { fhem(" ")}. Fhem Befehle innerhalb von Perlausdrücken müssen "Escaped" werden (verdoppelt). Mehr dazu hier: Escapen_in_Perlbefehlen.

Ein kompletter Ausdruck mit Perl und Fhem gemischt hat daher diese äussere Form:

define Name notify Ereignis {ab hier Perl-Code { fhem(" hier Fhem Kommandos, escapen nicht vergessen ")} }


Konkretes Beispiel: Es soll ein Garagentor geöffnet werden, aber nur wenn es vorher auch wirklich zu war. Dazu wird mittels des Perl Befehls "if" geprüft ob das Tor zu ist. Wenn ja (Value("Einfahrt") eq "Closed"), dann wird der Toraktor eingeschaltet, ausserdem einen Kontrollleuchte.

define act_on_Einfahrt_AUF notify Einfahrt_AUF { if (Value("Einfahrt") eq "Closed") { fhem("set Tor_Aktor on ;; set Kontrollampe on")} }