python , shell .... warum denn nicht gleich Perl ?
Hier meine beiden Vorschläge für die 99_myUtils mit ordenlichen Fehlermeldungen im Logfile
sub cube_reboot
{
use IO::Socket;
my $host = shift // return;
my $serial = shift // return;
my $sock = IO::Socket::INET->new(
PeerPort => 23272,
PeerHost => $host,
Type => SOCK_DGRAM,
Proto => 'udp',
Blocking => 0,
Timeout => 5);
if (!$sock) {
Log3 ('cube_reboot', 2, "Cannot create socket - $@");
return;
}
my $message = 'eQ3Max*'.0x00.$serial.'R';
my $s = $sock->send($message, 0, $host);
Log3 ('cube_reboot', 2, "Cannot send message $message to cube $host") if (!defined($s));
$sock->close();
return;
}
Aufruf z.B. (bei mir)
{cube_reboot('192.168.0.228', 'MKF0071736')}
oder man holt sich die IP und SerienNr direkt aus dem Device :
sub cube_reboot
{
use IO::Socket;
my $name = shift // return;
my ($host,undef) = split(':',InternalVal($name ,'DeviceName', ': '));
my $serial = InternalVal($name, 'serial', '');
if (!$serial || !$host) {
Log3 ('cube_reboot', 2, "Cannot get cube IP") if (!$host);
Log3 ('cube_reboot', 2, "Cannot get cube serial") if (!$serial);
return;
}
my $sock = IO::Socket::INET->new(
PeerPort => 23272,
PeerHost => $host,
Type => SOCK_DGRAM,
Proto => 'udp',
Blocking => 0,
Timeout => 5);
if (!$sock) {
Log3 ('cube_reboot', 2, "Cannot create socket - $@");
return;
}
my $message = 'eQ3Max*'.0x00.$serial.'R';
my $s = $sock->send($message, 0, $host);
Log3 ('cube_reboot', 2, "Cannot send message $message to cube $host") if (!defined($s));
$sock->close();
return;
}
der Aufruf ist dann auch etwas kürzer, da nur noch der Name übergeben werden muß
{cube_reboot('meinCube')}