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 — Add support for pairing devices with hubs by rytilahti · Pull Request #859 · python-kasa/python-kasa

Conversation

@rytilahti

@rytilahti rytilahti commented Apr 23, 2024 •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown
Member

This implements "child_quick_setup" that allows pairing and unpairing devices with a hub.
Three new cli commands are added to make the process smooth:

  • kasa hub list lists current children and their device ids
  • kasa hub pair searches for unpaired devices and performs pairing after something is discovered. The search ends immediately after finding the first device that can be paired.
  • kasa hub unpair <device_id> allows unpairing an existing device.
  • kasa hub supported to list supported device categories.

Sorry, something went wrong.

Uh oh!

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

All reactions
@rytilahti rytilahti added the enhancement New feature or request label Apr 23, 2024
@codecov

codecov Bot commented Apr 23, 2024 •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown

Codecov Report

Attention: Patch coverage is 78.49462% with 20 lines in your changes missing coverage. Please review.

Project coverage is 92.47%. Comparing base (980f6a3) to head (c5c09e2).
Report is 43 commits behind head on master.

Files with missing lines Patch % Lines
kasa/cli/hub.py 66.66% 12 Missing and 5 partials ⚠️
kasa/smart/modules/childsetup.py 91.89% 2 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #859      +/-   ##
==========================================
- Coverage   92.60%   92.47%   -0.14%     
==========================================
  Files         139      142       +3     
  Lines        8760     8874     +114     
  Branches      889      899      +10     
==========================================
+ Hits         8112     8206      +94     
- Misses        473      487      +14     
- Partials      175      181       +6     

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

@rytilahti
rytilahti force-pushed the feat/hub_pairing branch from b6d5eb1 to c669835 Compare April 24, 2024 16:57
@rytilahti

rytilahti commented May 2, 2024

Copy link
Copy Markdown
Member Author

Just to avoid forgetting about it, pairing/removing a device will require us to perform the initial update again in the main device to initialize the newly added devices. Currently the subsequent updates will receive a new device, but the children is not updated accordingly.

For homeassistant UX, we will also need a way to re-trigger platform initialization for the new device.

All reactions

Sorry, something went wrong.

Uh oh!

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

@rytilahti
rytilahti force-pushed the feat/hub_pairing branch from c669835 to 7f302aa Compare May 4, 2024 13:35
@rytilahti
rytilahti force-pushed the feat/hub_pairing branch from 7f302aa to 803e88d Compare June 15, 2024 00:44
rytilahti
rytilahti commented Jun 15, 2024
View reviewed changes
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/tests/test_feature.py Resolved

Uh oh!

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

@rytilahti
rytilahti requested a review from sdb9696 June 15, 2024 00:54
@rytilahti

rytilahti commented Jun 15, 2024

Copy link
Copy Markdown
Member Author

We will probably want to disable pairing on home assistant until we have a plan how to work with additions and removals on the fly, but it would be nice to get this PR in nevertheless.

All reactions

Sorry, something went wrong.

Uh oh!

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

sdb9696
sdb9696 requested changes Jun 17, 2024
View reviewed changes

@sdb9696 sdb9696 left a comment

Copy link
Copy Markdown
Contributor

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.

I updated the PR to master and to use the error cli command. Some comments here on the renegotiation which feels like it's clearing a bit too much just to pickup new children. I think the module could call dev.update with a new kwarg to keep things simple.

Sorry, something went wrong.

Uh oh!

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

All reactions
Comment thread kasa/smart/modules/childsetup.py Outdated
Comment on lines +50 to +44
async def pair(self, *, timeout=10):
"""Scan for new devices and pair after discovering first new device."""

@sdb9696 sdb9696 Jun 17, 2024

Copy link
Copy Markdown
Contributor

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.

It seems like this function is non-deterministic as to whether it will pair one or more devices depending on how many are discovered during the 0.5 sleep? Maybe there should be two features pair_all and pair_next with pair all waiting the full timeout?

Also what happens if you keep scanning instead of breaking? Do you keep getting more devices and child_device_list contains an increasing number or does it exclude previously returned devices?

Sorry, something went wrong.

Uh oh!

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

All reactions

@rytilahti rytilahti Jan 15, 2025

Copy link
Copy Markdown
Member Author

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.

I can give this one a try with multiple devices in the pairing mode. I'd guess we would receive a list of them, but who knows.

On pair_all vs. pair_next, I'm not sure if we really want to make this more complex than necessary. If someone sets several devices into a pairing mode and only one is picked, they are feel free to retry again.

Or do we want to provide a way to select which devices to pair? If so, maybe we need to think a bit more about this :-)

Sorry, something went wrong.

Uh oh!

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

All reactions
Comment thread kasa/smart/modules/childsetup.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/tests/fakeprotocol_smart.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/tests/test_feature.py Resolved

Uh oh!

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

@rytilahti rytilahti mentioned this pull request Aug 31, 2024
Kasa thermostat no longer works with Kasa Hub KE100? home-assistant/core#124951
Closed
@sdb9696 sdb9696 added the no-stale label Sep 27, 2024
rytilahti
rytilahti commented Jan 15, 2025
View reviewed changes
Comment thread kasa/smart/smartdevice.py Resolved

Uh oh!

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

Comment thread kasa/smart/modules/childsetup.py Resolved

Uh oh!

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

Comment thread kasa/tests/test_feature.py Resolved

Uh oh!

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

Comment thread kasa/smart/modules/childsetup.py Outdated
Comment on lines +50 to +44
async def pair(self, *, timeout=10):
"""Scan for new devices and pair after discovering first new device."""

@rytilahti rytilahti Jan 15, 2025

Copy link
Copy Markdown
Member Author

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.

I can give this one a try with multiple devices in the pairing mode. I'd guess we would receive a list of them, but who knows.

On pair_all vs. pair_next, I'm not sure if we really want to make this more complex than necessary. If someone sets several devices into a pairing mode and only one is picked, they are feel free to retry again.

Or do we want to provide a way to select which devices to pair? If so, maybe we need to think a bit more about this :-)

Sorry, something went wrong.

Uh oh!

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

All reactions
Comment thread kasa/cli.py Resolved

Uh oh!

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

rytilahti added 4 commits January 16, 2025 12:32
@rytilahti
Add support for pairing devices
07857af
@rytilahti
Add 'Pair' action
1f240a3
@rytilahti
Add tests and refactor
d8b067f
@rytilahti
Rebase on top of current master
017271e
@rytilahti
rytilahti force-pushed the feat/hub_pairing branch from 2cbe305 to 017271e Compare January 16, 2025 11:46
rytilahti added 3 commits January 16, 2025 13:01
@rytilahti
Re-add fakeprotocol implementations and fix tests
ebbfa32
@rytilahti
Simplify pairing process, support pairing multiple devices at once, a…
18e8a2c
…llow listing supported categories
@rytilahti
Add get_scan_child_device_list with two detected devices to h100 fixture
300639c
sdb9696
sdb9696 requested changes Jan 17, 2025
View reviewed changes

@sdb9696 sdb9696 left a comment

Copy link
Copy Markdown
Contributor

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.

Looking good! A few minor nits.

Sorry, something went wrong.

Uh oh!

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

All reactions
Comment thread tests/fixtures/smart/H100(EU)_1.0_1.5.10.json Resolved

Uh oh!

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

Comment thread tests/test_cli.py Resolved

Uh oh!

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

Comment thread kasa/cli/hub.py Resolved

Uh oh!

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

Comment thread kasa/cli/hub.py Resolved

Uh oh!

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

Comment thread tests/fakeprotocol_smart.py Resolved

Uh oh!

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

Comment thread kasa/cli/hub.py Resolved

Uh oh!

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

Comment thread kasa/cli/hub.py Resolved

Uh oh!

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

Comment thread kasa/cli/hub.py Resolved

Uh oh!

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

Comment thread kasa/cli/hub.py Resolved

Uh oh!

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

Comment thread kasa/smart/modules/childsetup.py Resolved

Uh oh!

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

rytilahti and others added 5 commits January 17, 2025 13:21
@rytilahti @sdb9696
Apply suggestions from code review
c34aa71
Co-authored-by: Steven B. <[email protected]>
@rytilahti
Some improvements based on code review
837b68f
@rytilahti
devices_smart->hubs_smart
71a81d5
@rytilahti
Add unpair to child devices
cf1ad89
@rytilahti
Check for prereqs in group + minor cleanups
aeb4705
@rytilahti rytilahti mentioned this pull request Jan 17, 2025
Add pair/unpair buttons for tplink home-assistant/core#135847
Merged
1 of 19 tasks
rytilahti added 2 commits January 17, 2025 14:58
@rytilahti
Log end user relevant logs into info logger
6a0d3be
@rytilahti
Merge remote-tracking branch 'upstream/master' into feat/hub_pairing
fc48009
rytilahti and others added 2 commits January 17, 2025 15:14
@rytilahti @sdb9696
Update tests/fakeprotocol_smart.py
a4ffdcd
Co-authored-by: Steven B. <[email protected]>
@rytilahti
Fix tests
1188acb
sdb9696
sdb9696 approved these changes Jan 17, 2025
View reviewed changes

@sdb9696 sdb9696 left a comment

Copy link
Copy Markdown
Contributor

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.

Looks good to me, let's merge once tests pass!

Sorry, something went wrong.

Uh oh!

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

rytilahti reacted with rocket emoji
All reactions
  • 🚀 1 reaction
rytilahti and others added 3 commits January 17, 2025 22:15
@rytilahti
Move hub tests into its own package and implement unpair
bef3f65
@rytilahti
Cleanup a bit
ab04ab8
@sdb9696
Fix tests and remove explicit unpair method from child device
c5c09e2
@sdb9696 sdb9696 changed the title Add support for pairing devices Add support for pairing devices with hubs Jan 20, 2025
@sdb9696
sdb9696 merged commit bca5576 into master Jan 20, 2025
@sdb9696
sdb9696 deleted the feat/hub_pairing branch January 20, 2025 10:36
@rytilahti

rytilahti commented Jan 20, 2025

Copy link
Copy Markdown
Member Author

Thanks for taking care of the tests, @sdb9696! 🥇

All reactions

Sorry, something went wrong.

Uh oh!

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

rytilahti added a commit that referenced this pull request Jan 20, 2025
@rytilahti @sdb9696
Add support for pairing devices with hubs (#859)
478cb53
Co-authored-by: Steven B. <[email protected]>
@sdb9696 sdb9696 mentioned this pull request Jan 22, 2025
Prepare 0.10.0 #1473
Merged
sdb9696 added a commit that referenced this pull request Jan 26, 2025
@sdb9696
Prepare 0.10.0 (#1473)
09e73fa
## [0.10.0](https://github.com/python-kasa/python-kasa/tree/0.10.0) (2025-01-26)

[Full Changelog](0.9.1...0.10.0)

**Release summary:**

This release brings support for many new devices, including completely new device types:

- Support for Tapo robot vacuums. Special thanks to @steveredden, @MAXIGAMESSUPPER, and veep60 for helping to get this implemented!
- Support for hub attached cameras and doorbells (H200)
- Improved support for hubs (including pairing & better chime controls)
- Support for many new camera and doorbell device models, including C220, C720, D100C, D130, and D230

Many thanks to testers and new contributors - @steveredden, @DawidPietrykowski, @Obbay2, @andrewome, @ryenitcher and @etmmvdp!

**Breaking changes:**

- `uses_http` is now a readonly property of device config. Consumers that relied on `uses_http` to be persisted with `DeviceConfig.to_dict()` will need to store the value separately.
- `is_color`, `is_dimmable`, `is_variable_color_temp`, `valid_temperate_range`, and `has_effects` attributes from the `Light` module are deprecated, consumers should use `has_feature("hsv")`, `has_feature("brightness")`, `has_feature("color_temp")`, `get_feature("color_temp").range`, and `Module.LightEffect in dev.modules` respectively. Calling the deprecated attributes will emit a `DeprecationWarning` and type checkers will fail them.
-  `alarm_volume` on the `smart.Alarm` module is changed from `str` to `int`

**Breaking changes:**

- Make uses\_http a readonly property of device config [\#1449](#1449) (@sdb9696)
- Allow passing alarm parameter overrides [\#1340](#1340) (@rytilahti)
- Deprecate legacy light module is\_capability checks [\#1297](#1297) (@sdb9696)

**Implemented enhancements:**

- Expose more battery sensors for D230 [\#1451](#1451)
- dumping HTTP POST Body for Tapo Vacuum \(RV30 Plus\) [\#937](#937)
- Add common alarm interface [\#1479](#1479) (@sdb9696)
- Add common childsetup interface [\#1470](#1470) (@sdb9696)
- Add childsetup module to smartcam hubs [\#1469](#1469) (@sdb9696)
- Add smartcam pet detection toggle module [\#1465](#1465) (@DawidPietrykowski)
- Only log one warning per unknown clean error code and status [\#1462](#1462) (@rytilahti)
- Add childlock module for vacuums [\#1461](#1461) (@rytilahti)
- Add ultra mode \(fanspeed = 5\) for vacuums [\#1459](#1459) (@rytilahti)
- Add setting to change carpet clean mode [\#1458](#1458) (@rytilahti)
- Add setting to change clean count [\#1457](#1457) (@rytilahti)
- Add mop module [\#1456](#1456) (@rytilahti)
- Enable dynamic hub child creation and deletion on update [\#1454](#1454) (@sdb9696)
- Expose current cleaning information [\#1453](#1453) (@rytilahti)
- Add battery module to smartcam devices [\#1452](#1452) (@sdb9696)
- Allow update of camera modules after setting values [\#1450](#1450) (@sdb9696)
- Update hub children on first update and delay subsequent updates [\#1438](#1438) (@sdb9696)
- Add support for doorbells and chimes [\#1435](#1435) (@steveredden)
- Implement vacuum dustbin module \(dust\_bucket\) [\#1423](#1423) (@rytilahti)
- Allow https for klaptransport [\#1415](#1415) (@rytilahti)
- Add smartcam child device support for smartcam hubs [\#1413](#1413) (@sdb9696)
- Add powerprotection module [\#1337](#1337) (@rytilahti)
- Add vacuum speaker controls [\#1332](#1332) (@rytilahti)
- Add consumables module for vacuums [\#1327](#1327) (@rytilahti)
- Add ADC Value to PIR Enabled Switches [\#1263](#1263) (@ryenitcher)
- Add support for cleaning records [\#945](#945) (@rytilahti)
- Initial support for vacuums \(clean module\) [\#944](#944) (@rytilahti)
- Add support for pairing devices with hubs [\#859](#859) (@rytilahti)

**Fixed bugs:**

- TP-Link HS300 Wi-Fi Power-Strip - "Parent On/Off" not functioning. [\#637](#637)
- Convert carpet\_clean\_mode to carpet\_boost switch [\#1486](#1486) (@rytilahti)
- Change category for empty dustbin feature from Primary to Config [\#1485](#1485) (@rytilahti)
- Report 0 for instead of None for zero current and voltage [\#1483](#1483) (@ryenitcher)
- Disable iot camera creation until more complete [\#1480](#1480) (@sdb9696)
- ssltransport: use debug logger for sending requests [\#1443](#1443) (@rytilahti)
- Fix discover cli command with host [\#1437](#1437) (@sdb9696)
- Fallback to is\_low for batterysensor's battery\_low [\#1420](#1420) (@rytilahti)
- Fix iot strip turn on and off from parent [\#639](#639) (@Obbay2)

**Added support for devices:**

- Add D130\(US\) 1.0 1.1.9 fixture [\#1476](#1476) (@sdb9696)
- Add D100C\(US\) 1.0 1.1.3 fixture [\#1475](#1475) (@sdb9696)
- Add C220\(EU\) 1.0 1.2.2 camera fixture [\#1466](#1466) (@DawidPietrykowski)
- Add D230\(EU\) 1.20 1.1.19 fixture [\#1448](#1448) (@sdb9696)
- Add fixture for C720 camera [\#1433](#1433) (@steveredden)

**Project maintenance:**

- Update ruff to 0.9 [\#1482](#1482) (@sdb9696)
- Cancel in progress CI workflows after new pushes [\#1481](#1481) (@sdb9696)
- Update test framework to support smartcam device discovery. [\#1477](#1477) (@sdb9696)
- Add error code 7 for clean module [\#1474](#1474) (@rytilahti)
- Enable CI workflow on PRs to feat/ fix/ and janitor/ [\#1471](#1471) (@sdb9696)
- Add commit-hook to prettify JSON files [\#1455](#1455) (@rytilahti)
- Add required sphinx.configuration [\#1446](#1446) (@rytilahti)
- Add more redactors for smartcams [\#1439](#1439) (@sdb9696)
- Add KS230\(US\) 2.0 1.0.11 IOT Fixture [\#1430](#1430) (@ZeliardM)
- Add tests for dump\_devinfo parent/child smartcam fixture generation [\#1428](#1428) (@sdb9696)
- Raise errors on single smartcam child requests [\#1427](#1427) (@sdb9696)
rytilahti added a commit to rytilahti/python-kasa that referenced this pull request Aug 31, 2025
@rytilahti @sdb9696
Add support for pairing devices with hubs (python-kasa#859)
13ff961
Co-authored-by: Steven B. <[email protected]>
rytilahti pushed a commit to rytilahti/python-kasa that referenced this pull request Aug 31, 2025
@sdb9696 @rytilahti
Prepare 0.10.0 (python-kasa#1473)
a11b953
## [0.10.0](https://github.com/python-kasa/python-kasa/tree/0.10.0) (2025-01-26)

[Full Changelog](python-kasa/python-kasa@0.9.1...0.10.0)

**Release summary:**

This release brings support for many new devices, including completely new device types:

- Support for Tapo robot vacuums. Special thanks to @steveredden, @MAXIGAMESSUPPER, and veep60 for helping to get this implemented!
- Support for hub attached cameras and doorbells (H200)
- Improved support for hubs (including pairing & better chime controls)
- Support for many new camera and doorbell device models, including C220, C720, D100C, D130, and D230

Many thanks to testers and new contributors - @steveredden, @DawidPietrykowski, @Obbay2, @andrewome, @ryenitcher and @etmmvdp!

**Breaking changes:**

- `uses_http` is now a readonly property of device config. Consumers that relied on `uses_http` to be persisted with `DeviceConfig.to_dict()` will need to store the value separately.
- `is_color`, `is_dimmable`, `is_variable_color_temp`, `valid_temperate_range`, and `has_effects` attributes from the `Light` module are deprecated, consumers should use `has_feature("hsv")`, `has_feature("brightness")`, `has_feature("color_temp")`, `get_feature("color_temp").range`, and `Module.LightEffect in dev.modules` respectively. Calling the deprecated attributes will emit a `DeprecationWarning` and type checkers will fail them.
-  `alarm_volume` on the `smart.Alarm` module is changed from `str` to `int`

**Breaking changes:**

- Make uses\_http a readonly property of device config [\python-kasa#1449](python-kasa#1449) (@sdb9696)
- Allow passing alarm parameter overrides [\python-kasa#1340](python-kasa#1340) (@rytilahti)
- Deprecate legacy light module is\_capability checks [\python-kasa#1297](python-kasa#1297) (@sdb9696)

**Implemented enhancements:**

- Expose more battery sensors for D230 [\python-kasa#1451](python-kasa#1451)
- dumping HTTP POST Body for Tapo Vacuum \(RV30 Plus\) [\python-kasa#937](python-kasa#937)
- Add common alarm interface [\python-kasa#1479](python-kasa#1479) (@sdb9696)
- Add common childsetup interface [\python-kasa#1470](python-kasa#1470) (@sdb9696)
- Add childsetup module to smartcam hubs [\python-kasa#1469](python-kasa#1469) (@sdb9696)
- Add smartcam pet detection toggle module [\python-kasa#1465](python-kasa#1465) (@DawidPietrykowski)
- Only log one warning per unknown clean error code and status [\python-kasa#1462](python-kasa#1462) (@rytilahti)
- Add childlock module for vacuums [\python-kasa#1461](python-kasa#1461) (@rytilahti)
- Add ultra mode \(fanspeed = 5\) for vacuums [\python-kasa#1459](python-kasa#1459) (@rytilahti)
- Add setting to change carpet clean mode [\python-kasa#1458](python-kasa#1458) (@rytilahti)
- Add setting to change clean count [\python-kasa#1457](python-kasa#1457) (@rytilahti)
- Add mop module [\python-kasa#1456](python-kasa#1456) (@rytilahti)
- Enable dynamic hub child creation and deletion on update [\python-kasa#1454](python-kasa#1454) (@sdb9696)
- Expose current cleaning information [\python-kasa#1453](python-kasa#1453) (@rytilahti)
- Add battery module to smartcam devices [\python-kasa#1452](python-kasa#1452) (@sdb9696)
- Allow update of camera modules after setting values [\python-kasa#1450](python-kasa#1450) (@sdb9696)
- Update hub children on first update and delay subsequent updates [\python-kasa#1438](python-kasa#1438) (@sdb9696)
- Add support for doorbells and chimes [\python-kasa#1435](python-kasa#1435) (@steveredden)
- Implement vacuum dustbin module \(dust\_bucket\) [\python-kasa#1423](python-kasa#1423) (@rytilahti)
- Allow https for klaptransport [\python-kasa#1415](python-kasa#1415) (@rytilahti)
- Add smartcam child device support for smartcam hubs [\python-kasa#1413](python-kasa#1413) (@sdb9696)
- Add powerprotection module [\python-kasa#1337](python-kasa#1337) (@rytilahti)
- Add vacuum speaker controls [\python-kasa#1332](python-kasa#1332) (@rytilahti)
- Add consumables module for vacuums [\python-kasa#1327](python-kasa#1327) (@rytilahti)
- Add ADC Value to PIR Enabled Switches [\python-kasa#1263](python-kasa#1263) (@ryenitcher)
- Add support for cleaning records [\python-kasa#945](python-kasa#945) (@rytilahti)
- Initial support for vacuums \(clean module\) [\python-kasa#944](python-kasa#944) (@rytilahti)
- Add support for pairing devices with hubs [\python-kasa#859](python-kasa#859) (@rytilahti)

**Fixed bugs:**

- TP-Link HS300 Wi-Fi Power-Strip - "Parent On/Off" not functioning. [\python-kasa#637](python-kasa#637)
- Convert carpet\_clean\_mode to carpet\_boost switch [\python-kasa#1486](python-kasa#1486) (@rytilahti)
- Change category for empty dustbin feature from Primary to Config [\python-kasa#1485](python-kasa#1485) (@rytilahti)
- Report 0 for instead of None for zero current and voltage [\python-kasa#1483](python-kasa#1483) (@ryenitcher)
- Disable iot camera creation until more complete [\python-kasa#1480](python-kasa#1480) (@sdb9696)
- ssltransport: use debug logger for sending requests [\python-kasa#1443](python-kasa#1443) (@rytilahti)
- Fix discover cli command with host [\python-kasa#1437](python-kasa#1437) (@sdb9696)
- Fallback to is\_low for batterysensor's battery\_low [\python-kasa#1420](python-kasa#1420) (@rytilahti)
- Fix iot strip turn on and off from parent [\python-kasa#639](python-kasa#639) (@Obbay2)

**Added support for devices:**

- Add D130\(US\) 1.0 1.1.9 fixture [\python-kasa#1476](python-kasa#1476) (@sdb9696)
- Add D100C\(US\) 1.0 1.1.3 fixture [\python-kasa#1475](python-kasa#1475) (@sdb9696)
- Add C220\(EU\) 1.0 1.2.2 camera fixture [\python-kasa#1466](python-kasa#1466) (@DawidPietrykowski)
- Add D230\(EU\) 1.20 1.1.19 fixture [\python-kasa#1448](python-kasa#1448) (@sdb9696)
- Add fixture for C720 camera [\python-kasa#1433](python-kasa#1433) (@steveredden)

**Project maintenance:**

- Update ruff to 0.9 [\python-kasa#1482](python-kasa#1482) (@sdb9696)
- Cancel in progress CI workflows after new pushes [\python-kasa#1481](python-kasa#1481) (@sdb9696)
- Update test framework to support smartcam device discovery. [\python-kasa#1477](python-kasa#1477) (@sdb9696)
- Add error code 7 for clean module [\python-kasa#1474](python-kasa#1474) (@rytilahti)
- Enable CI workflow on PRs to feat/ fix/ and janitor/ [\python-kasa#1471](python-kasa#1471) (@sdb9696)
- Add commit-hook to prettify JSON files [\python-kasa#1455](python-kasa#1455) (@rytilahti)
- Add required sphinx.configuration [\python-kasa#1446](python-kasa#1446) (@rytilahti)
- Add more redactors for smartcams [\python-kasa#1439](python-kasa#1439) (@sdb9696)
- Add KS230\(US\) 2.0 1.0.11 IOT Fixture [\python-kasa#1430](python-kasa#1430) (@ZeliardM)
- Add tests for dump\_devinfo parent/child smartcam fixture generation [\python-kasa#1428](python-kasa#1428) (@sdb9696)
- Raise errors on single smartcam child requests [\python-kasa#1427](python-kasa#1427) (@sdb9696)
rytilahti added a commit to rytilahti/python-kasa that referenced this pull request Oct 26, 2025
@rytilahti @sdb9696
Add support for pairing devices with hubs (python-kasa#859)
91a661c
Co-authored-by: Steven B. <[email protected]>
rytilahti pushed a commit to rytilahti/python-kasa that referenced this pull request Oct 26, 2025
@sdb9696 @rytilahti
Prepare 0.10.0 (python-kasa#1473)
4577b2c
## [0.10.0](https://github.com/python-kasa/python-kasa/tree/0.10.0) (2025-01-26)

[Full Changelog](python-kasa/python-kasa@0.9.1...0.10.0)

**Release summary:**

This release brings support for many new devices, including completely new device types:

- Support for Tapo robot vacuums. Special thanks to @steveredden, @MAXIGAMESSUPPER, and veep60 for helping to get this implemented!
- Support for hub attached cameras and doorbells (H200)
- Improved support for hubs (including pairing & better chime controls)
- Support for many new camera and doorbell device models, including C220, C720, D100C, D130, and D230

Many thanks to testers and new contributors - @steveredden, @DawidPietrykowski, @Obbay2, @andrewome, @ryenitcher and @etmmvdp!

**Breaking changes:**

- `uses_http` is now a readonly property of device config. Consumers that relied on `uses_http` to be persisted with `DeviceConfig.to_dict()` will need to store the value separately.
- `is_color`, `is_dimmable`, `is_variable_color_temp`, `valid_temperate_range`, and `has_effects` attributes from the `Light` module are deprecated, consumers should use `has_feature("hsv")`, `has_feature("brightness")`, `has_feature("color_temp")`, `get_feature("color_temp").range`, and `Module.LightEffect in dev.modules` respectively. Calling the deprecated attributes will emit a `DeprecationWarning` and type checkers will fail them.
-  `alarm_volume` on the `smart.Alarm` module is changed from `str` to `int`

**Breaking changes:**

- Make uses\_http a readonly property of device config [\python-kasa#1449](python-kasa#1449) (@sdb9696)
- Allow passing alarm parameter overrides [\python-kasa#1340](python-kasa#1340) (@rytilahti)
- Deprecate legacy light module is\_capability checks [\python-kasa#1297](python-kasa#1297) (@sdb9696)

**Implemented enhancements:**

- Expose more battery sensors for D230 [\python-kasa#1451](python-kasa#1451)
- dumping HTTP POST Body for Tapo Vacuum \(RV30 Plus\) [\python-kasa#937](python-kasa#937)
- Add common alarm interface [\python-kasa#1479](python-kasa#1479) (@sdb9696)
- Add common childsetup interface [\python-kasa#1470](python-kasa#1470) (@sdb9696)
- Add childsetup module to smartcam hubs [\python-kasa#1469](python-kasa#1469) (@sdb9696)
- Add smartcam pet detection toggle module [\python-kasa#1465](python-kasa#1465) (@DawidPietrykowski)
- Only log one warning per unknown clean error code and status [\python-kasa#1462](python-kasa#1462) (@rytilahti)
- Add childlock module for vacuums [\python-kasa#1461](python-kasa#1461) (@rytilahti)
- Add ultra mode \(fanspeed = 5\) for vacuums [\python-kasa#1459](python-kasa#1459) (@rytilahti)
- Add setting to change carpet clean mode [\python-kasa#1458](python-kasa#1458) (@rytilahti)
- Add setting to change clean count [\python-kasa#1457](python-kasa#1457) (@rytilahti)
- Add mop module [\python-kasa#1456](python-kasa#1456) (@rytilahti)
- Enable dynamic hub child creation and deletion on update [\python-kasa#1454](python-kasa#1454) (@sdb9696)
- Expose current cleaning information [\python-kasa#1453](python-kasa#1453) (@rytilahti)
- Add battery module to smartcam devices [\python-kasa#1452](python-kasa#1452) (@sdb9696)
- Allow update of camera modules after setting values [\python-kasa#1450](python-kasa#1450) (@sdb9696)
- Update hub children on first update and delay subsequent updates [\python-kasa#1438](python-kasa#1438) (@sdb9696)
- Add support for doorbells and chimes [\python-kasa#1435](python-kasa#1435) (@steveredden)
- Implement vacuum dustbin module \(dust\_bucket\) [\python-kasa#1423](python-kasa#1423) (@rytilahti)
- Allow https for klaptransport [\python-kasa#1415](python-kasa#1415) (@rytilahti)
- Add smartcam child device support for smartcam hubs [\python-kasa#1413](python-kasa#1413) (@sdb9696)
- Add powerprotection module [\python-kasa#1337](python-kasa#1337) (@rytilahti)
- Add vacuum speaker controls [\python-kasa#1332](python-kasa#1332) (@rytilahti)
- Add consumables module for vacuums [\python-kasa#1327](python-kasa#1327) (@rytilahti)
- Add ADC Value to PIR Enabled Switches [\python-kasa#1263](python-kasa#1263) (@ryenitcher)
- Add support for cleaning records [\python-kasa#945](python-kasa#945) (@rytilahti)
- Initial support for vacuums \(clean module\) [\python-kasa#944](python-kasa#944) (@rytilahti)
- Add support for pairing devices with hubs [\python-kasa#859](python-kasa#859) (@rytilahti)

**Fixed bugs:**

- TP-Link HS300 Wi-Fi Power-Strip - "Parent On/Off" not functioning. [\python-kasa#637](python-kasa#637)
- Convert carpet\_clean\_mode to carpet\_boost switch [\python-kasa#1486](python-kasa#1486) (@rytilahti)
- Change category for empty dustbin feature from Primary to Config [\python-kasa#1485](python-kasa#1485) (@rytilahti)
- Report 0 for instead of None for zero current and voltage [\python-kasa#1483](python-kasa#1483) (@ryenitcher)
- Disable iot camera creation until more complete [\python-kasa#1480](python-kasa#1480) (@sdb9696)
- ssltransport: use debug logger for sending requests [\python-kasa#1443](python-kasa#1443) (@rytilahti)
- Fix discover cli command with host [\python-kasa#1437](python-kasa#1437) (@sdb9696)
- Fallback to is\_low for batterysensor's battery\_low [\python-kasa#1420](python-kasa#1420) (@rytilahti)
- Fix iot strip turn on and off from parent [\python-kasa#639](python-kasa#639) (@Obbay2)

**Added support for devices:**

- Add D130\(US\) 1.0 1.1.9 fixture [\python-kasa#1476](python-kasa#1476) (@sdb9696)
- Add D100C\(US\) 1.0 1.1.3 fixture [\python-kasa#1475](python-kasa#1475) (@sdb9696)
- Add C220\(EU\) 1.0 1.2.2 camera fixture [\python-kasa#1466](python-kasa#1466) (@DawidPietrykowski)
- Add D230\(EU\) 1.20 1.1.19 fixture [\python-kasa#1448](python-kasa#1448) (@sdb9696)
- Add fixture for C720 camera [\python-kasa#1433](python-kasa#1433) (@steveredden)

**Project maintenance:**

- Update ruff to 0.9 [\python-kasa#1482](python-kasa#1482) (@sdb9696)
- Cancel in progress CI workflows after new pushes [\python-kasa#1481](python-kasa#1481) (@sdb9696)
- Update test framework to support smartcam device discovery. [\python-kasa#1477](python-kasa#1477) (@sdb9696)
- Add error code 7 for clean module [\python-kasa#1474](python-kasa#1474) (@rytilahti)
- Enable CI workflow on PRs to feat/ fix/ and janitor/ [\python-kasa#1471](python-kasa#1471) (@sdb9696)
- Add commit-hook to prettify JSON files [\python-kasa#1455](python-kasa#1455) (@rytilahti)
- Add required sphinx.configuration [\python-kasa#1446](python-kasa#1446) (@rytilahti)
- Add more redactors for smartcams [\python-kasa#1439](python-kasa#1439) (@sdb9696)
- Add KS230\(US\) 2.0 1.0.11 IOT Fixture [\python-kasa#1430](python-kasa#1430) (@ZeliardM)
- Add tests for dump\_devinfo parent/child smartcam fixture generation [\python-kasa#1428](python-kasa#1428) (@sdb9696)
- Raise errors on single smartcam child requests [\python-kasa#1427](python-kasa#1427) (@sdb9696)
rytilahti added a commit to rytilahti/python-kasa that referenced this pull request Nov 10, 2025
@rytilahti @sdb9696
Add support for pairing devices with hubs (python-kasa#859)
3cbac46
Co-authored-by: Steven B. <[email protected]>
rytilahti pushed a commit to rytilahti/python-kasa that referenced this pull request Nov 10, 2025
@sdb9696 @rytilahti
Prepare 0.10.0 (python-kasa#1473)
2382821
## [0.10.0](https://github.com/python-kasa/python-kasa/tree/0.10.0) (2025-01-26)

[Full Changelog](python-kasa/python-kasa@0.9.1...0.10.0)

**Release summary:**

This release brings support for many new devices, including completely new device types:

- Support for Tapo robot vacuums. Special thanks to @steveredden, @MAXIGAMESSUPPER, and veep60 for helping to get this implemented!
- Support for hub attached cameras and doorbells (H200)
- Improved support for hubs (including pairing & better chime controls)
- Support for many new camera and doorbell device models, including C220, C720, D100C, D130, and D230

Many thanks to testers and new contributors - @steveredden, @DawidPietrykowski, @Obbay2, @andrewome, @ryenitcher and @etmmvdp!

**Breaking changes:**

- `uses_http` is now a readonly property of device config. Consumers that relied on `uses_http` to be persisted with `DeviceConfig.to_dict()` will need to store the value separately.
- `is_color`, `is_dimmable`, `is_variable_color_temp`, `valid_temperate_range`, and `has_effects` attributes from the `Light` module are deprecated, consumers should use `has_feature("hsv")`, `has_feature("brightness")`, `has_feature("color_temp")`, `get_feature("color_temp").range`, and `Module.LightEffect in dev.modules` respectively. Calling the deprecated attributes will emit a `DeprecationWarning` and type checkers will fail them.
-  `alarm_volume` on the `smart.Alarm` module is changed from `str` to `int`

**Breaking changes:**

- Make uses\_http a readonly property of device config [\python-kasa#1449](python-kasa#1449) (@sdb9696)
- Allow passing alarm parameter overrides [\python-kasa#1340](python-kasa#1340) (@rytilahti)
- Deprecate legacy light module is\_capability checks [\python-kasa#1297](python-kasa#1297) (@sdb9696)

**Implemented enhancements:**

- Expose more battery sensors for D230 [\python-kasa#1451](python-kasa#1451)
- dumping HTTP POST Body for Tapo Vacuum \(RV30 Plus\) [\python-kasa#937](python-kasa#937)
- Add common alarm interface [\python-kasa#1479](python-kasa#1479) (@sdb9696)
- Add common childsetup interface [\python-kasa#1470](python-kasa#1470) (@sdb9696)
- Add childsetup module to smartcam hubs [\python-kasa#1469](python-kasa#1469) (@sdb9696)
- Add smartcam pet detection toggle module [\python-kasa#1465](python-kasa#1465) (@DawidPietrykowski)
- Only log one warning per unknown clean error code and status [\python-kasa#1462](python-kasa#1462) (@rytilahti)
- Add childlock module for vacuums [\python-kasa#1461](python-kasa#1461) (@rytilahti)
- Add ultra mode \(fanspeed = 5\) for vacuums [\python-kasa#1459](python-kasa#1459) (@rytilahti)
- Add setting to change carpet clean mode [\python-kasa#1458](python-kasa#1458) (@rytilahti)
- Add setting to change clean count [\python-kasa#1457](python-kasa#1457) (@rytilahti)
- Add mop module [\python-kasa#1456](python-kasa#1456) (@rytilahti)
- Enable dynamic hub child creation and deletion on update [\python-kasa#1454](python-kasa#1454) (@sdb9696)
- Expose current cleaning information [\python-kasa#1453](python-kasa#1453) (@rytilahti)
- Add battery module to smartcam devices [\python-kasa#1452](python-kasa#1452) (@sdb9696)
- Allow update of camera modules after setting values [\python-kasa#1450](python-kasa#1450) (@sdb9696)
- Update hub children on first update and delay subsequent updates [\python-kasa#1438](python-kasa#1438) (@sdb9696)
- Add support for doorbells and chimes [\python-kasa#1435](python-kasa#1435) (@steveredden)
- Implement vacuum dustbin module \(dust\_bucket\) [\python-kasa#1423](python-kasa#1423) (@rytilahti)
- Allow https for klaptransport [\python-kasa#1415](python-kasa#1415) (@rytilahti)
- Add smartcam child device support for smartcam hubs [\python-kasa#1413](python-kasa#1413) (@sdb9696)
- Add powerprotection module [\python-kasa#1337](python-kasa#1337) (@rytilahti)
- Add vacuum speaker controls [\python-kasa#1332](python-kasa#1332) (@rytilahti)
- Add consumables module for vacuums [\python-kasa#1327](python-kasa#1327) (@rytilahti)
- Add ADC Value to PIR Enabled Switches [\python-kasa#1263](python-kasa#1263) (@ryenitcher)
- Add support for cleaning records [\python-kasa#945](python-kasa#945) (@rytilahti)
- Initial support for vacuums \(clean module\) [\python-kasa#944](python-kasa#944) (@rytilahti)
- Add support for pairing devices with hubs [\python-kasa#859](python-kasa#859) (@rytilahti)

**Fixed bugs:**

- TP-Link HS300 Wi-Fi Power-Strip - "Parent On/Off" not functioning. [\python-kasa#637](python-kasa#637)
- Convert carpet\_clean\_mode to carpet\_boost switch [\python-kasa#1486](python-kasa#1486) (@rytilahti)
- Change category for empty dustbin feature from Primary to Config [\python-kasa#1485](python-kasa#1485) (@rytilahti)
- Report 0 for instead of None for zero current and voltage [\python-kasa#1483](python-kasa#1483) (@ryenitcher)
- Disable iot camera creation until more complete [\python-kasa#1480](python-kasa#1480) (@sdb9696)
- ssltransport: use debug logger for sending requests [\python-kasa#1443](python-kasa#1443) (@rytilahti)
- Fix discover cli command with host [\python-kasa#1437](python-kasa#1437) (@sdb9696)
- Fallback to is\_low for batterysensor's battery\_low [\python-kasa#1420](python-kasa#1420) (@rytilahti)
- Fix iot strip turn on and off from parent [\python-kasa#639](python-kasa#639) (@Obbay2)

**Added support for devices:**

- Add D130\(US\) 1.0 1.1.9 fixture [\python-kasa#1476](python-kasa#1476) (@sdb9696)
- Add D100C\(US\) 1.0 1.1.3 fixture [\python-kasa#1475](python-kasa#1475) (@sdb9696)
- Add C220\(EU\) 1.0 1.2.2 camera fixture [\python-kasa#1466](python-kasa#1466) (@DawidPietrykowski)
- Add D230\(EU\) 1.20 1.1.19 fixture [\python-kasa#1448](python-kasa#1448) (@sdb9696)
- Add fixture for C720 camera [\python-kasa#1433](python-kasa#1433) (@steveredden)

**Project maintenance:**

- Update ruff to 0.9 [\python-kasa#1482](python-kasa#1482) (@sdb9696)
- Cancel in progress CI workflows after new pushes [\python-kasa#1481](python-kasa#1481) (@sdb9696)
- Update test framework to support smartcam device discovery. [\python-kasa#1477](python-kasa#1477) (@sdb9696)
- Add error code 7 for clean module [\python-kasa#1474](python-kasa#1474) (@rytilahti)
- Enable CI workflow on PRs to feat/ fix/ and janitor/ [\python-kasa#1471](python-kasa#1471) (@sdb9696)
- Add commit-hook to prettify JSON files [\python-kasa#1455](python-kasa#1455) (@rytilahti)
- Add required sphinx.configuration [\python-kasa#1446](python-kasa#1446) (@rytilahti)
- Add more redactors for smartcams [\python-kasa#1439](python-kasa#1439) (@sdb9696)
- Add KS230\(US\) 2.0 1.0.11 IOT Fixture [\python-kasa#1430](python-kasa#1430) (@ZeliardM)
- Add tests for dump\_devinfo parent/child smartcam fixture generation [\python-kasa#1428](python-kasa#1428) (@sdb9696)
- Raise errors on single smartcam child requests [\python-kasa#1427](python-kasa#1427) (@sdb9696)
rytilahti added a commit to rytilahti/python-kasa that referenced this pull request Jul 5, 2026
@rytilahti @sdb9696
Add support for pairing devices with hubs (python-kasa#859)
3dc5e95
Co-authored-by: Steven B. <[email protected]>
rytilahti pushed a commit to rytilahti/python-kasa that referenced this pull request Jul 5, 2026
@sdb9696 @rytilahti
Prepare 0.10.0 (python-kasa#1473)
309dc46
## [0.10.0](https://github.com/python-kasa/python-kasa/tree/0.10.0) (2025-01-26)

[Full Changelog](python-kasa/python-kasa@0.9.1...0.10.0)

**Release summary:**

This release brings support for many new devices, including completely new device types:

- Support for Tapo robot vacuums. Special thanks to @steveredden, @MAXIGAMESSUPPER, and veep60 for helping to get this implemented!
- Support for hub attached cameras and doorbells (H200)
- Improved support for hubs (including pairing & better chime controls)
- Support for many new camera and doorbell device models, including C220, C720, D100C, D130, and D230

Many thanks to testers and new contributors - @steveredden, @DawidPietrykowski, @Obbay2, @andrewome, @ryenitcher and @etmmvdp!

**Breaking changes:**

- `uses_http` is now a readonly property of device config. Consumers that relied on `uses_http` to be persisted with `DeviceConfig.to_dict()` will need to store the value separately.
- `is_color`, `is_dimmable`, `is_variable_color_temp`, `valid_temperate_range`, and `has_effects` attributes from the `Light` module are deprecated, consumers should use `has_feature("hsv")`, `has_feature("brightness")`, `has_feature("color_temp")`, `get_feature("color_temp").range`, and `Module.LightEffect in dev.modules` respectively. Calling the deprecated attributes will emit a `DeprecationWarning` and type checkers will fail them.
-  `alarm_volume` on the `smart.Alarm` module is changed from `str` to `int`

**Breaking changes:**

- Make uses\_http a readonly property of device config [\python-kasa#1449](python-kasa#1449) (@sdb9696)
- Allow passing alarm parameter overrides [\python-kasa#1340](python-kasa#1340) (@rytilahti)
- Deprecate legacy light module is\_capability checks [\python-kasa#1297](python-kasa#1297) (@sdb9696)

**Implemented enhancements:**

- Expose more battery sensors for D230 [\python-kasa#1451](python-kasa#1451)
- dumping HTTP POST Body for Tapo Vacuum \(RV30 Plus\) [\python-kasa#937](python-kasa#937)
- Add common alarm interface [\python-kasa#1479](python-kasa#1479) (@sdb9696)
- Add common childsetup interface [\python-kasa#1470](python-kasa#1470) (@sdb9696)
- Add childsetup module to smartcam hubs [\python-kasa#1469](python-kasa#1469) (@sdb9696)
- Add smartcam pet detection toggle module [\python-kasa#1465](python-kasa#1465) (@DawidPietrykowski)
- Only log one warning per unknown clean error code and status [\python-kasa#1462](python-kasa#1462) (@rytilahti)
- Add childlock module for vacuums [\python-kasa#1461](python-kasa#1461) (@rytilahti)
- Add ultra mode \(fanspeed = 5\) for vacuums [\python-kasa#1459](python-kasa#1459) (@rytilahti)
- Add setting to change carpet clean mode [\python-kasa#1458](python-kasa#1458) (@rytilahti)
- Add setting to change clean count [\python-kasa#1457](python-kasa#1457) (@rytilahti)
- Add mop module [\python-kasa#1456](python-kasa#1456) (@rytilahti)
- Enable dynamic hub child creation and deletion on update [\python-kasa#1454](python-kasa#1454) (@sdb9696)
- Expose current cleaning information [\python-kasa#1453](python-kasa#1453) (@rytilahti)
- Add battery module to smartcam devices [\python-kasa#1452](python-kasa#1452) (@sdb9696)
- Allow update of camera modules after setting values [\python-kasa#1450](python-kasa#1450) (@sdb9696)
- Update hub children on first update and delay subsequent updates [\python-kasa#1438](python-kasa#1438) (@sdb9696)
- Add support for doorbells and chimes [\python-kasa#1435](python-kasa#1435) (@steveredden)
- Implement vacuum dustbin module \(dust\_bucket\) [\python-kasa#1423](python-kasa#1423) (@rytilahti)
- Allow https for klaptransport [\python-kasa#1415](python-kasa#1415) (@rytilahti)
- Add smartcam child device support for smartcam hubs [\python-kasa#1413](python-kasa#1413) (@sdb9696)
- Add powerprotection module [\python-kasa#1337](python-kasa#1337) (@rytilahti)
- Add vacuum speaker controls [\python-kasa#1332](python-kasa#1332) (@rytilahti)
- Add consumables module for vacuums [\python-kasa#1327](python-kasa#1327) (@rytilahti)
- Add ADC Value to PIR Enabled Switches [\python-kasa#1263](python-kasa#1263) (@ryenitcher)
- Add support for cleaning records [\python-kasa#945](python-kasa#945) (@rytilahti)
- Initial support for vacuums \(clean module\) [\python-kasa#944](python-kasa#944) (@rytilahti)
- Add support for pairing devices with hubs [\python-kasa#859](python-kasa#859) (@rytilahti)

**Fixed bugs:**

- TP-Link HS300 Wi-Fi Power-Strip - "Parent On/Off" not functioning. [\python-kasa#637](python-kasa#637)
- Convert carpet\_clean\_mode to carpet\_boost switch [\python-kasa#1486](python-kasa#1486) (@rytilahti)
- Change category for empty dustbin feature from Primary to Config [\python-kasa#1485](python-kasa#1485) (@rytilahti)
- Report 0 for instead of None for zero current and voltage [\python-kasa#1483](python-kasa#1483) (@ryenitcher)
- Disable iot camera creation until more complete [\python-kasa#1480](python-kasa#1480) (@sdb9696)
- ssltransport: use debug logger for sending requests [\python-kasa#1443](python-kasa#1443) (@rytilahti)
- Fix discover cli command with host [\python-kasa#1437](python-kasa#1437) (@sdb9696)
- Fallback to is\_low for batterysensor's battery\_low [\python-kasa#1420](python-kasa#1420) (@rytilahti)
- Fix iot strip turn on and off from parent [\python-kasa#639](python-kasa#639) (@Obbay2)

**Added support for devices:**

- Add D130\(US\) 1.0 1.1.9 fixture [\python-kasa#1476](python-kasa#1476) (@sdb9696)
- Add D100C\(US\) 1.0 1.1.3 fixture [\python-kasa#1475](python-kasa#1475) (@sdb9696)
- Add C220\(EU\) 1.0 1.2.2 camera fixture [\python-kasa#1466](python-kasa#1466) (@DawidPietrykowski)
- Add D230\(EU\) 1.20 1.1.19 fixture [\python-kasa#1448](python-kasa#1448) (@sdb9696)
- Add fixture for C720 camera [\python-kasa#1433](python-kasa#1433) (@steveredden)

**Project maintenance:**

- Update ruff to 0.9 [\python-kasa#1482](python-kasa#1482) (@sdb9696)
- Cancel in progress CI workflows after new pushes [\python-kasa#1481](python-kasa#1481) (@sdb9696)
- Update test framework to support smartcam device discovery. [\python-kasa#1477](python-kasa#1477) (@sdb9696)
- Add error code 7 for clean module [\python-kasa#1474](python-kasa#1474) (@rytilahti)
- Enable CI workflow on PRs to feat/ fix/ and janitor/ [\python-kasa#1471](python-kasa#1471) (@sdb9696)
- Add commit-hook to prettify JSON files [\python-kasa#1455](python-kasa#1455) (@rytilahti)
- Add required sphinx.configuration [\python-kasa#1446](python-kasa#1446) (@rytilahti)
- Add more redactors for smartcams [\python-kasa#1439](python-kasa#1439) (@sdb9696)
- Add KS230\(US\) 2.0 1.0.11 IOT Fixture [\python-kasa#1430](python-kasa#1430) (@ZeliardM)
- Add tests for dump\_devinfo parent/child smartcam fixture generation [\python-kasa#1428](python-kasa#1428) (@sdb9696)
- Raise errors on single smartcam child requests [\python-kasa#1427](python-kasa#1427) (@sdb9696)
pillarsdotnet pushed a commit to pillarsdotnet/python-kasa that referenced this pull request Oct 22, 2026
@rytilahti @sdb9696
Add support for pairing devices with hubs (python-kasa#859)
b6b9b28
Co-authored-by: Steven B. <[email protected]>
pillarsdotnet pushed a commit to pillarsdotnet/python-kasa that referenced this pull request Oct 22, 2026
@sdb9696
Prepare 0.10.0 (python-kasa#1473)
e37cf64
## [0.10.0](https://github.com/python-kasa/python-kasa/tree/0.10.0) (2025-01-26)

[Full Changelog](python-kasa/python-kasa@0.9.1...0.10.0)

**Release summary:**

This release brings support for many new devices, including completely new device types:

- Support for Tapo robot vacuums. Special thanks to @steveredden, @MAXIGAMESSUPPER, and veep60 for helping to get this implemented!
- Support for hub attached cameras and doorbells (H200)
- Improved support for hubs (including pairing & better chime controls)
- Support for many new camera and doorbell device models, including C220, C720, D100C, D130, and D230

Many thanks to testers and new contributors - @steveredden, @DawidPietrykowski, @Obbay2, @andrewome, @ryenitcher and @etmmvdp!

**Breaking changes:**

- `uses_http` is now a readonly property of device config. Consumers that relied on `uses_http` to be persisted with `DeviceConfig.to_dict()` will need to store the value separately.
- `is_color`, `is_dimmable`, `is_variable_color_temp`, `valid_temperate_range`, and `has_effects` attributes from the `Light` module are deprecated, consumers should use `has_feature("hsv")`, `has_feature("brightness")`, `has_feature("color_temp")`, `get_feature("color_temp").range`, and `Module.LightEffect in dev.modules` respectively. Calling the deprecated attributes will emit a `DeprecationWarning` and type checkers will fail them.
-  `alarm_volume` on the `smart.Alarm` module is changed from `str` to `int`

**Breaking changes:**

- Make uses\_http a readonly property of device config [\python-kasa#1449](python-kasa#1449) (@sdb9696)
- Allow passing alarm parameter overrides [\python-kasa#1340](python-kasa#1340) (@rytilahti)
- Deprecate legacy light module is\_capability checks [\python-kasa#1297](python-kasa#1297) (@sdb9696)

**Implemented enhancements:**

- Expose more battery sensors for D230 [\python-kasa#1451](python-kasa#1451)
- dumping HTTP POST Body for Tapo Vacuum \(RV30 Plus\) [\python-kasa#937](python-kasa#937)
- Add common alarm interface [\python-kasa#1479](python-kasa#1479) (@sdb9696)
- Add common childsetup interface [\python-kasa#1470](python-kasa#1470) (@sdb9696)
- Add childsetup module to smartcam hubs [\python-kasa#1469](python-kasa#1469) (@sdb9696)
- Add smartcam pet detection toggle module [\python-kasa#1465](python-kasa#1465) (@DawidPietrykowski)
- Only log one warning per unknown clean error code and status [\python-kasa#1462](python-kasa#1462) (@rytilahti)
- Add childlock module for vacuums [\python-kasa#1461](python-kasa#1461) (@rytilahti)
- Add ultra mode \(fanspeed = 5\) for vacuums [\python-kasa#1459](python-kasa#1459) (@rytilahti)
- Add setting to change carpet clean mode [\python-kasa#1458](python-kasa#1458) (@rytilahti)
- Add setting to change clean count [\python-kasa#1457](python-kasa#1457) (@rytilahti)
- Add mop module [\python-kasa#1456](python-kasa#1456) (@rytilahti)
- Enable dynamic hub child creation and deletion on update [\python-kasa#1454](python-kasa#1454) (@sdb9696)
- Expose current cleaning information [\python-kasa#1453](python-kasa#1453) (@rytilahti)
- Add battery module to smartcam devices [\python-kasa#1452](python-kasa#1452) (@sdb9696)
- Allow update of camera modules after setting values [\python-kasa#1450](python-kasa#1450) (@sdb9696)
- Update hub children on first update and delay subsequent updates [\python-kasa#1438](python-kasa#1438) (@sdb9696)
- Add support for doorbells and chimes [\python-kasa#1435](python-kasa#1435) (@steveredden)
- Implement vacuum dustbin module \(dust\_bucket\) [\python-kasa#1423](python-kasa#1423) (@rytilahti)
- Allow https for klaptransport [\python-kasa#1415](python-kasa#1415) (@rytilahti)
- Add smartcam child device support for smartcam hubs [\python-kasa#1413](python-kasa#1413) (@sdb9696)
- Add powerprotection module [\python-kasa#1337](python-kasa#1337) (@rytilahti)
- Add vacuum speaker controls [\python-kasa#1332](python-kasa#1332) (@rytilahti)
- Add consumables module for vacuums [\python-kasa#1327](python-kasa#1327) (@rytilahti)
- Add ADC Value to PIR Enabled Switches [\python-kasa#1263](python-kasa#1263) (@ryenitcher)
- Add support for cleaning records [\python-kasa#945](python-kasa#945) (@rytilahti)
- Initial support for vacuums \(clean module\) [\python-kasa#944](python-kasa#944) (@rytilahti)
- Add support for pairing devices with hubs [\python-kasa#859](python-kasa#859) (@rytilahti)

**Fixed bugs:**

- TP-Link HS300 Wi-Fi Power-Strip - "Parent On/Off" not functioning. [\python-kasa#637](python-kasa#637)
- Convert carpet\_clean\_mode to carpet\_boost switch [\python-kasa#1486](python-kasa#1486) (@rytilahti)
- Change category for empty dustbin feature from Primary to Config [\python-kasa#1485](python-kasa#1485) (@rytilahti)
- Report 0 for instead of None for zero current and voltage [\python-kasa#1483](python-kasa#1483) (@ryenitcher)
- Disable iot camera creation until more complete [\python-kasa#1480](python-kasa#1480) (@sdb9696)
- ssltransport: use debug logger for sending requests [\python-kasa#1443](python-kasa#1443) (@rytilahti)
- Fix discover cli command with host [\python-kasa#1437](python-kasa#1437) (@sdb9696)
- Fallback to is\_low for batterysensor's battery\_low [\python-kasa#1420](python-kasa#1420) (@rytilahti)
- Fix iot strip turn on and off from parent [\python-kasa#639](python-kasa#639) (@Obbay2)

**Added support for devices:**

- Add D130\(US\) 1.0 1.1.9 fixture [\python-kasa#1476](python-kasa#1476) (@sdb9696)
- Add D100C\(US\) 1.0 1.1.3 fixture [\python-kasa#1475](python-kasa#1475) (@sdb9696)
- Add C220\(EU\) 1.0 1.2.2 camera fixture [\python-kasa#1466](python-kasa#1466) (@DawidPietrykowski)
- Add D230\(EU\) 1.20 1.1.19 fixture [\python-kasa#1448](python-kasa#1448) (@sdb9696)
- Add fixture for C720 camera [\python-kasa#1433](python-kasa#1433) (@steveredden)

**Project maintenance:**

- Update ruff to 0.9 [\python-kasa#1482](python-kasa#1482) (@sdb9696)
- Cancel in progress CI workflows after new pushes [\python-kasa#1481](python-kasa#1481) (@sdb9696)
- Update test framework to support smartcam device discovery. [\python-kasa#1477](python-kasa#1477) (@sdb9696)
- Add error code 7 for clean module [\python-kasa#1474](python-kasa#1474) (@rytilahti)
- Enable CI workflow on PRs to feat/ fix/ and janitor/ [\python-kasa#1471](python-kasa#1471) (@sdb9696)
- Add commit-hook to prettify JSON files [\python-kasa#1455](python-kasa#1455) (@rytilahti)
- Add required sphinx.configuration [\python-kasa#1446](python-kasa#1446) (@rytilahti)
- Add more redactors for smartcams [\python-kasa#1439](python-kasa#1439) (@sdb9696)
- Add KS230\(US\) 2.0 1.0.11 IOT Fixture [\python-kasa#1430](python-kasa#1430) (@ZeliardM)
- Add tests for dump\_devinfo parent/child smartcam fixture generation [\python-kasa#1428](python-kasa#1428) (@sdb9696)
- Raise errors on single smartcam child requests [\python-kasa#1427](python-kasa#1427) (@sdb9696)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@sdb9696 sdb9696 sdb9696 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 no-stale

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.

2 participants

@rytilahti @sdb9696
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.