Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Sensor platform for motionEye."""
2 
3 from __future__ import annotations
4 
5 import logging
6 from types import MappingProxyType
7 from typing import Any
8 
9 from motioneye_client.client import MotionEyeClient
10 from motioneye_client.const import KEY_ACTIONS
11 
12 from homeassistant.components.sensor import SensorEntity, SensorEntityDescription
13 from homeassistant.config_entries import ConfigEntry
14 from homeassistant.core import HomeAssistant, callback
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 from homeassistant.helpers.typing import StateType
17 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
18 
19 from . import get_camera_from_cameras, listen_for_new_cameras
20 from .const import CONF_CLIENT, CONF_COORDINATOR, DOMAIN, TYPE_MOTIONEYE_ACTION_SENSOR
21 from .entity import MotionEyeEntity
22 
23 _LOGGER = logging.getLogger(__name__)
24 
25 
27  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
28 ) -> None:
29  """Set up motionEye from a config entry."""
30  entry_data = hass.data[DOMAIN][entry.entry_id]
31 
32  @callback
33  def camera_add(camera: dict[str, Any]) -> None:
34  """Add a new motionEye camera."""
36  [
38  entry.entry_id,
39  camera,
40  entry_data[CONF_CLIENT],
41  entry_data[CONF_COORDINATOR],
42  entry.options,
43  )
44  ]
45  )
46 
47  listen_for_new_cameras(hass, entry, camera_add)
48 
49 
51  """motionEye action sensor camera."""
52 
53  _attr_translation_key = "actions"
54 
55  def __init__(
56  self,
57  config_entry_id: str,
58  camera: dict[str, Any],
59  client: MotionEyeClient,
60  coordinator: DataUpdateCoordinator,
61  options: MappingProxyType[str, str],
62  ) -> None:
63  """Initialize an action sensor."""
64  super().__init__(
65  config_entry_id,
66  TYPE_MOTIONEYE_ACTION_SENSOR,
67  camera,
68  client,
69  coordinator,
70  options,
72  key=TYPE_MOTIONEYE_ACTION_SENSOR, entity_registry_enabled_default=False
73  ),
74  )
75 
76  @property
77  def native_value(self) -> StateType:
78  """Return the value reported by the sensor."""
79  return len(self._camera_camera.get(KEY_ACTIONS, [])) if self._camera_camera else 0
80 
81  @property
82  def extra_state_attributes(self) -> dict[str, Any] | None:
83  """Add actions as attribute."""
84  if actions := (self._camera_camera.get(KEY_ACTIONS) if self._camera_camera else None):
85  return {KEY_ACTIONS: actions}
86  return None
87 
88  @callback
89  def _handle_coordinator_update(self) -> None:
90  """Handle updated data from the coordinator."""
91  self._camera_camera = get_camera_from_cameras(self._camera_id_camera_id, self.coordinator.data)
None __init__(self, str config_entry_id, dict[str, Any] camera, MotionEyeClient client, DataUpdateCoordinator coordinator, MappingProxyType[str, str] options)
Definition: sensor.py:62
web.Response get(self, web.Request request, str config_key)
Definition: view.py:88
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:28
None listen_for_new_cameras(HomeAssistant hass, ConfigEntry entry, Callable add_func)
Definition: __init__.py:142
dict[str, Any]|None get_camera_from_cameras(int camera_id, dict[str, Any]|None data)
Definition: __init__.py:123