Skip to content

Commit a3b5249

Browse files
Add fanSpeedPercent to Thermostat device types
1 parent d6dbbcf commit a3b5249

File tree

5 files changed

+36
-6
lines changed

5 files changed

+36
-6
lines changed

drivers/SmartThings/matter-thermostat/profiles/thermostat-modular.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ components:
99
- id: fanMode
1010
version: 1
1111
optional: true
12+
- id: fanSpeedPercent
13+
version: 1
14+
config:
15+
values:
16+
- key: "percent.value"
17+
range: [ 1, 100 ]
18+
optional: true
1219
- id: fanOscillationMode
1320
version: 1
1421
optional: true

drivers/SmartThings/matter-thermostat/src/init.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,15 @@ local log = require "log"
1717
local clusters = require "st.matter.clusters"
1818
local embedded_cluster_utils = require "embedded-cluster-utils"
1919
local im = require "st.matter.interaction_model"
20-
2120
local MatterDriver = require "st.matter.driver"
2221
local utils = require "st.utils"
22+
local version = require "version"
2323

2424
local SUPPORTED_COMPONENT_CAPABILITIES = "__supported_component_capabilities"
2525
-- declare match_profile function for use throughout file
2626
local match_profile
2727

2828
-- Include driver-side definitions when lua libs api version is < 10
29-
local version = require "version"
3029
if version.api < 10 then
3130
clusters.HepaFilterMonitoring = require "HepaFilterMonitoring"
3231
clusters.ActivatedCarbonFilterMonitoring = require "ActivatedCarbonFilterMonitoring"
@@ -966,6 +965,7 @@ local function match_modular_profile_thermostat(driver, device)
966965

967966
if #fan_eps > 0 then
968967
table.insert(main_component_capabilities, capabilities.fanMode.ID)
968+
table.insert(main_component_capabilities, capabilities.fanSpeedPercent.ID)
969969
end
970970
if #rock_eps > 0 then
971971
table.insert(main_component_capabilities, capabilities.fanOscillationMode.ID)

drivers/SmartThings/matter-thermostat/src/test/test_matter_thermo_multiple_device_types.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ local expected_metadata = {
208208
{
209209
"relativeHumidityMeasurement",
210210
"fanMode",
211+
"fanSpeedPercent",
211212
"fanOscillationMode",
212213
"thermostatHeatingSetpoint",
213214
"thermostatCoolingSetpoint"
@@ -231,6 +232,7 @@ local new_cluster_subscribe_list = {
231232
clusters.RelativeHumidityMeasurement.attributes.MeasuredValue,
232233
clusters.FanControl.attributes.FanMode,
233234
clusters.FanControl.attributes.FanModeSequence,
235+
clusters.FanControl.attributes.PercentCurrent,
234236
clusters.FanControl.attributes.RockSupport, -- These two attributes will be subscribed to following the profile
235237
clusters.FanControl.attributes.RockSetting, -- change since the fanOscillationMode capability will be enabled.
236238
}

drivers/SmartThings/matter-thermostat/src/test/test_matter_thermostat.lua

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,8 +331,6 @@ test.register_message_test(
331331
}
332332
)
333333

334-
-- test.socket.matter:__expect_send({mock_device_auto.id, clusters.Thermostat.attributes.MinSetpointDeadBand:read(mock_device_auto)})
335-
336334
test.register_message_test(
337335
"Thermostat mode reports should generate correct messages",
338336
{

drivers/SmartThings/matter-thermostat/src/test/test_matter_thermostat_modular.lua

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ local mock_device_basic = test.mock_device.build_test_matter_device({
4949
{cluster_id = clusters.TemperatureMeasurement.ID, cluster_type = "SERVER"},
5050
{cluster_id = clusters.RelativeHumidityMeasurement.ID, cluster_type = "SERVER"},
5151
{cluster_id = clusters.PowerSource.ID, cluster_type = "SERVER", feature_map = 0},
52+
{cluster_id = clusters.FanControl.ID, cluster_type = "SERVER", feature_map = 0},
5253
},
5354
device_types = {
5455
{device_type_id = 0x0301, device_type_revision = 1} -- Thermostat
@@ -65,7 +66,6 @@ local function initialize_mock_device(generic_mock_device, generic_subscribed_at
6566
subscribe_request:merge(cluster:subscribe(generic_mock_device))
6667
end
6768
end
68-
test.socket.matter:__expect_send({generic_mock_device.id, subscribe_request})
6969
return subscribe_request
7070
end
7171

@@ -107,6 +107,7 @@ local function test_init()
107107

108108
test.socket.device_lifecycle:__queue_receive({ mock_device_basic.id, "init" })
109109
subscribe_request_basic = initialize_mock_device(mock_device_basic, subscribed_attributes)
110+
test.socket.matter:__expect_send({mock_device_basic.id, subscribe_request_basic})
110111
end
111112

112113
-- run the profile configuration tests
@@ -134,6 +135,7 @@ local expected_metadata = {
134135
{
135136
"relativeHumidityMeasurement",
136137
"fanMode",
138+
"fanSpeedPercent",
137139
"thermostatHeatingSetpoint",
138140
"thermostatCoolingSetpoint"
139141
},
@@ -145,7 +147,28 @@ local expected_metadata = {
145147
test.register_coroutine_test(
146148
"Device with modular profile should enable correct optional capabilities",
147149
function()
148-
test_thermostat_device_type_update_modular_profile(mock_device_basic, expected_metadata, subscribe_request_basic)
150+
local subscribed_attributes = {
151+
clusters.Thermostat.attributes.LocalTemperature,
152+
clusters.Thermostat.attributes.OccupiedCoolingSetpoint,
153+
clusters.Thermostat.attributes.OccupiedHeatingSetpoint,
154+
clusters.Thermostat.attributes.AbsMinCoolSetpointLimit,
155+
clusters.Thermostat.attributes.AbsMaxCoolSetpointLimit,
156+
clusters.Thermostat.attributes.AbsMinHeatSetpointLimit,
157+
clusters.Thermostat.attributes.AbsMaxHeatSetpointLimit,
158+
clusters.Thermostat.attributes.SystemMode,
159+
clusters.Thermostat.attributes.ThermostatRunningState,
160+
clusters.Thermostat.attributes.ControlSequenceOfOperation,
161+
clusters.TemperatureMeasurement.attributes.MeasuredValue,
162+
clusters.TemperatureMeasurement.attributes.MinMeasuredValue,
163+
clusters.TemperatureMeasurement.attributes.MaxMeasuredValue,
164+
clusters.RelativeHumidityMeasurement.attributes.MeasuredValue,
165+
clusters.FanControl.attributes.FanMode,
166+
clusters.FanControl.attributes.FanModeSequence,
167+
clusters.FanControl.attributes.PercentCurrent,
168+
clusters.PowerSource.attributes.BatPercentRemaining,
169+
}
170+
local subscribe_request = initialize_mock_device(mock_device_basic, subscribed_attributes)
171+
test_thermostat_device_type_update_modular_profile(mock_device_basic, expected_metadata, subscribe_request)
149172
end,
150173
{ test_init = test_init }
151174
)

0 commit comments

Comments
 (0)