2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-01 01:09:47 +00:00

10_ZWave.pm: add routeInfo oparsing from krikan (Forum #120800)

git-svn-id: https://svn.fhem.de/fhem/trunk@24394 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2021-05-08 11:23:32 +00:00
parent 6ea260caac
commit 4317070bee

View File

@ -4864,6 +4864,57 @@ ZWave_addToSendStack($$$)
return undef;
}
sub
ZWAVE_parseRouteInfo($$$)
{
my ($ioName, $hash, $arg) = @_;
my $repeaters = hex(substr($arg,4,2));
my @list;
my $maxlen = $repeaters * 2 + 8;
my $i;
for(my $off=6; $off<$maxlen; $off+=2,$i++) {
my $dec = hex(substr($arg, $off, 2));
my $msg = "reservedValue";
if( $dec == 127) { $msg = "N/A";
} elsif($dec == 126) { $msg = "aboveMaxPower";
} elsif($dec == 125) { $msg = "belowReceiverSensitivity";
} elsif($dec > 161 && $dec < 225) {
$msg = unpack('c', pack('C', $dec))." dBm";
}
push(@list, "rssi$i:$msg");
}
my $rssi = join(" ", @list);
my $ackCh = hex(substr($arg,16,2));
my $lastCh = hex(substr($arg,18,2));
my $scheme = hex(substr($arg,20,2));
my $homeId = $hash->{homeId};
my @list2;
for(my $off=22; $off<($repeaters*2+22); $off+=2) {
my $dec = hex(substr($arg, $off, 2));
my $hex = sprintf("%02x", $dec);
my $h = ($hex eq $hash->{nodeIdHex} ?
$hash : $modules{ZWave}{defptr}{"$homeId $hex"});
push @list2, ($h ? $h->{NAME} : "UNKNOWN_$dec") if($dec);
}
my $f = substr($arg, 30, 2);
push @list2, ("at ".($f==1 ? "9.6": ($f==2 ? "40":"100"))."kbps")
if(@list2 && $f =~ m/[123]/);
my $routefor = join(" ", @list2);
my $tries = hex(substr($arg,32,2));
my $lastfailed = hex(substr($arg,34,4));
my $timeToCb = hex(substr($arg,0,4))/100;
my $msg = "timeToCb:$timeToCb repeaters:$repeaters $rssi ".
"ackCh:$ackCh lastCh:$lastCh scheme:$scheme ".
"rep:$routefor routeTries:$tries lastFailed:$lastfailed";
Log3 $ioName, 5, $msg;
readingsSingleUpdate($hash, "routeInfo", $msg, 1);
}
###################################
# 0004000a03250300 (sensor binary off for id 11)
@ -5106,6 +5157,7 @@ ZWave_Parse($$@)
if($id eq "00") {
my $name="";
if($hash) {
ZWAVE_parseRouteInfo($ioName, $hash, $arg) if(length($arg) == 38);
ZWave_processSendStack($hash, "ack", $callbackid);
readingsSingleUpdate($hash, "transmit", $lmsg, 0);