{
  "added_at": "2026-11-08",
  "category": "reconstruction-cases",
  "class": "hardware",
  "description_en": "tapo-local implements local control of the TP-Link Tapo P110 smart plug using TPAP communication recovered from the Tapo Android app. Python clients provision the plug over BLE, then use Wi-Fi sessions with SPAKE2+ and AES-128-CCM for relay control, power readings and automation.",
  "description_zh": "tapo-local 根据 Tapo Android 应用分析所得的 TPAP 通信方式，实现 TP-Link Tapo P110 智能插座的本地控制。Python 客户端通过 BLE 配网，再经采用 SPAKE2+ 和 AES-128-CCM 的 Wi-Fi 会话控制继电器、读取功率并执行自动化。",
  "entry_url": "https://awesomerea.org/resources/tapo-local-case/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/tapo-local-case/",
  "evidence_class": 2,
  "evidence_status": "observed",
  "evidence_url": "https://github.com/carboni123/tapo-local/blob/2e8888c37d4b8aeaba39e9b0634b93c7e43b8597/README.md",
  "group": "cases",
  "id": "tapo-local-case",
  "json_url": "https://awesomerea.org/resources/tapo-local-case/record.json",
  "kind": "case-study",
  "markdown_url": "https://awesomerea.org/resources/tapo-local-case/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/tapo-local-case/index.md",
  "name": "tapo-local: reconstructing local control of the Tapo P110",
  "name_zh": "tapo-local：重建 Tapo P110 本地控制",
  "record_type": "resource",
  "relationship": "independent-reconstruction",
  "requirement_facets": [
    "prerequisites",
    "prerequisites",
    "limits",
    "license"
  ],
  "requirements": [
    "A TP-Link Tapo P110 is required; setup uses BLE and a 2.4 GHz Wi-Fi network.",
    "Python 3.10 or later is required, with bleak for provisioning and cryptography plus aiohttp for Wi-Fi control.",
    "The toolkit does not ship a verified helper for creating calendar schedule rules.",
    "MIT license."
  ],
  "requirements_zh": [
    "需要 TP-Link Tapo P110；配网使用 BLE 和 2.4 GHz Wi-Fi 网络。",
    "需要 Python 3.10 或更新版本；配网使用 bleak，Wi-Fi 控制使用 cryptography 和 aiohttp。",
    "工具包尚未提供经过验证的日历计划规则创建辅助功能。",
    "采用 MIT 许可证。"
  ],
  "scope": "unknown",
  "targets": [
    "protocol"
  ],
  "url": "https://github.com/carboni123/tapo-local",
  "verification": "source-reviewed",
  "verified_at": "2026-11-06"
}
