Skip to content

Commit 70d2a00

Browse files
rebasing and fixing tests and child device creation logic
1 parent 5eb5d12 commit 70d2a00

5 files changed

Lines changed: 197 additions & 204 deletions

File tree

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,8 @@ local matter_driver_template = {
161161
},
162162
[clusters.FlowMeasurement.ID] = {
163163
[clusters.FlowMeasurement.attributes.MeasuredValue.ID] = attribute_handlers.flow_attr_handler,
164-
[clusters.FlowMeasurement.attributes.MinMeasuredValue.ID] = attribute_handlers.flow_attr_handler_factory(FLOW_MIN),
165-
[clusters.FlowMeasurement.attributes.MaxMeasuredValue.ID] = attribute_handlers.flow_attr_handler_factory(FLOW_MAX)
164+
[clusters.FlowMeasurement.attributes.MinMeasuredValue.ID] = attribute_handlers.flow_attr_handler_factory(fields.FLOW_MIN),
165+
[clusters.FlowMeasurement.attributes.MaxMeasuredValue.ID] = attribute_handlers.flow_attr_handler_factory(fields.FLOW_MAX)
166166
},
167167
[clusters.IlluminanceMeasurement.ID] = {
168168
[clusters.IlluminanceMeasurement.attributes.MeasuredValue.ID] = attribute_handlers.illuminance_measured_value_handler
@@ -348,6 +348,7 @@ local matter_driver_template = {
348348
capabilities.energyMeter,
349349
capabilities.fanMode,
350350
capabilities.fanSpeedPercent,
351+
capabilities.flowSensor,
351352
capabilities.hdr,
352353
capabilities.illuminanceMeasurement,
353354
capabilities.imageControl,
@@ -356,6 +357,7 @@ local matter_driver_template = {
356357
capabilities.mechanicalPanTiltZoom,
357358
capabilities.motionSensor,
358359
capabilities.nightVision,
360+
capabilities.operationalState,
359361
capabilities.powerMeter,
360362
capabilities.powerConsumptionReport,
361363
capabilities.relativeHumidityMeasurement,

drivers/SmartThings/matter-switch/src/switch_handlers/attribute_handlers.lua

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -589,14 +589,14 @@ function AttributeHandlers.flow_attr_handler_factory(minOrMax)
589589
end
590590
local flow_bound = ib.data.value / 10.0
591591
local unit = "m^3/h"
592-
set_field_for_endpoint(device, FLOW_BOUND_RECEIVED..minOrMax, ib.endpoint_id, flow_bound)
593-
local min = get_field_for_endpoint(device, FLOW_BOUND_RECEIVED..FLOW_MIN, ib.endpoint_id)
594-
local max = get_field_for_endpoint(device, FLOW_BOUND_RECEIVED..FLOW_MAX, ib.endpoint_id)
592+
switch_utils.set_field_for_endpoint(device, fields.FLOW_BOUND_RECEIVED..minOrMax, ib.endpoint_id, flow_bound)
593+
local min = switch_utils.get_field_for_endpoint(device, fields.FLOW_BOUND_RECEIVED..fields.FLOW_MIN, ib.endpoint_id)
594+
local max = switch_utils.get_field_for_endpoint(device, fields.FLOW_BOUND_RECEIVED..fields.FLOW_MAX, ib.endpoint_id)
595595
if min ~= nil and max ~= nil then
596596
if min < max then
597597
device:emit_event_for_endpoint(ib.endpoint_id, capabilities.flowMeasurement.flowRange({ value = { minimum = min, maximum = max }, unit = unit }))
598-
set_field_for_endpoint(device, FLOW_BOUND_RECEIVED..FLOW_MIN, ib.endpoint_id, nil)
599-
set_field_for_endpoint(device, FLOW_BOUND_RECEIVED..FLOW_MAX, ib.endpoint_id, nil)
598+
switch_utils.set_field_for_endpoint(device, fields.FLOW_BOUND_RECEIVED..fields.FLOW_MIN, ib.endpoint_id, nil)
599+
switch_utils.set_field_for_endpoint(device, fields.FLOW_BOUND_RECEIVED..fields.FLOW_MAX, ib.endpoint_id, nil)
600600
else
601601
device.log.warn_with({hub_logs = true}, string.format("Device reported a min flow measurement %d that is not lower than the reported max flow measurement %d", min, max))
602602
end

drivers/SmartThings/matter-switch/src/switch_utils/device_configuration.lua

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,6 @@ function DeviceConfiguration.match_profile(driver, device)
264264
updated_profile = "irrigation-system"
265265
if version.api >= 14 and version.rpc >= 8 then
266266
local main_component_capabilities = {}
267-
local optional_supported_component_capabilities = {}
268267
local MAIN_COMPONENT_IDX, CAPABILITIES_LIST_IDX = 1, 2
269268

270269
table.sort(valve_ep_ids)
@@ -280,22 +279,19 @@ function DeviceConfiguration.match_profile(driver, device)
280279
end
281280
end
282281

283-
table.insert(optional_supported_component_capabilities, {"main", main_component_capabilities})
284-
285-
device:try_update_metadata({profile = profile_name, optional_component_capabilities = optional_supported_component_capabilities})
282+
optional_component_capabilities = {}
283+
table.insert(optional_component_capabilities, {"main", main_component_capabilities})
286284

287285
-- earlier modular profile gating (min api v14, rpc 8) ensures we are running >= 0.57 FW.
288286
-- This gating specifies a workaround required only for 0.57 FW, which is not needed for 0.58 and higher.
289287
if version.api < 15 or version.rpc < 9 then
290288
-- add mandatory capabilities for subscription
291-
local total_supported_capabilities = optional_supported_component_capabilities
289+
local total_supported_capabilities = optional_component_capabilities
292290
table.insert(total_supported_capabilities[MAIN_COMPONENT_IDX][CAPABILITIES_LIST_IDX], capabilities.refresh.ID)
293291
table.insert(total_supported_capabilities[MAIN_COMPONENT_IDX][CAPABILITIES_LIST_IDX], capabilities.firmwareUpdate.ID)
294292

295293
device:set_field(fields.SUPPORTED_COMPONENT_CAPABILITIES, total_supported_capabilities, { persist = true })
296294
end
297-
else
298-
device:try_update_metadata({profile = profile_name})
299295
end
300296

301297
if #valve_ep_ids > 1 then

drivers/SmartThings/matter-switch/src/switch_utils/fields.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
-- Copyright © 2025 SmartThings, Inc.
22
-- Licensed under the Apache License, Version 2.0
33

4+
local clusters = require "st.matter.clusters"
5+
46
local SwitchFields = {}
57

68
SwitchFields.MOST_RECENT_TEMP = "mostRecentTemp"

0 commit comments

Comments
 (0)