1 """Support for Tellstick Net/Telstick Live sensors."""
3 from __future__
import annotations
9 SensorEntityDescription,
18 UnitOfPrecipitationDepth,
28 from .const
import DOMAIN, TELLDUS_DISCOVERY_NEW
29 from .entity
import TelldusLiveEntity
31 SENSOR_TYPE_TEMPERATURE =
"temp"
32 SENSOR_TYPE_HUMIDITY =
"humidity"
33 SENSOR_TYPE_RAINRATE =
"rrate"
34 SENSOR_TYPE_RAINTOTAL =
"rtot"
35 SENSOR_TYPE_WINDDIRECTION =
"wdir"
36 SENSOR_TYPE_WINDAVERAGE =
"wavg"
37 SENSOR_TYPE_WINDGUST =
"wgust"
39 SENSOR_TYPE_WATT =
"watt"
40 SENSOR_TYPE_LUMINANCE =
"lum"
41 SENSOR_TYPE_DEW_POINT =
"dewp"
42 SENSOR_TYPE_BAROMETRIC_PRESSURE =
"barpress"
44 SENSOR_TYPES: dict[str, SensorEntityDescription] = {
46 key=SENSOR_TYPE_TEMPERATURE,
47 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
48 device_class=SensorDeviceClass.TEMPERATURE,
49 state_class=SensorStateClass.MEASUREMENT,
52 key=SENSOR_TYPE_HUMIDITY,
53 native_unit_of_measurement=PERCENTAGE,
54 device_class=SensorDeviceClass.HUMIDITY,
55 state_class=SensorStateClass.MEASUREMENT,
58 key=SENSOR_TYPE_RAINRATE,
59 native_unit_of_measurement=UnitOfVolumetricFlux.MILLIMETERS_PER_HOUR,
60 state_class=SensorStateClass.MEASUREMENT,
61 device_class=SensorDeviceClass.PRECIPITATION_INTENSITY,
64 key=SENSOR_TYPE_RAINTOTAL,
65 native_unit_of_measurement=UnitOfPrecipitationDepth.MILLIMETERS,
66 device_class=SensorDeviceClass.PRECIPITATION,
67 state_class=SensorStateClass.TOTAL_INCREASING,
70 key=SENSOR_TYPE_WINDDIRECTION,
71 translation_key=
"wind_direction",
74 key=SENSOR_TYPE_WINDAVERAGE,
75 translation_key=
"wind_average",
76 native_unit_of_measurement=UnitOfSpeed.METERS_PER_SECOND,
77 device_class=SensorDeviceClass.WIND_SPEED,
78 state_class=SensorStateClass.MEASUREMENT,
81 key=SENSOR_TYPE_WINDGUST,
82 translation_key=
"wind_gust",
83 native_unit_of_measurement=UnitOfSpeed.METERS_PER_SECOND,
84 device_class=SensorDeviceClass.WIND_SPEED,
85 state_class=SensorStateClass.MEASUREMENT,
90 native_unit_of_measurement=UV_INDEX,
91 state_class=SensorStateClass.MEASUREMENT,
95 native_unit_of_measurement=UnitOfPower.WATT,
96 device_class=SensorDeviceClass.POWER,
97 state_class=SensorStateClass.MEASUREMENT,
100 key=SENSOR_TYPE_LUMINANCE,
101 native_unit_of_measurement=LIGHT_LUX,
102 device_class=SensorDeviceClass.ILLUMINANCE,
103 state_class=SensorStateClass.MEASUREMENT,
106 key=SENSOR_TYPE_DEW_POINT,
107 translation_key=
"dew_point",
108 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
109 device_class=SensorDeviceClass.TEMPERATURE,
110 state_class=SensorStateClass.MEASUREMENT,
113 key=SENSOR_TYPE_BAROMETRIC_PRESSURE,
114 native_unit_of_measurement=UnitOfPressure.KPA,
115 device_class=SensorDeviceClass.PRESSURE,
116 state_class=SensorStateClass.MEASUREMENT,
123 config_entry: ConfigEntry,
124 async_add_entities: AddEntitiesCallback,
126 """Set up tellduslive sensors dynamically."""
129 """Discover and add a discovered sensor."""
130 client = hass.data[DOMAIN]
135 TELLDUS_DISCOVERY_NEW.format(sensor.DOMAIN, DOMAIN),
136 async_discover_sensor,
141 """Representation of a Telldus Live sensor."""
144 """Initialize TelldusLiveSensor."""
146 if desc := SENSOR_TYPES.get(self.
_type_type_type):
153 """Return id of the device."""
154 return self.
_id_id[0]
158 """Return the type of the sensor."""
159 return self.
_id_id[1]
163 """Return value of the sensor."""
164 return self.
devicedevice.value(*self.
_id_id[1:])
168 """Return the value as temperature."""
173 """Return the value as luminance."""
178 """Return the value as humidity."""
183 """Return the state of the sensor."""
188 if self.
_type_type_type == SENSOR_TYPE_HUMIDITY:
190 if self.
_type_type_type == SENSOR_TYPE_LUMINANCE:
196 """Return a unique ID."""
197 return "-".join(map(str, self.
_id_id))
def _value_as_temperature(self)
def _value_as_humidity(self)
def _value_as_luminance(self)
def __init__(self, client, device_id)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
def async_discover_sensor(device_id)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)