Skip to content

Commit 80f7b7d

Browse files
CHAD-16365: SLGA: Add implementation for lockCodes:migrate command
1 parent 4d01c76 commit 80f7b7d

File tree

1 file changed

+32
-0
lines changed
  • drivers/SmartThings/zigbee-lock/src

1 file changed

+32
-0
lines changed

drivers/SmartThings/zigbee-lock/src/init.lua

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ local capabilities = require "st.capabilities"
2828
local Battery = capabilities.battery
2929
local Lock = capabilities.lock
3030
local LockCodes = capabilities.lockCodes
31+
local LockCredentials = capabilities.lockCredentials
32+
local LockUsers = capabilities.lockUsers
3133

3234
-- Enums
3335
local UserStatusEnum = LockCluster.types.DrlkUserStatus
@@ -291,6 +293,35 @@ local name_slot = function(driver, device, command)
291293
end
292294
end
293295

296+
local migrate = function(driver, device, command)
297+
local lock_users = {}
298+
local lock_credentails = {}
299+
local index = 0
300+
for code_slot, code_name in pairs(lock_utils.get_lock_codes(device)) do
301+
table.insert(lock_users, {userIndex = index, userType = "guest", userName = code_name})
302+
table.insert(lock_credentails, {userIndex = index, credentialIndex = code_slot, crednetialType = "pin"})
303+
index = index + 1
304+
end
305+
306+
local code_length = device:get_field(capabilities.lockCodes.codeLength)
307+
local max_code_len = device:get_field(capabilities.lockCodes.maxCodeLength)
308+
local min_code_len = device:get_field(capabilities.lockCodes.minCodeLength)
309+
local max_codes = device:get_field(capabilities.lockCodes.maxCodes)
310+
311+
if (code_length ~= nil) then
312+
max_code_len = code_length
313+
min_code_len = code_length
314+
end
315+
316+
device:set_field(capabilities.lockCredentials.minPinCodeLen, min_code_len, { persist = true })
317+
device:set_field(capabilities.lockCredentials.maxPinCodeLen, max_code_len, { persist = true })
318+
device:set_field(capabilities.lockCredentials.pinUsersSupported, max_codes, { persist = true })
319+
device:set_field(capabilities.lockCredentials.credentials, lock_credentails, { persist = true })
320+
device:set_field(capabilities.lockUsers.users, lock_users, { persist = true })
321+
device:set_field(capabilities.lockCredentials.supportedCredentials, {"pin"}, { persist = true })
322+
device:set_field(capabilities.lockCodes.migrated, true, { persist = true })
323+
end
324+
294325
local function device_added(driver, device)
295326
lock_utils.populate_state_from_data(device)
296327

@@ -436,6 +467,7 @@ local zigbee_lock_driver = {
436467
[LockCodes.commands.requestCode.NAME] = request_code,
437468
[LockCodes.commands.setCode.NAME] = set_code,
438469
[LockCodes.commands.nameSlot.NAME] = name_slot,
470+
[LockCodes.commands.migrate.NAME] = migrate,
439471
},
440472
[Lock.ID] = {
441473
[Lock.commands.lock.NAME] = lock,

0 commit comments

Comments
 (0)