mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
Small cleanups to doorbird (#121454)
This commit is contained in:
parent
8a28cbe9e2
commit
4cf733b9a2
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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]:
|
||||
|
Loading…
x
Reference in New Issue
Block a user