Skip to content

Commit c10b5ec

Browse files
committed
move unit_conversion to utils
1 parent cdc760a commit c10b5ec

File tree

2 files changed

+28
-27
lines changed

2 files changed

+28
-27
lines changed

drivers/SmartThings/matter-sensor/src/sub_drivers/air_quality_sensor/air_quality_sensor_handlers/attribute_handlers.lua

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,55 +3,42 @@
33

44
local st_utils = require "st.utils"
55
local capabilities = require "st.capabilities"
6-
local fields = require "sub_drivers.air_quality_sensor.air_quality_sensor_utils.fields"
6+
local aqs_utils = require "sub_drivers.air_quality_sensor.air_quality_sensor_utils.utils"
7+
local aqs_fields = require "sub_drivers.air_quality_sensor.air_quality_sensor_utils.fields"
78

8-
local AirQualityServerAttributeHandlers = {}
9+
local AirQualitySensorAttributeHandlers = {}
910

1011

1112
-- [[ GENERIC CONCENTRATION MEASUREMENT CLUSTER ATTRIBUTES ]]
1213

13-
function AirQualityServerAttributeHandlers.measurement_unit_factory(capability_name)
14+
function AirQualitySensorAttributeHandlers.measurement_unit_factory(capability_name)
1415
return function(driver, device, ib, response)
1516
device:set_field(capability_name.."_unit", ib.data.value, {persist = true})
1617
end
1718
end
1819

19-
function AirQualityServerAttributeHandlers.level_value_factory(attribute)
20+
function AirQualitySensorAttributeHandlers.level_value_factory(attribute)
2021
return function(driver, device, ib, response)
21-
device:emit_event_for_endpoint(ib.endpoint_id, attribute(fields.level_strings[ib.data.value]))
22+
device:emit_event_for_endpoint(ib.endpoint_id, attribute(aqs_fields.level_strings[ib.data.value]))
2223
end
2324
end
2425

25-
local function unit_conversion(device, value, from_unit, to_unit)
26-
local conversion_function = fields.conversion_tables[from_unit][to_unit]
27-
if conversion_function == nil then
28-
device.log.info_with( {hub_logs = true} , string.format("Unsupported unit conversion from %s to %s", fields.unit_strings[from_unit], fields.unit_strings[to_unit]))
29-
return 1
30-
end
31-
32-
if value == nil then
33-
device.log.info_with( {hub_logs = true} , "unit conversion value is nil")
34-
return 1
35-
end
36-
return conversion_function(value)
37-
end
38-
39-
function AirQualityServerAttributeHandlers.measured_value_factory(capability_name, attribute, target_unit)
26+
function AirQualitySensorAttributeHandlers.measured_value_factory(capability_name, attribute, target_unit)
4027
return function(driver, device, ib, response)
4128
local reporting_unit = device:get_field(capability_name.."_unit")
4229

4330
if reporting_unit == nil then
44-
reporting_unit = fields.unit_default[capability_name]
31+
reporting_unit = aqs_fields.unit_default[capability_name]
4532
device:set_field(capability_name.."_unit", reporting_unit, {persist = true})
4633
end
4734

4835
if reporting_unit then
49-
local value = unit_conversion(device, ib.data.value, reporting_unit, target_unit)
50-
device:emit_event_for_endpoint(ib.endpoint_id, attribute({value = value, unit = fields.unit_strings[target_unit]}))
36+
local value = aqs_utils.unit_conversion(device, ib.data.value, reporting_unit, target_unit)
37+
device:emit_event_for_endpoint(ib.endpoint_id, attribute({value = value, unit = aqs_fields.unit_strings[target_unit]}))
5138

5239
-- handle case where device profile supports both fineDustLevel and dustLevel
5340
if capability_name == capabilities.fineDustSensor.NAME and device:supports_capability(capabilities.dustSensor) then
54-
device:emit_event_for_endpoint(ib.endpoint_id, capabilities.dustSensor.fineDustLevel({value = value, unit = fields.unit_strings[target_unit]}))
41+
device:emit_event_for_endpoint(ib.endpoint_id, capabilities.dustSensor.fineDustLevel({value = value, unit = aqs_fields.unit_strings[target_unit]}))
5542
end
5643
end
5744
end
@@ -60,7 +47,7 @@ end
6047

6148
-- [[ AIR QUALITY CLUSTER ATTRIBUTES ]] --
6249

63-
function AirQualityServerAttributeHandlers.air_quality_handler(driver, device, ib, response)
50+
function AirQualitySensorAttributeHandlers.air_quality_handler(driver, device, ib, response)
6451
local state = ib.data.value
6552
if state == 0 then -- Unknown
6653
device:emit_event_for_endpoint(ib.endpoint_id, capabilities.airQualityHealthConcern.airQualityHealthConcern.unknown())
@@ -82,9 +69,9 @@ end
8269

8370
-- [[ PRESSURE MEASUREMENT CLUSTER ATTRIBUTES ]] --
8471

85-
function AirQualityServerAttributeHandlers.pressure_measured_value_handler(driver, device, ib, response)
72+
function AirQualitySensorAttributeHandlers.pressure_measured_value_handler(driver, device, ib, response)
8673
local pressure = st_utils.round(ib.data.value / 10.0)
8774
device:emit_event_for_endpoint(ib.endpoint_id, capabilities.atmosphericPressureMeasurement.atmosphericPressure(pressure))
8875
end
8976

90-
return AirQualityServerAttributeHandlers
77+
return AirQualitySensorAttributeHandlers

drivers/SmartThings/matter-sensor/src/sub_drivers/air_quality_sensor/air_quality_sensor_utils/utils.lua

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,20 @@ function AirQualitySensorUtils.supports_capability_by_id_modular(device, capabil
4040
return false
4141
end
4242

43+
function AirQualitySensorUtils.unit_conversion(device, value, from_unit, to_unit)
44+
local conversion_function = fields.conversion_tables[from_unit][to_unit]
45+
if conversion_function == nil then
46+
device.log.info_with( {hub_logs = true} , string.format("Unsupported unit conversion from %s to %s", fields.unit_strings[from_unit], fields.unit_strings[to_unit]))
47+
return 1
48+
end
49+
50+
if value == nil then
51+
device.log.info_with( {hub_logs = true} , "unit conversion value is nil")
52+
return 1
53+
end
54+
return conversion_function(value)
55+
end
56+
4357
local function get_supported_health_concern_values_for_air_quality(device)
4458
local health_concern_datatype = capabilities.airQualityHealthConcern.airQualityHealthConcern
4559
local supported_values = {health_concern_datatype.unknown.NAME, health_concern_datatype.good.NAME, health_concern_datatype.unhealthy.NAME}

0 commit comments

Comments
 (0)