Skip to content

Commit e97735c

Browse files
committed
Add room AC modular support
1 parent 09665c0 commit e97735c

File tree

1 file changed

+54
-0
lines changed
  • drivers/SmartThings/matter-thermostat/src

1 file changed

+54
-0
lines changed

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

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,6 +1016,58 @@ local function match_modular_profile_thermostat(driver, device)
10161016
device:set_field(SUPPORTED_COMPONENT_CAPABILITIES, total_supported_capabilities, { persist = true })
10171017
end
10181018

1019+
local function match_modular_profile_room_ac(driver, device)
1020+
local running_state_supported = device:get_field(profiling_data.THERMOSTAT_RUNNING_STATE_SUPPORT)
1021+
local humidity_eps = device:get_endpoints(clusters.RelativeHumidityMeasurement.ID)
1022+
local optional_supported_component_capabilities = {}
1023+
local main_component_capabilities = {}
1024+
local profile_name = "room-air-conditioner-modular"
1025+
1026+
if #humidity_eps > 0 then
1027+
table.insert(main_component_capabilities, capabilities.relativeHumidityMeasurement.ID)
1028+
end
1029+
1030+
-- determine fan capabilities
1031+
local fan_eps = device:get_endpoints(clusters.FanControl.ID)
1032+
local wind_eps = device:get_endpoints(clusters.FanControl.ID, {feature_bitmap = clusters.FanControl.types.FanControlFeature.WIND})
1033+
-- Note: Room AC does not support the rocking feature of FanControl.
1034+
1035+
if #fan_eps > 0 then
1036+
table.insert(main_component_capabilities, capabilities.airConditionerFanMode.ID)
1037+
table.insert(main_component_capabilities, capabilities.fanSpeedPercent.ID)
1038+
end
1039+
if #wind_eps > 0 then
1040+
table.insert(main_component_capabilities, capabilities.windMode.ID)
1041+
end
1042+
1043+
local heat_eps = device:get_endpoints(clusters.Thermostat.ID, {feature_bitmap = clusters.Thermostat.types.ThermostatFeature.HEATING})
1044+
local cool_eps = device:get_endpoints(clusters.Thermostat.ID, {feature_bitmap = clusters.Thermostat.types.ThermostatFeature.COOLING})
1045+
1046+
if #heat_eps > 0 then
1047+
table.insert(main_component_capabilities, capabilities.thermostatHeatingSetpoint.ID)
1048+
end
1049+
if #cool_eps > 0 then
1050+
table.insert(main_component_capabilities, capabilities.thermostatCoolingSetpoint.ID)
1051+
end
1052+
1053+
if running_state_supported then
1054+
table.insert(main_component_capabilities, capabilities.thermostatOperatingState.ID)
1055+
end
1056+
1057+
table.insert(optional_supported_component_capabilities, {"main", main_component_capabilities})
1058+
device:try_update_metadata({profile = profile_name, optional_component_capabilities = optional_supported_component_capabilities})
1059+
1060+
-- add mandatory capabilities for subscription
1061+
local total_supported_capabilities = optional_supported_component_capabilities
1062+
table.insert(main_component_capabilities, capabilities.switch.ID)
1063+
table.insert(main_component_capabilities, capabilities.temperatureMeasurement.ID)
1064+
table.insert(main_component_capabilities, capabilities.thermostatMode.ID)
1065+
table.insert(main_component_capabilities, capabilities.refresh.ID)
1066+
table.insert(main_component_capabilities, capabilities.firmwareUpdate.ID)
1067+
1068+
device:set_field(SUPPORTED_COMPONENT_CAPABILITIES, total_supported_capabilities, { persist = true })
1069+
end
1070+
10191071
local function match_modular_profile(driver, device)
10201072
if profiling_data_still_required(device) then return end
10211073

@@ -1026,6 +1078,8 @@ local function match_modular_profile(driver, device)
10261078

10271079
if device_type == AP_DEVICE_TYPE_ID then
10281080
match_modular_profile_air_purifer(driver, device)
1081+
elseif device_type == RAC_DEVICE_TYPE_ID then
1082+
match_modular_profile_room_ac(driver, device)
10291083
elseif #thermostat_eps > 0 then
10301084
match_modular_profile_thermostat(driver, device)
10311085
else

0 commit comments

Comments
 (0)