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