google_nest_sdm.device_traits
Library for traits about devices.
1"""Library for traits about devices.""" 2 3import datetime 4from typing import Any, Dict, ClassVar 5from dataclasses import dataclass, field 6 7import aiohttp 8from mashumaro import field_options, DataClassDictMixin 9 10from .traits import CommandDataClass, TraitType 11 12 13@dataclass 14class ConnectivityTrait(DataClassDictMixin): 15 """This trait belongs to any device that has connectivity information.""" 16 17 NAME: ClassVar[TraitType] = TraitType.CONNECTIVITY 18 19 status: str 20 """Device connectivity status. 21 22 Return: 23 "OFFLINE", "ONLINE" 24 """ 25 26 27@dataclass 28class FanTrait(DataClassDictMixin, CommandDataClass): 29 """This trait belongs to any device that can control the fan.""" 30 31 NAME: ClassVar[TraitType] = TraitType.FAN 32 33 timer_mode: str | None = field( 34 metadata=field_options(alias="timerMode"), default=None 35 ) 36 """Timer mode for the fan. 37 38 Return: 39 "ON", "OFF" 40 """ 41 42 timer_timeout: datetime.datetime | None = field( 43 metadata=field_options(alias="timerTimeout"), default=None 44 ) 45 46 async def set_timer( 47 self, timer_mode: str, duration: int | None = None 48 ) -> aiohttp.ClientResponse: 49 """Change the fan timer.""" 50 data: Dict[str, Any] = { 51 "command": "sdm.devices.commands.Fan.SetTimer", 52 "params": { 53 "timerMode": timer_mode, 54 }, 55 } 56 if duration: 57 data["params"]["duration"] = f"{duration}s" 58 return await self.cmd.execute(data) 59 60 61@dataclass 62class InfoTrait(DataClassDictMixin): 63 """This trait belongs to any device for device-related information.""" 64 65 NAME: ClassVar[TraitType] = TraitType.INFO 66 67 custom_name: str | None = field( 68 metadata=field_options(alias="customName"), default=None 69 ) 70 """Name of the device.""" 71 72 73@dataclass 74class HumidityTrait(DataClassDictMixin): 75 """This trait belongs to any device that has a sensor to measure humidity.""" 76 77 NAME: ClassVar[TraitType] = TraitType.HUMIDITY 78 79 ambient_humidity_percent: float = field( 80 metadata=field_options(alias="ambientHumidityPercent") 81 ) 82 """Percent humidity, measured at the device.""" 83 84 85@dataclass 86class TemperatureTrait(DataClassDictMixin): 87 """This trait belongs to any device that has a sensor to measure temperature.""" 88 89 NAME: ClassVar[TraitType] = TraitType.TEMPERATURE 90 91 ambient_temperature_celsius: float = field( 92 metadata=field_options(alias="ambientTemperatureCelsius") 93 ) 94 """Percent humidity, measured at the device."""
@dataclass
class
ConnectivityTrait14@dataclass 15class ConnectivityTrait(DataClassDictMixin): 16 """This trait belongs to any device that has connectivity information.""" 17 18 NAME: ClassVar[TraitType] = TraitType.CONNECTIVITY 19 20 status: str 21 """Device connectivity status. 22 23 Return: 24 "OFFLINE", "ONLINE" 25 """
This trait belongs to any device that has connectivity information.
@dataclass
class
FanTrait28@dataclass 29class FanTrait(DataClassDictMixin, CommandDataClass): 30 """This trait belongs to any device that can control the fan.""" 31 32 NAME: ClassVar[TraitType] = TraitType.FAN 33 34 timer_mode: str | None = field( 35 metadata=field_options(alias="timerMode"), default=None 36 ) 37 """Timer mode for the fan. 38 39 Return: 40 "ON", "OFF" 41 """ 42 43 timer_timeout: datetime.datetime | None = field( 44 metadata=field_options(alias="timerTimeout"), default=None 45 ) 46 47 async def set_timer( 48 self, timer_mode: str, duration: int | None = None 49 ) -> aiohttp.ClientResponse: 50 """Change the fan timer.""" 51 data: Dict[str, Any] = { 52 "command": "sdm.devices.commands.Fan.SetTimer", 53 "params": { 54 "timerMode": timer_mode, 55 }, 56 } 57 if duration: 58 data["params"]["duration"] = f"{duration}s" 59 return await self.cmd.execute(data)
This trait belongs to any device that can control the fan.
async def
set_timer( self, timer_mode: str, duration: int | None = None) -> aiohttp.client_reqrep.ClientResponse:
47 async def set_timer( 48 self, timer_mode: str, duration: int | None = None 49 ) -> aiohttp.ClientResponse: 50 """Change the fan timer.""" 51 data: Dict[str, Any] = { 52 "command": "sdm.devices.commands.Fan.SetTimer", 53 "params": { 54 "timerMode": timer_mode, 55 }, 56 } 57 if duration: 58 data["params"]["duration"] = f"{duration}s" 59 return await self.cmd.execute(data)
Change the fan timer.
@dataclass
class
InfoTrait62@dataclass 63class InfoTrait(DataClassDictMixin): 64 """This trait belongs to any device for device-related information.""" 65 66 NAME: ClassVar[TraitType] = TraitType.INFO 67 68 custom_name: str | None = field( 69 metadata=field_options(alias="customName"), default=None 70 ) 71 """Name of the device."""
This trait belongs to any device for device-related information.
@dataclass
class
HumidityTrait74@dataclass 75class HumidityTrait(DataClassDictMixin): 76 """This trait belongs to any device that has a sensor to measure humidity.""" 77 78 NAME: ClassVar[TraitType] = TraitType.HUMIDITY 79 80 ambient_humidity_percent: float = field( 81 metadata=field_options(alias="ambientHumidityPercent") 82 ) 83 """Percent humidity, measured at the device."""
This trait belongs to any device that has a sensor to measure humidity.
@dataclass
class
TemperatureTrait86@dataclass 87class TemperatureTrait(DataClassDictMixin): 88 """This trait belongs to any device that has a sensor to measure temperature.""" 89 90 NAME: ClassVar[TraitType] = TraitType.TEMPERATURE 91 92 ambient_temperature_celsius: float = field( 93 metadata=field_options(alias="ambientTemperatureCelsius") 94 ) 95 """Percent humidity, measured at the device."""
This trait belongs to any device that has a sensor to measure temperature.