diff --git a/homeassistant/components/doorbird/__init__.py b/homeassistant/components/doorbird/__init__.py index 38fae38d9b7..d232aa36cdb 100644 --- a/homeassistant/components/doorbird/__init__.py +++ b/homeassistant/components/doorbird/__init__.py @@ -17,7 +17,7 @@ from homeassistant.const import ( CONF_TOKEN, CONF_USERNAME, ) -from homeassistant.core import HomeAssistant, callback +from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady import homeassistant.helpers.config_validation as cv from homeassistant.helpers.typing import ConfigType @@ -43,12 +43,8 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: async def async_setup_entry(hass: HomeAssistant, entry: DoorBirdConfigEntry) -> bool: """Set up DoorBird from a config entry.""" - - _async_import_options_from_data_if_missing(hass, entry) - door_station_config = entry.data config_entry_id = entry.entry_id - device_ip = door_station_config[CONF_HOST] username = door_station_config[CONF_USERNAME] password = door_station_config[CONF_PASSWORD] @@ -134,18 +130,3 @@ async def _update_listener(hass: HomeAssistant, entry: DoorBirdConfigEntry) -> N door_station.update_events(entry.options[CONF_EVENTS]) # Subscribe to doorbell or motion events await _async_register_events(hass, door_station) - - -@callback -def _async_import_options_from_data_if_missing( - hass: HomeAssistant, entry: DoorBirdConfigEntry -) -> None: - options = dict(entry.options) - modified = False - for importable_option in (CONF_EVENTS,): - if importable_option not in entry.options and importable_option in entry.data: - options[importable_option] = entry.data[importable_option] - modified = True - - if modified: - hass.config_entries.async_update_entry(entry, options=options) diff --git a/homeassistant/components/doorbird/camera.py b/homeassistant/components/doorbird/camera.py index 65af6fe20fb..8ab7f748f4a 100644 --- a/homeassistant/components/doorbird/camera.py +++ b/homeassistant/components/doorbird/camera.py @@ -39,7 +39,6 @@ async def async_setup_entry( door_bird_data, device.live_image_url, "live", - "live", _LIVE_INTERVAL, device.rtsp_live_video_url, ), @@ -47,14 +46,12 @@ async def async_setup_entry( door_bird_data, device.history_image_url(1, "doorbell"), "last_ring", - "last_ring", _LAST_VISITOR_INTERVAL, ), DoorBirdCamera( door_bird_data, device.history_image_url(1, "motionsensor"), "last_motion", - "last_motion", _LAST_MOTION_INTERVAL, ), ] @@ -69,7 +66,6 @@ class DoorBirdCamera(DoorBirdEntity, Camera): door_bird_data: DoorBirdData, url: str, camera_id: str, - translation_key: str, interval: datetime.timedelta, stream_url: str | None = None, ) -> None: @@ -77,7 +73,7 @@ class DoorBirdCamera(DoorBirdEntity, Camera): super().__init__(door_bird_data) self._url = url self._stream_url = stream_url - self._attr_translation_key = translation_key + self._attr_translation_key = camera_id self._last_image: bytes | None = None if self._stream_url: self._attr_supported_features = CameraEntityFeature.STREAM diff --git a/homeassistant/components/doorbird/device.py b/homeassistant/components/doorbird/device.py index 23c0055cbe0..f1ede43bbd4 100644 --- a/homeassistant/components/doorbird/device.py +++ b/homeassistant/components/doorbird/device.py @@ -5,7 +5,7 @@ from __future__ import annotations from dataclasses import dataclass from functools import cached_property import logging -from typing import Any, cast +from typing import Any from doorbirdpy import DoorBird, DoorBirdScheduleEntry @@ -55,34 +55,34 @@ class ConfiguredDoorBird: self._get_event_name(event) for event in self.events ] - @property + @cached_property def name(self) -> str | None: """Get custom device name.""" return self._name - @property + @cached_property def device(self) -> DoorBird: """Get the configured device.""" return self._device - @property + @cached_property def custom_url(self) -> str | None: """Get custom url for device.""" return self._custom_url - @property + @cached_property def token(self) -> str: """Get token for device.""" return self._token def register_events(self, hass: HomeAssistant) -> None: """Register events on device.""" - # Get the URL of this server - hass_url = get_url(hass, prefer_external=False) - # Override url if another is specified in the configuration - if self.custom_url is not None: - hass_url = self.custom_url + if custom_url := self.custom_url: + hass_url = custom_url + else: + # Get the URL of this server + hass_url = get_url(hass, prefer_external=False) if not self.door_station_events: # User may not have permission to get the favorites @@ -97,14 +97,13 @@ class ConfiguredDoorBird: schedule: list[DoorBirdScheduleEntry] = self.device.schedule() http_fav: dict[str, dict[str, Any]] = favorites.get("http") or {} + favorite_input_type: dict[str, str] = { + output.param: entry.input + for entry in schedule + for output in entry.output + if output.event == "http" + } events: list[DoorbirdEvent] = [] - favorite_input_type: dict[str, str] = {} - for entry in schedule: - input_type = entry.input - for output in entry.output: - if output.event == "http": - favorite_input_type[output.param] = input_type - for identifier, data in http_fav.items(): title: str | None = data.get("title") if not title or not title.startswith("Home Assistant"): @@ -157,14 +156,10 @@ class ConfiguredDoorBird: The favorite must exist or there will be problems. """ favs = favs if favs else self.device.favorites() - - if "http" not in favs: - return None - - for fav_id in favs["http"]: - if favs["http"][fav_id]["value"] == url: - return cast(str, fav_id) - + http_fav: dict[str, dict[str, Any]] = favs.get("http") or {} + for fav_id, data in http_fav.items(): + if data["value"] == url: + return fav_id return None def get_event_data(self, event: str) -> dict[str, str | None]: