mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-02-08 05:15:10 +00:00
10_ZWave.pm: fix neighborList for WAKE_UP (Forum #49752)
git-svn-id: https://svn.fhem.de/fhem/trunk@10947 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
6f7a4f2b49
commit
d1243580f0
@ -698,6 +698,28 @@ ZWave_execInits($$)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub
|
||||||
|
ZWave_neighborList($)
|
||||||
|
{
|
||||||
|
my ($hash) = @_;
|
||||||
|
my $id = $hash->{nodeIdHex};
|
||||||
|
|
||||||
|
# GET_ROUTING_TABLE_LINE, no dead links, include routing neighbors
|
||||||
|
IOWrite($hash, "", "0080${id}0100");
|
||||||
|
|
||||||
|
no strict "refs";
|
||||||
|
my $iohash = $hash->{IODev};
|
||||||
|
my $fn = $modules{$iohash->{TYPE}}{ReadAnswerFn};
|
||||||
|
my ($err, $data) = &{$fn}($iohash, "neighborList", "^0180") if($fn);
|
||||||
|
use strict "refs";
|
||||||
|
|
||||||
|
return $err if($err);
|
||||||
|
$data =~ s/^0180//;
|
||||||
|
$data = zwlib_parseNeighborList($iohash, $data);
|
||||||
|
readingsSingleUpdate($hash, "neighborList", $data, 1) if($hash);
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
###################################
|
###################################
|
||||||
sub
|
sub
|
||||||
ZWave_Cmd($$@)
|
ZWave_Cmd($$@)
|
||||||
@ -729,12 +751,7 @@ ZWave_Cmd($$@)
|
|||||||
$cmdList{neighborUpdate}{fmt} = "48$id";
|
$cmdList{neighborUpdate}{fmt} = "48$id";
|
||||||
$cmdList{neighborUpdate}{id} = "";
|
$cmdList{neighborUpdate}{id} = "";
|
||||||
}
|
}
|
||||||
if($type eq "get") {
|
$cmdList{neighborList}{id} = 1 if($type eq "get"); # Add meta command
|
||||||
# GET_ROUTING_TABLE_LINE, no dead links, include routing neighbors
|
|
||||||
$cmdList{neighborList}{fmt} = "80${id}0100";
|
|
||||||
$cmdList{neighborList}{id} = "";
|
|
||||||
$cmdList{neighborList}{regexp} = "^0180";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if($type eq "set" && $cmd eq "rgb") {
|
if($type eq "set" && $cmd eq "rgb") {
|
||||||
@ -774,6 +791,8 @@ ZWave_Cmd($$@)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return ZWave_neighborList($hash) if($cmd eq "neighborList");
|
||||||
|
|
||||||
################################
|
################################
|
||||||
# ZW_SEND_DATA,nodeId,CMD,ACK|AUTO_ROUTE
|
# ZW_SEND_DATA,nodeId,CMD,ACK|AUTO_ROUTE
|
||||||
my $cmdFmt = $cmdList{$cmd}{fmt};
|
my $cmdFmt = $cmdList{$cmd}{fmt};
|
||||||
@ -837,8 +856,7 @@ ZWave_Cmd($$@)
|
|||||||
}
|
}
|
||||||
|
|
||||||
my $data;
|
my $data;
|
||||||
if($cmd eq "neighborUpdate" ||
|
if($cmd eq "neighborUpdate") {
|
||||||
$cmd eq "neighborList") {
|
|
||||||
$data = $cmdFmt;
|
$data = $cmdFmt;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -881,9 +899,6 @@ ZWave_Cmd($$@)
|
|||||||
|
|
||||||
$val = ($data ? ZWave_Parse($iohash, $data, $type) : "no data returned");
|
$val = ($data ? ZWave_Parse($iohash, $data, $type) : "no data returned");
|
||||||
|
|
||||||
ZWave_processSendStack($hash, "next") # No radio traffic for neighborList
|
|
||||||
if($data && $cmd eq "neighborList");
|
|
||||||
|
|
||||||
} elsif($type ne "get") {
|
} elsif($type ne "get") {
|
||||||
ZWave_processSendStack($hash, "next") if($cmd eq "neighborUpdate");
|
ZWave_processSendStack($hash, "next") if($cmd eq "neighborUpdate");
|
||||||
$cmd .= " ".join(" ", @a) if(@a);
|
$cmd .= " ".join(" ", @a) if(@a);
|
||||||
@ -3586,8 +3601,8 @@ ZWave_addToSendStack($$$)
|
|||||||
push @{$ss}, "$type:$cmd";
|
push @{$ss}, "$type:$cmd";
|
||||||
|
|
||||||
if(ZWave_isWakeUp($hash)) {
|
if(ZWave_isWakeUp($hash)) {
|
||||||
# SECURITY XXX and neighborList
|
# SECURITY XXX
|
||||||
if ($cmd =~ m/^......988[01].*/ || $cmd =~ m/^80..0100$/) {
|
if($cmd =~ m/^......988[01].*/) {
|
||||||
Log3 $hash->{NAME}, 5, "$hash->{NAME}: Sendstack bypassed for $cmd";
|
Log3 $hash->{NAME}, 5, "$hash->{NAME}: Sendstack bypassed for $cmd";
|
||||||
} else {
|
} else {
|
||||||
return "Scheduled for sending after WAKEUP" if(!$hash->{wakeupAlive});
|
return "Scheduled for sending after WAKEUP" if(!$hash->{wakeupAlive});
|
||||||
@ -3623,18 +3638,6 @@ ZWave_Parse($$@)
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if($msg =~ m/^neighborList (..) 0180(.*)$/) {
|
|
||||||
my ($id, $data) = ($1, $2);
|
|
||||||
my $hash = $modules{ZWave}{defptr}{"$homeId $id"};
|
|
||||||
my $name = ($hash ? $hash->{NAME} : "unknown");
|
|
||||||
|
|
||||||
$msg = zwlib_parseNeighborList($iodev, $data);
|
|
||||||
|
|
||||||
readingsSingleUpdate($hash, "neighborList", $msg, 1) if($hash);
|
|
||||||
return $msg if($srcCmd);
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
if($msg =~ m/^01(..)(..*)/) { # 01==ANSWER from the ZWDongle
|
if($msg =~ m/^01(..)(..*)/) { # 01==ANSWER from the ZWDongle
|
||||||
my ($cmd, $arg) = ($1, $2);
|
my ($cmd, $arg) = ($1, $2);
|
||||||
$cmd = $zw_func_id{$cmd} if($zw_func_id{$cmd});
|
$cmd = $zw_func_id{$cmd} if($zw_func_id{$cmd});
|
||||||
|
@ -157,7 +157,7 @@ zwlib_parseNeighborList($$)
|
|||||||
my $homeId = $iodev->{homeId};
|
my $homeId = $iodev->{homeId};
|
||||||
my $ioName = $iodev->{NAME};
|
my $ioName = $iodev->{NAME};
|
||||||
my @r = map { ord($_) } split("", pack('H*', $data));
|
my @r = map { ord($_) } split("", pack('H*', $data));
|
||||||
return "Bogus neightborList $data" if(int(@r) != 29);
|
return "Bogus neighborList $data" if(int(@r) != 29);
|
||||||
|
|
||||||
my @list;
|
my @list;
|
||||||
my $ioId = ReadingsVal($ioName, "homeId", "");
|
my $ioId = ReadingsVal($ioName, "homeId", "");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user