Moin liebe Leute, ich habe ein Problem mit der richtigen Schreibweise in einer meiner Sub's in der 99_myUtils.
Ich versuche mir via Telegram Blitzerinformationen zuzuschicken.
Der Code ist nur ein kleiner Teilausschnitt!
Zuerst einmal reagiere ich auf die $message die ich via Telegram empfangen habe:
.....
if (($message =~ /Blitzer/g) and ($message ne "Hilfe Blitzer"))
{
fhem "set Telegram message \@$id " .getBlitzer($message,$id);
}
.....
Ich hole mir in der sub getBlitzer($$) die Informationen, wenn der jeweilige Blitzer schon als Device vorhanden ist.
Bis hier hin funktioniert alles.
Falls der Blitzer als Device noch nicht angelegt ist, lege ich diesen an
$error = 0 -> bedeutet das das Device schon vorhanden ist
$error = 1 -> bedeutet das ich das Device angelegt habe
# Wenn kein Fehler vorhanden ist Daten auslesen
if ($error != -1)
{
if ($error == 0)
{ return getInfoBlitzer($device); }
elsif ($error == 1)
{
fhem "define temp_Blitzer at +00:00:07 { fhem \"set Telegram message \@$id \" .getInfoBlitzer(\"$device\") }";
return "" .getEmoji(55) ."Sekunde, ich sammle alle Informationen!";
}
}
Und genau hier bekomme ich Probleme. Wenn ich das Device gerade erst angelegt habe, möchte ich gerne ein "at" weniger Sekunden danach noch einmal starten.
(das Auslesen via HTTPMOD und dem jeweiligen Regex kann ja manchmal ein paar Sekunden dauern)
Dummerweise kommt die Nachricht aber nicht bei der eigentlichen $id an, sondern immer bei dem defaultPeer, der bei Telegram hinterlegt ist.
Internals:
CFGFN
COMMAND { fhem "set Telegram message @2741XXXXX " .getInfoBlitzer("mb_Hamm") }
DEF 2018-03-23T18:09:02 { fhem "set Telegram message @2741XXXXX " .getInfoBlitzer("mb_Hamm") }
NAME temp_Blitzer
NR 17242
NTM 18:09:02
PERIODIC no
RELATIVE yes
STATE Next: 18:09:02
TIMESPEC 00:00:07
TRIGGERTIME 1521824942.06834
TRIGGERTIME_FMT 2018-03-23 18:09:02
TYPE at
VOLATILE 1
Helper:
DBLOG:
state:
myDbLog:
TIME 1521824935.07031
VALUE Next
READINGS:
2018-03-23 18:08:55 state Next: 18:09:02
Attributes:
DbLogExclude .*
An die ID: 2741XXXXX kommt die Nachricht leider nie an, wenn der "at" läuft.
Irgendwie verzweifel ich daran gerade und hoffe, dass wir jemand etwas Klarheit ins Dunkle bringen kann.
Gruß
Mathze
Zitat von: t1me2die am 23 März 2018, 18:19:26
fhem "define temp_Blitzer at +00:00:07 { fhem \"set Telegram message \@$id \" .getInfoBlitzer(\"$device\") }";
Hallo Mathze,
mit
{ my ($id, $device);; fhem ("define temp_Blitzer at +00:00:07 { fhem \"set Telegram message \\\@\$id \" .getInfoBlitzer(\"\$device\") }") }
sieht das Ergebnis ganz gut aus:
DEF 2018-03-23T19:54:25 { fhem "set Telegram message \@$id " .getInfoBlitzer("$device") }
Gruss Helmut
Moin Helmut,
Hätte ich hier mal 20Minuten eher gelesen...
Ich habe es eben durch ausprobieren auch herausbekommen und ja, du hast Recht!
Es muss wie folgt ausschauen:
fhem "define temp_Blitzer at +00:00:07 { fhem \"set Telegram message [color=red]\\\[/color]@$id \" .getInfoBlitzer(\"$device\") }";
Ich musste den Backslash also auch noch einmal selbst escapen :-X
Danke für deine Hilfe :-*
Gruß
Mathze
Hallo Mathze,
und das funktioniert bei Dir ohne Maskierung der beiden "$" Zeichen? Merkwuerdig. Wenn ich das
versuche, bekomme ich eine Fehlermeldung:
Can't use an undefined value as an ARRAY reference at (eval 23242) line 1.
Gruss Helmut