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 pan tilt camera module by sdb9696 · Pull Request #1261 · python-kasa/python-kasa

Conversation

@sdb9696

@sdb9696 sdb9696 commented Nov 14, 2024 •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown
Contributor

Will add presets in a subsequent PR

Sorry, something went wrong.

Uh oh!

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

All reactions
@sdb9696
Add pan tilt module
ddacd18
@codecov

codecov Bot commented Nov 14, 2024 •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 91.93%. Comparing base (a01247d) to head (fe05ce0).
Report is 176 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1261      +/-   ##
==========================================
+ Coverage   91.86%   91.93%   +0.07%     
==========================================
  Files         116      117       +1     
  Lines        7446     7475      +29     
  Branches      782      782              
==========================================
+ Hits         6840     6872      +32     
+ Misses        460      458       -2     
+ Partials      146      145       -1     

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

All reactions

Sorry, something went wrong.

Uh oh!

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

@sdb9696 sdb9696 changed the title Add pan tilt module Add pan tilt camera module Nov 14, 2024
rytilahti
rytilahti reviewed Nov 14, 2024
View reviewed changes
Comment thread kasa/feature.py Resolved

Uh oh!

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

Comment thread kasa/smartcamera/modules/pantilt.py Resolved

Uh oh!

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

Comment thread kasa/smartcamera/modules/pantilt.py Resolved

Uh oh!

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

sdb9696 added 2 commits November 15, 2024 08:54
@sdb9696
Merge remote-tracking branch 'upstream/master' into feat/camera_ptz
5af5382
@sdb9696
Address review comments
3c47316
@sdb9696 sdb9696 added the enhancement New feature or request label Nov 15, 2024
sdb9696 added 2 commits November 15, 2024 16:46
@sdb9696
Merge remote-tracking branch 'upstream/master' into feat/camera_ptz
c577a5e
@sdb9696
Make features use default step values
e67df1d
rytilahti
rytilahti reviewed Nov 16, 2024
View reviewed changes

@rytilahti rytilahti left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Looks neat! The attribute_setter change should probably go in in its own PR, but otherwise this is good to go 👍

Sorry, something went wrong.

Uh oh!

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

All reactions
Comment thread kasa/feature.py Resolved

Uh oh!

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

@sdb9696
Update feature docstrings
0ee1d0c
@sdb9696 sdb9696 mentioned this pull request Nov 18, 2024
Allow callable coroutines for feature setters #1272
Merged
sdb9696 added 2 commits November 18, 2024 14:55
@sdb9696
Merge branch 'master' into feat/camera_ptz
42ec3d4
@sdb9696
Fix tests
4137a3b
@sdb9696
sdb9696 marked this pull request as ready for review November 18, 2024 15:42
rytilahti
rytilahti approved these changes Nov 19, 2024
View reviewed changes

@rytilahti rytilahti left a comment •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Looks great, let's merge it! Merged master to kick off the CI again to get through the required checks.

Sorry, something went wrong.

Uh oh!

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

All reactions
@rytilahti
Merge branch 'master' into feat/camera_ptz
fe05ce0
@rytilahti
rytilahti enabled auto-merge (squash) November 19, 2024 10:11
@rytilahti
rytilahti merged commit 5b5a148 into master Nov 19, 2024
@rytilahti
rytilahti deleted the feat/camera_ptz branch November 19, 2024 10:11
@sdb9696 sdb9696 mentioned this pull request Nov 25, 2024
Prepare 0.8.0 #1312
Merged
sdb9696 added a commit that referenced this pull request Nov 26, 2024
@sdb9696
Prepare 0.8.0 (#1312)
6adb2b5
## [0.8.0](https://github.com/python-kasa/python-kasa/tree/0.8.0) (2024-11-26)

[Full Changelog](0.7.7...0.8.0)

**Release highlights:**

- **Initial support for devices using the Tapo camera protocol, i.e. Tapo cameras and the Tapo H200 hub.**
- New camera functionality such as exposing RTSP streaming urls and camera pan/tilt.
- New way of testing module support for individual features with `has_feature` and `get_feature`.
- Adding voltage and current monitoring to `smart` devices.
- Migration from pydantic to mashumaro for serialization.

Special thanks to @ryenitcher and @Puxtril for their new contributions to the improvement of the project! Also thanks to everyone who has helped with testing, contributing fixtures, and reporting issues!

**Breaking change notes:**

- Removed support for python <3.11. If you haven't got a compatible version try [uv](https://docs.astral.sh/uv/).
- Renamed `device_config.to_dict()` to `device_config.to_dict_control_credentials()`. `to_dict()` is still available but takes no parameters.
- From the `iot.Cloud` module the `iot.CloudInfo` class attributes have been converted to snake case.


**Breaking changes:**

- Migrate iot cloud module to mashumaro [\#1282](#1282) (@sdb9696)
- Replace custom deviceconfig serialization with mashumaru [\#1274](#1274) (@sdb9696)
- Remove support for python \<3.11 [\#1273](#1273) (@sdb9696)

**Implemented enhancements:**

- Update cli modify presets to support smart devices [\#1295](#1295) (@sdb9696)
- Use credentials\_hash for smartcamera rtsp url [\#1293](#1293) (@sdb9696)
- Add voltage and current monitoring to smart Devices [\#1281](#1281) (@ryenitcher)
- Update cli feature command for actions not to require a value [\#1264](#1264) (@sdb9696)
- Add pan tilt camera module [\#1261](#1261) (@sdb9696)
- Add alarm module for smartcamera hubs [\#1258](#1258) (@sdb9696)
- Move TAPO smartcamera out of experimental package [\#1255](#1255) (@sdb9696)
- Add SmartCamera Led Module [\#1249](#1249) (@sdb9696)
- Use component queries to select smartcamera modules [\#1248](#1248) (@sdb9696)
- Print formatting for IotLightPreset [\#1216](#1216) (@Puxtril)
- Allow getting Annotated features from modules [\#1018](#1018) (@sdb9696)
- Add common Thermostat module [\#977](#977) (@sdb9696)

**Fixed bugs:**

- TP-Link Tapo S505D cannot disable gradual on/off  [\#1309](#1309)
- Inconsistent emeter information between features and emeter cli [\#1308](#1308)
- How to dump power usage after latest updates? [\#1306](#1306)
- kasa.discover: Got unsupported connection type: 'device\_family': 'SMART.IPCAMERA' [\#1267](#1267)
- device \_\_repr\_\_ fails if no sys\_info [\#1262](#1262)
- Tapo P110M: Error processing Energy for device, module will be unavailable: get\_energy\_usage for Energy  [\#1243](#1243)
- Listing light presets throws error [\#1201](#1201)
- Include duration when disabling smooth transition on/off [\#1313](#1313) (@rytilahti)
- Expose energy command to cli [\#1307](#1307) (@rytilahti)
- Make discovery on unsupported devices less noisy [\#1291](#1291) (@rytilahti)
- Fix repr for device created with no sysinfo or discovery info" [\#1266](#1266) (@sdb9696)
- Fix discovery by alias for smart devices [\#1260](#1260) (@sdb9696)
- Make \_\_repr\_\_ work on discovery info [\#1233](#1233) (@rytilahti)

**Added support for devices:**

- Add HS200 \(US\) Smart Fixture [\#1303](#1303) (@ZeliardM)
- Add smartcamera devices to supported docs [\#1257](#1257) (@sdb9696)
- Add P110M\(AU\) fixture [\#1244](#1244) (@rytilahti)
- Add L630 fixture [\#1240](#1240) (@rytilahti)
- Add EP40M Fixture [\#1238](#1238) (@ryenitcher)
- Add KS220 Fixture [\#1237](#1237) (@ryenitcher)

**Documentation updates:**

- Use markdown footnotes in supported.md [\#1310](#1310) (@sdb9696)
- Update docs for the new module attributes has/get feature [\#1301](#1301) (@sdb9696)
- Fixup contributing.md for running test against a real device [\#1236](#1236) (@sdb9696)

**Project maintenance:**

- Rename tests/smartcamera to tests/smartcam [\#1315](#1315) (@sdb9696)
- Do not error on smartcam hub attached smartcam child devices [\#1314](#1314) (@sdb9696)
- Add P110M\(EU\) fixture [\#1305](#1305) (@sdb9696)
- Run tests with caplog in a single worker [\#1304](#1304) (@sdb9696)
- Rename smartcamera to smartcam [\#1300](#1300) (@sdb9696)
- Move iot fixtures into iot subfolder [\#1299](#1299) (@sdb9696)
- Annotate fan\_speed\_level of Fan interface [\#1298](#1298) (@sdb9696)
- Add PIR ADC Values to Test Fixtures [\#1296](#1296) (@ryenitcher)
- Exclude \_\_getattr\_\_ for deprecated attributes from type checkers [\#1294](#1294) (@sdb9696)
- Simplify omit http\_client in DeviceConfig serialization [\#1292](#1292) (@sdb9696)
- Add SMART Voltage Monitoring to Fixtures [\#1290](#1290) (@ryenitcher)
- Remove pydantic dependency [\#1289](#1289) (@sdb9696)
- Do not print out all the fixture names at the start of test runs [\#1287](#1287) (@sdb9696)
- dump\_devinfo: iot light strip commands [\#1286](#1286) (@sdb9696)
- Migrate TurnOnBehaviours to mashumaro [\#1285](#1285) (@sdb9696)
- dump\_devinfo: query smartlife.iot.common.cloud for fw updates [\#1284](#1284) (@rytilahti)
- Migrate RuleModule to mashumaro [\#1283](#1283) (@sdb9696)
- Update sphinx dependency to 6.2 to fix docs build [\#1280](#1280) (@sdb9696)
- Update DiscoveryResult to use mashu Annotated Alias [\#1279](#1279) (@sdb9696)
- Extend dump\_devinfo iot queries [\#1278](#1278) (@sdb9696)
- Migrate triggerlogs to mashumaru [\#1277](#1277) (@sdb9696)
- Migrate smart firmware module to mashumaro [\#1276](#1276) (@sdb9696)
- Migrate IotLightPreset to mashumaru [\#1275](#1275) (@sdb9696)
- Allow callable coroutines for feature setters [\#1272](#1272) (@sdb9696)
- Fix deprecated SSLContext\(\) usage [\#1271](#1271) (@sdb9696)
- Use \_get\_device\_info methods for smart and iot devs in devtools [\#1265](#1265) (@sdb9696)
- Remove experimental support [\#1256](#1256) (@sdb9696)
- Move protocol modules into protocols package [\#1254](#1254) (@sdb9696)
- Add linkcheck to readthedocs CI [\#1253](#1253) (@rytilahti)
- Update cli energy command to use energy module [\#1252](#1252) (@sdb9696)
- Consolidate warnings for fixtures missing child devices [\#1251](#1251) (@sdb9696)
- Update smartcamera fixtures with components [\#1250](#1250) (@sdb9696)
- Move transports into their own package [\#1247](#1247) (@rytilahti)
- Fix warnings in our test suite [\#1246](#1246) (@rytilahti)
- Move tests folder to top level of project [\#1242](#1242) (@sdb9696)
- Fix test framework running against real devices [\#1235](#1235) (@sdb9696)
- Add Additional Firmware Test Fixures [\#1234](#1234) (@ryenitcher)
- Update DiscoveryResult to use Mashumaro instead of pydantic [\#1231](#1231) (@sdb9696)
- Update fixture for ES20M 1.0.11 [\#1215](#1215) (@rytilahti)
- Enable ruff check for ANN [\#1139](#1139) (@rytilahti)

**Closed issues:**

- Expose Fan speed range from the library [\#1008](#1008)
- \[META\] 0.7 series - module support for SMART devices, support for introspectable device features and refactoring the library [\#783](#783)
rytilahti added a commit that referenced this pull request Nov 29, 2024
@sdb9696 @rytilahti
Add pan tilt camera module (#1261)
95a0ef8
Add ptz controls for smartcameras.

---------

Co-authored-by: Teemu R. <[email protected]>
rytilahti pushed a commit that referenced this pull request Nov 29, 2024
@sdb9696 @rytilahti
Prepare 0.8.0 (#1312)
bb4565e
## [0.8.0](https://github.com/python-kasa/python-kasa/tree/0.8.0) (2024-11-26)

[Full Changelog](0.7.7...0.8.0)

**Release highlights:**

- **Initial support for devices using the Tapo camera protocol, i.e. Tapo cameras and the Tapo H200 hub.**
- New camera functionality such as exposing RTSP streaming urls and camera pan/tilt.
- New way of testing module support for individual features with `has_feature` and `get_feature`.
- Adding voltage and current monitoring to `smart` devices.
- Migration from pydantic to mashumaro for serialization.

Special thanks to @ryenitcher and @Puxtril for their new contributions to the improvement of the project! Also thanks to everyone who has helped with testing, contributing fixtures, and reporting issues!

**Breaking change notes:**

- Removed support for python <3.11. If you haven't got a compatible version try [uv](https://docs.astral.sh/uv/).
- Renamed `device_config.to_dict()` to `device_config.to_dict_control_credentials()`. `to_dict()` is still available but takes no parameters.
- From the `iot.Cloud` module the `iot.CloudInfo` class attributes have been converted to snake case.


**Breaking changes:**

- Migrate iot cloud module to mashumaro [\#1282](#1282) (@sdb9696)
- Replace custom deviceconfig serialization with mashumaru [\#1274](#1274) (@sdb9696)
- Remove support for python \<3.11 [\#1273](#1273) (@sdb9696)

**Implemented enhancements:**

- Update cli modify presets to support smart devices [\#1295](#1295) (@sdb9696)
- Use credentials\_hash for smartcamera rtsp url [\#1293](#1293) (@sdb9696)
- Add voltage and current monitoring to smart Devices [\#1281](#1281) (@ryenitcher)
- Update cli feature command for actions not to require a value [\#1264](#1264) (@sdb9696)
- Add pan tilt camera module [\#1261](#1261) (@sdb9696)
- Add alarm module for smartcamera hubs [\#1258](#1258) (@sdb9696)
- Move TAPO smartcamera out of experimental package [\#1255](#1255) (@sdb9696)
- Add SmartCamera Led Module [\#1249](#1249) (@sdb9696)
- Use component queries to select smartcamera modules [\#1248](#1248) (@sdb9696)
- Print formatting for IotLightPreset [\#1216](#1216) (@Puxtril)
- Allow getting Annotated features from modules [\#1018](#1018) (@sdb9696)
- Add common Thermostat module [\#977](#977) (@sdb9696)

**Fixed bugs:**

- TP-Link Tapo S505D cannot disable gradual on/off  [\#1309](#1309)
- Inconsistent emeter information between features and emeter cli [\#1308](#1308)
- How to dump power usage after latest updates? [\#1306](#1306)
- kasa.discover: Got unsupported connection type: 'device\_family': 'SMART.IPCAMERA' [\#1267](#1267)
- device \_\_repr\_\_ fails if no sys\_info [\#1262](#1262)
- Tapo P110M: Error processing Energy for device, module will be unavailable: get\_energy\_usage for Energy  [\#1243](#1243)
- Listing light presets throws error [\#1201](#1201)
- Include duration when disabling smooth transition on/off [\#1313](#1313) (@rytilahti)
- Expose energy command to cli [\#1307](#1307) (@rytilahti)
- Make discovery on unsupported devices less noisy [\#1291](#1291) (@rytilahti)
- Fix repr for device created with no sysinfo or discovery info" [\#1266](#1266) (@sdb9696)
- Fix discovery by alias for smart devices [\#1260](#1260) (@sdb9696)
- Make \_\_repr\_\_ work on discovery info [\#1233](#1233) (@rytilahti)

**Added support for devices:**

- Add HS200 \(US\) Smart Fixture [\#1303](#1303) (@ZeliardM)
- Add smartcamera devices to supported docs [\#1257](#1257) (@sdb9696)
- Add P110M\(AU\) fixture [\#1244](#1244) (@rytilahti)
- Add L630 fixture [\#1240](#1240) (@rytilahti)
- Add EP40M Fixture [\#1238](#1238) (@ryenitcher)
- Add KS220 Fixture [\#1237](#1237) (@ryenitcher)

**Documentation updates:**

- Use markdown footnotes in supported.md [\#1310](#1310) (@sdb9696)
- Update docs for the new module attributes has/get feature [\#1301](#1301) (@sdb9696)
- Fixup contributing.md for running test against a real device [\#1236](#1236) (@sdb9696)

**Project maintenance:**

- Rename tests/smartcamera to tests/smartcam [\#1315](#1315) (@sdb9696)
- Do not error on smartcam hub attached smartcam child devices [\#1314](#1314) (@sdb9696)
- Add P110M\(EU\) fixture [\#1305](#1305) (@sdb9696)
- Run tests with caplog in a single worker [\#1304](#1304) (@sdb9696)
- Rename smartcamera to smartcam [\#1300](#1300) (@sdb9696)
- Move iot fixtures into iot subfolder [\#1299](#1299) (@sdb9696)
- Annotate fan\_speed\_level of Fan interface [\#1298](#1298) (@sdb9696)
- Add PIR ADC Values to Test Fixtures [\#1296](#1296) (@ryenitcher)
- Exclude \_\_getattr\_\_ for deprecated attributes from type checkers [\#1294](#1294) (@sdb9696)
- Simplify omit http\_client in DeviceConfig serialization [\#1292](#1292) (@sdb9696)
- Add SMART Voltage Monitoring to Fixtures [\#1290](#1290) (@ryenitcher)
- Remove pydantic dependency [\#1289](#1289) (@sdb9696)
- Do not print out all the fixture names at the start of test runs [\#1287](#1287) (@sdb9696)
- dump\_devinfo: iot light strip commands [\#1286](#1286) (@sdb9696)
- Migrate TurnOnBehaviours to mashumaro [\#1285](#1285) (@sdb9696)
- dump\_devinfo: query smartlife.iot.common.cloud for fw updates [\#1284](#1284) (@rytilahti)
- Migrate RuleModule to mashumaro [\#1283](#1283) (@sdb9696)
- Update sphinx dependency to 6.2 to fix docs build [\#1280](#1280) (@sdb9696)
- Update DiscoveryResult to use mashu Annotated Alias [\#1279](#1279) (@sdb9696)
- Extend dump\_devinfo iot queries [\#1278](#1278) (@sdb9696)
- Migrate triggerlogs to mashumaru [\#1277](#1277) (@sdb9696)
- Migrate smart firmware module to mashumaro [\#1276](#1276) (@sdb9696)
- Migrate IotLightPreset to mashumaru [\#1275](#1275) (@sdb9696)
- Allow callable coroutines for feature setters [\#1272](#1272) (@sdb9696)
- Fix deprecated SSLContext\(\) usage [\#1271](#1271) (@sdb9696)
- Use \_get\_device\_info methods for smart and iot devs in devtools [\#1265](#1265) (@sdb9696)
- Remove experimental support [\#1256](#1256) (@sdb9696)
- Move protocol modules into protocols package [\#1254](#1254) (@sdb9696)
- Add linkcheck to readthedocs CI [\#1253](#1253) (@rytilahti)
- Update cli energy command to use energy module [\#1252](#1252) (@sdb9696)
- Consolidate warnings for fixtures missing child devices [\#1251](#1251) (@sdb9696)
- Update smartcamera fixtures with components [\#1250](#1250) (@sdb9696)
- Move transports into their own package [\#1247](#1247) (@rytilahti)
- Fix warnings in our test suite [\#1246](#1246) (@rytilahti)
- Move tests folder to top level of project [\#1242](#1242) (@sdb9696)
- Fix test framework running against real devices [\#1235](#1235) (@sdb9696)
- Add Additional Firmware Test Fixures [\#1234](#1234) (@ryenitcher)
- Update DiscoveryResult to use Mashumaro instead of pydantic [\#1231](#1231) (@sdb9696)
- Update fixture for ES20M 1.0.11 [\#1215](#1215) (@rytilahti)
- Enable ruff check for ANN [\#1139](#1139) (@rytilahti)

**Closed issues:**

- Expose Fan speed range from the library [\#1008](#1008)
- \[META\] 0.7 series - module support for SMART devices, support for introspectable device features and refactoring the library [\#783](#783)
rytilahti added a commit to rytilahti/python-kasa that referenced this pull request Aug 31, 2025
@sdb9696 @rytilahti
Add pan tilt camera module (python-kasa#1261)
3b6ee2d
Add ptz controls for smartcameras.

---------

Co-authored-by: Teemu R. <[email protected]>
rytilahti pushed a commit to rytilahti/python-kasa that referenced this pull request Aug 31, 2025
@sdb9696 @rytilahti
Prepare 0.8.0 (python-kasa#1312)
5aae0d7
## [0.8.0](https://github.com/python-kasa/python-kasa/tree/0.8.0) (2024-11-26)

[Full Changelog](python-kasa/python-kasa@0.7.7...0.8.0)

**Release highlights:**

- **Initial support for devices using the Tapo camera protocol, i.e. Tapo cameras and the Tapo H200 hub.**
- New camera functionality such as exposing RTSP streaming urls and camera pan/tilt.
- New way of testing module support for individual features with `has_feature` and `get_feature`.
- Adding voltage and current monitoring to `smart` devices.
- Migration from pydantic to mashumaro for serialization.

Special thanks to @ryenitcher and @Puxtril for their new contributions to the improvement of the project! Also thanks to everyone who has helped with testing, contributing fixtures, and reporting issues!

**Breaking change notes:**

- Removed support for python <3.11. If you haven't got a compatible version try [uv](https://docs.astral.sh/uv/).
- Renamed `device_config.to_dict()` to `device_config.to_dict_control_credentials()`. `to_dict()` is still available but takes no parameters.
- From the `iot.Cloud` module the `iot.CloudInfo` class attributes have been converted to snake case.


**Breaking changes:**

- Migrate iot cloud module to mashumaro [\python-kasa#1282](python-kasa#1282) (@sdb9696)
- Replace custom deviceconfig serialization with mashumaru [\python-kasa#1274](python-kasa#1274) (@sdb9696)
- Remove support for python \<3.11 [\python-kasa#1273](python-kasa#1273) (@sdb9696)

**Implemented enhancements:**

- Update cli modify presets to support smart devices [\python-kasa#1295](python-kasa#1295) (@sdb9696)
- Use credentials\_hash for smartcamera rtsp url [\python-kasa#1293](python-kasa#1293) (@sdb9696)
- Add voltage and current monitoring to smart Devices [\python-kasa#1281](python-kasa#1281) (@ryenitcher)
- Update cli feature command for actions not to require a value [\python-kasa#1264](python-kasa#1264) (@sdb9696)
- Add pan tilt camera module [\python-kasa#1261](python-kasa#1261) (@sdb9696)
- Add alarm module for smartcamera hubs [\python-kasa#1258](python-kasa#1258) (@sdb9696)
- Move TAPO smartcamera out of experimental package [\python-kasa#1255](python-kasa#1255) (@sdb9696)
- Add SmartCamera Led Module [\python-kasa#1249](python-kasa#1249) (@sdb9696)
- Use component queries to select smartcamera modules [\python-kasa#1248](python-kasa#1248) (@sdb9696)
- Print formatting for IotLightPreset [\python-kasa#1216](python-kasa#1216) (@Puxtril)
- Allow getting Annotated features from modules [\python-kasa#1018](python-kasa#1018) (@sdb9696)
- Add common Thermostat module [\python-kasa#977](python-kasa#977) (@sdb9696)

**Fixed bugs:**

- TP-Link Tapo S505D cannot disable gradual on/off  [\python-kasa#1309](python-kasa#1309)
- Inconsistent emeter information between features and emeter cli [\python-kasa#1308](python-kasa#1308)
- How to dump power usage after latest updates? [\python-kasa#1306](python-kasa#1306)
- kasa.discover: Got unsupported connection type: 'device\_family': 'SMART.IPCAMERA' [\python-kasa#1267](python-kasa#1267)
- device \_\_repr\_\_ fails if no sys\_info [\python-kasa#1262](python-kasa#1262)
- Tapo P110M: Error processing Energy for device, module will be unavailable: get\_energy\_usage for Energy  [\python-kasa#1243](python-kasa#1243)
- Listing light presets throws error [\python-kasa#1201](python-kasa#1201)
- Include duration when disabling smooth transition on/off [\python-kasa#1313](python-kasa#1313) (@rytilahti)
- Expose energy command to cli [\python-kasa#1307](python-kasa#1307) (@rytilahti)
- Make discovery on unsupported devices less noisy [\python-kasa#1291](python-kasa#1291) (@rytilahti)
- Fix repr for device created with no sysinfo or discovery info" [\python-kasa#1266](python-kasa#1266) (@sdb9696)
- Fix discovery by alias for smart devices [\python-kasa#1260](python-kasa#1260) (@sdb9696)
- Make \_\_repr\_\_ work on discovery info [\python-kasa#1233](python-kasa#1233) (@rytilahti)

**Added support for devices:**

- Add HS200 \(US\) Smart Fixture [\python-kasa#1303](python-kasa#1303) (@ZeliardM)
- Add smartcamera devices to supported docs [\python-kasa#1257](python-kasa#1257) (@sdb9696)
- Add P110M\(AU\) fixture [\python-kasa#1244](python-kasa#1244) (@rytilahti)
- Add L630 fixture [\python-kasa#1240](python-kasa#1240) (@rytilahti)
- Add EP40M Fixture [\python-kasa#1238](python-kasa#1238) (@ryenitcher)
- Add KS220 Fixture [\python-kasa#1237](python-kasa#1237) (@ryenitcher)

**Documentation updates:**

- Use markdown footnotes in supported.md [\python-kasa#1310](python-kasa#1310) (@sdb9696)
- Update docs for the new module attributes has/get feature [\python-kasa#1301](python-kasa#1301) (@sdb9696)
- Fixup contributing.md for running test against a real device [\python-kasa#1236](python-kasa#1236) (@sdb9696)

**Project maintenance:**

- Rename tests/smartcamera to tests/smartcam [\python-kasa#1315](python-kasa#1315) (@sdb9696)
- Do not error on smartcam hub attached smartcam child devices [\python-kasa#1314](python-kasa#1314) (@sdb9696)
- Add P110M\(EU\) fixture [\python-kasa#1305](python-kasa#1305) (@sdb9696)
- Run tests with caplog in a single worker [\python-kasa#1304](python-kasa#1304) (@sdb9696)
- Rename smartcamera to smartcam [\python-kasa#1300](python-kasa#1300) (@sdb9696)
- Move iot fixtures into iot subfolder [\python-kasa#1299](python-kasa#1299) (@sdb9696)
- Annotate fan\_speed\_level of Fan interface [\python-kasa#1298](python-kasa#1298) (@sdb9696)
- Add PIR ADC Values to Test Fixtures [\python-kasa#1296](python-kasa#1296) (@ryenitcher)
- Exclude \_\_getattr\_\_ for deprecated attributes from type checkers [\python-kasa#1294](python-kasa#1294) (@sdb9696)
- Simplify omit http\_client in DeviceConfig serialization [\python-kasa#1292](python-kasa#1292) (@sdb9696)
- Add SMART Voltage Monitoring to Fixtures [\python-kasa#1290](python-kasa#1290) (@ryenitcher)
- Remove pydantic dependency [\python-kasa#1289](python-kasa#1289) (@sdb9696)
- Do not print out all the fixture names at the start of test runs [\python-kasa#1287](python-kasa#1287) (@sdb9696)
- dump\_devinfo: iot light strip commands [\python-kasa#1286](python-kasa#1286) (@sdb9696)
- Migrate TurnOnBehaviours to mashumaro [\python-kasa#1285](python-kasa#1285) (@sdb9696)
- dump\_devinfo: query smartlife.iot.common.cloud for fw updates [\python-kasa#1284](python-kasa#1284) (@rytilahti)
- Migrate RuleModule to mashumaro [\python-kasa#1283](python-kasa#1283) (@sdb9696)
- Update sphinx dependency to 6.2 to fix docs build [\python-kasa#1280](python-kasa#1280) (@sdb9696)
- Update DiscoveryResult to use mashu Annotated Alias [\python-kasa#1279](python-kasa#1279) (@sdb9696)
- Extend dump\_devinfo iot queries [\python-kasa#1278](python-kasa#1278) (@sdb9696)
- Migrate triggerlogs to mashumaru [\python-kasa#1277](python-kasa#1277) (@sdb9696)
- Migrate smart firmware module to mashumaro [\python-kasa#1276](python-kasa#1276) (@sdb9696)
- Migrate IotLightPreset to mashumaru [\python-kasa#1275](python-kasa#1275) (@sdb9696)
- Allow callable coroutines for feature setters [\python-kasa#1272](python-kasa#1272) (@sdb9696)
- Fix deprecated SSLContext\(\) usage [\python-kasa#1271](python-kasa#1271) (@sdb9696)
- Use \_get\_device\_info methods for smart and iot devs in devtools [\python-kasa#1265](python-kasa#1265) (@sdb9696)
- Remove experimental support [\python-kasa#1256](python-kasa#1256) (@sdb9696)
- Move protocol modules into protocols package [\python-kasa#1254](python-kasa#1254) (@sdb9696)
- Add linkcheck to readthedocs CI [\python-kasa#1253](python-kasa#1253) (@rytilahti)
- Update cli energy command to use energy module [\python-kasa#1252](python-kasa#1252) (@sdb9696)
- Consolidate warnings for fixtures missing child devices [\python-kasa#1251](python-kasa#1251) (@sdb9696)
- Update smartcamera fixtures with components [\python-kasa#1250](python-kasa#1250) (@sdb9696)
- Move transports into their own package [\python-kasa#1247](python-kasa#1247) (@rytilahti)
- Fix warnings in our test suite [\python-kasa#1246](python-kasa#1246) (@rytilahti)
- Move tests folder to top level of project [\python-kasa#1242](python-kasa#1242) (@sdb9696)
- Fix test framework running against real devices [\python-kasa#1235](python-kasa#1235) (@sdb9696)
- Add Additional Firmware Test Fixures [\python-kasa#1234](python-kasa#1234) (@ryenitcher)
- Update DiscoveryResult to use Mashumaro instead of pydantic [\python-kasa#1231](python-kasa#1231) (@sdb9696)
- Update fixture for ES20M 1.0.11 [\python-kasa#1215](python-kasa#1215) (@rytilahti)
- Enable ruff check for ANN [\python-kasa#1139](python-kasa#1139) (@rytilahti)

**Closed issues:**

- Expose Fan speed range from the library [\python-kasa#1008](python-kasa#1008)
- \[META\] 0.7 series - module support for SMART devices, support for introspectable device features and refactoring the library [\python-kasa#783](python-kasa#783)
rytilahti added a commit to rytilahti/python-kasa that referenced this pull request Oct 26, 2025
@sdb9696 @rytilahti
Add pan tilt camera module (python-kasa#1261)
afdf80a
Add ptz controls for smartcameras.

---------

Co-authored-by: Teemu R. <[email protected]>
rytilahti pushed a commit to rytilahti/python-kasa that referenced this pull request Oct 26, 2025
@sdb9696 @rytilahti
Prepare 0.8.0 (python-kasa#1312)
ce4e0fd
## [0.8.0](https://github.com/python-kasa/python-kasa/tree/0.8.0) (2024-11-26)

[Full Changelog](python-kasa/python-kasa@0.7.7...0.8.0)

**Release highlights:**

- **Initial support for devices using the Tapo camera protocol, i.e. Tapo cameras and the Tapo H200 hub.**
- New camera functionality such as exposing RTSP streaming urls and camera pan/tilt.
- New way of testing module support for individual features with `has_feature` and `get_feature`.
- Adding voltage and current monitoring to `smart` devices.
- Migration from pydantic to mashumaro for serialization.

Special thanks to @ryenitcher and @Puxtril for their new contributions to the improvement of the project! Also thanks to everyone who has helped with testing, contributing fixtures, and reporting issues!

**Breaking change notes:**

- Removed support for python <3.11. If you haven't got a compatible version try [uv](https://docs.astral.sh/uv/).
- Renamed `device_config.to_dict()` to `device_config.to_dict_control_credentials()`. `to_dict()` is still available but takes no parameters.
- From the `iot.Cloud` module the `iot.CloudInfo` class attributes have been converted to snake case.


**Breaking changes:**

- Migrate iot cloud module to mashumaro [\python-kasa#1282](python-kasa#1282) (@sdb9696)
- Replace custom deviceconfig serialization with mashumaru [\python-kasa#1274](python-kasa#1274) (@sdb9696)
- Remove support for python \<3.11 [\python-kasa#1273](python-kasa#1273) (@sdb9696)

**Implemented enhancements:**

- Update cli modify presets to support smart devices [\python-kasa#1295](python-kasa#1295) (@sdb9696)
- Use credentials\_hash for smartcamera rtsp url [\python-kasa#1293](python-kasa#1293) (@sdb9696)
- Add voltage and current monitoring to smart Devices [\python-kasa#1281](python-kasa#1281) (@ryenitcher)
- Update cli feature command for actions not to require a value [\python-kasa#1264](python-kasa#1264) (@sdb9696)
- Add pan tilt camera module [\python-kasa#1261](python-kasa#1261) (@sdb9696)
- Add alarm module for smartcamera hubs [\python-kasa#1258](python-kasa#1258) (@sdb9696)
- Move TAPO smartcamera out of experimental package [\python-kasa#1255](python-kasa#1255) (@sdb9696)
- Add SmartCamera Led Module [\python-kasa#1249](python-kasa#1249) (@sdb9696)
- Use component queries to select smartcamera modules [\python-kasa#1248](python-kasa#1248) (@sdb9696)
- Print formatting for IotLightPreset [\python-kasa#1216](python-kasa#1216) (@Puxtril)
- Allow getting Annotated features from modules [\python-kasa#1018](python-kasa#1018) (@sdb9696)
- Add common Thermostat module [\python-kasa#977](python-kasa#977) (@sdb9696)

**Fixed bugs:**

- TP-Link Tapo S505D cannot disable gradual on/off  [\python-kasa#1309](python-kasa#1309)
- Inconsistent emeter information between features and emeter cli [\python-kasa#1308](python-kasa#1308)
- How to dump power usage after latest updates? [\python-kasa#1306](python-kasa#1306)
- kasa.discover: Got unsupported connection type: 'device\_family': 'SMART.IPCAMERA' [\python-kasa#1267](python-kasa#1267)
- device \_\_repr\_\_ fails if no sys\_info [\python-kasa#1262](python-kasa#1262)
- Tapo P110M: Error processing Energy for device, module will be unavailable: get\_energy\_usage for Energy  [\python-kasa#1243](python-kasa#1243)
- Listing light presets throws error [\python-kasa#1201](python-kasa#1201)
- Include duration when disabling smooth transition on/off [\python-kasa#1313](python-kasa#1313) (@rytilahti)
- Expose energy command to cli [\python-kasa#1307](python-kasa#1307) (@rytilahti)
- Make discovery on unsupported devices less noisy [\python-kasa#1291](python-kasa#1291) (@rytilahti)
- Fix repr for device created with no sysinfo or discovery info" [\python-kasa#1266](python-kasa#1266) (@sdb9696)
- Fix discovery by alias for smart devices [\python-kasa#1260](python-kasa#1260) (@sdb9696)
- Make \_\_repr\_\_ work on discovery info [\python-kasa#1233](python-kasa#1233) (@rytilahti)

**Added support for devices:**

- Add HS200 \(US\) Smart Fixture [\python-kasa#1303](python-kasa#1303) (@ZeliardM)
- Add smartcamera devices to supported docs [\python-kasa#1257](python-kasa#1257) (@sdb9696)
- Add P110M\(AU\) fixture [\python-kasa#1244](python-kasa#1244) (@rytilahti)
- Add L630 fixture [\python-kasa#1240](python-kasa#1240) (@rytilahti)
- Add EP40M Fixture [\python-kasa#1238](python-kasa#1238) (@ryenitcher)
- Add KS220 Fixture [\python-kasa#1237](python-kasa#1237) (@ryenitcher)

**Documentation updates:**

- Use markdown footnotes in supported.md [\python-kasa#1310](python-kasa#1310) (@sdb9696)
- Update docs for the new module attributes has/get feature [\python-kasa#1301](python-kasa#1301) (@sdb9696)
- Fixup contributing.md for running test against a real device [\python-kasa#1236](python-kasa#1236) (@sdb9696)

**Project maintenance:**

- Rename tests/smartcamera to tests/smartcam [\python-kasa#1315](python-kasa#1315) (@sdb9696)
- Do not error on smartcam hub attached smartcam child devices [\python-kasa#1314](python-kasa#1314) (@sdb9696)
- Add P110M\(EU\) fixture [\python-kasa#1305](python-kasa#1305) (@sdb9696)
- Run tests with caplog in a single worker [\python-kasa#1304](python-kasa#1304) (@sdb9696)
- Rename smartcamera to smartcam [\python-kasa#1300](python-kasa#1300) (@sdb9696)
- Move iot fixtures into iot subfolder [\python-kasa#1299](python-kasa#1299) (@sdb9696)
- Annotate fan\_speed\_level of Fan interface [\python-kasa#1298](python-kasa#1298) (@sdb9696)
- Add PIR ADC Values to Test Fixtures [\python-kasa#1296](python-kasa#1296) (@ryenitcher)
- Exclude \_\_getattr\_\_ for deprecated attributes from type checkers [\python-kasa#1294](python-kasa#1294) (@sdb9696)
- Simplify omit http\_client in DeviceConfig serialization [\python-kasa#1292](python-kasa#1292) (@sdb9696)
- Add SMART Voltage Monitoring to Fixtures [\python-kasa#1290](python-kasa#1290) (@ryenitcher)
- Remove pydantic dependency [\python-kasa#1289](python-kasa#1289) (@sdb9696)
- Do not print out all the fixture names at the start of test runs [\python-kasa#1287](python-kasa#1287) (@sdb9696)
- dump\_devinfo: iot light strip commands [\python-kasa#1286](python-kasa#1286) (@sdb9696)
- Migrate TurnOnBehaviours to mashumaro [\python-kasa#1285](python-kasa#1285) (@sdb9696)
- dump\_devinfo: query smartlife.iot.common.cloud for fw updates [\python-kasa#1284](python-kasa#1284) (@rytilahti)
- Migrate RuleModule to mashumaro [\python-kasa#1283](python-kasa#1283) (@sdb9696)
- Update sphinx dependency to 6.2 to fix docs build [\python-kasa#1280](python-kasa#1280) (@sdb9696)
- Update DiscoveryResult to use mashu Annotated Alias [\python-kasa#1279](python-kasa#1279) (@sdb9696)
- Extend dump\_devinfo iot queries [\python-kasa#1278](python-kasa#1278) (@sdb9696)
- Migrate triggerlogs to mashumaru [\python-kasa#1277](python-kasa#1277) (@sdb9696)
- Migrate smart firmware module to mashumaro [\python-kasa#1276](python-kasa#1276) (@sdb9696)
- Migrate IotLightPreset to mashumaru [\python-kasa#1275](python-kasa#1275) (@sdb9696)
- Allow callable coroutines for feature setters [\python-kasa#1272](python-kasa#1272) (@sdb9696)
- Fix deprecated SSLContext\(\) usage [\python-kasa#1271](python-kasa#1271) (@sdb9696)
- Use \_get\_device\_info methods for smart and iot devs in devtools [\python-kasa#1265](python-kasa#1265) (@sdb9696)
- Remove experimental support [\python-kasa#1256](python-kasa#1256) (@sdb9696)
- Move protocol modules into protocols package [\python-kasa#1254](python-kasa#1254) (@sdb9696)
- Add linkcheck to readthedocs CI [\python-kasa#1253](python-kasa#1253) (@rytilahti)
- Update cli energy command to use energy module [\python-kasa#1252](python-kasa#1252) (@sdb9696)
- Consolidate warnings for fixtures missing child devices [\python-kasa#1251](python-kasa#1251) (@sdb9696)
- Update smartcamera fixtures with components [\python-kasa#1250](python-kasa#1250) (@sdb9696)
- Move transports into their own package [\python-kasa#1247](python-kasa#1247) (@rytilahti)
- Fix warnings in our test suite [\python-kasa#1246](python-kasa#1246) (@rytilahti)
- Move tests folder to top level of project [\python-kasa#1242](python-kasa#1242) (@sdb9696)
- Fix test framework running against real devices [\python-kasa#1235](python-kasa#1235) (@sdb9696)
- Add Additional Firmware Test Fixures [\python-kasa#1234](python-kasa#1234) (@ryenitcher)
- Update DiscoveryResult to use Mashumaro instead of pydantic [\python-kasa#1231](python-kasa#1231) (@sdb9696)
- Update fixture for ES20M 1.0.11 [\python-kasa#1215](python-kasa#1215) (@rytilahti)
- Enable ruff check for ANN [\python-kasa#1139](python-kasa#1139) (@rytilahti)

**Closed issues:**

- Expose Fan speed range from the library [\python-kasa#1008](python-kasa#1008)
- \[META\] 0.7 series - module support for SMART devices, support for introspectable device features and refactoring the library [\python-kasa#783](python-kasa#783)
rytilahti added a commit to rytilahti/python-kasa that referenced this pull request Nov 10, 2025
@sdb9696 @rytilahti
Add pan tilt camera module (python-kasa#1261)
b755c8e
Add ptz controls for smartcameras.

---------

Co-authored-by: Teemu R. <[email protected]>
rytilahti pushed a commit to rytilahti/python-kasa that referenced this pull request Nov 10, 2025
@sdb9696 @rytilahti
Prepare 0.8.0 (python-kasa#1312)
369cdcc
## [0.8.0](https://github.com/python-kasa/python-kasa/tree/0.8.0) (2024-11-26)

[Full Changelog](python-kasa/python-kasa@0.7.7...0.8.0)

**Release highlights:**

- **Initial support for devices using the Tapo camera protocol, i.e. Tapo cameras and the Tapo H200 hub.**
- New camera functionality such as exposing RTSP streaming urls and camera pan/tilt.
- New way of testing module support for individual features with `has_feature` and `get_feature`.
- Adding voltage and current monitoring to `smart` devices.
- Migration from pydantic to mashumaro for serialization.

Special thanks to @ryenitcher and @Puxtril for their new contributions to the improvement of the project! Also thanks to everyone who has helped with testing, contributing fixtures, and reporting issues!

**Breaking change notes:**

- Removed support for python <3.11. If you haven't got a compatible version try [uv](https://docs.astral.sh/uv/).
- Renamed `device_config.to_dict()` to `device_config.to_dict_control_credentials()`. `to_dict()` is still available but takes no parameters.
- From the `iot.Cloud` module the `iot.CloudInfo` class attributes have been converted to snake case.


**Breaking changes:**

- Migrate iot cloud module to mashumaro [\python-kasa#1282](python-kasa#1282) (@sdb9696)
- Replace custom deviceconfig serialization with mashumaru [\python-kasa#1274](python-kasa#1274) (@sdb9696)
- Remove support for python \<3.11 [\python-kasa#1273](python-kasa#1273) (@sdb9696)

**Implemented enhancements:**

- Update cli modify presets to support smart devices [\python-kasa#1295](python-kasa#1295) (@sdb9696)
- Use credentials\_hash for smartcamera rtsp url [\python-kasa#1293](python-kasa#1293) (@sdb9696)
- Add voltage and current monitoring to smart Devices [\python-kasa#1281](python-kasa#1281) (@ryenitcher)
- Update cli feature command for actions not to require a value [\python-kasa#1264](python-kasa#1264) (@sdb9696)
- Add pan tilt camera module [\python-kasa#1261](python-kasa#1261) (@sdb9696)
- Add alarm module for smartcamera hubs [\python-kasa#1258](python-kasa#1258) (@sdb9696)
- Move TAPO smartcamera out of experimental package [\python-kasa#1255](python-kasa#1255) (@sdb9696)
- Add SmartCamera Led Module [\python-kasa#1249](python-kasa#1249) (@sdb9696)
- Use component queries to select smartcamera modules [\python-kasa#1248](python-kasa#1248) (@sdb9696)
- Print formatting for IotLightPreset [\python-kasa#1216](python-kasa#1216) (@Puxtril)
- Allow getting Annotated features from modules [\python-kasa#1018](python-kasa#1018) (@sdb9696)
- Add common Thermostat module [\python-kasa#977](python-kasa#977) (@sdb9696)

**Fixed bugs:**

- TP-Link Tapo S505D cannot disable gradual on/off  [\python-kasa#1309](python-kasa#1309)
- Inconsistent emeter information between features and emeter cli [\python-kasa#1308](python-kasa#1308)
- How to dump power usage after latest updates? [\python-kasa#1306](python-kasa#1306)
- kasa.discover: Got unsupported connection type: 'device\_family': 'SMART.IPCAMERA' [\python-kasa#1267](python-kasa#1267)
- device \_\_repr\_\_ fails if no sys\_info [\python-kasa#1262](python-kasa#1262)
- Tapo P110M: Error processing Energy for device, module will be unavailable: get\_energy\_usage for Energy  [\python-kasa#1243](python-kasa#1243)
- Listing light presets throws error [\python-kasa#1201](python-kasa#1201)
- Include duration when disabling smooth transition on/off [\python-kasa#1313](python-kasa#1313) (@rytilahti)
- Expose energy command to cli [\python-kasa#1307](python-kasa#1307) (@rytilahti)
- Make discovery on unsupported devices less noisy [\python-kasa#1291](python-kasa#1291) (@rytilahti)
- Fix repr for device created with no sysinfo or discovery info" [\python-kasa#1266](python-kasa#1266) (@sdb9696)
- Fix discovery by alias for smart devices [\python-kasa#1260](python-kasa#1260) (@sdb9696)
- Make \_\_repr\_\_ work on discovery info [\python-kasa#1233](python-kasa#1233) (@rytilahti)

**Added support for devices:**

- Add HS200 \(US\) Smart Fixture [\python-kasa#1303](python-kasa#1303) (@ZeliardM)
- Add smartcamera devices to supported docs [\python-kasa#1257](python-kasa#1257) (@sdb9696)
- Add P110M\(AU\) fixture [\python-kasa#1244](python-kasa#1244) (@rytilahti)
- Add L630 fixture [\python-kasa#1240](python-kasa#1240) (@rytilahti)
- Add EP40M Fixture [\python-kasa#1238](python-kasa#1238) (@ryenitcher)
- Add KS220 Fixture [\python-kasa#1237](python-kasa#1237) (@ryenitcher)

**Documentation updates:**

- Use markdown footnotes in supported.md [\python-kasa#1310](python-kasa#1310) (@sdb9696)
- Update docs for the new module attributes has/get feature [\python-kasa#1301](python-kasa#1301) (@sdb9696)
- Fixup contributing.md for running test against a real device [\python-kasa#1236](python-kasa#1236) (@sdb9696)

**Project maintenance:**

- Rename tests/smartcamera to tests/smartcam [\python-kasa#1315](python-kasa#1315) (@sdb9696)
- Do not error on smartcam hub attached smartcam child devices [\python-kasa#1314](python-kasa#1314) (@sdb9696)
- Add P110M\(EU\) fixture [\python-kasa#1305](python-kasa#1305) (@sdb9696)
- Run tests with caplog in a single worker [\python-kasa#1304](python-kasa#1304) (@sdb9696)
- Rename smartcamera to smartcam [\python-kasa#1300](python-kasa#1300) (@sdb9696)
- Move iot fixtures into iot subfolder [\python-kasa#1299](python-kasa#1299) (@sdb9696)
- Annotate fan\_speed\_level of Fan interface [\python-kasa#1298](python-kasa#1298) (@sdb9696)
- Add PIR ADC Values to Test Fixtures [\python-kasa#1296](python-kasa#1296) (@ryenitcher)
- Exclude \_\_getattr\_\_ for deprecated attributes from type checkers [\python-kasa#1294](python-kasa#1294) (@sdb9696)
- Simplify omit http\_client in DeviceConfig serialization [\python-kasa#1292](python-kasa#1292) (@sdb9696)
- Add SMART Voltage Monitoring to Fixtures [\python-kasa#1290](python-kasa#1290) (@ryenitcher)
- Remove pydantic dependency [\python-kasa#1289](python-kasa#1289) (@sdb9696)
- Do not print out all the fixture names at the start of test runs [\python-kasa#1287](python-kasa#1287) (@sdb9696)
- dump\_devinfo: iot light strip commands [\python-kasa#1286](python-kasa#1286) (@sdb9696)
- Migrate TurnOnBehaviours to mashumaro [\python-kasa#1285](python-kasa#1285) (@sdb9696)
- dump\_devinfo: query smartlife.iot.common.cloud for fw updates [\python-kasa#1284](python-kasa#1284) (@rytilahti)
- Migrate RuleModule to mashumaro [\python-kasa#1283](python-kasa#1283) (@sdb9696)
- Update sphinx dependency to 6.2 to fix docs build [\python-kasa#1280](python-kasa#1280) (@sdb9696)
- Update DiscoveryResult to use mashu Annotated Alias [\python-kasa#1279](python-kasa#1279) (@sdb9696)
- Extend dump\_devinfo iot queries [\python-kasa#1278](python-kasa#1278) (@sdb9696)
- Migrate triggerlogs to mashumaru [\python-kasa#1277](python-kasa#1277) (@sdb9696)
- Migrate smart firmware module to mashumaro [\python-kasa#1276](python-kasa#1276) (@sdb9696)
- Migrate IotLightPreset to mashumaru [\python-kasa#1275](python-kasa#1275) (@sdb9696)
- Allow callable coroutines for feature setters [\python-kasa#1272](python-kasa#1272) (@sdb9696)
- Fix deprecated SSLContext\(\) usage [\python-kasa#1271](python-kasa#1271) (@sdb9696)
- Use \_get\_device\_info methods for smart and iot devs in devtools [\python-kasa#1265](python-kasa#1265) (@sdb9696)
- Remove experimental support [\python-kasa#1256](python-kasa#1256) (@sdb9696)
- Move protocol modules into protocols package [\python-kasa#1254](python-kasa#1254) (@sdb9696)
- Add linkcheck to readthedocs CI [\python-kasa#1253](python-kasa#1253) (@rytilahti)
- Update cli energy command to use energy module [\python-kasa#1252](python-kasa#1252) (@sdb9696)
- Consolidate warnings for fixtures missing child devices [\python-kasa#1251](python-kasa#1251) (@sdb9696)
- Update smartcamera fixtures with components [\python-kasa#1250](python-kasa#1250) (@sdb9696)
- Move transports into their own package [\python-kasa#1247](python-kasa#1247) (@rytilahti)
- Fix warnings in our test suite [\python-kasa#1246](python-kasa#1246) (@rytilahti)
- Move tests folder to top level of project [\python-kasa#1242](python-kasa#1242) (@sdb9696)
- Fix test framework running against real devices [\python-kasa#1235](python-kasa#1235) (@sdb9696)
- Add Additional Firmware Test Fixures [\python-kasa#1234](python-kasa#1234) (@ryenitcher)
- Update DiscoveryResult to use Mashumaro instead of pydantic [\python-kasa#1231](python-kasa#1231) (@sdb9696)
- Update fixture for ES20M 1.0.11 [\python-kasa#1215](python-kasa#1215) (@rytilahti)
- Enable ruff check for ANN [\python-kasa#1139](python-kasa#1139) (@rytilahti)

**Closed issues:**

- Expose Fan speed range from the library [\python-kasa#1008](python-kasa#1008)
- \[META\] 0.7 series - module support for SMART devices, support for introspectable device features and refactoring the library [\python-kasa#783](python-kasa#783)
rytilahti added a commit to rytilahti/python-kasa that referenced this pull request Jul 5, 2026
@sdb9696 @rytilahti
Add pan tilt camera module (python-kasa#1261)
8f75b40
Add ptz controls for smartcameras.

---------

Co-authored-by: Teemu R. <[email protected]>
rytilahti pushed a commit to rytilahti/python-kasa that referenced this pull request Jul 5, 2026
@sdb9696 @rytilahti
Prepare 0.8.0 (python-kasa#1312)
25fa271
## [0.8.0](https://github.com/python-kasa/python-kasa/tree/0.8.0) (2024-11-26)

[Full Changelog](python-kasa/python-kasa@0.7.7...0.8.0)

**Release highlights:**

- **Initial support for devices using the Tapo camera protocol, i.e. Tapo cameras and the Tapo H200 hub.**
- New camera functionality such as exposing RTSP streaming urls and camera pan/tilt.
- New way of testing module support for individual features with `has_feature` and `get_feature`.
- Adding voltage and current monitoring to `smart` devices.
- Migration from pydantic to mashumaro for serialization.

Special thanks to @ryenitcher and @Puxtril for their new contributions to the improvement of the project! Also thanks to everyone who has helped with testing, contributing fixtures, and reporting issues!

**Breaking change notes:**

- Removed support for python <3.11. If you haven't got a compatible version try [uv](https://docs.astral.sh/uv/).
- Renamed `device_config.to_dict()` to `device_config.to_dict_control_credentials()`. `to_dict()` is still available but takes no parameters.
- From the `iot.Cloud` module the `iot.CloudInfo` class attributes have been converted to snake case.


**Breaking changes:**

- Migrate iot cloud module to mashumaro [\python-kasa#1282](python-kasa#1282) (@sdb9696)
- Replace custom deviceconfig serialization with mashumaru [\python-kasa#1274](python-kasa#1274) (@sdb9696)
- Remove support for python \<3.11 [\python-kasa#1273](python-kasa#1273) (@sdb9696)

**Implemented enhancements:**

- Update cli modify presets to support smart devices [\python-kasa#1295](python-kasa#1295) (@sdb9696)
- Use credentials\_hash for smartcamera rtsp url [\python-kasa#1293](python-kasa#1293) (@sdb9696)
- Add voltage and current monitoring to smart Devices [\python-kasa#1281](python-kasa#1281) (@ryenitcher)
- Update cli feature command for actions not to require a value [\python-kasa#1264](python-kasa#1264) (@sdb9696)
- Add pan tilt camera module [\python-kasa#1261](python-kasa#1261) (@sdb9696)
- Add alarm module for smartcamera hubs [\python-kasa#1258](python-kasa#1258) (@sdb9696)
- Move TAPO smartcamera out of experimental package [\python-kasa#1255](python-kasa#1255) (@sdb9696)
- Add SmartCamera Led Module [\python-kasa#1249](python-kasa#1249) (@sdb9696)
- Use component queries to select smartcamera modules [\python-kasa#1248](python-kasa#1248) (@sdb9696)
- Print formatting for IotLightPreset [\python-kasa#1216](python-kasa#1216) (@Puxtril)
- Allow getting Annotated features from modules [\python-kasa#1018](python-kasa#1018) (@sdb9696)
- Add common Thermostat module [\python-kasa#977](python-kasa#977) (@sdb9696)

**Fixed bugs:**

- TP-Link Tapo S505D cannot disable gradual on/off  [\python-kasa#1309](python-kasa#1309)
- Inconsistent emeter information between features and emeter cli [\python-kasa#1308](python-kasa#1308)
- How to dump power usage after latest updates? [\python-kasa#1306](python-kasa#1306)
- kasa.discover: Got unsupported connection type: 'device\_family': 'SMART.IPCAMERA' [\python-kasa#1267](python-kasa#1267)
- device \_\_repr\_\_ fails if no sys\_info [\python-kasa#1262](python-kasa#1262)
- Tapo P110M: Error processing Energy for device, module will be unavailable: get\_energy\_usage for Energy  [\python-kasa#1243](python-kasa#1243)
- Listing light presets throws error [\python-kasa#1201](python-kasa#1201)
- Include duration when disabling smooth transition on/off [\python-kasa#1313](python-kasa#1313) (@rytilahti)
- Expose energy command to cli [\python-kasa#1307](python-kasa#1307) (@rytilahti)
- Make discovery on unsupported devices less noisy [\python-kasa#1291](python-kasa#1291) (@rytilahti)
- Fix repr for device created with no sysinfo or discovery info" [\python-kasa#1266](python-kasa#1266) (@sdb9696)
- Fix discovery by alias for smart devices [\python-kasa#1260](python-kasa#1260) (@sdb9696)
- Make \_\_repr\_\_ work on discovery info [\python-kasa#1233](python-kasa#1233) (@rytilahti)

**Added support for devices:**

- Add HS200 \(US\) Smart Fixture [\python-kasa#1303](python-kasa#1303) (@ZeliardM)
- Add smartcamera devices to supported docs [\python-kasa#1257](python-kasa#1257) (@sdb9696)
- Add P110M\(AU\) fixture [\python-kasa#1244](python-kasa#1244) (@rytilahti)
- Add L630 fixture [\python-kasa#1240](python-kasa#1240) (@rytilahti)
- Add EP40M Fixture [\python-kasa#1238](python-kasa#1238) (@ryenitcher)
- Add KS220 Fixture [\python-kasa#1237](python-kasa#1237) (@ryenitcher)

**Documentation updates:**

- Use markdown footnotes in supported.md [\python-kasa#1310](python-kasa#1310) (@sdb9696)
- Update docs for the new module attributes has/get feature [\python-kasa#1301](python-kasa#1301) (@sdb9696)
- Fixup contributing.md for running test against a real device [\python-kasa#1236](python-kasa#1236) (@sdb9696)

**Project maintenance:**

- Rename tests/smartcamera to tests/smartcam [\python-kasa#1315](python-kasa#1315) (@sdb9696)
- Do not error on smartcam hub attached smartcam child devices [\python-kasa#1314](python-kasa#1314) (@sdb9696)
- Add P110M\(EU\) fixture [\python-kasa#1305](python-kasa#1305) (@sdb9696)
- Run tests with caplog in a single worker [\python-kasa#1304](python-kasa#1304) (@sdb9696)
- Rename smartcamera to smartcam [\python-kasa#1300](python-kasa#1300) (@sdb9696)
- Move iot fixtures into iot subfolder [\python-kasa#1299](python-kasa#1299) (@sdb9696)
- Annotate fan\_speed\_level of Fan interface [\python-kasa#1298](python-kasa#1298) (@sdb9696)
- Add PIR ADC Values to Test Fixtures [\python-kasa#1296](python-kasa#1296) (@ryenitcher)
- Exclude \_\_getattr\_\_ for deprecated attributes from type checkers [\python-kasa#1294](python-kasa#1294) (@sdb9696)
- Simplify omit http\_client in DeviceConfig serialization [\python-kasa#1292](python-kasa#1292) (@sdb9696)
- Add SMART Voltage Monitoring to Fixtures [\python-kasa#1290](python-kasa#1290) (@ryenitcher)
- Remove pydantic dependency [\python-kasa#1289](python-kasa#1289) (@sdb9696)
- Do not print out all the fixture names at the start of test runs [\python-kasa#1287](python-kasa#1287) (@sdb9696)
- dump\_devinfo: iot light strip commands [\python-kasa#1286](python-kasa#1286) (@sdb9696)
- Migrate TurnOnBehaviours to mashumaro [\python-kasa#1285](python-kasa#1285) (@sdb9696)
- dump\_devinfo: query smartlife.iot.common.cloud for fw updates [\python-kasa#1284](python-kasa#1284) (@rytilahti)
- Migrate RuleModule to mashumaro [\python-kasa#1283](python-kasa#1283) (@sdb9696)
- Update sphinx dependency to 6.2 to fix docs build [\python-kasa#1280](python-kasa#1280) (@sdb9696)
- Update DiscoveryResult to use mashu Annotated Alias [\python-kasa#1279](python-kasa#1279) (@sdb9696)
- Extend dump\_devinfo iot queries [\python-kasa#1278](python-kasa#1278) (@sdb9696)
- Migrate triggerlogs to mashumaru [\python-kasa#1277](python-kasa#1277) (@sdb9696)
- Migrate smart firmware module to mashumaro [\python-kasa#1276](python-kasa#1276) (@sdb9696)
- Migrate IotLightPreset to mashumaru [\python-kasa#1275](python-kasa#1275) (@sdb9696)
- Allow callable coroutines for feature setters [\python-kasa#1272](python-kasa#1272) (@sdb9696)
- Fix deprecated SSLContext\(\) usage [\python-kasa#1271](python-kasa#1271) (@sdb9696)
- Use \_get\_device\_info methods for smart and iot devs in devtools [\python-kasa#1265](python-kasa#1265) (@sdb9696)
- Remove experimental support [\python-kasa#1256](python-kasa#1256) (@sdb9696)
- Move protocol modules into protocols package [\python-kasa#1254](python-kasa#1254) (@sdb9696)
- Add linkcheck to readthedocs CI [\python-kasa#1253](python-kasa#1253) (@rytilahti)
- Update cli energy command to use energy module [\python-kasa#1252](python-kasa#1252) (@sdb9696)
- Consolidate warnings for fixtures missing child devices [\python-kasa#1251](python-kasa#1251) (@sdb9696)
- Update smartcamera fixtures with components [\python-kasa#1250](python-kasa#1250) (@sdb9696)
- Move transports into their own package [\python-kasa#1247](python-kasa#1247) (@rytilahti)
- Fix warnings in our test suite [\python-kasa#1246](python-kasa#1246) (@rytilahti)
- Move tests folder to top level of project [\python-kasa#1242](python-kasa#1242) (@sdb9696)
- Fix test framework running against real devices [\python-kasa#1235](python-kasa#1235) (@sdb9696)
- Add Additional Firmware Test Fixures [\python-kasa#1234](python-kasa#1234) (@ryenitcher)
- Update DiscoveryResult to use Mashumaro instead of pydantic [\python-kasa#1231](python-kasa#1231) (@sdb9696)
- Update fixture for ES20M 1.0.11 [\python-kasa#1215](python-kasa#1215) (@rytilahti)
- Enable ruff check for ANN [\python-kasa#1139](python-kasa#1139) (@rytilahti)

**Closed issues:**

- Expose Fan speed range from the library [\python-kasa#1008](python-kasa#1008)
- \[META\] 0.7 series - module support for SMART devices, support for introspectable device features and refactoring the library [\python-kasa#783](python-kasa#783)
pillarsdotnet pushed a commit to pillarsdotnet/python-kasa that referenced this pull request Oct 22, 2026
@sdb9696 @rytilahti
Add pan tilt camera module (python-kasa#1261)
9fe642a
Add ptz controls for smartcameras.

---------

Co-authored-by: Teemu R. <[email protected]>
pillarsdotnet pushed a commit to pillarsdotnet/python-kasa that referenced this pull request Oct 22, 2026
@sdb9696
Prepare 0.8.0 (python-kasa#1312)
9860ad8
## [0.8.0](https://github.com/python-kasa/python-kasa/tree/0.8.0) (2024-11-26)

[Full Changelog](python-kasa/python-kasa@0.7.7...0.8.0)

**Release highlights:**

- **Initial support for devices using the Tapo camera protocol, i.e. Tapo cameras and the Tapo H200 hub.**
- New camera functionality such as exposing RTSP streaming urls and camera pan/tilt.
- New way of testing module support for individual features with `has_feature` and `get_feature`.
- Adding voltage and current monitoring to `smart` devices.
- Migration from pydantic to mashumaro for serialization.

Special thanks to @ryenitcher and @Puxtril for their new contributions to the improvement of the project! Also thanks to everyone who has helped with testing, contributing fixtures, and reporting issues!

**Breaking change notes:**

- Removed support for python <3.11. If you haven't got a compatible version try [uv](https://docs.astral.sh/uv/).
- Renamed `device_config.to_dict()` to `device_config.to_dict_control_credentials()`. `to_dict()` is still available but takes no parameters.
- From the `iot.Cloud` module the `iot.CloudInfo` class attributes have been converted to snake case.


**Breaking changes:**

- Migrate iot cloud module to mashumaro [\python-kasa#1282](python-kasa#1282) (@sdb9696)
- Replace custom deviceconfig serialization with mashumaru [\python-kasa#1274](python-kasa#1274) (@sdb9696)
- Remove support for python \<3.11 [\python-kasa#1273](python-kasa#1273) (@sdb9696)

**Implemented enhancements:**

- Update cli modify presets to support smart devices [\python-kasa#1295](python-kasa#1295) (@sdb9696)
- Use credentials\_hash for smartcamera rtsp url [\python-kasa#1293](python-kasa#1293) (@sdb9696)
- Add voltage and current monitoring to smart Devices [\python-kasa#1281](python-kasa#1281) (@ryenitcher)
- Update cli feature command for actions not to require a value [\python-kasa#1264](python-kasa#1264) (@sdb9696)
- Add pan tilt camera module [\python-kasa#1261](python-kasa#1261) (@sdb9696)
- Add alarm module for smartcamera hubs [\python-kasa#1258](python-kasa#1258) (@sdb9696)
- Move TAPO smartcamera out of experimental package [\python-kasa#1255](python-kasa#1255) (@sdb9696)
- Add SmartCamera Led Module [\python-kasa#1249](python-kasa#1249) (@sdb9696)
- Use component queries to select smartcamera modules [\python-kasa#1248](python-kasa#1248) (@sdb9696)
- Print formatting for IotLightPreset [\python-kasa#1216](python-kasa#1216) (@Puxtril)
- Allow getting Annotated features from modules [\python-kasa#1018](python-kasa#1018) (@sdb9696)
- Add common Thermostat module [\python-kasa#977](python-kasa#977) (@sdb9696)

**Fixed bugs:**

- TP-Link Tapo S505D cannot disable gradual on/off  [\python-kasa#1309](python-kasa#1309)
- Inconsistent emeter information between features and emeter cli [\python-kasa#1308](python-kasa#1308)
- How to dump power usage after latest updates? [\python-kasa#1306](python-kasa#1306)
- kasa.discover: Got unsupported connection type: 'device\_family': 'SMART.IPCAMERA' [\python-kasa#1267](python-kasa#1267)
- device \_\_repr\_\_ fails if no sys\_info [\python-kasa#1262](python-kasa#1262)
- Tapo P110M: Error processing Energy for device, module will be unavailable: get\_energy\_usage for Energy  [\python-kasa#1243](python-kasa#1243)
- Listing light presets throws error [\python-kasa#1201](python-kasa#1201)
- Include duration when disabling smooth transition on/off [\python-kasa#1313](python-kasa#1313) (@rytilahti)
- Expose energy command to cli [\python-kasa#1307](python-kasa#1307) (@rytilahti)
- Make discovery on unsupported devices less noisy [\python-kasa#1291](python-kasa#1291) (@rytilahti)
- Fix repr for device created with no sysinfo or discovery info" [\python-kasa#1266](python-kasa#1266) (@sdb9696)
- Fix discovery by alias for smart devices [\python-kasa#1260](python-kasa#1260) (@sdb9696)
- Make \_\_repr\_\_ work on discovery info [\python-kasa#1233](python-kasa#1233) (@rytilahti)

**Added support for devices:**

- Add HS200 \(US\) Smart Fixture [\python-kasa#1303](python-kasa#1303) (@ZeliardM)
- Add smartcamera devices to supported docs [\python-kasa#1257](python-kasa#1257) (@sdb9696)
- Add P110M\(AU\) fixture [\python-kasa#1244](python-kasa#1244) (@rytilahti)
- Add L630 fixture [\python-kasa#1240](python-kasa#1240) (@rytilahti)
- Add EP40M Fixture [\python-kasa#1238](python-kasa#1238) (@ryenitcher)
- Add KS220 Fixture [\python-kasa#1237](python-kasa#1237) (@ryenitcher)

**Documentation updates:**

- Use markdown footnotes in supported.md [\python-kasa#1310](python-kasa#1310) (@sdb9696)
- Update docs for the new module attributes has/get feature [\python-kasa#1301](python-kasa#1301) (@sdb9696)
- Fixup contributing.md for running test against a real device [\python-kasa#1236](python-kasa#1236) (@sdb9696)

**Project maintenance:**

- Rename tests/smartcamera to tests/smartcam [\python-kasa#1315](python-kasa#1315) (@sdb9696)
- Do not error on smartcam hub attached smartcam child devices [\python-kasa#1314](python-kasa#1314) (@sdb9696)
- Add P110M\(EU\) fixture [\python-kasa#1305](python-kasa#1305) (@sdb9696)
- Run tests with caplog in a single worker [\python-kasa#1304](python-kasa#1304) (@sdb9696)
- Rename smartcamera to smartcam [\python-kasa#1300](python-kasa#1300) (@sdb9696)
- Move iot fixtures into iot subfolder [\python-kasa#1299](python-kasa#1299) (@sdb9696)
- Annotate fan\_speed\_level of Fan interface [\python-kasa#1298](python-kasa#1298) (@sdb9696)
- Add PIR ADC Values to Test Fixtures [\python-kasa#1296](python-kasa#1296) (@ryenitcher)
- Exclude \_\_getattr\_\_ for deprecated attributes from type checkers [\python-kasa#1294](python-kasa#1294) (@sdb9696)
- Simplify omit http\_client in DeviceConfig serialization [\python-kasa#1292](python-kasa#1292) (@sdb9696)
- Add SMART Voltage Monitoring to Fixtures [\python-kasa#1290](python-kasa#1290) (@ryenitcher)
- Remove pydantic dependency [\python-kasa#1289](python-kasa#1289) (@sdb9696)
- Do not print out all the fixture names at the start of test runs [\python-kasa#1287](python-kasa#1287) (@sdb9696)
- dump\_devinfo: iot light strip commands [\python-kasa#1286](python-kasa#1286) (@sdb9696)
- Migrate TurnOnBehaviours to mashumaro [\python-kasa#1285](python-kasa#1285) (@sdb9696)
- dump\_devinfo: query smartlife.iot.common.cloud for fw updates [\python-kasa#1284](python-kasa#1284) (@rytilahti)
- Migrate RuleModule to mashumaro [\python-kasa#1283](python-kasa#1283) (@sdb9696)
- Update sphinx dependency to 6.2 to fix docs build [\python-kasa#1280](python-kasa#1280) (@sdb9696)
- Update DiscoveryResult to use mashu Annotated Alias [\python-kasa#1279](python-kasa#1279) (@sdb9696)
- Extend dump\_devinfo iot queries [\python-kasa#1278](python-kasa#1278) (@sdb9696)
- Migrate triggerlogs to mashumaru [\python-kasa#1277](python-kasa#1277) (@sdb9696)
- Migrate smart firmware module to mashumaro [\python-kasa#1276](python-kasa#1276) (@sdb9696)
- Migrate IotLightPreset to mashumaru [\python-kasa#1275](python-kasa#1275) (@sdb9696)
- Allow callable coroutines for feature setters [\python-kasa#1272](python-kasa#1272) (@sdb9696)
- Fix deprecated SSLContext\(\) usage [\python-kasa#1271](python-kasa#1271) (@sdb9696)
- Use \_get\_device\_info methods for smart and iot devs in devtools [\python-kasa#1265](python-kasa#1265) (@sdb9696)
- Remove experimental support [\python-kasa#1256](python-kasa#1256) (@sdb9696)
- Move protocol modules into protocols package [\python-kasa#1254](python-kasa#1254) (@sdb9696)
- Add linkcheck to readthedocs CI [\python-kasa#1253](python-kasa#1253) (@rytilahti)
- Update cli energy command to use energy module [\python-kasa#1252](python-kasa#1252) (@sdb9696)
- Consolidate warnings for fixtures missing child devices [\python-kasa#1251](python-kasa#1251) (@sdb9696)
- Update smartcamera fixtures with components [\python-kasa#1250](python-kasa#1250) (@sdb9696)
- Move transports into their own package [\python-kasa#1247](python-kasa#1247) (@rytilahti)
- Fix warnings in our test suite [\python-kasa#1246](python-kasa#1246) (@rytilahti)
- Move tests folder to top level of project [\python-kasa#1242](python-kasa#1242) (@sdb9696)
- Fix test framework running against real devices [\python-kasa#1235](python-kasa#1235) (@sdb9696)
- Add Additional Firmware Test Fixures [\python-kasa#1234](python-kasa#1234) (@ryenitcher)
- Update DiscoveryResult to use Mashumaro instead of pydantic [\python-kasa#1231](python-kasa#1231) (@sdb9696)
- Update fixture for ES20M 1.0.11 [\python-kasa#1215](python-kasa#1215) (@rytilahti)
- Enable ruff check for ANN [\python-kasa#1139](python-kasa#1139) (@rytilahti)

**Closed issues:**

- Expose Fan speed range from the library [\python-kasa#1008](python-kasa#1008)
- \[META\] 0.7 series - module support for SMART devices, support for introspectable device features and refactoring the library [\python-kasa#783](python-kasa#783)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@rytilahti rytilahti rytilahti approved these changes

Uh oh!

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

Assignees

No one assigned

Labels

enhancement New feature or request

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

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

2 participants

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