Hallo,
ich nutze ein WOL Device um meinem MediaPC zu starten. Über ein XBMC Device kann ich diesen auch herunterfahren. Diesen "Shutdown" Befehl würde ich gerne hinter dem WOL-off Befehl mittels "shutdownCmd" parken. Da dieses Attribut jedoch nur Shellkommandos akzeptiert, musste ich den Befehl in einem SKript auslagern.
Meine Bitte: Kann man dem Attribut "shutdownCmd" für ein WOL "erlauben" auch FHEM-Kommandos zu hinterlegen?
Anbei mein Code mit ausgelagertem Skript um das bisher zu umgehen.
define mediapc XBMC 192.168.1.2:8080 http user pass
define wol_mediapc WOL 11:22:33:44:55:66 192.168.1.2
attr wol_mediapc shutdownCmd sh /home/test.sh
attr wol_mediapc webCmd on:off
test.sh
#!/bin/bash
wget -bq --tries=1 --timeout=1 --spider http://127.0.0.1:8083/fhem?cmd=set%20mediapc%20shutdown
Das kann man machen, aber man muss dann eindeutig shell Kommandos von fhem Befehlen unterscheiden können.
Welcher Befehl schwebt dir vor?
Ich könnte versuchen, anstelle von
<string> in attr <name> shutdownCmd <string>
in etwas analoges wie
<command> in define <name> at <timespec> <command>
zu implementieren. Dann müßten alle, die dieses Attribut nutzen, beim update auf die nächste Version ein wenig anpassen.
Dann hättest du alle Möglichkeiten, die eine at-Kommando mit <command> liefert(siehe CommandRef).
Würde das ausreichen?
Hallo,
Ich habe das bei mir schon vor einiger Zeit so eingebaut: In der Funktion WOL_Set habe ich die Zeile
qx ($cmd);
durch
if ($cmd =~ /^\{.+\}$/) {
eval $cmd;
} else {
qx ($cmd);
}
ersetzt.
Damit kann ich über shutdownCmd Perl-Code und damit auch FHEM-Funktionen aufrufen, z.B.
attr wol_mediapc shutdownCmd {fhem "set mediapc shutdown"}
Der Aufruf eines externes Skriptes bleibt dabei unverändert möglich.
Grüße,
ChrisD
Hallo,
danke für die schnellen Antworten!
Zitat von: ChrisD am 03 Februar 2014, 22:05:27
Damit kann ich über shutdownCmd Perl-Code und damit auch FHEM-Funktionen aufrufen, z.B.
attr wol_mediapc shutdownCmd {fhem "set mediapc shutdown"}
Der Aufruf eines externes Skriptes bleibt dabei unverändert möglich.
Das hört sich genau nach dem an, was ich brauche und anscheinend auch andere schon benötigt haben. :) Gerade der Vorteil, dass andere keine Anpassungen vornehmen müssen finde ich gut!
Kann man an diese Änderung in die offizielle Version aufnehmen?
Gruß
Siggi
Was muss gemacht werden, damit die Funktion ins offizielle SVN aufgenommen wird?
Ich werde es einbauen und einchecken. Were aber die große Lösung implementieren.
Danke für die Hilfe diese Funktion einzubauen! :)
Um das Thema vor der Veröffentlichung noch mal aufzugreifen: Die Heransgehensweise wie sie im Notify und im Watchdog verwendet wird, sollte alles abdecken. Hierdurch würde auch eine einheitliche Verwendung der Befehle in FHEM genutzt werden.
Hier noch mal der Auszug aus der Reference den ich meine:
define <name> notify <pattern> <command>
Execute a command when received an event for the definition <pattern>. If <command> is enclosed in {}, then it is a perl expression, if it is enclosed in "", then it is a shell command, else it is a "plain" fhem.pl command (chain). See the trigger command for testing it. Examples:
define b3lampV1 notify btn3 set lamp $EVENT
define b3lampV2 notify btn3 { fhem "set lamp $EVENT" }
define b3lampV3 notify btn3 "/usr/local/bin/setlamp "$EVENT""
define b3lampV3 notify btn3 set lamp1 $EVENT;;set lamp2 $EVENT
define wzMessLg notify wz:measured.* "/usr/local/bin/logfht $NAME "$EVENT""
define LogUndef notify global:UNDEFINED.* "send-me-mail.sh "$EVENT""
Ich hatte mich zwar auf das
at-Kommando bezogen, aber stimmt trotzdem.
ZitatDie Heransgehensweise wie sie im Notify und im Watchdog verwendet wird, sollte alles abdecken
Das war Absicht.
Zitat von: Dietmar63 am 06 Februar 2014, 11:24:47
Ich hatte mich zwar auf das at-Kommando bezogen, aber stimmt trotzdem.Das war Absicht.
Klasse. Ich freu mich schon auf die neue Version! :)
geändert und eingeckeckt!
Beispiele:
attr wol shutdownCmd set lamp on # fhem command
attr wol shutdownCmd { Log 1, "Teatime" } # Perl command
attr wol shutdownCmd "/bin/echo "Teatime" > /dev/console" # shell command
Habs gerade getestet, funktioniert super! Schankedön! :)
Hallo ich wollte meinen MediaPC Uber das WOL Modul ein und aus schalten.
Einschalten geht ohne Probleme aber aus nicht.
Zum ausschalten brauche ich eigentlich nur das in die adresszeile eines Browsers eingeben:
http://192.168.2.20:7762/suspend
Auf dem Win7 MediaPC läuft dafür das Tool SleepOnLan
Kann ich den Befehl über das WOL Modul über shutdownCmd absetzen?
Hallo
Es funktioniert mit dem befehl:
"wget http://192.168.2.20:7762/suspend"
Danke siggi85 dass du mein Problem schon vor Jahren hattest und im Wiki gefragt hast und danke Dietmar63 für die Umsetzung der tollen Lösung!