1 """Support for EZVIZ button controls."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
9 from pyezviz
import EzvizClient
10 from pyezviz.constants
import SupportExt
11 from pyezviz.exceptions
import HTTPError, PyEzvizError
19 from .const
import DATA_COORDINATOR, DOMAIN
20 from .coordinator
import EzvizDataUpdateCoordinator
21 from .entity
import EzvizEntity
26 @dataclass(frozen=True, kw_only=True)
28 """Describe a EZVIZ Button."""
30 method: Callable[[EzvizClient, str, str], Any]
37 translation_key=
"ptz_up",
38 method=
lambda pyezviz_client, serial, run: pyezviz_client.ptz_control(
41 supported_ext=
str(SupportExt.SupportPtz.value),
45 translation_key=
"ptz_down",
46 method=
lambda pyezviz_client, serial, run: pyezviz_client.ptz_control(
49 supported_ext=
str(SupportExt.SupportPtz.value),
53 translation_key=
"ptz_left",
54 method=
lambda pyezviz_client, serial, run: pyezviz_client.ptz_control(
57 supported_ext=
str(SupportExt.SupportPtz.value),
61 translation_key=
"ptz_right",
62 method=
lambda pyezviz_client, serial, run: pyezviz_client.ptz_control(
65 supported_ext=
str(SupportExt.SupportPtz.value),
71 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
73 """Set up EZVIZ button based on a config entry."""
74 coordinator: EzvizDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][
84 for camera
in coordinator.data
85 for capability, value
in coordinator.data[camera][
"supportExt"].items()
86 for entity_description
in BUTTON_ENTITIES
87 if capability == entity_description.supported_ext
93 """Representation of a EZVIZ button entity."""
95 entity_description: EzvizButtonEntityDescription
99 coordinator: EzvizDataUpdateCoordinator,
101 description: EzvizButtonEntityDescription,
103 """Initialize the button."""
104 super().
__init__(coordinator, serial)
109 """Execute the button action."""
112 self.coordinator.ezviz_client, self.
_serial_serial,
"START"
115 self.coordinator.ezviz_client, self.
_serial_serial,
"STOP"
117 except (HTTPError, PyEzvizError)
as err:
119 f
"Cannot perform PTZ action on {self.name}"