Hi.
Hab folgendes in meiner fhem.cfg stehen
define NameToAwtrix notify .*:(ring|disconnect) {NameToAwtrix("$NAME")}
Dies ruft falls meine Fritzbox klingelt die subroutine NameToAwtrix auf.
In der 99_myUtils.pm steht dann folgendes:
#NameToAwtrix
sub NameToAwtrix($)
{
my ($device) = @_;
my $event = ReadingsVal("$device","event","-1");
my $caller = ReadingsVal("$device","external_name","-1");
if ($state eq "ring") {
my $string = {"force":true,"icon":408,"text":"$caller"};
fhem("set lb_mosquitto publish awtrix/app $string");
}
}
Dies sollte mir ja ja per mqqt den "string" verschicken.
Wenn ich aber das file speichere, kommt folgende Fehlermeldung:
syntax error at ./FHEM/99_myUtils.pm line 63, near ""force":" Global symbol "$string" requires explicit package name (did you forget to declare "my $string"?)
Was mache ich hier falsch?
Hab schon gesucht, aber nix passendes gefunden.
Danke
Probiere mal:
my $string = ,{"force":true,"icon":408,"text":"'.$caller.'"}';
Danach kannst Du es schöner machen.
/Edit: Großartig. Die dolle App hat die Hochkommas zerstört.
Von unterwegs gesendet.
Was spricht dagegen Messenger-Dienste wie Pushover, Pushsafer, Pushhbullet, Notifier oder Telegram einzusetzen? Zumindest kommen diese Meldungen alle auf dem Handy an. Oder hast du ein anderes Ziel für deine Nachrichten?
Viele Grüße Gisbert
Was spricht GG. MQTT?Die Hochkommata müssen eben entweder wie vonPatrixkR vorgeschlagen verpackt werden oder escaped (\ vor jedes Hochkomma.
Das ganze geht an ne Awtrix. Daher muss es MQTT sein.
Danke an alle für die Tips. Werd es die Tage mal testen.
Hab alle Varianten durchprobiert, aber ich bekomme beim speichern der Datei immer noch Fehler.
Die wenigsten Fehler erhalte ich, wenn ich PatrixkR Vorschlag mache.
Hier der Fehler:
Unrecognized character \xE2; marked by <-- HERE after $string = <-- HERE near column 15 at ./FHEM/99_myUtils.pm line 64
Und so hab ich es geschrieben (siehe Anhang)
Vermutlich mach ich mit den Hochkommas was falsch, hab aber schon '" usw. ausprobiert.
Danke
Dumm dass du einen ScreenShot statt dem "Text" gepostet hast, dann könnt man einfach zeigen wo (vermutlich) das Problem liegt.
Du hast innerhalb von den äußeren "Einzelhochkommas" noch weitere "Einzelhochkommas" (um $caller)...
...das zerschießt dir das wahrscheinlich...
Was soll denn übertragen werden?
Also wie genau soll der String aussehen, gib mal ein Beispiel.
Also in etwa so:
soll übertragen werden: {"force":true,"icon":408,"text":"Hugo"}
(also INKLUSIVE der "Anführungszeichen"!?)
Und $caller soll dann entsprechend ersetzt werden!?
Dann könnte:
my $string = "{\"force\":true,\"icon\":408,\"text\":\"$caller\"}";
funktionieren...
EDIT: bei den geschweiften Klammern bin ich (jetzt) etwas unsicher. Evtl. müssen die auch "escaped" werden, dann statt { bzw. } eben: \{ bzw. \} (äh, ähnliches könnte für "Doppelpunkt" auch gelten. Also einfach mal nachlesen bzw. testen was "escaped" werden muss und was einfach so geht...)
EDIT2: innerhalb von "Einfach-Hochkomma" werden Variablen nicht "ausgewertet", also ein '$caller' wird tatsächlich als $caller übertragen. Im Gegensatz zu: "$caller" daraus wird dann Hugo (um bei meinem Beispiel zu bleiben).
EDIT3: ansonsten kannst du "Teil-Strings" auch mittels "Punkt" verbinden, also: $string = "String1" . "String2" . "String3" . "$caller"; / wobei . $caller (also ohne in "Anführungszeichen") vermutlich das gleiche macht.
EDIT4: soll Hugo statt "Hugo" übertragen werden, dann die entsprechend "escapten" "Anführungszeichen" um $caller einfach weglassen, also:
my $string = "{\"force\":true,\"icon\":408,\"text\":$caller}";
Gruß, Joachim
hab extra ein foto gepostet, damit man die verschiedenen varianten der hochkommas sieht.
aber genau so dachte ich hat es PatrixkR gemeint. oder hab ich das nen fehler?
Danke
@MadMax-FHEM Danke, hat geklappt
funktioniert hat folgendes
my $string = "{\"force\":true,\"icon\":408,\"text\":\"$caller\"}";
Prima :)
Viel Spaß noch!
Gruß, Joachim