diff --git a/fhem/FHEM/00_ZWDongle.pm b/fhem/FHEM/00_ZWDongle.pm
index 7aaaa0bd9..d0b03e733 100755
--- a/fhem/FHEM/00_ZWDongle.pm
+++ b/fhem/FHEM/00_ZWDongle.pm
@@ -26,7 +26,7 @@ my %sets = (
onNwSec=>0xc1, onSec=>0x81 } },
"backupCreate" => { cmd => "" },
"backupRestore" => { cmd => "" },
- "controllerChange" => { cmd => "4d%02x@", #ZW_CONTROLLER_CHANGE
+ "controllerChange" => { cmd => "4d%02x@", # ZW_CONTROLLER_CHANGE
param => { on =>0x02, stop =>0x05,
stopFailed =>0x06 } },
"createNewPrimary" => { cmd => "4c%02x@", # ZW_CREATE_NEW_PRIMARY
@@ -1057,6 +1057,11 @@ ZWDongle_Ready($)
ZW_SET_SUC_NODE_ID [ok|failed|callbackSucceeded|callbackFailed]
+
sucRouteAdd / sucRouteDel
+ ZW_ASSIGN_SUC_RETURN_ROUTE [started|alreadyActive|transmitOk|
+ transmitNoAck|transmitFail|transmitNotIdle|
+ transmitNoRoute]
+
diff --git a/fhem/FHEM/10_ZWave.pm b/fhem/FHEM/10_ZWave.pm
index 2581ec225..68903b230 100755
--- a/fhem/FHEM/10_ZWave.pm
+++ b/fhem/FHEM/10_ZWave.pm
@@ -745,6 +745,10 @@ ZWave_Cmd($$@)
if($type eq "set") {
$cmdList{neighborUpdate}{fmt} = "48$id";
$cmdList{neighborUpdate}{id} = "";
+ $cmdList{sucRouteAdd}{fmt} = "51$id";
+ $cmdList{sucRouteAdd}{id} = "";
+ $cmdList{sucRouteDel}{fmt} = "55$id";
+ $cmdList{sucRouteDel}{id} = "";
}
$cmdList{neighborList}{fmt} = "x" if($type eq "get"); # Add meta command
}
@@ -851,8 +855,11 @@ ZWave_Cmd($$@)
}
my $data;
- if($cmd eq "neighborUpdate") {
+ if($cmd eq "neighborUpdate" ||
+ $cmd eq "sucRouteAdd" ||
+ $cmd eq "sucRouteDel" ) {
$data = $cmdFmt;
+ $data .= ZWave_callbackId($baseHash);
} else {
my $len = sprintf("%02x", length($cmdFmt)/2+1);
@@ -895,7 +902,11 @@ ZWave_Cmd($$@)
$val = ($data ? ZWave_Parse($iohash, $data, $type) : "no data returned");
} elsif($type ne "get") {
- ZWave_processSendStack($hash, "next") if($cmd eq "neighborUpdate");
+ if($cmd eq "neighborUpdate" ||
+ $cmd eq "sucRouteAdd" ||
+ $cmd eq "sucRouteDel" ) {
+ ZWave_processSendStack($hash, "next");
+ }
$cmd .= " ".join(" ", @a) if(@a);
readingsSingleUpdate($hash, "state", $cmd, 1);
@@ -3717,6 +3728,18 @@ ZWave_Parse($$@)
return "";
}
+ if($cmd eq "ZW_ASSIGN_SUC_RETURN_ROUTE" ||
+ $cmd eq "ZW_DELETE_SUC_RETURN_ROUTE") {
+ my $retval;
+ if($arg eq "00") { $retval = 'alreadyActive';
+ } elsif($arg eq "01") { $retval = 'started';
+ } else { $retval = 'unknown_'.$arg; # should never happen
+ }
+ DoTrigger($ioName, "$cmd $retval");
+ return "";
+ }
+
+
Log3 $ioName, 4, "$ioName unhandled ANSWER: $cmd $arg";
return "";
}
@@ -3889,6 +3912,16 @@ ZWave_Parse($$@)
} else { $evt = 'unknown_'.$id; # should never happen
}
+ } elsif($cmd eq "ZW_ASSIGN_SUC_RETURN_ROUTE" ||
+ $cmd eq "ZW_DELETE_SUC_RETURN_ROUTE") {
+ if($id eq "00") { $evt = 'transmitOk';
+ } elsif($id eq "01") { $evt = 'transmitNoAck';
+ } elsif($id eq "02") { $evt = 'transmitFail';
+ } elsif($id eq "03") { $evt = 'transmitFailNotIdle';
+ } elsif($id eq "04") { $evt = 'transmitNoRoute';
+ } else { $evt = 'unknown_'.$id; # should never happen
+ }
+
} elsif($cmd eq "ZW_SET_SUC_NODE_ID") {
if($id eq "05") { $evt = 'callbackSucceeded';
} elsif($id eq "06") { $evt = 'callbackFailed';
@@ -4246,6 +4279,13 @@ s2Hex($)
update process. To read node's neighbor list see neighborList get
below.
+ sucRouteAdd
+ Inform the routing/enhanced slave of the presence of a SUC/SIS. Assign
+ up to 4 static return routes to SUC/SIS.
+
+ sucRouteDel
+ Delete static return routes to SUC/SIS node.
+
Class ASSOCIATION
associationAdd groupId nodeId ...
Add the specified list of nodeIds to the association group groupId.
Note:
@@ -5105,6 +5145,11 @@ s2Hex($)
neighborUpdate
ZW_REQUEST_NODE_NEIGHBOR_UPDATE [started|done|failed]
+
sucRouteAdd / sucRouteDel
+ ZW_ASSIGN_SUC_RETURN_ROUTE [started|alreadyActive|transmitOk|
+ transmitNoAck|transmitFail|transmitNotIdle|
+ transmitNoRoute]
+
Class ALARM
Devices with class version 1 support: alarm_type_X:level Y
For higher class versions more detailed events with 100+ different