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 ConnectivityTrait(mashumaro.mixins.dict.DataClassDictMixin):
14@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.

ConnectivityTrait(status: str)
NAME: ClassVar[google_nest_sdm.traits.TraitType] = <TraitType.CONNECTIVITY: 'sdm.devices.traits.Connectivity'>
status: str

Device connectivity status.

Return: "OFFLINE", "ONLINE"

def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

@dataclass
class FanTrait(mashumaro.mixins.dict.DataClassDictMixin, google_nest_sdm.traits.CommandDataClass):
28@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.

FanTrait( timer_mode: str | None = None, timer_timeout: datetime.datetime | None = None)
NAME: ClassVar[google_nest_sdm.traits.TraitType] = <TraitType.FAN: 'sdm.devices.traits.Fan'>
timer_mode: str | None = None

Timer mode for the fan.

Return: "ON", "OFF"

timer_timeout: datetime.datetime | None = None
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.

def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

@dataclass
class InfoTrait(mashumaro.mixins.dict.DataClassDictMixin):
62@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.

InfoTrait(custom_name: str | None = None)
NAME: ClassVar[google_nest_sdm.traits.TraitType] = <TraitType.INFO: 'sdm.devices.traits.Info'>
custom_name: str | None = None

Name of the device.

def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

@dataclass
class HumidityTrait(mashumaro.mixins.dict.DataClassDictMixin):
74@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.

HumidityTrait(ambient_humidity_percent: float)
NAME: ClassVar[google_nest_sdm.traits.TraitType] = <TraitType.HUMIDITY: 'sdm.devices.traits.Humidity'>
ambient_humidity_percent: float

Percent humidity, measured at the device.

def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.

@dataclass
class TemperatureTrait(mashumaro.mixins.dict.DataClassDictMixin):
86@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.

TemperatureTrait(ambient_temperature_celsius: float)
NAME: ClassVar[google_nest_sdm.traits.TraitType] = <TraitType.TEMPERATURE: 'sdm.devices.traits.Temperature'>
ambient_temperature_celsius: float

Percent humidity, measured at the device.

def to_dict(self):

The type of the None singleton.

def from_dict(cls, d, *, dialect=None):

The type of the None singleton.