FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Add UNKNOWN_USERNAME (-60502) camera error code by juherr · Pull Request #1761 · python-kasa/python-kasa · GitHub

Repository navigation

Add UNKNOWN_USERNAME (-60502) camera error code - #1761

Merged
rytilahti merged 2 commits into
python-kasa:masterfrom
juherr:juherr/add-unknown-username-error-code
Sep 18, 2026
Merged

rytilahti merged 2 commits into
python-kasa:masterfrom
juherr:juherr/add-unknown-username-error-code

Conversation

juherr commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

Symptom

On secure-login Tapo cameras and hubs, every connection logs:

WARNING kasa.transports.sslaestransport Device <host> received unknown error code: -60502

The device answers handshake1 with {"error_code": -40401, "result": {"data": {"code": -60502, ...}}} when the username sent is not the one accepted for secure login (e.g. the cloud email on a Tapo C200 HW 1.0 / FW 1.3.17). SslAesTransport already handles this correctly by falling back to the default admin username, which then succeeds — but because -60502 is not a SmartErrorCode member, _get_response_inner_error() logs the warning on a perfectly normal flow.

Evidence

Changes

  • kasa/exceptions.py: add UNKNOWN_USERNAME = -60502 to the camera error codes, right after BAD_USERNAME = -40411, with the same "determined from testing" caveat. It is not added to SMART_RETRYABLE_ERRORS nor SMART_AUTHENTICATION_ERRORS, and the existing comparisons in perform_handshake1 are untouched — this is naming only, no behaviour change in the authentication flow.
  • tests/transports/test_sslaestransport.py: BAD_USER_RESP now carries the encrypt_type / key / nonce fields seen on the C200 so the handshake actually goes through _get_response_inner_error() (without them the transport short-circuits before the warning), plus a regression test asserting that a handshake with an unaccepted username no longer logs received unknown error code and that SmartErrorCode.from_int(-60502) is SmartErrorCode.UNKNOWN_USERNAME.

Notes

  • There is no official source for this code (neither TP-Link nor pytapo document it), so the name is a proposal based on the observed behaviour — happy to rename if someone has a better reading of it.
  • Possible follow-up, deliberately not in this PR: when -60502 is received the md5 "less secure login" POST that follows is always rejected, so it could be skipped to save one round-trip per connection.

Secure-login Tapo cameras and hubs (observed on a C200 HW 1.0 / FW 1.3.17,
and in the H200/H500 logs of python-kasa#1149, python-kasa#1341, python-kasa#1578 and python-kasa#1647) answer
handshake1 with inner code -60502 when the supplied username is not the one
accepted for secure login. The transport already handles this by falling
back to the default username, but since the code was unknown to
SmartErrorCode a "received unknown error code: -60502" warning was logged
on every connection.

The code is not documented by TP-Link nor by pytapo; the name is derived
from testing, like BAD_USERNAME (-40411). The existing
MockSslAesDevice.BAD_USER_RESP already returned -60502 and is extended to
carry the encrypt_type/key/nonce fields seen on the C200 so the new test
exercises the code path that emitted the warning.

No change to the authentication flow.

codecov Bot commented Sep 15, 2026 •
edited
Loading

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 93.29%. Comparing base (a29d061) to head (ff352c8).
⚠️ Report is 4 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #1761   +/-   ##
=======================================
  Coverage   93.29%   93.29%           
=======================================
  Files         157      157           
  Lines        9932     9933    +1     
  Branches     1022     1022           
=======================================
+ Hits         9266     9267    +1     
  Misses        471      471           
  Partials      195      195           

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

rytilahti left a comment •
edited
Loading

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

LGTM, thanks @juherr! Please avoid unnecessary details in docstrings, check my inline comments. Could you also add a test for the piece that causes the missing coverage through this PR?

Comment on lines +347 to +349

The transport falls back to the default username; the code must be known
so that no 'unknown error code' warning is logged on every connection.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality
Suggested change
The transport falls back to the default username; the code must be known
so that no 'unknown error code' warning is logged on every connection.

Unnecessary.

Comment on lines +488 to +490
# Response observed on secure-login devices (C200, H200) when the username
# is not the one accepted for secure login. The -60502 inner code is not
# documented, the transport falls back to the default username on it.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality
Suggested change
# Response observed on secure-login devices (C200, H200) when the username
# is not the one accepted for secure login. The -60502 inner code is not
# documented, the transport falls back to the default username on it.
# Response observed on secure-login devices (C200, H200) when the username
# is not the one accepted for secure login.

I would also shorten this.

rytilahti left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Fix the issue with code coverage and those comments, then this is ready to go.

Shorten the test docstring and the mock comment as requested, and add a
test sending an unknown inner error code so the warning branch of
_get_response_inner_error() stays covered now that -60502 is known.

juherr commented Sep 18, 2026

Copy link
Copy Markdown
Contributor Author

done

rytilahti added the bug Something isn't working label Sep 18, 2026

rytilahti left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Great, thanks again @juherr!

rytilahti merged commit 454e269 into python-kasa:master Sep 18, 2026
22 checks passed
juherr deleted the juherr/add-unknown-username-error-code branch September 18, 2026 16:09
rytilahti mentioned this pull request Oct 4, 2026
rytilahti added a commit that referenced this pull request Oct 4, 2026
## [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 mentioned this pull request Oct 4, 2026
rytilahti added a commit that referenced this pull request Oct 4, 2026
## [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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants


Back | FazBrowse Home | New Git URL