[gelöst] Notify bei klingeln soll mqtt string verschicken; will nicht so ganz

Begonnen von The Spirit, 21 April 2019, 20:11:30

Vorheriges Thema - Nächstes Thema

The Spirit

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
THZ 304 Eco Baujahr 2015

PatrickR

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.
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

Gisbert

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​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Beta-User

Was spricht GG. MQTT?Die Hochkommata müssen eben entweder wie vonPatrixkR vorgeschlagen verpackt werden oder escaped (\ vor jedes Hochkomma.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

The Spirit

Das ganze geht an ne Awtrix. Daher muss es MQTT sein.
Danke an alle für die Tips. Werd es die Tage mal testen.
THZ 304 Eco Baujahr 2015

The Spirit

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
THZ 304 Eco Baujahr 2015

MadMax-FHEM

#6
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

The Spirit

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
THZ 304 Eco Baujahr 2015

The Spirit

@MadMax-FHEM Danke, hat geklappt
funktioniert hat folgendes

my $string = "{\"force\":true,\"icon\":408,\"text\":\"$caller\"}";
THZ 304 Eco Baujahr 2015

MadMax-FHEM

FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)