diff --git a/drivers/SmartThings/matter-sensor/src/embedded_clusters/Global/types/MeasurementTypeEnum.lua b/drivers/SmartThings/matter-sensor/src/embedded_clusters/Global/types/MeasurementTypeEnum.lua index 2e749ebacd..334ad78331 100644 --- a/drivers/SmartThings/matter-sensor/src/embedded_clusters/Global/types/MeasurementTypeEnum.lua +++ b/drivers/SmartThings/matter-sensor/src/embedded_clusters/Global/types/MeasurementTypeEnum.lua @@ -2,7 +2,7 @@ local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" local MeasurementTypeEnum = {} -local new_mt = UintABC.new_mt({NAME = "MeasurementTypeEnum", ID = data_types.name_to_id_map["Uint8"]}, 1) +local new_mt = UintABC.new_mt({NAME = "MeasurementTypeEnum", ID = data_types.name_to_id_map["Uint16"]}, 2) new_mt.__index.pretty_print = function(self) local name_lookup = { [self.UNSPECIFIED] = "UNSPECIFIED", diff --git a/drivers/SmartThings/matter-sensor/src/sensor_handlers/attribute_handlers.lua b/drivers/SmartThings/matter-sensor/src/sensor_handlers/attribute_handlers.lua index eaa8730fc4..1867d65e0b 100644 --- a/drivers/SmartThings/matter-sensor/src/sensor_handlers/attribute_handlers.lua +++ b/drivers/SmartThings/matter-sensor/src/sensor_handlers/attribute_handlers.lua @@ -13,6 +13,12 @@ if version.api < 13 then clusters.Global = require "embedded_clusters.Global" end +-- The SOIL_MOISTURE MeasurementTypeEnum variant was added to the Global MeasurementTypeEnum +-- def in lua libs in api version 21 as a part of the fix for Shared and Global types. +if version.api < 21 then + clusters.Global.types.MeasurementTypeEnum = require "embedded_clusters.Global.types.MeasurementTypeEnum" +end + local AttributeHandlers = {} @@ -84,8 +90,10 @@ function AttributeHandlers.soil_moisture_measured_value_handler(driver, device, end function AttributeHandlers.soil_moisture_measurement_limits_handler(driver, device, ib, response) - local MeasurementAccuracyStruct = require "embedded_clusters.Global.types.MeasurementAccuracyStruct" - MeasurementAccuracyStruct:augment_type(ib.data) + if version.api < 13 then + local MeasurementAccuracyStruct = require "embedded_clusters.Global.types.MeasurementAccuracyStruct" + MeasurementAccuracyStruct:augment_type(ib.data) + end local min_val = ib.data.elements and ib.data.elements.min_measured_value and ib.data.elements.min_measured_value.value local max_val = ib.data.elements and ib.data.elements.max_measured_value and ib.data.elements.max_measured_value.value if not (min_val and max_val) or (min_val >= max_val) or (min_val < sensor_utils.SOIL_MOISTURE_MIN) or (max_val > sensor_utils.SOIL_MOISTURE_MAX) then @@ -229,4 +237,4 @@ function AttributeHandlers.flow_measured_value_bounds_factory(minOrMax) end end -return AttributeHandlers \ No newline at end of file +return AttributeHandlers diff --git a/drivers/SmartThings/matter-sensor/src/test/test_matter_soil_sensor.lua b/drivers/SmartThings/matter-sensor/src/test/test_matter_soil_sensor.lua index 0c845fa47e..a5a8042fc0 100644 --- a/drivers/SmartThings/matter-sensor/src/test/test_matter_soil_sensor.lua +++ b/drivers/SmartThings/matter-sensor/src/test/test_matter_soil_sensor.lua @@ -7,10 +7,15 @@ local t_utils = require "integration_test.utils" local test = require "integration_test" local version = require "version" -clusters.Global = require "embedded_clusters.Global" +if version.api < 13 then + clusters.Global = require "embedded_clusters.Global" +end if version.api < 21 then clusters.SoilMeasurement = require "embedded_clusters.SoilMeasurement" + -- The SOIL_MOISTURE MeasurementTypeEnum variant was added to the Global MeasurementTypeEnum + -- def in lua libs in api version 21. + clusters.Global.types.MeasurementTypeEnum = require "embedded_clusters.Global.types.MeasurementTypeEnum" end local mock_device = test.mock_device.build_test_matter_device({ @@ -157,6 +162,9 @@ test.register_coroutine_test( ) local function build_soil_moisture_limits(min_value, max_value) + if version.api < 21 then + clusters.Global.types.MeasurementTypeEnum = require "embedded_clusters.Global.types.MeasurementTypeEnum" + end return clusters.Global.types.MeasurementAccuracyStruct({ measurement_type = clusters.Global.types.MeasurementTypeEnum.SOIL_MOISTURE, measured = true,