Hallo,
ich arbeite mich gerade in die 99_myUtils.pm ein. Mein FHEM läuft auf einem Windows 2012 Server und soll vorerst auch nicht umgezogen werden.
Dazu habe ich aktuell eine Fritzbox 7270 und ich habe möchte folgendes realisieren:
ich möchte Telnet Befehle auf der Box ausführen und die Rückgabewerte auswerten. Dazu habe ich mir mal ein einfaches Beispiel gestrickt:
(ich habe mich an einem Beispiel hier im Forum orientiert, der Code ist bisher nur minimal angepasst)
my ($ip,$user,$password,$cmd) = @_; #Wenn User und PW erforderlich
my $ret = 0;
my $cmdline = "/usr/bin/ctlmgr_ctl r landevice settings/landevice10/active";
use Net::Telnet;
my $telnet = new Net::Telnet ( Timeout=>15, Errmode=>'die');
$telnet->open("192.168.1.1");
$telnet->waitfor('/fritz.fonwlan.box login: $/i'); #Wenn User und PW erforderlich
$telnet->print($user); #Wenn User und PW erforderlich
$telnet->waitfor('/Password: $/i');
$telnet->print($password);
$telnet->waitfor('/# $/i');
$ret = $telnet->cmd($cmdline);
$telnet->print('exit');
Log 3, "FB_Telnet_test -> $ret -> $cmdline";
if ($ret == 1) { fhem "set dummydevice on"; }else{ fhem "set dummydevice off"; }
}
Das funktioniert soweit ganz gut, ich lasse mir mitloggen, welcher Rückgabewert kommt und mittels welchem Befehl.
Aber:
führe ich den Code auf der Box aus (also das $cmdline), kriege ich als Antwort: 0, während $ret immer 1 ist...
Und ich steh wohl auf dem Schlauch, ich finde nämlich den Grund nicht :(
Danke für die Hilfe vorab :)
Du hast die Doku zu Net::Telnet nicht gelesen, stimmts?
ZitatIn a scalar context, the characters read from the remote side are discarded and 1 is returned on success.
probier mal mit:
Deklaration:
my @ret;
Anwendung:
@ret = $telnet->cmd($cmdline);
Auswertung:
if ($ret[0] == 1)
Hi
das war der Grund :)
Vielen Dank, funktioniert jetzt einwandfrei