mirror of
https://github.com/home-assistant/core.git
synced 2025-07-27 07:07:28 +00:00
Handle powerConsumption reports with null value (#53888)
This commit is contained in:
parent
d6c3d05517
commit
cfc5111561
@ -554,6 +554,8 @@ class SmartThingsPowerConsumptionSensor(SmartThingsEntity, SensorEntity):
|
|||||||
"""Init the class."""
|
"""Init the class."""
|
||||||
super().__init__(device)
|
super().__init__(device)
|
||||||
self.report_name = report_name
|
self.report_name = report_name
|
||||||
|
# This is an exception for STATE_CLASS_MEASUREMENT per @balloob
|
||||||
|
self._attr_state_class = STATE_CLASS_MEASUREMENT
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
@ -569,7 +571,7 @@ class SmartThingsPowerConsumptionSensor(SmartThingsEntity, SensorEntity):
|
|||||||
def state(self):
|
def state(self):
|
||||||
"""Return the state of the sensor."""
|
"""Return the state of the sensor."""
|
||||||
value = self._device.status.attributes[Attribute.power_consumption].value
|
value = self._device.status.attributes[Attribute.power_consumption].value
|
||||||
if value.get(self.report_name) is None:
|
if value is None or value.get(self.report_name) is None:
|
||||||
return None
|
return None
|
||||||
if self.report_name == "power":
|
if self.report_name == "power":
|
||||||
return value[self.report_name]
|
return value[self.report_name]
|
||||||
@ -588,3 +590,10 @@ class SmartThingsPowerConsumptionSensor(SmartThingsEntity, SensorEntity):
|
|||||||
if self.report_name == "power":
|
if self.report_name == "power":
|
||||||
return POWER_WATT
|
return POWER_WATT
|
||||||
return ENERGY_KILO_WATT_HOUR
|
return ENERGY_KILO_WATT_HOUR
|
||||||
|
|
||||||
|
@property
|
||||||
|
def last_reset(self) -> datetime | None:
|
||||||
|
"""Return the time when the sensor was last reset, if any."""
|
||||||
|
if self.report_name != "power":
|
||||||
|
return utc_from_timestamp(0)
|
||||||
|
return None
|
||||||
|
@ -187,6 +187,28 @@ async def test_power_consumption_sensor(hass, device_factory):
|
|||||||
assert entry.model == device.device_type_name
|
assert entry.model == device.device_type_name
|
||||||
assert entry.manufacturer == "Unavailable"
|
assert entry.manufacturer == "Unavailable"
|
||||||
|
|
||||||
|
device = device_factory(
|
||||||
|
"vacuum",
|
||||||
|
[Capability.power_consumption_report],
|
||||||
|
{Attribute.power_consumption: {}},
|
||||||
|
)
|
||||||
|
entity_registry = er.async_get(hass)
|
||||||
|
device_registry = dr.async_get(hass)
|
||||||
|
# Act
|
||||||
|
await setup_platform(hass, SENSOR_DOMAIN, devices=[device])
|
||||||
|
# Assert
|
||||||
|
state = hass.states.get("sensor.vacuum_energy")
|
||||||
|
assert state
|
||||||
|
assert state.state == "unknown"
|
||||||
|
entry = entity_registry.async_get("sensor.vacuum_energy")
|
||||||
|
assert entry
|
||||||
|
assert entry.unique_id == f"{device.device_id}.energy"
|
||||||
|
entry = device_registry.async_get_device({(DOMAIN, device.device_id)})
|
||||||
|
assert entry
|
||||||
|
assert entry.name == device.label
|
||||||
|
assert entry.model == device.device_type_name
|
||||||
|
assert entry.manufacturer == "Unavailable"
|
||||||
|
|
||||||
|
|
||||||
async def test_update_from_signal(hass, device_factory):
|
async def test_update_from_signal(hass, device_factory):
|
||||||
"""Test the binary_sensor updates when receiving a signal."""
|
"""Test the binary_sensor updates when receiving a signal."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user