fritzapi 0.4.1

Library for interfacing with the "AVM Home Automation" API
Documentation
use super::{AVMDevice, Device, FritzDect2XX, PowerMeter, Switch, Temperature};
use crate::error::Result;
use crate::FritzClient;

impl AVMDevice {
    pub fn from_xml_device(device: Device) -> Self {
        match device {
            Device {
                identifier,
                productname,
                name,
                switch: Some(Switch { state, .. }),
                powermeter:
                    Some(PowerMeter {
                        energy,
                        power,
                        voltage,
                        ..
                    }),
                temperature: Some(Temperature { celsius, .. }),
                ..
            } if productname.starts_with("FRITZ!DECT 2")
                || productname.starts_with("FRITZ!Smart Energy 2") =>
            {
                AVMDevice::FritzDect2XX(FritzDect2XX {
                    identifier,
                    productname,
                    name,
                    on: state,
                    millivolts: voltage,
                    milliwatts: power,
                    energy_in_watt_h: energy,
                    celsius: celsius.parse::<f32>().unwrap_or_default() * 0.1,
                })
            }

            _ => AVMDevice::Other(device),
        }
    }

    pub fn fetch_device_stats(
        &self,
        client: &mut FritzClient,
    ) -> Result<Vec<crate::stats::DeviceStats>> {
        client.device_stats(self.id())
    }

    pub fn turn_on(&mut self, client: &mut FritzClient) -> Result<()> {
        client.turn_on(self.id())
    }

    pub fn turn_off(&mut self, client: &mut FritzClient) -> Result<()> {
        client.turn_off(self.id())
    }

    pub fn toggle(&mut self, client: &mut FritzClient) -> Result<()> {
        client.toggle(self.id())
    }
}