{"id":45409041,"url":"https://github.com/mihai-dinculescu/tapo","last_synced_at":"2026-04-01T17:34:28.559Z","repository":{"id":40768081,"uuid":"500625057","full_name":"mihai-dinculescu/tapo","owner":"mihai-dinculescu","description":"Unofficial Tapo API Client. Works with TP-Link Tapo smart devices. Tested with light bulbs (L510, L520, L530, L535, L610, L630), light strips (L900, L920, L930), plugs (P100, P105, P110, P110M, P115),     power strips (P300, P304M, P316M), hubs (H100), switches (S200B, S200D) and sensors (KE100, T100, T110, T300, T310, T315).","archived":false,"fork":false,"pushed_at":"2026-03-27T17:57:16.000Z","size":1453,"stargazers_count":738,"open_issues_count":10,"forks_count":75,"subscribers_count":18,"default_branch":"main","last_synced_at":"2026-03-27T22:55:37.841Z","etag":null,"topics":["iot","l510","l530","p100","p110","smart-home","tapo"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mihai-dinculescu.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"SUPPORTED_DEVICES.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"mihai-dinculescu"}},"created_at":"2022-06-06T23:35:29.000Z","updated_at":"2026-03-27T20:16:57.000Z","dependencies_parsed_at":"2022-07-14T10:21:42.924Z","dependency_job_id":"805ddb33-60e8-4903-971f-d603ed261d2e","html_url":"https://github.com/mihai-dinculescu/tapo","commit_stats":{"total_commits":55,"total_committers":4,"mean_commits":13.75,"dds":0.4181818181818182,"last_synced_commit":"ac4337396d8e67114a00b0714438684dbd32f6be"},"previous_names":[],"tags_count":60,"template":false,"template_full_name":null,"purl":"pkg:github/mihai-dinculescu/tapo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mihai-dinculescu%2Ftapo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mihai-dinculescu%2Ftapo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mihai-dinculescu%2Ftapo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mihai-dinculescu%2Ftapo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mihai-dinculescu","download_url":"https://codeload.github.com/mihai-dinculescu/tapo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mihai-dinculescu%2Ftapo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31290537,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["iot","l510","l530","p100","p110","smart-home","tapo"],"created_at":"2026-02-21T22:16:15.081Z","updated_at":"2026-04-01T17:34:28.551Z","avatar_url":"https://github.com/mihai-dinculescu.png","language":"Rust","funding_links":["https://github.com/sponsors/mihai-dinculescu"],"categories":[],"sub_categories":[],"readme":"# Tapo\n\n\n[![License][license_badge]][license]\n[![Crates][crates_badge]][crates]\n[![Documentation][crates_documentation_badge]][crates_documentation]\n[![Crates.io][crates_downloads_badge]][crates]\n[![PyPI][pypi_badge]][pypi]\n[![Python][pypi_versions_badge]][pypi]\n[![PyPI][pypi_downloads_badge]][pypi]\\\nUnofficial Tapo API Client. Works with TP-Link Tapo smart devices. Tested with light bulbs (L510, L520, L530, L535, L610, L630), light strips (L900, L920, L930), plugs (P100, P105, P110, P110M, P115), power strips (P300, P304M, P306, P316M), hubs (H100), switches (S200B, S200D, S210) and sensors (KE100, T100, T110, T300, T310, T315).\n\n[license_badge]: https://img.shields.io/crates/l/tapo.svg\n[license]: https://github.com/mihai-dinculescu/tapo/blob/main/LICENSE\n[crates_badge]: https://img.shields.io/crates/v/tapo.svg?logo=rust\u0026color=F75101\n[crates]: https://crates.io/crates/tapo\n[crates_documentation_badge]: https://img.shields.io/docsrs/tapo.svg?logo=rust\u0026color=F75101\n[crates_documentation]: https://docs.rs/tapo\n[crates_downloads_badge]: https://img.shields.io/crates/d/tapo?logo=rust\u0026label=downloads\u0026color=F75101\n\n[pypi_badge]: https://img.shields.io/pypi/v/tapo.svg?logo=pypi\u0026color=00ADD4\n[pypi]: https://pypi.org/project/tapo\n[pypi_versions_badge]: https://img.shields.io/pypi/pyversions/tapo.svg?logo=python\u0026color=00ADD4\n[pypi_downloads_badge]: https://img.shields.io/pypi/dm/tapo?logo=python\u0026color=00ADD4\n\n## Supported Devices\n\nSee [/SUPPORTED_DEVICES.md][supported_devices] for the supported devices and feature matrix.\n\n## Rust Library\n\n### Usage\n\n\u003e Cargo.toml\n```toml\n[dependencies]\ntapo = \"0.8\"\n```\n\n\u003e main.rs\n```rust\nlet device = ApiClient::new(\"\u003ctapo-username\u003e\", \"tapo-password\")\n    .p110(\"\u003cdevice ip address\u003e\")\n    .await?;\n\ndevice.on().await?;\n```\n\n### Examples\n\n```bash\nexport TAPO_USERNAME=\nexport TAPO_PASSWORD=\nexport IP_ADDRESS=\n\ncargo run --example tapo_l530\n```\n\nSee all examples in [/tapo/examples][examples].\n\n## Python Library\n\n### Usage\n\n```bash\npip install tapo\n```\n\n```python\nclient = ApiClient(\"\u003ctapo-username\u003e\", \"tapo-password\")\ndevice = await client.p110(\"\u003cdevice ip address\u003e\")\n\nawait device.on()\n```\n\n### Examples\n\n```bash\ncd tapo-py\nuv venv # On the initial run only\nuv sync --group dev --locked\nuv run maturin develop # On the initial run and whenever the Rust code is modified\n\nexport TAPO_USERNAME=\nexport TAPO_PASSWORD=\nexport IP_ADDRESS=\n```\n\n```bash\npython examples/tapo_p110.py\n```\n\nSee all examples in [/tapo-py/examples][examples-py].\n\n## MCP Server\n\nAn MCP server that exposes Tapo devices as AI-callable tools and resources via the [Model Context Protocol](https://modelcontextprotocol.io/). See [/tapo-mcp/README.md][tapo_mcp] for setup and usage.\n\n## Community Projects\n\n- [tapo-rest][tapo_rest] — a REST wrapper of this library that can be deployed as a service or serve as an advanced example.\n\n## Contributing\n\nContributions are welcome and encouraged! See [/CONTRIBUTING.md][contributing].\n\n## Credits\n\nInspired by [petretiandrea/plugp100][inspired_by].\n\n[supported_devices]: https://github.com/mihai-dinculescu/tapo/blob/main/SUPPORTED_DEVICES.md\n[examples]: https://github.com/mihai-dinculescu/tapo/tree/main/tapo/examples\n[examples-py]: https://github.com/mihai-dinculescu/tapo/tree/main/tapo-py/examples\n[tapo_mcp]: https://github.com/mihai-dinculescu/tapo/tree/main/tapo-mcp\n[tapo_rest]: https://github.com/ClementNerma/tapo-rest\n[contributing]: https://github.com/mihai-dinculescu/tapo/blob/main/CONTRIBUTING.md\n[inspired_by]: https://github.com/petretiandrea/plugp100\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmihai-dinculescu%2Ftapo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmihai-dinculescu%2Ftapo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmihai-dinculescu%2Ftapo/lists"}