1 """Common code for GogoGate2 component."""
3 from __future__
import annotations
5 from collections.abc
import Mapping
6 from datetime
import timedelta
8 from typing
import Any, NamedTuple
10 from ismartgate
import (
13 GogoGate2InfoResponse,
15 ISmartGateInfoResponse,
17 from ismartgate.common
import AbstractDoor
30 from .const
import DATA_UPDATE_COORDINATOR, DEVICE_TYPE_ISMARTGATE, DOMAIN
31 from .coordinator
import DeviceDataUpdateCoordinator
33 _LOGGER = logging.getLogger(__name__)
37 """State data for a cover entity."""
41 door: AbstractDoor |
None
45 hass: HomeAssistant, config_entry: ConfigEntry
46 ) -> DeviceDataUpdateCoordinator:
47 """Get an update coordinator."""
48 hass.data.setdefault(DOMAIN, {})
49 hass.data[DOMAIN].setdefault(config_entry.entry_id, {})
50 config_entry_data = hass.data[DOMAIN][config_entry.entry_id]
52 if DATA_UPDATE_COORDINATOR
not in config_entry_data:
53 api =
get_api(hass, config_entry.data)
55 async
def async_update_data() -> GogoGate2InfoResponse | ISmartGateInfoResponse:
57 return await api.async_info()
58 except Exception
as exception:
60 f
"Error communicating with API: {exception}"
69 update_method=async_update_data,
74 return config_entry_data[DATA_UPDATE_COORDINATOR]
78 """Generate a cover entity unique id."""
79 return f
"{config_entry.unique_id}_{door.door_id}"
83 config_entry: ConfigEntry, door: AbstractDoor, sensor_type: str
85 """Generate a cover entity unique id."""
86 return f
"{config_entry.unique_id}_{door.door_id}_{sensor_type}"
89 def get_api(hass: HomeAssistant, config_data: Mapping[str, Any]) -> AbstractGateApi:
90 """Get an api object for config data."""
91 gate_class = GogoGate2Api
93 if config_data[CONF_DEVICE] == DEVICE_TYPE_ISMARTGATE:
94 gate_class = ISmartGateApi
97 config_data[CONF_IP_ADDRESS],
98 config_data[CONF_USERNAME],
99 config_data[CONF_PASSWORD],
str sensor_unique_id(ConfigEntry config_entry, AbstractDoor door, str sensor_type)
AbstractGateApi get_api(HomeAssistant hass, Mapping[str, Any] config_data)
DeviceDataUpdateCoordinator get_data_update_coordinator(HomeAssistant hass, ConfigEntry config_entry)
str cover_unique_id(ConfigEntry config_entry, AbstractDoor door)
httpx.AsyncClient get_async_client(HomeAssistant hass, bool verify_ssl=True)