diff --git a/fhem/FHEM/00_ZWDongle.pm b/fhem/FHEM/00_ZWDongle.pm
index 3e159d9e7..ee45c90e1 100755
--- a/fhem/FHEM/00_ZWDongle.pm
+++ b/fhem/FHEM/00_ZWDongle.pm
@@ -21,15 +21,18 @@ sub ZWDongle_ProcessSendStack($);
# http://buzzdavidson.com/?p=68
# https://bitbucket.org/bradsjm/aeonzstickdriver
my %sets = (
- "addNode" => { cmd => "4a%02x@", # ZW_ADD_NODE_TO_NETWORK'
+ "addNode" => { cmd => "4a%02x@", # ZW_ADD_NODE_TO_NETWORK
param => { onNw =>0xc1, on =>0x81, off=>0x05,
onNwSec=>0xc1, onSec=>0x81 } },
"backupCreate" => { cmd => "" },
"backupRestore" => { cmd => "" },
- "createNode" => { cmd => "60%02x" }, # ZW_REQUEST_NODE_INFO'
+ "createNode" => { cmd => "60%02x" }, # ZW_REQUEST_NODE_INFO
"factoryReset" => { cmd => "" }, # ZW_SET_DEFAULT
+ "learnMode" => { cmd => "50%02x@", # ZW_SET_LEARN_MODE
+ param => { onNw =>0x02, on =>0x01,
+ disable=>0x00 } },
"removeFailedNode" => { cmd => "61%02x@" }, # ZW_REMOVE_FAILED_NODE_ID
- "removeNode" => { cmd => "4b%02x@", # ZW_REMOVE_NODE_FROM_NETWORK'
+ "removeNode" => { cmd => "4b%02x@", # ZW_REMOVE_NODE_FROM_NETWORK
param => {onNw=>0xc1, on=>0x81, off=>0x05 } },
"reopen" => { cmd => "" },
"replaceFailedNode"=> { cmd => "63%02x@" }, # ZW_REPLACE_FAILED_NODE
@@ -879,13 +882,18 @@ ZWDongle_Ready($)
factoryReset [yes]
Reset controller to default state.
- Erase all node and routing infos, assign a new random HomeId.
+ Erase all node and routing infos, assign a new random homeId.
To control a device it must be re-included and re-configured.
!Use this with care AND only if You know what You do!
Note: the corresponding FHEM devices have to be deleted manually.
+ learnMode [on|onNw|disable]
+ Add or remove controller to/from an other network.
+ Assign a homeId, nodeId and receive/store nodeList and routing infos.
+
+
removeFailedNode
- Remove a non-responding node -that must be on the failed Node list- from
+ Remove a non-responding node -that must be on the failed node list- from
the routing table in controller. Instead,always use removeNode if possible.
Note: the corresponding FHEM device have to be deleted manually.
@@ -901,7 +909,7 @@ ZWDongle_Ready($)
replaceFailedNode
Replace a non-responding node with a new one. The non-responding node
- must be on the failed Node list.
+ must be on the failed node list.
sucNodeId [nodeId] [sucState] [capabilities]
Configure a Controller Node to be a SUC/SIS or not.
@@ -924,7 +932,7 @@ ZWDongle_Ready($)
return the six hex-digit homeId of the controller.
isFailedNode
- return if a node is stored in the failed node List.
+ return if a node is stored in the failed node list.
caps, ctrlCaps, version
return different controller specific information. Needed by developers
@@ -993,9 +1001,10 @@ ZWDongle_Ready($)
ZW_REQUEST_NODE_NEIGHBOR_UPDATE [started|done|failed]
ZW_SET_DEFAULT [done]
-
- ZW_SET_SUC_NODE_ID [setSucNodeOk|setSucNodeFailed|
- setSucNodeCallbackSucceeded|setSucNodeCallbackFailed]
+
+ ZW_SET_LEARN_MODE [started|done|failed|deleted]
+
+ ZW_SET_SUC_NODE_ID [ok|failed|callbackSucceeded|callbackFailed]
diff --git a/fhem/FHEM/10_ZWave.pm b/fhem/FHEM/10_ZWave.pm
index a10d52ed6..9a899510d 100755
--- a/fhem/FHEM/10_ZWave.pm
+++ b/fhem/FHEM/10_ZWave.pm
@@ -3709,8 +3709,8 @@ ZWave_Parse($$@)
if($cmd eq "ZW_SET_SUC_NODE_ID") {
my $retval;
- if($arg eq "00") { $retval = 'setSucNodeFailed';
- } elsif($arg eq "01") { $retval = 'setSucNodeOk';
+ if($arg eq "00") { $retval = 'failed';
+ } elsif($arg eq "01") { $retval = 'ok';
} else { $retval = 'unknown_'.$arg; # should never happen
}
DoTrigger($ioName, "$cmd $retval");
@@ -3808,9 +3808,24 @@ ZWave_Parse($$@)
}
return $ret;
+ } elsif($callbackid eq "10") {
+ Log3 $ioName, 2, "ZW_APPLICATION_UPDATE sucId ".hex($id);
+ return "";
+
+ } elsif($callbackid eq "20") {
+ Log3 $ioName, 2, "ZW_APPLICATION_UPDATE deleteDone ".hex($id);
+ return "";
+
+ } elsif($callbackid eq "40") {
+ Log3 $ioName, 2, "ZW_APPLICATION_UPDATE addDone ".hex($id);
+ return "";
+
+ } elsif($callbackid eq "81") {
+ Log3 $ioName, 2, "ZW_REQUEST_NODE_INFO failed".hex($id);
+ return "";
+
} else {
- Log3 $ioName, 2, "ZW_REQUEST_NODE_INFO ".
- ($callbackid eq "81" ? "failed" : "unknown $callbackid");
+ Log3 $ioName, 2, "ZW_APPLICATION_UPDATE unknown $callbackid";
return "";
}
@@ -3837,6 +3852,14 @@ ZWave_Parse($$@)
readingsSingleUpdate($hash, "transmit", $lmsg, 1);
return $hash->{NAME};
}
+
+ } elsif($cmd eq "ZW_SET_LEARN_MODE") {
+ if($id eq "01") { $evt = 'started';
+ } elsif($id eq "06") { $evt = 'done'; # $arg = new NodeId
+ } elsif($id eq "07") { $evt = 'failed';
+ } elsif($id eq "80") { $evt = 'deleted';
+ } else { $evt = 'unknown'; # should never happen
+ }
} elsif($cmd eq "ZW_REQUEST_NODE_NEIGHBOR_UPDATE") {
if($id eq "21") { $evt = 'started';
@@ -3861,8 +3884,8 @@ ZWave_Parse($$@)
}
} elsif($cmd eq "ZW_SET_SUC_NODE_ID") {
- if($id eq "05") { $evt = 'setSucNodeCallbackSucceeded';
- } elsif($id eq "06") { $evt = 'setSucNodeCallbackFailed';
+ if($id eq "05") { $evt = 'callbackSucceeded';
+ } elsif($id eq "06") { $evt = 'callbackFailed';
} else { $evt = 'unknown_'.$id; # do not know
}