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 — New Wi-Fi handling for SMARTCAM devices by ZeliardM · Pull Request #1639 · python-kasa/python-kasa

Conversation

@ZeliardM

@ZeliardM ZeliardM commented Jan 10, 2026 •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown
Collaborator

Updated scanning and joining Wi-Fi for SMARTCAM devices that may use a newer connection process.

Sorry, something went wrong.

Uh oh!

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

All reactions
@ZeliardM
New wifi handling for smart devices
c06c965
Copilot AI review requested due to automatic review settings January 10, 2026 01:15
Copilot started reviewing on behalf of ZeliardM January 10, 2026 01:15
View session
@ZeliardM ZeliardM mentioned this pull request Jan 10, 2026
Out of box Tapo TC40: discovery not working, authentication failure on wifi setup #1628
Closed
@codecov

codecov Bot commented Jan 10, 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 92.98%. Comparing base (494db73) to head (4ff99bf).
⚠️ Report is 8 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1639      +/-   ##
==========================================
+ Coverage   92.86%   92.98%   +0.12%     
==========================================
  Files         157      157              
  Lines        9695     9750      +55     
  Branches      985      992       +7     
==========================================
+ Hits         9003     9066      +63     
+ Misses        492      484       -8     
  Partials      200      200              

☔ View full report in Codecov by Sentry.
📢 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.

Copilot AI reviewed Jan 10, 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 pull request adds support for a newer Wi-Fi connection process for SMART devices, including support for WPA3 and RSA-encrypted passwords. The changes introduce a fallback mechanism where devices first attempt to use the legacy get_wireless_scan_info API, and if that fails, fall back to the newer scanApList API with enhanced security features.

Key Changes

  • Added dual-path Wi-Fi scanning with automatic fallback between get_wireless_scan_info and scanApList APIs
  • Implemented RSA public key encryption for Wi-Fi passwords in the newer connection flow
  • Extended the WifiNetwork dataclass to support additional fields (auth, encryption) used by newer SMART devices

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 9 comments.

File Description
kasa/device.py Extended WifiNetwork dataclass with optional auth and encryption fields for newer SMART device APIs
kasa/smart/smartdevice.py Implemented dual-path Wi-Fi scanning and joining with RSA encryption support for newer devices, added instance variables for WPA3 support and public key tracking

💡 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 kasa/smart/smartdevice.py Resolved

Uh oh!

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

Comment thread kasa/smart/smartdevice.py Resolved

Uh oh!

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

Comment thread kasa/smart/smartdevice.py Resolved

Uh oh!

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

Comment thread kasa/smart/smartdevice.py Resolved

Uh oh!

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

Comment thread kasa/smart/smartdevice.py Resolved

Uh oh!

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

Comment thread kasa/smart/smartdevice.py Resolved

Uh oh!

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

Comment thread kasa/smart/smartdevice.py Resolved

Uh oh!

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

Comment thread kasa/smart/smartdevice.py Resolved

Uh oh!

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

Comment thread kasa/smart/smartdevice.py Resolved

Uh oh!

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

ZeliardM added 6 commits January 10, 2026 11:29
@ZeliardM
Scan, Join, and Test fixes for new Wi-Fi
b6e9238
@ZeliardM
Fix new scan handling
8d92d0b
@ZeliardM
Add debug logging
7f3bd97
@ZeliardM
Payload format changes
3b06ede
@ZeliardM
Force connectAp as single request
d8b2550
@ZeliardM
Update test coverage
c9e4cf3
rytilahti
rytilahti requested changes Jan 26, 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.

Hey @ZeliardM and happy belated new year! Sorry for not getting back to you earlier, I added some comments to this PR and will try to review the rest of your open ones in a timely manner.

For this PR, I would suggest that we split the wifi handling into its own module to avoid overloading the base class with many implementation details. See my comments inline, and let me know what you think!

Sorry, something went wrong.

Uh oh!

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

All reactions
Comment thread kasa/smart/smartdevice.py Resolved

Uh oh!

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

Comment thread kasa/smart/smartdevice.py Resolved

Uh oh!

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

Comment thread kasa/smart/smartdevice.py Resolved

Uh oh!

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

Comment thread kasa/smart/smartdevice.py Resolved

Uh oh!

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

Comment thread kasa/smart/smartdevice.py Resolved

Uh oh!

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

Comment thread kasa/smart/smartdevice.py Resolved

Uh oh!

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

@rytilahti rytilahti added the enhancement New feature or request label Jan 26, 2026
@ZeliardM

ZeliardM commented Jan 26, 2026

Copy link
Copy Markdown
Collaborator Author

@rytilahti I was actually thinking since this is pertaining to the SmartCamDevice, I just create wifi_scan and wifi_join in the smartcamdevice.py files instead. I didn't realize the smartcamdevice.py used the same wifi_scan and wifi_join as the smartdevice.py and didn't have their own functions. Thoughts? It would change how I have this setup and make it cleaner since the new functions would be in there without the back and forth in the smartdevice.py

All reactions

Sorry, something went wrong.

Uh oh!

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

@rytilahti

rytilahti commented Jan 26, 2026

Copy link
Copy Markdown
Member

I was actually thinking since this is pertaining to the SmartCamDevice, I just create wifi_scan and wifi_join in the smartcamdevice.py files instead. I didn't realize the smartcamdevice.py used the same wifi_scan and wifi_join as the smartdevice.py and didn't have their own functions. Thoughts? It would change how I have this setup and make it cleaner since the new functions would be in there without the back and forth in the smartdevice.py

Ah, it probabbly makes sense to move them there if that's the case, but I think we could still proceed to clean up the implementation and reuse the interfaces wherever it makes sense. Some parts of the scanning (fallbacks to other methods) will probably need some thought to see how it fits the best API-wise.

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 Jan 26, 2026

Copy link
Copy Markdown
Collaborator Author

I'll update everything after a bit and let you know when to take another look. I think the original implementation in the smartdevice.py was fine for those devices, we just need to add the functions to the smartcamdevice.py and have it use those instead of the ones in the smartdevice.py...will let you know.

All reactions

Sorry, something went wrong.

Uh oh!

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

ZeliardM and others added 10 commits January 26, 2026 17:16
@ZeliardM
Merge branch 'python-kasa:master' into feature/device-wifi-scan
47fb39f
@ZeliardM
Revert "Update test coverage"
e620066
This reverts commit c9e4cf3.
@ZeliardM
Revert "Force connectAp as single request"
43fcf86
This reverts commit d8b2550.
@ZeliardM
Revert "Payload format changes"
740bfbe
This reverts commit 3b06ede.
@ZeliardM
Revert "Add debug logging"
3a5cbec
This reverts commit 7f3bd97.
@ZeliardM
Revert "Fix new scan handling"
b7b09b7
This reverts commit 8d92d0b.
@ZeliardM
Revert "Scan, Join, and Test fixes for new Wi-Fi"
eb5cfad
This reverts commit b6e9238.
@ZeliardM
Revert "New wifi handling for smart devices"
64117af
This reverts commit c06c965.
@ZeliardM
Revert smartdevice.py changes and implement into smartcamdevice.py
1d426c4
@ZeliardM
Update test coverage
9a9af6a
@ZeliardM
ZeliardM requested a review from rytilahti January 27, 2026 00:13
ZeliardM added 2 commits January 27, 2026 07:49
@ZeliardM
Remove channel from wifi_scan
1d312cd
@ZeliardM
Fix wifi --help and make --keytype optional
1acec12
ZeliardM added 2 commits January 27, 2026 15:02
@ZeliardM
Fix default keytype and require for none smartcam devices
c95a5c2
@ZeliardM
Fix fixture handling for tests
0da9c38
@ZeliardM

ZeliardM commented Jan 27, 2026 •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown
Collaborator Author

@rytilahti I made the following changes:

  • Moved the new WiFi handling to the smartcamedevice.py and reverted all of the complex changes to the smartdevice.py. This allowed for simpler, cleaner WiFi handling in the smartcamdevice.py all around and was easier to work with.
  • Modified the wifi CLI to make the keytype optional for the smartcamdevice.py since keytype is not handled in the new wifi join.
  • Improved the wifi join by implementing a scan at the beginning of the join and pulling the required information from the scan without having to manually input all of it from the CLI. We could make a similar change to the other WiFi handlers in iotdevice.py and smartdevice.py and get rid of the keytype CLI argument completely. That would be up to you and done in another PR.
  • Updated all the test coverage correctly to handle the wifi changes.
All reactions

Sorry, something went wrong.

Uh oh!

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

@paravoid

paravoid commented Feb 16, 2026

Copy link
Copy Markdown

This worked for me and was in fact the only way to configure a new, out-of-the-box camera . +1 :)

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 changed the title New Wi-Fi handling for SMART devices New Wi-Fi handling for SMARTCAM devices Feb 16, 2026
rytilahti
rytilahti approved these changes Feb 21, 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.

Just a very minor nit on the cli interface, please take a look. After that this is good to go, thanks @ZeliardM!

Sorry, something went wrong.

Uh oh!

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

All reactions
Comment thread kasa/cli/wifi.py Resolved

Uh oh!

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

ZeliardM and others added 4 commits February 21, 2026 17:13
@ZeliardM
Change keytype handling
3d1c7db
@ZeliardM
Fix merge conflicts
84c359d
@ZeliardM
Merge branch 'python-kasa:master' into feature/device-wifi-scan
0314865
@ZeliardM
Fix test coverage
4ff99bf
@ZeliardM

ZeliardM commented Feb 21, 2026

Copy link
Copy Markdown
Collaborator Author

@rytilahti if you're good with the changes here, this is good to go.

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 merged commit 30a8fd4 into python-kasa:master Feb 21, 2026
18 checks passed

Uh oh!

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

@ZeliardM
ZeliardM deleted the feature/device-wifi-scan branch February 21, 2026 23:16
@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
New Wi-Fi handling for SMARTCAM devices (python-kasa#1639)
455d29c
Updated scanning and joining Wi-Fi for SMARTCAM devices that may use a
newer connection process.
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

enhancement New feature or request

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

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

4 participants

@ZeliardM @rytilahti @paravoid
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.