Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Add support for Tapo DL100 Smart Wi-Fi Door Lock (uses DLKLAP encryption over HTTP) #1693

Copy link
Copy link
@MohitDeshwal

Description

@MohitDeshwal
Issue body actions

Add support for Tapo DL100 Smart Wi-Fi Door Lock (uses DLKLAP encryption over HTTP)

Device info

  • Model: Tapo DL100 (US), launched June 2025
  • Encryption scheme reported by device: DLKLAP (not currently supported)
  • Transport: HTTP port 80 (is_support_https=False)
  • Device family: SMART.TAPOLOCK
  • Login version: 2

Reproduction

Running devtools/dump_devinfo.py against a DL100 on the local network (on feature/dl110 branch from PR #1646, though the same failure happens on master):

python devtools/dump_devinfo.py --host 192.168.x.x --username <email> --password <pass> --autosave

Fails with:

kasa.exceptions.UnsupportedDeviceError: Unsupported device 192.168.x.x of type SMART.TAPOLOCK
with encrypt_scheme EncryptionScheme(is_support_https=False, encrypt_type='DLKLAP',
http_port=80, lv=2)

Forcing --encrypt-type KLAP --device-family SMART.TAPOLOCK is silently ignored because kasa/device_factory.py:200-207 hard-codes DeviceFamily.SmartTapoLockSmartCamProtocol(SslAesTransport) — so every connection attempt goes to HTTPS/443, which the DL100 doesn't listen on (gets ConnectionRefusedError on port 443).

Why the DL110 support in #1646 doesn't cover DL100

PR #1646 adds the SMART.TAPOLOCK device family, DoorLock device type, and a smartcam Lock module. Those are all above the transport layer. The DL110 uses HTTPS + AES (same as Tapo cameras/doorbells), so reusing SslAesTransport works. The DL100, despite sharing the SMART.TAPOLOCK family string, uses a different transport/encryption entirely (DLKLAP over plain HTTP).

What's needed

  1. Add DLKLAP = "DLKLAP" to DeviceEncryptionType in kasa/deviceconfig.py.
  2. Register SMART.TAPOLOCK (no .HTTPS suffix) in kasa/device_factory.py's get_device_class_from_family() mapping.
  3. Implement a new DlklapTransport in kasa/transports/ — the wire protocol is currently undocumented and will need to be reverse-engineered (Tapo app ↔ DL100 packet capture).
  4. Update get_protocol() so SmartTapoLock with encryption_type=DLKLAP and https=False picks the new transport instead of SslAesTransport.

References

Willingness to help

I have a DL100 on my local network and can run any debug captures, test builds, or pcaps that would help an implementer. Happy to test PRs against real hardware.

Reactions are currently unavailable

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Morty Proxy This is a proxified and sanitized view of the page, visit original site.