1 """Support EZVIZ last motion image."""
3 from __future__
import annotations
7 from pyezviz.exceptions
import PyEzvizError
8 from pyezviz.utils
import decrypt_image
17 from .const
import DATA_COORDINATOR, DOMAIN
18 from .coordinator
import EzvizDataUpdateCoordinator
19 from .entity
import EzvizEntity
21 _LOGGER = logging.getLogger(__name__)
24 key=
"last_motion_image",
25 translation_key=
"last_motion_image",
30 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
32 """Set up EZVIZ image entities based on a config entry."""
34 coordinator: EzvizDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][
39 EzvizLastMotion(hass, coordinator, camera)
for camera
in coordinator.data
44 """Return Last Motion Image from Ezviz Camera."""
47 self, hass: HomeAssistant, coordinator: EzvizDataUpdateCoordinator, serial: str
49 """Initialize a image entity."""
50 EzvizEntity.__init__(self, coordinator, serial)
51 ImageEntity.__init__(self, hass)
58 camera = hass.config_entries.async_entry_for_domain_unique_id(DOMAIN, serial)
60 camera.data[CONF_PASSWORD]
if camera
is not None else None
64 """Load an image by url."""
65 if response := await self.
_fetch_url_fetch_url(url):
66 image_data = response.content
69 image_data = decrypt_image(
74 "%s: Can't decrypt last alarm picture, looks like it was encrypted with other password",
77 image_data = response.content
80 content_type=
"image/jpeg",
86 """Handle updated data from the coordinator."""
91 _LOGGER.debug(
"Image url changed to %s", self.
datadatadata[
"last_alarm_pic"])
dict[str, Any] data(self)
None _handle_coordinator_update(self)
None __init__(self, HomeAssistant hass, EzvizDataUpdateCoordinator coordinator, str serial)
Image|None _async_load_image_from_url(self, str url)
httpx.Response|None _fetch_url(self, str url)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)