-
Notifications
You must be signed in to change notification settings - Fork 108
Expand file tree
/
Copy path__init__.py
More file actions
112 lines (91 loc) · 3.61 KB
/
Copy path__init__.py
File metadata and controls
112 lines (91 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
"""Custom integration to integrate Google Home with Home Assistant.
For more details about this integration, please refer to
https://github.com/leikoilja/ha-google-home
"""
import logging
from datetime import timedelta
from typing import TYPE_CHECKING, cast
from homeassistant.components import zeroconf
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from .api import GlocaltokensApiClient
from .const import (
CONF_ANDROID_ID,
CONF_MASTER_TOKEN,
CONF_UPDATE_INTERVAL,
DATA_CLIENT,
DATA_COORDINATOR,
DOMAIN,
PLATFORMS,
SENSOR,
STARTUP_MESSAGE,
UPDATE_INTERVAL,
)
from .types import GoogleHomeConfigEntry
if TYPE_CHECKING:
from .models import GoogleHomeDevice
_LOGGER: logging.Logger = logging.getLogger(__package__)
async def async_setup_entry(hass: HomeAssistant, entry: GoogleHomeConfigEntry) -> bool:
"""Set up this integration using UI."""
if hass.data.get(DOMAIN) is None:
hass.data.setdefault(DOMAIN, {})
_LOGGER.info(STARTUP_MESSAGE)
username = cast("str", entry.data.get(CONF_USERNAME))
password = cast("str", entry.data.get(CONF_PASSWORD))
android_id = cast("str", entry.data.get(CONF_ANDROID_ID))
master_token = cast("str", entry.data.get(CONF_MASTER_TOKEN))
update_interval = cast(
"int", entry.options.get(CONF_UPDATE_INTERVAL, UPDATE_INTERVAL)
)
_LOGGER.debug(
"Coordinator update interval is: %s", timedelta(seconds=update_interval)
)
session = async_get_clientsession(hass, verify_ssl=False)
zeroconf_instance = await zeroconf.async_get_instance(hass)
glocaltokens_client = GlocaltokensApiClient(
hass=hass,
session=session,
username=username,
password=password,
master_token=master_token,
android_id=android_id,
zeroconf_instance=zeroconf_instance,
)
coordinator = DataUpdateCoordinator(
hass,
_LOGGER,
name=SENSOR,
config_entry=entry,
update_method=glocaltokens_client.update_google_devices_information,
update_interval=timedelta(seconds=update_interval),
config_entry=entry,
)
await coordinator.async_config_entry_first_refresh()
hass.data[DOMAIN][entry.entry_id] = {
DATA_CLIENT: glocaltokens_client,
DATA_COORDINATOR: coordinator,
}
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
entry.async_on_unload(entry.add_update_listener(async_update_entry))
return True
async def async_unload_entry(hass: HomeAssistant, entry: GoogleHomeConfigEntry) -> bool:
"""Handle removal of an entry."""
_LOGGER.debug("Unloading entry...")
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok
async def async_update_entry(hass: HomeAssistant, entry: GoogleHomeConfigEntry) -> None:
"""Update config entry."""
_LOGGER.debug("Options updated, updating coordinator interval...")
update_interval: int = entry.options.get(CONF_UPDATE_INTERVAL, UPDATE_INTERVAL)
coordinator: DataUpdateCoordinator[list[GoogleHomeDevice]] = hass.data[DOMAIN][
entry.entry_id
][DATA_COORDINATOR]
# This property has a setter
coordinator.update_interval = timedelta(seconds=update_interval) # type: ignore[misc]
_LOGGER.debug(
"Coordinator update interval is: %s", timedelta(seconds=update_interval)
)