Watchdog führt shell script nicht aus, Parameter nicht erkannt?

Begonnen von ThorstenH, 06 April 2013, 09:13:18

Vorheriges Thema - Nächstes Thema

ThorstenH

Hi,

ich möchte eine mail geschickt bekommen, wenn ein Fenster zu lange offensteht. Dazu habe ich folgenden wathcdog definiert:
define watchdog_window_open_threestatesensor_kueche_fenster_links watchdog threestatesensor_kueche_fenster_links:open 00:10:00 threestatesensor_kueche_fenster_links:closed  {\
  "/volume1/addons/fhem/bin/sendmail.sh "Kuechenfenster ist offen!" "Das linke Kuechenfenster ist offen."";;\
}

Und ich könnte schwören, das hat auch irgendwann mal funktioniert, bis - ich glaube ich - am Text etwas geändert habe. Jedenfalls kommt jetzt beim trigger immer diese Fehlermeldung:
2013.04.05 22:20:06 3: Watchdog watchdog_window_open_threestatesensor_kueche_fenster_links triggered
Bareword found where operator expected at (eval 95) line 1, near ""/volume1/addons/fhem/bin/sendmail.sh "Kuechenfenster"
(Missing operator before Kuechenfenster?)
Bareword found where operator expected at (eval 95) line 1, near "" "Das"
(Missing operator before Das?)
2013.04.05 22:20:06 3: syntax error at (eval 95) line 1, near ""/volume1/addons/fhem/bin/sendmail.sh "Kuechenfenster ist "

Scheinbar kommt fhem nicht mit den Parametern klar? Liegt es an fehlenden Escapes? Ich habe mich was das angeht an die Doku von notify gehalten:
define LogUndef notify global:UNDEFINED.* "send-me-mail.sh "$EVENT""

sendmail.sh erwartet als ersten Parameter das subject, als zweiten den body.

ThorstenH

Ich wollte jetzt mal ein body und subject ohne spaces übergeben, um ein mögliches Escapeproblem zu umgehen:
Keine Fehlermeldung, allerdings auch keine mail.

Dann habe ich einen ganz einfachen watchdog definiert:

rename CUL_HM_HM_SEC_SC_1E7C35 threestatesensor_test
attr threestatesensor_test alias Fensterkontakt Test
attr threestatesensor_test room CUL_HM,Test
attr FileLog_threestatesensor_test room Test

define watchdog_window_open_threestatesensor_test watchdog threestatesensor_test:open 00:00:15 threestatesensor_test:closed {\
  "/volume1/addons/fhem/bin/sendmail.sh";;\
}
attr watchdog_window_open_threestatesensor_test regexp1WontReactivate
attr watchdog_window_open_threestatesensor_test room Test

Und das war das Ergebnis:
2013.04.06 10:18:30 3: Watchdog watchdog_window_open_threestatesensor_test triggered
2013.04.06 10:18:30 3: /volume1/addons/fhem/bin/sendmail.sh

Aber keine mail :-(
Das Script wird auch gar nicht aufgerufen, da ich als erstes einen Eintrag in einer Logdatei erzeuge und der fehlt. Wenn ich das shell script auf der ssh Konsole aufrufe, funktioniert es.

Was mache ich nur falsch??

Thorsten

Puschel74

Hallo,

hier

{\
  "/volume1/addons/fhem/bin/sendmail.sh "Kuechenfenster ist offen!" "Das linke Kuechenfenster ist offen."";;\
}


scheint mir der Fehler klar zu sein.
Du hast am Schluss 2 " wobei eines zuviel ist.
Versuch doch mal 'Backticks'
Mails lasse ich mir am RPi so zustellen:

DebianMail('xxx.yyy@@zzz.dd','@','%');

In der Kommandozeile muss noch { und } dran.

Grüße

P.S.: DebainMail wurde wie im Wiki beschrieben eingerichtet (sendemail)
debainMail heisst nur das sub in der 99_myUtils.pm
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

ThorstenH

Ich habe glaube ich die Ursache gefunden:

Ist die Aktion bei einem Watchdog ein perl onliner (wird glaube ich so genannt, wenn alles von {} umschlossen ist), dann muss ein shell skript mit system aufgerufen werden, nicht mit double quotes).

So geht es:
delete watchdog_window_open_threestatesensor_test
define watchdog_window_open_threestatesensor_test watchdog threestatesensor_test:open 00:00:05 threestatesensor_test:closed {\
  system("/volume1/addons/fhem/bin/sendmail.sh", "Testkontakt offen", "Testkontak ist offen.");;\
  fhem("setstate watchdog_window_open_threestatesensor_test defined");;\
}
attr watchdog_window_open_threestatesensor_test regexp1WontReactivate
attr watchdog_window_open_threestatesensor_test room Test

ThorstenH

ZitatDu hast am Schluss 2 " wobei eines zuviel ist.

Ich habe nachgezählt, das ist es nicht. Statt Backticks (`) habe ich system() benutzt, das scheint genau das richtige zu sein.

Danke
Thorsten

Puschel74

Hallo,

ich hab dir leider auch keine Backticks angegeben sondern einfache Hochkommata.

Da es aber jetzt ja funktioniert ist es nichtmehr so schlimm.
Ich wollte es nur richtig stellen für den Fall das mal jemand anders hier rein schaut.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.