FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: TWART016 am 21 Januar 2019, 16:07:33

Titel: Perl Code in Variable
Beitrag von: TWART016 am 21 Januar 2019, 16:07:33
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
Titel: Antw:Perl Code in Variable
Beitrag von: Ellert am 21 Januar 2019, 17:46:04
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")'};
Titel: Antw:Perl Code in Variable
Beitrag von: TWART016 am 01 März 2019, 10:55:12
Wie kann ich dann in der Nachricht eine Variable mitgeben?
Titel: Antw:Perl Code in Variable
Beitrag von: Ellert am 01 März 2019, 13:03:48
{$text = 'SendMail("FHEM", '.$nachricht.', "name\@outlook.de")'};
Titel: Antw:Perl Code in Variable
Beitrag von: TWART016 am 01 März 2019, 13:23:15
Da kommt ein Fehler:
syntax error at (eval 3062822) line 28, near "$readingSummary', "name\@outlook.de")}'"

{$text = '{SendMail("FHEM", '.$readingSummary', "name\@outlook.de")}'};
Titel: Antw:Perl Code in Variable
Beitrag von: amenomade am 01 März 2019, 16:09:31
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.
Titel: Antw:Perl Code in Variable
Beitrag von: TWART016 am 01 März 2019, 16:35:52
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.
Titel: Antw:Perl Code in Variable
Beitrag von: Otto123 am 01 März 2019, 16:45:59
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 (https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html), 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
Titel: Antw:Perl Code in Variable
Beitrag von: amenomade am 01 März 2019, 17:59:53
$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...