Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Motionblinds sensors."""
2 
3 from motionblinds import DEVICE_TYPES_WIFI
4 from motionblinds.motion_blinds import DEVICE_TYPE_TDBU
5 
7  SensorDeviceClass,
8  SensorEntity,
9  SensorStateClass,
10 )
11 from homeassistant.config_entries import ConfigEntry
12 from homeassistant.const import (
13  PERCENTAGE,
14  SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
15  EntityCategory,
16 )
17 from homeassistant.core import HomeAssistant
18 from homeassistant.helpers.entity_platform import AddEntitiesCallback
19 
20 from .const import DOMAIN, KEY_COORDINATOR, KEY_GATEWAY
21 from .entity import MotionCoordinatorEntity
22 
23 ATTR_BATTERY_VOLTAGE = "battery_voltage"
24 
25 
27  hass: HomeAssistant,
28  config_entry: ConfigEntry,
29  async_add_entities: AddEntitiesCallback,
30 ) -> None:
31  """Perform the setup for Motionblinds."""
32  entities: list[SensorEntity] = []
33  motion_gateway = hass.data[DOMAIN][config_entry.entry_id][KEY_GATEWAY]
34  coordinator = hass.data[DOMAIN][config_entry.entry_id][KEY_COORDINATOR]
35 
36  for blind in motion_gateway.device_list.values():
37  entities.append(MotionSignalStrengthSensor(coordinator, blind))
38  if blind.device_type == DEVICE_TYPE_TDBU:
39  entities.append(MotionTDBUBatterySensor(coordinator, blind, "Bottom"))
40  entities.append(MotionTDBUBatterySensor(coordinator, blind, "Top"))
41  elif blind.battery_voltage is not None and blind.battery_voltage > 0:
42  # Only add battery powered blinds
43  entities.append(MotionBatterySensor(coordinator, blind))
44 
45  # Do not add signal sensor twice for direct WiFi blinds
46  if motion_gateway.device_type not in DEVICE_TYPES_WIFI:
47  entities.append(MotionSignalStrengthSensor(coordinator, motion_gateway))
48 
49  async_add_entities(entities)
50 
51 
53  """Representation of a Motion Battery Sensor."""
54 
55  _attr_device_class = SensorDeviceClass.BATTERY
56  _attr_native_unit_of_measurement = PERCENTAGE
57  _attr_entity_category = EntityCategory.DIAGNOSTIC
58  _attr_state_class = SensorStateClass.MEASUREMENT
59 
60  def __init__(self, coordinator, blind):
61  """Initialize the Motion Battery Sensor."""
62  super().__init__(coordinator, blind)
63  self._attr_unique_id_attr_unique_id = f"{blind.mac}-battery"
64 
65  @property
66  def native_value(self):
67  """Return the state of the sensor."""
68  return self._blind_blind.battery_level
69 
70  @property
72  """Return device specific state attributes."""
73  return {ATTR_BATTERY_VOLTAGE: self._blind_blind.battery_voltage}
74 
75 
77  """Representation of a Motion Battery Sensor for a Top Down Bottom Up blind."""
78 
79  def __init__(self, coordinator, blind, motor):
80  """Initialize the Motion Battery Sensor."""
81  super().__init__(coordinator, blind)
82 
83  self._motor_motor = motor
84  self._attr_unique_id_attr_unique_id_attr_unique_id = f"{blind.mac}-{motor}-battery"
85  self._attr_translation_key_attr_translation_key = f"{motor.lower()}_battery"
86 
87  @property
88  def native_value(self):
89  """Return the state of the sensor."""
90  if self._blind_blind.battery_level is None:
91  return None
92  return self._blind_blind.battery_level[self._motor_motor[0]]
93 
94  @property
96  """Return device specific state attributes."""
97  attributes = {}
98  if self._blind_blind.battery_voltage is not None:
99  attributes[ATTR_BATTERY_VOLTAGE] = self._blind_blind.battery_voltage[
100  self._motor_motor[0]
101  ]
102  return attributes
103 
104 
106  """Representation of a Motion Signal Strength Sensor."""
107 
108  _attr_device_class = SensorDeviceClass.SIGNAL_STRENGTH
109  _attr_entity_registry_enabled_default = False
110  _attr_native_unit_of_measurement = SIGNAL_STRENGTH_DECIBELS_MILLIWATT
111  _attr_entity_category = EntityCategory.DIAGNOSTIC
112 
113  def __init__(self, coordinator, blind):
114  """Initialize the Motion Signal Strength Sensor."""
115  super().__init__(coordinator, blind)
116  self._attr_unique_id_attr_unique_id = f"{blind.mac}-RSSI"
117 
118  @property
119  def native_value(self):
120  """Return the state of the sensor."""
121  return self._blind_blind.RSSI
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:30