Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for EZVIZ sensors."""
2 
3 from __future__ import annotations
4 
6  SensorDeviceClass,
7  SensorEntity,
8  SensorEntityDescription,
9 )
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.const import PERCENTAGE
12 from homeassistant.core import HomeAssistant
13 from homeassistant.helpers.entity_platform import AddEntitiesCallback
14 
15 from .const import DATA_COORDINATOR, DOMAIN
16 from .coordinator import EzvizDataUpdateCoordinator
17 from .entity import EzvizEntity
18 
19 PARALLEL_UPDATES = 1
20 
21 SENSOR_TYPES: dict[str, SensorEntityDescription] = {
22  "battery_level": SensorEntityDescription(
23  key="battery_level",
24  native_unit_of_measurement=PERCENTAGE,
25  device_class=SensorDeviceClass.BATTERY,
26  ),
27  "alarm_sound_mod": SensorEntityDescription(
28  key="alarm_sound_mod",
29  translation_key="alarm_sound_mod",
30  entity_registry_enabled_default=False,
31  ),
32  "last_alarm_time": SensorEntityDescription(
33  key="last_alarm_time",
34  translation_key="last_alarm_time",
35  entity_registry_enabled_default=False,
36  ),
37  "Seconds_Last_Trigger": SensorEntityDescription(
38  key="Seconds_Last_Trigger",
39  translation_key="seconds_last_trigger",
40  entity_registry_enabled_default=False,
41  ),
42  "last_alarm_pic": SensorEntityDescription(
43  key="last_alarm_pic",
44  translation_key="last_alarm_pic",
45  entity_registry_enabled_default=False,
46  ),
47  "supported_channels": SensorEntityDescription(
48  key="supported_channels",
49  translation_key="supported_channels",
50  ),
51  "local_ip": SensorEntityDescription(
52  key="local_ip",
53  translation_key="local_ip",
54  ),
55  "wan_ip": SensorEntityDescription(
56  key="wan_ip",
57  translation_key="wan_ip",
58  ),
59  "PIR_Status": SensorEntityDescription(
60  key="PIR_Status",
61  translation_key="pir_status",
62  ),
63  "last_alarm_type_code": SensorEntityDescription(
64  key="last_alarm_type_code",
65  translation_key="last_alarm_type_code",
66  ),
67  "last_alarm_type_name": SensorEntityDescription(
68  key="last_alarm_type_name",
69  translation_key="last_alarm_type_name",
70  ),
71 }
72 
73 
75  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
76 ) -> None:
77  """Set up EZVIZ sensors based on a config entry."""
78  coordinator: EzvizDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][
79  DATA_COORDINATOR
80  ]
81 
83  [
84  EzvizSensor(coordinator, camera, sensor)
85  for camera in coordinator.data
86  for sensor, value in coordinator.data[camera].items()
87  if sensor in SENSOR_TYPES
88  if value is not None
89  ]
90  )
91 
92 
94  """Representation of a EZVIZ sensor."""
95 
96  def __init__(
97  self, coordinator: EzvizDataUpdateCoordinator, serial: str, sensor: str
98  ) -> None:
99  """Initialize the sensor."""
100  super().__init__(coordinator, serial)
101  self._sensor_name_sensor_name = sensor
102  self._attr_unique_id_attr_unique_id = f"{serial}_{self._camera_name}.{sensor}"
103  self.entity_descriptionentity_description = SENSOR_TYPES[sensor]
104 
105  @property
106  def native_value(self) -> int | str:
107  """Return the state of the sensor."""
108  return self.datadatadata[self._sensor_name_sensor_name]
None __init__(self, EzvizDataUpdateCoordinator coordinator, str serial, str sensor)
Definition: sensor.py:98
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:76