- Fork tapo crate to add missing schedule/timer APIs - Add get_countdown_rules, get_schedule_rules, get_next_event methods - New readings: countdown_active, countdown_remain, schedule_count, schedule_active_count, next_event_time - Add local compilation to build script alongside cross-compilation - Implement offline polling - device collection continues when server disconnects - Add more device readings: on_time, signal_level, rssi, runtime_today/month, energy_month Vendored tapo fork in tapo-fork/ with minimal changes to add schedule APIs.
34 KiB
34 KiB
Change Log
All notable changes to this project will be documented in this file. This change log follows the conventions of keepachangelog.com.
Rust Unreleased
Python Unreleased
[Rust v0.8.8][v0.8.8] - 2025-11-23
Added
TapoResponseError: addedForbiddenvariant to represent authentication failures when Third-Party Compatibility is disabled in the Tapo app.
Changed
TapoResponseError: renamed variantInvalidCredentialstoUnauthorizedand updated the variant to includecodeanddescriptionfor improved error context.
[Python v0.8.8][v0.8.8] - 2025-11-23
Added
TapoException: addedForbiddenvariant to represent authentication failures when Third-Party Compatibility is disabled in the Tapo app.
Changed
TapoException: renamed variantInvalidCredentialstoUnauthorizedand updated the variant to includecodeanddescriptionfor improved error context.
Removed
- Dropped support for Python 3.9 and 3.10 (both no longer supported upstream). The minimum required version is now Python 3.11.
Rust v0.8.7 - 2025-11-01
Added
HubHandler: added thedevice_rebootanddevice_resetmethods.PowerStripEnergyMonitoringHandler: added thedevice_rebootanddevice_resetmethods.PowerStripHandler: added thedevice_rebootanddevice_resetmethods.ColorLightHandler: added thedevice_rebootmethod.LightHandler: added thedevice_rebootmethod.PlugEnergyMonitoringHandler: added thedevice_rebootmethod.PlugHandler: added thedevice_rebootmethod.RgbicLightStripHandler: added thedevice_rebootmethod.RgbLightStripHandler: added thedevice_rebootmethod.
Changed
device_reset: now requires theDeviceManagementExttrait to be in scope. The newly addeddevice_rebootmethod also requires this trait.
Python v0.8.7 - 2025-11-01
Added
tapo: added support for Python 3.14.HubHandler: added thedevice_rebootanddevice_resetmethods.PowerStripEnergyMonitoringHandler: added thedevice_rebootanddevice_resetmethods.PowerStripHandler: added thedevice_rebootanddevice_resetmethods.ColorLightHandler: added thedevice_rebootmethod.LightHandler: added thedevice_rebootmethod.PlugEnergyMonitoringHandler: added thedevice_rebootmethod.PlugHandler: added thedevice_rebootmethod.RgbicLightStripHandler: added thedevice_rebootmethod.RgbLightStripHandler: added thedevice_rebootmethod.
Rust v0.8.6 - 2025-09-25
Added
PlugEnergyMonitoringHandler: addedget_power_datamethod to retrieve historical power data (every 5 minutes & hourly) for energy-monitoring plugs (P110, P110M, P115). ThePowerDataIntervalenum allows specifying the desired interval.PowerStripPlugEnergyMonitoringHandler: added the following energy monitoring methods:get_current_power,get_device_usage,get_energy_usage,get_energy_data,get_power_data.
Changed
PlugEnergyMonitoringHandler:EnergyDataResulthas been redesigned to provide better ergonomics by attaching a start date time to each interval entry.
Removed
EnergyUsageResult: thecurrent_powerfield has been removed from the struct because not all energy-monitoring plugs provide this data. Instead, use theget_current_powermethod to retrieve the current power.
Python v0.8.6 - 2025-09-25
Added
PlugEnergyMonitoringHandler: addedget_power_datamethod to retrieve historical power data (every 5 minutes & hourly) for energy-monitoring plugs (P110, P110M, P115). ThePowerDataIntervalenum allows specifying the desired interval.PowerStripPlugEnergyMonitoringHandler: added the following energy monitoring methods:get_current_power,get_device_usage,get_energy_usage,get_energy_data,get_power_data.
Changed
PlugEnergyMonitoringHandler:EnergyDataResulthas been redesigned to provide better ergonomics by attaching a start date time to each interval entry.
Removed
EnergyUsageResult: thecurrent_powerfield has been removed from the class because not all energy-monitoring plugs provide this data. Instead, use theget_current_powermethod to retrieve the current power.
Rust v0.8.5 - 2025-09-18
Added
ApiClient: addeddiscover_devicesmethod to discover all Tapo devices on the local network. This works even with dynamic or unknown IPs, but is slower since it scans the entire network and waits for device responses.PowerStripPlugHandler: added support for P306 power strips.- Added
PowerStripEnergyMonitoringHandler,PowerStripPlugEnergyMonitoringHandler, andPowerStripPlugEnergyMonitoringResultto support energy-monitoring power strips (P304M, P316M). Non-monitoring models (P300, P306) will continue using the pre-existingPowerStripPlugHandler. PowerStripPlugResult: addeddefault_statesfield.
Changed
DeviceInfoPowerStripResult: changedtime_difffromOption<i64>toi64.
Fixed
PowerStripPlugResult: removedcharging_status,overcurrent_status, andpower_protection_status(not returned by P300/P306).
Python v0.8.5 - 2025-09-18
Added
ApiClient: addeddiscover_devicesmethod to discover all Tapo devices on the local network. This works even with dynamic or unknown IPs, but is slower since it scans the entire network and waits for device responses.PowerStripPlugHandler: added support for P306 power strips.- Added
PowerStripEnergyMonitoringHandler,PowerStripPlugEnergyMonitoringHandler, andPowerStripPlugEnergyMonitoringResultto support energy-monitoring power strips (P304M, P316M). Non-monitoring models (P300, P306) will continue using the pre-existingPowerStripPlugHandler. PowerStripPlugResult: addeddefault_statesfield.
Changed
DeviceInfoPowerStripResult: changedtime_difffromOptional[int]toint.
Fixed
PowerStripPlugResult: removedcharging_status,overcurrent_status, andpower_protection_status(not returned by P300/P306).
Rust v0.8.4 - 2025-08-11
Added
- The
default_statesproperty has been added to theDeviceInfoPlugResultstruct to provide a more comprehensive overview of the plug's state.
Fixed
- The
default_statesproperty value of theDeviceInfoPlugEnergyMonitoringResultstruct has been changed from a struct to an enum to better reflect the actual response from the device.
Python v0.8.4 - 2025-08-11
Added
- The
default_statesproperty has been added to theDeviceInfoPlugResultclass to provide a more comprehensive overview of the plug's state.
Fixed
- The
default_statesproperty value of theDeviceInfoPlugEnergyMonitoringResultclass has been changed from a class to an enum to better reflect the actual response from the device.
Rust v0.8.3 - 2025-07-25
Added
- Added support for the P316M power strips.
- The
charging_status,overcurrent_status, andpower_protection_statusfields have been added toPowerStripPlugResult.
Changed
- Enhanced the
InvalidCredentialserror with clearer guidance on common causes and how to address them. - The
overheat_statusfield inPowerStripPlugResultis now optional to support devices that omit this field.
Removed
- Removed
nicknamefromDeviceInfoPowerStripResultbecause it is not present in the response.
Python v0.8.3 - 2025-07-25
Added
- Added support for the P316M power strips.
- The
charging_status,overcurrent_status, andpower_protection_statusfields have been added toPowerStripPlugResult.
Changed
- Enhanced the
InvalidCredentialserror with clearer guidance on common causes and how to address them. - The
overheat_statusfield inPowerStripPlugResultis now optional to support devices that omit this field.
Removed
- Removed
nicknamefromDeviceInfoPowerStripResultbecause it is not present in the response.
Rust v0.8.2 - 2025-05-19
Added
- The
charging_statusfield has been added toDeviceInfoPlugEnergyMonitoringResult.
Changed
- The
overheat_statusfield inDeviceInfoPlugEnergyMonitoringResultis now optional to support devices that omit this field after the latest firmware update (1.3.4 Build 250403 Rel.150504).
Python v0.8.2 - 2025-05-19
Added
- The
charging_statusfield has been added toDeviceInfoPlugEnergyMonitoringResult.
Changed
- The
overheat_statusfield inDeviceInfoPlugEnergyMonitoringResultis now optional to support devices that omit this field after the latest firmware update (1.3.4 Build 250403 Rel.150504).
Rust v0.8.1 - 2025-02-10
Added
- Added functionality for controlling the alarm on the H100 hub via the
play_alarmandstop_alarmmethods in theH100Handler. Additionally,get_supported_ringtone_listis available to retrieve the list of supported ringtones for debugging purposes. (thanks to @kay) - Added the ability to retrieve the color configuration (
hue,saturation,color_temperature) for theColorenum values through theget_color_configmethod. (thanks to @WhySoBad)
Changed
- The internal implementation of
H100Handler'sget_child_device_listhas been updated to fetch all pages, not just the first one. H100Handler'sget_child_device_list_jsonnow includes astart_indexparameter to fetch child devices starting from a specific index.
Fixed
- Resolved an issue that caused the passthrough protocol test to incorrectly indicate support when it was not actually supported. (thanks to @WhySoBad)
Python v0.8.1 - 2025-02-10
Added
- Added functionality for controlling the alarm on the H100 hub via the
play_alarmandstop_alarmmethods in theH100Handler. Additionally,get_supported_ringtone_listis available to retrieve the list of supported ringtones for debugging purposes. - Added the ability to retrieve the color configuration (
hue,saturation,color_temperature) for theColorenum values through theget_color_configmethod. (thanks to @WhySoBad)
Changed
- The internal implementation of
H100Handler'sget_child_device_listhas been updated to fetch all pages, not just the first one. H100Handler'sget_child_device_list_jsonnow includes astart_indexparameter to fetch child devices starting from a specific index.
Fixed
- Resolved an issue that caused the passthrough protocol test to incorrectly indicate support when it was not actually supported. (thanks to @WhySoBad)
Rust v0.8.0 - 2024-12-07
This marks the first unified release of the Rust and Python libraries. Moving forward, both libraries will be released simultaneously and will share the same version number.
Added
- Added an example for the L900 light strips.
Changed
LightingEffect'sfadeofffield has been renamed tofade_off, and itswith_fadeoffmethod has been renamed towith_fade_off.LightingEffect'snew_with_random_idfunction has been removed. Thenewfunction now creates aLightingEffectinstance with a random ID by default.
Python v0.8.0 - 2024-12-07
Added
- Added support for the L900 light strips.
- Added support for the L920 and L930 light strips.
- Added support for Python 3.13.
Python v0.7.0 - 2024-11-07
Added
- Added support for the KE100 thermostatic radiator valve (TRV).
Rust v0.7.17 - 2024-10-23
Added
- Added support for the P304 power strip.
Changed
- The
openssldependency has been replaced with native Rust alternatives to expand cross-compilation options, such as for Android, and to decrease build times (thanks to @rbock44). PlugPowerStripHandlerhas been renamed toPowerStripPlugHandlerto be consistent with the rest of the library.PlugPowerStripResulthas been renamed toPowerStripPlugResultto be consistent with the rest of the library.- The
UsageByPeriodResultfieldstoday,past7, andpast30have been updated toOption<u64>to handle cases where the API returns negative values, which will be represented asNone.
Fixed
- Updated all comments referencing Watts to confirm the correct units are specified.
Python v0.6.0 - 2024-10-23
Added
- Added support for the P300 and P304 power strips.
- Python logs can now capture entries from the underlying Rust library.
Changed
- The
openssldependency has been replaced with native Rust alternatives to expand cross-compilation options, such as for Android, and to decrease build times (thanks to @rbock44). - The
UsageByPeriodResultfieldstoday,past7, andpast30have been updated toOptional[int]to handle cases where the API returns negative values, which will be represented asnull.
Fixed
- Updated all comments referencing Watts to confirm the correct units are specified.
Rust v0.7.16 - 2024-09-27
Added
- Added support for the L535 light bulbs.
Fixed
- Fixed an issue that prevented the color from being set properly for the L535 light bulbs.
Python v0.5.1 - 2024-09-27
Added
- Added support for the L535 light bulbs.
Fixed
- Fixed an issue that prevented the color from being set properly for the L535 light bulbs.
Rust v0.7.15 - 2024-09-18
Added
- The
LowBatteryvariant has been added to theS200BLogenum.
Changed
- The
t310andt315methods ofHubHandlercan now createT31XHandlerhandlers for either of the two device types. - The child device handlers for the H100 hub and the P300 power strip have been redesigned to eliminate the use of lifetimes, to facilitate FFI integrations.
- The comments of
start_timestampandend_timestampfields inEnergyDataResulthave been updated to better describe their purpose. S200BRotationParams's fielddegreeshas been renamed torotation_degrees.
Fixed
- Fixed an issue with the
Colorpresets that triggered a validation error when attempting to set thecolortoDarkRed.
Removed
- The deprecated
past24h,past7d,past30dandpast1yfields have been removed fromEnergyUsageResult. This data is now available exclusively throughget_energy_data'sEnergyDataResultresponse.
Python v0.5.0 - 2024-09-18
Added
- Added full support for the S200B switches through the
S200BHandlerhandler. - Added full support for the T100 sensors through the
T100Handlerhandler. - Added full support for the T110 sensors through the
T110Handlerhandler. - Added full support for the T300 sensors through the
T300Handlerhandler. - Added full support for the T310 and T315 sensors through the
T31XHandlerhandler.
Changed
- The comments of
start_timestampandend_timestampfields inEnergyDataResulthave been updated to better describe their purpose.
Fixed
- Fixed an issue with the
Colorpresets that triggered a validation error when attempting to set thecolortoDarkRed.
Rust v0.7.14 - 2024-08-31
Changed
DeviceInfoPlugEnergyMonitoringResulthas been added to support the P110 and P115 devices, which have different responses compared to the P100 and P105 devices.
Fixed
DeviceInfoPlugResulthas been updated to correctly support the P100 and P105 devices.
Python v0.4.0 - 2024-08-31
Changed
DeviceInfoPlugEnergyMonitoringResulthas been added to support the P110 and P115 devices, which have different responses compared to the P100 and P105 devices.
Fixed
- Resolved an issue that led to unrecoverable process hangs when a device request timed out.
- The concurrency of device handlers has been significantly enhanced by replacing all
Mutexinstances withRwLock. DeviceInfoPlugResulthas been updated to correctly support the P100 and P105 devices.
Rust v0.7.13 - 2024-08-26
Changed
- To align with the latest API updates, the
overheatedfield for plugs has been replaced by three enums:overcurrent_status,overheat_status, andpower_protection_status(thanks to @padenot).
Python v0.3.2 - 2024-08-26
Changed
- To align with the latest API updates, the
overheatedfield for plugs has been replaced by three enums:overcurrent_status,overheat_status, andpower_protection_status.
Rust v0.7.12 - 2024-06-27
Changed
- H100's create child device handler methods now take a
HubDeviceenuminstead of aStringand are nowasyncto allow for more flexibility. This enables the caller to find child devices by either device ID or nickname. PlugIdentifierhas been renamed toPlug.Plug::ByDeviceIdnow verifies that the provided device ID is found and returns anError::DeviceNotFounderror when it's not.HubDevicevariants now take aStringinstead of a&strto allow for more flexibility.Plugvariants now take aStringinstead of a&strto allow for more flexibility.
Fixed
ColorLightSetDeviceInfoParamshuefield validation has been changed frombetween 1 and 360tobetween 0 and 360to match the device's expected range.- Fixed an issue where the
EnergyDataResult'sstart_timestampandend_timestampdid not correctly adjust for timezone offsets. - The
chronodependency has been updated to0.4.34to fix the minimum version requirement.
Removed
- The
overheatedproperty has been removed fromDeviceInfoGenericResultbecause it's not present in the response of all devices.
Python v0.3.1 - 2024-06-27
Fixed
ColorLightSetDeviceInfoParamshuefield validation has been changed frombetween 1 and 360tobetween 0 and 360to match the device's expected range.- Fixed an issue where the
EnergyDataResult'sstart_timestampandend_timestampdid not correctly adjust for timezone offsets. - All handlers are now correctly exported and can be imported from the
tapomodule.
Removed
- The
overheatedproperty has been removed fromDeviceInfoGenericResultbecause it's not present in the response of all devices.
Rust v0.7.11 - 2024-05-04
Added
- Added support for the P300 power strip (thanks to @Michal-Szczepaniak).
RgbLightStripHandlerandDeviceInfoRgbLightStripResulthave been added to support the L900 devices separately from the L530 and L630 devices.
Changed
ChildDeviceResulthas been renamed toChildDeviceHubResultto facilitate adding support for other devices with children.ColorLightStripHandlerhas been renamed toRgbicLightStripHandlerto better reflect its purpose.DeviceInfoColorLightStripResulthas been renamed toDeviceInfoRgbicLightStripResultto better reflect its purpose.
Python v0.3.0 - 2024-05-04
Added
- Added partial support for the H100 hub and its child devices. Currently, only the
get_device_infofunction is supported for the child devices through the hub'sget_child_device_listmethod.
Changed
- A large number of types have been reorganized to me more in line with the Rust library. This includes moving many of them under the
requestsandresponsessub modules.
Removed
l900has been removed from theApiClientuntil proper support is added.
Rust v0.7.10 - 2024-04-05
Changed
- The implementation of
ApiClient::newhas been improved to allow for the return ofApiClientinstead ofResult<ApiClient, Error>. - The default timeout for all requests has been reduced to 30 seconds from 300 seconds.
ApiClient::with_timeouthas been added to allow for the setting of a custom timeout for all requests (thanks to @skoky).
Python v0.2.1 - 2024-04-05
Changed
- The default timeout for all requests has been reduced to 30 seconds from 300 seconds.
- The
timeout_soptional parameter has been added to theApiClientconstructor to allow for the setting of a custom timeout for all requests (thanks to @skoky).
Rust v0.7.9 - 2024-01-27
Changed
- The
send()method of the.set()API now takes a reference to the device handler in order to allow for better ergonomics.
Fixed
- The device info response for the L510, L520, and L610 devices has been fixed.
Python v0.2.0 - 2024-01-27
Added
- Added support for the L530, L630, and L900 color light bulbs.
Fixed
- Fixed a misconfiguration that was preventing the sdist package from working properly.
- The device info response for the L510, L520, and L610 devices has been fixed.
Rust v0.7.8 - 2024-01-22
Added
- Added the
device_resetmethod to all plugs and lights.
Fixed
- The device info response for the L510, L520, and L610 devices has been fixed to have the
re_power_typefield as optional.
Python v0.1.5 - 2024-01-22
Added
- Added the
device_resetmethod to all plugs and lights.
Fixed
- The device info response for the L510, L520, and L610 devices has been fixed to have the
re_power_typefield as optional.
Rust v0.7.7 - 2024-01-13
Changed
- The
anyhow::anyhow!("Local hash does not match server hash")error has been replaced with the more specifictapo::TapoResponseError::InvalidCredentialserror.
Fixed
- The
default_statesfield that's part of the device info response has been changed for the L510, L520, and L610 devices to match the actual response from the device. - A handful of edge cases around the Klap Protocol that were causing panics have been fixed to return
tapo::TapoResponseError::SessionTimeoutortapo::TapoResponseError::InvalidResponseerrors instead.
Python v0.1.4 - 2024-01-13
Changed
- The "Local hash does not match server hash" error has been replaced with the more specific
tapo::TapoResponseError::InvalidCredentialserror.
Fixed
- The
default_statesfield that's part of the device info response has been changed for the L510, L520, and L610 devices to match the actual response from the device. - A handful of edge cases around the Klap Protocol that were causing panics have been fixed to return
tapo::TapoResponseError::SessionTimeoutortapo::TapoResponseError::InvalidResponseerrors instead.
Rust v0.7.6 - 2023-11-25
Added
- Added support for the KE100 thermostatic radiator valve (TRV) devices (thanks to @pwoerndle).
Fixed
- Fixed an issue that was preventing the
nicknamefield from being decoded in theget_device_inforesults of child devices of the H100 hub.
Rust v0.7.5 - 2023-11-05
Added
- Added support for the T300 water sensor.
- Added a dedicated handler for the L520 devices.
Python v0.1.3 - 2023-11-04
Added
- Added support for the L510, L520 and L610 light bulbs.
Changed
- The minimum required version of Python has been changed to 3.8, up from 3.7.
Fixed
- Fixed an issue that was preventing
get_device_info_jsonfrom working on the plug devices.
Python v0.1.2 - 2023-10-19
Added
- Added support for generic devices.
- Added
get_device_info_jsonto all currently supported devices.
Python v0.1.1 - 2023-10-01
This is the first version of the Python wrapper library. It supports the plug devices P100, P105, P110 and P115.
v0.7.4 - 2023-09-15
Fixed
- Fixed the minimum version of the chrono dependency by setting it to 0.4.25.
Changes
DeviceUsageResulthas been split intoDeviceUsageResultandDeviceUsageEnergyMonitoringResult. The former is now returned for the P100 and P105 devices while the latter is returned for all the other devices that support energy monitoring.EnergyMonitoringPlugHandlerhas been renamed toPlugEnergyMonitoringHandler.- All
___DeviceInfoResultstructs have been renamed toDeviceInfo___Result. - All
___DefaultStatestructs have been renamed toDefault___State.
Removed
get_device_usagehas been removed from theGenericDeviceHandlerbecause it is not supported by all devices.
v0.7.3 - 2023-09-14
Added
- Added support for the newly introduced KLAP protocol, which is required to interact with the latest firmware version of multiple devices.
Changed
- All uses of
timehave been replaced withchrono:EnergyDataInterval'stime::OffsetDateTimeandtime::Datefields have been replaced withchrono::NaiveDate.EnergyUsageResult::local_timefield is nowchrono::NaiveDateTimeinstead oftime::OffsetDateTime.EnergyDataResult::local_timefield is nowchrono::NaiveDateTimeinstead oftime::OffsetDateTime.TemperatureHumidityRecords's andTemperatureHumidityRecorddatetimefields are nowchrono::DateTime<chrono::Utc>instead oftime::OffsetDateTime.
EnergyDataInterval::Hourly::start_datetimeandEnergyDataInterval::Hourly::end_datetimehave been renamed tostart_dateandend_datebecause the time component is not required.- The
loginfunction on all handlers has been renamed torefresh_sessionto better reflect its purpose and it now takes and returns a&mut selfinstead ofself. L510DeviceInfoResulthas been renamed toLightDeviceInfoResultto better reflect its purpose when used for L510 and L610 devices.L530DeviceInfoResulthas been renamed toColorLightDeviceInfoResultto better reflect its purpose when used for L530, L630 and L900 devices.L930DeviceInfoResulthas been renamed toColorLightStripDeviceInfoResultto better reflect its purpose when used for L920 and L930 devices.- The
default_statesfield ofLightDeviceInfoResult,ColorLightDeviceInfoResult,ColorLightStripDeviceInfoResultandPlugDeviceInfoResultis now a struct instead of an enum.
v0.7.2 - 2023-08-21
Added
- Added
get_current_powerto theP110andP115plugs. (thanks to @Michal-Szczepaniak)
v0.7.1 - 2023-05-30
Added
- Added
get_temperature_humidity_recordsto theT310andT315sensors.
Changed
- The creation of device handlers has been simplified.
// old
let device = ApiClient::new(ip_address, tapo_username, tapo_password)?
.l530()
.login()
.await?;
// new
let device = ApiClient::new(tapo_username, tapo_password)?
.l530(ip_address)
.await?;
- The creation of child device handlers has been reworked so that they can be created without requiring a call to
get_child_device_listwhen the child Device ID is known. ApiClientnow implementsCloneto allow for a cheaper duplication of the client.
Removed
- The
L510andL610devices no longer expose theset()API because changing multiple properties simultaneously does not make sense for these devices.
v0.7.0 - 2023-05-26
Added
- Added initial support for the H100 device, the S200B switch and the T100, T110, T310, T315 sensors. The child devices currently support
get_device_infoandget_trigger_logs. - All responses now derive
serde::Serializeto allow for more straightforward consumer serialisation. (thanks to @ClementNerma) ApiClienthas been marked as bothSendandSyncto allow for sharing between threads. (thanks to @ClementNerma)
Changed
GenericDeviceInfoResult'sdevice_onproperty has been made optional to accommodate devices that do not provide this field.
v0.6.0 - 2023-05-08
Added
- Added support for the L920 and L930 light strips. The highlight is the
tapo::ColorLightStripHandler::set_lighting_effectfunction, which supports all the effects that the Tapo app contains alongside user-defined effects. - Added support for the L900 light strips.
- Each supported device now has it's own handler creator.
Changed
set_*functions liketapo::requests::ColorLightSetDeviceInfoParams::set_brightnessnow returnSelfinstead ofResult<Self, Error>to allow for better ergonomics. The validations will now run whentapo::requests::ColorLightSetDeviceInfoParams::sendis called.tapo::requests::L510SetDeviceInfoParamshas been renamed totapo::requests::LightSetDeviceInfoParamsto better reflect its purpose when used for L510, L610, and L900 devices.tapo::requests::L530SetDeviceInfoParamshas been renamed totapo::requests::ColorLightSetDeviceInfoParamsto better reflect its purpose when used for L530, L630, L920 and L930 devices.tapo::P100Handlerhas been renamed totapo::PlugHandler.tapo::P110Handlerhas been renamed totapo::EnergyMonitoringPlugHandler.tapo::L510Handlerhas been renamed totapo::LightHandler.tapo::L530Handlerhas been renamed totapo::ColorLightHandler.tapo::L930Handlerhas been renamed totapo::ColorLightStripHandler.
v0.5.0 - 2023-04-16
Changed
- The creation of an API Client for a specific device is now done through handler methods on the
ApiClientstruct. This allows for a more ergonomic API. (thanks to Octocrab for inspirations)
// old
let device = ApiClient::<L530>::new(ip_address, tapo_username, tapo_password, true).await?;
// new
let device = ApiClient::new(ip_address, tapo_username, tapo_password)?
.l530()
.login()
.await?;
ApiClient::newparameters are nowimpl Into<String>instead ofStringto allow for more flexibility.- Error handling has been reworked. All functions that could error now return a
Result<..., tapo::Error>.
v0.4.0 - 2023-02-25
Added
get_energy_datais now available for the P110 devices. (thanks to @kuhschnappel)
Changed
EnergyUsageResult'spast24h,past7d,past30dandpast1yfields are now deprecated.get_energy_datashould be used instead. (thanks to @felixhauptmann)
v0.3.1 - 2023-02-19
Added
examples/tapo_generic_device_toggle.rsdemonstrates howdevice_infocan be used to assess the current status of a generic device and toggle it.
Changed
on_timeis now optional for theL510andL530devices because the v2 hardware no longer returns it.
v0.3.0 - 2022-11-20
Added
- The
setAPI allows multiple properties to be set in a single request for the L510 and L530 devices.
Changed
tapo::Colorhas been moved totapo::requests::Color.GenericDeviceInfoResult::on_timehas been changed fromu64toOption<u64>because some devices (like L930) do not provide this field.- All response structs have been moved under
tapo::responses. - The docs have been improved.
v0.2.1 - 2022-08-07
Changed
latitudeandlongitudeinGenericDeviceInfoResult,L510DeviceInfoResult,L530DeviceInfoResultandPlugDeviceInfoResultare now signed integers to accommodate for incoming responses with negative numbers. (thanks to @JPablomr)
v0.2.0 - 2022-06-13
Added
- Generic Device example.
Changed
get_device_usagehas been moved to the base implementation so that all devices have access to it.Colornow implementsserde::Serializeandserde::Deserialize.
Removed
TapoDeviceExtis no longer hasDefaultandserde::Serializeas supersets.