1 """Support for EZVIZ camera."""
5 from pyezviz.client
import EzvizClient
6 from pyezviz.exceptions
import (
8 EzvizAuthVerificationCode,
22 CONF_FFMPEG_ARGUMENTS,
26 DEFAULT_FFMPEG_ARGUMENTS,
30 from .coordinator
import EzvizDataUpdateCoordinator
32 _LOGGER = logging.getLogger(__name__)
34 PLATFORMS_BY_TYPE: dict[str, list] = {
37 Platform.ALARM_CONTROL_PANEL,
38 Platform.BINARY_SENSOR,
54 """Set up EZVIZ from a config entry."""
55 hass.data.setdefault(DOMAIN, {})
56 sensor_type: str = entry.data[CONF_TYPE]
61 CONF_FFMPEG_ARGUMENTS: DEFAULT_FFMPEG_ARGUMENTS,
62 CONF_TIMEOUT: DEFAULT_TIMEOUT,
65 hass.config_entries.async_update_entry(entry, options=options)
68 if PLATFORMS_BY_TYPE[sensor_type]:
70 if not entry.data.get(CONF_SESSION_ID):
71 raise ConfigEntryAuthFailed
73 ezviz_client = EzvizClient(
75 CONF_SESSION_ID: entry.data.get(CONF_SESSION_ID),
76 CONF_RFSESSION_ID: entry.data.get(CONF_RFSESSION_ID),
77 "api_url": entry.data.get(CONF_URL),
79 timeout=entry.options.get(CONF_TIMEOUT, DEFAULT_TIMEOUT),
83 await hass.async_add_executor_job(ezviz_client.login)
85 except (EzvizAuthTokenExpired, EzvizAuthVerificationCode)
as error:
86 raise ConfigEntryAuthFailed
from error
88 except (InvalidURL, HTTPError, PyEzvizError)
as error:
89 _LOGGER.error(
"Unable to connect to Ezviz service: %s",
str(error))
90 raise ConfigEntryNotReady
from error
93 hass, api=ezviz_client, api_timeout=entry.options[CONF_TIMEOUT]
96 await coordinator.async_config_entry_first_refresh()
98 hass.data[DOMAIN][entry.entry_id] = {DATA_COORDINATOR: coordinator}
100 entry.async_on_unload(entry.add_update_listener(_async_update_listener))
105 if sensor_type == ATTR_TYPE_CAMERA
and hass.data[DOMAIN]:
106 for item
in hass.config_entries.async_entries(domain=DOMAIN):
107 if item.data.get(CONF_TYPE) == ATTR_TYPE_CLOUD:
108 _LOGGER.debug(
"Reload Ezviz main account with camera entry")
109 await hass.config_entries.async_reload(item.entry_id)
112 await hass.config_entries.async_forward_entry_setups(
113 entry, PLATFORMS_BY_TYPE[sensor_type]
120 """Unload a config entry."""
121 sensor_type = entry.data[CONF_TYPE]
123 unload_ok = await hass.config_entries.async_unload_platforms(
124 entry, PLATFORMS_BY_TYPE[sensor_type]
126 if sensor_type == ATTR_TYPE_CLOUD
and unload_ok:
127 hass.data[DOMAIN].pop(entry.entry_id)
133 """Handle options update."""
134 await hass.config_entries.async_reload(entry.entry_id)
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
None _async_update_listener(HomeAssistant hass, ConfigEntry entry)
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)