1 """Sensor component for PECO outage counter."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from typing
import Final
11 SensorEntityDescription,
21 DataUpdateCoordinator,
24 from .
import PECOCoordinatorData
25 from .const
import ATTR_CONTENT, CONF_COUNTY, DOMAIN
28 @dataclass(frozen=True, kw_only=True)
30 """Description for PECO sensor."""
32 value_fn: Callable[[PECOCoordinatorData], int | str]
33 attribute_fn: Callable[[PECOCoordinatorData], dict[str, str]]
36 PARALLEL_UPDATES: Final = 0
37 SENSOR_LIST: tuple[PECOSensorEntityDescription, ...] = (
40 translation_key=
"customers_out",
41 value_fn=
lambda data:
int(data.outages.customers_out),
42 attribute_fn=
lambda data: {},
43 state_class=SensorStateClass.MEASUREMENT,
46 key=
"percent_customers_out",
47 translation_key=
"percent_customers_out",
48 native_unit_of_measurement=PERCENTAGE,
49 value_fn=
lambda data:
int(data.outages.percent_customers_out),
50 attribute_fn=
lambda data: {},
51 state_class=SensorStateClass.MEASUREMENT,
55 translation_key=
"outage_count",
56 value_fn=
lambda data:
int(data.outages.outage_count),
57 attribute_fn=
lambda data: {},
58 state_class=SensorStateClass.MEASUREMENT,
61 key=
"customers_served",
62 translation_key=
"customers_served",
63 value_fn=
lambda data:
int(data.outages.customers_served),
64 attribute_fn=
lambda data: {},
65 state_class=SensorStateClass.MEASUREMENT,
69 translation_key=
"map_alert",
70 value_fn=
lambda data:
str(data.alerts.alert_title),
71 attribute_fn=
lambda data: {ATTR_CONTENT: data.alerts.alert_content},
78 config_entry: ConfigEntry,
79 async_add_entities: AddEntitiesCallback,
81 """Set up the sensor platform."""
82 county: str = config_entry.data[CONF_COUNTY]
83 coordinator = hass.data[DOMAIN][config_entry.entry_id][
"outage_count"]
86 PecoSensor(sensor, county, coordinator)
for sensor
in SENSOR_LIST
91 CoordinatorEntity[DataUpdateCoordinator[PECOCoordinatorData]], SensorEntity
93 """PECO outage counter sensor."""
95 entity_description: PECOSensorEntityDescription
97 _attr_has_entity_name =
True
101 description: PECOSensorEntityDescription,
103 coordinator: DataUpdateCoordinator[PECOCoordinatorData],
105 """Initialize the sensor."""
109 identifiers={(DOMAIN, county)}, name=county.capitalize()
115 """Return the value of the sensor."""
120 """Return state attributes for the sensor."""
int|str native_value(self)
None __init__(self, PECOSensorEntityDescription description, str county, DataUpdateCoordinator[PECOCoordinatorData] coordinator)
dict[str, str] extra_state_attributes(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)