diff --git a/fhem/FHEM/00_ZWDongle.pm b/fhem/FHEM/00_ZWDongle.pm
index ae69590d1..89a788b55 100644
--- a/fhem/FHEM/00_ZWDongle.pm
+++ b/fhem/FHEM/00_ZWDongle.pm
@@ -28,6 +28,7 @@ my %sets = (
onNwSec=>0xc1, onSec=>0x81 } },
"backupCreate" => { cmd => "" },
"backupRestore" => { cmd => "" },
+ "clearStatistics" => { cmd => "39" }, # CLEAR_NETWORK_STATS
"controllerChange" => { cmd => "4d%02x@", # ZW_CONTROLLER_CHANGE
param => { on =>0x02, stop =>0x05,
stopFailed =>0x06 } },
@@ -69,6 +70,7 @@ my %gets = (
"random" => "1c%02x", # ZW_GET_RANDOM
"raw" => "%s", # hex
"routeFor" => "92%02x", # hex
+ "statistics" => "3a", # GET_NETWORK_STATS
"sucNodeId" => "56", # ZW_GET_SUC_NODE_ID
# "timeouts" => "06", # Forum #71333
"version" => "15", # ZW_GET_VERSION
@@ -583,7 +585,14 @@ ZWDongle_Get($@)
$i++
}
$msg = join(" ", @list);
- }
+
+ } elsif($cmd eq "statistics") { ############################
+ $msg = sprintf("Transmitted:%s BackOffs:%s ReceivedNoErrors:%s
+ ChecksumErrors:%s CRC16Errors:%s ForeignHomeId:%s",
+ hex(substr($ret,4,4)), hex(substr($ret,8,4)),
+ hex(substr($ret,12,4)), hex(substr($ret,16,4)),
+ hex(substr($ret,20,4)), hex(substr($ret,24,4)));
+ }
$cmd .= "_".join("_", @a) if(@a);
readingsSingleUpdate($hash, $cmd, $msg, 0);
@@ -1099,6 +1108,10 @@ ZWDongle_Ready($)
the MEMORY functions.
+
clearStatistics
+ clear network statistics.
+
+
controllerChange on|stop|stopFailed
Add a controller to the current network and transfer role as primary to it.
Invoking controller is converted to secondary.
@@ -1247,6 +1260,10 @@ ZWDongle_Ready($)
request priority routing for <device>. <device> is either
device name or decimal nodeId.
+ statistics
+ return the current network statistics.
+
+
sucNodeId
return the currently registered decimal SUC nodeId.
@@ -1315,6 +1332,9 @@ ZWDongle_Ready($)
ZW_ADD_NODE_TO_NETWORK [learnReady|nodeFound|slave|controller|
done|failed]
+
clearStatistics
+ CLEAR_NETWORK_STATS ok
+
controllerChange
ZW_CONTROLLER_CHANGE [learnReady|nodeFound|controller|done|failed]
diff --git a/fhem/FHEM/10_ZWave.pm b/fhem/FHEM/10_ZWave.pm
index 9bd689243..263dd6303 100644
--- a/fhem/FHEM/10_ZWave.pm
+++ b/fhem/FHEM/10_ZWave.pm
@@ -4592,6 +4592,15 @@ ZWave_Parse($$@)
return "";
}
+ if($cmd eq "CLEAR_NETWORK_STATS") {
+ my $retval;
+ if($arg eq "01") { $retval = 'ok';
+ } else { $retval = 'unknown_'.$arg; # should never happen
+ }
+ DoTrigger($ioName, "$cmd $retval");
+ return "";
+ }
+
if($cmd eq "ZW_SET_PRIORITY_ROUTE" && $arg =~ m/(..)(..)/) {
DoTrigger($ioName, "$cmd node $1 result $2");
return "";
diff --git a/fhem/FHEM/ZWLib.pm b/fhem/FHEM/ZWLib.pm
index c43a88f7b..e77418b31 100644
--- a/fhem/FHEM/ZWLib.pm
+++ b/fhem/FHEM/ZWLib.pm
@@ -37,6 +37,7 @@ use vars qw(%zw_type6);
'23' => 'MEMORY_GET_BUFFER',
'24' => 'MEMORY_PUT_BUFFER',
'27' => 'FLASH_AUTO_PROG_SET',
+ '28' => 'ZW_NVR_GET_VALUE',
'29' => 'NVM_GET_ID',
'2a' => 'NVM_EXT_READ_LONG_BUFFER',
'2b' => 'NVM_EXT_WRITE_LONG_BUFFER',
@@ -49,6 +50,8 @@ use vars qw(%zw_type6);
'34' => 'RTC_TIMER_READ',
'35' => 'RTC_TIMER_DELETE',
'36' => 'RTC_TIMER_CALL',
+ '37' => 'ZW_CLEAR_TX_TIMERS',
+ '38' => 'ZW_GET_TX_TIMERS',
'39' => 'CLEAR_NETWORK_STATS',
'3a' => 'GET_NETWORK_STATS',
'3b' => 'GET_BACKGROUND_RSSI',
@@ -67,6 +70,7 @@ use vars qw(%zw_type6);
'4b' => 'ZW_REMOVE_NODE_FROM_NETWORK',
'4c' => 'ZW_CREATE_NEW_PRIMARY',
'4d' => 'ZW_CONTROLLER_CHANGE',
+ '4f' => 'ZW_ASSIGN_PRIORITY_RETURN_ROUTE',
'50' => 'ZW_SET_LEARN_MODE',
'51' => 'ZW_ASSIGN_SUC_RETURN_ROUTE',
'52' => 'ZW_ENABLE_SUC',
@@ -75,11 +79,13 @@ use vars qw(%zw_type6);
'55' => 'ZW_DELETE_SUC_RETURN_ROUTE',
'56' => 'ZW_GET_SUC_NODE_ID',
'57' => 'ZW_SEND_SUC_ID',
+ '58' => 'ZW_ASSIGN_PRIORITY_SUC_RETURN_ROUTE',
'59' => 'ZW_REDISCOVERY_NEEDED',
'5b' => 'ZW_SUPPORT_9600_ONLY', # Appl. Guide
'5c' => 'ZW_REQUEST_NEW_ROUTE_DESTINATIONS', # Appl. Guide
'5d' => 'ZW_IS_NODE_WIHTIN_DIRECT_RANGE', # Appl. Guide
'5e' => 'ZW_EXPLORE_REQUEST_INCLUSION',
+ '5f' => 'ZW_EXPLORE_REQUEST_EXCLUSION',
'60' => 'ZW_REQUEST_NODE_INFO',
'61' => 'ZW_REMOVE_FAILED_NODE_ID',
'62' => 'ZW_IS_FAILED_NODE',
@@ -88,6 +94,7 @@ use vars qw(%zw_type6);
'71' => 'TIMER_RESTART',
'72' => 'TIMER_CANCEL',
'73' => 'TIMER_CALL',
+ '78' => 'ZW_FIRMWARE_UPDATE_NVM',
'80' => 'GET_ROUTING_TABLE_LINE',
'81' => 'GET_T_X_COUNTER',
'82' => 'RESET_T_X_COUNTER',
@@ -124,6 +131,7 @@ use vars qw(%zw_type6);
'd1' => 'PROMISCUOUS_COMMAND_HANDLER',
'd2' => 'WATCHDOG_START',
'd3' => 'WATCHDOG_STOP',
+ 'd4' => 'ZW_SET_ROUTING_MAX',
'f2' => 'ZME_FREQ_CHANGE',
'f4' => 'ZME_BOOTLOADER_FLASH',
'f5' => 'ZME_CAPABILITIES',