Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Platform for sensor integration."""
2 
3 from switchbot_api import Device, SwitchBotAPI
4 
6  SensorDeviceClass,
7  SensorEntity,
8  SensorEntityDescription,
9  SensorStateClass,
10 )
11 from homeassistant.config_entries import ConfigEntry
12 from homeassistant.const import (
13  CONCENTRATION_PARTS_PER_MILLION,
14  PERCENTAGE,
15  UnitOfTemperature,
16 )
17 from homeassistant.core import HomeAssistant, callback
18 from homeassistant.helpers.entity_platform import AddEntitiesCallback
19 
20 from . import SwitchbotCloudData
21 from .const import DOMAIN
22 from .coordinator import SwitchBotCoordinator
23 from .entity import SwitchBotCloudEntity
24 
25 SENSOR_TYPE_TEMPERATURE = "temperature"
26 SENSOR_TYPE_HUMIDITY = "humidity"
27 SENSOR_TYPE_BATTERY = "battery"
28 SENSOR_TYPE_CO2 = "CO2"
29 
30 METER_PLUS_SENSOR_DESCRIPTIONS = (
32  key=SENSOR_TYPE_TEMPERATURE,
33  device_class=SensorDeviceClass.TEMPERATURE,
34  state_class=SensorStateClass.MEASUREMENT,
35  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
36  ),
38  key=SENSOR_TYPE_HUMIDITY,
39  device_class=SensorDeviceClass.HUMIDITY,
40  state_class=SensorStateClass.MEASUREMENT,
41  native_unit_of_measurement=PERCENTAGE,
42  ),
44  key=SENSOR_TYPE_BATTERY,
45  device_class=SensorDeviceClass.BATTERY,
46  state_class=SensorStateClass.MEASUREMENT,
47  native_unit_of_measurement=PERCENTAGE,
48  ),
49 )
50 
51 METER_PRO_CO2_SENSOR_DESCRIPTIONS = (
52  *METER_PLUS_SENSOR_DESCRIPTIONS,
54  key=SENSOR_TYPE_CO2,
55  native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
56  state_class=SensorStateClass.MEASUREMENT,
57  device_class=SensorDeviceClass.CO2,
58  ),
59 )
60 
61 
63  hass: HomeAssistant,
64  config: ConfigEntry,
65  async_add_entities: AddEntitiesCallback,
66 ) -> None:
67  """Set up SwitchBot Cloud entry."""
68  data: SwitchbotCloudData = hass.data[DOMAIN][config.entry_id]
69 
71  SwitchBotCloudSensor(data.api, device, coordinator, description)
72  for device, coordinator in data.devices.sensors
73  for description in (
74  METER_PRO_CO2_SENSOR_DESCRIPTIONS
75  if device.device_type == "MeterPro(CO2)"
76  else METER_PLUS_SENSOR_DESCRIPTIONS
77  )
78  )
79 
80 
82  """Representation of a SwitchBot Cloud sensor entity."""
83 
84  def __init__(
85  self,
86  api: SwitchBotAPI,
87  device: Device,
88  coordinator: SwitchBotCoordinator,
89  description: SensorEntityDescription,
90  ) -> None:
91  """Initialize SwitchBot Cloud sensor entity."""
92  super().__init__(api, device, coordinator)
93  self.entity_descriptionentity_description = description
94  self._attr_unique_id_attr_unique_id_attr_unique_id = f"{device.device_id}_{description.key}"
95 
96  @callback
97  def _handle_coordinator_update(self) -> None:
98  """Handle updated data from the coordinator."""
99  if not self.coordinator.data:
100  return
101  self._attr_native_value_attr_native_value = self.coordinator.data.get(self.entity_descriptionentity_description.key)
102  self.async_write_ha_stateasync_write_ha_state()
None __init__(self, SwitchBotAPI api, Device device, SwitchBotCoordinator coordinator, SensorEntityDescription description)
Definition: sensor.py:90
None async_setup_entry(HomeAssistant hass, ConfigEntry config, AddEntitiesCallback async_add_entities)
Definition: sensor.py:66