FHEM Forum

FHEM => Automatisierung => Thema gestartet von: raspklaus am 07 März 2016, 13:15:24

Titel: Fehler im Notify
Beitrag von: raspklaus am 07 März 2016, 13:15:24
Hallo zusammen,

ich nutze das folgende notify für die Soundausgabe über Sonos. Das funktioniert auch einwandfrei. Da das at bei einem Ereignis aber nur im Raum everything angezeigt wird, hatte ich die Idee einen Dummy wasteansage für die grafische Benachrichtigung einzurichten.

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 (ReadingsVal("RemovalToxic", "state", "") eq "on") {$message .= "Toxic"};
if (ReadingsVal("RemovalPaper", "state", "") eq "on") {$message .= "Paper"};
if (ReadingsVal("RemovalGreen", "state", "") eq "on") {$message .= "Green"};
if ($message ne "Removal")
   {Log 1, $message}
   {fhem("define SonosRemoval at 19:30:00 set Sonos_Buero,Sonos_Wohnzimmer PlayURITemp \\\\192.200.100.95\\SonosSpeak\\$message.mp3 50")}
   {fhem("set wasteansage on")}
}


Ich habe nun das Problem dass bei jedem trigger des Notify die wasteanzeige auf on geschaltet wird. Zur Kontrolle wollte ich einen Logeintrag um zu sehen was in $message steht, aber da kommt kein Logeintrag.

Leider stehe ich bei diesem Problem total auf dem Schlauch. Vielleicht weiss einer von Euch da weiter.

Jetzt schon vielen Dank

Klaus

Titel: Antw:Fehler im Notify
Beitrag von: rudolfkoenig am 07 März 2016, 13:37:03
Perl Lektion 17: Es reicht nicht etwas einzuruecken, um es von einem if abhaengig zu machen. Zu diesem Zweck ist {} da.
Und man sollte nicht {} statt ; verwenden, das irritiert, auch wenn es funktioniert. Vorschlag #1:
if(...) {
  Log 1, $message;
  fhem("define...");
  fhem("set wasteansage on");
}
Vorschlag #2: Perl Buch lesen :)
Titel: Antw:Fehler im Notify
Beitrag von: raspklaus am 07 März 2016, 14:41:08
Danke,

wieder was dazugelernt. Habe es jetzt so abgeändert:

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 (ReadingsVal("RemovalToxic", "state", "") eq "on") {$message .= "Toxic"};
if (ReadingsVal("RemovalPaper", "state", "") eq "on") {$message .= "Paper"};
if (ReadingsVal("RemovalGreen", "state", "") eq "on") {$message .= "Green"};
if ($message ne "Removal"){
   Log 1, $message;
   fhem("defmod SonosRemoval at 19:30:00 set Sonos_Buero,Sonos_Wohnzimmer PlayURITemp \\\\192.200.100.95\\SonosSpeak\\$message.mp3 50");
   fhem("set wasteansage on");
}
}


Was ich allerdings nicht verstehe, auf welchen teil bezieht sich :

Und man sollte nicht {} statt ; verwenden, das irritiert, auch wenn es funktioniert.

Titel: Antw:Fehler im Notify
Beitrag von: rudolfkoenig am 07 März 2016, 14:48:08
Irgendwer hier im Forum oder Wiki hat damit angefangen, Perl Befehle so zu trennen:
{Befehl1}{Befehl2}{Befehl3}
statt wie ueblich
Befehl1;Befehl2;Befehl3;
Das "loest" das Problem mit ; vs. ;; und funktioniert auch in manchen Faellen, irritiert mich aber sehr.
Titel: Antw:Fehler im Notify
Beitrag von: raspklaus am 08 März 2016, 19:47:44
wenn ich nun um 19:30 nach der Ansage den Dummy ausschalten will, kann ich das mit ;; an das schon vorhandene at anhängen oder muss ich ein zusätzliches at definieren ?
Titel: Antw:Fehler im Notify
Beitrag von: rudolfkoenig am 09 März 2016, 09:28:03
Anhaengen mit ;; sollte gehen.

Alternative: ein notify mit sich selbst als regexp zu definieren, welches die beiden Befehe (mit ;; getrennt) ausfuehrt, und dieses notify im at um 19:30 mit "trigger notifyName" aktivieren. Vorteil: man kann die Ausfuehrung vorher mit dem erwaehnten "trigger notifyName" testen.