From 263e5d78fd7d068992bdfe85f54db264dca3379c Mon Sep 17 00:00:00 2001 From: Harrison Carter Date: Mon, 30 Mar 2026 17:14:09 -0500 Subject: [PATCH] update embedded Door Lock cluster --- .../commands/GetCredentialStatusResponse.lua | 3 + .../client/commands/GetUserResponse.lua | 3 + .../commands/GetWeekDayScheduleResponse.lua | 3 + .../commands/GetYearDayScheduleResponse.lua | 3 + .../client/commands/SetCredentialResponse.lua | 3 + .../src/DoorLock/client/commands/init.lua | 3 + .../matter-lock/src/DoorLock/init.lua | 27 +- .../server/attributes/AcceptedCommandList.lua | 3 + .../server/attributes/ActuatorEnabled.lua | 3 + .../attributes/AliroBLEAdvertisingVersion.lua | 3 + ...edTransactionSupportedProtocolVersions.lua | 3 + .../attributes/AliroGroupResolvingKey.lua | 3 + .../attributes/AliroReaderGroupIdentifier.lua | 3 + .../AliroReaderGroupSubIdentifier.lua | 3 + .../attributes/AliroReaderVerificationKey.lua | 3 + .../AliroSupportedBLEUWBProtocolVersions.lua | 77 +++++ .../server/attributes/AttributeList.lua | 3 + .../DoorLock/server/attributes/DoorState.lua | 5 +- .../{EventList.lua => FeatureMap.lua} | 35 +-- .../DoorLock/server/attributes/LockState.lua | 3 + .../server/attributes/MaxPINCodeLength.lua | 3 + .../server/attributes/MinPINCodeLength.lua | 3 + ...erOfAliroCredentialIssuerKeysSupported.lua | 3 + .../NumberOfAliroEndpointKeysSupported.lua | 3 + .../NumberOfCredentialsSupportedPerUser.lua | 3 + .../attributes/NumberOfPINUsersSupported.lua | 3 + .../NumberOfTotalUsersSupported.lua | 3 + ...mberOfWeekDaySchedulesSupportedPerUser.lua | 3 + ...mberOfYearDaySchedulesSupportedPerUser.lua | 3 + .../server/attributes/OperatingMode.lua | 3 + .../RequirePINforRemoteOperation.lua | 3 + .../server/attributes/SendPINOverTheAir.lua | 3 + .../attributes/SupportedOperatingModes.lua | 3 + .../UserCodeTemporaryDisableTime.lua | 3 + .../server/attributes/WrongCodeEntryLimit.lua | 3 + .../src/DoorLock/server/attributes/init.lua | 3 + .../commands/ClearAliroReaderConfig.lua | 3 + .../server/commands/ClearCredential.lua | 3 + .../DoorLock/server/commands/ClearUser.lua | 3 + .../server/commands/ClearWeekDaySchedule.lua | 3 + .../server/commands/ClearYearDaySchedule.lua | 3 + .../server/commands/GetCredentialStatus.lua | 3 + .../src/DoorLock/server/commands/GetUser.lua | 3 + .../server/commands/GetWeekDaySchedule.lua | 3 + .../server/commands/GetYearDaySchedule.lua | 3 + .../src/DoorLock/server/commands/LockDoor.lua | 3 + .../server/commands/SetAliroReaderConfig.lua | 3 + .../server/commands/SetCredential.lua | 3 + .../src/DoorLock/server/commands/SetUser.lua | 3 + .../server/commands/SetWeekDaySchedule.lua | 3 + .../server/commands/SetYearDaySchedule.lua | 3 + .../DoorLock/server/commands/UnboltDoor.lua | 101 +++++++ .../DoorLock/server/commands/UnlockDoor.lua | 3 + .../src/DoorLock/server/commands/init.lua | 3 + .../DoorLock/server/events/DoorLockAlarm.lua | 3 + .../server/events/DoorStateChange.lua | 3 + .../DoorLock/server/events/LockOperation.lua | 3 + .../server/events/LockOperationError.lua | 3 + .../DoorLock/server/events/LockUserChange.lua | 3 + .../src/DoorLock/server/events/init.lua | 3 + .../src/DoorLock/types/AlarmCodeEnum.lua | 3 + .../src/DoorLock/types/CredentialRuleEnum.lua | 3 + .../src/DoorLock/types/CredentialStruct.lua | 3 + .../src/DoorLock/types/CredentialTypeEnum.lua | 3 + .../DoorLock/types/DataOperationTypeEnum.lua | 3 + .../src/DoorLock/types/DaysMaskMap.lua | 3 + .../types/DlKeypadOperationEventMask.lua | 3 + .../types/DlKeypadProgrammingEventMask.lua | 3 + .../types/DlLocalProgrammingFeatures.lua | 3 + .../src/DoorLock/types/DlLockState.lua | 3 + .../types/DlManualOperationEventMask.lua | 3 + .../types/DlRFIDOperationEventMask.lua | 3 + .../types/DlRFIDProgrammingEventMask.lua | 3 + .../types/DlRemoteOperationEventMask.lua | 3 + .../types/DlRemoteProgrammingEventMask.lua | 3 + .../src/DoorLock/types/DlStatus.lua | 3 + .../types/DlSupportedOperatingModes.lua | 3 + .../src/DoorLock/types/DoorLockDayOfWeek.lua | 3 + .../types/DoorLockOperationEventCode.lua | 3 + .../types/DoorLockProgrammingEventCode.lua | 3 + .../types/DoorLockSetPinOrIdStatus.lua | 3 + .../src/DoorLock/types/DoorLockUserStatus.lua | 3 + .../src/DoorLock/types/DoorLockUserType.lua | 3 + .../src/DoorLock/types/DoorStateEnum.lua | 5 +- .../src/DoorLock/types/Feature.lua | 8 + .../src/DoorLock/types/LockDataTypeEnum.lua | 3 + .../DoorLock/types/LockOperationTypeEnum.lua | 3 + .../src/DoorLock/types/OperatingModeEnum.lua | 3 + .../src/DoorLock/types/OperationErrorEnum.lua | 3 + .../DoorLock/types/OperationSourceEnum.lua | 3 + .../src/DoorLock/types/UserStatusEnum.lua | 3 + .../src/DoorLock/types/UserTypeEnum.lua | 3 + .../matter-lock/src/DoorLock/types/init.lua | 7 +- .../matter-lock/src/new-matter-lock/init.lua | 15 +- .../src/test/test_aqara_matter_lock.lua | 8 +- .../matter-lock/src/test/test_door_state.lua | 278 ------------------ .../src/test/test_matter_lock_modular.lua | 18 +- .../src/test/test_matter_lock_unlatch.lua | 8 +- .../src/test/test_new_matter_lock.lua | 10 +- .../src/test/test_new_matter_lock_aliro.lua | 10 +- .../src/test/test_new_matter_lock_battery.lua | 14 +- 101 files changed, 541 insertions(+), 340 deletions(-) create mode 100644 drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroSupportedBLEUWBProtocolVersions.lua rename drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/{EventList.lua => FeatureMap.lua} (52%) create mode 100644 drivers/SmartThings/matter-lock/src/DoorLock/server/commands/UnboltDoor.lua delete mode 100644 drivers/SmartThings/matter-lock/src/test/test_door_state.lua diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetCredentialStatusResponse.lua b/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetCredentialStatusResponse.lua index 70d0a6eff1..404e998f6a 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetCredentialStatusResponse.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetCredentialStatusResponse.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetUserResponse.lua b/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetUserResponse.lua index 6ee0bd8792..b9524902ac 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetUserResponse.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetUserResponse.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetWeekDayScheduleResponse.lua b/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetWeekDayScheduleResponse.lua index 86b53a686e..d11d7f30d5 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetWeekDayScheduleResponse.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetWeekDayScheduleResponse.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetYearDayScheduleResponse.lua b/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetYearDayScheduleResponse.lua index ecb591477e..4d1b1c09fb 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetYearDayScheduleResponse.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/GetYearDayScheduleResponse.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/SetCredentialResponse.lua b/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/SetCredentialResponse.lua index eaf1658d14..df4a9c28d8 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/SetCredentialResponse.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/SetCredentialResponse.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/init.lua b/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/init.lua index 9148db5f96..4f4d78756f 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/init.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/client/commands/init.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local command_mt = {} command_mt.__command_cache = {} command_mt.__index = function(self, key) diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/init.lua b/drivers/SmartThings/matter-lock/src/DoorLock/init.lua index 20cf12d0ea..debc4491e2 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/init.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/init.lua @@ -1,7 +1,6 @@ --- Copyright 2025 SmartThings, Inc. +-- Copyright 2026 SmartThings, Inc. -- Licensed under the Apache License, Version 2.0 - local cluster_base = require "st.matter.cluster_base" local DoorLockServerAttributes = require "DoorLock.server.attributes" local DoorLockServerCommands = require "DoorLock.server.commands" @@ -69,8 +68,8 @@ function DoorLock:get_attribute_by_id(attr_id) [0x0087] = "NumberOfAliroCredentialIssuerKeysSupported", [0x0088] = "NumberOfAliroEndpointKeysSupported", [0xFFF9] = "AcceptedCommandList", - [0xFFFA] = "EventList", [0xFFFB] = "AttributeList", + [0xFFFC] = "FeatureMap", } local attr_name = attr_id_map[attr_id] if attr_name ~= nil then @@ -185,10 +184,19 @@ DoorLock.attribute_direction_map = { ["NumberOfAliroCredentialIssuerKeysSupported"] = "server", ["NumberOfAliroEndpointKeysSupported"] = "server", ["AcceptedCommandList"] = "server", - ["EventList"] = "server", ["AttributeList"] = "server", + ["FeatureMap"] = "server", } +do + local has_aliases, aliases = pcall(require, "st.matter.clusters.aliases.DoorLock.server.attributes") + if has_aliases then + for alias, _ in pairs(aliases) do + DoorLock.attribute_direction_map[alias] = "server" + end + end +end + DoorLock.command_direction_map = { ["LockDoor"] = "server", ["UnlockDoor"] = "server", @@ -219,6 +227,16 @@ DoorLock.command_direction_map = { ["GetCredentialStatusResponse"] = "client", } +do + local has_aliases, aliases = pcall(require, "st.matter.clusters.aliases.DoorLock.server.commands") + if has_aliases then + for alias, _ in pairs(aliases) do + DoorLock.command_direction_map[alias] = "server" + end + end +end + + DoorLock.FeatureMap = DoorLock.types.Feature function DoorLock.are_features_supported(feature, feature_map) @@ -260,3 +278,4 @@ setmetatable(DoorLock.events, event_helper_mt) setmetatable(DoorLock, {__index = cluster_base}) return DoorLock + diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AcceptedCommandList.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AcceptedCommandList.lua index fe8e273558..8c2c668a4a 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AcceptedCommandList.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AcceptedCommandList.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/ActuatorEnabled.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/ActuatorEnabled.lua index 359261a551..6410a43a15 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/ActuatorEnabled.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/ActuatorEnabled.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroBLEAdvertisingVersion.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroBLEAdvertisingVersion.lua index 582babc3cb..24d729a665 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroBLEAdvertisingVersion.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroBLEAdvertisingVersion.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroExpeditedTransactionSupportedProtocolVersions.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroExpeditedTransactionSupportedProtocolVersions.lua index 1e5ed5f7f5..e939ce19aa 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroExpeditedTransactionSupportedProtocolVersions.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroExpeditedTransactionSupportedProtocolVersions.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroGroupResolvingKey.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroGroupResolvingKey.lua index 517cc25aeb..7de22cac09 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroGroupResolvingKey.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroGroupResolvingKey.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroReaderGroupIdentifier.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroReaderGroupIdentifier.lua index bce6f2c049..0c7fbfaa42 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroReaderGroupIdentifier.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroReaderGroupIdentifier.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroReaderGroupSubIdentifier.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroReaderGroupSubIdentifier.lua index 867dbcce93..ecc5d83132 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroReaderGroupSubIdentifier.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroReaderGroupSubIdentifier.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroReaderVerificationKey.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroReaderVerificationKey.lua index ccf8ac37a0..f636689363 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroReaderVerificationKey.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroReaderVerificationKey.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroSupportedBLEUWBProtocolVersions.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroSupportedBLEUWBProtocolVersions.lua new file mode 100644 index 0000000000..5a3e09b021 --- /dev/null +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AliroSupportedBLEUWBProtocolVersions.lua @@ -0,0 +1,77 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + +local cluster_base = require "st.matter.cluster_base" +local data_types = require "st.matter.data_types" +local TLVParser = require "st.matter.TLV.TLVParser" + +local AliroSupportedBLEUWBProtocolVersions = { + ID = 0x0085, + NAME = "AliroSupportedBLEUWBProtocolVersions", + base_type = require "st.matter.data_types.Array", + element_type = require "st.matter.data_types.OctetString1", +} + +function AliroSupportedBLEUWBProtocolVersions:augment_type(data_type_obj) + for i, v in ipairs(data_type_obj.elements) do + data_type_obj.elements[i] = data_types.validate_or_build_type(v, AliroSupportedBLEUWBProtocolVersions.element_type) + end +end + +function AliroSupportedBLEUWBProtocolVersions:new_value(...) + local o = self.base_type(table.unpack({...})) + + return o +end + +function AliroSupportedBLEUWBProtocolVersions:read(device, endpoint_id) + return cluster_base.read( + device, + endpoint_id, + self._cluster.ID, + self.ID, + nil + ) +end + +function AliroSupportedBLEUWBProtocolVersions:subscribe(device, endpoint_id) + return cluster_base.subscribe( + device, + endpoint_id, + self._cluster.ID, + self.ID, + nil + ) +end + +function AliroSupportedBLEUWBProtocolVersions:set_parent_cluster(cluster) + self._cluster = cluster + return self +end + +function AliroSupportedBLEUWBProtocolVersions:build_test_report_data( + device, + endpoint_id, + value, + status +) + local data = data_types.validate_or_build_type(value, self.base_type) + + return cluster_base.build_test_report_data( + device, + endpoint_id, + self._cluster.ID, + self.ID, + data, + status + ) +end + +function AliroSupportedBLEUWBProtocolVersions:deserialize(tlv_buf) + local data = TLVParser.decode_tlv(tlv_buf) + + return data +end + +setmetatable(AliroSupportedBLEUWBProtocolVersions, {__call = AliroSupportedBLEUWBProtocolVersions.new_value, __index = AliroSupportedBLEUWBProtocolVersions.base_type}) +return AliroSupportedBLEUWBProtocolVersions diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AttributeList.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AttributeList.lua index c191ec3d5a..23125ac707 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AttributeList.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/AttributeList.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/DoorState.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/DoorState.lua index 59fd6cbe79..1ee4fb2c4c 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/DoorState.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/DoorState.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" @@ -30,7 +33,7 @@ function DoorState:subscribe(device, endpoint_id) endpoint_id, self._cluster.ID, self.ID, - nil --event_id + nil ) end diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/EventList.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/FeatureMap.lua similarity index 52% rename from drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/EventList.lua rename to drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/FeatureMap.lua index 616bbf92bc..248f76bec3 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/EventList.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/FeatureMap.lua @@ -1,27 +1,23 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" -local EventList = { - ID = 0xFFFA, - NAME = "EventList", - base_type = require "st.matter.data_types.Array", - element_type = require "st.matter.data_types.Uint32", +local FeatureMap = { + ID = 0xFFFC, + NAME = "FeatureMap", + base_type = require "DoorLock.types.Feature", } -function EventList:augment_type(data_type_obj) - for i, v in ipairs(data_type_obj.elements) do - data_type_obj.elements[i] = data_types.validate_or_build_type(v, EventList.element_type) - end -end - -function EventList:new_value(...) +function FeatureMap:new_value(...) local o = self.base_type(table.unpack({...})) return o end -function EventList:read(device, endpoint_id) +function FeatureMap:read(device, endpoint_id) return cluster_base.read( device, endpoint_id, @@ -31,7 +27,8 @@ function EventList:read(device, endpoint_id) ) end -function EventList:subscribe(device, endpoint_id) + +function FeatureMap:subscribe(device, endpoint_id) return cluster_base.subscribe( device, endpoint_id, @@ -41,12 +38,12 @@ function EventList:subscribe(device, endpoint_id) ) end -function EventList:set_parent_cluster(cluster) +function FeatureMap:set_parent_cluster(cluster) self._cluster = cluster return self end -function EventList:build_test_report_data( +function FeatureMap:build_test_report_data( device, endpoint_id, value, @@ -64,11 +61,11 @@ function EventList:build_test_report_data( ) end -function EventList:deserialize(tlv_buf) +function FeatureMap:deserialize(tlv_buf) local data = TLVParser.decode_tlv(tlv_buf) return data end -setmetatable(EventList, {__call = EventList.new_value, __index = EventList.base_type}) -return EventList \ No newline at end of file +setmetatable(FeatureMap, {__call = FeatureMap.new_value, __index = FeatureMap.base_type}) +return FeatureMap diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/LockState.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/LockState.lua index 5d7615e2c6..2eeaed2f5a 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/LockState.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/LockState.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/MaxPINCodeLength.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/MaxPINCodeLength.lua index efdef6065c..69e823e4a8 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/MaxPINCodeLength.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/MaxPINCodeLength.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/MinPINCodeLength.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/MinPINCodeLength.lua index f94a777a64..d54c63ce24 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/MinPINCodeLength.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/MinPINCodeLength.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfAliroCredentialIssuerKeysSupported.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfAliroCredentialIssuerKeysSupported.lua index f28e356e3c..ee20e6d6a6 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfAliroCredentialIssuerKeysSupported.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfAliroCredentialIssuerKeysSupported.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfAliroEndpointKeysSupported.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfAliroEndpointKeysSupported.lua index b40d6c7df4..3f1fc0c7cd 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfAliroEndpointKeysSupported.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfAliroEndpointKeysSupported.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfCredentialsSupportedPerUser.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfCredentialsSupportedPerUser.lua index 48f08cf19c..a7d9263ffb 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfCredentialsSupportedPerUser.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfCredentialsSupportedPerUser.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfPINUsersSupported.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfPINUsersSupported.lua index c9a2da141d..3cc8dd715b 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfPINUsersSupported.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfPINUsersSupported.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfTotalUsersSupported.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfTotalUsersSupported.lua index ff0cd93791..499caf85f0 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfTotalUsersSupported.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfTotalUsersSupported.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfWeekDaySchedulesSupportedPerUser.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfWeekDaySchedulesSupportedPerUser.lua index f5878babee..3326ee5107 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfWeekDaySchedulesSupportedPerUser.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfWeekDaySchedulesSupportedPerUser.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfYearDaySchedulesSupportedPerUser.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfYearDaySchedulesSupportedPerUser.lua index 4039dab170..9a259885f6 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfYearDaySchedulesSupportedPerUser.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/NumberOfYearDaySchedulesSupportedPerUser.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/OperatingMode.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/OperatingMode.lua index 79823fb0e4..2c8e00e7ef 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/OperatingMode.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/OperatingMode.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/RequirePINforRemoteOperation.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/RequirePINforRemoteOperation.lua index 6512d9e530..05570d80b7 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/RequirePINforRemoteOperation.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/RequirePINforRemoteOperation.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/SendPINOverTheAir.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/SendPINOverTheAir.lua index 5b52a9b583..c06968c2fe 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/SendPINOverTheAir.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/SendPINOverTheAir.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/SupportedOperatingModes.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/SupportedOperatingModes.lua index 7859d8346e..8d6d24bbe3 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/SupportedOperatingModes.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/SupportedOperatingModes.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/UserCodeTemporaryDisableTime.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/UserCodeTemporaryDisableTime.lua index 26226e667c..2760bb601a 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/UserCodeTemporaryDisableTime.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/UserCodeTemporaryDisableTime.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/WrongCodeEntryLimit.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/WrongCodeEntryLimit.lua index 2109ef3945..794832c639 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/WrongCodeEntryLimit.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/WrongCodeEntryLimit.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local cluster_base = require "st.matter.cluster_base" local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/init.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/init.lua index 9e35b63132..c7ffd5e2dd 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/init.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/attributes/init.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local attr_mt = {} attr_mt.__attr_cache = {} attr_mt.__index = function(self, key) diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearAliroReaderConfig.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearAliroReaderConfig.lua index 007104e3ec..ef39687504 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearAliroReaderConfig.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearAliroReaderConfig.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearCredential.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearCredential.lua index 07244d15a5..613f5001a8 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearCredential.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearCredential.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearUser.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearUser.lua index 2e5b7ba51b..687bfc23c8 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearUser.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearUser.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearWeekDaySchedule.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearWeekDaySchedule.lua index 30ddd45933..044e36ba99 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearWeekDaySchedule.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearWeekDaySchedule.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearYearDaySchedule.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearYearDaySchedule.lua index ba9380b114..7fe2c99dce 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearYearDaySchedule.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/ClearYearDaySchedule.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetCredentialStatus.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetCredentialStatus.lua index 9b1d37355e..620a6df65f 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetCredentialStatus.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetCredentialStatus.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetUser.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetUser.lua index ecdf60bdcd..a184fd2967 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetUser.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetUser.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetWeekDaySchedule.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetWeekDaySchedule.lua index 817c57cda4..86fa896b3d 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetWeekDaySchedule.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetWeekDaySchedule.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetYearDaySchedule.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetYearDaySchedule.lua index 35ea38a3f8..faf2acb131 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetYearDaySchedule.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/GetYearDaySchedule.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/LockDoor.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/LockDoor.lua index 9440546cab..5319766935 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/LockDoor.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/LockDoor.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetAliroReaderConfig.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetAliroReaderConfig.lua index 8317db64b7..4a756de696 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetAliroReaderConfig.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetAliroReaderConfig.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetCredential.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetCredential.lua index ad024b9619..cb5c074a7e 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetCredential.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetCredential.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetUser.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetUser.lua index a115db2b57..ee638dc3d3 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetUser.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetUser.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetWeekDaySchedule.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetWeekDaySchedule.lua index c13f677303..45deff3493 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetWeekDaySchedule.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetWeekDaySchedule.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetYearDaySchedule.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetYearDaySchedule.lua index 0e65d0027e..6a43412321 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetYearDaySchedule.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/SetYearDaySchedule.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/UnboltDoor.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/UnboltDoor.lua new file mode 100644 index 0000000000..0d56edcef6 --- /dev/null +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/UnboltDoor.lua @@ -0,0 +1,101 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + +local data_types = require "st.matter.data_types" +local TLVParser = require "st.matter.TLV.TLVParser" + +local UnboltDoor = {} + +UnboltDoor.NAME = "UnboltDoor" +UnboltDoor.ID = 0x0027 +UnboltDoor.field_defs = { + { + name = "pin_code", + field_id = 0, + is_nullable = false, + is_optional = true, + data_type = require "st.matter.data_types.OctetString1", + }, +} + +function UnboltDoor:build_test_command_response(device, endpoint_id, status) + return self._cluster:build_test_command_response( + device, + endpoint_id, + self._cluster.ID, + self.ID, + nil, + status + ) +end + +function UnboltDoor:init(device, endpoint_id, pin_code) + local out = {} + local args = {pin_code} + if #args > #self.field_defs then + error(self.NAME .. " received too many arguments") + end + for i,v in ipairs(self.field_defs) do + if v.is_optional and args[i] == nil then + out[v.name] = nil + elseif v.is_nullable and args[i] == nil then + out[v.name] = data_types.validate_or_build_type(args[i], data_types.Null, v.name) + out[v.name].field_id = v.field_id + elseif not v.is_optional and args[i] == nil then + out[v.name] = data_types.validate_or_build_type(v.default, v.data_type, v.name) + out[v.name].field_id = v.field_id + else + out[v.name] = data_types.validate_or_build_type(args[i], v.data_type, v.name) + out[v.name].field_id = v.field_id + end + end + setmetatable(out, { + __index = UnboltDoor, + __tostring = UnboltDoor.pretty_print + }) + return self._cluster:build_cluster_command( + device, + out, + endpoint_id, + self._cluster.ID, + self.ID, + true + ) +end + +function UnboltDoor:set_parent_cluster(cluster) + self._cluster = cluster + return self +end + +function UnboltDoor:augment_type(base_type_obj) + local elems = {} + for _, v in ipairs(base_type_obj.elements) do + for _, field_def in ipairs(self.field_defs) do + if field_def.field_id == v.field_id and + field_def.is_nullable and + (v.value == nil and v.elements == nil) then + elems[field_def.name] = data_types.validate_or_build_type(v, data_types.Null, field_def.field_name) + elseif field_def.field_id == v.field_id and not + (field_def.is_optional and v.value == nil) then + elems[field_def.name] = data_types.validate_or_build_type(v, field_def.data_type, field_def.field_name) + if field_def.element_type ~= nil then + for i, e in ipairs(elems[field_def.name].elements) do + elems[field_def.name].elements[i] = data_types.validate_or_build_type(e, field_def.element_type) + end + end + end + end + end + base_type_obj.elements = elems +end + +function UnboltDoor:deserialize(tlv_buf) + local data = TLVParser.decode_tlv(tlv_buf) + self:augment_type(data) + return data +end + +setmetatable(UnboltDoor, {__call = UnboltDoor.init}) + +return UnboltDoor diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/UnlockDoor.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/UnlockDoor.lua index 32bfd9fb3d..2e85ee4b3c 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/UnlockDoor.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/UnlockDoor.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/init.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/init.lua index ee8db4a85f..9dd68ccda4 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/init.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/commands/init.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local command_mt = {} command_mt.__command_cache = {} command_mt.__index = function(self, key) diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/events/DoorLockAlarm.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/events/DoorLockAlarm.lua index da5f1ed0d1..c08ce9b5cd 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/events/DoorLockAlarm.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/events/DoorLockAlarm.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local cluster_base = require "st.matter.cluster_base" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/events/DoorStateChange.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/events/DoorStateChange.lua index da106194be..678c81d442 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/events/DoorStateChange.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/events/DoorStateChange.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local cluster_base = require "st.matter.cluster_base" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/events/LockOperation.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/events/LockOperation.lua index 8171c09c2e..9264ec99d5 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/events/LockOperation.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/events/LockOperation.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local cluster_base = require "st.matter.cluster_base" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/events/LockOperationError.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/events/LockOperationError.lua index a5363437e4..81e6b5ff74 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/events/LockOperationError.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/events/LockOperationError.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local cluster_base = require "st.matter.cluster_base" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/events/LockUserChange.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/events/LockUserChange.lua index 2566f27c06..dd894398fe 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/events/LockUserChange.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/events/LockUserChange.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local cluster_base = require "st.matter.cluster_base" local TLVParser = require "st.matter.TLV.TLVParser" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/server/events/init.lua b/drivers/SmartThings/matter-lock/src/DoorLock/server/events/init.lua index 0079543a93..47577d454d 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/server/events/init.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/server/events/init.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local event_mt = {} event_mt.__event_cache = {} event_mt.__index = function(self, key) diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/AlarmCodeEnum.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/AlarmCodeEnum.lua index 06460249f2..a32957686b 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/AlarmCodeEnum.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/AlarmCodeEnum.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/CredentialRuleEnum.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/CredentialRuleEnum.lua index ead4d559b7..db49405303 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/CredentialRuleEnum.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/CredentialRuleEnum.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/CredentialStruct.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/CredentialStruct.lua index d58c170334..ba95480e9f 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/CredentialStruct.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/CredentialStruct.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local StructureABC = require "st.matter.data_types.base_defs.StructureABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/CredentialTypeEnum.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/CredentialTypeEnum.lua index 0a09054948..56ed93207c 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/CredentialTypeEnum.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/CredentialTypeEnum.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DataOperationTypeEnum.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DataOperationTypeEnum.lua index 4aa540aae4..1f04f56734 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DataOperationTypeEnum.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DataOperationTypeEnum.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DaysMaskMap.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DaysMaskMap.lua index b4c7ea7f21..7ef2e695ca 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DaysMaskMap.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DaysMaskMap.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlKeypadOperationEventMask.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlKeypadOperationEventMask.lua index 06dd9b829b..90981a831c 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlKeypadOperationEventMask.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlKeypadOperationEventMask.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlKeypadProgrammingEventMask.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlKeypadProgrammingEventMask.lua index d7b3c1c6f6..a6659885f7 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlKeypadProgrammingEventMask.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlKeypadProgrammingEventMask.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlLocalProgrammingFeatures.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlLocalProgrammingFeatures.lua index 937a59daf9..aa551c78d3 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlLocalProgrammingFeatures.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlLocalProgrammingFeatures.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlLockState.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlLockState.lua index 49fa7d2eb6..dc28459b68 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlLockState.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlLockState.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlManualOperationEventMask.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlManualOperationEventMask.lua index 9c9803125d..c678238e4b 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlManualOperationEventMask.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlManualOperationEventMask.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRFIDOperationEventMask.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRFIDOperationEventMask.lua index 3877280e5e..6135aacbba 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRFIDOperationEventMask.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRFIDOperationEventMask.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRFIDProgrammingEventMask.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRFIDProgrammingEventMask.lua index 439f0ebbff..bae938faad 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRFIDProgrammingEventMask.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRFIDProgrammingEventMask.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRemoteOperationEventMask.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRemoteOperationEventMask.lua index 0dfed6af72..36ed32ff3b 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRemoteOperationEventMask.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRemoteOperationEventMask.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRemoteProgrammingEventMask.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRemoteProgrammingEventMask.lua index c0a14c5e1a..8b51a20fbb 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRemoteProgrammingEventMask.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlRemoteProgrammingEventMask.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlStatus.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlStatus.lua index b681fd8018..d3dfc7077b 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlStatus.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlStatus.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlSupportedOperatingModes.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlSupportedOperatingModes.lua index 5e529146c2..bc83f2ba1e 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DlSupportedOperatingModes.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DlSupportedOperatingModes.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockDayOfWeek.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockDayOfWeek.lua index 9a03693d35..ec11ac31f9 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockDayOfWeek.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockDayOfWeek.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockOperationEventCode.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockOperationEventCode.lua index 556fdff0cd..4d33713050 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockOperationEventCode.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockOperationEventCode.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockProgrammingEventCode.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockProgrammingEventCode.lua index ffb91d592f..e1a09cf62a 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockProgrammingEventCode.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockProgrammingEventCode.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockSetPinOrIdStatus.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockSetPinOrIdStatus.lua index 6e32459354..265b1e6f92 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockSetPinOrIdStatus.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockSetPinOrIdStatus.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockUserStatus.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockUserStatus.lua index b755a48bb5..d2cf56be7b 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockUserStatus.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockUserStatus.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockUserType.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockUserType.lua index b8f6724f46..d79f485ed5 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockUserType.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorLockUserType.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorStateEnum.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorStateEnum.lua index ae01ab195c..59e41b7f99 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorStateEnum.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/DoorStateEnum.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" @@ -12,7 +15,7 @@ new_mt.__index.pretty_print = function(self) [self.DOOR_UNSPECIFIED_ERROR] = "DOOR_UNSPECIFIED_ERROR", [self.DOOR_AJAR] = "DOOR_AJAR", } - return string.format("%s: %s", self.field_name or self.NAME, name_lookup[self.value] or string.format("%d", self.value)) + return string.format("%s: %s", self.field_name or self.NAME, name_lookup[self.value]) end new_mt.__tostring = new_mt.__index.pretty_print diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/Feature.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/Feature.lua index d45915c86c..0bbf262e57 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/Feature.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/Feature.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" @@ -358,4 +361,9 @@ end setmetatable(Feature, new_mt) +local has_aliases, aliases = pcall(require, "st.matter.clusters.aliases.DoorLock.types.Feature") +if has_aliases then + aliases:add_to_class(Feature) +end + return Feature \ No newline at end of file diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/LockDataTypeEnum.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/LockDataTypeEnum.lua index a278831c3b..d37ed11cfd 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/LockDataTypeEnum.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/LockDataTypeEnum.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/LockOperationTypeEnum.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/LockOperationTypeEnum.lua index 3d28c27a7e..45e1dce1df 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/LockOperationTypeEnum.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/LockOperationTypeEnum.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/OperatingModeEnum.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/OperatingModeEnum.lua index fc6c61c757..fb3686ff28 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/OperatingModeEnum.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/OperatingModeEnum.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/OperationErrorEnum.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/OperationErrorEnum.lua index 79da0a7c58..ff89b5c8e9 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/OperationErrorEnum.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/OperationErrorEnum.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/OperationSourceEnum.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/OperationSourceEnum.lua index 5d5e9ef592..1bc172c610 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/OperationSourceEnum.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/OperationSourceEnum.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/UserStatusEnum.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/UserStatusEnum.lua index 11e20c7a3a..c137498f5f 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/UserStatusEnum.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/UserStatusEnum.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/UserTypeEnum.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/UserTypeEnum.lua index 9d00c2b940..bc258a5397 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/UserTypeEnum.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/UserTypeEnum.lua @@ -1,3 +1,6 @@ +-- Copyright 2026 SmartThings, Inc. +-- Licensed under the Apache License, Version 2.0 + local data_types = require "st.matter.data_types" local UintABC = require "st.matter.data_types.base_defs.UintABC" diff --git a/drivers/SmartThings/matter-lock/src/DoorLock/types/init.lua b/drivers/SmartThings/matter-lock/src/DoorLock/types/init.lua index f4b2939d61..80feb17ba7 100644 --- a/drivers/SmartThings/matter-lock/src/DoorLock/types/init.lua +++ b/drivers/SmartThings/matter-lock/src/DoorLock/types/init.lua @@ -1,4 +1,4 @@ --- Copyright 2025 SmartThings, Inc. +-- Copyright 2026 SmartThings, Inc. -- Licensed under the Apache License, Version 2.0 local types_mt = {} @@ -14,4 +14,9 @@ local DoorLockTypes = {} setmetatable(DoorLockTypes, types_mt) +local status, aliases = pcall(require, "st.matter.clusters.aliases.DoorLock.types") +if status then + aliases:add_to_class(DoorLockTypes) +end + return DoorLockTypes diff --git a/drivers/SmartThings/matter-lock/src/new-matter-lock/init.lua b/drivers/SmartThings/matter-lock/src/new-matter-lock/init.lua index 5720856242..287e6dd6a9 100644 --- a/drivers/SmartThings/matter-lock/src/new-matter-lock/init.lua +++ b/drivers/SmartThings/matter-lock/src/new-matter-lock/init.lua @@ -8,7 +8,7 @@ local utils = require "st.utils" local lock_utils = require "lock_utils" local version = require "version" -if version.api < 10 then +if version.api < 20 then clusters.DoorLock = require "DoorLock" end @@ -59,7 +59,6 @@ local profiling_data = { ENABLE_DOOR_STATE = "__ENABLE_DOOR_STATE" } -local DoorLockFeatureMapAttr = {ID = 0xFFFC, cluster = DoorLock.ID} local subscribed_attributes = { [capabilities.lock.ID] = { DoorLock.attributes.LockState @@ -150,7 +149,7 @@ local function device_init(driver, device) end end end - device:add_subscribed_attribute(DoorLockFeatureMapAttr) + device:add_subscribed_attribute(DoorLock.attributes.FeatureMap) for cap_id, events in pairs(subscribed_events) do if device:supports_capability_by_id(cap_id) then for _, e in ipairs(events) do @@ -3009,7 +3008,7 @@ local new_matter_lock_handler = { [DoorLock.attributes.AliroBLEAdvertisingVersion.ID] = aliro_ble_advertising_version_handler, [DoorLock.attributes.NumberOfAliroCredentialIssuerKeysSupported.ID] = max_aliro_credential_issuer_key_handler, [DoorLock.attributes.NumberOfAliroEndpointKeysSupported.ID] = max_aliro_endpoint_key_handler, - [DoorLockFeatureMapAttr.ID] = door_lock_feature_map_handler, + [DoorLock.attributes.FeatureMap.ID] = door_lock_feature_map_handler, }, [PowerSource.ID] = { [PowerSource.attributes.AttributeList.ID] = handle_power_source_attribute_list, @@ -3025,15 +3024,15 @@ local new_matter_lock_handler = { }, cmd_response = { [DoorLock.ID] = { - [DoorLock.server.commands.SetUser.ID] = set_user_response_handler, [DoorLock.client.commands.GetUserResponse.ID] = get_user_response_handler, - [DoorLock.server.commands.ClearUser.ID] = clear_user_response_handler, [DoorLock.client.commands.SetCredentialResponse.ID] = set_credential_response_handler, [DoorLock.server.commands.ClearCredential.ID] = clear_credential_response_handler, - [DoorLock.server.commands.SetWeekDaySchedule.ID] = set_week_day_schedule_handler, + [DoorLock.server.commands.ClearUser.ID] = clear_user_response_handler, [DoorLock.server.commands.ClearWeekDaySchedule.ID] = clear_week_day_schedule_handler, - [DoorLock.server.commands.SetYearDaySchedule.ID] = set_year_day_schedule_handler, [DoorLock.server.commands.SetAliroReaderConfig.ID] = set_aliro_reader_config_handler, + [DoorLock.server.commands.SetUser.ID] = set_user_response_handler, + [DoorLock.server.commands.SetWeekDaySchedule.ID] = set_week_day_schedule_handler, + [DoorLock.server.commands.SetYearDaySchedule.ID] = set_year_day_schedule_handler, }, }, }, diff --git a/drivers/SmartThings/matter-lock/src/test/test_aqara_matter_lock.lua b/drivers/SmartThings/matter-lock/src/test/test_aqara_matter_lock.lua index fa55d37774..cbeb1fe018 100644 --- a/drivers/SmartThings/matter-lock/src/test/test_aqara_matter_lock.lua +++ b/drivers/SmartThings/matter-lock/src/test/test_aqara_matter_lock.lua @@ -7,7 +7,10 @@ test.set_rpc_version(0) local capabilities = require "st.capabilities" local t_utils = require "integration_test.utils" local clusters = require "st.matter.clusters" -local cluster_base = require "st.matter.cluster_base" +local version = require "version" +if version.api < 20 then + clusters.DoorLock = require "DoorLock" +end local mock_device = test.mock_device.build_test_matter_device({ profile = t_utils.get_profile_definition("lock-user-pin.yml"), @@ -43,7 +46,6 @@ local mock_device = test.mock_device.build_test_matter_device({ } }) -local DoorLockFeatureMapAttr = {ID = 0xFFFC, cluster = clusters.DoorLock.ID} local function test_init() test.disable_startup_messages() -- subscribe request @@ -54,7 +56,7 @@ local function test_init() subscribe_request:merge(clusters.DoorLock.attributes.MaxPINCodeLength:subscribe(mock_device)) subscribe_request:merge(clusters.DoorLock.attributes.MinPINCodeLength:subscribe(mock_device)) subscribe_request:merge(clusters.DoorLock.attributes.RequirePINforRemoteOperation:subscribe(mock_device)) - subscribe_request:merge(cluster_base.subscribe(mock_device, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) + subscribe_request:merge(clusters.DoorLock.attributes.FeatureMap:subscribe(mock_device)) subscribe_request:merge(clusters.DoorLock.events.LockOperation:subscribe(mock_device)) subscribe_request:merge(clusters.DoorLock.events.DoorLockAlarm:subscribe(mock_device)) subscribe_request:merge(clusters.DoorLock.events.LockUserChange:subscribe(mock_device)) diff --git a/drivers/SmartThings/matter-lock/src/test/test_door_state.lua b/drivers/SmartThings/matter-lock/src/test/test_door_state.lua deleted file mode 100644 index c105346b15..0000000000 --- a/drivers/SmartThings/matter-lock/src/test/test_door_state.lua +++ /dev/null @@ -1,278 +0,0 @@ --- Copyright 2023 SmartThings, Inc. --- Licensed under the Apache License, Version 2.0 - - -local test = require "integration_test" -local capabilities = require "st.capabilities" -local t_utils = require "integration_test.utils" -local clusters = require "st.matter.clusters" -local cluster_base = require "st.matter.cluster_base" -local DoorLock = clusters.DoorLock - -local mock_device_door_state_disabled = test.mock_device.build_test_matter_device({ - profile = t_utils.get_profile_definition("lock-modular.yml"), - manufacturer_info = { - vendor_id = 0x115f, - product_id = 0x2802, - }, - endpoints = { - { - endpoint_id = 0, - clusters = { - { cluster_id = clusters.BasicInformation.ID, cluster_type = "SERVER" }, - }, - device_types = { - { device_type_id = 0x0016, device_type_revision = 1 } -- RootNode - } - }, - { - endpoint_id = 1, - clusters = { - { - cluster_id = DoorLock.ID, - cluster_type = "SERVER", - cluster_revision = 1, - feature_map = 0x20, -- DPS - } - }, - device_types = { - { device_type_id = 0x000A, device_type_revision = 1 } -- Door Lock - } - } - } -}) - -local enabled_optional_component_capability_pairs = {{ "main", {capabilities.doorState.ID} }} -local mock_device = test.mock_device.build_test_matter_device({ - profile = t_utils.get_profile_definition( - "lock-modular.yml", - {enabled_optional_capabilities = enabled_optional_component_capability_pairs} - ), - manufacturer_info = { - vendor_id = 0x115f, - product_id = 0x2802, - }, - endpoints = { - { - endpoint_id = 0, - clusters = { - { cluster_id = clusters.BasicInformation.ID, cluster_type = "SERVER" }, - }, - device_types = { - { device_type_id = 0x0016, device_type_revision = 1 } -- RootNode - } - }, - { - endpoint_id = 1, - clusters = { - { - cluster_id = DoorLock.ID, - cluster_type = "SERVER", - cluster_revision = 1, - feature_map = 0x20, -- DPS - } - }, - device_types = { - { device_type_id = 0x000A, device_type_revision = 1 } -- Door Lock - } - } - } -}) - -local DoorLockFeatureMapAttr = {ID = 0xFFFC, cluster = DoorLock.ID} -local function test_init() - test.disable_startup_messages() - local subscribe_request = DoorLock.attributes.LockState:subscribe(mock_device) - subscribe_request:merge(DoorLock.attributes.DoorState:subscribe(mock_device)) - subscribe_request:merge(DoorLock.attributes.OperatingMode:subscribe(mock_device)) - subscribe_request:merge(cluster_base.subscribe(mock_device_door_state_disabled, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) - subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device)) - subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device)) - test.mock_device.add_test_device(mock_device) - test.socket.device_lifecycle:__queue_receive({ mock_device.id, "added" }) - test.socket.capability:__expect_send( - mock_device:generate_test_message("main", capabilities.lockAlarm.alarm.clear({state_change = true})) - ) - test.socket.device_lifecycle:__queue_receive({ mock_device.id, "init" }) - test.socket.matter:__expect_send({mock_device.id, subscribe_request}) - test.socket.device_lifecycle:__queue_receive({ mock_device.id, "doConfigure" }) - mock_device:expect_metadata_update({ provisioning_state = "PROVISIONED" }) -end - -test.set_test_init_function(test_init) - -local function test_init_door_state_disabled() - test.disable_startup_messages() - local subscribe_request = DoorLock.attributes.LockState:subscribe(mock_device_door_state_disabled) - subscribe_request:merge(DoorLock.attributes.DoorState:subscribe(mock_device_door_state_disabled)) - subscribe_request:merge(DoorLock.attributes.OperatingMode:subscribe(mock_device_door_state_disabled)) - subscribe_request:merge(cluster_base.subscribe(mock_device_door_state_disabled, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) - subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device_door_state_disabled)) - subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device_door_state_disabled)) - test.mock_device.add_test_device(mock_device_door_state_disabled) - test.socket.device_lifecycle:__queue_receive({ mock_device_door_state_disabled.id, "added" }) - test.socket.capability:__expect_send( - mock_device_door_state_disabled:generate_test_message("main", capabilities.lockAlarm.alarm.clear({state_change = true})) - ) - test.socket.device_lifecycle:__queue_receive({ mock_device_door_state_disabled.id, "init" }) - test.socket.matter:__expect_send({mock_device_door_state_disabled.id, subscribe_request}) - test.socket.device_lifecycle:__queue_receive({ mock_device_door_state_disabled.id, "doConfigure" }) - mock_device_door_state_disabled:expect_metadata_update({ provisioning_state = "PROVISIONED" }) -end - -test.register_coroutine_test( - "Check that the device is updated with correct capabilities based on the profile and attributes.", - function () - test.socket.matter:__queue_receive({ - mock_device_door_state_disabled.id, - DoorLock.attributes.DoorState:build_test_report_data(mock_device_door_state_disabled, 1, DoorLock.attributes.DoorState.DOOR_CLOSED) - }) - test.socket.capability:__expect_send( - mock_device_door_state_disabled:generate_test_message("main", capabilities.lock.supportedLockValues({"locked", "unlocked", "not fully locked"}, {visibility = {displayed = false}})) - ) - test.socket.capability:__expect_send( - mock_device_door_state_disabled:generate_test_message("main", capabilities.lock.supportedLockCommands({"lock", "unlock"}, {visibility = {displayed = false}})) - ) - - mock_device_door_state_disabled:expect_metadata_update({ profile = "lock-modular", optional_component_capabilities = {{"main", {"doorState"}}}}) - end, - { test_init = test_init_door_state_disabled } -) - - -test.register_coroutine_test( - "Handle received DoorState.DOOR_CLOSED from Matter device.", - function() - test.socket.matter:__queue_receive( - { - mock_device.id, - DoorLock.attributes.DoorState:build_test_report_data( - mock_device, 1, DoorLock.attributes.DoorState.DOOR_CLOSED - ), - } - ) - test.socket.capability:__expect_send( - mock_device:generate_test_message("main", capabilities.doorState.doorState.closed()) - ) - test.socket.capability:__expect_send( - mock_device:generate_test_message("main", capabilities.doorState.supportedDoorStates({"closed"}, {visibility={displayed=false}})) - ) - end -) - -test.register_coroutine_test( - "Handle received DoorState.DOOR_JAMMED from Matter device.", - function() - test.socket.matter:__queue_receive( - { - mock_device.id, - DoorLock.attributes.DoorState:build_test_report_data( - mock_device, 1, DoorLock.attributes.DoorState.DOOR_JAMMED - ), - } - ) - test.socket.capability:__expect_send( - mock_device:generate_test_message("main", capabilities.doorState.doorState.jammed()) - ) - test.socket.capability:__expect_send( - mock_device:generate_test_message("main", capabilities.doorState.supportedDoorStates({"jammed"}, {visibility={displayed=false}})) - ) - end -) - -test.register_coroutine_test( - "Handle received DoorState.DOOR_FORCED_OPEN from Matter device.", - function() - test.socket.matter:__queue_receive( - { - mock_device.id, - DoorLock.attributes.DoorState:build_test_report_data( - mock_device, 1, DoorLock.attributes.DoorState.DOOR_FORCED_OPEN - ), - } - ) - test.socket.capability:__expect_send( - mock_device:generate_test_message("main", capabilities.doorState.doorState.forcedOpen()) - ) - test.socket.capability:__expect_send( - mock_device:generate_test_message("main", capabilities.doorState.supportedDoorStates({"forcedOpen"}, {visibility={displayed=false}})) - ) - end -) - -test.register_coroutine_test( - "Handle received DoorState.DOOR_UNSPECIFIED_ERROR from Matter device.", - function() - test.socket.matter:__queue_receive( - { - mock_device.id, - DoorLock.attributes.DoorState:build_test_report_data( - mock_device, 1, DoorLock.attributes.DoorState.DOOR_UNSPECIFIED_ERROR - ), - } - ) - test.socket.capability:__expect_send( - mock_device:generate_test_message("main", capabilities.doorState.doorState.unspecifiedError()) - ) - test.socket.capability:__expect_send( - mock_device:generate_test_message("main", capabilities.doorState.supportedDoorStates({"unspecifiedError"}, {visibility={displayed=false}})) - ) - end -) - -test.register_coroutine_test( - "Handle received DoorState.DOOR_AJAR from Matter device.", - function() - test.socket.matter:__queue_receive( - { - mock_device.id, - DoorLock.attributes.DoorState:build_test_report_data( - mock_device, 1, DoorLock.attributes.DoorState.DOOR_AJAR - ), - } - ) - test.socket.capability:__expect_send( - mock_device:generate_test_message("main", capabilities.doorState.doorState.ajar()) - ) - test.socket.capability:__expect_send( - mock_device:generate_test_message("main", capabilities.doorState.supportedDoorStates({"ajar"}, {visibility={displayed=false}})) - ) - end -) - -test.register_coroutine_test( - "Handle received DoorState.DOOR_OPEN from Matter device, and then DoorState.DOOR_AJAR, ensuring supportedDoorStates is updated to include both states.", - function() - test.socket.matter:__queue_receive( - { - mock_device.id, - DoorLock.attributes.DoorState:build_test_report_data( - mock_device, 1, DoorLock.attributes.DoorState.DOOR_OPEN - ), - } - ) - test.socket.capability:__expect_send( - mock_device:generate_test_message("main", capabilities.doorState.doorState.open()) - ) - test.socket.capability:__expect_send( - mock_device:generate_test_message("main", capabilities.doorState.supportedDoorStates({"open"}, {visibility={displayed=false}})) - ) - test.wait_for_events() - test.socket.matter:__queue_receive( - { - mock_device.id, - DoorLock.attributes.DoorState:build_test_report_data( - mock_device, 1, DoorLock.attributes.DoorState.DOOR_AJAR - ), - } - ) - test.socket.capability:__expect_send( - mock_device:generate_test_message("main", capabilities.doorState.doorState.ajar()) - ) - test.socket.capability:__expect_send( - mock_device:generate_test_message("main", capabilities.doorState.supportedDoorStates({"open", "ajar"}, {visibility={displayed=false}})) - ) - end -) - -test.run_registered_tests() diff --git a/drivers/SmartThings/matter-lock/src/test/test_matter_lock_modular.lua b/drivers/SmartThings/matter-lock/src/test/test_matter_lock_modular.lua index 3ac725ea9b..0f2061833e 100644 --- a/drivers/SmartThings/matter-lock/src/test/test_matter_lock_modular.lua +++ b/drivers/SmartThings/matter-lock/src/test/test_matter_lock_modular.lua @@ -6,7 +6,10 @@ local capabilities = require "st.capabilities" local clusters = require "st.matter.clusters" local t_utils = require "integration_test.utils" local uint32 = require "st.matter.data_types.Uint32" -local cluster_base = require "st.matter.cluster_base" +local version = require "version" +if version.api < 20 then + clusters.DoorLock = require "DoorLock" +end local DoorLock = clusters.DoorLock local mock_device = test.mock_device.build_test_matter_device({ @@ -199,13 +202,12 @@ local mock_device_modular = test.mock_device.build_test_matter_device({ } }) -local DoorLockFeatureMapAttr = {ID = 0xFFFC, cluster = DoorLock.ID} local function test_init() test.disable_startup_messages() -- subscribe request local subscribe_request = DoorLock.attributes.LockState:subscribe(mock_device) subscribe_request:merge(DoorLock.attributes.OperatingMode:subscribe(mock_device)) - subscribe_request:merge(cluster_base.subscribe(mock_device, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) + subscribe_request:merge(clusters.DoorLock.attributes.FeatureMap:subscribe(mock_device)) subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device)) subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device)) subscribe_request:merge(clusters.PowerSource.attributes.AttributeList:subscribe(mock_device)) @@ -228,7 +230,7 @@ local function test_init_unlatch() -- subscribe request local subscribe_request = DoorLock.attributes.LockState:subscribe(mock_device_unlatch) subscribe_request:merge(DoorLock.attributes.OperatingMode:subscribe(mock_device_unlatch)) - subscribe_request:merge(cluster_base.subscribe(mock_device_unlatch, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) + subscribe_request:merge(clusters.DoorLock.attributes.FeatureMap:subscribe(mock_device_unlatch)) subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device_unlatch)) subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device_unlatch)) subscribe_request:merge(clusters.PowerSource.attributes.AttributeList:subscribe(mock_device_unlatch)) @@ -256,7 +258,7 @@ local function test_init_user_pin() subscribe_request:merge(DoorLock.attributes.MaxPINCodeLength:subscribe(mock_device_user_pin)) subscribe_request:merge(DoorLock.attributes.MinPINCodeLength:subscribe(mock_device_user_pin)) subscribe_request:merge(DoorLock.attributes.RequirePINforRemoteOperation:subscribe(mock_device_user_pin)) - subscribe_request:merge(cluster_base.subscribe(mock_device_user_pin, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) + subscribe_request:merge(clusters.DoorLock.attributes.FeatureMap:subscribe(mock_device_user_pin)) subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device_user_pin)) subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device_user_pin)) subscribe_request:merge(DoorLock.events.LockUserChange:subscribe(mock_device_user_pin)) @@ -287,7 +289,7 @@ local function test_init_user_pin_schedule_unlatch() subscribe_request:merge(DoorLock.attributes.RequirePINforRemoteOperation:subscribe(mock_device_user_pin_schedule_unlatch)) subscribe_request:merge(DoorLock.attributes.NumberOfWeekDaySchedulesSupportedPerUser:subscribe(mock_device_user_pin_schedule_unlatch)) subscribe_request:merge(DoorLock.attributes.NumberOfYearDaySchedulesSupportedPerUser:subscribe(mock_device_user_pin_schedule_unlatch)) - subscribe_request:merge(cluster_base.subscribe(mock_device_user_pin_schedule_unlatch, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) + subscribe_request:merge(clusters.DoorLock.attributes.FeatureMap:subscribe(mock_device_user_pin_schedule_unlatch)) subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device_user_pin_schedule_unlatch)) subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device_user_pin_schedule_unlatch)) subscribe_request:merge(DoorLock.events.LockUserChange:subscribe(mock_device_user_pin_schedule_unlatch)) @@ -311,7 +313,7 @@ local function test_init_modular() -- subscribe request local subscribe_request = DoorLock.attributes.LockState:subscribe(mock_device_modular) subscribe_request:merge(DoorLock.attributes.OperatingMode:subscribe(mock_device_modular)) - subscribe_request:merge(cluster_base.subscribe(mock_device_modular, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) + subscribe_request:merge(clusters.DoorLock.attributes.FeatureMap:subscribe(mock_device_modular)) subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device_modular)) subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device_modular)) subscribe_request:merge(clusters.PowerSource.attributes.AttributeList:subscribe(mock_device_modular)) @@ -602,7 +604,7 @@ test.register_coroutine_test( subscribe_request:merge(DoorLock.attributes.RequirePINforRemoteOperation:subscribe(mock_device_modular)) subscribe_request:merge(DoorLock.attributes.NumberOfWeekDaySchedulesSupportedPerUser:subscribe(mock_device_modular)) subscribe_request:merge(DoorLock.attributes.NumberOfYearDaySchedulesSupportedPerUser:subscribe(mock_device_modular)) - subscribe_request:merge(cluster_base.subscribe(mock_device_modular, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) + subscribe_request:merge(DoorLock.attributes.FeatureMap:subscribe(mock_device_modular)) subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device_modular)) subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device_modular)) subscribe_request:merge(DoorLock.events.LockUserChange:subscribe(mock_device_modular)) diff --git a/drivers/SmartThings/matter-lock/src/test/test_matter_lock_unlatch.lua b/drivers/SmartThings/matter-lock/src/test/test_matter_lock_unlatch.lua index 56f6da5e41..9960db523c 100644 --- a/drivers/SmartThings/matter-lock/src/test/test_matter_lock_unlatch.lua +++ b/drivers/SmartThings/matter-lock/src/test/test_matter_lock_unlatch.lua @@ -7,7 +7,10 @@ test.set_rpc_version(0) local capabilities = require "st.capabilities" local t_utils = require "integration_test.utils" local clusters = require "st.matter.clusters" -local cluster_base = require "st.matter.cluster_base" +local version = require "version" +if version.api < 20 then + clusters.DoorLock = require "DoorLock" +end local DoorLock = clusters.DoorLock local types = DoorLock.types @@ -44,13 +47,12 @@ local mock_device = test.mock_device.build_test_matter_device({ } }) -local DoorLockFeatureMapAttr = {ID = 0xFFFC, cluster = DoorLock.ID} local function test_init() test.disable_startup_messages() -- subscribe_request local subscribe_request = DoorLock.attributes.LockState:subscribe(mock_device) subscribe_request:merge(DoorLock.attributes.OperatingMode:subscribe(mock_device)) - subscribe_request:merge(cluster_base.subscribe(mock_device, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) + subscribe_request:merge(DoorLock.attributes.FeatureMap:subscribe(mock_device)) subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device)) subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device)) -- add test device, handle initial subscribe diff --git a/drivers/SmartThings/matter-lock/src/test/test_new_matter_lock.lua b/drivers/SmartThings/matter-lock/src/test/test_new_matter_lock.lua index 19cc296e34..996f7bbdbd 100644 --- a/drivers/SmartThings/matter-lock/src/test/test_new_matter_lock.lua +++ b/drivers/SmartThings/matter-lock/src/test/test_new_matter_lock.lua @@ -7,10 +7,13 @@ test.set_rpc_version(0) local capabilities = require "st.capabilities" local t_utils = require "integration_test.utils" local clusters = require "st.matter.clusters" -local cluster_base = require "st.matter.cluster_base" +local lock_utils = require "lock_utils" +local version = require "version" +if version.api < 20 then + clusters.DoorLock = require "DoorLock" +end local DoorLock = clusters.DoorLock local types = DoorLock.types -local lock_utils = require "lock_utils" local mock_device = test.mock_device.build_test_matter_device({ profile = t_utils.get_profile_definition("lock-user-pin-schedule.yml"), @@ -45,7 +48,6 @@ local mock_device = test.mock_device.build_test_matter_device({ } }) -local DoorLockFeatureMapAttr = {ID = 0xFFFC, cluster = DoorLock.ID} local function test_init() test.disable_startup_messages() -- subscribe request @@ -58,7 +60,7 @@ local function test_init() subscribe_request:merge(DoorLock.attributes.RequirePINforRemoteOperation:subscribe(mock_device)) subscribe_request:merge(DoorLock.attributes.NumberOfWeekDaySchedulesSupportedPerUser:subscribe(mock_device)) subscribe_request:merge(DoorLock.attributes.NumberOfYearDaySchedulesSupportedPerUser:subscribe(mock_device)) - subscribe_request:merge(cluster_base.subscribe(mock_device, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) + subscribe_request:merge(DoorLock.attributes.FeatureMap:subscribe(mock_device)) subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device)) subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device)) subscribe_request:merge(DoorLock.events.LockUserChange:subscribe(mock_device)) diff --git a/drivers/SmartThings/matter-lock/src/test/test_new_matter_lock_aliro.lua b/drivers/SmartThings/matter-lock/src/test/test_new_matter_lock_aliro.lua index 04d051b93e..d488010af7 100644 --- a/drivers/SmartThings/matter-lock/src/test/test_new_matter_lock_aliro.lua +++ b/drivers/SmartThings/matter-lock/src/test/test_new_matter_lock_aliro.lua @@ -16,9 +16,12 @@ local test = require "integration_test" local capabilities = require "st.capabilities" local t_utils = require "integration_test.utils" local clusters = require "st.matter.clusters" -local cluster_base = require "st.matter.cluster_base" -local DoorLock = clusters.DoorLock local OctetString1 = require "st.matter.data_types.OctetString1" +local version = require "version" +if version.api < 20 then + clusters.DoorLock = require "DoorLock" +end +local DoorLock = clusters.DoorLock local enabled_optional_component_capability_pairs = {{ "main", @@ -64,7 +67,6 @@ local mock_device = test.mock_device.build_test_matter_device({ } }) -local DoorLockFeatureMapAttr = {ID = 0xFFFC, cluster = DoorLock.ID} local function test_init() test.disable_startup_messages() test.mock_device.add_test_device(mock_device) @@ -87,7 +89,7 @@ local function test_init() subscribe_request:merge(DoorLock.attributes.AliroBLEAdvertisingVersion:subscribe(mock_device)) subscribe_request:merge(DoorLock.attributes.NumberOfAliroCredentialIssuerKeysSupported:subscribe(mock_device)) subscribe_request:merge(DoorLock.attributes.NumberOfAliroEndpointKeysSupported:subscribe(mock_device)) - subscribe_request:merge(cluster_base.subscribe(mock_device, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) + subscribe_request:merge(DoorLock.attributes.FeatureMap:subscribe(mock_device)) subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device)) subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device)) subscribe_request:merge(DoorLock.events.LockUserChange:subscribe(mock_device)) diff --git a/drivers/SmartThings/matter-lock/src/test/test_new_matter_lock_battery.lua b/drivers/SmartThings/matter-lock/src/test/test_new_matter_lock_battery.lua index 8b31a80b0c..fdc15c7856 100644 --- a/drivers/SmartThings/matter-lock/src/test/test_new_matter_lock_battery.lua +++ b/drivers/SmartThings/matter-lock/src/test/test_new_matter_lock_battery.lua @@ -7,7 +7,10 @@ local capabilities = require "st.capabilities" local clusters = require "st.matter.clusters" local t_utils = require "integration_test.utils" local uint32 = require "st.matter.data_types.Uint32" -local cluster_base = require "st.matter.cluster_base" +local version = require "version" +if version.api < 20 then + clusters.DoorLock = require "DoorLock" +end local DoorLock = clusters.DoorLock local mock_device = test.mock_device.build_test_matter_device({ @@ -162,13 +165,12 @@ local mock_device_user_pin_schedule_unlatch = test.mock_device.build_test_matter } }) -local DoorLockFeatureMapAttr = {ID = 0xFFFC, cluster = DoorLock.ID} local function test_init() test.disable_startup_messages() -- subscribe request local subscribe_request = DoorLock.attributes.LockState:subscribe(mock_device) subscribe_request:merge(DoorLock.attributes.OperatingMode:subscribe(mock_device)) - subscribe_request:merge(cluster_base.subscribe(mock_device, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) + subscribe_request:merge(DoorLock.attributes.FeatureMap:subscribe(mock_device)) subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device)) subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device)) subscribe_request:merge(clusters.PowerSource.attributes.AttributeList:subscribe(mock_device)) @@ -192,7 +194,7 @@ local function test_init_unlatch() -- subscribe request local subscribe_request = DoorLock.attributes.LockState:subscribe(mock_device_unlatch) subscribe_request:merge(DoorLock.attributes.OperatingMode:subscribe(mock_device_unlatch)) - subscribe_request:merge(cluster_base.subscribe(mock_device_unlatch, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) + subscribe_request:merge(DoorLock.attributes.FeatureMap:subscribe(mock_device_unlatch)) subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device_unlatch)) subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device_unlatch)) subscribe_request:merge(clusters.PowerSource.attributes.AttributeList:subscribe(mock_device_unlatch)) @@ -221,7 +223,7 @@ local function test_init_user_pin() subscribe_request:merge(DoorLock.attributes.MaxPINCodeLength:subscribe(mock_device_user_pin)) subscribe_request:merge(DoorLock.attributes.MinPINCodeLength:subscribe(mock_device_user_pin)) subscribe_request:merge(DoorLock.attributes.RequirePINforRemoteOperation:subscribe(mock_device_user_pin)) - subscribe_request:merge(cluster_base.subscribe(mock_device_user_pin, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) + subscribe_request:merge(DoorLock.attributes.FeatureMap:subscribe(mock_device_user_pin)) subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device_user_pin)) subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device_user_pin)) subscribe_request:merge(DoorLock.events.LockUserChange:subscribe(mock_device_user_pin)) @@ -253,7 +255,7 @@ local function test_init_user_pin_schedule_unlatch() subscribe_request:merge(DoorLock.attributes.RequirePINforRemoteOperation:subscribe(mock_device_user_pin_schedule_unlatch)) subscribe_request:merge(DoorLock.attributes.NumberOfWeekDaySchedulesSupportedPerUser:subscribe(mock_device_user_pin_schedule_unlatch)) subscribe_request:merge(DoorLock.attributes.NumberOfYearDaySchedulesSupportedPerUser:subscribe(mock_device_user_pin_schedule_unlatch)) - subscribe_request:merge(cluster_base.subscribe(mock_device_user_pin_schedule_unlatch, nil, DoorLockFeatureMapAttr.cluster, DoorLockFeatureMapAttr.ID)) + subscribe_request:merge(DoorLock.attributes.FeatureMap:subscribe(mock_device_user_pin_schedule_unlatch)) subscribe_request:merge(DoorLock.events.LockOperation:subscribe(mock_device_user_pin_schedule_unlatch)) subscribe_request:merge(DoorLock.events.DoorLockAlarm:subscribe(mock_device_user_pin_schedule_unlatch)) subscribe_request:merge(DoorLock.events.LockUserChange:subscribe(mock_device_user_pin_schedule_unlatch))