Escapen in Perlbefehlen: Unterschied zwischen den Versionen
Krikan (Diskussion | Beiträge) K (Hinweis: Escapen bei Bearbeitung über Objektdetails grds. nicht notwendig) |
K (Vorlage Link2CmdRef) |
||
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Randnotiz|RNTyp=[g|Info|RNText=Wird die [[Konfiguration| fhem.cfg]] -wie empfohlen- über das "Befehl-Eingabefenster" und die "Objektdetails" bearbeitet, | {{Randnotiz|RNTyp=[g|Info|RNText=Die Verdopplung der ; bei Perl-Einzeilern ist nur bei der Direktbearbeitung der fhem.cfg notwendig. Wird die [[Konfiguration| fhem.cfg]] -wie empfohlen- über das "Befehl-Eingabefenster" und die "Objektdetails" bearbeitet, ist die hier angegebene Anzahl an Semikola daher jeweils zu halbieren (Siehe auch [http://fhem.de/Heimautomatisierung-mit-fhem.pdf Heimautomatisierung mit Fhem V. 4.0, S. 38]).}} | ||
Um in FHEM auch komplexere Aufgaben lösen zu können, lassen sich Perl "Einzeiler" einbinden. | Um in FHEM auch komplexere Aufgaben lösen zu können, lassen sich Perl "Einzeiler" einbinden. | ||
Diese werden mit geschweiften Klemmern gekennzeichnet: { } | Diese werden mit geschweiften Klemmern gekennzeichnet: { } | ||
Zeile 33: | Zeile 33: | ||
[[Heizung mit Bewegungsmelder steuern]], [[Trick der Woche#Mehrere Geräte zugleich schalten]] | [[Heizung mit Bewegungsmelder steuern]], [[Trick der Woche#Mehrere Geräte zugleich schalten]] | ||
Weiteres und Details hier: | Weiteres und Details hier: {{Link2CmdRef|Anker=perl|Label=Perlsektion in der FHEM commandref}} | ||
[[Kategorie:HOWTOS]] | [[Kategorie:HOWTOS]] |
Aktuelle Version vom 31. Januar 2018, 12:37 Uhr
Um in FHEM auch komplexere Aufgaben lösen zu können, lassen sich Perl "Einzeiler" einbinden. Diese werden mit geschweiften Klemmern gekennzeichnet: { } Innerhalb dieser Perl Einzeiler können dann Perl Funkion wie Wochentagsabfragen, if/else statements, Vergleiche etc genutzt werden.
Innerhalb der geschweiften Klammern kann man mit der Funktion fhem() Strings an Fhem zurück geben, die dann Fhem als Befehl ausführt.
In Perl werden Kommandos durch eine ; abgetrennt.
In den Perl Einzeilern innerhalb Fhem müssen diese "Escaped" (letztlich verdoppelt) werden.
{fhem ("set Lampe1 on ;; set hzg_wz desired-temp 21")}
Dies führt mitunter zu etwas unübersichtlichen Situationen. Soll in einem Perl Einzeiler zunächst ein Fhem Befehl ausgeführt werden, und dann per Fhem "define" zu z.b. einem späteren Zeitpunkt eine Kette weiterer Befehle, so kann es notwendig sein, doppelt zu escapen:
Angenommen, es soll innerhalb eines Perl Einzeiler folgendes geschehen:
- Lampe1 soll sofort angeschaltet werden
- Lampe2 soll sofort angeschaltet werden.
und ausserdem soll mittels "define ... at +01:00 in einer Stunde
- Lampe3 angeschaltet werden.
- Lampe4 angeschaltet werden.
so muss das Konstrukt in etwa so aussehen:
{fhem ("set Lampe1 on ;; set Lampe2 on ;; define LampeSpaeterAn at +01:00 set Lampe3 on ;;;; set Lampe4 on")}
Vergisst man das doppelte escapen zwischen Lampe3 und Lampe4 ergibt sich folgendes
{fhem ("set Lampe1 on ;; set Lampe2 on ;; define LampeSpaeterAn at +01:00 set Lampe3 on ;; set Lampe4 on")}
Dies würde als Folge haben, Lampe1, Lampe2 und Lampe 4 sofort eingeschaltet würden und nur Lampe3 später angeschaltet würde.
Ein Beispiel zur Anwendung des Doppelten Escapens finde sich hier:
Heizung mit Bewegungsmelder steuern, Trick der Woche#Mehrere Geräte zugleich schalten
Weiteres und Details hier: Perlsektion in der FHEM commandref