# tapo-local: reconstructing local control of the Tapo P110

> 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.

- Type: Case study
- Targets: Protocol
- Category: Independent reconstruction cases
- Relationship: Independent reconstruction project
- Sources reviewed: 2026-11-06
- Added to the catalog: 2026-11-08
- Original resource: <https://github.com/carboni123/tapo-local>
- Primary source: <https://github.com/carboni123/tapo-local/blob/2e8888c37d4b8aeaba39e9b0634b93c7e43b8597/README.md>
- Catalog page: <https://awesomerea.org/resources/tapo-local-case/>
- Record JSON: <https://awesomerea.org/resources/tapo-local-case/record.json>
- Chinese version: [简体中文](https://awesomerea.org/zh/resources/tapo-local-case/index.md)

## Requirements & limits

- **Prerequisites:** A TP-Link Tapo P110 is required; setup uses BLE and a 2.4 GHz Wi-Fi network.
- **Prerequisites:** Python 3.10 or later is required, with bleak for provisioning and cryptography plus aiohttp for Wi-Fi control.
- **Limits:** The toolkit does not ship a verified helper for creating calendar schedule rules.
- **License:** MIT license.

## Primary sources

1. <https://github.com/carboni123/tapo-local/blob/2e8888c37d4b8aeaba39e9b0634b93c7e43b8597/README.md>

## More in Protocols

- [castty: reconstructing Mionix Castor control on Linux](https://awesomerea.org/resources/castty-mionix-castor-case/index.md) · Case study
- [legion-gpu-rgb: reconstructing Lenovo GPU lighting control](https://awesomerea.org/resources/legion-gpu-rgb-case/index.md) · Case study
- [SoundcoreBridge: reconstructing Soundcore Space 2 headphone controls](https://awesomerea.org/resources/soundcorebridge-case/index.md) · Case study
- [NiimBridge: reconstructing the NIIMBOT D110_M print protocol](https://awesomerea.org/resources/niimbridge-d110m-case/index.md) · Case study
- [OMS fingerprint module: reconstructing USB communication for a Linux driver](https://awesomerea.org/resources/oms-fingerprint-linux-case/index.md) · Case study
- [zwift-api: mapping Zwift's private data endpoints](https://awesomerea.org/resources/zwift-api-case/index.md) · Case study

## About this entry

The description was reviewed against primary sources.
Original editorial content: MIT. Linked projects, papers and assets retain their own rights and licenses.
