Skip to content

Commit 7d29034

Browse files
committed
Refactor to use more of entity_description
1 parent c137c22 commit 7d29034

File tree

5 files changed

+39
-48
lines changed

5 files changed

+39
-48
lines changed

custom_components/powersensor/sensor/PowersensorEntity.py

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,11 @@
2424
@dataclass(frozen=True, kw_only=True)
2525
class PowersensorSensorEntityDescription(SensorEntityDescription):
2626
conversion_function: Callable | None = None
27-
precision : int | None = None
28-
event : str | None = None
27+
event: str | None = None
2928
message_key: str | None = None
30-
visible: bool = True
31-
category: EntityCategory | None = None
3229

3330
class PowersensorEntity(SensorEntity, Generic[MeasurementType]):
34-
"""Powersensor Plug Class--designed to handle all measurements of the plug--perhaps less expressive."""
31+
"""Base class for all Powersensor entities."""
3532

3633
def __init__(
3734
self,
@@ -55,15 +52,12 @@ def __init__(
5552
self._timeout = timedelta(seconds=timeout_seconds) # Adjust as needed
5653

5754
self.measurement_type: MeasurementType = measurement_type
55+
self.entity_description = input_config[measurement_type]
5856
config : PowersensorSensorEntityDescription = input_config[measurement_type]
57+
self.entity_description = config
58+
5959
self._attr_unique_id = f"powersensor_{mac}_{measurement_type}"
60-
self._attr_device_class = config.device_class
61-
self._attr_native_unit_of_measurement = config.native_unit_of_measurement
6260
self._attr_device_info = self.device_info
63-
self._attr_suggested_display_precision = config.precision
64-
self._attr_entity_registry_visible_default = config.visible
65-
self._attr_entity_category = config.category
66-
self._attr_state_class = config.state_class
6761

6862
self._signal = DATA_UPDATE_SIGNAL_FMT_MAC_EVENT % (mac, config.event)
6963
self._message_key = config.message_key

custom_components/powersensor/sensor/PowersensorHouseholdEntity.py

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ class HouseholdMeasurements(Enum):
3636
@dataclass(frozen=True, kw_only=True)
3737
class PowersensorVirtualHouseholdSensorEntityDescription(SensorEntityDescription):
3838
formatter: Callable
39-
precision : int
40-
event : str
39+
event: str
4140

4241
FMT_INT = lambda f: int(f)
4342
FMT_WS_TO_KWH = lambda f: float(f)/3600000
@@ -53,67 +52,67 @@ class PowersensorHouseholdEntity(SensorEntity):
5352
HouseholdMeasurements.POWER_HOME_USE : PowersensorVirtualHouseholdSensorEntityDescription(
5453
key = "Power - Home use",
5554
device_class = SensorDeviceClass.POWER,
56-
state_class = SensorStateClass.MEASUREMENT,
5755
native_unit_of_measurement = UnitOfPower.WATT,
56+
state_class = SensorStateClass.MEASUREMENT,
57+
suggested_display_precision = 0,
5858
formatter = FMT_INT,
59-
precision = 0,
6059
event = "home_usage"),
6160
HouseholdMeasurements.POWER_FROM_GRID : PowersensorVirtualHouseholdSensorEntityDescription(
6261
key = "Power - From grid",
6362
device_class = SensorDeviceClass.POWER,
64-
state_class = SensorStateClass.MEASUREMENT,
6563
native_unit_of_measurement = UnitOfPower.WATT,
64+
state_class = SensorStateClass.MEASUREMENT,
65+
suggested_display_precision = 0,
6666
formatter = FMT_INT,
67-
precision = 0,
6867
event = "from_grid"),
6968
HouseholdMeasurements.POWER_TO_GRID : PowersensorVirtualHouseholdSensorEntityDescription(
7069
key = "Power - To grid",
7170
device_class = SensorDeviceClass.POWER,
72-
state_class = SensorStateClass.MEASUREMENT,
7371
native_unit_of_measurement = UnitOfPower.WATT,
72+
state_class = SensorStateClass.MEASUREMENT,
73+
suggested_display_precision = 0,
7474
formatter = FMT_INT,
75-
precision = 0,
7675
event = "to_grid"),
7776
HouseholdMeasurements.POWER_SOLAR_GENERATION : PowersensorVirtualHouseholdSensorEntityDescription(
7877
key = "Power - Solar generation",
7978
device_class = SensorDeviceClass.POWER,
80-
state_class = SensorStateClass.MEASUREMENT,
8179
native_unit_of_measurement = UnitOfPower.WATT,
80+
state_class = SensorStateClass.MEASUREMENT,
81+
suggested_display_precision = 0,
8282
formatter = FMT_INT,
83-
precision = 0,
8483
event = "solar_generation"),
8584

8685
HouseholdMeasurements.ENERGY_HOME_USE : PowersensorVirtualHouseholdSensorEntityDescription(
8786
key ="Energy - Home usage",
8887
device_class = SensorDeviceClass.ENERGY,
89-
state_class = SensorStateClass.TOTAL_INCREASING,
9088
native_unit_of_measurement = UnitOfEnergy.KILO_WATT_HOUR,
89+
state_class = SensorStateClass.TOTAL_INCREASING,
90+
suggested_display_precision = 3,
9191
formatter = FMT_WS_TO_KWH,
92-
precision = 3,
9392
event = "home_usage_summation"),
9493
HouseholdMeasurements.ENERGY_FROM_GRID : PowersensorVirtualHouseholdSensorEntityDescription(
9594
key = "Energy - From grid",
9695
device_class = SensorDeviceClass.ENERGY,
9796
state_class = SensorStateClass.TOTAL_INCREASING,
9897
native_unit_of_measurement = UnitOfEnergy.KILO_WATT_HOUR,
9998
formatter = FMT_WS_TO_KWH,
100-
precision = 3,
99+
suggested_display_precision = 3,
101100
event = "from_grid_summation"),
102101
HouseholdMeasurements.ENERGY_TO_GRID : PowersensorVirtualHouseholdSensorEntityDescription(
103102
key = "Energy - To grid",
104103
device_class = SensorDeviceClass.ENERGY,
105104
state_class = SensorStateClass.TOTAL_INCREASING,
106105
native_unit_of_measurement = UnitOfEnergy.KILO_WATT_HOUR,
107106
formatter = FMT_WS_TO_KWH,
108-
precision = 3,
107+
suggested_display_precision = 3,
109108
event = "to_grid_summation"),
110109
HouseholdMeasurements.ENERGY_SOLAR_GENERATION : PowersensorVirtualHouseholdSensorEntityDescription(
111110
key = "Energy - Solar generation",
112111
device_class = SensorDeviceClass.ENERGY,
113112
state_class = SensorStateClass.TOTAL_INCREASING,
114113
native_unit_of_measurement = UnitOfEnergy.KILO_WATT_HOUR,
115114
formatter = FMT_WS_TO_KWH,
116-
precision = 3,
115+
suggested_display_precision = 3,
117116
event = "solar_generation_summation"),
118117
}
119118

@@ -124,10 +123,8 @@ def __init__(self, vhh: VirtualHousehold, measurement_type: HouseholdMeasurement
124123

125124
self._attr_name = self._config.key
126125
self._attr_unique_id = f"{DOMAIN}_vhh_{self._config.event}"
127-
self._attr_device_class = self._config.device_class
128-
self._attr_state_class = self._config.state_class
129-
self._attr_native_unit_of_measurement = self._config.native_unit_of_measurement
130-
self._attr_suggested_display_precision = self._config.precision
126+
127+
self.entity_description = self._config
131128

132129
@property
133130
def device_info(self) -> DeviceInfo:

custom_components/powersensor/sensor/PowersensorPlugEntity.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
device_class = SensorDeviceClass.POWER,
2828
state_class = SensorStateClass.MEASUREMENT,
2929
native_unit_of_measurement=UnitOfPower.WATT,
30-
precision = 1,
30+
suggested_display_precision = 1,
3131
event = "average_power",
3232
message_key = "watts",
3333
),
@@ -37,51 +37,51 @@
3737
device_class = SensorDeviceClass.VOLTAGE,
3838
state_class = SensorStateClass.MEASUREMENT,
3939
native_unit_of_measurement=UnitOfElectricPotential.VOLT,
40-
precision = 2,
40+
suggested_display_precision = 2,
4141
event = "average_power_components",
4242
message_key = "volts",
43-
visible = False,
43+
entity_registry_visible_default = False,
4444
),
4545
PlugMeasurements.APPARENT_CURRENT: PowersensorSensorEntityDescription(
4646
key = "Apparent Current",
4747
device_class = SensorDeviceClass.CURRENT,
4848
state_class = SensorStateClass.MEASUREMENT,
4949
native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
50-
precision = 2,
50+
suggested_display_precision = 2,
5151
event = "average_power_components",
5252
message_key = "apparent_current",
53-
visible = False),
53+
entity_registry_visible_default = False),
5454
PlugMeasurements.ACTIVE_CURRENT: PowersensorSensorEntityDescription(
5555
key = "Active Current",
5656
device_class = SensorDeviceClass.CURRENT,
5757
state_class = SensorStateClass.MEASUREMENT,
5858
native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
59-
precision = 2,
59+
suggested_display_precision = 2,
6060
event = "average_power_components",
6161
message_key = "active_current",
62-
visible = False),
62+
entity_registry_visible_default = False),
6363
PlugMeasurements.REACTIVE_CURRENT: PowersensorSensorEntityDescription(
6464
key = "Reactive Current",
6565
device_class = SensorDeviceClass.CURRENT,
6666
state_class = SensorStateClass.MEASUREMENT,
6767
native_unit_of_measurement=UnitOfElectricCurrent.AMPERE,
68-
precision = 2,
68+
suggested_display_precision = 2,
6969
event = "average_power_components",
7070
message_key = "reactive_current",
71-
visible = False),
71+
entity_registry_visible_default = False),
7272
PlugMeasurements.SUMMATION_ENERGY: PowersensorSensorEntityDescription(
7373
key = "Total Energy",
7474
device_class = SensorDeviceClass.ENERGY,
7575
state_class = SensorStateClass.TOTAL,
7676
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
77-
precision = 2,
77+
suggested_display_precision = 2,
7878
event = "summation_energy",
7979
message_key = "summation_joules",
8080
conversion_function = lambda v: v / 3600000.0),
8181
PlugMeasurements.ROLE:
8282
PowersensorSensorEntityDescription(
8383
key="Device Role",
84-
category =EntityCategory.DIAGNOSTIC,
84+
entity_category = EntityCategory.DIAGNOSTIC,
8585
event ="role",
8686
message_key="role")
8787
}

custom_components/powersensor/sensor/PowersensorSensorEntity.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
device_class = SensorDeviceClass.BATTERY,
2727
state_class = SensorStateClass.MEASUREMENT,
2828
native_unit_of_measurement = PERCENTAGE,
29-
precision = 0,
29+
suggested_display_precision = 0,
3030
event = "battery_level",
3131
message_key = "volts",
3232
conversion_function = lambda v: max(
@@ -38,23 +38,23 @@
3838
device_class = SensorDeviceClass.POWER,
3939
state_class = SensorStateClass.MEASUREMENT,
4040
native_unit_of_measurement = UnitOfPower.WATT,
41-
precision = 1,
41+
suggested_display_precision = 1,
4242
event = "average_power",
4343
message_key = "watts"
4444
),
4545
SensorMeasurements.SUMMATION_ENERGY: PowersensorSensorEntityDescription(
4646
key = "Total Energy",
4747
device_class = SensorDeviceClass.ENERGY,
4848
native_unit_of_measurement = UnitOfEnergy.KILO_WATT_HOUR,
49-
precision = 2,
49+
suggested_display_precision = 2,
5050
state_class = SensorStateClass.TOTAL,
5151
event = "summation_energy",
5252
message_key = "summation_joules",
5353
conversion_function = lambda v: v / 3600000.0
5454
),
5555
SensorMeasurements.ROLE: PowersensorSensorEntityDescription(
5656
key = "Device Role",
57-
category = EntityCategory.DIAGNOSTIC,
57+
entity_category = EntityCategory.DIAGNOSTIC,
5858
event = "role",
5959
message_key = "role"
6060
),
@@ -63,8 +63,8 @@
6363
device_class = SensorDeviceClass.SIGNAL_STRENGTH,
6464
state_class = SensorStateClass.MEASUREMENT,
6565
native_unit_of_measurement = SIGNAL_STRENGTH_DECIBELS,
66-
precision = 1,
67-
category = EntityCategory.DIAGNOSTIC,
66+
suggested_display_precision = 1,
67+
entity_category = EntityCategory.DIAGNOSTIC,
6868
event = "radio_signal_quality",
6969
message_key = "average_rssi"
7070
),

tests/test_powersensor_entity.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def mock_config():
3333
key= "Total Energy",
3434
device_class= None,
3535
native_unit_of_measurement= None,
36-
precision =2,
36+
suggested_display_precision = 2,
3737
state_class=None,
3838
event = "summation_energy",
3939
message_key = "summation_joules",

0 commit comments

Comments
 (0)