make-all / tuya-local

Local support for Tuya devices in Home Assistant
MIT License
985 stars 399 forks source link

Request support for `Smart lock_PB_003_005` - RAYKUBE M5 BLE lock with wifi gateway connection #1885

Closed nickdos closed 1 week ago

nickdos commented 1 week ago

RAYKUBE M5 Tuya BLE Fingerprint Door Lock (link)

"product_id": "zhk7n5ey",
"product_name": "Smart lock_PB_003_005",

The lock is able to be added to tuya-local via its wifi bridge and 2 locks are offered, but neither provide functioning lock/unlock actions, when selected.

Log Message

Lock is successfully installed with Tuya-Local but attempting to unlock it via lock.tuya_door_lock returns an error: "Failed to call service lock/lock. unknown error", with the following log messages:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 239, in handle_call_service
    response = await hass.services.async_call(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2738, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2779, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 975, in entity_service_call
    single_response = await _handle_entity_call(
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 1047, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/lock/__init__.py", line 226, in async_handle_unlock_service
    await self.async_unlock(**self.add_default_code(kwargs))
  File "/config/custom_components/tuya_local/lock.py", line 145, in async_unlock
    raise NotImplementedError(self)
NotImplementedError:

Information about DPS mappings

TinyTuya output (See API output in comment below)

{
        "category": "jtmspro",
        "product_name": "Smart lock_PB_003_005",
        "product_id": "zhk7n5ey",
        "biz_type": 0,
        "model": "",
        "sub": true,
        "icon": "https://images.tuyaeu.com/smart/icon/bay1665802448309laHv/bd86277cd4d989abbcb75ca706613ee1.png",
        "node_id": "45bd98e49dc05c52",
        "mapping": {
            "1": {
                "code": "unlock_method_create",
                "type": "Raw",
                "values": {}
            },
            "2": {
                "code": "unlock_method_delete",
                "type": "Raw",
                "values": {}
            },
            "3": {
                "code": "unlock_method_modify",
                "type": "Raw",
                "values": {}
            },
            "8": {
                "code": "residual_electricity",
                "type": "Integer",
                "values": {
                    "min": 0,
                    "max": 100,
                    "scale": 0,
                    "step": 1
                }
            },
            "12": {
                "code": "unlock_fingerprint",
                "type": "Integer",
                "values": {
                    "min": 0,
                    "max": 999,
                    "scale": 0,
                    "step": 1
                }
            },
            "13": {
                "code": "unlock_password",
                "type": "Integer",
                "values": {
                    "min": 0,
                    "max": 999,
                    "scale": 0,
                    "step": 1
                }
            },
            "15": {
                "code": "unlock_card",
                "type": "Integer",
                "values": {
                    "min": 0,
                    "max": 999,
                    "scale": 0,
                    "step": 1
                }
            },
            "18": {
                "code": "open_inside",
                "type": "Boolean",
                "values": {}
            },
            "19": {
                "code": "unlock_ble",
                "type": "Integer",
                "values": {
                    "min": 0,
                    "max": 999,
                    "scale": 0,
                    "step": 1
                }
            },
            "21": {
                "code": "alarm_lock",
                "type": "Enum",
                "values": {
                    "range": [
                        "wrong_finger",
                        "wrong_password",
                        "wrong_card",
                        "wrong_face",
                        "tongue_bad",
                        "too_hot",
                        "unclosed_time",
                        "tongue_not_out",
                        "pry",
                        "key_in",
                        "low_battery",
                        "power_off",
                        "shock",
                        "defense"
                    ]
                }
            },
            "31": {
                "code": "beep_volume",
                "type": "Enum",
                "values": {
                    "range": [
                        "mute",
                        "low",
                        "normal",
                        "high"
                    ]
                }
            },
            "32": {
                "code": "reverse_lock",
                "type": "Boolean",
                "values": {}
            },
            "33": {
                "code": "automatic_lock",
                "type": "Boolean",
                "values": {}
            },
            "36": {
                "code": "auto_lock_time",
                "type": "Integer",
                "values": {
                    "min": 1,
                    "max": 1800,
                    "scale": 0,
                    "step": 1
                }
            },
            "40": {
                "code": "closed_opened",
                "type": "Enum",
                "values": {
                    "range": [
                        "unknown",
                        "open",
                        "closed"
                    ]
                }
            },
            "46": {
                "code": "manual_lock",
                "type": "Boolean",
                "values": {}
            },
            "47": {
                "code": "lock_motor_state",
                "type": "Boolean",
                "values": {}
            },
            "51": {
                "code": "temporary_password_creat",
                "type": "Raw",
                "values": {}
            },
            "52": {
                "code": "temporary_password_delete",
                "type": "Raw",
                "values": {}
            },
            "54": {
                "code": "synch_method",
                "type": "Raw",
                "values": {}
            },
            "55": {
                "code": "unlock_temporary",
                "type": "Integer",
                "values": {
                    "min": 0,
                    "max": 999,
                    "scale": 0,
                    "step": 1
                }
            },
            "58": {
                "code": "arming_switch",
                "type": "Boolean",
                "values": {}
            },
            "61": {
                "code": "remote_no_dp_key",
                "type": "Raw",
                "values": {}
            },
            "62": {
                "code": "unlock_phone_remote",
                "type": "Integer",
                "values": {
                    "min": 0,
                    "max": 999,
                    "scale": 0,
                    "step": 1
                }
            },
            "63": {
                "code": "unlock_voice_remote",
                "type": "Integer",
                "values": {
                    "min": 0,
                    "max": 999,
                    "scale": 0,
                    "step": 1
                }
            },
            "64": {
                "code": "password_offline_time",
                "type": "String",
                "values": "{}"
            },
            "65": {
                "code": "unlock_offline_clear_single",
                "type": "Raw",
                "values": {}
            },
            "66": {
                "code": "unlock_offline_clear",
                "type": "Raw",
                "values": {}
            },
            "67": {
                "code": "unlock_offline_pd",
                "type": "Raw",
                "values": {}
            },
            "68": {
                "code": "special_function",
                "type": "Enum",
                "values": {
                    "range": [
                        "function1",
                        "function2"
                    ]
                }
            },
            "70": {
                "code": "check_code_set",
                "type": "Raw",
                "values": {}
            },
            "71": {
                "code": "ble_unlock_check",
                "type": "Raw",
                "values": {}
            },
            "73": {
                "code": "remote_pd_setkey_check",
                "type": "Raw",
                "values": {}
            }
        },
        "parent": ""
    }

Product ID

"product_id": "zhk7n5ey",
"product_name": "Smart lock_PB_003_005",

Information about how the device functions

https://www.aliexpress.com/item/1005006755492242.html

Seems to be similar in appearance to the ironzon fingerprint lock that is one of the recognised locks when adding to Tuya-local. Has fingerprint reader, number pad and a button on the internal handle to lock the door.

nickdos commented 1 week ago

Google translate version of IoT Tyua API DPS JSON

{
  "modelId": "e9du88",
  "services": [
    {
      "actions": [],
      "code": "",
      "description": "",
      "events": [],
      "name": "Default service",
      "properties": [
        {
          "abilityId": 1,
          "accessMode": "rw",
          "code": "unlock_method_create",
          "description": "[Add unlocking method] After the device is online, add an unlocking method. Supports adding fingerprint, password, card and face unlocking methods; supports administrator mark.",
          "extensions": {
            "iconName": "icon-a_up",
            "attribute": "1888"
          },
          "name": "Add unlocking method",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 2,
          "accessMode": "rw",
          "code": "unlock_method_delete",
          "description": "[Delete unlocking method] After the device is online, delete the unlocking method. Support unlocking methods of deleting fingerprints, passwords, cards and faces. This dp appears in pairs with the added dp",
          "extensions": {
            "iconName": "icon-dp_rabbish",
            "attribute": "1888"
          },
          "name": "Delete unlocking method",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 3,
          "accessMode": "rw",
          "code": "unlock_method_modify",
          "description": "[Modify unlocking method] After the device is online, you can modify the name of the unlocking method and the content of the password.",
          "extensions": {
            "iconName": "icon-edit",
            "attribute": "1888"
          },
          "name": "Modify unlocking method",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 8,
          "accessMode": "ro",
          "code": "residual_electricity",
          "description": "[Device Status] is used to display the power in percentage. The range is -1~100. When the device reports a value of -1, the power is not displayed. (Choose one with DP9)",
          "extensions": {
            "iconName": "icon-dp_battery",
            "attribute": "1280"
          },
          "name": "Remaining power",
          "typeSpec": {
            "type": "value",
            "max": 100,
            "min": 0,
            "scale": 0,
            "step": 1
          }
        },
        {
          "abilityId": 12,
          "accessMode": "ro",
          "code": "unlock_fingerprint",
          "description": "[Report unlocking records] is used for the device to report fingerprint unlocking records. This dp is only enabled when the smart lock product has a fingerprint recognition function on the hardware",
          "extensions": {
            "iconName": "icon-dp_lock",
            "attribute": "1280",
            "trigger": "direct"
          },
          "name": "Fingerprint unlock",
          "typeSpec": {
            "type": "value",
            "max": 999,
            "min": 0,
            "scale": 0,
            "step": 1
          }
        },
        {
          "abilityId": 13,
          "accessMode": "ro",
          "code": "unlock_password",
          "description": "[Report unlocking records] is used for the device to report the records of ordinary password unlocking. This dp is only enabled when the smart lock product has a password button on the hardware that can unlock the door with a password",
          "extensions": {
            "iconName": "icon-dp_lock",
            "attribute": "1280",
            "trigger": "direct"
          },
          "name": "Password unlock",
          "typeSpec": {
            "type": "value",
            "max": 999,
            "min": 0,
            "scale": 0,
            "step": 1
          }
        },
        {
          "abilityId": 15,
          "accessMode": "ro",
          "code": "unlock_card",
          "description": "[Report unlocking records] is used by the device to report door card unlocking records. This dp is only enabled when the smart lock product has a card swiping function on the hardware and can report card swiping records",
          "extensions": {
            "iconName": "icon-dp_lock",
            "attribute": "1280",
            "trigger": "direct"
          },
          "name": "Key card unlocking",
          "typeSpec": {
            "type": "value",
            "max": 999,
            "min": 0,
            "scale": 0,
            "step": 1
          }
        },
        {
          "abilityId": 18,
          "accessMode": "ro",
          "code": "open_inside",
          "description": "[Report unlocking records] If the device locally supports the detection of opening the door from the inside, it is used for the device to report the record of opening the door from the inside. Only if this smart lock product can detect and identify unlocking from the inside on the hardware, and When data can be reported, enable this dp",
          "extensions": {
            "iconName": "icon-dp_power2",
            "attribute": "1024",
            "trigger": "direct"
          },
          "name": "The door opens from the inside",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 19,
          "accessMode": "ro",
          "code": "unlock_ble",
          "description": "[Report unlocking records] is used by the device to report the unlocking records generated by Bluetooth unlocking on the mobile app. Generally, all Bluetooth locks support this function",
          "extensions": {
            "iconName": "icon-dp_lock",
            "attribute": "1280",
            "trigger": "direct"
          },
          "name": "Bluetooth Unlock",
          "typeSpec": {
            "type": "value",
            "max": 999,
            "min": 0,
            "scale": 0,
            "step": 1
          }
        },
        {
          "abilityId": 21,
          "accessMode": "ro",
          "code": "alarm_lock",
          "description": "[Alarm record] When an alarm occurs locally, it is used to report the alarm record of the device. Corresponding value description: 0=Fingerprint trial and error alarm, 1=Password trial and error alarm, 2=Card trial and error alarm, 3=Person Face trial and error alarm, 4=fake lock (the deadbolt is stuck), 5=high temperature alarm, 6=timeout does not close the door, 7=the electronic deadbolt does not pop up, 8=anti-pry alarm, 9=key inserted, 10=low battery Alarm, 11=battery exhaust alarm, 12=vibration alarm, 13=arming alarm, if the device only uses a few items in the alarm dp, the redundant content does not need to be deleted. If deleted, the serial number of the MCU when reporting needs to be adjusted. . It is recommended that developers do not change the enumeration value in the alarm. In case of special circumstances, please perform operations such as adding, deleting, and configuring multiple languages under the guidance of PM.",
          "extensions": {
            "iconName": "icon-dp_warming",
            "attribute": "1280",
            "trigger": "direct"
          },
          "name": "Door lock alarm",
          "typeSpec": {
            "type": "enum",
            "range": [
              "wrong_finger",
              "wrong_password",
              "wrong_card",
              "wrong_face",
              "tongue_bad",
              "too_hot",
              "unclosed_time",
              "tongue_not_out",
              "pry",
              "key_in",
              "low_battery",
              "power_off",
              "shock",
              "defense",
              "wrong_unlock"
            ]
          }
        },
        {
          "abilityId": 31,
          "accessMode": "rw",
          "code": "beep_volume",
          "description": "[Volume] is used to set the local navigation voice volume of the device. This dp is only enabled when the hardware of this smart lock product supports door lock volume adjustment and allows the user to perform switching operations on the app. ",
          "extensions": {
            "iconName": "icon-sound",
            "attribute": "1280"
          },
          "name": "Door lock volume",
          "typeSpec": {
            "type": "enum",
            "range": [
              "mute",
              "low",
              "normal",
              "high"
            ]
          }
        },
        {
          "abilityId": 32,
          "accessMode": "rw",
          "code": "reverse_lock",
          "description": "[Device status] If the device has indoor anti-lock detection, it is used to report the switch status of indoor anti-lock. This dp can only be selected if the hardware function of this smart lock product detects the anti-lock status and can report the data. . This dp is only used to display the anti-lock status on the door lock home page interface, and cannot perform anti-lock setting operations.",
          "extensions": {
            "iconName": "icon-zhuangtai",
            "attribute": "1344",
            "trigger": "direct"
          },
          "name": "Indoor lock",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 33,
          "accessMode": "rw",
          "code": "automatic_lock",
          "description": "[Automatic locking] is a switch used to set the automatic locking function. Through this dp, you can set \"enable automatic locking\" and \"no automatic locking\", that is, the device will not automatically lock. At this time, you can also As a normally open mode. Only when the door lock hardware supports this setting, enable this dp and use it with dp36 and \"automatic lock delay\" to achieve \"automatic lock after unlocking for xx seconds\". Set the waiting time for automatic locking",
          "extensions": {
            "iconName": "icon-power",
            "attribute": "1280",
            "trigger": "direct"
          },
          "name": "Automatic lock switch",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 36,
          "accessMode": "rw",
          "code": "auto_lock_time",
          "description": "[Automatic lock] is used to set the delay time after the device is unlocked to perform automatic locking. The setting range is 1s~30min.",
          "extensions": {
            "iconName": "icon-dp_time3",
            "attribute": "1280",
            "trigger": "direct"
          },
          "name": "Automatic lock delay setting",
          "typeSpec": {
            "type": "value",
            "max": 1800,
            "min": 1,
            "scale": 0,
            "step": 1
          }
        },
        {
          "abilityId": 40,
          "accessMode": "ro",
          "code": "closed_opened",
          "description": "[Device Status] If the device has door opening and closing status detection, it is used to report the door opening and closing status. This dp is only enabled when this function is supported",
          "extensions": {
            "iconName": "icon-zhuangtai",
            "attribute": "1280",
            "trigger": "direct"
          },
          "name": "Door opening and closing status",
          "typeSpec": {
            "type": "enum",
            "range": [
              "unknown",
              "open",
              "closed"
            ]
          }
        },
        {
          "abilityId": 46,
          "accessMode": "rw",
          "code": "manual_lock",
          "description": "[Locking operation] is used to trigger the device to perform a locking operation, and can be used for automatic locking and manual locking operations. \\n To report locking (locking off) records, you need to use dp=20 locking off records . It requires a combination of 2 DPs to fully realize the locking operation and locking record reporting. In addition to these two DPs, dp47=locked status is also needed to report the locking status so that the lock displayed on the app is The unlock/lock status is consistent with the local hardware\\t",
          "extensions": {
            "iconName": "icon-dp_lock",
            "attribute": "1280",
            "trigger": "direct"
          },
          "name": "Manual lock",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 47,
          "accessMode": "ro",
          "code": "lock_motor_state",
          "description": "[Equipment Status] is used to report the status of the device's clutch switch, that is, the switch status of the lock. This dp is only enabled when the product hardware supports detection of the locked status",
          "extensions": {
            "iconName": "icon-dp_lock",
            "attribute": "1280",
            "trigger": "direct"
          },
          "name": "Lock opening and closing status",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 51,
          "accessMode": "rw",
          "code": "temporary_password_creat",
          "description": "[Online Temporary Password] is used to add an online temporary password, and supports setting a time period and a recurring cycle.",
          "extensions": {
            "iconName": "icon-dp_add",
            "attribute": "1344"
          },
          "name": "Add temporary password",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 52,
          "accessMode": "rw",
          "code": "temporary_password_delete",
          "description": "[Online temporary password] is used to delete the online temporary password.",
          "extensions": {
            "iconName": "icon-dp_rabbish",
            "attribute": "1376"
          },
          "name": "Delete temporary password",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 54,
          "accessMode": "rw",
          "code": "synch_method",
          "description": "[Synchronized unlocking method] is used to synchronize all local unlocking methods on the mobile phone. It is strongly recommended to enable this function",
          "extensions": {
            "iconName": "icon-dp_upload",
            "attribute": "1888"
          },
          "name": "Synchronized unlocking method",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 55,
          "accessMode": "ro",
          "code": "unlock_temporary",
          "description": "[Report unlocking records] is used by the device to report online temporary password unlocking records.",
          "extensions": {
            "iconName": "icon-shoushimima",
            "attribute": "1280",
            "trigger": "direct"
          },
          "name": "Temporary password to unlock",
          "typeSpec": {
            "type": "value",
            "max": 999,
            "min": 0,
            "scale": 0,
            "step": 1
          }
        },
        {
          "abilityId": 58,
          "accessMode": "rw",
          "code": "arming_switch",
          "description": "[Arm mode] is a switch used to set the arm mode. Only on door lock product hardware that supports physical operations to turn on/off the arm mode, enable this dp. Example: as in The front panel of the door lock has an arm button that can be activated by long pressing. Within 10 seconds after the door lock is closed, press and hold the button to activate the arm state.",
          "extensions": {
            "iconName": "icon-dp_power2",
            "attribute": "1280"
          },
          "name": "Indoor lock",
          "typeSpec": {
            "type": "bool"
          }
        },
        {
          "abilityId": 61,
          "accessMode": "rw",
          "code": "remote_no_dp_key",
          "description": "[Remote unlocking operation] is used to trigger the remote unlocking operation of the device. It is recommended to enable this dp and develop this function. Only when this function is supported, the door lock can be connected to the Bluetooth gateway before it can communicate with Alexa or Smart speaker products such as Googlehome realize voice control door opening and closing functions",
          "extensions": {
            "iconName": "icon-dp_lock",
            "attribute": "1312"
          },
          "name": "Password-free remote unlocking (with key)",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 62,
          "accessMode": "ro",
          "code": "unlock_phone_remote",
          "description": "[Report unlocking records] is used by the device to report the records of remote unlocking of the mobile phone.",
          "extensions": {
            "iconName": "icon-shouji",
            "attribute": "1280",
            "trigger": "direct"
          },
          "name": "Remote mobile phone unlocking",
          "typeSpec": {
            "type": "value",
            "max": 999,
            "min": 0,
            "scale": 0,
            "step": 1
          }
        },
        {
          "abilityId": 63,
          "accessMode": "ro",
          "code": "unlock_voice_remote",
          "description": "[Report unlocking records] is used for the device to report voice unlocking records. This function relies on dp61=remote opening (with verification code). It needs to enable dp62 and pay at the IoT platform value-added service center. After activating the voice door opening value-added service, this function can be used\\t",
          "extensions": {
            "iconName": "icon-dp_mic",
            "attribute": "1280",
            "trigger": "direct"
          },
          "name": "Remote voice unlocking",
          "typeSpec": {
            "type": "value",
            "max": 999,
            "min": 0,
            "scale": 0,
            "step": 1
          }
        },
        {
          "abilityId": 64,
          "accessMode": "rw",
          "code": "password_offline_time",
          "description": "[Offline password] is used to synchronize timestamps between the cloud and the device. If not selected or not synchronized, the offline password will not be available.",
          "extensions": {
            "iconName": "icon-dp_time2",
            "attribute": "1376",
            "trigger": "direct"
          },
          "name": "Offline password parameter delivery",
          "typeSpec": {
            "type": "string",
            "maxlen": 255
          }
        },
        {
          "abilityId": 65,
          "accessMode": "ro",
          "code": "unlock_offline_clear_single",
          "description": "[Offline password clearing] After the device clears a single offline password locally, the clearing operation record is reported.",
          "extensions": {
            "iconName": "icon-dp_upload",
            "attribute": "1376"
          },
          "name": "Single offline password clearing and reporting",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 66,
          "accessMode": "ro",
          "code": "unlock_offline_clear",
          "description": "[Offline password clearing] After the device clears all offline passwords locally, report the clearing operation record.",
          "extensions": {
            "iconName": "icon-dp_upload",
            "attribute": "1152"
          },
          "name": "Offline password clearing and reporting",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 67,
          "accessMode": "ro",
          "code": "unlock_offline_pd",
          "description": "[Report Unlock Records] is used by the device to report offline password unlock records.",
          "extensions": {
            "iconName": "icon-dp_upload",
            "attribute": "1376"
          },
          "name": "Offline password unlock",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 68,
          "accessMode": "rw",
          "code": "special_function",
          "description": "[Special Function] can be used to set the switches of other special functions according to your own needs. The corresponding copy can be modified on the IoT platform.",
          "extensions": {
            "iconName": "icon-dp_mode",
            "attribute": "1280",
            "trigger": "direct"
          },
          "name": "Two-factor authentication",
          "typeSpec": {
            "type": "enum",
            "range": [
              "function1",
              "function2"
            ]
          }
        },
        {
          "abilityId": 70,
          "accessMode": "rw",
          "code": "check_code_set",
          "description": "[Bluetooth Unlock] is used to configure the verification information required when the device performs Bluetooth unlocking.",
          "extensions": {
            "iconName": "icon-dp_mode",
            "attribute": "1280"
          },
          "name": "Configure Bluetooth unlocking verification code",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 71,
          "accessMode": "rw",
          "code": "ble_unlock_check",
          "description": "[Bluetooth Unlock] is used to trigger the device to perform Bluetooth unlocking. The trigger source can be a mobile phone, an accessory, or proximity unlocking.",
          "extensions": {
            "iconName": "icon-dp_lock",
            "attribute": "1280"
          },
          "name": "Bluetooth unlocking (with verification code)",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        },
        {
          "abilityId": 73,
          "accessMode": "rw",
          "code": "remote_pd_setkey_check",
          "description": "[Remote unlocking] is used to configure the keys required for remote unlocking. If the device requires remote unlocking, this DP must be selected.",
          "extensions": {
            "iconName": "icon-dp_lock",
            "attribute": "1792"
          },
          "name": "Set remote unlocking (with verification code)",
          "typeSpec": {
            "type": "raw",
            "maxlen": 128
          }
        }
      ]
    }
  ]
}         
make-all commented 1 week ago

It is common for locks to not support simple remote unlock functionality, as to do so would be a security risk.