Home Assistant Unofficial Reference 2024.12.1
camera.py
Go to the documentation of this file.
1 """Support for ZoneMinder camera streaming."""
2 
3 from __future__ import annotations
4 
5 import logging
6 
7 from zoneminder.monitor import Monitor
8 from zoneminder.zm import ZoneMinder
9 
10 from homeassistant.components.mjpeg import MjpegCamera, filter_urllib3_logging
11 from homeassistant.core import HomeAssistant
12 from homeassistant.exceptions import PlatformNotReady
13 from homeassistant.helpers.entity_platform import AddEntitiesCallback
14 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
15 
16 from . import DOMAIN as ZONEMINDER_DOMAIN
17 
18 _LOGGER = logging.getLogger(__name__)
19 
20 
22  hass: HomeAssistant,
23  config: ConfigType,
24  add_entities: AddEntitiesCallback,
25  discovery_info: DiscoveryInfoType | None = None,
26 ) -> None:
27  """Set up the ZoneMinder cameras."""
29  cameras = []
30  zm_client: ZoneMinder
31  for zm_client in hass.data[ZONEMINDER_DOMAIN].values():
32  if not (monitors := zm_client.get_monitors()):
33  raise PlatformNotReady(
34  "Camera could not fetch any monitors from ZoneMinder"
35  )
36 
37  for monitor in monitors:
38  _LOGGER.debug("Initializing camera %s", monitor.id)
39  cameras.append(ZoneMinderCamera(monitor, zm_client.verify_ssl))
40  add_entities(cameras)
41 
42 
44  """Representation of a ZoneMinder Monitor Stream."""
45 
46  _attr_should_poll = True # Cameras default to False
47 
48  def __init__(self, monitor: Monitor, verify_ssl: bool) -> None:
49  """Initialize as a subclass of MjpegCamera."""
50  super().__init__(
51  name=monitor.name,
52  mjpeg_url=monitor.mjpeg_image_url,
53  still_image_url=monitor.still_image_url,
54  verify_ssl=verify_ssl,
55  )
56  self._attr_is_recording_attr_is_recording = False
57  self._attr_available_attr_available = False
58  self._monitor_monitor = monitor
59 
60  def update(self) -> None:
61  """Update our recording state from the ZM API."""
62  _LOGGER.debug("Updating camera state for monitor %i", self._monitor_monitor.id)
63  self._attr_is_recording_attr_is_recording = self._monitor_monitor.is_recording
64  self._attr_available_attr_available = self._monitor_monitor.is_available
None __init__(self, Monitor monitor, bool verify_ssl)
Definition: camera.py:48
None add_entities(HomeAssistant hass, FreeboxRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
Definition: camera.py:54
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: camera.py:26