FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: MiWe58 am 01 März 2015, 18:13:17

Titel: [gelöst] 99_myUtils.pm, "zarte Versuche"
Beitrag von: MiWe58 am 01 März 2015, 18:13:17
Hallo,
heute habe ich mich einmal getraut, eine eigene Prozedure zu schreiben.
Es funktioniert bereits, jedoch noch nicht ganz so, wie ich es mir erwarte.
Vielleicht hat jemand einen Tipp, wie es noch besser werden kann.

Die Aufgabe:
Eine Routine, die eine Nachricht über "Pushover" versendet.

gewünschter Aufruf aus fhem heraus:
{Pushover('Test\n Pushover - Aufruf')}


Die Routine in der 99_myUtils.pm
sub Pushover
{
  my $text = shift;
  my $ret = "";

  Log 1, "Pushover Text: $text";
#   $ret .= system ("curl -s -F 'token=xxx...' -F 'user=xxx...' -F 'message=Test\n PushOver - Aufruf' https://api.pushover.net/1/messages.json")

     $ret .= system ("curl -s -F 'token=xxx...' -F 'user=xxx...' -F '$text' https://api.pushover.net/1/messages.json")
}
1;


Die mit # auskommentierte Zeile zeigt den Aufruf der Pushover-Funktion in einer Form, wie die Nachricht richtig formatiert versendet wird
Die darunter stehende Zeile zeigt meinen Stand, dieses als Funktion umzusetzen:

Problem 1:
Der Parameter $text muss derzeit noch 'message=Test\n Pushover - Aufruf' enthalten.
Auf das 'message=' würde ich gerne verzichten. In der Funktion müsste dieser Teil dann zum Übergabestring ergänzt werden.

Problem 2:
Hinweis: \n wird in der auskommentierten Zeile richtig ausgeführt.
Beinhaltet der Übergabestring aus dem fhem-Aufruf \n, so wird es als Text dargestellt. Die Variante \\n führt auch nicht zum gewünschten Ergebnis

Vermutlich sehr typische Anfängerprobleme
Hat jemand einen Hinweis für die beiden Probleme?


Gruß
Michael
Titel: Antw:99_myUtils.pm, "zarte Versuche"
Beitrag von: nesges am 02 März 2015, 12:54:43
Zitat von: MiWe58 am 01 März 2015, 18:13:17
Problem 1:
Der Parameter $text muss derzeit noch 'message=Test\n Pushover - Aufruf' enthalten.
Auf das 'message=' würde ich gerne verzichten. In der Funktion müsste dieser Teil dann zum Übergabestring ergänzt werden.

Strings werden in Perl mit dem Punkt-Operator konkateniert. Alternativ kannst du Strings in doppelte Anführungszeichen setzen um enthaltene Variablen zu interpolieren. Zwei Möglichkeiten:

a) my $message = 'message='.$text.'\n PushOver -Aufruf';
b) my $message = "message=$text\n PushOver -Aufruf";

In Möglichkeit zwei wird allerdings auch das \n interpretiert, evtl. braucht Pushover das literal; in dem Fall müsstest du den Backslash durch Dopplung maskieren, d.h.: "\\n" statt "\n". Das könnte auch die Ursache für Problem 2 sein. Aber ich kenne das PushOver-Modul nicht und kann daher nur raten.

Die Variable $message baust du nach gleichem Schema in deinen curl-Aufruf ein (oder fügst $text dort direkt ein, so wie du es eigentlich eh schon tust).
Titel: Antw:99_myUtils.pm, "zarte Versuche"
Beitrag von: fhainz am 02 März 2015, 13:14:48
Oder du nimmst einfach das vorhandene Pushover Modul.
http://www.fhemwiki.de/wiki/Pushover
Titel: Antw:99_myUtils.pm, "zarte Versuche"
Beitrag von: MiWe58 am 02 März 2015, 15:32:29
Die Nutzung des Moduls ist natürlich noch besser!

Vielen Dank für den Hinweis.