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!

Markus

Ich habe auch die fb7390 und es Funktioniert! Danke Boris
fhem ist von fhem.de und läuft als root auf der Fritzbox

in meiner .cfg steht nur
define computer1 WOL E8:08:9B:C8:E3:B2 192.168.178.3
gestartet wird mit
set computer1 on

In der fritzbox habe ich eingestellt:
"Diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen."

Gruß Markus
Raspberry Pi2 als FHEM-Plattform
HM, FS20, 1-Wire, PanStamp,LW12,Intertechno,ESPEasy,Alexa

WiKa

Zitat von: Dr. Boris Neubert schrieb am Di, 01 Januar 2013 09:55Dann kannst Du mal mit derselben Syntax den Befehl zum Wecken eingeben (geht vsl. nicht)

Hallo Boris,
wie Du erwartet hast, funktioniert der Befehl zum Wecken nicht.
Zitatwhoami
liefert kein Ergebnis.
Zitatid
liefert:

uid=1080(fhem) gid=0(root) groups=0(root)


Ich vermute, "uid=1080(fhem)" bedeutet, mein FHEM läuft nicht als root, und ich habe deshalb die Probleme.
Mein FHEM wurde vor dem Firmwareupdate der FB auf 5.x von der Laborversion AVM auf die Version von fhem.de umgestellt.

Bevor ich jetzt FHMEM nochmal komplett neu installiere, hast Du evtl. noch eine Idee zur Lösung meines Problems?

Ganz herzlichen Dank für dein bisheriges Engagement für FHEM und deine Mühen, mein Problem einzugrenzen,

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 Di, 01 Januar 2013 23:34[quote title=Zitat:whoami
liefert kein Ergebnis.
Zitatid
liefert:

uid=1080(fhem) gid=0(root) groups=0(root)


Ich vermute, "uid=1080(fhem)" bedeutet, mein FHEM läuft nicht als root, und ich habe deshalb die Probleme.
Mein FHEM wurde vor dem Firmwareupdate der FB auf 5.x von der Laborversion AVM auf die Version von fhem.de umgestellt.

Am besten fragst Du im fhem-Forum noch mal nach und gibst die Ergebnisse mit, die wir hier herausgefunden haben.

Das Problem läßt sich vermutlich lösen, indem Du an suid-Flag bei ether-wake setzst: chmod og+s /usr/bin/ether-wake.

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 Mi, 02 Januar 2013 07:18Am besten fragst Du im fhem-Forum noch mal nach und gibst die Ergebnisse mit, die wir hier herausgefunden haben.

Hallo Boris,
zunächst alles Gute für 2013.

Da ich dir meine Frage bereits innerhalb des Forums gestellt habe, können die anderen Forenmitglieder unsere Konversation mitlesen.

Kein Grund zur Veranlassung :-)

ZitatDas Problem läßt sich vermutlich lösen, indem Du an suid-Flag bei ether-wake setzst:

chmod og+s /usr/bin/ether-wake


Funktioniert leider nicht.
Telnet meldet:

# chmod og+s /usr/bin/ether-wake
chmod: /usr/bin/ether-wake: Read-only file system


Ratlosigkeit meinerseits in Anbetracht der Tatsache, dass Markus berichtet:
ZitatIch habe auch die fb7390 und es Funktioniert! Danke Boris
fhem ist von fhem.de und läuft als root auf der Fritzbox

Nachdem ich aus http://www.fhemwiki.de/wiki/FritzBox_Parameter_in_fhem_anzeigen#Wichtig den
Abschnitt "Wichtig - Nicht im chroot laufen lassen, in startfhem folgende Zeilen auskommentieren und die Box (nicht nur fhem) anschließend neu starten:"
 

## let FHEM run as user boxusr80 by adding user fhem with uid of boxusr80
#id fhem > /dev/null 2>&1
#if [ "$?" -ne "0" ]; then
#  echo "user fhem does not exist. Adding it."
#  echo "fhem:any:1080:0:fhem:/home-not-used:/bin/sh" >>/var/tmp/passwd
#fi


umgesetzt hatte, funktioniert WOL ohne Probleme.

"ID" liefert jetzt:

uid=0(root) gid=0(root)


Herzlichen Dank für deine investierte Zeit.
Wenn ich könnte, würde ich wie in anderen Foren möglich, den Betrag als "gelöst" markieren.

@Markus
Könntest Du bitte den Inhalt deiner "startfhem" hier einstellen?

Ich werde in jedem Fall einen Eintrag in "Fritzbox" mit Betrett "WOL suf der FB 7390 / mögliche Probleme und die Lsung" erstelen, welcher auf diesen Betrag verweist.

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

Markus

klar kann ich :-)

startfhem

#!/bin/sh

home=/var/InternerSpeicher/fhem

cd $home

trap "" SIGHUP
modprobe cdc_acm
modprobe ftdi_sio
sleep 2

ln -sf $home/FHEM/fhemcmd.sh /var/fhemcmd

PATH=$home:$PATH
export PATH

export LD_LIBRARY_PATH=$home/lib
export PERL5LIB=$home/lib/perl5/site_perl/5.12.2/mips-linux:$home/lib/perl5/site_perl/5.12.2:$home/lib/perl5/5.12.2/mips-linux:$home/lib/perl5/5.12.2

# add user fhem with uid of boxusr80/boxusr99 (== ftpuser)
# Comment/delete everything between START and END to run FHEM as root

## START:fhem-user
#id fhem > /dev/null 2>&1
#if test "$?" -ne "0"; then
#  grep -q 1099 /etc/passwd;
#  if test $? -eq "0"; then
#    echo "fhem:any:1099:0:fhem:/home-not-used:/bin/sh" >>/var/tmp/passwd
#  else
#    echo "fhem:any:1080:0:fhem:/home-not-used:/bin/sh" >>/var/tmp/passwd
#  fi
#  chown -R fhem FHEM docs log www
#  chown fhem . *
#  chown root dfu-programmer    
#  chmod u+s dfu-programmer
#fi
## END:fhem-user

perl fhem.pl fhem.cfg




Gruß Markus
Raspberry Pi2 als FHEM-Plattform
HM, FS20, 1-Wire, PanStamp,LW12,Intertechno,ESPEasy,Alexa