@@ -28,6 +28,8 @@ local capabilities = require "st.capabilities"
2828local Battery = capabilities .battery
2929local Lock = capabilities .lock
3030local LockCodes = capabilities .lockCodes
31+ local LockCredentials = capabilities .lockCredentials
32+ local LockUsers = capabilities .lockUsers
3133
3234-- Enums
3335local UserStatusEnum = LockCluster .types .DrlkUserStatus
@@ -291,6 +293,35 @@ local name_slot = function(driver, device, command)
291293 end
292294end
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+
294325local 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