From 2e9dd77db67601caba4c56712b9d1e2aa8cd3730 Mon Sep 17 00:00:00 2001 From: Steven Green Date: Thu, 6 Mar 2025 13:54:45 -0800 Subject: [PATCH 1/2] BUG2-4037 Z-Wave Thermostat: Whole number workaround Some z-wave thermostats are choking when told to be set to non-whole numbers. This fixes our base behavior for values that aren't half degrees (which are usually celsius). Intended to be temporary --- .../SmartThings/zwave-thermostat/src/init.lua | 3 ++ .../src/test/test_zwave_thermostat.lua | 52 +++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/drivers/SmartThings/zwave-thermostat/src/init.lua b/drivers/SmartThings/zwave-thermostat/src/init.lua index 22ad3cdf43..8943aa7629 100755 --- a/drivers/SmartThings/zwave-thermostat/src/init.lua +++ b/drivers/SmartThings/zwave-thermostat/src/init.lua @@ -71,6 +71,9 @@ local function set_setpoint_factory(setpoint_type) size = 2 }) else + -- There have been issues with some thermostats failing to handle non-integer values + -- correctly. This rounding is intended to be removed. + value = utils.round(value) set = ThermostatSetpoint:Set({ setpoint_type = setpoint_type, scale = scale, diff --git a/drivers/SmartThings/zwave-thermostat/src/test/test_zwave_thermostat.lua b/drivers/SmartThings/zwave-thermostat/src/test/test_zwave_thermostat.lua index f57f7cc6cf..b332713319 100644 --- a/drivers/SmartThings/zwave-thermostat/src/test/test_zwave_thermostat.lua +++ b/drivers/SmartThings/zwave-thermostat/src/test/test_zwave_thermostat.lua @@ -635,4 +635,56 @@ test.register_coroutine_test( end ) +test.register_coroutine_test( + "Setting the heating setpoint should generate the appropriate commands and round values not at half-degree increments", + function() + test.timer.__create_and_queue_test_time_advance_timer(1, "oneshot") + + test.socket.zwave:__queue_receive( + { + mock_device.id, + zw_test_utilities.zwave_test_build_receive_command( + ThermostatSetpoint:Report( + { + setpoint_type = ThermostatSetpoint.setpoint_type.HEATING_1, + scale = 1, + value = 68 + }) + ) + } + ) + test.socket.capability:__expect_send( + mock_device:generate_test_message("main", + capabilities.thermostatHeatingSetpoint.heatingSetpoint({ value = 68, unit = "F" }) + ) + ) + test.wait_for_events() + + test.socket.capability:__queue_receive({ mock_device.id, { capability = "thermostatHeatingSetpoint", command = "setHeatingSetpoint", args = { 70.2 } } }) + test.socket.zwave:__expect_send( + zw_test_utilities.zwave_test_build_send_command( + mock_device, + ThermostatSetpoint:Set({ + setpoint_type = ThermostatSetpoint.setpoint_type.HEATING_1, + value = 70, + precision = 0, + size = 1, + scale = 1, + }) + ) + ) + test.wait_for_events() + + test.mock_time.advance_time(1) + test.socket.zwave:__expect_send( + zw_test_utilities.zwave_test_build_send_command( + mock_device, + ThermostatSetpoint:Get({ + setpoint_type = ThermostatSetpoint.setpoint_type.HEATING_1 + }) + ) + ) + end +) + test.run_registered_tests() From d1c23a2d963b7b67c1a1d2eee2d4b90d12c6a8e3 Mon Sep 17 00:00:00 2001 From: Steven Green Date: Thu, 6 Mar 2025 13:59:37 -0800 Subject: [PATCH 2/2] test fixup --- .../zwave-thermostat/src/test/test_stelpro_ki_thermostat.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/SmartThings/zwave-thermostat/src/test/test_stelpro_ki_thermostat.lua b/drivers/SmartThings/zwave-thermostat/src/test/test_stelpro_ki_thermostat.lua index e94c9ee446..2c9c370bec 100644 --- a/drivers/SmartThings/zwave-thermostat/src/test/test_stelpro_ki_thermostat.lua +++ b/drivers/SmartThings/zwave-thermostat/src/test/test_stelpro_ki_thermostat.lua @@ -62,7 +62,7 @@ test.register_coroutine_test( ThermostatSetpoint:Set({ setpoint_type = ThermostatSetpoint.setpoint_type.HEATING_1, scale = 1, - value = 84.2 + value = 84 }) ) )