-
-
Notifications
You must be signed in to change notification settings - Fork 221
Add support for pairing devices with hubs #859
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Codecov ReportAttention: Patch coverage is
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. 🚀 New features to boost your workflow:
|
b6d5eb1
to
c669835
Compare
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 For homeassistant UX, we will also need a way to re-trigger platform initialization for the new device. |
c669835
to
7f302aa
Compare
7f302aa
to
803e88d
Compare
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. |
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.
kasa/smart/modules/childsetup.py
Outdated
async def pair(self, *, timeout=10): | ||
"""Scan for new devices and pair after discovering first new device.""" |
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?
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 :-)
kasa/smart/modules/childsetup.py
Outdated
async def pair(self, *, timeout=10): | ||
"""Scan for new devices and pair after discovering first new device.""" |
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 :-)
2cbe305
to
017271e
Compare
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.
Co-authored-by: Steven B. <51370195+sdb9696@users.noreply.github.com>
Co-authored-by: Steven B. <51370195+sdb9696@users.noreply.github.com>
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!
Thanks for taking care of the tests, @sdb9696! 🥇 |
Co-authored-by: Steven B. <51370195+sdb9696@users.noreply.github.com>
## [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)
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 idskasa 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.