From 46d626280e884632b63fdce1b8601be91eb31842 Mon Sep 17 00:00:00 2001 From: Excentyl <35411484+Excentyl@users.noreply.github.com> Date: Fri, 8 Dec 2023 16:46:08 +0000 Subject: [PATCH] Initialize energy_state without price (#97031) Co-authored-by: Erik --- homeassistant/components/energy/sensor.py | 5 +++++ tests/components/energy/test_sensor.py | 12 ++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/energy/sensor.py b/homeassistant/components/energy/sensor.py index e9760a96aa4..834a9bbb1eb 100644 --- a/homeassistant/components/energy/sensor.py +++ b/homeassistant/components/energy/sensor.py @@ -317,6 +317,11 @@ class EnergyCostSensor(SensorEntity): try: energy_price = float(energy_price_state.state) except ValueError: + if self._last_energy_sensor_state is None: + # Initialize as it's the first time all required entities except + # price are in place. This means that the cost will update the first + # time the energy is updated after the price entity is in place. + self._reset(energy_state) return energy_price_unit: str | None = energy_price_state.attributes.get( diff --git a/tests/components/energy/test_sensor.py b/tests/components/energy/test_sensor.py index fe3e6d08653..522bbe5af06 100644 --- a/tests/components/energy/test_sensor.py +++ b/tests/components/energy/test_sensor.py @@ -924,7 +924,7 @@ async def test_cost_sensor_handle_late_price_sensor( await setup_integration(hass) state = hass.states.get("sensor.energy_consumption_cost") - assert state.state == "unknown" + assert state.state == "0.0" # Energy use bumped by 10 kWh, price sensor still not yet available hass.states.async_set( @@ -935,7 +935,7 @@ async def test_cost_sensor_handle_late_price_sensor( await hass.async_block_till_done() state = hass.states.get("sensor.energy_consumption_cost") - assert state.state == "unknown" + assert state.state == "0.0" # Energy use bumped by 10 kWh, price sensor now available hass.states.async_set("sensor.energy_price", "1", price_attributes) @@ -947,7 +947,7 @@ async def test_cost_sensor_handle_late_price_sensor( await hass.async_block_till_done() state = hass.states.get("sensor.energy_consumption_cost") - assert state.state == "0.0" + assert state.state == "20.0" # Energy use bumped by 10 kWh, price sensor available hass.states.async_set( @@ -958,7 +958,7 @@ async def test_cost_sensor_handle_late_price_sensor( await hass.async_block_till_done() state = hass.states.get("sensor.energy_consumption_cost") - assert state.state == "10.0" + assert state.state == "30.0" # Energy use bumped by 10 kWh, price sensor no longer available hass.states.async_set("sensor.energy_price", "unknown", price_attributes) @@ -970,7 +970,7 @@ async def test_cost_sensor_handle_late_price_sensor( await hass.async_block_till_done() state = hass.states.get("sensor.energy_consumption_cost") - assert state.state == "10.0" + assert state.state == "30.0" # Energy use bumped by 10 kWh, price sensor again available hass.states.async_set("sensor.energy_price", "2", price_attributes) @@ -982,7 +982,7 @@ async def test_cost_sensor_handle_late_price_sensor( await hass.async_block_till_done() state = hass.states.get("sensor.energy_consumption_cost") - assert state.state == "50.0" + assert state.state == "70.0" @pytest.mark.parametrize(