FHEM > Automatisierung

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

(1/2) > >>

ThorstenH:
Hi,

ich möchte eine mail geschickt bekommen, wenn ein Fenster zu lange offensteht. Dazu habe ich folgenden wathcdog definiert:

--- Code: ---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."";;\
}

--- Ende Code ---

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:

--- Code: ---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 "
--- Ende Code ---

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:

--- Code: ---define LogUndef notify global:UNDEFINED.* "send-me-mail.sh "$EVENT""
--- Ende Code ---


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:

--- Code: ---
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

--- Ende Code ---

Und das war das Ergebnis:

--- Code: ---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

--- Ende Code ---

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


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


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:


--- Code: ---DebianMail('xxx.yyy@@zzz.dd','@','%');
--- Ende Code ---


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

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:

--- Code: ---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

--- Ende Code ---

ThorstenH:

--- Zitat ---Du hast am Schluss 2 " wobei eines zuviel ist.

--- Ende Zitat ---


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

Danke
Thorsten

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln