Skip to content

Commit 1b84fa9

Browse files
authored
add supportedUnlockDirections attribute and unlockDirection feature (#1746)
1 parent b1ea551 commit 1b84fa9

File tree

2 files changed

+43
-26
lines changed

2 files changed

+43
-26
lines changed

drivers/Aqara/aqara-lock/src/init.lua

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ local function device_init(self, device)
6868
LockAlarm.supportedAlarmValues(SUPPORTED_ALARM_VALUES, { visibility = { displayed = false } })
6969
)
7070
end
71+
device:emit_event(capabilities.lock.supportedUnlockDirections({"fromInside", "fromOutside"}, {visibility = {displayed = false}}))
72+
device:emit_event(capabilities.battery.type("AA"))
73+
device:emit_event(capabilities.battery.quantity(8))
7174
end
7275

7376
local function device_added(self, device)
@@ -107,23 +110,33 @@ local function event_lock_handler(driver, device, evt_name, evt_value)
107110
end
108111
end
109112

110-
local function event_unlock_handler(driver, device, evt_name, evt_value)
111-
local id, label
112-
if evt_name == METHOD.RF447 then
113-
evt_name = nil
114-
id = nil
115-
label = nil
116-
elseif evt_name == METHOD.BLUETOOTH and evt_value == 2 then
117-
evt_name = nil
118-
id = nil
119-
label = nil
120-
elseif evt_value == 0x80020000 then -- one-time password
121-
id = "OTP_STANDALONE"
122-
label = nil
123-
else
124-
id, label = credential_utils.find_userLabel(driver, device, evt_value)
125-
end
126-
device:emit_event(Lock.lock.unlocked({ data = { method = evt_name, codeId = id, codeName = label } }))
113+
local function event_unlock_indoor_handler(driver, device, evt_name, evt_value)
114+
device:emit_event(Lock.lock.unlocked({ data = { method = evt_name, codeId = nil, codeName = nil, unlockDirection = "fromInside" } }))
115+
device:emit_event(remoteControlStatus.remoteControlEnabled('false', { visibility = { displayed = false } }))
116+
device:emit_event(LockAlarm.alarm.clear({ visibility = { displayed = false }}))
117+
end
118+
119+
local function event_unlock_outdoor_handler(driver, device, evt_name, evt_value)
120+
local id, label = credential_utils.find_userLabel(driver, device, evt_value)
121+
device:emit_event(Lock.lock.unlocked({ data = { method = evt_name, codeId = id, codeName = label, unlockDirection = "fromOutside" } }))
122+
device:emit_event(remoteControlStatus.remoteControlEnabled('false', { visibility = { displayed = false } }))
123+
device:emit_event(LockAlarm.alarm.clear({ visibility = { displayed = false }}))
124+
end
125+
126+
local function event_unlock_rf447_handler(driver, device, evt_name, evt_value)
127+
device:emit_event(Lock.lock.unlocked({ data = { method = evt_name, codeId = nil, codeName = nil, unlockDirection = nil } }))
128+
device:emit_event(remoteControlStatus.remoteControlEnabled('false', { visibility = { displayed = false } }))
129+
device:emit_event(LockAlarm.alarm.clear({ visibility = { displayed = false }}))
130+
end
131+
132+
local function event_unlock_remote_handler(driver, device, evt_name, evt_value)
133+
device:emit_event(Lock.lock.unlocked({ data = { method = evt_name, codeId = nil, codeName = nil, unlockDirection = nil } }))
134+
device:emit_event(remoteControlStatus.remoteControlEnabled('false', { visibility = { displayed = false } }))
135+
device:emit_event(LockAlarm.alarm.clear({ visibility = { displayed = false }}))
136+
end
137+
138+
local function event_unlock_otp_handler(driver, device, evt_name, evt_value)
139+
device:emit_event(Lock.lock.unlocked({ data = { method = evt_name, codeId = "OTP_STANDALONE", codeName = nil, unlockDirection = "fromOutside" } }))
127140
device:emit_event(remoteControlStatus.remoteControlEnabled('false', { visibility = { displayed = false } }))
128141
device:emit_event(LockAlarm.alarm.clear({ visibility = { displayed = false }}))
129142
end
@@ -163,16 +176,16 @@ end
163176

164177
local resource_id = {
165178
["13.31.85"] = { event_name = METHOD.LOCKED, event_handler = event_lock_handler },
179+
["13.48.85"] = { event_name = METHOD.MANUAL, event_handler = event_unlock_indoor_handler },
180+
["13.51.85"] = { event_name = METHOD.MANUAL, event_handler = event_unlock_indoor_handler },
181+
["13.42.85"] = { event_name = METHOD.FINGERPRINT, event_handler = event_unlock_outdoor_handler },
182+
["13.43.85"] = { event_name = METHOD.KEYPAD, event_handler = event_unlock_outdoor_handler },
183+
["13.44.85"] = { event_name = METHOD.RFID, event_handler = event_unlock_outdoor_handler },
184+
["13.151.85"] = { event_name = METHOD.RF447, event_handler = event_unlock_rf447_handler },
185+
["13.45.85"] = { event_name = METHOD.BLUETOOTH, event_handler = event_unlock_remote_handler },
186+
["13.90.85"] = { event_name = METHOD.COMMAND, event_handler = event_unlock_remote_handler },
187+
["13.46.85"] = { event_name = METHOD.KEYPAD, event_handler = event_unlock_otp_handler },
166188
["13.17.85"] = { event_name = METHOD.NO_USE, event_handler = event_door_handler },
167-
["13.48.85"] = { event_name = METHOD.MANUAL, event_handler = event_unlock_handler },
168-
["13.51.85"] = { event_name = METHOD.MANUAL, event_handler = event_unlock_handler },
169-
["13.42.85"] = { event_name = METHOD.FINGERPRINT, event_handler = event_unlock_handler },
170-
["13.43.85"] = { event_name = METHOD.KEYPAD, event_handler = event_unlock_handler },
171-
["13.44.85"] = { event_name = METHOD.RFID, event_handler = event_unlock_handler },
172-
["13.151.85"] = { event_name = METHOD.RF447, event_handler = event_unlock_handler },
173-
["13.45.85"] = { event_name = METHOD.BLUETOOTH, event_handler = event_unlock_handler },
174-
["13.90.85"] = { event_name = METHOD.COMMAND, event_handler = event_unlock_handler },
175-
["13.46.85"] = { event_name = METHOD.KEYPAD, event_handler = event_unlock_handler },
176189
["13.56.85"] = { event_name = METHOD.NO_USE, event_handler = event_battery_handler },
177190
["13.32.85"] = { event_name = METHOD.NO_USE, event_handler = event_abnormal_status_handler },
178191
["13.33.85"] = { event_name = METHOD.NO_USE, event_handler = event_anti_lock_handler },

drivers/Aqara/aqara-lock/src/test/test_aqara_lock.lua

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ local function test_init()
4242
"highTemperature", "attemptsExceeded" }
4343
test.socket.capability:__expect_send(mock_device:generate_test_message("main",
4444
lockAlarm.supportedAlarmValues(SUPPORTED_ALARM_VALUES, { visibility = { displayed = false } })))
45+
test.socket.capability:__expect_send(mock_device:generate_test_message("main",
46+
Lock.supportedUnlockDirections({"fromInside", "fromOutside"}, { visibility = { displayed = false } })))
47+
test.socket.capability:__expect_send(mock_device:generate_test_message("main", Battery.type("AA")))
48+
test.socket.capability:__expect_send(mock_device:generate_test_message("main", Battery.quantity(8)))
4549
test.mock_device.add_test_device(mock_device)
4650
end
4751
test.set_test_init_function(test_init)

0 commit comments

Comments
 (0)