Mit Weckautomation Macro ein shellscript ausführen

Begonnen von mtk, 18 Oktober 2016, 17:42:05

Vorheriges Thema - Nächstes Thema

mtk

Ich möchte gerne im Wiki beschrieben http://www.fhemwiki.de/wiki/Weckautomation eine Weckautomation realisieren, die u.a. auch ein Shellskript aufruft, das mir die Uhrzeit auf einem Raspi ansagt. Das Skript funktioniert per Commandline auf dem FHEM Server:

ssh hifi.daheim /aio/sounds/picowave_hifi  "Guten Morgen, es ist $(date +%k:%M)"

aber ich schaffe es irgenwie nicht, das Skript auch aus dem Makro heraus aufzurufen.

Bevor die Frage auftaucht, dabei möchte ich nicht unbedingt eine FHEM Instanz auf dem Raspi installieren müssen, nur um die TTS Funktion nutzen zu können. Statt dessen möchte ich pico2wave lieber direkt aufrufen. Leider bin ich mit FHEM und der Syntax noch nicht so vertraut ...



# Licht:
fhem "set HUEDevice4 pct 1 : ct 2000 : transitiontime 30";
fhem "define atTmp_1_$NAME at +00:01:10 set HUEDevice4 pct 50 : ct 2000 : transitiontime 30";
fhem "define atTmp_2_$NAME at +00:02:20 set HUEDevice4 pct 100 : ct 2000 : transitiontime 30";
fhem "define atTmp_3_$NAME at +00:03:30 set HUEDevice4 pct 100 : ct 5600 : transitiontime 30";
# Sound:
fhem "set mpd_hifi volume 55";

        fhem "define atTmp_4_$NAME at +00:02:40 {system (ssh hifi.daheim /aio/sounds/picowave_hifi  "Guten Morgen, es ist $(date +%k:%M)")};



Kann mir jemand helfen, wie ich die o.g. Zeile "define atTmp_4_$NAME ... " korrekterweise formulieren muss?

Grüsse
Michael
aktuelles FHEM auf XEN Server, Debian VM,  usb-redirector (XEN host -> VM):  (868 MHz) CUL V3 + (868 MHz) CUL V3

Nodes: RPi with shairport-sync, cLirc, mjpg-streamer, mpd, hostapd, hifiberry, TTS (picowave), NOOBS Multiboot (raspian + openelec)

Otto123

Hallo Michael,

also falls Dein Script wirklich problemlos läuft, dann geht es aus FHEM so --> http://fhem.de/commandref_DE.html#command
Also einfachste Variante:
"ssh hifi.daheim /aio/sounds/picowave_hifi  'Guten Morgen, es ist $(date +%k:%M)')"
Wegen der Hochkommas bin ich mir nicht hundert prozent sicher.

Du kannst das direkt in die Kommandozeile von FHEM werfen!

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

mtk

Merci Otto,

habe noch etwas experimentiert und mit folgendem Code direkt in der Commandline von FHEM erfolg gehabt:

"sudo ssh hifi.daheim /aio/sounds/picowave_hifi  "'Guten Morgen, es ist $(date +%k:%M)'""

Wichtig sind wohl die vielen und unterschiedlichen Hochkommas ( ' und " ), ohne die geht es nicht ...
Ein sudo fehlt auch, da fhem selber nicht die entsprechenden Rechte hatte.

Versuche es gleich mal im Makro selber, hoffe es wird nicht noch wilder mit den ganzen Hochkommas ... ;-)

Grüße
Micha
aktuelles FHEM auf XEN Server, Debian VM,  usb-redirector (XEN host -> VM):  (868 MHz) CUL V3 + (868 MHz) CUL V3

Nodes: RPi with shairport-sync, cLirc, mjpg-streamer, mpd, hostapd, hifiberry, TTS (picowave), NOOBS Multiboot (raspian + openelec)

mtk

Im Makro läuft es noch immer nicht.

Zeile 54:
fhem "define atTmp_4_$NAME at +00:00:00 {system('sudo ssh hifi.daheim /aio/sounds/picowave_hifi  "'Guten Morgen, es ist $(date +%k:%M)'"');


Im Logfile sehe ich die Fehlermeldung aber für Zeile 67:

2016.10.18 19:55:11.915 3: Macro_rr_Michael_wakeuptimer1 return value: Search pattern not terminated at (eval 11271) line 67.


Deswegen gehe ich davon aus das der interpreter den Ausdruck noch immer nicht sauber verarbeiten kann.
aktuelles FHEM auf XEN Server, Debian VM,  usb-redirector (XEN host -> VM):  (868 MHz) CUL V3 + (868 MHz) CUL V3

Nodes: RPi with shairport-sync, cLirc, mjpg-streamer, mpd, hostapd, hifiberry, TTS (picowave), NOOBS Multiboot (raspian + openelec)

Devender


Hast du nicht die abschließende } vergessen?
Also so:

{system('sudo ssh hifi.daheim /aio/sounds/picowave_hifi  "'Guten Morgen, es ist $(date +%k:%M)'"') }

FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

mtk

#5
hatte ich tatsächlich übersehen, war es aber leider nicht:

Macro_rr_Michael_wakeuptimer1 return value: Search pattern not terminated at (eval 17256) line 67.


hier zur Vollständigkeit die vollständige aktuelle Zeile 54 im Makro:

fhem "define atTmp_4_$NAME at +00:00:00 {system("sudo ssh hifi.daheim /aio/sounds/picowave_hifi  "'Guten Morgen, es ist $(date +%k:%M)'"")};


Ich verstehe auch noch nicht was die Fehlermeldung "Search pattern not terminated " bedeutet.
aktuelles FHEM auf XEN Server, Debian VM,  usb-redirector (XEN host -> VM):  (868 MHz) CUL V3 + (868 MHz) CUL V3

Nodes: RPi with shairport-sync, cLirc, mjpg-streamer, mpd, hostapd, hifiberry, TTS (picowave), NOOBS Multiboot (raspian + openelec)

Devender

Ist schwer zu finde ohne es testen zu koennen.
Kannst du mal versuchen deinen Ausgabesatz "'Guten Morgen, es ist $(date +%k:%M)'"
Zu vereinfachen um zu sehen ob es an den " und ' liegt?
Also sowas wie Hallo als Ausgabe?
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

Otto123

und fhem  in die Gruppe audio anstatt sudo?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

mtk

#8
Hallo Otto

ich habe alles ausprobiert und es hat leider nichts gebracht.
Ich gebe auf, ich bekomme noch nicht mal ein einfaches hallo raus.  :'(

fhem "define atTmp_4_$NAME at +00:00:00 {system("sudo ssh hifi.daheim /aio/sounds/picowave_hifi 'Hallo'")};

oder

fhem "define atTmp_4_$NAME at +00:00:00 {system("sudo ssh hifi.daheim /aio/sounds/picowave_hifi Hallo")};


oder

fhem "define atTmp_4_$NAME at +00:00:00 {system('sudo ssh hifi.daheim /aio/sounds/picowave_hifi Hallo')};

Habe es auch mal mit Variationen von \" versucht, falls die vielen verschachtelten Hochkommas irritieren sollten.  ... im Logfile sehe ich stets nur ein :

Macro_rr_Michael_wakeuptimer1 return value: Search pattern not terminated at (eval 70935) line 68.

Wie der Perl Interpreter das wirklich braucht, finde ich einfach nicht raus.

Das mit der gruppe audio probiere ich nicht mehr aus. Ein sudo muss möglich sein, geht ja auch bei meinen anderen stellen wie z.B.

define n_Homebridge_start notify Homebridge:start {system('sudo service homebridge start');;}
attr n_Homebridge_start room Residents,System

define n_Homebridge_restart notify Homebridge:restart {system('sudo service homebridge restart');;}
attr n_Homebridge_restart room Residents,System

define n_Homebridge_stop notify Homebridge:stop {system('sudo service homebridge stop');;}
attr n_Homebridge_stop room Residents,System


Ich vermute das man in Perl mit den Hochkommas etwas Erfahrung für das Parsing braucht. Bin Informatiker aber kein Perl Spezialist.

Hast Du ein Beispiel, bei dem man ein FHEM Kommando per ssh an einen anderen rechner schicken kann?

In der Commandline funktioniert der code doch, also warum nicht im Makro???

Grüsse
Michael
aktuelles FHEM auf XEN Server, Debian VM,  usb-redirector (XEN host -> VM):  (868 MHz) CUL V3 + (868 MHz) CUL V3

Nodes: RPi with shairport-sync, cLirc, mjpg-streamer, mpd, hostapd, hifiberry, TTS (picowave), NOOBS Multiboot (raspian + openelec)

CoolTux

Versuch das ganze mal als quasi Perlprogramm zu missbrauchen.


my $response = qx(Befehl eingeben);
printf $response;

So siehst du mehr Meldung im Log. Du bist bkjnd und musst erstmal sehen das Du mehr siehst.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Noch was, Du schreibstganz oben das der erste oben genannte Befehl in der Commandline von FHEM funktioniert.
Dann gebe genau diesen mal ohne at Aufruf in das Skript ein. Also mit System davor. at kommt ganz zum Schluss, denke mal das ist der Auslöser
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Hallo Michael,

ZitatDas mit der gruppe audio probiere ich nicht mehr aus. Ein sudo muss möglich sein, geht ja auch bei meinen anderen stellen wie z.B.

naja, ist offtopic aber ich bin grundlegend dagegen, einfach alles als Admin machen ist sicherheitstechnisch das dünnste Brett was man bohren kann.

Und einfach "sudo ssh hifi.daheim /aio/sounds/picowave_hifi Hallo" geht nicht?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

mtk

#12
So, jetzt habe den Vorschlag mal aufgegriffen und das at weggelassen und direkt den Aufruf gemacht:

fhem system("sudo ssh hifi.daheim /aio/sounds/picowave_hifi 'Guten Morgen'");
fhem system("sudo ssh hifi.daheim /aio/sounds/picowave_hifi Guten Morgen");

Damit gibt es jedenfalls einen "Guten" aus, aber noch keinen "Morgen". ;-)

Habe mal die Hochkommata in verschiedenen Permutationen ausprobiert, kein Erfolg.
Der Parser geht einfach nicht über das Leerzeichen hinweg ....

Da scheinen sich mehrere Fehler/Probleme zu überlagern, aber wenigstens ein Anfang um zu verstehen, wie es geht.

Hat noch jemand eine Idee?

Das mit ohne Admin-Rechte durchzuführen baue ich später ein, jetzt möchte ich erstmal sehen das es überhaupt läuft :-)

Wie geht das mit dem quasi Perlprogramm genau?

my $response = qx(system('sudo ssh hifi.daheim /aio/sounds/picowave_hifi Guten Morgen'));
printf $response;
oder
my $response = qx('sudo ssh hifi.daheim /aio/sounds/picowave_hifi Guten Morgen');
printf $response;


erzeugen eine Fehlermeldung

Grüsse
Michael
aktuelles FHEM auf XEN Server, Debian VM,  usb-redirector (XEN host -> VM):  (868 MHz) CUL V3 + (868 MHz) CUL V3

Nodes: RPi with shairport-sync, cLirc, mjpg-streamer, mpd, hostapd, hifiberry, TTS (picowave), NOOBS Multiboot (raspian + openelec)

CoolTux


ssh hifi.daheim /aio/sounds/picowave_hifi  "Guten Morgen, es ist $(date +%k:%M)"


Das hier soll gehen in der fhem cmd hast du gesagt.
Also probiert bitte mal

system("ssh hifi.daheim /aio/sounds/picowave_hifi  "Guten Morgen, es ist");

Kein fhem davor, system ist ein Perlcommando
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

mtk

#14
Hallo CoolTux

erstmal danke für die Unterstützung (cc Otto).

Folgender Code funktioniert einwandfrei in der FHEM CMD line:

"sudo ssh hifi.daheim /aio/sounds/picowave_hifi  "'Guten Morgen, es ist $(date +%k:%M)'""

also habe ich jetzt wie vorgeschlagen nur noch folgendes eingetragen:

system("sudo ssh hifi.daheim /aio/sounds/picowave_hifi 'Guten Morgen'");

Also ohne FHEM davor und ein Hochkomma fehlte übrigens in deiner Vorgabe ... ;-)

Ergebnis ist nur leider auch nur wieder ein Guten ohne Morgen....  :'(
Nach dem ersten Leerzeichen wird alles ignoriert.

Weiss den jemand wie man so etwas in Perl sauber handhaben muss?
Oder ist das ein Problem von FHEM?
Wie gesagt, ich habe keinerlei Erfahrung mit dieser Skriptsprache.

Was ich noch versuchen kann, ist das ganze in variablen zu übergeben. Aber warum so umständlich ...
Wenn ich mir artverwandte Beispiele mittels der system Funktion anschaue, sollte die Syntax korrekt sein.

Ich möchte mir jetzt mal anschauen, was über das ssh interface ausgegeben wird und wo das Wort "Morgen" auf seinem Weg zum raspi verloren geht.


aktuelles FHEM auf XEN Server, Debian VM,  usb-redirector (XEN host -> VM):  (868 MHz) CUL V3 + (868 MHz) CUL V3

Nodes: RPi with shairport-sync, cLirc, mjpg-streamer, mpd, hostapd, hifiberry, TTS (picowave), NOOBS Multiboot (raspian + openelec)