Skip to content

Commit 694e771

Browse files
add extra chekcs in soil moisture measurement limits handler
1 parent a279798 commit 694e771

2 files changed

Lines changed: 11 additions & 3 deletions

File tree

drivers/SmartThings/matter-sensor/src/sensor_handlers/attribute_handlers.lua

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,15 @@ function AttributeHandlers.soil_moisture_measurement_limits_handler(driver, devi
9191
ib.data.elements.min_measured_value == nil or ib.data.elements.min_measured_value.value == nil or
9292
ib.data.elements.max_measured_value == nil or ib.data.elements.max_measured_value.value == nil or
9393
ib.data.elements.min_measured_value.value >= ib.data.elements.max_measured_value.value then
94-
device.log.warn_with({hub_logs = true}, "Device reported invalid soil moisture limits")
94+
local min_val = ib.data.elements and ib.data.elements.min_measured_value and ib.data.elements.min_measured_value.value
95+
local max_val = ib.data.elements and ib.data.elements.max_measured_value and ib.data.elements.max_measured_value.value
96+
device.log.warn_with({hub_logs = true}, string.format("Device reported invalid soil moisture limits: min=%s, max=%s", tostring(min_val), tostring(max_val)))
9597
return
9698
end
97-
sensor_utils.set_field_for_endpoint(device, fields.SOIL_LIMIT_MIN, ib.endpoint_id, ib.data.elements.min_measured_value.value)
98-
sensor_utils.set_field_for_endpoint(device, fields.SOIL_LIMIT_MAX, ib.endpoint_id, ib.data.elements.max_measured_value.value)
99+
local min_val = math.max(ib.data.elements.min_measured_value.value, sensor_utils.SOIL_MOISTURE_MIN)
100+
local max_val = math.min(ib.data.elements.max_measured_value.value, sensor_utils.SOIL_MOISTURE_MAX)
101+
sensor_utils.set_field_for_endpoint(device, fields.SOIL_LIMIT_MIN, ib.endpoint_id, min_val)
102+
sensor_utils.set_field_for_endpoint(device, fields.SOIL_LIMIT_MAX, ib.endpoint_id, max_val)
99103
end
100104

101105

drivers/SmartThings/matter-sensor/src/sensor_utils/utils.lua

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33

44
local utils = {}
55

6+
-- Sanity check bounds for soil moisture measurement limits (percent)
7+
utils.SOIL_MOISTURE_MIN = 0
8+
utils.SOIL_MOISTURE_MAX = 100
9+
610
function utils.get_field_for_endpoint(device, field, endpoint)
711
return device:get_field(string.format("%s_%d", field, endpoint))
812
end

0 commit comments

Comments
 (0)