GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — tests: fix typos, child device subtype, CLI patch path, and deprecation test logic by ZeliardM · Pull Request #1677 · python-kasa/python-kasa

Conversation

@ZeliardM

@ZeliardM ZeliardM commented Mar 21, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Collaborator

Summary

Small correctness fixes across tests and source code — foundation cleanup before type annotation PRs.

Changes

  • CHANGELOG.md: Fix typo valid_temperate_range → valid_temperature_range
  • kasa/smart/smartchilddevice.py: Add DeviceType.WallSwitch to sub-bulb child type mapping (plug.powerstrip.sub-bulb)
  • tests/test_cli.py: Fix redact_data patch path to match actual module location
  • tests/test_device.py: Fix deprecation test logic — add deprecated_warns_before_attribute_error set to properly handle attributes that emit DeprecationWarning even when the module isn't present, and fix _test_attribute condition to correctly combine is_expected and will_raise
  • tests/test_discovery.py: Replace deprecated supported_modules with modules in discovery test
  • pyproject.toml: Fix dead mypy override — kasa.tests.* → tests.* (tests live at tests/, not kasa/tests/, so annotation-unchecked suppression was never applied)

Merge order

This is PR 1 of 9 in the test modernization series. Merge before all other PRs in the series.

Order PR Scope
1 #1677 Test and source cleanup
2 #1681 CI: pin GitHub Actions to SHA
3 #1682 Docs: modernize docstrings
4 #1683 Tests: centralize session cleanup
5 #1684 Tests: transport type annotations
6 #1685 Tests: IoT type annotations
7 #1686 Tests: Smart type annotations
8 #1687 Tests: CLI/protocols/smartcam type annotations
9 #1688 Tests: top-level type annotations

Verification

  • All pre-commit hooks pass (ruff, ruff-format, mypy)
  • Full test suite passes after sequential merge of all 9 PRs (10,656 passed, 194 skipped)

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

mrwogu reacted with rocket emoji
All reactions
  • 🚀 1 reaction
@codecov

codecov Bot commented Mar 21, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 93.22%. Comparing base (76d9f68) to head (d9a9721).
⚠️ Report is 24 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #1677   +/-   ##
=======================================
  Coverage   93.22%   93.22%           
=======================================
  Files         157      157           
  Lines        9815     9815           
  Branches     1003     1003           
=======================================
  Hits         9150     9150           
  Misses        472      472           
  Partials      193      193           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@ZeliardM

ZeliardM commented Mar 21, 2026

Copy link
Copy Markdown
Collaborator Author

@rytilahti This PR cleans up a lot of CI testing warnings and errors, the only thing left now is the handling of the fixture files and incomplete fixture file data warning, which I figured was still useful. Let me know if you have any questions.

rytilahti reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

Copilot AI review requested due to automatic review settings April 5, 2026 19:41
Copilot started reviewing on behalf of ZeliardM April 5, 2026 19:42
View session
Copilot AI reviewed Apr 5, 2026
View reviewed changes

Copilot AI left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates documentation/examples and strengthens test hygiene by ensuring transport/client resources are reliably cleaned up during pytest runs, while also tightening deprecation and discovery CLI test behavior.

Changes:

  • Add automatic teardown in multiple transport tests to close created transports and their underlying aiohttp sessions.
  • Modernize IotBulb doctest examples to use module-based light APIs and align the doctest fixture setup accordingly.
  • Small correctness/maintenance updates: deprecation-warning expectations, discovery/CLI redaction patch point, child subtype mapping, and GitHub Actions tweaks.

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
tests/transports/test_sslaestransport.py Autouse fixture tracks and closes created SslAesTransport instances after tests.
tests/transports/test_linkietransport.py Autouse fixture tracks and closes LinkieTransportV2 to avoid unclosed HttpClient sessions.
tests/transports/test_klaptransport.py Autouse fixture closes created transports; adds explicit protocol.close() in query test; removes manual session injection.
tests/transports/test_aestransport.py Autouse fixture tracks/closes AesTransport instances to prevent session leaks.
tests/test_readme_examples.py Prepares bulb fixture state (alias + update) so updated iotbulb doctests match expected output.
tests/test_httpclient.py Ensures HttpClient is closed via finally in error-path test.
tests/test_discovery.py Updates assertions to reflect HttpClient internal session behavior and ensures devices/sessions are disconnected/closed.
tests/test_deviceconfig.py Closes aiohttp.ClientSession used in config serialization tests via finally.
tests/test_device.py Refines deprecation-warning expectations for deprecated attributes that warn before raising AttributeError.
tests/test_cli.py Patches redaction at the CLI import site for discover raw testing.
kasa/smart/smartchilddevice.py Adds plug.powerstrip.sub-bulb subtype mapping to DeviceType.Bulb.
kasa/iot/iotbulb.py Updates docstring examples and fixes a minor wording typo (“fetch updated values”).
CHANGELOG.md Fixes typo in deprecated attribute name (valid_temperature_range).
.github/workflows/codeql-analysis.yml Enables CodeQL action file coverage on PRs via env var.
.github/actions/setup/action.yaml Updates pre-commit cache action to actions/cache@v5.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread tests/test_discovery.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

rytilahti
rytilahti reviewed Apr 5, 2026
View reviewed changes

@rytilahti rytilahti left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The typo fixes and other maintenance work looks good to me, but to me the try-final pattern looks like it complicates the existing code without much benefits?

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread .github/actions/setup/action.yaml Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread tests/transports/test_aestransport.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread tests/transports/test_klaptransport.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread tests/transports/test_klaptransport.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread tests/test_deviceconfig.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread tests/test_httpclient.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

@ZeliardM

ZeliardM commented Apr 5, 2026

Copy link
Copy Markdown
Collaborator Author

@rytilahti I'm going to take the comments and see if I can clean the handling up.

I agree with the actions piece, we leave it as for now and do another PR later to resolve for all actions.

I also agree on the strict typing. I also feel like there needs to be a much larger and broader inspection of tests as a whole, make sure that we are getting the coverages we need for everything and handling everything correctly. Not sure if you want to leave it as is for now and clean up all tests, typing and coverages, in another larger PR.

I will look and see if there is a better handling process for the client so that the tests are not having to be patched like this to make sure the client is closed properly.

rytilahti reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@rytilahti

rytilahti commented Apr 6, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

This PR currently does many different things, so splitting it up would make sense to me. Things like fixing the missing type hints can be done in a single PR, fixing the docstrings in another, etc. This way we can merge the easy ones (CI maintenance, documentation fixes) immediately, and still keep the git history sane (the PR title is used in the git log, so the current one is very non-descriptive and reads like some change log entries "fixed some bugs"..).

ZeliardM reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@ZeliardM

ZeliardM commented Apr 6, 2026

Copy link
Copy Markdown
Collaborator Author

@rytilahti Gotcha. I can break this up into a couple of smaller PRs and make them cleaner along the way. Will do!

rytilahti reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@ZeliardM
ZeliardM force-pushed the feature/test-clean-up branch from ee464a4 to e2f78d0 Compare April 6, 2026 16:28
@ZeliardM ZeliardM changed the title Clean-up tests, latent code issues, and typos Fix typos, child device subtype, CLI test patch path, and deprecation test logic Apr 6, 2026
@ZeliardM

ZeliardM commented Apr 6, 2026

Copy link
Copy Markdown
Collaborator Author

@rytilahti Ok, this PR has been updated to just handle the smaller pieces.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@ZeliardM
Fix typos, child device subtype, CLI test patch path, and deprecation…
d9a9721
… test logic

- Fix CHANGELOG typo: valid_temperate_range -> valid_temperature_range
- Add plug.powerstrip.sub-bulb child device type mapping
- Narrow discover raw test to patch CLI-level redact path
- Fix deprecated attribute test logic for attrs that warn before raising
- Update supported_modules -> modules in discovery test
@ZeliardM
ZeliardM force-pushed the feature/test-clean-up branch from e2f78d0 to d9a9721 Compare April 7, 2026 00:12
@ZeliardM ZeliardM changed the title Fix typos, child device subtype, CLI test patch path, and deprecation test logic tests: fix typos, child device subtype, CLI patch path, and deprecation test logic Apr 7, 2026
This was referenced Apr 7, 2026
ci: pin all GitHub Actions to SHA hashes and update versions #1681
Merged
docs: modernize docstrings across the repository #1682
Merged
tests: centralize transport and session cleanup in conftest #1683
Merged
tests: add type annotations to transport tests #1684
Merged
tests: add type annotations to IoT tests #1685
Merged
tests: add type annotations to Smart tests #1686
Merged
tests: add type annotations to CLI, protocol, and smartcam tests #1687
Merged
tests: add type annotations to top-level test files #1688
Merged
@ZeliardM

ZeliardM commented Apr 9, 2026

Copy link
Copy Markdown
Collaborator Author

@rytilahti Ok, ended up being more than just a couple of PRs, lol. I wanted to be thorough in how I was covering everything but also make it manageable. Look over them all and let me know. I tried to pull everything together so they all cleanly merged as well and it should be down the line, 1 through 9. I have one more that I'm working on for a re-work of discover too.

rytilahti reacted with rocket emoji
All reactions
  • 🚀 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@rytilahti rytilahti added this to the 0.11 milestone Jul 5, 2026
rytilahti
rytilahti approved these changes Jul 5, 2026
View reviewed changes

@rytilahti rytilahti left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks @ZeliardM!

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@rytilahti
rytilahti merged commit 440f1f4 into python-kasa:master Jul 5, 2026
18 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@ZeliardM
ZeliardM deleted the feature/test-clean-up branch July 6, 2026 00:34
@rytilahti rytilahti added the maintenance Project improvements and maintenance label Oct 4, 2026
@rytilahti rytilahti mentioned this pull request Oct 4, 2026
Prepare 0.11.0 #1776
Merged
rytilahti added a commit that referenced this pull request Oct 4, 2026
@rytilahti
Prepare 0.11.0 (#1776)
5b8447c
## [0.11.0](https://github.com/python-kasa/python-kasa/tree/0.11.0)
(2026-10-04)

[Full
Changelog](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](#1551)
- SslAesTransport: handshake again when a camera answers 401 to
passthrough
[\#1771](#1771) (@freeKC)
- Add LastAlertDetection module for smartcam devices
[\#1762](#1762) (@juherr)
- Add KL420 to TPLINK\_KELVIN color temperature ranges
[\#1757](#1757) (@Ikstar)
- Do not authenticate with a credentials\_hash from a different
transport [\#1749](#1749)
(@nopoz)
- Expose the light transition state change flag
[\#1745](#1745) (@nopoz)
- Add strip segment module for configurable light strip length
[\#1744](#1744) (@nopoz)
- Add KL400L5 color temperature range
[\#1719](#1719)
(@loganrosen)
- Update smartcam credential handling and tests
[\#1664](#1664)
(@ZeliardM)
- Add support for V2 Energy Monitoring for S515D
[\#1663](#1663)
(@ZeliardM)
- Add selective room cleaning to vacuum clean module
[\#1660](#1660)
(@epg-pers)
- New Wi-Fi handling for SMARTCAM devices
[\#1639](#1639)
(@ZeliardM)
- Add support for tapo login\_version 3 in sslaestransport
[\#1638](#1638)
(@ZeliardM)
- Add preset support for Tapo cameras
[\#1615](#1615) (@mrwogu)
- Add python 3.14 to supported versions
[\#1599](#1599)
(@rytilahti)
- Add discovery port 20004
[\#1595](#1595)
(@alams154)
- Implement IOT Time Module Failover
[\#1583](#1583)
(@ZeliardM)
- Add bare bones homekit module for iot devices
[\#1566](#1566)
(@ZeliardM)
- Extend smartcam detection support
[\#1552](#1552)
(@gpongelli)

**Fixed bugs:**

- Time module unavailable for waterleak sensor
[\#1613](#1613)
- 'No time zone found with key EST' in debian 13
[\#1579](#1579)
- Discovery: accept cameras that only send the encrypt\_type list
[\#1770](#1770) (@freeKC)
- Classify IOT devices via sysinfo regardless of transport \(fixes
\#1740\) [\#1769](#1769)
(@bluntman001)
- Fall back to UTC for iot time when the device clock is not set
[\#1768](#1768) (@tk1475)
- Add UNKNOWN\_USERNAME \(-60502\) camera error code
[\#1761](#1761) (@juherr)
- Disable multi requests on timeout during multi-request
[\#1759](#1759)
(@KaloyanNaumov)
- Add ECDHE-RSA-AES256 cipher for newer Tapo firmware
[\#1755](#1755)
(@darylldelfin)
- Map iot timezone index 18 to America/New\_York instead of EST
[\#1743](#1743)
(@monteccarlos)
- fix: use KLAP v2 transport for IOT devices with login version 2
[\#1731](#1731) (@bm1549)
- Add ENETUNREACH to non-retryable errors in XorTransport
[\#1668](#1668)
(@wh1t3f1r3)
- Fix mop set\_waterlevel sending setCleanAttr without type field
[\#1667](#1667)
(@davidefiocco)
- Fix SMARTCAM Time module and update tests
[\#1659](#1659)
(@ZeliardM)
- Fix camera login version in CLI
[\#1658](#1658)
(@ZeliardM)
- Allow SSL connections to older devices
[\#1654](#1654) (@kad)
- waterleaksensor: use parent's Time for alert timestamp
[\#1614](#1614)
(@rytilahti)
- Add hold state to thermostatstate
[\#1609](#1609)
(@rytilahti)
- Fix thermostat idle reporting on low battery
[\#1598](#1598)
(@rytilahti)
- Add shutdown \(summer mode\) to thermostatstate
[\#1588](#1588)
(@rytilahti)
- Fix iotstrip child device time handling
[\#1584](#1584)
(@ZeliardM)

**Added support for devices:**

- Add C200 device fixture
[\#1760](#1760) (@juherr)
- Add P125M fixture for firmware 1.4.4
[\#1746](#1746)
(@HarryPehkonen)
- Add fixtures for KH100, KE100 and KE110 and simulate TRV states
[\#1726](#1726) (@Krotu)
- Add L530EA\(EU\) device fixture
[\#1694](#1694)
(@ZeliardM)
- Add C101 test fixture
[\#1673](#1673) (@ijaron)
- Add LB130\(US\) device fixture
[\#1669](#1669)
(@ZeliardM)
- Add KL110B\(UN\) device fixture
[\#1657](#1657)
(@ZeliardM)
- Add TS15\(US\) device fixture
[\#1649](#1649)
(@ZeliardM)
- Add Tapo C460 support
[\#1645](#1645)
(@markvanpraet)
- Add P105\(US\) device fixture
[\#1644](#1644)
(@ZeliardM)
- Add L430C\(EU\) device fixture
[\#1643](#1643)
(@ZeliardM)
- Add L430P\(EU\) device fixture
[\#1607](#1607)
(@LostLuma)
- Add S500\(US\)\_1.0\_1.2.0 fixture
[\#1569](#1569)
(@ZeliardM)
- Add device fixture for P316M\(US\)
[\#1568](#1568)
(@TheLinuxGuy)
- Add L535E\(EU\) 3.0 1.1.8 fixture
[\#1545](#1545)
(@fantandrea)
- Adding KL400L10\(US\)\_1.0\_1.0.10 fixture
[\#1539](#1539) (@mjbohr)
- Add TP10\(IT\) 1.0 1.2.5 fixture
[\#1538](#1538)
(@emanueleg)
- Add LB100\(US\)\_1.0\_1.8.11 fixture file
[\#1515](#1515)
(@ZeliardM)
- Add KS225\(US\)\_1.0\_1.1.1 and L930-5\(EU\)\_1.0\_1.2.5
[\#1509](#1509)
(@ZeliardM)

**Documentation updates:**

- How to hash credentials to make use of --credentials-hash flag?
[\#1517](#1517)
- docs: modernize docstrings across the repository
[\#1682](#1682)
(@ZeliardM)
- Add a note to emeter guide being kasa-only
[\#1512](#1512)
(@rytilahti)

**Project maintenance:**

- tests: add type annotations to top-level test files
[\#1688](#1688)
(@ZeliardM)
- tests: add type annotations to CLI, protocol, and smartcam tests
[\#1687](#1687)
(@ZeliardM)
- tests: add type annotations to Smart tests
[\#1686](#1686)
(@ZeliardM)
- tests: add type annotations to IoT tests
[\#1685](#1685)
(@ZeliardM)
- tests: add type annotations to transport tests
[\#1684](#1684)
(@ZeliardM)
- tests: centralize transport and session cleanup in conftest
[\#1683](#1683)
(@ZeliardM)
- ci: pin all GitHub Actions to SHA hashes and update versions
[\#1681](#1681)
(@ZeliardM)
- tests: fix typos, child device subtype, CLI patch path, and
deprecation test logic
[\#1677](#1677)
(@ZeliardM)
- Update GitHub Workflows and Actions
[\#1622](#1622)
(@ZeliardM)
- Use log-level debug for smartdevice query error reporting
[\#1587](#1587)
(@rytilahti)
- Use Device instead of SmartDevice where feasible
[\#1585](#1585)
(@ZeliardM)

**Closed issues:**

- Python 3.14 Support
[\#1597](#1597)
- HS300 Child State - Time Module Error
[\#1445](#1445)
@rytilahti rytilahti mentioned this pull request Oct 4, 2026
Prepare 0.11.0.1 #1780
Merged
rytilahti added a commit that referenced this pull request Oct 4, 2026
@rytilahti
Prepare 0.11.0.1 (#1780)
ff26187
## [0.11.0.1](https://github.com/python-kasa/python-kasa/tree/0.11.0.1)
(2026-10-04)

[Full
Changelog](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](#1551)
- SslAesTransport: handshake again when a camera answers 401 to
passthrough
[\#1771](#1771) (@freeKC)
- Add LastAlertDetection module for smartcam devices
[\#1762](#1762) (@juherr)
- Add KL420 to TPLINK\_KELVIN color temperature ranges
[\#1757](#1757) (@Ikstar)
- Do not authenticate with a credentials\_hash from a different
transport [\#1749](#1749)
(@nopoz)
- Expose the light transition state change flag
[\#1745](#1745) (@nopoz)
- Add strip segment module for configurable light strip length
[\#1744](#1744) (@nopoz)
- Add KL400L5 color temperature range
[\#1719](#1719)
(@loganrosen)
- Update smartcam credential handling and tests
[\#1664](#1664)
(@ZeliardM)
- Add support for V2 Energy Monitoring for S515D
[\#1663](#1663)
(@ZeliardM)
- Add selective room cleaning to vacuum clean module
[\#1660](#1660)
(@epg-pers)
- New Wi-Fi handling for SMARTCAM devices
[\#1639](#1639)
(@ZeliardM)
- Add support for tapo login\_version 3 in sslaestransport
[\#1638](#1638)
(@ZeliardM)
- Add preset support for Tapo cameras
[\#1615](#1615) (@mrwogu)
- Add python 3.14 to supported versions
[\#1599](#1599)
(@rytilahti)
- Add discovery port 20004
[\#1595](#1595)
(@alams154)
- Implement IOT Time Module Failover
[\#1583](#1583)
(@ZeliardM)
- Add bare bones homekit module for iot devices
[\#1566](#1566)
(@ZeliardM)
- Extend smartcam detection support
[\#1552](#1552)
(@gpongelli)

**Fixed bugs:**

- Time module unavailable for waterleak sensor
[\#1613](#1613)
- 'No time zone found with key EST' in debian 13
[\#1579](#1579)
- Discovery: accept cameras that only send the encrypt\_type list
[\#1770](#1770) (@freeKC)
- Classify IOT devices via sysinfo regardless of transport \(fixes
\#1740\) [\#1769](#1769)
(@bluntman001)
- Fall back to UTC for iot time when the device clock is not set
[\#1768](#1768) (@tk1475)
- Add UNKNOWN\_USERNAME \(-60502\) camera error code
[\#1761](#1761) (@juherr)
- Disable multi requests on timeout during multi-request
[\#1759](#1759)
(@KaloyanNaumov)
- Add ECDHE-RSA-AES256 cipher for newer Tapo firmware
[\#1755](#1755)
(@darylldelfin)
- Map iot timezone index 18 to America/New\_York instead of EST
[\#1743](#1743)
(@monteccarlos)
- fix: use KLAP v2 transport for IOT devices with login version 2
[\#1731](#1731) (@bm1549)
- Add ENETUNREACH to non-retryable errors in XorTransport
[\#1668](#1668)
(@wh1t3f1r3)
- Fix mop set\_waterlevel sending setCleanAttr without type field
[\#1667](#1667)
(@davidefiocco)
- Fix SMARTCAM Time module and update tests
[\#1659](#1659)
(@ZeliardM)
- Fix camera login version in CLI
[\#1658](#1658)
(@ZeliardM)
- Allow SSL connections to older devices
[\#1654](#1654) (@kad)
- waterleaksensor: use parent's Time for alert timestamp
[\#1614](#1614)
(@rytilahti)
- Add hold state to thermostatstate
[\#1609](#1609)
(@rytilahti)
- Fix thermostat idle reporting on low battery
[\#1598](#1598)
(@rytilahti)
- Add shutdown \(summer mode\) to thermostatstate
[\#1588](#1588)
(@rytilahti)
- Fix iotstrip child device time handling
[\#1584](#1584)
(@ZeliardM)

**Added support for devices:**

- Add C200 device fixture
[\#1760](#1760) (@juherr)
- Add P125M fixture for firmware 1.4.4
[\#1746](#1746)
(@HarryPehkonen)
- Add fixtures for KH100, KE100 and KE110 and simulate TRV states
[\#1726](#1726) (@Krotu)
- Add L530EA\(EU\) device fixture
[\#1694](#1694)
(@ZeliardM)
- Add C101 test fixture
[\#1673](#1673) (@ijaron)
- Add LB130\(US\) device fixture
[\#1669](#1669)
(@ZeliardM)
- Add KL110B\(UN\) device fixture
[\#1657](#1657)
(@ZeliardM)
- Add TS15\(US\) device fixture
[\#1649](#1649)
(@ZeliardM)
- Add Tapo C460 support
[\#1645](#1645)
(@markvanpraet)
- Add P105\(US\) device fixture
[\#1644](#1644)
(@ZeliardM)
- Add L430C\(EU\) device fixture
[\#1643](#1643)
(@ZeliardM)
- Add L430P\(EU\) device fixture
[\#1607](#1607)
(@LostLuma)
- Add S500\(US\)\_1.0\_1.2.0 fixture
[\#1569](#1569)
(@ZeliardM)
- Add device fixture for P316M\(US\)
[\#1568](#1568)
(@TheLinuxGuy)
- Add L535E\(EU\) 3.0 1.1.8 fixture
[\#1545](#1545)
(@fantandrea)
- Adding KL400L10\(US\)\_1.0\_1.0.10 fixture
[\#1539](#1539) (@mjbohr)
- Add TP10\(IT\) 1.0 1.2.5 fixture
[\#1538](#1538)
(@emanueleg)
- Add LB100\(US\)\_1.0\_1.8.11 fixture file
[\#1515](#1515)
(@ZeliardM)
- Add KS225\(US\)\_1.0\_1.1.1 and L930-5\(EU\)\_1.0\_1.2.5
[\#1509](#1509)
(@ZeliardM)

**Documentation updates:**

- How to hash credentials to make use of --credentials-hash flag?
[\#1517](#1517)
- docs: modernize docstrings across the repository
[\#1682](#1682)
(@ZeliardM)
- Add a note to emeter guide being kasa-only
[\#1512](#1512)
(@rytilahti)

**Project maintenance:**

- Fix PyPI publishing for packages with metadata 2.5
[\#1779](#1779)
(@rytilahti)
- tests: add type annotations to top-level test files
[\#1688](#1688)
(@ZeliardM)
- tests: add type annotations to CLI, protocol, and smartcam tests
[\#1687](#1687)
(@ZeliardM)
- tests: add type annotations to Smart tests
[\#1686](#1686)
(@ZeliardM)
- tests: add type annotations to IoT tests
[\#1685](#1685)
(@ZeliardM)
- tests: add type annotations to transport tests
[\#1684](#1684)
(@ZeliardM)
- tests: centralize transport and session cleanup in conftest
[\#1683](#1683)
(@ZeliardM)
- ci: pin all GitHub Actions to SHA hashes and update versions
[\#1681](#1681)
(@ZeliardM)
- tests: fix typos, child device subtype, CLI patch path, and
deprecation test logic
[\#1677](#1677)
(@ZeliardM)
- Update GitHub Workflows and Actions
[\#1622](#1622)
(@ZeliardM)
- Use log-level debug for smartdevice query error reporting
[\#1587](#1587)
(@rytilahti)
- Use Device instead of SmartDevice where feasible
[\#1585](#1585)
(@ZeliardM)

**Closed issues:**

- Python 3.14 Support
[\#1597](#1597)
- HS300 Child State - Time Module Error
[\#1445](#1445)
pillarsdotnet pushed a commit to pillarsdotnet/python-kasa that referenced this pull request Oct 22, 2026
@ZeliardM
tests: fix typos, child device subtype, CLI patch path, and deprecati…
f5c2639
…on test logic (python-kasa#1677)
pillarsdotnet pushed a commit to pillarsdotnet/python-kasa that referenced this pull request Oct 30, 2026
@rytilahti
Prepare 0.11.0 (python-kasa#1776)
1189d3e
## [0.11.0](https://github.com/python-kasa/python-kasa/tree/0.11.0)
(2026-10-04)

[Full
Changelog](python-kasa/python-kasa@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
[\python-kasa#1551](python-kasa#1551)
- SslAesTransport: handshake again when a camera answers 401 to
passthrough
[\python-kasa#1771](python-kasa#1771) (@freeKC)
- Add LastAlertDetection module for smartcam devices
[\python-kasa#1762](python-kasa#1762) (@juherr)
- Add KL420 to TPLINK\_KELVIN color temperature ranges
[\python-kasa#1757](python-kasa#1757) (@Ikstar)
- Do not authenticate with a credentials\_hash from a different
transport [\python-kasa#1749](python-kasa#1749)
(@nopoz)
- Expose the light transition state change flag
[\python-kasa#1745](python-kasa#1745) (@nopoz)
- Add strip segment module for configurable light strip length
[\python-kasa#1744](python-kasa#1744) (@nopoz)
- Add KL400L5 color temperature range
[\python-kasa#1719](python-kasa#1719)
(@loganrosen)
- Update smartcam credential handling and tests
[\python-kasa#1664](python-kasa#1664)
(@ZeliardM)
- Add support for V2 Energy Monitoring for S515D
[\python-kasa#1663](python-kasa#1663)
(@ZeliardM)
- Add selective room cleaning to vacuum clean module
[\python-kasa#1660](python-kasa#1660)
(@epg-pers)
- New Wi-Fi handling for SMARTCAM devices
[\python-kasa#1639](python-kasa#1639)
(@ZeliardM)
- Add support for tapo login\_version 3 in sslaestransport
[\python-kasa#1638](python-kasa#1638)
(@ZeliardM)
- Add preset support for Tapo cameras
[\python-kasa#1615](python-kasa#1615) (@mrwogu)
- Add python 3.14 to supported versions
[\python-kasa#1599](python-kasa#1599)
(@rytilahti)
- Add discovery port 20004
[\python-kasa#1595](python-kasa#1595)
(@alams154)
- Implement IOT Time Module Failover
[\python-kasa#1583](python-kasa#1583)
(@ZeliardM)
- Add bare bones homekit module for iot devices
[\python-kasa#1566](python-kasa#1566)
(@ZeliardM)
- Extend smartcam detection support
[\python-kasa#1552](python-kasa#1552)
(@gpongelli)

**Fixed bugs:**

- Time module unavailable for waterleak sensor
[\python-kasa#1613](python-kasa#1613)
- 'No time zone found with key EST' in debian 13
[\python-kasa#1579](python-kasa#1579)
- Discovery: accept cameras that only send the encrypt\_type list
[\python-kasa#1770](python-kasa#1770) (@freeKC)
- Classify IOT devices via sysinfo regardless of transport \(fixes
\python-kasa#1740\) [\python-kasa#1769](python-kasa#1769)
(@bluntman001)
- Fall back to UTC for iot time when the device clock is not set
[\python-kasa#1768](python-kasa#1768) (@tk1475)
- Add UNKNOWN\_USERNAME \(-60502\) camera error code
[\python-kasa#1761](python-kasa#1761) (@juherr)
- Disable multi requests on timeout during multi-request
[\python-kasa#1759](python-kasa#1759)
(@KaloyanNaumov)
- Add ECDHE-RSA-AES256 cipher for newer Tapo firmware
[\python-kasa#1755](python-kasa#1755)
(@darylldelfin)
- Map iot timezone index 18 to America/New\_York instead of EST
[\python-kasa#1743](python-kasa#1743)
(@monteccarlos)
- fix: use KLAP v2 transport for IOT devices with login version 2
[\python-kasa#1731](python-kasa#1731) (@bm1549)
- Add ENETUNREACH to non-retryable errors in XorTransport
[\python-kasa#1668](python-kasa#1668)
(@wh1t3f1r3)
- Fix mop set\_waterlevel sending setCleanAttr without type field
[\python-kasa#1667](python-kasa#1667)
(@davidefiocco)
- Fix SMARTCAM Time module and update tests
[\python-kasa#1659](python-kasa#1659)
(@ZeliardM)
- Fix camera login version in CLI
[\python-kasa#1658](python-kasa#1658)
(@ZeliardM)
- Allow SSL connections to older devices
[\python-kasa#1654](python-kasa#1654) (@kad)
- waterleaksensor: use parent's Time for alert timestamp
[\python-kasa#1614](python-kasa#1614)
(@rytilahti)
- Add hold state to thermostatstate
[\python-kasa#1609](python-kasa#1609)
(@rytilahti)
- Fix thermostat idle reporting on low battery
[\python-kasa#1598](python-kasa#1598)
(@rytilahti)
- Add shutdown \(summer mode\) to thermostatstate
[\python-kasa#1588](python-kasa#1588)
(@rytilahti)
- Fix iotstrip child device time handling
[\python-kasa#1584](python-kasa#1584)
(@ZeliardM)

**Added support for devices:**

- Add C200 device fixture
[\python-kasa#1760](python-kasa#1760) (@juherr)
- Add P125M fixture for firmware 1.4.4
[\python-kasa#1746](python-kasa#1746)
(@HarryPehkonen)
- Add fixtures for KH100, KE100 and KE110 and simulate TRV states
[\python-kasa#1726](python-kasa#1726) (@Krotu)
- Add L530EA\(EU\) device fixture
[\python-kasa#1694](python-kasa#1694)
(@ZeliardM)
- Add C101 test fixture
[\python-kasa#1673](python-kasa#1673) (@ijaron)
- Add LB130\(US\) device fixture
[\python-kasa#1669](python-kasa#1669)
(@ZeliardM)
- Add KL110B\(UN\) device fixture
[\python-kasa#1657](python-kasa#1657)
(@ZeliardM)
- Add TS15\(US\) device fixture
[\python-kasa#1649](python-kasa#1649)
(@ZeliardM)
- Add Tapo C460 support
[\python-kasa#1645](python-kasa#1645)
(@markvanpraet)
- Add P105\(US\) device fixture
[\python-kasa#1644](python-kasa#1644)
(@ZeliardM)
- Add L430C\(EU\) device fixture
[\python-kasa#1643](python-kasa#1643)
(@ZeliardM)
- Add L430P\(EU\) device fixture
[\python-kasa#1607](python-kasa#1607)
(@LostLuma)
- Add S500\(US\)\_1.0\_1.2.0 fixture
[\python-kasa#1569](python-kasa#1569)
(@ZeliardM)
- Add device fixture for P316M\(US\)
[\python-kasa#1568](python-kasa#1568)
(@TheLinuxGuy)
- Add L535E\(EU\) 3.0 1.1.8 fixture
[\python-kasa#1545](python-kasa#1545)
(@fantandrea)
- Adding KL400L10\(US\)\_1.0\_1.0.10 fixture
[\python-kasa#1539](python-kasa#1539) (@mjbohr)
- Add TP10\(IT\) 1.0 1.2.5 fixture
[\python-kasa#1538](python-kasa#1538)
(@emanueleg)
- Add LB100\(US\)\_1.0\_1.8.11 fixture file
[\python-kasa#1515](python-kasa#1515)
(@ZeliardM)
- Add KS225\(US\)\_1.0\_1.1.1 and L930-5\(EU\)\_1.0\_1.2.5
[\python-kasa#1509](python-kasa#1509)
(@ZeliardM)

**Documentation updates:**

- How to hash credentials to make use of --credentials-hash flag?
[\python-kasa#1517](python-kasa#1517)
- docs: modernize docstrings across the repository
[\python-kasa#1682](python-kasa#1682)
(@ZeliardM)
- Add a note to emeter guide being kasa-only
[\python-kasa#1512](python-kasa#1512)
(@rytilahti)

**Project maintenance:**

- tests: add type annotations to top-level test files
[\python-kasa#1688](python-kasa#1688)
(@ZeliardM)
- tests: add type annotations to CLI, protocol, and smartcam tests
[\python-kasa#1687](python-kasa#1687)
(@ZeliardM)
- tests: add type annotations to Smart tests
[\python-kasa#1686](python-kasa#1686)
(@ZeliardM)
- tests: add type annotations to IoT tests
[\python-kasa#1685](python-kasa#1685)
(@ZeliardM)
- tests: add type annotations to transport tests
[\python-kasa#1684](python-kasa#1684)
(@ZeliardM)
- tests: centralize transport and session cleanup in conftest
[\python-kasa#1683](python-kasa#1683)
(@ZeliardM)
- ci: pin all GitHub Actions to SHA hashes and update versions
[\python-kasa#1681](python-kasa#1681)
(@ZeliardM)
- tests: fix typos, child device subtype, CLI patch path, and
deprecation test logic
[\python-kasa#1677](python-kasa#1677)
(@ZeliardM)
- Update GitHub Workflows and Actions
[\python-kasa#1622](python-kasa#1622)
(@ZeliardM)
- Use log-level debug for smartdevice query error reporting
[\python-kasa#1587](python-kasa#1587)
(@rytilahti)
- Use Device instead of SmartDevice where feasible
[\python-kasa#1585](python-kasa#1585)
(@ZeliardM)

**Closed issues:**

- Python 3.14 Support
[\python-kasa#1597](python-kasa#1597)
- HS300 Child State - Time Module Error
[\python-kasa#1445](python-kasa#1445)
pillarsdotnet pushed a commit to pillarsdotnet/python-kasa that referenced this pull request Oct 30, 2026
@rytilahti
Prepare 0.11.0.1 (python-kasa#1780)
577b3f7
## [0.11.0.1](https://github.com/python-kasa/python-kasa/tree/0.11.0.1)
(2026-10-04)

[Full
Changelog](python-kasa/python-kasa@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
[\python-kasa#1551](python-kasa#1551)
- SslAesTransport: handshake again when a camera answers 401 to
passthrough
[\python-kasa#1771](python-kasa#1771) (@freeKC)
- Add LastAlertDetection module for smartcam devices
[\python-kasa#1762](python-kasa#1762) (@juherr)
- Add KL420 to TPLINK\_KELVIN color temperature ranges
[\python-kasa#1757](python-kasa#1757) (@Ikstar)
- Do not authenticate with a credentials\_hash from a different
transport [\python-kasa#1749](python-kasa#1749)
(@nopoz)
- Expose the light transition state change flag
[\python-kasa#1745](python-kasa#1745) (@nopoz)
- Add strip segment module for configurable light strip length
[\python-kasa#1744](python-kasa#1744) (@nopoz)
- Add KL400L5 color temperature range
[\python-kasa#1719](python-kasa#1719)
(@loganrosen)
- Update smartcam credential handling and tests
[\python-kasa#1664](python-kasa#1664)
(@ZeliardM)
- Add support for V2 Energy Monitoring for S515D
[\python-kasa#1663](python-kasa#1663)
(@ZeliardM)
- Add selective room cleaning to vacuum clean module
[\python-kasa#1660](python-kasa#1660)
(@epg-pers)
- New Wi-Fi handling for SMARTCAM devices
[\python-kasa#1639](python-kasa#1639)
(@ZeliardM)
- Add support for tapo login\_version 3 in sslaestransport
[\python-kasa#1638](python-kasa#1638)
(@ZeliardM)
- Add preset support for Tapo cameras
[\python-kasa#1615](python-kasa#1615) (@mrwogu)
- Add python 3.14 to supported versions
[\python-kasa#1599](python-kasa#1599)
(@rytilahti)
- Add discovery port 20004
[\python-kasa#1595](python-kasa#1595)
(@alams154)
- Implement IOT Time Module Failover
[\python-kasa#1583](python-kasa#1583)
(@ZeliardM)
- Add bare bones homekit module for iot devices
[\python-kasa#1566](python-kasa#1566)
(@ZeliardM)
- Extend smartcam detection support
[\python-kasa#1552](python-kasa#1552)
(@gpongelli)

**Fixed bugs:**

- Time module unavailable for waterleak sensor
[\python-kasa#1613](python-kasa#1613)
- 'No time zone found with key EST' in debian 13
[\python-kasa#1579](python-kasa#1579)
- Discovery: accept cameras that only send the encrypt\_type list
[\python-kasa#1770](python-kasa#1770) (@freeKC)
- Classify IOT devices via sysinfo regardless of transport \(fixes
\python-kasa#1740\) [\python-kasa#1769](python-kasa#1769)
(@bluntman001)
- Fall back to UTC for iot time when the device clock is not set
[\python-kasa#1768](python-kasa#1768) (@tk1475)
- Add UNKNOWN\_USERNAME \(-60502\) camera error code
[\python-kasa#1761](python-kasa#1761) (@juherr)
- Disable multi requests on timeout during multi-request
[\python-kasa#1759](python-kasa#1759)
(@KaloyanNaumov)
- Add ECDHE-RSA-AES256 cipher for newer Tapo firmware
[\python-kasa#1755](python-kasa#1755)
(@darylldelfin)
- Map iot timezone index 18 to America/New\_York instead of EST
[\python-kasa#1743](python-kasa#1743)
(@monteccarlos)
- fix: use KLAP v2 transport for IOT devices with login version 2
[\python-kasa#1731](python-kasa#1731) (@bm1549)
- Add ENETUNREACH to non-retryable errors in XorTransport
[\python-kasa#1668](python-kasa#1668)
(@wh1t3f1r3)
- Fix mop set\_waterlevel sending setCleanAttr without type field
[\python-kasa#1667](python-kasa#1667)
(@davidefiocco)
- Fix SMARTCAM Time module and update tests
[\python-kasa#1659](python-kasa#1659)
(@ZeliardM)
- Fix camera login version in CLI
[\python-kasa#1658](python-kasa#1658)
(@ZeliardM)
- Allow SSL connections to older devices
[\python-kasa#1654](python-kasa#1654) (@kad)
- waterleaksensor: use parent's Time for alert timestamp
[\python-kasa#1614](python-kasa#1614)
(@rytilahti)
- Add hold state to thermostatstate
[\python-kasa#1609](python-kasa#1609)
(@rytilahti)
- Fix thermostat idle reporting on low battery
[\python-kasa#1598](python-kasa#1598)
(@rytilahti)
- Add shutdown \(summer mode\) to thermostatstate
[\python-kasa#1588](python-kasa#1588)
(@rytilahti)
- Fix iotstrip child device time handling
[\python-kasa#1584](python-kasa#1584)
(@ZeliardM)

**Added support for devices:**

- Add C200 device fixture
[\python-kasa#1760](python-kasa#1760) (@juherr)
- Add P125M fixture for firmware 1.4.4
[\python-kasa#1746](python-kasa#1746)
(@HarryPehkonen)
- Add fixtures for KH100, KE100 and KE110 and simulate TRV states
[\python-kasa#1726](python-kasa#1726) (@Krotu)
- Add L530EA\(EU\) device fixture
[\python-kasa#1694](python-kasa#1694)
(@ZeliardM)
- Add C101 test fixture
[\python-kasa#1673](python-kasa#1673) (@ijaron)
- Add LB130\(US\) device fixture
[\python-kasa#1669](python-kasa#1669)
(@ZeliardM)
- Add KL110B\(UN\) device fixture
[\python-kasa#1657](python-kasa#1657)
(@ZeliardM)
- Add TS15\(US\) device fixture
[\python-kasa#1649](python-kasa#1649)
(@ZeliardM)
- Add Tapo C460 support
[\python-kasa#1645](python-kasa#1645)
(@markvanpraet)
- Add P105\(US\) device fixture
[\python-kasa#1644](python-kasa#1644)
(@ZeliardM)
- Add L430C\(EU\) device fixture
[\python-kasa#1643](python-kasa#1643)
(@ZeliardM)
- Add L430P\(EU\) device fixture
[\python-kasa#1607](python-kasa#1607)
(@LostLuma)
- Add S500\(US\)\_1.0\_1.2.0 fixture
[\python-kasa#1569](python-kasa#1569)
(@ZeliardM)
- Add device fixture for P316M\(US\)
[\python-kasa#1568](python-kasa#1568)
(@TheLinuxGuy)
- Add L535E\(EU\) 3.0 1.1.8 fixture
[\python-kasa#1545](python-kasa#1545)
(@fantandrea)
- Adding KL400L10\(US\)\_1.0\_1.0.10 fixture
[\python-kasa#1539](python-kasa#1539) (@mjbohr)
- Add TP10\(IT\) 1.0 1.2.5 fixture
[\python-kasa#1538](python-kasa#1538)
(@emanueleg)
- Add LB100\(US\)\_1.0\_1.8.11 fixture file
[\python-kasa#1515](python-kasa#1515)
(@ZeliardM)
- Add KS225\(US\)\_1.0\_1.1.1 and L930-5\(EU\)\_1.0\_1.2.5
[\python-kasa#1509](python-kasa#1509)
(@ZeliardM)

**Documentation updates:**

- How to hash credentials to make use of --credentials-hash flag?
[\python-kasa#1517](python-kasa#1517)
- docs: modernize docstrings across the repository
[\python-kasa#1682](python-kasa#1682)
(@ZeliardM)
- Add a note to emeter guide being kasa-only
[\python-kasa#1512](python-kasa#1512)
(@rytilahti)

**Project maintenance:**

- Fix PyPI publishing for packages with metadata 2.5
[\python-kasa#1779](python-kasa#1779)
(@rytilahti)
- tests: add type annotations to top-level test files
[\python-kasa#1688](python-kasa#1688)
(@ZeliardM)
- tests: add type annotations to CLI, protocol, and smartcam tests
[\python-kasa#1687](python-kasa#1687)
(@ZeliardM)
- tests: add type annotations to Smart tests
[\python-kasa#1686](python-kasa#1686)
(@ZeliardM)
- tests: add type annotations to IoT tests
[\python-kasa#1685](python-kasa#1685)
(@ZeliardM)
- tests: add type annotations to transport tests
[\python-kasa#1684](python-kasa#1684)
(@ZeliardM)
- tests: centralize transport and session cleanup in conftest
[\python-kasa#1683](python-kasa#1683)
(@ZeliardM)
- ci: pin all GitHub Actions to SHA hashes and update versions
[\python-kasa#1681](python-kasa#1681)
(@ZeliardM)
- tests: fix typos, child device subtype, CLI patch path, and
deprecation test logic
[\python-kasa#1677](python-kasa#1677)
(@ZeliardM)
- Update GitHub Workflows and Actions
[\python-kasa#1622](python-kasa#1622)
(@ZeliardM)
- Use log-level debug for smartdevice query error reporting
[\python-kasa#1587](python-kasa#1587)
(@rytilahti)
- Use Device instead of SmartDevice where feasible
[\python-kasa#1585](python-kasa#1585)
(@ZeliardM)

**Closed issues:**

- Python 3.14 Support
[\python-kasa#1597](python-kasa#1597)
- HS300 Child State - Time Module Error
[\python-kasa#1445](python-kasa#1445)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

Copilot code review Copilot
Copilot review effort
Applies to this pull request for everyone.Learn more about Copilot code review.
Copilot left review comments
@rytilahti rytilahti rytilahti approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

maintenance Project improvements and maintenance

Projects

None yet

Milestone

0.11

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

3 participants

@ZeliardM @rytilahti
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.