Hauptmenü

Probleme im notify

Begonnen von raspklaus, 10 Dezember 2015, 20:03:53

Vorheriges Thema - Nächstes Thema

raspklaus

Ich hoffe, dass ich hier richtig bin. Ich habe folgendes notify:

define Removal4Sonos notify Removal4Sonos {\
my $message = "Removal";;\
if (ReadingsVal("RemovalBlack", "state", "") eq "on") {$message .= "Black"};;\
if (ReadingsVal("RemovalBrown", "state", "") eq "on") {$message .= "Brown"};;\
if (ReadingsVal("RemovalBlue", "state", "") eq "on") {$message .= "Blue"};;\
if (ReadingsVal("RemovalYellow", "state", "") eq "on") {$message .= "Yellow"};;\
if ($message ne "Removal")\
   {fhem("define SonosRemoval at 19:30:00 set Sonos_Buero PlayURITemp \\192.200.100.97\SonosSpeak\$message.mp3 50")}\
   {Log 3,"Inside if: define SonosRemoval at 19:30:00 set Sonos_Buero PlayURITemp $message.mp3 35"}\
}
attr Removal4Sonos room Abfall
attr Removal4Sonos verbose 5


und dadurch zwei Probleme:

das erste:

die Fehler im Log nach einem trigger:

2015.12.10 19:45:10 1: PERL WARNING: Unrecognized escape \S passed through at (eval 393) line 8.
2015.12.10 19:45:10 3: eval: my $TYPE='notify';my $SELF='Removal4Sonos';my $EVENT='';my $NAME='Removal4Sonos';{
my $message = "Removal";
if (ReadingsVal("RemovalBlack", "state", "") eq "on") {$message .= "Black"};
if (ReadingsVal("RemovalBrown", "state", "") eq "on") {$message .= "Brown"};
if (ReadingsVal("RemovalBlue", "state", "") eq "on") {$message .= "Blue"};
if (ReadingsVal("RemovalYellow", "state", "") eq "on") {$message .= "Yellow"};
if ($message ne "Removal")
   {fhem("define SonosRemoval at 19:30:00 set Sonos_Buero PlayURITemp \\192.200.100.97\SonosSpeak\$message.mp3 35")}
   {Log 3,"Inside if: define SonosRemoval at 19:30:00 set Sonos_Buero PlayURITemp \\192.200.100.97\SonosSpeak\$message.mp3 35"}
}
2015.12.10 19:45:10 3: Inside if: define SonosRemoval at 19:30:00 set Sonos_Buero PlayURITemp \\192.200.100.97\SonosSpeak\RemovalBrown.mp3 35


um 19:30 wird dadurch nichts abgespielt

Ein
set Sonos_Buero PlayURITemp \\192.200.100.97\SonosSpeak\RemovalBrown.mp3 35

erzeugt eine Ausgabe.

Das zweite Problem hängt aber wahrscheinlich mit dem nicht ausgeführten at zusammen. Ein erneutes trigger erzeugt die Fehlermeldung:

2015.12.10 19:48:10 3: define SonosRemoval at 19:30:00 set Sonos_Buero PlayURITemp \192.200.100.97SonosSpeak$message.mp3 50 : SonosRemoval already defined, delete it first


Ich habe die Beschreibungen so interpretiert, dass ein einmal auszuführendes at von fhem weggeworfen bzw  nach der Ausführung vergessen wird und definiere das at mit einem einmal täglich auszuführenden trigger des notify.

Vielleicht gibt es ja einen einfacheren Weg ?

Ellert

#1
ZitatUnrecognized escape \S passed through at (eval 393) line 8.

Den Fehler findest Du, wenn Du in Zeile 8 Deiner Definition nach "\S" suchst. Falls es unbedingt "\" sein muss, solltest Du es maskieren.

PS. Einfacher geht es mit einem DOIF, at und notify in einer Definition, mit dynamischer Zeitangabe.

raspklaus

Zeile 8 ist:

{fhem("define SonosRemoval at 19:30:00 set Sonos_Buero PlayURITemp \\192.200.100.97\SonosSpeak\$message.mp3 50")}

Das sind die \ Backslashes aus der URL

sieht doch Syntaxmässig io aus.
ZitatPS. Einfacher geht es mit einem DOIF, at und notify in einer Definition, mit dynamischer Zeitangabe.

Wo finde ich da Beispiele ?  Klingt für eine Frage im Anfängerthreat etwas kompliziert

raspklaus

so scheint es besser zu sein:

{fhem("define SonosRemoval at 19:30:00 set Sonos_Buero PlayURITemp \\\\192.200.100.97\\SonosSpeak\\$message.mp3 50")}

Wird das at nach der Ausführung auch wirklich von fhem vergessen ?

raspklaus

Bin hier anscheinend doch im falschen Thema ?

marvin78

Ja, es wird vergessen. Eventuell antwortet dir niemand, weil das ja explizit in der Doku zu at erwähnt wird.

raspklaus

Ich wollte ja ursprünglich wissen ob es einen einfacheren Weg mit gleichem Ergebnis gibt.

Ellert

ZitatWo finde ich da Beispiele ?

Wie immer, in der Commandref.

Baumi

Allgemeiner Tipp, falls Du (wie ich ;-) ) lieber mit Perl arbeitest als mit FHEMs Befehlen: Wenn man eine 99_myUtils-Datei für eigene Funktionen nutzt, kann das die Fehlersuche sehr vereinfachen. Zum Einen braucht man nicht so viele Escape-Slashes und Extra-Semikolons, zum Anderen bekommt man bei Fehlern Zeilennummern, mit denen man etwas anfangen kann.

Andererseits muss man natürlich nach jeder Änderung einmal "reload 99_myUtils.pm" in FHEM machen, aber damit kann ich zumindest leben.

marvin78

Zitat von: Baumi am 11 Dezember 2015, 15:18:24
Andererseits muss man natürlich nach jeder Änderung einmal "reload 99_myUtils.pm" in FHEM machen, aber damit kann ich zumindest leben.

Nein. Das muss man nicht, wenn man den FHEM-internen Editor verwendet (mit Codemirror wirklich brauchbar).

Baumi

Oh, danke für den Hinweis. Die Codemirror-Integration ist komplett an mir vorüber gegangen. Muss ich mir bei Gelegenheit mal näher ansehen.