WOL shutdownCmd --> FHEM Kommando

Begonnen von siggi85, 03 Februar 2014, 15:48:47

Vorheriges Thema - Nächstes Thema

siggi85

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

Dietmar63

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?
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

ChrisD

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


siggi85

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

siggi85

Was muss gemacht werden, damit die Funktion ins offizielle SVN aufgenommen wird?

Dietmar63

Ich werde es einbauen und einchecken. Were aber die große Lösung implementieren.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

siggi85

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""

Dietmar63

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.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

siggi85

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! :)

Dietmar63

#9
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
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

siggi85

Habs gerade getestet, funktioniert super! Schankedön! :)

Tueftler1983

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?

Tueftler1983

Hallo
Es funktioniert mit dem befehl:
"wget http://192.168.2.20:7762/suspend"

zx80

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!