Autor Thema: Fehler im Notify  (Gelesen 1216 mal)

Offline raspklaus

  • Sr. Member
  • ****
  • Beiträge: 695
Fehler im Notify
« 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


Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 21897
Antw:Fehler im Notify
« Antwort #1 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 :)

Offline raspklaus

  • Sr. Member
  • ****
  • Beiträge: 695
Antw:Fehler im Notify
« Antwort #2 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.

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 21897
Antw:Fehler im Notify
« Antwort #3 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.

Offline raspklaus

  • Sr. Member
  • ****
  • Beiträge: 695
Antw:Fehler im Notify
« Antwort #4 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 ?
« Letzte Änderung: 08 März 2016, 19:51:33 von raspklaus »

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 21897
Antw:Fehler im Notify
« Antwort #5 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.