WakeOnLan - etwas mächtiger als etherwake

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
firefox_i
Beiträge: 224
Registriert: 04.10.2018, 19:07
Hat sich bedankt: 4 Mal
Danksagung erhalten: 2 Mal

WakeOnLan - etwas mächtiger als etherwake

Beitrag von firefox_i » 08.01.2019, 17:45

Hallo zusammen,
unter CuxD gibt es ja das ether-wake Kommando.
Allerdings hat das - für meine Anwendung - ein paar kleine Nachteile:
a) kein UDP
Ether-wake nutzt den EtherType 0x0842 und nicht UDP --> klassische WOL-Packet-Sniffer erkennen das Paket nicht und deshalb ist die Fehlersuche etwas aufwändiger.

b) Target-IP
Da ich auch Rechner über das WAN wecken können möchte, geht das mit ether-wake nicht, da ich dort keine andere Zieladresse oder eine andere Ziel-Broadcast Adresse angeben kann.

c) Port
Innerhalb desselben Subnetzes ist der Port eigentlich wurscht.
Damit ich aber ggfs. bei einem Wecken über WAN das WOL-Paket via Port-Forwarding in die Subnetze bringen muss, bräuchte ich eine Möglichkeit den Port anzugeben.


Was rausgekommen ist, ist ein TCL Skript:

Code: Alles auswählen

#!/bin/tclsh
#
# Version 1.0 * (C) 2019 by Sven Tejcka
#
# Commandline:
# 1. Parameter:	MAC address in the format xx:xx:xx:xx:xx:xx			--> mandatory
# 2. Parameter:	UDP Port 											--> optional, default: 9
# 3. Parameter:	address to send the packets to						--> optional, default: 255.255.255.255, DNS resovable names are possible
#
# Remark: if the third parameter is needed, the port parameter becomes mandatory
#
#
# Examples
# 
# Example 1:
# SEND_WOL_MP.tcl 01:22:22:22:22:22							--> send a WOl magic packet to 01:22:22:22:22:22, using port 9 and IP address 255.255.255.255
#
# Example 2:
# SEND_WOL_MP.tcl 01:22:22:22:22:22	7						--> send a WOl magic packet to 01:22:22:22:22:22, using port 7 and IP address 255.255.255.255
#
# Example 3:
# SEND_WOL_MP.tcl 01:22:22:22:22:22	7 192.168.10.255		--> send a WOl magic packet to 01:22:22:22:22:22, using port 7 and IP address 192.168.10.255

# socat to be used (maybe needs adaption to your system)
set socat_call "/usr/local/addons/cuxd/extra/socat"

# Debug purposes
puts "Commandline parameters:"
puts $argv

if { $argc == 0 } then {
# no arguments --> just leave
	puts "Missing parameters."
	exit 1
}

# first argument is present --> MAC address
set MAC_addr [binary format H* [join [split [lindex $argv 0] -:] ""]]

# check for port argument
if { $argc >= 2 } then {
# at least 2 arguments --> Port is specified
	set UDP_port [lindex $argv 1]
} else {
	set UDP_port 9
}

# check for broadcast address
if { $argc == 3 } then {
# broadcast address is specified
	set broadcast_addr [lindex $argv 2]
} else {
	set broadcast_addr 255.255.255.255
}

puts $broadcast_addr


# here all data is valid --> lets create the packet     set net [binary format H* [join [split $macAddr -:] ""]]
set magic_packet [binary format c* {0xff 0xff 0xff 0xff 0xff 0xff}]

for {set i 0} {$i < 16} {incr i} {
	append magic_packet $MAC_addr
}

# as CCU2 has no udp package use netcat
# set nc_command [concat "|/usr/local/addons/nc -u" $broadcast_addr $UDP_port]
set nc_pipe [open "|/$socat_call - udp4-sendto:$broadcast_addr:$UDP_port,broadcast" r+]
fconfigure $nc_pipe -translation binary 
	puts -nonewline $nc_pipe $magic_packet
close $nc_pipe

exit 0
Das Skript hat 3 Aufrufparameter:
1. Parameter ist die MAC Adresse (der ist verpflichtend)
2. Parameter ist der Port (ist Optional)
3. Parameter ist die Ziel-Adresse (optional, aber wenn angegeben, ist der Port ein Pflichtparameter!)

Genutzt wird socat.
Im Skript ist der Pfad zu socat anzugeben (ich hab bei meiner CCU das socat aus dem CuxD genutzt).

Eine rudimentäre Fehlerbehandlung ist drin, aber ich hab das Skript gestern abend schnell zusammengehackt und nicht bis in die tiefsten Tiefen und alle Eventualitäten getestet.
Also seid nachsichtig wenn was nicht 100%-ig sein sollte.

Das Skript wie bekannt z.B. per WinSCP auf die CCU (ich hab es in den Ordner \usr\local\ gelegt) und dort mit tclsh aufrufen.


Grüßle
S.
Gruß Sven

Produktivsytem mit CCU3 (Raspberrymatic) , knapp 80 Geräte, Visu per HPCL; Automatisierung einer Praxis bzgl. Überwachung, Heizung usw.
Experimentalsystem mit CCU3 (Raspberrymatic) , ca. 40 Komponenten

Hardwareentwickler und bisschen Ahnung von Programmierung.

firefox_i
Beiträge: 224
Registriert: 04.10.2018, 19:07
Hat sich bedankt: 4 Mal
Danksagung erhalten: 2 Mal

Re: WakeOnLan - etwas mächtiger als etherwake

Beitrag von firefox_i » 21.01.2019, 18:12

Hmm okay,
nachdem sich hier keiner äußert, scheint das Skript irgendwie nicht gut anzukommen.

Okay. Dennoch habt Spaß damit und wenns jemand nutzen kann: nur zu.

S.
Gruß Sven

Produktivsytem mit CCU3 (Raspberrymatic) , knapp 80 Geräte, Visu per HPCL; Automatisierung einer Praxis bzgl. Überwachung, Heizung usw.
Experimentalsystem mit CCU3 (Raspberrymatic) , ca. 40 Komponenten

Hardwareentwickler und bisschen Ahnung von Programmierung.

Benutzeravatar
mirochen
Beiträge: 43
Registriert: 25.01.2019, 18:13

Re: WakeOnLan - etwas mächtiger als etherwake

Beitrag von mirochen » 27.01.2019, 20:19

Danke für das Script, ist sicher mal interessant, vor allem, wenn man über UDP wecken möchte.

Etherwake funktioniert bei Win10 übrigens, auch wenn du Recht hast, und auch ich keine Möglichkeit gefunden habe, es tatsächlich zu beweisen (nur beim "Doing": Rechnerbildschirme gehen in den Standby, WOL-Paket kommt offensichtlich beim Betreten vom Raum und Bildschirme gehen an).
Signatur hat Urlaub

firefox_i
Beiträge: 224
Registriert: 04.10.2018, 19:07
Hat sich bedankt: 4 Mal
Danksagung erhalten: 2 Mal

Re: WakeOnLan - etwas mächtiger als etherwake

Beitrag von firefox_i » 28.01.2019, 09:38

Hi,
dass Win10 Rechner auch mit Etherwake geweckt werden können hatte ich nicht in Abrede gestellt.
Sorry wenn es so rüberkam.

Wo ich eben mit Etherwake so meine Problemchen habe ist, dass die üblichen Sniffer für WOL Pakete eben auf UDP gehen.
Und nur weil ich mal wieder ein WOL Szenario aufsetze möchte ich nicht jedesmal Wireshark bemühen um zu checken ob denn nun die Pakete durch alle Switche usw. ankommen.

Und was ich eben auch nicht geschafft habe war, dass ich eben den Port und die Ziel-IP angeben kann (ich wecke stellenweise Remote übers Internet und dedizierte Port-Weiterleitung im Router).

S.
Gruß Sven

Produktivsytem mit CCU3 (Raspberrymatic) , knapp 80 Geräte, Visu per HPCL; Automatisierung einer Praxis bzgl. Überwachung, Heizung usw.
Experimentalsystem mit CCU3 (Raspberrymatic) , ca. 40 Komponenten

Hardwareentwickler und bisschen Ahnung von Programmierung.

Benutzeravatar
mirochen
Beiträge: 43
Registriert: 25.01.2019, 18:13

Re: WakeOnLan - etwas mächtiger als etherwake

Beitrag von mirochen » 28.01.2019, 11:29

Oh - sollte auch von mir nicht so rüberkommen, dass ich dir das unterstellt habe :D

Ich finde es wirklich gut, dass du eine weitere Alternative anbietest, gerade, weil es doch nicht so ganz banal ist, wenn man sich im Unixumfeld nicht so auskennt.

Mag es auch nicht, dass es echt anspruchsvoll ist, "nachzuweisen", dass das Aufwecken über etherwake funktioniert, das hat mich schon immer genervt, deshalb hatte ich früher das WOL über ioBroker gemacht - was natürlich "von hinten durch die Brust ins Auge ist", wenn es auch direkt geht.
Signatur hat Urlaub

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“