1 """Support for Blink Home Camera System."""
3 from copy
import deepcopy
7 from aiohttp
import ClientError
8 from blinkpy.auth
import Auth
9 from blinkpy.blinkpy
import Blink
10 import voluptuous
as vol
26 from .const
import DEFAULT_SCAN_INTERVAL, DOMAIN, PLATFORMS
27 from .coordinator
import BlinkConfigEntry, BlinkUpdateCoordinator
28 from .services
import setup_services
30 _LOGGER = logging.getLogger(__name__)
32 SERVICE_SAVE_VIDEO_SCHEMA = vol.Schema(
33 {vol.Required(CONF_NAME): cv.string, vol.Required(CONF_FILENAME): cv.string}
35 SERVICE_SEND_PIN_SCHEMA = vol.Schema({vol.Optional(CONF_PIN): cv.string})
36 SERVICE_SAVE_RECENT_CLIPS_SCHEMA = vol.Schema(
37 {vol.Required(CONF_NAME): cv.string, vol.Required(CONF_FILE_PATH): cv.string}
40 CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
44 hass: HomeAssistant, entry: BlinkConfigEntry, data: dict[str, Any]
46 """Reauth flow wrapper."""
47 entry.async_start_reauth(hass, data=data)
48 persistent_notification.async_create(
51 "Blink configuration migrated to a new version. Please go to the"
52 " integrations page to re-configure (such as sending a new 2FA key)."
59 """Handle migration of a previous version config entry."""
60 _LOGGER.debug(
"Migrating from version %s", entry.version)
62 if entry.version == 1:
63 data.pop(
"login_response",
None)
66 if entry.version == 2:
72 async
def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
81 """Set up Blink via config entry."""
84 blink = Blink(session=session)
85 auth_data = deepcopy(
dict(entry.data))
86 blink.auth = Auth(auth_data, no_prompt=
True, session=session)
87 blink.refresh_rate = entry.options.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL)
92 except (ClientError, TimeoutError)
as ex:
95 if blink.auth.check_key_required():
96 _LOGGER.debug(
"Attempting a reauth flow")
99 if not blink.available:
100 raise ConfigEntryNotReady
102 await coordinator.async_config_entry_first_refresh()
104 entry.runtime_data = coordinator
106 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
113 hass: HomeAssistant, entry: BlinkConfigEntry
115 options =
dict(entry.options)
116 if CONF_SCAN_INTERVAL
not in entry.options:
117 options[CONF_SCAN_INTERVAL] = entry.data.get(
118 CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL
120 hass.config_entries.async_update_entry(entry, options=options)
124 """Unload Blink entry."""
125 return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
None setup_services(HomeAssistant hass)
bool async_setup_entry(HomeAssistant hass, BlinkConfigEntry entry)
bool async_unload_entry(HomeAssistant hass, BlinkConfigEntry entry)
bool async_migrate_entry(HomeAssistant hass, BlinkConfigEntry entry)
bool async_setup(HomeAssistant hass, ConfigType config)
None _reauth_flow_wrapper(HomeAssistant hass, BlinkConfigEntry entry, dict[str, Any] data)
None _async_import_options_from_data_if_missing(HomeAssistant hass, BlinkConfigEntry entry)
aiohttp.ClientSession async_get_clientsession(HomeAssistant hass, bool verify_ssl=True, socket.AddressFamily family=socket.AF_UNSPEC, ssl_util.SSLCipherList ssl_cipher=ssl_util.SSLCipherList.PYTHON_DEFAULT)