1 """The PECO Outage Counter integration."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
6 from datetime
import timedelta
7 from typing
import Final
15 UnresponsiveMeterError,
30 SMART_METER_SCAN_INTERVAL,
33 PLATFORMS: Final = [Platform.BINARY_SENSOR, Platform.SENSOR]
38 """Something to hold the data for PECO."""
40 outages: OutageResults
45 """Set up PECO Outage Counter from a config entry."""
50 county: str = entry.data[CONF_COUNTY]
52 async
def async_update_outage_data() -> PECOCoordinatorData:
53 """Fetch data from API."""
55 outages: OutageResults = (
56 await api.get_outage_totals(websession)
58 else await api.get_outage_count(county, websession)
60 alerts: AlertResults = await api.get_map_alerts(websession)
62 except HttpError
as err:
63 raise UpdateFailed(f
"Error fetching data: {err}")
from err
64 except BadJSONError
as err:
65 raise UpdateFailed(f
"Error parsing data: {err}")
from err
72 name=
"PECO Outage Count",
73 update_method=async_update_outage_data,
74 update_interval=
timedelta(minutes=OUTAGE_SCAN_INTERVAL),
77 await outage_coordinator.async_config_entry_first_refresh()
79 hass.data.setdefault(DOMAIN, {})[entry.entry_id] = {
80 "outage_count": outage_coordinator
83 if phone_number := entry.data.get(CONF_PHONE_NUMBER):
86 async
def async_update_meter_data() -> bool:
87 """Fetch data from API."""
89 data: bool = await api.meter_check(phone_number, websession)
90 except UnresponsiveMeterError
as err:
92 except HttpError
as err:
93 raise UpdateFailed(f
"Error fetching data: {err}")
from err
94 except BadJSONError
as err:
95 raise UpdateFailed(f
"Error parsing data: {err}")
from err
102 name=
"PECO Smart Meter",
103 update_method=async_update_meter_data,
104 update_interval=
timedelta(minutes=SMART_METER_SCAN_INTERVAL),
107 await meter_coordinator.async_config_entry_first_refresh()
109 hass.data[DOMAIN][entry.entry_id][
"smart_meter"] = meter_coordinator
111 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
116 """Unload a config entry."""
117 if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
118 hass.data[DOMAIN].pop(entry.entry_id)
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
bool async_unload_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)