diff --git a/fhem/FHEM/73_PRESENCE2.pm b/fhem/FHEM/73_PRESENCE2.pm index 6db91cacd..7b3d5d9ec 100644 --- a/fhem/FHEM/73_PRESENCE2.pm +++ b/fhem/FHEM/73_PRESENCE2.pm @@ -33,7 +33,7 @@ use Blocking; use Time::HiRes qw(gettimeofday usleep sleep); use DevIo; -my $ModulVersion = "01.03c"; +my $ModulVersion = "01.03d"; my %LOG_Text = ( 0 => "SERVER:", 1 => "ERROR:", @@ -313,6 +313,29 @@ sub PRESENCE2_Define($$) { setDevAttrList($hash->{NAME}, $pingAttr); } + } + elsif ($a[2] eq "netcat") { + delete $attr{$name}{nonblockingTimeOut}; + my ($Address, $Port) = split(/:/, $hash->{ADDRESS}); + + return "$Address is not a valid IP address" if ($Address !~ m/^\s*([0-9]{1,3}\.){3}[0-9]{1,3}\s*$/); + + $hash->{helper}{os}{Cmd} = "nc -vz $Address $Port 2>&1"; + + $hash->{helper}{os}{search} = 'succeeded'; + + if ($^O !~ m/solaris/ && $^O !~ m/(Win|cygwin)/) { + my $pingAttr = "disable:0,1 " + . "thresholdAbsence " + . "intervalNormal " + . "intervalPresent " + . "prGroup:multiple,static,dynamic " + . "prGroupDisp:condense,verbose " + . "FhemLog3Std:0,1 " + . $readingFnAttributes; + setDevAttrList($hash->{NAME}, $pingAttr); + } + } elsif($a[2] eq "lan-bluetooth") { delete $attr{$name}{nonblockingTimeOut}; @@ -321,7 +344,7 @@ sub PRESENCE2_Define($$) { $attr{$name}{intervalNormal} = 30; $attr{$name}{intervalPresent} = 30; my ($dev,$port) = split(":",$a[4].":5222"); - return "$dev not a valid IP address" if ($dev !~ m/^\s*([0-9]{1,3}\.){3}[0-9]{1,3}\s*$/); + return "$dev is not a valid IP address" if ($dev !~ m/^\s*([0-9]{1,3}\.){3}[0-9]{1,3}\s*$/); $hash->{DeviceName} = "$dev:$port"; } elsif($a[2] eq "bluetooth") { @@ -423,7 +446,7 @@ sub PRESENCE2_Define($$) { setDevAttrList($hash->{NAME}, $daemonAttr); } else { - my $msg = "unknown mode \"".$a[2]."\" in define statement: Please use lan-ping, daemon, shellscript, function, bluetooth, lan-bluetooth"; + my $msg = "unknown mode \"".$a[2]."\" in define statement: Please use lan-ping, netcat, daemon, shellscript, function, bluetooth, lan-bluetooth"; Log 2, "PRESENCE2 ($name) - ".$msg; return $msg } @@ -565,7 +588,7 @@ sub PRESENCE2_Set($@) { my $powerCmd = AttrVal($name, "powerCmd", undef); if ($cmd eq "statusRequest"){ - if($hash->{MODE} =~ m/(lan-ping|shellscript|function|bluetooth)/) { + if($hash->{MODE} =~ m/(lan-ping|netcat|shellscript|function|bluetooth)/) { PRESENCE2_Log $name, 5, "PRESENCE2 ($name) - starting local scan"; my $daemon = PRESENCE2_getDaemonName(); return PRESENCE2_daemonScanScheduler($defs{$daemon}, $name); @@ -1505,6 +1528,7 @@ sub PRESENCE2_doEvtCheckReply($){ This module provides several operational modes to serve your needs. These are: