Skip to content

Commit dae63f1

Browse files
committed
fix level handler, include test
1 parent 6964e5d commit dae63f1

File tree

2 files changed

+104
-1
lines changed

2 files changed

+104
-1
lines changed

drivers/SmartThings/matter-sensor/src/smoke-co-alarm/init.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ local level_strings = {
257257
}
258258

259259
local function carbon_monoxide_level_handler(driver, device, ib, response)
260-
device:emit_event_for_endpoint(ib.endpoint_id, level_strings[ib.data.value])
260+
device:emit_event_for_endpoint(ib.endpoint_id, capabilities.carbonMonoxideHealthConcern.carbonMonoxideHealthConcern(level_strings[ib.data.value]))
261261
end
262262

263263
local function do_configure(driver, device)

drivers/SmartThings/matter-sensor/src/test/test_matter_smoke_co_alarm.lua

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,36 @@ local mock_device = test.mock_device.build_test_matter_device({
5757
}
5858
})
5959

60+
local mock_device_colevel = test.mock_device.build_test_matter_device({
61+
profile = t_utils.get_profile_definition("co-comeas-colevel-battery.yml"),
62+
manufacturer_info = {
63+
vendor_id = 0x0000,
64+
product_id = 0x0000,
65+
},
66+
endpoints = {
67+
{
68+
endpoint_id = 0,
69+
clusters = {
70+
{cluster_id = clusters.Basic.ID, cluster_type = "SERVER"},
71+
},
72+
device_types = {
73+
{device_type_id = 0x0016, device_type_revision = 1} -- RootNode
74+
}
75+
},
76+
{
77+
endpoint_id = 1,
78+
clusters = {
79+
{cluster_id = clusters.SmokeCoAlarm.ID, cluster_type = "SERVER", feature_map = clusters.SmokeCoAlarm.types.Feature.CO_ALARM},
80+
{cluster_id = clusters.CarbonMonoxideConcentrationMeasurement.ID, cluster_type = "SERVER", feature_map = clusters.CarbonMonoxideConcentrationMeasurement.types.Feature.NUMERIC_MEASUREMENT | clusters.CarbonMonoxideConcentrationMeasurement.types.Feature.LEVEL_INDICATION},
81+
{cluster_id = clusters.PowerSource.ID, cluster_type = "SERVER", feature_map = clusters.PowerSource.types.PowerSourceFeature.BATTERY},
82+
},
83+
device_types = {
84+
{device_type_id = 0x0076, device_type_revision = 1} -- Smoke CO Alarm
85+
}
86+
}
87+
}
88+
})
89+
6090
local cluster_subscribe_list = {
6191
clusters.SmokeCoAlarm.attributes.SmokeState,
6292
clusters.SmokeCoAlarm.attributes.TestInProgress,
@@ -87,6 +117,27 @@ local function test_init()
87117
test.mock_device.add_test_device(mock_device)
88118
end
89119

120+
local cluster_subscribe_list_colevel = {
121+
clusters.SmokeCoAlarm.attributes.TestInProgress,
122+
clusters.SmokeCoAlarm.attributes.COState,
123+
clusters.SmokeCoAlarm.attributes.HardwareFaultAlert,
124+
clusters.CarbonMonoxideConcentrationMeasurement.attributes.MeasurementUnit,
125+
clusters.CarbonMonoxideConcentrationMeasurement.attributes.LevelValue,
126+
clusters.CarbonMonoxideConcentrationMeasurement.attributes.MeasuredValue,
127+
clusters.PowerSource.attributes.BatPercentRemaining,
128+
}
129+
130+
local function test_init_colevel()
131+
local subscribe_request = cluster_subscribe_list_colevel[1]:subscribe(mock_device_colevel)
132+
for i, cluster in ipairs(cluster_subscribe_list_colevel) do
133+
if i > 1 then
134+
subscribe_request:merge(cluster:subscribe(mock_device_colevel))
135+
end
136+
end
137+
test.socket.matter:__expect_send({mock_device_colevel.id, subscribe_request})
138+
test.mock_device.add_test_device(mock_device_colevel)
139+
end
140+
90141
test.set_test_init_function(test_init)
91142

92143
test.register_message_test(
@@ -134,6 +185,58 @@ test.register_message_test(
134185
}
135186
)
136187

188+
test.register_coroutine_test(
189+
"Level value reports should generate events",
190+
function()
191+
test.socket.matter:__queue_receive({
192+
mock_device_colevel.id,
193+
clusters.CarbonMonoxideConcentrationMeasurement.attributes.LevelValue:build_test_report_data(
194+
mock_device_colevel, 1, clusters.CarbonMonoxideConcentrationMeasurement.types.LevelValueEnum.UNKNOWN
195+
)
196+
})
197+
test.socket.capability:__expect_send(
198+
mock_device_colevel:generate_test_message("main", capabilities.carbonMonoxideHealthConcern.carbonMonoxideHealthConcern.unknown())
199+
)
200+
test.socket.matter:__queue_receive({
201+
mock_device_colevel.id,
202+
clusters.CarbonMonoxideConcentrationMeasurement.attributes.LevelValue:build_test_report_data(
203+
mock_device_colevel, 1, clusters.CarbonMonoxideConcentrationMeasurement.types.LevelValueEnum.LOW
204+
)
205+
})
206+
test.socket.capability:__expect_send(
207+
mock_device_colevel:generate_test_message("main", capabilities.carbonMonoxideHealthConcern.carbonMonoxideHealthConcern.good())
208+
)
209+
test.socket.matter:__queue_receive({
210+
mock_device_colevel.id,
211+
clusters.CarbonMonoxideConcentrationMeasurement.attributes.LevelValue:build_test_report_data(
212+
mock_device_colevel, 1, clusters.CarbonMonoxideConcentrationMeasurement.types.LevelValueEnum.MEDIUM
213+
)
214+
})
215+
test.socket.capability:__expect_send(
216+
mock_device_colevel:generate_test_message("main", capabilities.carbonMonoxideHealthConcern.carbonMonoxideHealthConcern.moderate())
217+
)
218+
test.socket.matter:__queue_receive({
219+
mock_device_colevel.id,
220+
clusters.CarbonMonoxideConcentrationMeasurement.attributes.LevelValue:build_test_report_data(
221+
mock_device_colevel, 1, clusters.CarbonMonoxideConcentrationMeasurement.types.LevelValueEnum.HIGH
222+
)
223+
})
224+
test.socket.capability:__expect_send(
225+
mock_device_colevel:generate_test_message("main", capabilities.carbonMonoxideHealthConcern.carbonMonoxideHealthConcern.unhealthy())
226+
)
227+
test.socket.matter:__queue_receive({
228+
mock_device_colevel.id,
229+
clusters.CarbonMonoxideConcentrationMeasurement.attributes.LevelValue:build_test_report_data(
230+
mock_device_colevel, 1, clusters.CarbonMonoxideConcentrationMeasurement.types.LevelValueEnum.CRITICAL
231+
)
232+
})
233+
test.socket.capability:__expect_send(
234+
mock_device_colevel:generate_test_message("main", capabilities.carbonMonoxideHealthConcern.carbonMonoxideHealthConcern.hazardous())
235+
)
236+
end,
237+
{ test_init = test_init_colevel }
238+
)
239+
137240
test.register_message_test(
138241
"Test CO state handler",
139242
{

0 commit comments

Comments
 (0)