Perl: Variablen verarbeiten (PostMe per Jabber befüllen)

Begonnen von ThomasMagnum, 25 Januar 2017, 09:41:35

Vorheriges Thema - Nächstes Thema

ThomasMagnum

Liebe Fhem User,

für meine Programierversuche in Perl bräuchte ich mal einen Hinweis.

In meiner 99_myUtils.pm habe ich mir auf Basis des Wiki EIntrages (https://wiki.fhem.de/wiki/FHEM_spricht_jabber) einige Kommandos gebastelt mit denen ich mir per Jabber Nachricht Stati von Fhem abfragen kann bzw. verschiedene Aktionen anstossen kann.
So lass ich mir z.B. Temperaturen zusenden, schalte mein Gäste WLan an / aus und noch einiges mehr.

Bei meinem aktuellen Vorhaben das Modul "PostMe" zu nutzen und ebenfalls via Jabber zu bedienen komme ich aber an meine Grenzen.

Folgendes möchte ich umsetzen:
Durch Eingabe eines "Codewortes" möchte ich die hinterlegte PostMe Notiz mit Einträgen befüllen bzw. ändern und streichen.
Der normale Aufruf zum Befüllen hierfür lautet beispielsweise "set PostIt add Einkauf Haribo". Dieser Aufruf fügt "Haribo" der Notiz "Einkauf" hinzu.

Ich möchte dies per Jabber Nachricht an meinem System erreichen. Durch Eingabe von "eink+ Haribo" soll dies der Liste hinzugefügt werden.

Hier ein Ausschnitt meiner 99_myUtils.pm mit dem Beispiel wie mir die Notiz "Einkauf" zugesendet wird:

sub
sendJabberAnswer()
{
  my $lastsender=ReadingsVal("FHEM_Schichtel","LastSenderJID","0");
  my $lastmsg=ReadingsVal("FHEM_Schichtel","LastMessage","0");
  my @cmd_list = split(/\s+/, trim($lastmsg));
  my $cmd = lc($cmd_list[0]);
  # erstes Element entfernen
  shift(@cmd_list);
 
# Einkaufsliste melden
  if($cmd eq "einkauf") {
    $newmsg.= "Aktuelle Einkaufsliste:";
$newmsg.="\n";
$newmsg.="".ReadingsVal("Notizen", "postme01Cont", "---")."";
    $newmsg.="\n";
  }


Das funktioniert einwandfrei uns sendet mir die aktuelle Einkaufsliste zurück.

Mein Versuch das Befüllen umzusetzen:

# FHEM-Einkausfsliste befüllen
  if($cmd eq "eink+") {
    my $cmd_tail = join(" ",@cmd_list);
    $newmsg.=fhem('set Notizen add Einkauf $cmd_tail');
}


Was passiert:
Es wird nach Eingabe von "eink+ Haribo" nicht das Produkt "Haribo" der Einkaufsliste hinzugefügt sondern das "$cmd_tail". Anhand des Befehlsaufbaus so weit auch nachvollziehbar.

Meine Frage nun wie kann ich umsetzen dass ich das eigentlich hinzuzufügende Produkt "Haribo" der Liste hinzufüge?
Benötige ich hier noch eine weitere Variable und wie müsste ich diese hier einbauen. Da habe ich leider den Faden verloren und komme auch durch Studium der Perlhilfen nicht wirklich weiter.

Es wäre sehr nett, wenn mir hier jemand weiterhelfen könnte.

Gruß, Thomas

rudolfkoenig

In einem '' (2* single-quote) String werden keine Variablen ersetzt. In einem "" (2* double-quote) String schon.

ThomasMagnum

Hallo Rudolf,

vielen Dank, das wars.

Mit dem Teil $newmsg.=fhem("set Notizen add Einkauf $cmd_tail") funktioniert es nun.

Gruß, Thomas