Tapo v0.9.0
Rust
Added
ApiClient::discover_devices: added support for SmartCam devices (e.g. IP cameras) via the AES SSL protocol. They are now discovered and listed asDiscoveryResult::CameraPtz(for PTZ models) orDiscoveryResult::Otherinstead of failing with an error.CameraPtzHandler: added handler for Tapo PTZ cameras (C210, C220, C225, C325WB, C520WS, TC40, TC70) withget_device_info,get_rtsp_stream_url,get_snapshot,pan_tilt,save_preset,goto_preset,delete_preset, andget_presetsmethods. Usec210,c220,c225,c325wb,c520ws,tc40, ortc70on theApiClientto create it.DiscoveryResult::CameraPtz: added variant exposingdevice_info,handler, andipwhen a supported PTZ camera is discovered.HubHandler: added support for S210 light switches withon,off, andget_device_usage. Uses210on the hub to create theS210Handler.OtherResult: added catch-all result type for unsupported hub child devices, containingdevice_id,model, andnickname.KE100Result,S200Result,T100Result,T110Result,T300Result,T31XResult: addedmodelfield.json-schemafeature: added optionalschemars::JsonSchemaderive onColorfor use with MCP or other JSON Schema tooling.ApiClient::discover_devices_raw: added raw device discovery (behinddebugfeature) that returns the IP address of the devices found and their discovery JSON response.
Changed
ChildDeviceHubResult::Other: changed from a unit variant toOther(Box<OtherResult>), exposing device info for unrecognized models.ApiClient::discover_devices: sped up discovery by inferring the authentication protocol (KLAP or AES) from the discovery message instead of probing the device.DiscoveryResult::GenericDevice: renamed toDiscoveryResult::Other. Removedhandlerfield, addedipfield.DeviceType::GenericDevice: renamed toDeviceType::Other.DeviceInfoGenericResult: renamed toDeviceInfoBasicResult.DeviceInfoPowerStripResult: changedtime_difffromi64toOption<i64>for consistency with other device info types.DeviceInfoBasicResult: removeddevice_on,on_time,ip,fw_id,hw_id,lang,rssi,signal_level,specs,ssid, andtime_difffields. ChangednicknametoOption<String>. Added serde aliases for SmartCam field name compatibility.
Fixed
AesSslProtocol,KlapProtocol: downgradederror!log calls todebug!on request, handshake, and authentication failures. The same information is already returned as anErrvalue, so theerror!logs were duplicate reporting.
Removed
GenericDeviceHandler: removed. Use a specific handler type (e.g.l530,p110) instead.ApiClient::generic_device: removed method for creating aGenericDeviceHandler.
Python
Added
ApiClient.discover_devices: added support for SmartCam devices (e.g. IP cameras) via the AES SSL protocol. They are now discovered and listed asDiscoveryResult.CameraPtz(for PTZ models) orDiscoveryResult.Otherinstead of failing with an error.CameraPtzHandler: added handler for Tapo PTZ cameras (C210, C220, C225, C325WB, C520WS, TC40, TC70) withget_device_info,get_rtsp_stream_url,get_snapshot,pan_tilt,save_preset,goto_preset,delete_preset, andget_presetsmethods. Usec210,c220,c225,c325wb,c520ws,tc40, ortc70on theApiClientto create it.DiscoveryResult.CameraPtz: added variant exposingdevice_info,handler, andipwhen a supported PTZ camera is discovered.HubHandler: added support for S210 light switches withon,off, andget_device_usage. Uses210on the hub to create theS210Handler.OtherResult: added catch-all result type for unsupported hub child devices, containingdevice_id,model, andnickname.KE100Result,S200Result,T100Result,T110Result,T300Result,T31XResult: addedmodelfield.ApiClient.discover_devices_raw: added raw device discovery that returns the IP address of the devices found and their discovery JSON response.
Changed
HubHandler: changedget_child_device_list()to returnOtherResultinstead ofNonefor unsupported devices.ApiClient.discover_devices: sped up discovery by inferring the authentication protocol (KLAP or AES) from the discovery message instead of probing the device.DiscoveryResult.GenericDevice: renamed toDiscoveryResult.Other. Removedhandlerfield, addedipfield.DeviceType.GenericDevice: renamed toDeviceType.Other.DeviceInfoGenericResult: renamed toDeviceInfoBasicResult.DeviceInfoBasicResult: removeddevice_on,on_time,ip,fw_id,hw_id,lang,rssi,signal_level,specs,ssid, andtime_difffields. ChangednicknametoOptional[str]. No longer inherits fromDeviceInfoSmartExt; all fields are now declared directly.
Fixed
DeviceInfoRgbLightStripResult,DeviceInfoRgbicLightStripResult: removed incorrecton_timefield from.pyistubs (not present in Rust type).Logging: stopped emittingerror-level Rust logs on stderr for request failures, handshake errors, and session expiry. The same information is already raised as a Python exception; these messages are now emitted atdebuglevel instead.
Removed
GenericDeviceHandler: removed. Use a specific handler type (e.g.l530,p110) instead.ApiClient.generic_device: removed method for creating aGenericDeviceHandler.
Full Changelog: v0.8.12...v0.9.0