1
mirror of https://github.com/home-assistant/core synced 2024-09-15 17:29:45 +02:00

Handle powerConsumption reports with null value (#53888)

This commit is contained in:
Chris 2021-08-02 20:50:57 -07:00 committed by GitHub
parent d6c3d05517
commit cfc5111561
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 1 deletions

View File

@ -554,6 +554,8 @@ class SmartThingsPowerConsumptionSensor(SmartThingsEntity, SensorEntity):
"""Init the class."""
super().__init__(device)
self.report_name = report_name
# This is an exception for STATE_CLASS_MEASUREMENT per @balloob
self._attr_state_class = STATE_CLASS_MEASUREMENT
@property
def name(self) -> str:
@ -569,7 +571,7 @@ class SmartThingsPowerConsumptionSensor(SmartThingsEntity, SensorEntity):
def state(self):
"""Return the state of the sensor."""
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
if self.report_name == "power":
return value[self.report_name]
@ -588,3 +590,10 @@ class SmartThingsPowerConsumptionSensor(SmartThingsEntity, SensorEntity):
if self.report_name == "power":
return POWER_WATT
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

View File

@ -187,6 +187,28 @@ async def test_power_consumption_sensor(hass, device_factory):
assert entry.model == device.device_type_name
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):
"""Test the binary_sensor updates when receiving a signal."""