From b1ea551b2c06173553d37ce6c5743feef5bdea8b Mon Sep 17 00:00:00 2001 From: Alissa Dornbos <79465613+lelandblue@users.noreply.github.com> Date: Tue, 10 Dec 2024 08:30:07 -0500 Subject: [PATCH 1/7] Adding fingerprint for U Tect 0002 bulb (#1804) --- drivers/SmartThings/matter-switch/fingerprints.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/SmartThings/matter-switch/fingerprints.yml b/drivers/SmartThings/matter-switch/fingerprints.yml index e3d17b5bb8..5b6343c34e 100644 --- a/drivers/SmartThings/matter-switch/fingerprints.yml +++ b/drivers/SmartThings/matter-switch/fingerprints.yml @@ -553,6 +553,11 @@ matterManufacturer: vendorId: 0x147F productId: 0x0004 deviceProfileName: switch-binary + - id: "5247/2" + deviceLabel: UTEC Smart Matter Light Bulb + vendorId: 0x147F + productId: 0x0002 + deviceProfileName: light-color-level-2700K-6500K #WiZ - id: "WiZ A19" deviceLabel: WiZ A19 From 1b84fa9733b4a6430cadfdcce97d032f76bde3e2 Mon Sep 17 00:00:00 2001 From: seojune79 <119141897+seojune79@users.noreply.github.com> Date: Tue, 10 Dec 2024 23:52:59 +0900 Subject: [PATCH 2/7] add supportedUnlockDirections attribute and unlockDirection feature (#1746) --- drivers/Aqara/aqara-lock/src/init.lua | 65 +++++++++++-------- .../aqara-lock/src/test/test_aqara_lock.lua | 4 ++ 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/drivers/Aqara/aqara-lock/src/init.lua b/drivers/Aqara/aqara-lock/src/init.lua index 43d09967c4..af3b18a266 100644 --- a/drivers/Aqara/aqara-lock/src/init.lua +++ b/drivers/Aqara/aqara-lock/src/init.lua @@ -68,6 +68,9 @@ local function device_init(self, device) LockAlarm.supportedAlarmValues(SUPPORTED_ALARM_VALUES, { visibility = { displayed = false } }) ) end + device:emit_event(capabilities.lock.supportedUnlockDirections({"fromInside", "fromOutside"}, {visibility = {displayed = false}})) + device:emit_event(capabilities.battery.type("AA")) + device:emit_event(capabilities.battery.quantity(8)) end local function device_added(self, device) @@ -107,23 +110,33 @@ local function event_lock_handler(driver, device, evt_name, evt_value) end end -local function event_unlock_handler(driver, device, evt_name, evt_value) - local id, label - if evt_name == METHOD.RF447 then - evt_name = nil - id = nil - label = nil - elseif evt_name == METHOD.BLUETOOTH and evt_value == 2 then - evt_name = nil - id = nil - label = nil - elseif evt_value == 0x80020000 then -- one-time password - id = "OTP_STANDALONE" - label = nil - else - id, label = credential_utils.find_userLabel(driver, device, evt_value) - end - device:emit_event(Lock.lock.unlocked({ data = { method = evt_name, codeId = id, codeName = label } })) +local function event_unlock_indoor_handler(driver, device, evt_name, evt_value) + device:emit_event(Lock.lock.unlocked({ data = { method = evt_name, codeId = nil, codeName = nil, unlockDirection = "fromInside" } })) + device:emit_event(remoteControlStatus.remoteControlEnabled('false', { visibility = { displayed = false } })) + device:emit_event(LockAlarm.alarm.clear({ visibility = { displayed = false }})) +end + +local function event_unlock_outdoor_handler(driver, device, evt_name, evt_value) + local id, label = credential_utils.find_userLabel(driver, device, evt_value) + device:emit_event(Lock.lock.unlocked({ data = { method = evt_name, codeId = id, codeName = label, unlockDirection = "fromOutside" } })) + device:emit_event(remoteControlStatus.remoteControlEnabled('false', { visibility = { displayed = false } })) + device:emit_event(LockAlarm.alarm.clear({ visibility = { displayed = false }})) +end + +local function event_unlock_rf447_handler(driver, device, evt_name, evt_value) + device:emit_event(Lock.lock.unlocked({ data = { method = evt_name, codeId = nil, codeName = nil, unlockDirection = nil } })) + device:emit_event(remoteControlStatus.remoteControlEnabled('false', { visibility = { displayed = false } })) + device:emit_event(LockAlarm.alarm.clear({ visibility = { displayed = false }})) +end + +local function event_unlock_remote_handler(driver, device, evt_name, evt_value) + device:emit_event(Lock.lock.unlocked({ data = { method = evt_name, codeId = nil, codeName = nil, unlockDirection = nil } })) + device:emit_event(remoteControlStatus.remoteControlEnabled('false', { visibility = { displayed = false } })) + device:emit_event(LockAlarm.alarm.clear({ visibility = { displayed = false }})) +end + +local function event_unlock_otp_handler(driver, device, evt_name, evt_value) + device:emit_event(Lock.lock.unlocked({ data = { method = evt_name, codeId = "OTP_STANDALONE", codeName = nil, unlockDirection = "fromOutside" } })) device:emit_event(remoteControlStatus.remoteControlEnabled('false', { visibility = { displayed = false } })) device:emit_event(LockAlarm.alarm.clear({ visibility = { displayed = false }})) end @@ -163,16 +176,16 @@ end local resource_id = { ["13.31.85"] = { event_name = METHOD.LOCKED, event_handler = event_lock_handler }, + ["13.48.85"] = { event_name = METHOD.MANUAL, event_handler = event_unlock_indoor_handler }, + ["13.51.85"] = { event_name = METHOD.MANUAL, event_handler = event_unlock_indoor_handler }, + ["13.42.85"] = { event_name = METHOD.FINGERPRINT, event_handler = event_unlock_outdoor_handler }, + ["13.43.85"] = { event_name = METHOD.KEYPAD, event_handler = event_unlock_outdoor_handler }, + ["13.44.85"] = { event_name = METHOD.RFID, event_handler = event_unlock_outdoor_handler }, + ["13.151.85"] = { event_name = METHOD.RF447, event_handler = event_unlock_rf447_handler }, + ["13.45.85"] = { event_name = METHOD.BLUETOOTH, event_handler = event_unlock_remote_handler }, + ["13.90.85"] = { event_name = METHOD.COMMAND, event_handler = event_unlock_remote_handler }, + ["13.46.85"] = { event_name = METHOD.KEYPAD, event_handler = event_unlock_otp_handler }, ["13.17.85"] = { event_name = METHOD.NO_USE, event_handler = event_door_handler }, - ["13.48.85"] = { event_name = METHOD.MANUAL, event_handler = event_unlock_handler }, - ["13.51.85"] = { event_name = METHOD.MANUAL, event_handler = event_unlock_handler }, - ["13.42.85"] = { event_name = METHOD.FINGERPRINT, event_handler = event_unlock_handler }, - ["13.43.85"] = { event_name = METHOD.KEYPAD, event_handler = event_unlock_handler }, - ["13.44.85"] = { event_name = METHOD.RFID, event_handler = event_unlock_handler }, - ["13.151.85"] = { event_name = METHOD.RF447, event_handler = event_unlock_handler }, - ["13.45.85"] = { event_name = METHOD.BLUETOOTH, event_handler = event_unlock_handler }, - ["13.90.85"] = { event_name = METHOD.COMMAND, event_handler = event_unlock_handler }, - ["13.46.85"] = { event_name = METHOD.KEYPAD, event_handler = event_unlock_handler }, ["13.56.85"] = { event_name = METHOD.NO_USE, event_handler = event_battery_handler }, ["13.32.85"] = { event_name = METHOD.NO_USE, event_handler = event_abnormal_status_handler }, ["13.33.85"] = { event_name = METHOD.NO_USE, event_handler = event_anti_lock_handler }, diff --git a/drivers/Aqara/aqara-lock/src/test/test_aqara_lock.lua b/drivers/Aqara/aqara-lock/src/test/test_aqara_lock.lua index d53dcc1759..f127a16d0c 100644 --- a/drivers/Aqara/aqara-lock/src/test/test_aqara_lock.lua +++ b/drivers/Aqara/aqara-lock/src/test/test_aqara_lock.lua @@ -42,6 +42,10 @@ local function test_init() "highTemperature", "attemptsExceeded" } test.socket.capability:__expect_send(mock_device:generate_test_message("main", lockAlarm.supportedAlarmValues(SUPPORTED_ALARM_VALUES, { visibility = { displayed = false } }))) + test.socket.capability:__expect_send(mock_device:generate_test_message("main", + Lock.supportedUnlockDirections({"fromInside", "fromOutside"}, { visibility = { displayed = false } }))) + test.socket.capability:__expect_send(mock_device:generate_test_message("main", Battery.type("AA"))) + test.socket.capability:__expect_send(mock_device:generate_test_message("main", Battery.quantity(8))) test.mock_device.add_test_device(mock_device) end test.set_test_init_function(test_init) From e1f566992dbc29aa9868fdaf74ce504c807260d5 Mon Sep 17 00:00:00 2001 From: cjswedes Date: Tue, 10 Dec 2024 09:21:26 -0600 Subject: [PATCH 3/7] Remove health check from zigbee thermostat This is not needed to keep device online, and so its being removed to gain the small memory/latency savings of having it disabled. Tested with a Sinope thermostat --- drivers/SmartThings/zigbee-thermostat/src/init.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/SmartThings/zigbee-thermostat/src/init.lua b/drivers/SmartThings/zigbee-thermostat/src/init.lua index 416f9e32a7..0a5e82350e 100644 --- a/drivers/SmartThings/zigbee-thermostat/src/init.lua +++ b/drivers/SmartThings/zigbee-thermostat/src/init.lua @@ -376,6 +376,7 @@ local zigbee_thermostat_driver = { require("resideo_korea"), require("aqara") }, + health_check = false, } defaults.register_for_default_handlers(zigbee_thermostat_driver, zigbee_thermostat_driver.supported_capabilities) From 48b546d8f57e4c097a9eaeca4ed67dbf09efda15 Mon Sep 17 00:00:00 2001 From: cjswedes Date: Mon, 28 Oct 2024 23:54:55 -0500 Subject: [PATCH 4/7] Update zigbee tests for native handler support Hub FW 0.55.x adds support for colorTemperature and colorControl commands to native handlers. And the lua libs are registering for default for those commands for Zigbee/matter devices. --- .../src/test/test_all_capability_zigbee_bulb.lua | 2 ++ .../zigbee-switch/src/test/test_aqara_led_bulb.lua | 1 + .../SmartThings/zigbee-switch/src/test/test_aqara_light.lua | 1 + drivers/SmartThings/zigbee-switch/src/test/test_rgb_bulb.lua | 3 +++ .../SmartThings/zigbee-switch/src/test/test_rgbw_bulb.lua | 5 ++++- .../zigbee-switch/src/test/test_zll_rgbw_bulb.lua | 3 +++ 6 files changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/SmartThings/zigbee-switch/src/test/test_all_capability_zigbee_bulb.lua b/drivers/SmartThings/zigbee-switch/src/test/test_all_capability_zigbee_bulb.lua index 71f1efb426..81d355d889 100644 --- a/drivers/SmartThings/zigbee-switch/src/test/test_all_capability_zigbee_bulb.lua +++ b/drivers/SmartThings/zigbee-switch/src/test/test_all_capability_zigbee_bulb.lua @@ -348,6 +348,7 @@ test.register_coroutine_test( function() test.timer.__create_and_queue_test_time_advance_timer(2, "oneshot") test.socket.capability:__queue_receive({mock_device.id, { capability = "colorControl", component = "main", command = "setColor", args = { { hue = 50, saturation = 50 } } } }) + mock_device:expect_native_cmd_handler_registration("colorControl", "setColor") test.socket.zigbee:__expect_send( { mock_device.id, @@ -382,6 +383,7 @@ test.register_coroutine_test( function() test.socket.zigbee:__set_channel_ordering("relaxed") test.socket.capability:__queue_receive({mock_device.id, { capability = "colorTemperature", component = "main", command = "setColorTemperature", args = {1800}}}) + mock_device:expect_native_cmd_handler_registration("colorTemperature", "setColorTemperature") test.socket.zigbee:__expect_send({mock_device.id, ColorControl.server.commands.MoveToColorTemperature(mock_device, 556, 0x0000)}) test.socket.zigbee:__expect_send({mock_device.id, OnOff.server.commands.On(mock_device)}) test.wait_for_events() diff --git a/drivers/SmartThings/zigbee-switch/src/test/test_aqara_led_bulb.lua b/drivers/SmartThings/zigbee-switch/src/test/test_aqara_led_bulb.lua index 45bc9f3242..9c7a7cc0e5 100644 --- a/drivers/SmartThings/zigbee-switch/src/test/test_aqara_led_bulb.lua +++ b/drivers/SmartThings/zigbee-switch/src/test/test_aqara_led_bulb.lua @@ -123,6 +123,7 @@ test.register_coroutine_test( test.socket.capability:__queue_receive({ mock_device.id, { capability = "colorTemperature", component = "main", command = "setColorTemperature", args = { 200 } } }) + mock_device:expect_native_cmd_handler_registration("colorTemperature", "setColorTemperature") local temp_in_mired = math.floor(1000000 / 200) test.socket.zigbee:__expect_send( { diff --git a/drivers/SmartThings/zigbee-switch/src/test/test_aqara_light.lua b/drivers/SmartThings/zigbee-switch/src/test/test_aqara_light.lua index 6bd83a7afa..68f54c986f 100644 --- a/drivers/SmartThings/zigbee-switch/src/test/test_aqara_light.lua +++ b/drivers/SmartThings/zigbee-switch/src/test/test_aqara_light.lua @@ -128,6 +128,7 @@ test.register_coroutine_test( test.socket.capability:__queue_receive({ mock_device.id, { capability = "colorTemperature", component = "main", command = "setColorTemperature", args = { 200 } } }) + mock_device:expect_native_cmd_handler_registration("colorTemperature", "setColorTemperature") local temp_in_mired = math.floor(1000000 / 200) test.socket.zigbee:__expect_send( { diff --git a/drivers/SmartThings/zigbee-switch/src/test/test_rgb_bulb.lua b/drivers/SmartThings/zigbee-switch/src/test/test_rgb_bulb.lua index 2aa6dece8f..5f7e37f5eb 100644 --- a/drivers/SmartThings/zigbee-switch/src/test/test_rgb_bulb.lua +++ b/drivers/SmartThings/zigbee-switch/src/test/test_rgb_bulb.lua @@ -131,6 +131,7 @@ test.register_coroutine_test( test.timer.__create_and_queue_test_time_advance_timer(2, "oneshot") test.socket.capability:__queue_receive({mock_device.id, { capability = "colorControl", component = "main", command = "setHue", args = { 50 } } }) + mock_device:expect_native_cmd_handler_registration("colorControl", "setHue") test.socket.zigbee:__expect_send({ mock_device.id, OnOff.commands.On(mock_device) }) local hue = math.floor((50 * 0xFE) / 100.0 + 0.5) @@ -154,6 +155,7 @@ test.register_coroutine_test( test.timer.__create_and_queue_test_time_advance_timer(2, "oneshot") test.socket.capability:__queue_receive({mock_device.id, { capability = "colorControl", component = "main", command = "setSaturation", args = { 50 } } }) + mock_device:expect_native_cmd_handler_registration("colorControl", "setSaturation") test.socket.zigbee:__expect_send({ mock_device.id, OnOff.commands.On(mock_device) }) local saturation = math.floor((50 * 0xFE) / 100.0 + 0.5) @@ -176,6 +178,7 @@ test.register_coroutine_test( function() test.timer.__create_and_queue_test_time_advance_timer(2, "oneshot") test.socket.capability:__queue_receive({mock_device.id, { capability = "colorControl", component = "main", command = "setColor", args = { { hue = 50, saturation = 50 } } } }) + mock_device:expect_native_cmd_handler_registration("colorControl", "setColor") test.socket.zigbee:__expect_send( { mock_device.id, diff --git a/drivers/SmartThings/zigbee-switch/src/test/test_rgbw_bulb.lua b/drivers/SmartThings/zigbee-switch/src/test/test_rgbw_bulb.lua index 32e8956250..61a9fcf1ac 100644 --- a/drivers/SmartThings/zigbee-switch/src/test/test_rgbw_bulb.lua +++ b/drivers/SmartThings/zigbee-switch/src/test/test_rgbw_bulb.lua @@ -162,6 +162,7 @@ test.register_coroutine_test( test.timer.__create_and_queue_test_time_advance_timer(2, "oneshot") test.socket.capability:__queue_receive({mock_device.id, { capability = "colorControl", component = "main", command = "setHue", args = { 50 } } }) + mock_device:expect_native_cmd_handler_registration("colorControl", "setHue") test.socket.zigbee:__expect_send({ mock_device.id, OnOff.commands.On(mock_device) }) local hue = math.floor((50 * 0xFE) / 100.0 + 0.5) @@ -185,6 +186,7 @@ test.register_coroutine_test( test.timer.__create_and_queue_test_time_advance_timer(2, "oneshot") test.socket.capability:__queue_receive({mock_device.id, { capability = "colorControl", component = "main", command = "setSaturation", args = { 50 } } }) + mock_device:expect_native_cmd_handler_registration("colorControl", "setSaturation") test.socket.zigbee:__expect_send({ mock_device.id, OnOff.commands.On(mock_device) }) local saturation = math.floor((50 * 0xFE) / 100.0 + 0.5) @@ -208,6 +210,7 @@ test.register_coroutine_test( test.timer.__create_and_queue_test_time_advance_timer(2, "oneshot") test.socket.capability:__queue_receive({mock_device.id, { capability = "colorControl", component = "main", command = "setColor", args = { { hue = 50, saturation = 50 } } } }) + mock_device:expect_native_cmd_handler_registration("colorControl", "setColor") test.socket.zigbee:__expect_send({ mock_device.id, OnOff.server.commands.On(mock_device) }) local hue = math.floor((50 * 0xFE) / 100.0 + 0.5) @@ -228,7 +231,7 @@ test.register_coroutine_test( ) test.register_coroutine_test( - "Set Saturation command test", + "Set ColorTemperature command test", function() test.timer.__create_and_queue_test_time_advance_timer(1, "oneshot") test.socket.capability:__queue_receive({mock_device.id, { capability = "colorTemperature", component = "main", command = "setColorTemperature", args = { 200 } } }) diff --git a/drivers/SmartThings/zigbee-switch/src/test/test_zll_rgbw_bulb.lua b/drivers/SmartThings/zigbee-switch/src/test/test_zll_rgbw_bulb.lua index f2d8c5f2f4..a7aaaf5e82 100644 --- a/drivers/SmartThings/zigbee-switch/src/test/test_zll_rgbw_bulb.lua +++ b/drivers/SmartThings/zigbee-switch/src/test/test_zll_rgbw_bulb.lua @@ -197,6 +197,7 @@ test.register_coroutine_test( test.timer.__create_and_queue_test_time_advance_timer(2, "oneshot") test.socket.capability:__queue_receive({mock_device.id, { capability = "colorControl", component = "main", command = "setHue", args = { 50 } } }) + mock_device:expect_native_cmd_handler_registration("colorControl", "setHue") test.socket.zigbee:__expect_send({ mock_device.id, OnOff.commands.On(mock_device) }) local hue = math.floor((50 * 0xFE) / 100.0 + 0.5) @@ -221,6 +222,7 @@ test.register_coroutine_test( test.timer.__create_and_queue_test_time_advance_timer(2, "oneshot") test.socket.capability:__queue_receive({mock_device.id, { capability = "colorControl", component = "main", command = "setSaturation", args = { 50 } } }) + mock_device:expect_native_cmd_handler_registration("colorControl", "setSaturation") test.socket.zigbee:__expect_send({ mock_device.id, OnOff.commands.On(mock_device) }) local saturation = math.floor((50 * 0xFE) / 100.0 + 0.5) @@ -245,6 +247,7 @@ test.register_coroutine_test( test.timer.__create_and_queue_test_time_advance_timer(2, "oneshot") test.socket.capability:__queue_receive({mock_device.id, { capability = "colorControl", component = "main", command = "setColor", args = { { hue = 50, saturation = 50 } } } }) + mock_device:expect_native_cmd_handler_registration("colorControl", "setColor") test.socket.zigbee:__expect_send({ mock_device.id, OnOff.server.commands.On(mock_device) }) local hue = math.floor((50 * 0xFE) / 100.0 + 0.5) From 76c796dc64f95f175c9ba1b8737c639234775663 Mon Sep 17 00:00:00 2001 From: cjswedes Date: Wed, 11 Dec 2024 09:47:09 -0600 Subject: [PATCH 5/7] Update tests that were only passing because of a bug in the test framework There was a bug in the integration test framework that wasn't properly validating native handler registration api calls at the end of a test. --- .../test_matter_multi_button_switch_mcd.lua | 8 ----- .../test/test_fibaro_walli_double_switch.lua | 4 --- .../src/test/test_zooz_double_plug.lua | 32 ------------------- 3 files changed, 44 deletions(-) diff --git a/drivers/SmartThings/matter-switch/src/test/test_matter_multi_button_switch_mcd.lua b/drivers/SmartThings/matter-switch/src/test/test_matter_multi_button_switch_mcd.lua index a5f2420557..bf6eefee2b 100644 --- a/drivers/SmartThings/matter-switch/src/test/test_matter_multi_button_switch_mcd.lua +++ b/drivers/SmartThings/matter-switch/src/test/test_matter_multi_button_switch_mcd.lua @@ -256,14 +256,6 @@ test.register_message_test( { capability = "switch", component = "main", command = "on", args = { } } } }, - { - channel = "devices", - direction = "send", - message = { - "register_native_capability_cmd_handler", - { device_uuid = mock_device.id, capability_id = "switch", capability_cmd_id = "on" } - } - }, { channel = "matter", direction = "send", diff --git a/drivers/SmartThings/zwave-switch/src/test/test_fibaro_walli_double_switch.lua b/drivers/SmartThings/zwave-switch/src/test/test_fibaro_walli_double_switch.lua index 40d45eb200..11746559a5 100644 --- a/drivers/SmartThings/zwave-switch/src/test/test_fibaro_walli_double_switch.lua +++ b/drivers/SmartThings/zwave-switch/src/test/test_fibaro_walli_double_switch.lua @@ -437,7 +437,6 @@ test.register_coroutine_test( mock_parent.id, { capability = "switch", component = "main", command = "on", args = {} } }) - mock_parent:expect_native_cmd_handler_registration("switch", "on") test.socket.zwave:__expect_send( zw_test_utils.zwave_test_build_send_command( @@ -505,7 +504,6 @@ test.register_coroutine_test( mock_parent.id, { capability = "switch", component = "main", command = "off", args = {} } }) - mock_parent:expect_native_cmd_handler_registration("switch", "off") test.socket.zwave:__expect_send( zw_test_utils.zwave_test_build_send_command( @@ -572,7 +570,6 @@ test.register_coroutine_test( mock_child.id, { capability = "switch", component = "main", command = "on", args = {} } }) - mock_child:expect_native_cmd_handler_registration("switch", "on") test.socket.zwave:__expect_send( zw_test_utils.zwave_test_build_send_command( @@ -637,7 +634,6 @@ test.register_coroutine_test( mock_child.id, { capability = "switch", component = "main", command = "off", args = {} } }) - mock_child:expect_native_cmd_handler_registration("switch", "off") test.socket.zwave:__expect_send( zw_test_utils.zwave_test_build_send_command( diff --git a/drivers/SmartThings/zwave-switch/src/test/test_zooz_double_plug.lua b/drivers/SmartThings/zwave-switch/src/test/test_zooz_double_plug.lua index bc5c4e94a1..9f7f7d5b86 100644 --- a/drivers/SmartThings/zwave-switch/src/test/test_zooz_double_plug.lua +++ b/drivers/SmartThings/zwave-switch/src/test/test_zooz_double_plug.lua @@ -191,14 +191,6 @@ test.register_message_test( { capability = "switch", command = "on", component = "switch1", args = {} } } }, - { - channel = "devices", - direction = "send", - message = { - "register_native_capability_cmd_handler", - { device_uuid = mock_parent.id, capability_id = "switch", capability_cmd_id = "on" } - } - }, { channel = "zwave", direction = "send", @@ -223,14 +215,6 @@ test.register_message_test( { capability = "switch", command = "off", component = "main", args = {} } } }, - { - channel = "devices", - direction = "send", - message = { - "register_native_capability_cmd_handler", - { device_uuid = mock_parent.id, capability_id = "switch", capability_cmd_id = "off" } - } - }, { channel = "zwave", direction = "send", @@ -256,14 +240,6 @@ test.register_message_test( { capability = "switch", command = "on", component = "switch1", args = {} } } }, - { - channel = "devices", - direction = "send", - message = { - "register_native_capability_cmd_handler", - { device_uuid = mock_child.id, capability_id = "switch", capability_cmd_id = "on" } - } - }, { channel = "zwave", direction = "send", @@ -288,14 +264,6 @@ test.register_message_test( { capability = "switch", command = "off", component = "main", args = {} } } }, - { - channel = "devices", - direction = "send", - message = { - "register_native_capability_cmd_handler", - { device_uuid = mock_child.id, capability_id = "switch", capability_cmd_id = "off" } - } - }, { channel = "zwave", direction = "send", From 20e48727c6f00eaed2352d3da4422643b73af0c6 Mon Sep 17 00:00:00 2001 From: cjswedes Date: Wed, 11 Dec 2024 10:07:40 -0600 Subject: [PATCH 6/7] Fix matter profile switch test Its not clear if this fix is the correct fix or not. --- .../matter-switch/src/test/test_matter_switch_device_types.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/SmartThings/matter-switch/src/test/test_matter_switch_device_types.lua b/drivers/SmartThings/matter-switch/src/test/test_matter_switch_device_types.lua index 4329cbce65..d896607284 100644 --- a/drivers/SmartThings/matter-switch/src/test/test_matter_switch_device_types.lua +++ b/drivers/SmartThings/matter-switch/src/test/test_matter_switch_device_types.lua @@ -345,7 +345,9 @@ end local function test_init_water_valve() test.mock_device.add_test_device(mock_device_water_valve) + test.socket.device_lifecycle:__queue_receive({ mock_device_water_valve.id, "doConfigure" }) mock_device_water_valve:expect_metadata_update({ profile = "water-valve-level" }) + mock_device_water_valve:expect_metadata_update({ provisioning_state = "PROVISIONED" }) end local function test_init_parent_child_different_types() @@ -394,6 +396,7 @@ local function test_init_parent_child_unsupported_device_type() }) end + test.register_coroutine_test( "Test profile change on init for onoff parent cluster as server", function() From 0a70f5cdcedca479236eb1fb43c91cc4cc3c25d6 Mon Sep 17 00:00:00 2001 From: Alissa Dornbos <79465613+lelandblue@users.noreply.github.com> Date: Thu, 12 Dec 2024 08:58:46 -0500 Subject: [PATCH 7/7] New Device (Matter Sensor + Matter Switch) Neo (#1815) * new-device-neo-motion * Adding door sensor * Adding power plug fingerprint --- drivers/SmartThings/matter-sensor/fingerprints.yml | 11 +++++++++++ drivers/SmartThings/matter-switch/fingerprints.yml | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/drivers/SmartThings/matter-sensor/fingerprints.yml b/drivers/SmartThings/matter-sensor/fingerprints.yml index 7e4a3ae4b6..b9d323a5f6 100644 --- a/drivers/SmartThings/matter-sensor/fingerprints.yml +++ b/drivers/SmartThings/matter-sensor/fingerprints.yml @@ -69,6 +69,17 @@ matterManufacturer: vendorId: 0x1021 productId: 0x0001 deviceProfileName: motion-contact-battery + # Neo + - id: "4991/1122" + deviceLabel: Door Sensor + vendorId: 0x137F + productId: 0x0462 + deviceProfileName: contact-battery + - id: "4991/1123" + deviceLabel: Motion Sensor + vendorId: 0x137F + productId: 0x0463 + deviceProfileName: motion-battery #Tuo - id: "5150/3" deviceLabel: "TUO Temperature Sensor" diff --git a/drivers/SmartThings/matter-switch/fingerprints.yml b/drivers/SmartThings/matter-switch/fingerprints.yml index 5b6343c34e..fffbfeb671 100644 --- a/drivers/SmartThings/matter-switch/fingerprints.yml +++ b/drivers/SmartThings/matter-switch/fingerprints.yml @@ -417,6 +417,12 @@ matterManufacturer: vendorId: 0x115A productId: 0x004B deviceProfileName: light-color-level-2700K-6500K +#Neo + - id: "4991/635" + deviceLabel: Power Plug + vendorId: 0x137F + productId: 0x027B + deviceProfileName: plug-binary #SONOFF - id: "SONOFF MINIR4M" deviceLabel: Smart Plug-in Unit