[gelöst] 99_myUtils.pm, "zarte Versuche"

Begonnen von MiWe58, 01 März 2015, 18:13:17

Vorheriges Thema - Nächstes Thema

MiWe58

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
Devices: RasPi V, HomeMatic, PICCU, Modbus, Heliotherm-Wärmepumpe, SMA PV-Anlage, Easee Laderoboter
Steuerung: Rollos, Beleuchtung, Heizung-Heliotherm, Heizung-Heizkreise, PV-Anlage-Eigenverbrauch, Alarm, Zugang, Wasser

nesges

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).

fhainz


MiWe58

Die Nutzung des Moduls ist natürlich noch besser!

Vielen Dank für den Hinweis.
Devices: RasPi V, HomeMatic, PICCU, Modbus, Heliotherm-Wärmepumpe, SMA PV-Anlage, Easee Laderoboter
Steuerung: Rollos, Beleuchtung, Heizung-Heliotherm, Heizung-Heizkreise, PV-Anlage-Eigenverbrauch, Alarm, Zugang, Wasser