mirror of
https://github.com/python-kasa/python-kasa.git
synced 2026-10-30 16:37:20 +00:00
bd4826f1b3339e535b08b567b5d17b93a10858e3
1176 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
bd4826f1b3 |
Add HS103(US) hw 5.0 fw 1.0.3 fixture (#1818)
Some checks failed
CI / Perform Lint Checks (3.15) (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.15 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.15 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
CI / Python 3.15 on windows-latest (push) Has been cancelled
Stale / stale (push) Has been cancelled
|
||
|
|
a178fba1f4 |
Prepare 0.12.0 (#1811)
Some checks failed
Stale / stale (push) Has been cancelled
CI / Perform Lint Checks (3.15) (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.15 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.15 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
CI / Python 3.15 on windows-latest (push) Has been cancelled
## [0.12.0](https://github.com/python-kasa/python-kasa/tree/0.12.0) (2026-10-25) This release include several compatibility fixes (updated accepted SSL ciphers, removal of Homekit from the default update cycle). The new API `Device.supports_module()` provide a way to find out if the device supports some specific module, e.g., HomeKit, without including it in the default update cycle. [Full Changelog](https://github.com/python-kasa/python-kasa/compare/0.11.0.1...0.12.0) **Fixed bugs:** - Keep hub children when the child component list is missing [\#1797](https://github.com/python-kasa/python-kasa/pull/1797) (@Richardtristan) - Strip multi-word rich tags when rich is not installed [\#1807](https://github.com/python-kasa/python-kasa/pull/1807) (@wolfgang-aura) - Add Device.supports_module() and stop querying HomeKit for iot devices [\#1808](https://github.com/python-kasa/python-kasa/pull/1808) (@rytilahti) - Keep multi requests for smartcam devices after a timeout [\#1802](https://github.com/python-kasa/python-kasa/pull/1802) (@hugaraujo) - Consolidate SSL ciphers and use them in SslTransport [\#1798](https://github.com/python-kasa/python-kasa/pull/1798) (@rytilahti) - Raise UnsupportedDeviceError instead of crashing on unknown device types [\#1781](https://github.com/python-kasa/python-kasa/pull/1781) (@GhostCoder6969) **Added support for devices:** - Add TD21(EU) device fixture [\#1786](https://github.com/python-kasa/python-kasa/pull/1786) (@Smugaski) - Add P116M(IN) fixture [\#1795](https://github.com/python-kasa/python-kasa/pull/1795) (@Partha-dev01) **Project maintenance:** - Add Python 3.15 to supported versions and update pins [\#1793](https://github.com/python-kasa/python-kasa/pull/1793) (@rytilahti) - Generate the changelog with git-cliff and draft releases in CI [\#1809](https://github.com/python-kasa/python-kasa/pull/1809) (@rytilahti) - Build and check packages in CI and publish workflows [\#1782](https://github.com/python-kasa/python-kasa/pull/1782) (@rytilahti) **Other changes:** - Use the real discovery reply in the TD21 fixture [\#1800](https://github.com/python-kasa/python-kasa/pull/1800) (@Smugaski)0.12.0 |
||
|
|
6b9d02872e | Add Python 3.15 to supported versions and update pins (#1793) | ||
|
|
78146d4e77 |
Keep hub children when the child component list is missing (#1797)
Some checks failed
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
Stale / stale (push) Has been cancelled
Fixes #1796 Some hubs intermittently return a `getChildDeviceComponentList` result without the `child_component_list` key, as seen with an H200 (firmware 1.7.7 Build 20260917). This changes the logic, so that when the list is missing, children are neither created nor deleted for that update, and a debug message is logged. Treating the response as an empty list would delete the known children of a hub that has some, so they are kept until the next complete response. |
||
|
|
0932f30d06 |
Strip multi-word rich tags when rich is not installed (#1807)
Without `rich` installed, `kasa` prints tags like `[bold red]Only discover is available without --host or --alias[/bold red]` verbatim. The fallback in `kasa/cli/common.py` strips only single-word tags (`\[/?[a-z]+]`), and `error()` uses the two-word `[bold red]`. The pattern is changed to `\[/?[a-z]+(?: [a-z]+)*]`, so space-separated lowercase words are stripped too. |
||
|
|
c60f48df23 |
Generate the changelog with git-cliff and draft releases in CI (#1809)
Replaces `github_changelog_generator` and the manual release steps with a script and a workflow. |
||
|
|
30f5e4a1b9 |
Add Device.supports_module() and stop querying HomeKit for iot devices (#1808)
Some legacy iot firmware stops responding when an unsupported module follows `system` in a request, which made every update time out once the HomeKit query was added. This stops querying HomeKit in `update()` for IOT devices and adds `Device.supports_module()` API to allow checking if some module is supported by the device. |
||
|
|
e29864bfdc |
Keep multi requests for smartcam devices after a timeout (#1802)
Some checks failed
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
Stale / stale (push) Has been cancelled
Smartcam devices do not support sending individual requests, but respond always with `PROTOCOL_FORMAT_ERROR (-40210)`. This commit forces them to always use the multi-request format for requests even after receiving an error where we would otherwise fallback to individual requests. |
||
|
|
2a81f74e9c |
Consolidate SSL ciphers and use them in SslTransport (#1798)
Some checks failed
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
Stale / stale (push) Has been cancelled
- Add `kasa/transports/sslcontext.py` with one shared SSL context for the https transports to avoid copies across transports. - Use it in `SslTransport`, and convert KLAP and Linkie also to use it. - Extend Python's default ciphers with the legacy suites instead of replacing accepted ciphers for future compatibility. |
||
|
|
d6e80d2c78 |
Use the real discovery reply in the TD21 fixture (#1800)
Use the real discovery reply in the TD21 fixture. I said there that the TD21 doesn't answer UDP discovery, and that was wrong: it was asleep during my first attempt, and I had skipped discovery in `dump_devinfo` by passing the family flags. The doorbell does answer, from port 20004. This commit uses the real device response for the fixture, so the `_comment` marker is removed since nothing in the fixture is hand-made any more. --------- Co-authored-by: Smugaski <Smugaski@users.noreply.github.com> |
||
|
|
f1a8d38c9b |
Add TD21(EU) device fixture (#1786)
Some checks failed
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
Stale / stale (push) Has been cancelled
Adds a device fixture for the **Tapo TD21** doorbell, hardware 2.0 (EU), firmware 1.1.5 Build 260423 Rel.6435n. The fixture's `discovery_result` block is **hand-written**, not captured. --------- Co-authored-by: Smugaski <Smugaski@users.noreply.github.com> |
||
|
|
9712137f0e |
Add P116M(IN) fixture (#1795)
Some checks failed
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
Stale / stale (push) Has been cancelled
Fixture for a Tapo P116M (India), hardware 1.0, firmware 1.4.4. It has the same energy monitoring components as the P110M. |
||
|
|
a4fe376c54 |
Raise UnsupportedDeviceError instead of crashing on unknown device types (#1781)
Use get() instead of index accessor to avoid crashing on unknown devices. --------- Co-authored-by: GhostCoder6969 <ghostcoder6969@gmail.com> |
||
|
|
38a3184de6 |
Build and check packages in CI and publish workflows (#1782)
Some checks failed
Stale / stale (push) Has been cancelled
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
The 0.11.0 upload failed only after the release was tagged and published, which burned the version number due to immutable releases (see #1779). - Add a local `build-packages` action that builds the packages with the release build constraints and runs `twine check --strict` on them. - Run it in the lint job, so packaging issues are caught on every PR. - Use the same action in the publish workflow. |
||
|
|
ff261878e0 |
Prepare 0.11.0.1 (#1780)
Some checks failed
Stale / stale (push) Has been cancelled
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
## [0.11.0.1](https://github.com/python-kasa/python-kasa/tree/0.11.0.1) (2026-10-04) [Full Changelog](https://github.com/python-kasa/python-kasa/compare/0.10.2...0.11.0.1) **Release summary:** *Note: 0.11.0 was tagged but never published to PyPI due to a packaging issue. 0.11.0.1 contains the same changes plus a fix for the release workflow.* This is a huge and long overdue release, coming more than a year and a half after the previous one. Hopefully the next one follows sooner, as the TPAP transport (which did not make it into this release) is used more and more on newer devices. This release brings broader camera support, new modules for lights, vacuums and cameras, and many connectivity fixes for newer firmware versions. Some other highlights: - Improved Tapo camera support: login version 3, presets, wifi handling, last alert detection, and more robust authentication and discovery. - Selective room cleaning for robot vacuums. - Configurable light strip length via the new strip segment module, and an exposed light transition state change flag. - Basic HomeKit module for Kasa (iot) devices. - Energy monitoring V2 support (S515D). - Better hub and thermostat state reporting (hold, summer mode, low battery). - Connection fixes for newer Tapo firmware and older SSL devices, plus KLAP v2 for iot devices. - More resilient time handling, with failover and UTC fallback for iot devices. - Python 3.14 is now supported. - Inclusion of fixtures for 29 devices or firmware versions, including the Tapo C460, C200 and C101 cameras and the KH100 hub with KE100/KE110 thermostats. **Thank you to all contributors!** A big thank you to everyone who contributed to this release, whether through code, device fixtures, bug reports or testing. Special thanks to @ZeliardM for a huge effort on both features and project maintenance, including but not limited to: - Features like the HomeKit module for iot devices, iot time module failover, wifi handling and credential improvements for cameras, Tapo login version 3, and V2 energy monitoring for S515D. - A lot of necessary maintenance work including type annotations and cleanups throughout the test suite, modernized docstrings, CI hardening with SHA-pinned actions, and many bug fixes. This helps us to keep the library maintainable and open to new contributions. A warm welcome to our new contributors, with special thanks to those who contributed improvements and fixes: - @alams154: discovery on port 20004 - @bluntman001: iot device classification fix - @bm1549: KLAP v2 transport for iot devices - @darylldelfin: cipher support for newer Tapo firmware - @davidefiocco: vacuum mop water level fix - @epg-pers: selective room cleaning for vacuums - @freeKC: camera discovery and authentication fixes - @gpongelli: extended camera detection - @Ikstar: KL420 color temperature range - @juherr: last alert detection module for cameras, camera error codes and a C200 fixture - @kad: SSL connections to older devices - @KaloyanNaumov: multi-request timeout handling - @loganrosen: KL400L5 color temperature range - @markvanpraet: Tapo C460 support and camera battery fix - @monteccarlos: iot timezone mapping fix - @mrwogu: preset support for Tapo cameras - @nopoz: strip segment module, light transition flag and credentials hash fix - @tk1475: UTC fallback for unset iot device clocks - @wh1t3f1r3: non-retryable network error handling Thanks also to our new contributors who provided device fixtures to help future development efforts: @emanueleg, @fantandrea, @HarryPehkonen, @ijaron, @Krotu, @LostLuma, @mjbohr and @TheLinuxGuy. **This release in numbers:** - 68 merged pull requests from 29 contributors, 27 of them first-time contributors - 8 new modules - 29 new device fixtures - 203 files changed, with 25,199 lines added and 2,585 removed **Implemented enhancements:** - \[Feature Request\] C220 camera line crossing detection on-off switch [\#1551](https://github.com/python-kasa/python-kasa/issues/1551) - SslAesTransport: handshake again when a camera answers 401 to passthrough [\#1771](https://github.com/python-kasa/python-kasa/pull/1771) (@freeKC) - Add LastAlertDetection module for smartcam devices [\#1762](https://github.com/python-kasa/python-kasa/pull/1762) (@juherr) - Add KL420 to TPLINK\_KELVIN color temperature ranges [\#1757](https://github.com/python-kasa/python-kasa/pull/1757) (@Ikstar) - Do not authenticate with a credentials\_hash from a different transport [\#1749](https://github.com/python-kasa/python-kasa/pull/1749) (@nopoz) - Expose the light transition state change flag [\#1745](https://github.com/python-kasa/python-kasa/pull/1745) (@nopoz) - Add strip segment module for configurable light strip length [\#1744](https://github.com/python-kasa/python-kasa/pull/1744) (@nopoz) - Add KL400L5 color temperature range [\#1719](https://github.com/python-kasa/python-kasa/pull/1719) (@loganrosen) - Update smartcam credential handling and tests [\#1664](https://github.com/python-kasa/python-kasa/pull/1664) (@ZeliardM) - Add support for V2 Energy Monitoring for S515D [\#1663](https://github.com/python-kasa/python-kasa/pull/1663) (@ZeliardM) - Add selective room cleaning to vacuum clean module [\#1660](https://github.com/python-kasa/python-kasa/pull/1660) (@epg-pers) - New Wi-Fi handling for SMARTCAM devices [\#1639](https://github.com/python-kasa/python-kasa/pull/1639) (@ZeliardM) - Add support for tapo login\_version 3 in sslaestransport [\#1638](https://github.com/python-kasa/python-kasa/pull/1638) (@ZeliardM) - Add preset support for Tapo cameras [\#1615](https://github.com/python-kasa/python-kasa/pull/1615) (@mrwogu) - Add python 3.14 to supported versions [\#1599](https://github.com/python-kasa/python-kasa/pull/1599) (@rytilahti) - Add discovery port 20004 [\#1595](https://github.com/python-kasa/python-kasa/pull/1595) (@alams154) - Implement IOT Time Module Failover [\#1583](https://github.com/python-kasa/python-kasa/pull/1583) (@ZeliardM) - Add bare bones homekit module for iot devices [\#1566](https://github.com/python-kasa/python-kasa/pull/1566) (@ZeliardM) - Extend smartcam detection support [\#1552](https://github.com/python-kasa/python-kasa/pull/1552) (@gpongelli) **Fixed bugs:** - Time module unavailable for waterleak sensor [\#1613](https://github.com/python-kasa/python-kasa/issues/1613) - 'No time zone found with key EST' in debian 13 [\#1579](https://github.com/python-kasa/python-kasa/issues/1579) - Discovery: accept cameras that only send the encrypt\_type list [\#1770](https://github.com/python-kasa/python-kasa/pull/1770) (@freeKC) - Classify IOT devices via sysinfo regardless of transport \(fixes \#1740\) [\#1769](https://github.com/python-kasa/python-kasa/pull/1769) (@bluntman001) - Fall back to UTC for iot time when the device clock is not set [\#1768](https://github.com/python-kasa/python-kasa/pull/1768) (@tk1475) - Add UNKNOWN\_USERNAME \(-60502\) camera error code [\#1761](https://github.com/python-kasa/python-kasa/pull/1761) (@juherr) - Disable multi requests on timeout during multi-request [\#1759](https://github.com/python-kasa/python-kasa/pull/1759) (@KaloyanNaumov) - Add ECDHE-RSA-AES256 cipher for newer Tapo firmware [\#1755](https://github.com/python-kasa/python-kasa/pull/1755) (@darylldelfin) - Map iot timezone index 18 to America/New\_York instead of EST [\#1743](https://github.com/python-kasa/python-kasa/pull/1743) (@monteccarlos) - fix: use KLAP v2 transport for IOT devices with login version 2 [\#1731](https://github.com/python-kasa/python-kasa/pull/1731) (@bm1549) - Add ENETUNREACH to non-retryable errors in XorTransport [\#1668](https://github.com/python-kasa/python-kasa/pull/1668) (@wh1t3f1r3) - Fix mop set\_waterlevel sending setCleanAttr without type field [\#1667](https://github.com/python-kasa/python-kasa/pull/1667) (@davidefiocco) - Fix SMARTCAM Time module and update tests [\#1659](https://github.com/python-kasa/python-kasa/pull/1659) (@ZeliardM) - Fix camera login version in CLI [\#1658](https://github.com/python-kasa/python-kasa/pull/1658) (@ZeliardM) - Allow SSL connections to older devices [\#1654](https://github.com/python-kasa/python-kasa/pull/1654) (@kad) - waterleaksensor: use parent's Time for alert timestamp [\#1614](https://github.com/python-kasa/python-kasa/pull/1614) (@rytilahti) - Add hold state to thermostatstate [\#1609](https://github.com/python-kasa/python-kasa/pull/1609) (@rytilahti) - Fix thermostat idle reporting on low battery [\#1598](https://github.com/python-kasa/python-kasa/pull/1598) (@rytilahti) - Add shutdown \(summer mode\) to thermostatstate [\#1588](https://github.com/python-kasa/python-kasa/pull/1588) (@rytilahti) - Fix iotstrip child device time handling [\#1584](https://github.com/python-kasa/python-kasa/pull/1584) (@ZeliardM) **Added support for devices:** - Add C200 device fixture [\#1760](https://github.com/python-kasa/python-kasa/pull/1760) (@juherr) - Add P125M fixture for firmware 1.4.4 [\#1746](https://github.com/python-kasa/python-kasa/pull/1746) (@HarryPehkonen) - Add fixtures for KH100, KE100 and KE110 and simulate TRV states [\#1726](https://github.com/python-kasa/python-kasa/pull/1726) (@Krotu) - Add L530EA\(EU\) device fixture [\#1694](https://github.com/python-kasa/python-kasa/pull/1694) (@ZeliardM) - Add C101 test fixture [\#1673](https://github.com/python-kasa/python-kasa/pull/1673) (@ijaron) - Add LB130\(US\) device fixture [\#1669](https://github.com/python-kasa/python-kasa/pull/1669) (@ZeliardM) - Add KL110B\(UN\) device fixture [\#1657](https://github.com/python-kasa/python-kasa/pull/1657) (@ZeliardM) - Add TS15\(US\) device fixture [\#1649](https://github.com/python-kasa/python-kasa/pull/1649) (@ZeliardM) - Add Tapo C460 support [\#1645](https://github.com/python-kasa/python-kasa/pull/1645) (@markvanpraet) - Add P105\(US\) device fixture [\#1644](https://github.com/python-kasa/python-kasa/pull/1644) (@ZeliardM) - Add L430C\(EU\) device fixture [\#1643](https://github.com/python-kasa/python-kasa/pull/1643) (@ZeliardM) - Add L430P\(EU\) device fixture [\#1607](https://github.com/python-kasa/python-kasa/pull/1607) (@LostLuma) - Add S500\(US\)\_1.0\_1.2.0 fixture [\#1569](https://github.com/python-kasa/python-kasa/pull/1569) (@ZeliardM) - Add device fixture for P316M\(US\) [\#1568](https://github.com/python-kasa/python-kasa/pull/1568) (@TheLinuxGuy) - Add L535E\(EU\) 3.0 1.1.8 fixture [\#1545](https://github.com/python-kasa/python-kasa/pull/1545) (@fantandrea) - Adding KL400L10\(US\)\_1.0\_1.0.10 fixture [\#1539](https://github.com/python-kasa/python-kasa/pull/1539) (@mjbohr) - Add TP10\(IT\) 1.0 1.2.5 fixture [\#1538](https://github.com/python-kasa/python-kasa/pull/1538) (@emanueleg) - Add LB100\(US\)\_1.0\_1.8.11 fixture file [\#1515](https://github.com/python-kasa/python-kasa/pull/1515) (@ZeliardM) - Add KS225\(US\)\_1.0\_1.1.1 and L930-5\(EU\)\_1.0\_1.2.5 [\#1509](https://github.com/python-kasa/python-kasa/pull/1509) (@ZeliardM) **Documentation updates:** - How to hash credentials to make use of --credentials-hash flag? [\#1517](https://github.com/python-kasa/python-kasa/issues/1517) - docs: modernize docstrings across the repository [\#1682](https://github.com/python-kasa/python-kasa/pull/1682) (@ZeliardM) - Add a note to emeter guide being kasa-only [\#1512](https://github.com/python-kasa/python-kasa/pull/1512) (@rytilahti) **Project maintenance:** - Fix PyPI publishing for packages with metadata 2.5 [\#1779](https://github.com/python-kasa/python-kasa/pull/1779) (@rytilahti) - tests: add type annotations to top-level test files [\#1688](https://github.com/python-kasa/python-kasa/pull/1688) (@ZeliardM) - tests: add type annotations to CLI, protocol, and smartcam tests [\#1687](https://github.com/python-kasa/python-kasa/pull/1687) (@ZeliardM) - tests: add type annotations to Smart tests [\#1686](https://github.com/python-kasa/python-kasa/pull/1686) (@ZeliardM) - tests: add type annotations to IoT tests [\#1685](https://github.com/python-kasa/python-kasa/pull/1685) (@ZeliardM) - tests: add type annotations to transport tests [\#1684](https://github.com/python-kasa/python-kasa/pull/1684) (@ZeliardM) - tests: centralize transport and session cleanup in conftest [\#1683](https://github.com/python-kasa/python-kasa/pull/1683) (@ZeliardM) - ci: pin all GitHub Actions to SHA hashes and update versions [\#1681](https://github.com/python-kasa/python-kasa/pull/1681) (@ZeliardM) - tests: fix typos, child device subtype, CLI patch path, and deprecation test logic [\#1677](https://github.com/python-kasa/python-kasa/pull/1677) (@ZeliardM) - Update GitHub Workflows and Actions [\#1622](https://github.com/python-kasa/python-kasa/pull/1622) (@ZeliardM) - Use log-level debug for smartdevice query error reporting [\#1587](https://github.com/python-kasa/python-kasa/pull/1587) (@rytilahti) - Use Device instead of SmartDevice where feasible [\#1585](https://github.com/python-kasa/python-kasa/pull/1585) (@ZeliardM) **Closed issues:** - Python 3.14 Support [\#1597](https://github.com/python-kasa/python-kasa/issues/1597) - HS300 Child State - Time Module Error [\#1445](https://github.com/python-kasa/python-kasa/issues/1445)0.11.0.1 |
||
|
|
9b6d6aff21 |
Fix PyPI publishing for packages with metadata 2.5 (#1779)
The 0.11.0 release failed to upload to PyPI as hatchling version used in the CI created metadata that was not accepted by pypi. This commit pins the versions for the release pipeline to avoid such surprises in the future. |
||
|
|
5b8447c940 |
Prepare 0.11.0 (#1776)
## [0.11.0](https://github.com/python-kasa/python-kasa/tree/0.11.0) (2026-10-04) [Full Changelog](https://github.com/python-kasa/python-kasa/compare/0.10.2...0.11.0) **Release summary:** This is a huge and long overdue release, coming more than a year and a half after the previous one. Hopefully the next one follows sooner, as the TPAP transport (which did not make it into this release) is used more and more on newer devices. This release brings broader camera support, new modules for lights, vacuums and cameras, and many connectivity fixes for newer firmware versions. Some other highlights: - Improved Tapo camera support: login version 3, presets, wifi handling, last alert detection, and more robust authentication and discovery. - Selective room cleaning for robot vacuums. - Configurable light strip length via the new strip segment module, and an exposed light transition state change flag. - Basic HomeKit module for Kasa (iot) devices. - Energy monitoring V2 support (S515D). - Better hub and thermostat state reporting (hold, summer mode, low battery). - Connection fixes for newer Tapo firmware and older SSL devices, plus KLAP v2 for iot devices. - More resilient time handling, with failover and UTC fallback for iot devices. - Python 3.14 is now supported. - Inclusion of fixtures for 29 devices or firmware versions, including the Tapo C460, C200 and C101 cameras and the KH100 hub with KE100/KE110 thermostats. **Thank you to all contributors!** A big thank you to everyone who contributed to this release, whether through code, device fixtures, bug reports or testing. Special thanks to @ZeliardM for a huge effort on both features and project maintenance, including but not limited to: - Features like the HomeKit module for iot devices, iot time module failover, wifi handling and credential improvements for cameras, Tapo login version 3, and V2 energy monitoring for S515D. - A lot of necessary maintenance work including type annotations and cleanups throughout the test suite, modernized docstrings, CI hardening with SHA-pinned actions, and many bug fixes. This helps us to keep the library maintainable and open to new contributions. A warm welcome to our new contributors, with special thanks to those who contributed improvements and fixes: - @alams154: discovery on port 20004 - @bluntman001: iot device classification fix - @bm1549: KLAP v2 transport for iot devices - @darylldelfin: cipher support for newer Tapo firmware - @davidefiocco: vacuum mop water level fix - @epg-pers: selective room cleaning for vacuums - @freeKC: camera discovery and authentication fixes - @gpongelli: extended camera detection - @Ikstar: KL420 color temperature range - @juherr: last alert detection module for cameras, camera error codes and a C200 fixture - @kad: SSL connections to older devices - @KaloyanNaumov: multi-request timeout handling - @loganrosen: KL400L5 color temperature range - @markvanpraet: Tapo C460 support and camera battery fix - @monteccarlos: iot timezone mapping fix - @mrwogu: preset support for Tapo cameras - @nopoz: strip segment module, light transition flag and credentials hash fix - @tk1475: UTC fallback for unset iot device clocks - @wh1t3f1r3: non-retryable network error handling Thanks also to our new contributors who provided device fixtures to help future development efforts: @emanueleg, @fantandrea, @HarryPehkonen, @ijaron, @Krotu, @LostLuma, @mjbohr and @TheLinuxGuy. **This release in numbers:** - 68 merged pull requests from 29 contributors, 27 of them first-time contributors - 8 new modules - 29 new device fixtures - 203 files changed, with 25,199 lines added and 2,585 removed **Implemented enhancements:** - \[Feature Request\] C220 camera line crossing detection on-off switch [\#1551](https://github.com/python-kasa/python-kasa/issues/1551) - SslAesTransport: handshake again when a camera answers 401 to passthrough [\#1771](https://github.com/python-kasa/python-kasa/pull/1771) (@freeKC) - Add LastAlertDetection module for smartcam devices [\#1762](https://github.com/python-kasa/python-kasa/pull/1762) (@juherr) - Add KL420 to TPLINK\_KELVIN color temperature ranges [\#1757](https://github.com/python-kasa/python-kasa/pull/1757) (@Ikstar) - Do not authenticate with a credentials\_hash from a different transport [\#1749](https://github.com/python-kasa/python-kasa/pull/1749) (@nopoz) - Expose the light transition state change flag [\#1745](https://github.com/python-kasa/python-kasa/pull/1745) (@nopoz) - Add strip segment module for configurable light strip length [\#1744](https://github.com/python-kasa/python-kasa/pull/1744) (@nopoz) - Add KL400L5 color temperature range [\#1719](https://github.com/python-kasa/python-kasa/pull/1719) (@loganrosen) - Update smartcam credential handling and tests [\#1664](https://github.com/python-kasa/python-kasa/pull/1664) (@ZeliardM) - Add support for V2 Energy Monitoring for S515D [\#1663](https://github.com/python-kasa/python-kasa/pull/1663) (@ZeliardM) - Add selective room cleaning to vacuum clean module [\#1660](https://github.com/python-kasa/python-kasa/pull/1660) (@epg-pers) - New Wi-Fi handling for SMARTCAM devices [\#1639](https://github.com/python-kasa/python-kasa/pull/1639) (@ZeliardM) - Add support for tapo login\_version 3 in sslaestransport [\#1638](https://github.com/python-kasa/python-kasa/pull/1638) (@ZeliardM) - Add preset support for Tapo cameras [\#1615](https://github.com/python-kasa/python-kasa/pull/1615) (@mrwogu) - Add python 3.14 to supported versions [\#1599](https://github.com/python-kasa/python-kasa/pull/1599) (@rytilahti) - Add discovery port 20004 [\#1595](https://github.com/python-kasa/python-kasa/pull/1595) (@alams154) - Implement IOT Time Module Failover [\#1583](https://github.com/python-kasa/python-kasa/pull/1583) (@ZeliardM) - Add bare bones homekit module for iot devices [\#1566](https://github.com/python-kasa/python-kasa/pull/1566) (@ZeliardM) - Extend smartcam detection support [\#1552](https://github.com/python-kasa/python-kasa/pull/1552) (@gpongelli) **Fixed bugs:** - Time module unavailable for waterleak sensor [\#1613](https://github.com/python-kasa/python-kasa/issues/1613) - 'No time zone found with key EST' in debian 13 [\#1579](https://github.com/python-kasa/python-kasa/issues/1579) - Discovery: accept cameras that only send the encrypt\_type list [\#1770](https://github.com/python-kasa/python-kasa/pull/1770) (@freeKC) - Classify IOT devices via sysinfo regardless of transport \(fixes \#1740\) [\#1769](https://github.com/python-kasa/python-kasa/pull/1769) (@bluntman001) - Fall back to UTC for iot time when the device clock is not set [\#1768](https://github.com/python-kasa/python-kasa/pull/1768) (@tk1475) - Add UNKNOWN\_USERNAME \(-60502\) camera error code [\#1761](https://github.com/python-kasa/python-kasa/pull/1761) (@juherr) - Disable multi requests on timeout during multi-request [\#1759](https://github.com/python-kasa/python-kasa/pull/1759) (@KaloyanNaumov) - Add ECDHE-RSA-AES256 cipher for newer Tapo firmware [\#1755](https://github.com/python-kasa/python-kasa/pull/1755) (@darylldelfin) - Map iot timezone index 18 to America/New\_York instead of EST [\#1743](https://github.com/python-kasa/python-kasa/pull/1743) (@monteccarlos) - fix: use KLAP v2 transport for IOT devices with login version 2 [\#1731](https://github.com/python-kasa/python-kasa/pull/1731) (@bm1549) - Add ENETUNREACH to non-retryable errors in XorTransport [\#1668](https://github.com/python-kasa/python-kasa/pull/1668) (@wh1t3f1r3) - Fix mop set\_waterlevel sending setCleanAttr without type field [\#1667](https://github.com/python-kasa/python-kasa/pull/1667) (@davidefiocco) - Fix SMARTCAM Time module and update tests [\#1659](https://github.com/python-kasa/python-kasa/pull/1659) (@ZeliardM) - Fix camera login version in CLI [\#1658](https://github.com/python-kasa/python-kasa/pull/1658) (@ZeliardM) - Allow SSL connections to older devices [\#1654](https://github.com/python-kasa/python-kasa/pull/1654) (@kad) - waterleaksensor: use parent's Time for alert timestamp [\#1614](https://github.com/python-kasa/python-kasa/pull/1614) (@rytilahti) - Add hold state to thermostatstate [\#1609](https://github.com/python-kasa/python-kasa/pull/1609) (@rytilahti) - Fix thermostat idle reporting on low battery [\#1598](https://github.com/python-kasa/python-kasa/pull/1598) (@rytilahti) - Add shutdown \(summer mode\) to thermostatstate [\#1588](https://github.com/python-kasa/python-kasa/pull/1588) (@rytilahti) - Fix iotstrip child device time handling [\#1584](https://github.com/python-kasa/python-kasa/pull/1584) (@ZeliardM) **Added support for devices:** - Add C200 device fixture [\#1760](https://github.com/python-kasa/python-kasa/pull/1760) (@juherr) - Add P125M fixture for firmware 1.4.4 [\#1746](https://github.com/python-kasa/python-kasa/pull/1746) (@HarryPehkonen) - Add fixtures for KH100, KE100 and KE110 and simulate TRV states [\#1726](https://github.com/python-kasa/python-kasa/pull/1726) (@Krotu) - Add L530EA\(EU\) device fixture [\#1694](https://github.com/python-kasa/python-kasa/pull/1694) (@ZeliardM) - Add C101 test fixture [\#1673](https://github.com/python-kasa/python-kasa/pull/1673) (@ijaron) - Add LB130\(US\) device fixture [\#1669](https://github.com/python-kasa/python-kasa/pull/1669) (@ZeliardM) - Add KL110B\(UN\) device fixture [\#1657](https://github.com/python-kasa/python-kasa/pull/1657) (@ZeliardM) - Add TS15\(US\) device fixture [\#1649](https://github.com/python-kasa/python-kasa/pull/1649) (@ZeliardM) - Add Tapo C460 support [\#1645](https://github.com/python-kasa/python-kasa/pull/1645) (@markvanpraet) - Add P105\(US\) device fixture [\#1644](https://github.com/python-kasa/python-kasa/pull/1644) (@ZeliardM) - Add L430C\(EU\) device fixture [\#1643](https://github.com/python-kasa/python-kasa/pull/1643) (@ZeliardM) - Add L430P\(EU\) device fixture [\#1607](https://github.com/python-kasa/python-kasa/pull/1607) (@LostLuma) - Add S500\(US\)\_1.0\_1.2.0 fixture [\#1569](https://github.com/python-kasa/python-kasa/pull/1569) (@ZeliardM) - Add device fixture for P316M\(US\) [\#1568](https://github.com/python-kasa/python-kasa/pull/1568) (@TheLinuxGuy) - Add L535E\(EU\) 3.0 1.1.8 fixture [\#1545](https://github.com/python-kasa/python-kasa/pull/1545) (@fantandrea) - Adding KL400L10\(US\)\_1.0\_1.0.10 fixture [\#1539](https://github.com/python-kasa/python-kasa/pull/1539) (@mjbohr) - Add TP10\(IT\) 1.0 1.2.5 fixture [\#1538](https://github.com/python-kasa/python-kasa/pull/1538) (@emanueleg) - Add LB100\(US\)\_1.0\_1.8.11 fixture file [\#1515](https://github.com/python-kasa/python-kasa/pull/1515) (@ZeliardM) - Add KS225\(US\)\_1.0\_1.1.1 and L930-5\(EU\)\_1.0\_1.2.5 [\#1509](https://github.com/python-kasa/python-kasa/pull/1509) (@ZeliardM) **Documentation updates:** - How to hash credentials to make use of --credentials-hash flag? [\#1517](https://github.com/python-kasa/python-kasa/issues/1517) - docs: modernize docstrings across the repository [\#1682](https://github.com/python-kasa/python-kasa/pull/1682) (@ZeliardM) - Add a note to emeter guide being kasa-only [\#1512](https://github.com/python-kasa/python-kasa/pull/1512) (@rytilahti) **Project maintenance:** - tests: add type annotations to top-level test files [\#1688](https://github.com/python-kasa/python-kasa/pull/1688) (@ZeliardM) - tests: add type annotations to CLI, protocol, and smartcam tests [\#1687](https://github.com/python-kasa/python-kasa/pull/1687) (@ZeliardM) - tests: add type annotations to Smart tests [\#1686](https://github.com/python-kasa/python-kasa/pull/1686) (@ZeliardM) - tests: add type annotations to IoT tests [\#1685](https://github.com/python-kasa/python-kasa/pull/1685) (@ZeliardM) - tests: add type annotations to transport tests [\#1684](https://github.com/python-kasa/python-kasa/pull/1684) (@ZeliardM) - tests: centralize transport and session cleanup in conftest [\#1683](https://github.com/python-kasa/python-kasa/pull/1683) (@ZeliardM) - ci: pin all GitHub Actions to SHA hashes and update versions [\#1681](https://github.com/python-kasa/python-kasa/pull/1681) (@ZeliardM) - tests: fix typos, child device subtype, CLI patch path, and deprecation test logic [\#1677](https://github.com/python-kasa/python-kasa/pull/1677) (@ZeliardM) - Update GitHub Workflows and Actions [\#1622](https://github.com/python-kasa/python-kasa/pull/1622) (@ZeliardM) - Use log-level debug for smartdevice query error reporting [\#1587](https://github.com/python-kasa/python-kasa/pull/1587) (@rytilahti) - Use Device instead of SmartDevice where feasible [\#1585](https://github.com/python-kasa/python-kasa/pull/1585) (@ZeliardM) **Closed issues:** - Python 3.14 Support [\#1597](https://github.com/python-kasa/python-kasa/issues/1597) - HS300 Child State - Time Module Error [\#1445](https://github.com/python-kasa/python-kasa/issues/1445) |
||
|
|
d916a49668 |
Add fixtures for KH100, KE100 and KE110 and simulate TRV states (#1726)
This PR adds fixture files for: - KH100 (UK), hardware 1.0, firmware 1.7.5 - KE100 (UK), hardware 1.0, firmware 2.15.0 - KE110 (EU), hardware 1.0, firmware 1.4.0 The fixtures were collected from physical devices and anonymized for use in development and testing. The KE110 fixture is a new device model and has been added to the appropriate fixture category. This also improves test suite by adding TRV state simulation to allow tests pass on fixtures that report a non-heating state. --------- Co-authored-by: Teemu Rytilahti <tpr@iki.fi> |
||
|
|
99716fc3b9 |
Update smartcam credential handling and tests (#1664)
This PR adds update_admin_password in the library and CLI for SMARTCAM devices. It also updates the update_credentials function to correctly handle the local_account for local device authentication. It updates all of the required tests and code coverage as well. |
||
|
|
b36c795cbc |
tests: add type annotations to top-level test files (#1688)
Add type annotations (parameter types and `-> None` return types) to all top-level test functions across 22 test files. This enables mypy to check test function bodies, catching type errors that were previously hidden. |
||
|
|
eed64fe013 |
Disable multi requests on timeout during multi-request (#1759)
_execute_multiple_query only disables batching on JSON_DECODE_FAIL_ERROR / INTERNAL_UNKNOWN_ERROR (#1025). This change applies the same pattern to a TimeoutError raised while sending a batch: set the batch size to 1 and raise _RetryableError. --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|
|
effdf5a298 |
Expose the light transition state change flag (#1745)
Bulbs and light strips can fade smoothly when their brightness or colour changes, instead of snapping straight to the new value. The Tapo app exposes this as "Smooth Transition". python-kasa cannot read or change it today, so the setting is missing from Home Assistant even though the device supports it. This adds support for this feature as a switch: - read `change_state` in `_post_update_hook` - add a `change_transition` property and `set_change_transition()` - register a `smooth_transition_change` switch feature when the device reports the flag |
||
|
|
dc0745ad93 |
Add strip segment module for configurable light strip length (#1744)
A light strip can be cut shorter than it ships, and the device has to be told how much of it is actually there so effects and colours span the right distance. The Tapo app exposes this as "Light Strip Length". python-kasa has no way to read or change it, so the setting is missing from Home Assistant. This change exposes a new feature backed by `segment` component: - add a `Segment` module: `REQUIRED_COMPONENT = "segment"`, `QUERY_GETTER_NAME = "get_device_segment"` - expose one Number feature, `strip_segments`, range 0-50, `Category.Config` - add a `segments` property and `set_segments()`, which writes `set_device_segment` |
||
|
|
9030179aad |
Fall back to UTC for iot time when the device clock is not set (#1768)
A new or factory-reset iot device can report a clock far in the past, e.g. year 2000, which causes a failure in timezone autodetection logic as the difference can be in years. This causes `update()` to fail, so every cli command fails, including `wifi scan` and `wifi join`, which are the commands needed to provision the device. To fix this, this changes the logic fall back to UTC if the device clock is not set, detected by checking if the timedelta is too large. Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> |
||
|
|
b2a15afa7e |
Classify IOT devices via sysinfo regardless of transport (fixes #1740) (#1769)
Drop the `XorTransport` guard and always query sysinfo for `IotProtocol` connections, so `get_device_class_from_sys_info` sees `dev_name` (\"Wi-Fi Smart Dimmer\", etc.) and picks the right class to initialize. This is necessary, as some IOT-speaking devices have moved to use KLAP instead of XOR as their transport, which in turn caused devices like dimmers to be detected incorrectly as plugs. --------- Co-authored-by: bluntman001 <noreply@github.com> Co-authored-by: Teemu Rytilahti <tpr@iki.fi> |
||
|
|
53823ea9a5 |
Do not authenticate with a credentials_hash from a different transport (#1749)
A `credentials_hash` is specific to the transport that produced it, but nothing checked that the hash a transport was handed was its own. This matters because a device can change its encryption type without the credentials changing. For example, toggling **Third-Party Compatibility** in the Tapo app moves a plug or strip between TPAP and KLAP, and firmware updates are known to introduce new transports. This introduces a per-transport check that the hash has the shape that transport produces, and treats a foreign hash as absent rather than as a bad password. This makes the failure honest but still ends in a reauth. This also changes how credentials are read back out when the hash is one of the plaintext forms and lets the transport derive its own, so the change of encryption type needs no reauth in all cases. |
||
|
|
b0d77b35a2 |
SslAesTransport: handshake again when a camera answers 401 to passthrough (#1771)
Some checks failed
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
Stale / stale (push) Has been cancelled
Some cameras (C220 and C100 on the 1.4.4 line in those reports) drop the session about every ten minutes and answer the next `securePassthrough` with HTTP 401 and `-40421` in the body. With this change a 401 on passthrough marks the transport as needing a handshake and raises `_RetryableError`, so the protocol logs in again and retries the same request. --------- Co-authored-by: freeKC <7538438+freeKC@users.noreply.github.com> |
||
|
|
998ebe79e8 |
fix: use KLAP v2 transport for IOT devices with login version 2 (#1731)
Some checks failed
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
Stale / stale (push) Has been cancelled
Some IOT-family devices keep the legacy IOT command set after a firmware update but upgrade their KLAP authentication to login version 2 (sha256 hashing). This change selects `KlapTransportV2` for `IOT.KLAP` devices that advertise `login_version >= 2`, matching the transport already used for `SMART.KLAP`. Devices with login version 1 (or unset) are unchanged and continue to use the v1 `KlapTransport`. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
9d84bb74e7 |
Discovery: accept cameras that only send the encrypt_type list (#1770)
Some checks failed
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
The C460 on firmware 1.2.2 answers the UDP discovery with
`mgt_encrypt_schm: {"is_support_https": true}` and `encrypt_type:
["3"]`, but no `encrypt_type` inside the scheme and no `encrypt_info`.
`_get_connection_parameters` only looks at those two places for the
encryption type, so the camera ends up as "Unsupported device ... with
no encryption type" even though it works with the same AES login as
every other camera.
This uses the top level list as a last resort: when nothing else names
the encryption type, the device supports https and the list says 3,
treat it as AES.
Co-authored-by: freeKC <7538438+freeKC@users.noreply.github.com>
|
||
|
|
b7b41f2c81 |
Add LastAlertDetection module for smartcam devices (#1762)
Some checks failed
Stale / stale (push) Has been cancelled
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
Add a `LastAlertDetection` module for SMARTCAM devices exposing `getLastAlarmInfo` as two `Info` sensor features: - `last_alert_timestamp` — tz-aware `datetime` of the last alert, `None` when the device has never detected anything (`last_alarm_time` is `""` or `"0"` on such devices, and an unexpected value is also mapped to `None` - `last_alert_type` — `LastAlertType` enum (`Motion`; `Unknown` fallback with a one-time warning per unknown raw value), `None` when unset. |
||
|
|
454e2697dc | Add UNKNOWN_USERNAME (-60502) camera error code (#1761) | ||
|
|
4c2ef506bd |
Map iot timezone index 18 to America/New_York instead of EST (#1743)
Iot firmware timezone index 18 corresponds to "(UTC-05:00) Eastern Time (US & Canada)", which observes daylight saving time. Previously, this was mapped to a fixed UTC-5 (EST= causing one hour off for New York local times. Co-authored-by: monteccarlos <vld@noise.xyz> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
59c47fbe91 |
Add P125M fixture for firmware 1.4.4 (#1746)
Adds a device fixture for the **Tapo P125M** on firmware **1.4.4 Build 260521 Rel.100818** (US). The existing P125M fixture covers firmware 1.1.0 (Build 231009). This newer firmware: - reports **matter component v3** (vs v2 in the old fixture) - adds the **`get_matter_setup_info`** module (Matter setup code/payload) --------- Co-authored-by: Harry Pehkonen <harrypehkonen@users.noreply.github.com> |
||
|
|
a1f3c0c671 | Add C200 device fixture (#1760) | ||
|
|
7164ef7a66 |
Add KL420 to TPLINK_KELVIN color temperature ranges (#1757)
Adds the `KL420` series to `TPLINK_KELVIN` to support wider color temperature ranges (2500-9000K as supported by the device). While older firmware (1.0.2) reported is_variable_color_temp: 0, firmware 1.0.7 enables variable color temperature support. |
||
|
|
0e3640c303 |
Add ECDHE-RSA-AES256 cipher for newer Tapo firmware (#1755)
Add ECDHE-RSA-AES256-GCM-SHA384 alongside the existing ECDHE-RSA-AES128-GCM-SHA256 suite for newer Tapo firmware, while keeping all legacy suites for backward compatibility. Tested with Tapo TC70, C530WS, and C210 cameras after firmware updates produced TLS handshake failures. |
||
|
|
a29d0610ba |
Add KL400L5 color temperature range (#1719)
Some checks failed
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
Stale / stale (push) Has been cancelled
- add the KL400L5 color temperature range used by newer firmware - add a KL400L5(US) 1.0.11 fixture that reports variable color temperature support - categorize that fixture as variable color temperature while keeping older KL400L5 fixtures non-variable - The Tapo app exposes 2500K-9000K for these KL400L5 strips, so this PR uses that app-visible range. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|
|
aba457a729 |
Add selective room cleaning to vacuum clean module (#1660)
Some checks failed
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
Stale / stale (push) Has been cancelled
Adds support for selective room cleaning to the existing `Clean` module. Co-authored-by: davidefiocco <davidefiocco@users.noreply.github.com> |
||
|
|
202b80e9b3 |
Add support for V2 Energy Monitoring for S515D (#1663)
Some checks failed
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
Add support for S515D and other Energy Monitoring V2 devices that report current power via get_energy_usage instead of get_current_power, with fixture coverage and fallback tests. |
||
|
|
b2206841dd |
Fix SMARTCAM Time module and update tests (#1659)
Update SmartCam time handling to apply timezone-only changes with explicit warnings, while keeping common time and CLI tests focused on devices that support setting clock time and adding SmartCam-specific coverage for the special behavior. |
||
|
|
8c66d0a29d |
tests: add type annotations to transport tests (#1684)
Some checks failed
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
Stale / stale (push) Has been cancelled
type annotations and parameter type annotations to all test functions and helper functions across the 5 transport test files. This enables mypy to check function bodies, catching type errors that were previously hidden. |
||
|
|
88e1c27bd0 |
tests: add type annotations to Smart tests (#1686)
Some checks failed
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
Stale / stale (push) Has been cancelled
Add type annotations across all 'smart' tests, enabling mypy to check test function bodies, catching type errors that were previously hidden. |
||
|
|
8840fc395e |
Add python 3.14 to supported versions (#1599)
* Add python 3.14 to our supported versions and to our CI * Convert to use pyproject.toml standard dependency groups * Fix any issues reported by CI |
||
|
|
531be8437a |
ci: pin all GitHub Actions to SHA hashes and update versions (#1681)
Some checks failed
CI / Perform Lint Checks (3.13) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
Stale / stale (push) Has been cancelled
Update action versions and pin to full SHA commit hashes. Windows build parallelization is disabled to avoid hung CI. |
||
|
|
2efdb7b41d |
Add L530EA(EU) device fixture (#1694)
Some checks failed
CI / Perform Lint Checks (3.13) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
Stale / stale (push) Has been cancelled
|
||
|
|
1a84242a05 |
tests: add type annotations to CLI, protocol, and smartcam tests (#1687)
Add type annotations (`-> None` return types and parameter types) to test files in the `tests/cli/`, `tests/protocols/`, and `tests/smartcam/` directories. This enables mypy to check test function bodies, catching type errors that were previously hidden. |
||
|
|
da2588291d |
tests: add type annotations to IoT tests (#1685)
Add type annotations to all test functions across 8 files in `tests/iot/`, improving type safety and enabling mypy to check function bodies. |
||
|
|
bb27a43027 |
docs: modernize docstrings across the repository (#1682)
Comprehensive docstring cleanup across the repository — fix Sphinx cross-references, Python REPL continuation syntax, stale class names, and modernize the IotBulb docstring to use the `Module.Light`/`Module.LightPreset` interface. |
||
|
|
7f10a39655 | tests: centralize transport and session cleanup in conftest (#1683) | ||
|
|
440f1f453b | tests: fix typos, child device subtype, CLI patch path, and deprecation test logic (#1677) |