1 """Support for Aussie Broadband metric sensors."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
8 from typing
import cast
13 SensorEntityDescription,
23 from .const
import DOMAIN, SERVICE_ID
24 from .coordinator
import (
25 AussieBroadbandConfigEntry,
26 AussieBroadbandDataUpdateCoordinator,
27 AussieBroadbandServiceData,
31 @dataclass(frozen=True)
33 """Class describing Aussie Broadband sensor entities."""
35 value: Callable =
lambda x: x
38 SENSOR_DESCRIPTIONS: tuple[SensorValueEntityDescription, ...] = (
42 translation_key=
"data_used",
43 state_class=SensorStateClass.TOTAL_INCREASING,
44 native_unit_of_measurement=UnitOfInformation.MEGABYTES,
45 device_class=SensorDeviceClass.DATA_SIZE,
49 translation_key=
"downloaded",
50 state_class=SensorStateClass.TOTAL_INCREASING,
51 native_unit_of_measurement=UnitOfInformation.MEGABYTES,
52 device_class=SensorDeviceClass.DATA_SIZE,
56 translation_key=
"uploaded",
57 state_class=SensorStateClass.TOTAL_INCREASING,
58 native_unit_of_measurement=UnitOfInformation.MEGABYTES,
59 device_class=SensorDeviceClass.DATA_SIZE,
64 translation_key=
"national_calls",
65 state_class=SensorStateClass.TOTAL_INCREASING,
66 value=
lambda x: x.get(
"calls"),
70 translation_key=
"mobile_calls",
71 state_class=SensorStateClass.TOTAL_INCREASING,
72 value=
lambda x: x.get(
"calls"),
76 translation_key=
"international_calls",
77 entity_registry_enabled_default=
False,
78 state_class=SensorStateClass.TOTAL_INCREASING,
79 value=
lambda x: x.get(
"calls"),
83 translation_key=
"sms_sent",
84 state_class=SensorStateClass.TOTAL_INCREASING,
85 value=
lambda x: x.get(
"calls"),
89 translation_key=
"data_used",
90 state_class=SensorStateClass.TOTAL_INCREASING,
91 native_unit_of_measurement=UnitOfInformation.KILOBYTES,
92 device_class=SensorDeviceClass.DATA_SIZE,
93 value=
lambda x: x.get(
"kbytes"),
97 translation_key=
"voicemail_calls",
98 entity_registry_enabled_default=
False,
99 state_class=SensorStateClass.TOTAL_INCREASING,
100 value=
lambda x: x.get(
"calls"),
104 translation_key=
"other_calls",
105 entity_registry_enabled_default=
False,
106 state_class=SensorStateClass.TOTAL_INCREASING,
107 value=
lambda x: x.get(
"calls"),
112 translation_key=
"billing_cycle_length",
113 native_unit_of_measurement=UnitOfTime.DAYS,
117 translation_key=
"billing_cycle_remaining",
118 native_unit_of_measurement=UnitOfTime.DAYS,
125 entry: AussieBroadbandConfigEntry,
126 async_add_entities: AddEntitiesCallback,
128 """Set up the Aussie Broadband sensor platform from a config entry."""
133 for service
in entry.runtime_data
134 for description
in SENSOR_DESCRIPTIONS
135 if description.key
in service[
"coordinator"].data
141 CoordinatorEntity[AussieBroadbandDataUpdateCoordinator], SensorEntity
143 """Base class for Aussie Broadband metric sensors."""
145 _attr_has_entity_name =
True
146 entity_description: SensorValueEntityDescription
150 service: AussieBroadbandServiceData,
151 description: SensorValueEntityDescription,
153 """Initialize the sensor."""
154 super().
__init__(service[
"coordinator"])
158 entry_type=DeviceEntryType.SERVICE,
159 identifiers={(DOMAIN, service[SERVICE_ID])},
160 manufacturer=
"Aussie Broadband",
161 configuration_url=f
"https://my.aussiebroadband.com.au/#/{service['name'].lower()}/{service[SERVICE_ID]}/",
162 name=re.sub(
r" - AVC\d+$",
"", service[
"description"]),
163 model=service[
"name"],
168 """Return the state of the sensor."""
StateType native_value(self)
None __init__(self, AussieBroadbandServiceData service, SensorValueEntityDescription description)
None async_setup_entry(HomeAssistant hass, AussieBroadbandConfigEntry entry, AddEntitiesCallback async_add_entities)