diff --git a/fhem/FHEM/99_Utils.pm b/fhem/FHEM/99_Utils.pm index 0f3028d77..81b134b6d 100644 --- a/fhem/FHEM/99_Utils.pm +++ b/fhem/FHEM/99_Utils.pm @@ -217,6 +217,26 @@ IsInt($) defined $_[0] && $_[0] =~ /^[+-]?\d+$/; } +# Small NC replacement: fhemNc("ip:port", "text", waitForReturn); +sub +fhemNc($$$) +{ + my ($addr, $txt, $waitForReturn) = @_; + my $client = IO::Socket::INET->new(PeerAddr => $addr); + return "Can't connect to $addr\n" if(!$client); + syswrite($client, $txt); + return "" if(!$waitForReturn); + my ($ret, $buf) = ("", ""); + shutdown($client, 1); + alarm(5); + while(sysread($client, $buf, 256) > 0) { + $ret .= $buf; + } + alarm(0); + close($client); + return $ret; +} + 1; =pod @@ -310,6 +330,12 @@ myUtils_Initialize($$) to the number of seconds since 1970. Optimized for repeated use of similar timestamps.
+
  • fhemNc("host:port", "textToSend", waitForReturn)
    + sends textToSend to host:port, and if waitForReturn is set, then read + the answer (wait up to 5 seconds) and return it. Intended as small + nc replacement. +

  • + =end html diff --git a/fhem/FHEM/FritzBoxUtils.pm b/fhem/FHEM/FritzBoxUtils.pm index b6207932c..b1b1706f9 100644 --- a/fhem/FHEM/FritzBoxUtils.pm +++ b/fhem/FHEM/FritzBoxUtils.pm @@ -99,18 +99,18 @@ sub FB_WLANswitch($) { my $cmd = shift; my $ret = ""; - if ($cmd =~ m"on"i) { # on or ON - $ret .= "ATD: " . `echo "ATD#96*1*" | nc 127.0.0.1 1011` ; + if ($cmd =~ m/on/i) { # on or ON + $ret .= "ATD:".fhemNc("127.0.0.1:1011", "ATD#96*1*\n", 1); sleep 1 ; - $ret .= " ATH: " . `echo "ATH" | nc 127.0.0.1 1011` ; + $ret .= " ATH:".fhemNc("127.0.0.1:1011", "ATH\n", 1); } - if ($cmd =~ m"off"i) { # off or OFF - $ret .= "ATD: " . `echo "ATD#96*0*" | nc 127.0.0.1 1011` ; + if ($cmd =~ m/off/i) { # off or OFF + $ret .= "ATD:".fhemNc("127.0.0.1:1011", "ATD#96*0*\n", 1); sleep 1 ; - $ret .= " ATH: " . `echo "ATH" | nc 127.0.0.1 1011` ; + $ret .= " ATH:".fhemNc("127.0.0.1:1011", "ATH\n", 1); } $ret =~ s,[\r\n]*,,g; # remove CR from return-string - Log 4, "FB_WLANswitch($cmd) returned: $ret"; + Log 3, "FB_WLANswitch($cmd) returned: $ret"; } 1;