WOL Modul

Begonnen von reacend, 26 Dezember 2012, 11:05:23

Vorheriges Thema - Nächstes Thema

reacend

Hi, da ich meinen schreibtisch via FS20 schalte wollte ich gerne das das laptop aus dem Standby via wol geweckt wird beim drücken der fs20 sender.
Geht das gibts da schon ein modul für?


BG,
reacend

ilmtuelp0815

Hi!
Wo hast du denn das Modul zum schalten des Schreibtisches her. Vielleicht ist da WOL mit eingebaut.
FHEM auf FRITZ!Box 7390, SuSE 12.3 und Cubieboard2
CUL und HM-LAN
FS20: FHT80b, TFK, KSE, FMS, DU-2, ST-4, SM4, S4M, SM8

HM: HM-Sec-SD

WiKa

Zitat von: ilmtuelp0815 schrieb am Mi, 26 Dezember 2012 18:41Hi!
Wo hast du denn das Modul zum schalten des Schreibtisches her.

Hallo ilmtuelp0815
Modul braucht er nicht.
Seit Einführung IPv6 verfügt der Schreibtisch über adressierbare Bestandteile welche sich natürlich auch per MAC-Adresse ansprechen lassen.

Die Doku zum Schreibtisch verfügt sicher über eine entsprechende Liste.

Wenn reacend die Beine des Schreibtisches mit "set Schreibtischbein_vl up" / "set Schreibtischbein_vl down"
ansprechen kann, muß er nur noch den Einschalter seines Notebooks an entsprechender Stelle auf dem Boden platzieren.

VG
WiKa
FB7390 FW:FRITZ!OS 05.50 / RFXTRX433 FW:433_64 / ELRO AB440R (modified to IT-Code) - AB440S (IT-Code) - AB440IS (IT-Code) / Oregon THGN132N - THN132N - THGR122N / Intertechno PAR-1000 - PAR1500

WiKa

[quote title=reacend schrieb am Mi, 26 Dezember 2012 11:05
Geht das gibts da schon ein modul für?
[/quote]

Hallo reacend,
ein Modul in FHEM wird nicht reichen, da die Funktion zum Versenden eines WOL-Paketes im Betriebssystem deines FHEM-Systems vorhanden sein muss.

Bei Linux-Systemen erledigt das WOL der Befehl "ether-wake", dieser ist z.b. bei meiner Fritzbox im bereits vorhanden.

Voraussetzungen:
1. Das Gastsystem von FHEM muss über den Befehl "ether-wake" verfügen.
2. Das Notebook / der PC muss für WOL konfiguriert sein.
Die WOL-Funktion laesst sich in eriner WIN-Umgebung von einem anderen PC z.B. mit dem Programm "Netscan" überprüfen.
3. Du mußt hier jemanden finden, der dir den Aufruf des Betriebssystembefehls in FHEM entsprechend umsetzt.
Meine Perl-Kenntnisse reichen dazu leider nicht aus.

Durchgeführter Test:
In Telnet "/usr/bin/ether-wake 00:0F:B0:69:0C:B8" ausgeführt - Notebook wird eingeschaltet.

VG,
WiKa
FB7390 FW:FRITZ!OS 05.50 / RFXTRX433 FW:433_64 / ELRO AB440R (modified to IT-Code) - AB440S (IT-Code) - AB440IS (IT-Code) / Oregon THGN132N - THN132N - THGR122N / Intertechno PAR-1000 - PAR1500

Reinerlein

Hi,

man kann auch per Perl-Socket selber ein solches Paket versenden.
Dazu braucht man allerdings das Perl-Paket Socket.

Ich habe in meiner Utils folgenden Schnipsel:
sub _wakeup
{
my $hwaddr  = shift;
my $ipaddr  = shift || $DEFAULT_IP;
my $port    = shift || $DEFAULT_PORT;

my ($raddr, $them, $proto);
my ($hwaddr_re, $pkt);

# Validate hardware address (ethernet address)
$hwaddr_re = join(':', ('[0-9A-Fa-f]{1,2}') x 6);
if ($hwaddr !~ m/^$hwaddr_re$/) {
warn "Invalid hardware address: $hwaddr\n";
return undef;
}

# Generate magic sequence
foreach (split /:/, $hwaddr) {
$pkt .= chr(hex($_));
}
$pkt = chr(0xFF) x 6 . $pkt x 16;

# Allocate socket and send packet
$raddr = gethostbyname($ipaddr);
$them = pack_sockaddr_in($port, $raddr);
$proto = getprotobyname('udp');

socket(S, AF_INET, SOCK_DGRAM, $proto) or die "socket : $!";
setsockopt(S, SOL_SOCKET, SO_BROADCAST, 1) or die "setsockopt : $!";

#print "Sending magic packet to $ipaddr:$port with $hwaddr\n";

send(S, $pkt, 0, $them) or die "send : $!";
close S;
}


Oben natürlich nicht vergessen ein
use Socket;
einzutragen.

Das weckt bei mir meinen HTPC für den Fernseher aus dem Tiefschlaf auf...

Grüße Reinerlein

Reinerlein

Hi nochmal,

ich habe der Vollständigkeit halber hier noch eine Beispiel-Aufrufzeile für meinen Code-Schnipsel:
wakeup("90:E6:BA:C2:96:15")

Da muss natürlich die passende MAC Adresse des zu weckenden Rechners rein (//images/smiley_icons/icon_smile.gif)

Grüße Reinerlein

Reinerlein

Hi,

warum kann man hier eigentlich nichts editieren...
Es ist immer doof, wenn man einzelnen Code aus einer großen myUtils.pm herauskopiert, da vergisst man einfach die Hälfte.

Es fehlen auch die 2 Standardvariablen, die man natürlich auch fest eintragen könnte.

Hier also nochmal komplett, damit es in einem Post steht:
Kopf:
use Socket;

my $DEFAULT_IP      = '255.255.255.255';
my $DEFAULT_PORT    = getservbyname('discard', 'udp');


Sub-Prozedur:
sub _wakeup
{
my $hwaddr  = shift;
my $ipaddr  = shift || $DEFAULT_IP;
my $port    = shift || $DEFAULT_PORT;

my ($raddr, $them, $proto);
my ($hwaddr_re, $pkt);

# Validate hardware address (ethernet address)
$hwaddr_re = join(':', ('[0-9A-Fa-f]{1,2}') x 6);
if ($hwaddr !~ m/^$hwaddr_re$/) {
warn "Invalid hardware address: $hwaddr\n";
return undef;
}

# Generate magic sequence
foreach (split /:/, $hwaddr) {
$pkt .= chr(hex($_));
}
$pkt = chr(0xFF) x 6 . $pkt x 16;

# Allocate socket and send packet
$raddr = gethostbyname($ipaddr);
$them = pack_sockaddr_in($port, $raddr);
$proto = getprotobyname('udp');

socket(S, AF_INET, SOCK_DGRAM, $proto) or die "socket : $!";
setsockopt(S, SOL_SOCKET, SO_BROADCAST, 1) or die "setsockopt : $!";

#print "Sending magic packet to $ipaddr:$port with $hwaddr\n";

send(S, $pkt, 0, $them) or die "send : $!";
close S;
}


Beispielaufruf:
wakeup("90:E6:BA:C2:96:15")

Ich hoffe das wars nun, und ich gehe jetzt ins Bett, ehe ich noch mehr Fehler mache  (//images/smiley_icons/icon_smile.gif)

Grüße Reinerlein

Dr. Boris Neubert

Zitat von: reacend schrieb am Mi, 26 Dezember 2012 11:05Hi, da ich meinen schreibtisch via FS20 schalte wollte ich gerne das das laptop aus dem Standby via wol geweckt wird beim drücken der fs20 sender.
Geht das gibts da schon ein modul für?

Tut es bei Dir das Modul  WOL nicht (siehe commandref)?

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

WiKa

Tut es bei Dir das Modul  WOL nicht (siehe commandref)?

Hallo Boris,

auf meiner FB7390 funktioniert das WOL Modul definitiv nicht.

# cfg
define computer2 WOL 00:0F:B0:69:0C:B8 192.168.100.12
###

# log
2012.12.27 20:46:08 2: WOL set computer2 on
2012.12.27 20:46:08 2: trying to wake 00:0F:B0:69:0C:B8
2012.12.27 20:46:08 2: trying etherwake with response:
2012.12.27 20:46:08 2: trying direct socket via UDP
2012.12.27 20:46:08 2: trying to wake 00:0F:B0:69:0C:B8
2012.12.27 20:46:08 2: trying etherwake with response:
2012.12.27 20:46:08 2: trying direct socket via UDP
2012.12.27 20:46:08 2: trying to wake 00:0F:B0:69:0C:B8
2012.12.27 20:46:08 2: trying etherwake with response:
2012.12.27 20:46:08 2: trying direct socket via UDP
2012.12.27 20:46:08 2: WOL waking computer2
###

Gleiches gilt für einen weiteren Computer.
In einer Telnet-Console lassen sich beide Systeme mit "wake-lan MAC" problemlos einschalten.

Hast Du eine Idee, wie der Fehler näher einzugrenzen oder gar zu beheben ist?

VG,
WiKa
 
FB7390 FW:FRITZ!OS 05.50 / RFXTRX433 FW:433_64 / ELRO AB440R (modified to IT-Code) - AB440S (IT-Code) - AB440IS (IT-Code) / Oregon THGN132N - THN132N - THGR122N / Intertechno PAR-1000 - PAR1500

Dr. Boris Neubert

Zitat von: WiKa schrieb am Do, 27 Dezember 2012 20:51Tut es bei Dir das Modul  WOL nicht (siehe commandref)?


Hast Du eine Idee, wie der Fehler näher einzugrenzen oder gar zu beheben ist?
 

werde morgen meinen  VM-Server neu aufsetzen und  dann auch versuchen, diesen mit w ol zu wecken. Werde von meinen Erfahrungen berichten (raspberry pi).

Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Dr. Boris Neubert

Hallo,

bei mir läuft WOL auf einem Raspberry Pi mit der UDP-Variante.

Schau mal ins Modul 98_WOL.pm in Zeile 119:

my $response = `/usr/bin/ether-wake $mac`;

Dort wird ether-wake aufgerufen. Finde mal mit

which wake-lan

heraus, wo Dein wake-lan liegt, und ersetze diese Zeile entsprechend.

Grüße
Boris


Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

WiKa

Zitat von: Dr. Boris Neubert schrieb am Mo, 31 Dezember 2012 09:30Finde mal mit
which wake-lan

heraus, wo Dein wake-lan liegt, und ersetze diese Zeile entsprechend.

Den Befehl "which" gibt es auf meiner FB7390 nicht.
Der Befehl "wake-lan" ist auf meiner FB7390 nicht vorhanden.

Wie ich bereits schrieb, laesst sich der Computer in einer Telnetconsole mit

/usr/bin/ether-wake 00:0F:B0:69:0C:B8

problemlos aufwecken.

Hast Du noch einen Lösungsansatz?

Gruß,
WiKa


FB7390 FW:FRITZ!OS 05.50 / RFXTRX433 FW:433_64 / ELRO AB440R (modified to IT-Code) - AB440S (IT-Code) - AB440IS (IT-Code) / Oregon THGN132N - THN132N - THGR122N / Intertechno PAR-1000 - PAR1500

Dr. Boris Neubert

Zitat von: WiKa schrieb am Mo, 31 Dezember 2012 16:38Der Befehl "wake-lan" ist auf meiner FB7390 nicht vorhanden.

Achso, Du schriebst

ZitatIn einer Telnet-Console lassen sich beide Systeme mit "wake-lan MAC" problemlos einschalten.

ZitatWie ich bereits schrieb, laesst sich der Computer in einer Telnetconsole mit

/usr/bin/ether-wake 00:0F:B0:69:0C:B8

problemlos aufwecken.

Hast Du noch einen Lösungsansatz?


Ich vermute, daß FHEM bei Dir im chroot-Jail läuft. Du kannst ja mal schauen, ob Du /usr/bin findest, indem Du im Webinterface oder in der telnet-Konsole von FHEM

{ qx(ls /usr/bin) }

eingibst. Mehr kann ich Dir nicht raten, weil ich mich mit FHEM auf Fritzboxen nicht auskenne. GGf. hilft Dir jemand in FHEM-Fritzbox-Forum weiter.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

WiKa

Zitat von: Dr. Boris Neubert schrieb am Mo, 31 Dezember 2012 17:32In einer Telnet-Console lassen sich beide Systeme mit "wake-lan MAC" problemlos einschalten.
[quote title=Zitat:]

Mein Fehler, es sollte natürlich "ether-wake MAC" heissen.

ZitatDu kannst ja mal schauen, ob Du /usr/bin findest, indem Du im Webinterface oder in der telnet-Konsole von FHEM
{ qx(ls /usr/bin) }
eingibst.

Im Webinterface v. FHEM eingegeben, bekomme ich den Inhalt des Verzeichnisses incl. ether-wake angezeigt.

VG,
WiKa

FB7390 FW:FRITZ!OS 05.50 / RFXTRX433 FW:433_64 / ELRO AB440R (modified to IT-Code) - AB440S (IT-Code) - AB440IS (IT-Code) / Oregon THGN132N - THN132N - THGR122N / Intertechno PAR-1000 - PAR1500

Dr. Boris Neubert

Zitat von: WiKa schrieb am Mo, 31 Dezember 2012 18:41Im Webinterface v. FHEM eingegeben, bekomme ich den Inhalt des Verzeichnisses incl. ether-wake angezeigt.

Dann kannst Du mal mit derselben Syntax den Befehl zum Wecken eingeben (geht vsl. nicht) und außerdem whoami oder id, um herausufinden, als welcher User fhem läuft. Ich vermute noch, daß der fhem-user nicht das Recht hat, ether-wake zu verwenden bzw. Magic Packets zu senden.

Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!