14
14
15
15
local button_utils = require " button-utils"
16
16
local capabilities = require " st.capabilities"
17
- local common_utils = require " common-utils"
18
17
local clusters = require " st.matter.clusters"
18
+ local common_utils = require " common-utils"
19
19
20
20
local modular_profiles_utils = {}
21
21
@@ -104,19 +104,6 @@ local function supports_capability_by_id_modular(device, capability, component)
104
104
return false
105
105
end
106
106
107
- local function add_energy_and_power_capabilities (component_capabilities , num_energy_eps , num_power_eps )
108
- if num_energy_eps > 0 and num_power_eps > 0 then
109
- table.insert (component_capabilities , capabilities .powerMeter .ID )
110
- table.insert (component_capabilities , capabilities .energyMeter .ID )
111
- table.insert (component_capabilities , capabilities .powerConsumptionReport .ID )
112
- elseif num_energy_eps > 0 then
113
- table.insert (component_capabilities , capabilities .energyMeter .ID )
114
- table.insert (component_capabilities , capabilities .powerConsumptionReport .ID )
115
- elseif num_power_eps > 0 then
116
- table.insert (component_capabilities , capabilities .powerMeter .ID )
117
- end
118
- end
119
-
120
107
local function add_battery_capability (component_capabilities , battery_attr_support )
121
108
if battery_attr_support == common_utils .battery_support .BATTERY_PERCENTAGE then
122
109
table.insert (component_capabilities , capabilities .battery .ID )
@@ -198,14 +185,14 @@ end
198
185
local function match_modular_profile (driver , device , battery_attr_support )
199
186
local main_endpoint = common_utils .find_default_endpoint (device )
200
187
local color_hs_eps = device :get_endpoints (clusters .ColorControl .ID , {feature_bitmap = clusters .ColorControl .types .Feature .HS })
201
- local color_temp_eps = device :get_endpoints (clusters .ColorControl .ID , {feature_bitmap = clusters .ColorControl .types .Feature .CT })
202
188
local color_xy_eps = device :get_endpoints (clusters .ColorControl .ID , {feature_bitmap = clusters .ColorControl .types .Feature .XY })
203
- local energy_eps = device :get_endpoints (clusters .ElectricalEnergyMeasurement .ID )
204
- local fan_eps = device :get_endpoints (clusters .FanControl .ID )
205
- local humidity_eps = device :get_endpoints (clusters .RelativeHumidityMeasurement .ID )
189
+ local color_temp_eps = device :get_endpoints (clusters .ColorControl .ID , {feature_bitmap = clusters .ColorControl .types .Feature .CT })
206
190
local level_eps = device :get_endpoints (clusters .LevelControl .ID )
207
191
local power_eps = device :get_endpoints (clusters .ElectricalPowerMeasurement .ID )
192
+ local energy_eps = device :get_endpoints (clusters .ElectricalEnergyMeasurement .ID )
208
193
local switch_eps = device :get_endpoints (clusters .OnOff .ID )
194
+ local fan_eps = device :get_endpoints (clusters .FanControl .ID )
195
+ local humidity_eps = device :get_endpoints (clusters .RelativeHumidityMeasurement .ID )
209
196
local temperature_eps = device :get_endpoints (clusters .TemperatureMeasurement .ID )
210
197
local valve_eps = device :get_endpoints (clusters .ValveConfigurationAndControl .ID )
211
198
@@ -215,8 +202,7 @@ local function match_modular_profile(driver, device, battery_attr_support)
215
202
local main_component_capabilities = {}
216
203
local extra_component_capabilities = {}
217
204
218
- local MAIN_COMPONENT_IDX = 1
219
- local CAPABILITIES_LIST_IDX = 2
205
+ local MAIN_COMPONENT_IDX , CAPABILITIES_LIST_IDX = 1 , 2
220
206
221
207
add_button_capabilities (device , category , main_endpoint , main_component_capabilities , extra_component_capabilities , battery_attr_support )
222
208
@@ -234,17 +220,15 @@ local function match_modular_profile(driver, device, battery_attr_support)
234
220
table.insert (main_component_capabilities , capabilities .switchLevel .ID )
235
221
end
236
222
237
- if # fan_eps > 0 then
238
- table.insert (main_component_capabilities , capabilities .fanMode .ID )
239
- table.insert (main_component_capabilities , capabilities .fanSpeedPercent .ID )
223
+ if # power_eps > 0 then
224
+ table.insert (main_component_capabilities , capabilities .powerMeter .ID )
240
225
end
241
226
242
- if # humidity_eps > 0 then
243
- table.insert (main_component_capabilities , capabilities .relativeHumidityMeasurement .ID )
227
+ if # energy_eps > 0 then
228
+ table.insert (main_component_capabilities , capabilities .energyMeter .ID )
229
+ table.insert (main_component_capabilities , capabilities .powerConsumptionReport .ID )
244
230
end
245
231
246
- add_energy_and_power_capabilities (main_component_capabilities , # energy_eps , # power_eps )
247
-
248
232
if # switch_eps > 0 then
249
233
-- If the device is a Button or Water Valve, add the switch capability since
250
234
-- it is not a mandatory capability for these device types.
@@ -261,6 +245,15 @@ local function match_modular_profile(driver, device, battery_attr_support)
261
245
end
262
246
end
263
247
248
+ if # fan_eps > 0 then
249
+ table.insert (main_component_capabilities , capabilities .fanMode .ID )
250
+ table.insert (main_component_capabilities , capabilities .fanSpeedPercent .ID )
251
+ end
252
+
253
+ if # humidity_eps > 0 then
254
+ table.insert (main_component_capabilities , capabilities .relativeHumidityMeasurement .ID )
255
+ end
256
+
264
257
if # temperature_eps > 0 then
265
258
table.insert (main_component_capabilities , capabilities .temperatureMeasurement .ID )
266
259
end
@@ -278,19 +271,18 @@ local function match_modular_profile(driver, device, battery_attr_support)
278
271
table.insert (optional_supported_component_capabilities , component_capability )
279
272
end
280
273
281
- local total_supported_capabilities = optional_supported_component_capabilities
282
-
283
274
device :try_update_metadata ({profile = profile_name_and_mandatory_capability_per_device_category [category ].profile_name ,
284
275
optional_component_capabilities = optional_supported_component_capabilities })
285
276
286
- -- add mandatory capabilities for subscription
277
+ local total_supported_capabilities = optional_supported_component_capabilities
278
+ -- Add mandatory capabilities for subscription
287
279
table.insert (total_supported_capabilities [MAIN_COMPONENT_IDX ][CAPABILITIES_LIST_IDX ],
288
280
profile_name_and_mandatory_capability_per_device_category [category ].mandatory_capability )
289
281
table.insert (total_supported_capabilities [MAIN_COMPONENT_IDX ][CAPABILITIES_LIST_IDX ], capabilities .refresh .ID )
290
282
table.insert (total_supported_capabilities [MAIN_COMPONENT_IDX ][CAPABILITIES_LIST_IDX ], capabilities .firmwareUpdate .ID )
291
283
292
284
device :set_field (modular_profiles_utils .SUPPORTED_COMPONENT_CAPABILITIES , total_supported_capabilities , {persist = true })
293
- -- re -up subscription with new capabilities using the modular supports_capability override
285
+ -- Re -up subscription with new capabilities using the modular supports_capability override
294
286
device :extend_device (" supports_capability_by_id" , supports_capability_by_id_modular )
295
287
end
296
288
0 commit comments