1 """The Meater Temperature Probe integration."""
4 from datetime
import timedelta
10 ServiceUnavailableError,
13 from meater.MeaterApi
import MeaterProbe
22 from .const
import DOMAIN
24 PLATFORMS = [Platform.SENSOR]
26 _LOGGER = logging.getLogger(__name__)
30 """Set up Meater Temperature Probe from a config entry."""
33 meater_api = MeaterApi(session)
37 _LOGGER.debug(
"Authenticating with the Meater API")
38 await meater_api.authenticate(
39 entry.data[CONF_USERNAME], entry.data[CONF_PASSWORD]
41 except (ServiceUnavailableError, TooManyRequestsError)
as err:
42 raise ConfigEntryNotReady
from err
43 except AuthenticationError
as err:
45 f
"Unable to authenticate with the Meater API: {err}"
48 async
def async_update_data() -> dict[str, MeaterProbe]:
49 """Fetch data from API endpoint."""
53 async
with asyncio.timeout(10):
54 devices: list[MeaterProbe] = await meater_api.get_all_devices()
55 except AuthenticationError
as err:
57 except TooManyRequestsError
as err:
59 "Too many requests have been made to the API, rate limiting is in place"
62 return {device.id: device
for device
in devices}
70 update_method=async_update_data,
74 await coordinator.async_config_entry_first_refresh()
76 hass.data.setdefault(DOMAIN, {})
77 hass.data[DOMAIN].setdefault(
"known_probes", set())
79 hass.data[DOMAIN][entry.entry_id] = {
81 "coordinator": coordinator,
84 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
89 """Unload a config entry."""
90 if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
91 hass.data[DOMAIN].pop(entry.entry_id)
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
bool async_setup_entry(HomeAssistant hass, ConfigEntry 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)