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 }