1 """Support for Tellstick sensors."""
3 from __future__
import annotations
5 from collections
import namedtuple
8 from tellcore
import telldus
9 import tellcore.constants
as tellcore_constants
10 import voluptuous
as vol
13 PLATFORM_SCHEMA
as SENSOR_PLATFORM_SCHEMA,
30 _LOGGER = logging.getLogger(__name__)
32 DatatypeDescription = namedtuple(
33 "DatatypeDescription", [
"name",
"unit",
"device_class"]
36 CONF_DATATYPE_MASK =
"datatype_mask"
37 CONF_ONLY_NAMED =
"only_named"
38 CONF_TEMPERATURE_SCALE =
"temperature_scale"
40 DEFAULT_DATATYPE_MASK = 127
41 DEFAULT_TEMPERATURE_SCALE = UnitOfTemperature.CELSIUS
43 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
46 CONF_TEMPERATURE_SCALE, default=DEFAULT_TEMPERATURE_SCALE
49 CONF_DATATYPE_MASK, default=DEFAULT_DATATYPE_MASK
51 vol.Optional(CONF_ONLY_NAMED, default=[]): vol.All(
56 vol.Required(CONF_ID): cv.positive_int,
57 vol.Required(CONF_NAME): cv.string,
58 vol.Optional(CONF_PROTOCOL): cv.string,
59 vol.Optional(CONF_MODEL): cv.string,
71 add_entities: AddEntitiesCallback,
72 discovery_info: DiscoveryInfoType |
None =
None,
74 """Set up the Tellstick sensors."""
76 sensor_value_descriptions = {
79 config.get(CONF_TEMPERATURE_SCALE),
80 SensorDeviceClass.TEMPERATURE,
85 SensorDeviceClass.HUMIDITY,
91 "rain total",
"",
None
94 "wind direction",
"",
None
97 "wind average",
"",
None
100 "wind gust",
"",
None
105 tellcore_lib = telldus.TelldusCore()
107 _LOGGER.exception(
"Could not initialize Tellstick")
111 datatype_mask = config.get(CONF_DATATYPE_MASK)
113 if config[CONF_ONLY_NAMED]:
115 for named_sensor
in config[CONF_ONLY_NAMED]:
116 name = named_sensor[CONF_NAME]
117 proto = named_sensor.get(CONF_PROTOCOL)
118 model = named_sensor.get(CONF_MODEL)
119 id_ = named_sensor[CONF_ID]
120 if proto
is not None:
121 if model
is not None:
122 named_sensors[f
"{proto}{model}{id_}"] = name
124 named_sensors[f
"{proto}{id_}"] = name
126 named_sensors[id_] = name
128 for tellcore_sensor
in tellcore_lib.sensors():
129 if not config[CONF_ONLY_NAMED]:
130 sensor_name =
str(tellcore_sensor.id)
132 proto_id = f
"{tellcore_sensor.protocol}{tellcore_sensor.id}"
134 f
"{tellcore_sensor.protocol}{tellcore_sensor.model}{tellcore_sensor.id}"
136 if tellcore_sensor.id
in named_sensors:
137 sensor_name = named_sensors[tellcore_sensor.id]
138 elif proto_id
in named_sensors:
139 sensor_name = named_sensors[proto_id]
140 elif proto_model_id
in named_sensors:
141 sensor_name = named_sensors[proto_model_id]
145 for datatype, sensor_info
in sensor_value_descriptions.items():
146 if datatype & datatype_mask
and tellcore_sensor.has_value(datatype):
155 """Representation of a Tellstick sensor."""
157 def __init__(self, name, tellcore_sensor, datatype, sensor_info):
158 """Initialize the sensor."""
165 """Update tellstick sensor."""
_attr_native_unit_of_measurement
def __init__(self, name, tellcore_sensor, datatype, sensor_info)
def add_entities(account, async_add_entities, tracked)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)