From f25b3b0e642210d354abdb6f0984b40c0853ff01 Mon Sep 17 00:00:00 2001 From: Nick DeBoom Date: Tue, 16 Dec 2025 14:49:01 -0600 Subject: [PATCH] Matter Thermostat: Support fanSpeedPercent --- .../matter-thermostat/profiles/thermostat-modular.yml | 3 +++ .../test/test_matter_thermo_multiple_device_types.lua | 2 ++ .../src/thermostat_utils/device_configuration.lua | 9 ++++++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/SmartThings/matter-thermostat/profiles/thermostat-modular.yml b/drivers/SmartThings/matter-thermostat/profiles/thermostat-modular.yml index 1e7bd97dc7..7d3dd309f2 100644 --- a/drivers/SmartThings/matter-thermostat/profiles/thermostat-modular.yml +++ b/drivers/SmartThings/matter-thermostat/profiles/thermostat-modular.yml @@ -9,6 +9,9 @@ components: - id: fanMode version: 1 optional: true + - id: fanSpeedPercent + version: 1 + optional: true - id: fanOscillationMode version: 1 optional: true diff --git a/drivers/SmartThings/matter-thermostat/src/test/test_matter_thermo_multiple_device_types.lua b/drivers/SmartThings/matter-thermostat/src/test/test_matter_thermo_multiple_device_types.lua index a8acdc253e..59499d112f 100644 --- a/drivers/SmartThings/matter-thermostat/src/test/test_matter_thermo_multiple_device_types.lua +++ b/drivers/SmartThings/matter-thermostat/src/test/test_matter_thermo_multiple_device_types.lua @@ -196,6 +196,7 @@ local expected_metadata = { "main", { "relativeHumidityMeasurement", + "fanSpeedPercent", "fanMode", "fanOscillationMode", "thermostatHeatingSetpoint", @@ -220,6 +221,7 @@ local new_cluster_subscribe_list = { clusters.RelativeHumidityMeasurement.attributes.MeasuredValue, clusters.FanControl.attributes.FanMode, clusters.FanControl.attributes.FanModeSequence, + clusters.FanControl.attributes.PercentCurrent, clusters.FanControl.attributes.RockSupport, -- These two attributes will be subscribed to following the profile clusters.FanControl.attributes.RockSetting, -- change since the fanOscillationMode capability will be enabled. } diff --git a/drivers/SmartThings/matter-thermostat/src/thermostat_utils/device_configuration.lua b/drivers/SmartThings/matter-thermostat/src/thermostat_utils/device_configuration.lua index 102b6e8d3b..3ae5c76c7e 100644 --- a/drivers/SmartThings/matter-thermostat/src/thermostat_utils/device_configuration.lua +++ b/drivers/SmartThings/matter-thermostat/src/thermostat_utils/device_configuration.lua @@ -200,7 +200,14 @@ function DeviceConfiguration.match_modular_profile_thermostat(device) local wind_eps = device:get_endpoints(clusters.FanControl.ID, {feature_bitmap = clusters.FanControl.types.FanControlFeature.WIND}) if #fan_eps > 0 then - table.insert(main_component_capabilities, capabilities.fanMode.ID) + if #device:get_endpoints(clusters.FanControl.ID, {feature_bitmap = clusters.FanControl.types.Feature.MULTI_SPEED}) > 0 then + table.insert(main_component_capabilities, capabilities.fanSpeedPercent.ID) + if #device:get_endpoints(clusters.FanControl.ID, {feature_bitmap = clusters.FanControl.types.Feature.AUTO}) > 0 then + table.insert(main_component_capabilities, capabilities.fanMode.ID) + end + else + table.insert(main_component_capabilities, capabilities.fanMode.ID) + end end if #rock_eps > 0 then table.insert(main_component_capabilities, capabilities.fanOscillationMode.ID)