tapo/api/child_devices/
power_strip_plug_energy_monitoring_handler.rs1use crate::error::{Error, TapoResponseError};
2use crate::requests::{
3 EmptyParams, EnergyDataInterval, GetEnergyDataParams, GetPowerDataParams, PowerDataInterval,
4 TapoParams, TapoRequest,
5};
6use crate::responses::{
7 CurrentPowerResult, DeviceUsageEnergyMonitoringResult, EnergyDataResult, EnergyDataResultRaw,
8 EnergyUsageResult, PowerDataResult, PowerDataResultRaw, PowerStripPlugEnergyMonitoringResult,
9};
10
11tapo_child_handler! {
12 PowerStripPlugEnergyMonitoringHandler(PowerStripPlugEnergyMonitoringResult),
15 on_off,
16}
17
18impl PowerStripPlugEnergyMonitoringHandler {
19 pub async fn get_current_power(&self) -> Result<CurrentPowerResult, Error> {
21 let request = TapoRequest::GetCurrentPower(TapoParams::new(EmptyParams));
22
23 self.client
24 .read()
25 .await
26 .control_child(self.device_id.clone(), request)
27 .await?
28 .ok_or_else(|| Error::Tapo(TapoResponseError::EmptyResult))
29 }
30
31 pub async fn get_device_usage(&self) -> Result<DeviceUsageEnergyMonitoringResult, Error> {
33 let request = TapoRequest::GetDeviceUsage(TapoParams::new(EmptyParams));
34
35 self.client
36 .read()
37 .await
38 .control_child(self.device_id.clone(), request)
39 .await?
40 .ok_or_else(|| Error::Tapo(TapoResponseError::EmptyResult))
41 }
42
43 pub async fn get_energy_usage(&self) -> Result<EnergyUsageResult, Error> {
45 let request = TapoRequest::GetEnergyUsage(TapoParams::new(EmptyParams));
46
47 self.client
48 .read()
49 .await
50 .control_child(self.device_id.clone(), request)
51 .await?
52 .ok_or_else(|| Error::Tapo(TapoResponseError::EmptyResult))
53 }
54
55 pub async fn get_energy_data(
57 &self,
58 interval: EnergyDataInterval,
59 ) -> Result<EnergyDataResult, Error> {
60 let params = GetEnergyDataParams::new(interval);
61 let request = TapoRequest::GetEnergyData(TapoParams::new(params));
62
63 self.client
64 .read()
65 .await
66 .control_child::<EnergyDataResultRaw>(self.device_id.clone(), request)
67 .await?
68 .ok_or_else(|| Error::Tapo(TapoResponseError::EmptyResult))
69 .map(|result| result.try_into())?
70 }
71
72 pub async fn get_power_data(
74 &self,
75 interval: PowerDataInterval,
76 ) -> Result<PowerDataResult, Error> {
77 let params = GetPowerDataParams::new(interval);
78 let request = TapoRequest::GetPowerData(TapoParams::new(params));
79
80 self.client
81 .read()
82 .await
83 .control_child::<PowerDataResultRaw>(self.device_id.clone(), request)
84 .await?
85 .ok_or_else(|| Error::Tapo(TapoResponseError::EmptyResult))
86 .map(|result| result.try_into())?
87 }
88}