Hauptmenü

Perl Code in Variable

Begonnen von TWART016, 21 Januar 2019, 16:07:33

Vorheriges Thema - Nächstes Thema

TWART016

Hallo,

ich würde gerne Perl Code in eine Variable übergeben und später aufrufen:
if (ReadingsVal("Smart_Home_Calview",$readingSummary,"") eq "test456") {$text = "SendMail("FHEM", "Nachricht", "name\@outlook.de")"};
Später soll dann der Perl Code in einem at aufgerufen werden.
fhem ("defmod Name at Uhrzeit $text");

Allerdings wird in das At nur der ausgeführt Code angezeigt und nicht der SendMail Befehl.
-1


Gruß
TWART016

Ellert

Du müsstest die inneren Anführungszeichen maskieren \" oder einfache Anführungszeichen verwenden ', da Du zwei Ebenen hast.
{$text = 'SendMail("FHEM", "Nachricht", "name\@outlook.de")'};

TWART016

Wie kann ich dann in der Nachricht eine Variable mitgeben?

Ellert

{$text = 'SendMail("FHEM", '.$nachricht.', "name\@outlook.de")'};

TWART016

Da kommt ein Fehler:
syntax error at (eval 3062822) line 28, near "$readingSummary', "name\@outlook.de")}'"

{$text = '{SendMail("FHEM", '.$readingSummary', "name\@outlook.de")}'};

amenomade

#5
Versuch mal die Logik zu verstehen. "." ist zur Konkatenation von Strings
Dann musst Du 'String' . $variable . 'String' schreiben, wie Ellert es gemacht hat, und Du nicht.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

TWART016

Das habe ich gemacht.

{$text = '{SendMail('FHEM', 'test' .$readingSummary .'test2', 'name\@outlook.de')}'};

Trotzdem der Fehler
Bad name after FHEM' at (eval 3116221) line 28.

Otto123

#7
Zitat{$text = '{SendMail('FHEM', 'test' .$readingSummary .'test2', 'name\@outlook.de')}'};
Am Ende hast Du alles nochmal in ' ' stehen, da werden keine Variablen aufgelöst.
Mit "" kann das gehen. Allerdings bei der Kette bin ich unsicher.

Ich habe vor allem noch nicht verstanden wann den wirklich die Variable aufgelöst werden soll?
Beim Schreiben nach $text ?
Oder beim Befehl defmod?

Ich glaube Du machst es Dir sehr schwer. Ich hatte mir dazu mal was aufgeschrieben, das nehme ich immer mal her. Stelle dann aber fest ich habe auch nicht alle Varianten erfasst.

Ich rate Dir: Nimm die FHEM Kommandozeile, dort kannst Du in {Perl Befehle} Perl Befehle ausführen. Nimm kurze Strings und taste Dich vorwärts. Das hilft glaub mir.

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

amenomade

$text = '{SendMail('FHEM', 'test' .$readingSummary .'test2', 'name\@outlook.de')}'
Langsam und Schritt für Schritt

'{SendMail('Das ist ein String. OK
FHEMDas ist nichts, Perl versteht es nicht
', 'Das ist das nächste String. OK
testDas ist nichts. Perl versteht es nicht
' .$readingSummary .'Das ist ein String. OK, aber da single quotes und nicht double quotes wird die Variabel nicht esetzt
test2Das ist nichts. Perl versteht es nicht
', 'Das ist ein String. OK
name\@outlook.deDas ist nichts. Perl versteht es nicht
')}'Das ist ein String. OK, aber Perl fehlen einige schliessenden Zeichen...
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus