@nayelyz,
The function that is used by default in Z-Wave drivers to send configuration values to the different parameters of the devices gives an error:
--- Handle preference changes
---
--- @param driver st.zwave.Driver
--- @param device st.zwave.Device
--- @param event table
--- @param args
local function info_changed(driver, device, event, args)
local preferences = preferencesMap.get_device_parameters(device)
for id, value in pairs(device.preferences) do
if args.old_st_store.preferences[id] ~= value and preferences and preferences[id] then
local new_parameter_value = preferencesMap.to_numeric_value(device.preferences[id])
device:send(Configuration:Set({parameter_number = preferences[id].parameter_number, size = preferences[id].size, configuration_value = new_parameter_value}))
end
end
end
- when trying to send a parameter value greater than 32767 (0x7FFF)
device:send(Configuration:Set({parameter_number = preferences[id].parameter_number, size = preferences[id].size, configuration_value = new_parameter_value}))
- The error is in the st/utils.lua module, line 188: bad argument #2 to ‘pack’ (integer overflow)
--- Serialize an integer into a bytestring.
---
--- @param value number value to write
--- @param width number integer width in bytes
--- @param signed boolean true if signed, false if unsigned
--- @param little_endian boolean true if little endian, false if big endian
--- @return string serialized integer as byte string
function utils.serialize_int(value, width, signed, little_endian)
local pattern = ">"
if little_endian then
pattern = "<"
end
if signed then
pattern = pattern .. "i"
else
pattern = pattern .. "I"
end
pattern = pattern .. width
return string.pack(pattern, value)
end
In some Fibaro devices it is necessary to send values up to 65535 (0xFFFF), to configure energy and power reports in seconds.
I would swear that with the previous 41.x libraries it worked fine, but I’m not sure and I don’t see any changes in that function for the 42.x libraries.
These are the logs of sending a correct configuration value 32767 (0x7FFF)
2022-04-23T15:51:34.592156003+00:00 INFO Z-Wave Switch MIO <ZwaveDevice: bd5c15c7-76f5-4430-b95d-c8ea349e9f61 [1E] (Luz Entrada)> received lifecycle event: infoChanged
2022-04-23T15:51:34.667414003+00:00 TRACE Z-Wave Switch MIO Found DeviceLifecycleDispatcher handler in zwave_switch
2022-04-23T15:51:34.675446003+00:00 PRINT Z-Wave Switch MIO Preference Changed >>> ch1TimeParameter Old Value >>>>>>>>> 33000.0 Value >> 32767.0
2022-04-23T15:51:34.683953669+00:00 INFO Z-Wave Switch MIO <ZwaveDevice: bd5c15c7-76f5-4430-b95d-c8ea349e9f61 [1E] (Luz Entrada)> sending Z-Wave command: {args={configuration_value=32767, default=false, parameter_number=12, size=2}, cmd_class="CONFIGURATION", cmd_id="SET", dst_channels={}, encap="AUTO", payload="\x0C\x02\x7F\xFF", src_channel=0, version=1}
2022-04-23T15:51:34.694848336+00:00 TRACE Z-Wave Switch MIO Z-Wave command(002ad834) queued for radio transmission: CC:Configuration, CID:0x04
2022-04-23T15:51:34.700183003+00:00 PRINT Z-Wave Switch MIO Memory >>>>>>> 1720.921875 Kbytes
2022-04-23T15:51:34.705995003+00:00 DEBUG Z-Wave Switch MIO Luz Entrada device thread event handled
2022-04-23T15:51:34.909335336+00:00 TRACE Z-Wave Switch MIO Z-Wave command(002ad834) transmit status: TRANSMIT_COMPLETE_OK
And these are the ones with a value of 32768 (0x8000), which gives the error
2022-04-23T15:51:43.278250670+00:00 TRACE Z-Wave Switch MIO Received event with handler device_lifecycle
2022-04-23T15:51:43.309074337+00:00 INFO Z-Wave Switch MIO <ZwaveDevice: bd5c15c7-76f5-4430-b95d-c8ea349e9f61 [1E] (Luz Entrada)> received lifecycle event: infoChanged
2022-04-23T15:51:43.396378670+00:00 TRACE Z-Wave Switch MIO Found DeviceLifecycleDispatcher handler in zwave_switch
2022-04-23T15:51:43.405161337+00:00 PRINT Z-Wave Switch MIO Preference Changed >>> ch1TimeParameter Old Value >>>>>>>>> 32767.0 Value >> 32768.0
2022-04-23T15:51:43.411998670+00:00 ERROR Z-Wave Switch MIO Luz Entrada thread encountered error: [string "st/dispatcher.lua"]:229: Error encountered while processing event for
<ZwaveDevice: bd5c15c7-76f5-4430-b95d-c8ea349e9f61 [1E] (Luz Entrada)>:
arg1: infoChanged
arg2: table: 0xc09678
[string "st/utils.lua"]:188: bad argument #2 to 'pack' (integer overflow)
It also occurs in the parameter values of size= 1 Byte (0 to 255) 0x00 to 0xFF
2022-04-23T07:46:04.599561484+00:00 TRACE Z-Wave Switch Mc Received event with handler device_lifecycle
2022-04-23T07:46:04.609753984+00:00 INFO Z-Wave Switch Mc <ZwaveDevice: 7026948e-c577-4118-9340-a219524d1e4e [65] (Zzz Store Plug)> received lifecycle event: infoChanged
2022-04-23T07:46:04.628990859+00:00 TRACE Z-Wave Switch Mc Found DeviceLifecycleDispatcher handler in zwave_switch
2022-04-23T07:46:04.632657859+00:00 PRINT Z-Wave Switch Mc Preference Changed >>> powerReportFrequency Old Value >>>>>>>>> 255.0 Value >> 254.0
2022-04-23T07:46:04.637461234+00:00 ERROR Z-Wave Switch Mc Zzz Store Plug thread encountered error: [string “st/dispatcher.lua”]:229: Error encountered while processing event for <ZwaveDevice: 7026948e-c577-4118-9340-a219524d1e4e [65] (Zzz Store Plug)>:
arg1: infoChanged
arg2: table: 0x1940050
[string “st/utils.lua”]:188: bad argument #2 to ‘pack’ (integer overflow)