forked from home-assistant/core
Integration Sensor Initial State (#55875)
* initial state is UNAVAILABLE * update tests
This commit is contained in:
committed by
Paulus Schoutsen
parent
9ecb75dc70
commit
e7fd24eade
@@ -106,7 +106,7 @@ class IntegrationSensor(RestoreEntity, SensorEntity):
|
||||
"""Initialize the integration sensor."""
|
||||
self._sensor_source_id = source_entity
|
||||
self._round_digits = round_digits
|
||||
self._state = 0
|
||||
self._state = STATE_UNAVAILABLE
|
||||
self._method = integration_method
|
||||
|
||||
self._name = name if name is not None else f"{source_entity} integral"
|
||||
@@ -187,7 +187,10 @@ class IntegrationSensor(RestoreEntity, SensorEntity):
|
||||
except AssertionError as err:
|
||||
_LOGGER.error("Could not calculate integral: %s", err)
|
||||
else:
|
||||
if isinstance(self._state, Decimal):
|
||||
self._state += integral
|
||||
else:
|
||||
self._state = integral
|
||||
self.async_write_ha_state()
|
||||
|
||||
async_track_state_change_event(
|
||||
@@ -202,7 +205,9 @@ class IntegrationSensor(RestoreEntity, SensorEntity):
|
||||
@property
|
||||
def native_value(self):
|
||||
"""Return the state of the sensor."""
|
||||
if isinstance(self._state, Decimal):
|
||||
return round(self._state, self._round_digits)
|
||||
return self._state
|
||||
|
||||
@property
|
||||
def native_unit_of_measurement(self):
|
||||
|
@@ -81,7 +81,6 @@ async def test_restore_state(hass: HomeAssistant) -> None:
|
||||
"platform": "integration",
|
||||
"name": "integration",
|
||||
"source": "sensor.power",
|
||||
"unit": ENERGY_KILO_WATT_HOUR,
|
||||
"round": 2,
|
||||
}
|
||||
}
|
||||
@@ -114,7 +113,6 @@ async def test_restore_state_failed(hass: HomeAssistant) -> None:
|
||||
"platform": "integration",
|
||||
"name": "integration",
|
||||
"source": "sensor.power",
|
||||
"unit": ENERGY_KILO_WATT_HOUR,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -123,9 +121,10 @@ async def test_restore_state_failed(hass: HomeAssistant) -> None:
|
||||
|
||||
state = hass.states.get("sensor.integration")
|
||||
assert state
|
||||
assert state.state == "0"
|
||||
assert state.attributes.get("unit_of_measurement") == ENERGY_KILO_WATT_HOUR
|
||||
assert state.state == "unavailable"
|
||||
assert state.attributes.get("unit_of_measurement") is None
|
||||
assert state.attributes.get("state_class") == STATE_CLASS_TOTAL_INCREASING
|
||||
|
||||
assert "device_class" not in state.attributes
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user