From d1ab1229058cd1de0d5e3403f6d2eef1ec45e08a Mon Sep 17 00:00:00 2001 From: Meteor Liu Date: Thu, 5 Sep 2024 21:30:43 +0800 Subject: [PATCH 1/2] Add loock.lock.fcl201 smart door lock --- .../xiaomi_gateway3/core/devices.py | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/custom_components/xiaomi_gateway3/core/devices.py b/custom_components/xiaomi_gateway3/core/devices.py index 2c5e2f74..f99ca117 100644 --- a/custom_components/xiaomi_gateway3/core/devices.py +++ b/custom_components/xiaomi_gateway3/core/devices.py @@ -1854,6 +1854,94 @@ ConstConv("action", mi="5.e.1006", value="doorbell"), BaseConv("timestamp", mi="5.e.1006.p.1"), ], +}, { + 9877: ["Loock", "Loock Smart Lock V5 Max", "XFCL201"], + "spec": [ + BaseConv("action", "sensor"), + MapConv("position", "sensor", mi="2.e.1020.p.1", map={ + 1: "indoor", 2: "outdoor", 3: "not tell indoor or outdoor" + }), + MapConv("method", "sensor", mi="2.e.1020.p.2", map={ + 1: "mobile", 2: "fingerprint", 3: "password", 4: "nfc", 5: "face", 6: "Finger Vein", + 7: "Palm Print", 8: "key", 9: "one_time_password", 10: "periodic_password", + 11: "Homekit", 12: "coerce", 13: "Two Step Verification", 14: "Turntable", + 15: "manual", 16: "auto" + }), + MapConv("lock_action", "sensor", mi="2.e.1020.p.3", map={ + 1: "lock", 2: "unlock", 3: "lock_outside", 4: "lock_inside", + 5: "unlock_inside", 6: "enable_child_lock", 7: "disable_child_lock", + 8: "enable_away", 9: "disable_away" + }), + # Operation ID + BaseConv("operation_id", "sensor", mi="2.e.1020.p.4"), + BaseConv("lock_timestamp", "sensor", mi="2.e.1020.p.5"), + MapConv("abnormal_type", "sensor", mi="2.e.1007.p.6", map={ + 1: "Frequent Unlocking Failed By Multiple Methods", + 2: "Frequent Unlocking Failed By Password", + 3: "Frequent Unlocking Failed By Fingerprint", + 4: "Frequent Unlocking Failed By NFC", + 5: "Frequent Unlocking Failed By Face", + 6: "Frequent Unlocking Failed By Palmprint", + 7: "Frequent Unlocking Failed By Finger Vein", + 8: "Frequent Unlocking Failed By Key", + 9: "Door Lock Was Damaged", + 10: "Locked Unsuccessfully", + 11: "Unlock From Inside After Leaving Home", + 12: "Door Lock Was Reset", + 13: "Foreign Object Detected In The Keyhole", + 14: "Key Was Not Removed", + 15: "Door Lock Fingerprint Sensor Error", + 16: "Door Lock Mechanical Failure", + 17: "Door Lock Main Part Failure", + 18: "The Lithium Battery Temperature Is Too High", + 19: "Large Batteries Are Low", + 20: "Small Batteries Are Low", + 21: "Large And Small Batteries Are Low", + 22: "Large And Small Deplete", + 23: "Leaving The Door Open Timed Out", + 24: "Door Was Ajar", + 25: "Door Was Opened Forcefully", + 26: "Small Batteries Are Nearly Depleted", + 27: "Small Batteries Are Nearly Depleted And Large Batteries Low", + 28: "Large Batteries Are Nearly Depleted", + 29: "Large Batteries Are Nearly Depleted And Small Batteries Low", + 30: "Large Batteries Are Removed", + 31: "Large Batteries Are Inserted", + 32: "Small Batteries Are Removed", + 33: "Small Batteries Are Inserted", + 34: "Battery Low The Cat Eye Function And The Door Screen Are Suspended", + 35: "Ultrasonic Sensitivity Decreased" + }), + MapConv("door_state", "sensor", mi="3.p.1021", map={ + 16: 'Locked', + 20: 'Locked', + 24: 'Locked', + 28: 'Locked', + 32: 'Unlocked', + 36: 'Unlocked', + 40: 'Unlocked', + 44: 'Unlocked', + 48: 'Leaving The Door Open Timed Out', + 52: 'Leaving The Door Open Timed Out', + 56: 'Leaving The Door Open Timed Out', + 60: 'Leaving The Door Open Timed Out', + 64: 'Door Was Ajar', + 68: 'Door Was Ajar', + 72: 'Door Was Ajar', + 76: 'Door Was Ajar' + }), + # small battery sensor + BaseConv("battery", "sensor", mi="4.p.1003"), + # charging state + BaseConv("changing", "sensor", mi="4.p.1034"), + # doorbell + ConstConv("action", mi="5.e.1006", value="doorbell"), + # doorbell timestamp + BaseConv("doorbell_timestamp", "sensor", mi="5.p.1"), + # large battery sensor + BaseConv("large_battery", "sensor", mi="10.e.1.p.1"), + ConstConv("action", mi="10.e.1", value="low_battery"), + ], }, { 14456: ["LeMesh", "Scenario wireless knob switch K4", "lemesh.remote.ts4"], "spec": [ From f12eff235b1bbbc38df80d617a08a6edf13e1fd8 Mon Sep 17 00:00:00 2001 From: Meteor Liu Date: Wed, 11 Sep 2024 11:20:06 +0800 Subject: [PATCH 2/2] reformat the `method` writing value style --- custom_components/xiaomi_gateway3/core/devices.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/custom_components/xiaomi_gateway3/core/devices.py b/custom_components/xiaomi_gateway3/core/devices.py index f99ca117..110c60c3 100644 --- a/custom_components/xiaomi_gateway3/core/devices.py +++ b/custom_components/xiaomi_gateway3/core/devices.py @@ -1862,9 +1862,9 @@ 1: "indoor", 2: "outdoor", 3: "not tell indoor or outdoor" }), MapConv("method", "sensor", mi="2.e.1020.p.2", map={ - 1: "mobile", 2: "fingerprint", 3: "password", 4: "nfc", 5: "face", 6: "Finger Vein", - 7: "Palm Print", 8: "key", 9: "one_time_password", 10: "periodic_password", - 11: "Homekit", 12: "coerce", 13: "Two Step Verification", 14: "Turntable", + 1: "mobile_phone", 2: "fingerprint", 3: "password", 4: "nfc", 5: "face", 6: "finger_vein", + 7: "palm_print", 8: "lock_key", 9: "one_time_password", 10: "periodic_password", + 11: "homekit", 12: "coerce", 13: "two_step_verification", 14: "turntable", 15: "manual", 16: "auto" }), MapConv("lock_action", "sensor", mi="2.e.1020.p.3", map={