diff --git a/custom_components/octopus_energy/binary_sensor.py b/custom_components/octopus_energy/binary_sensor.py index d6deb95d..fc797ddc 100644 --- a/custom_components/octopus_energy/binary_sensor.py +++ b/custom_components/octopus_energy/binary_sensor.py @@ -239,6 +239,7 @@ def is_on(self): self._attributes["next_time"] = active_result["next_time"] self._attributes["current_duration_in_minutes"] = active_result["current_duration_in_minutes"] + self._attributes["next_duration_in_minutes"] = active_result["next_duration_in_minutes"] return active_result["is_active"] diff --git a/custom_components/octopus_energy/target_sensor_utils.py b/custom_components/octopus_energy/target_sensor_utils.py index ca641e68..6ef2f7bd 100644 --- a/custom_components/octopus_energy/target_sensor_utils.py +++ b/custom_components/octopus_energy/target_sensor_utils.py @@ -131,6 +131,7 @@ def is_target_rate_active(current_date: datetime, applicable_rates, offset: str is_active = False next_time = None current_duration_in_minutes = 0 + next_duration_in_minutes = 0 total_applicable_rates = len(applicable_rates) if (total_applicable_rates > 0): @@ -172,10 +173,12 @@ def is_target_rate_active(current_date: datetime, applicable_rates, offset: str is_active = True elif current_date < valid_from: next_time = valid_from + next_duration_in_minutes = rate["duration_in_minutes"] break return { - "next_time": next_time, "is_active": is_active, - "current_duration_in_minutes": current_duration_in_minutes + "current_duration_in_minutes": current_duration_in_minutes, + "next_time": next_time, + "next_duration_in_minutes": next_duration_in_minutes } diff --git a/tests/unit/test_is_target_rate_active.py b/tests/unit/test_is_target_rate_active.py index 592afb4e..befe8bbe 100644 --- a/tests/unit/test_is_target_rate_active.py +++ b/tests/unit/test_is_target_rate_active.py @@ -35,8 +35,9 @@ async def test_when_called_before_rates_then_not_active_returned(): # Assert assert result != None assert result["is_active"] == False - assert result["next_time"] == rates[0]["valid_from"] assert result["current_duration_in_minutes"] == 0 + assert result["next_time"] == rates[0]["valid_from"] + assert result["next_duration_in_minutes"] == 60 @pytest.mark.asyncio async def test_when_called_during_rates_then_active_returned(): @@ -72,17 +73,20 @@ async def test_when_called_during_rates_then_active_returned(): { "current_date": datetime.strptime("2022-02-09T10:15:00Z", "%Y-%m-%dT%H:%M:%S%z"), "expected_next_time": datetime.strptime("2022-02-09T12:00:00Z", "%Y-%m-%dT%H:%M:%S%z"), - "expected_duration_in_minutes": 90 + "expected_current_duration_in_minutes": 90, + "expected_next_duration_in_minutes": 60 }, { "current_date": datetime.strptime("2022-02-09T12:35:00Z", "%Y-%m-%dT%H:%M:%S%z"), "expected_next_time": datetime.strptime("2022-02-09T14:00:00Z", "%Y-%m-%dT%H:%M:%S%z"), - "expected_duration_in_minutes": 60 + "expected_current_duration_in_minutes": 60, + "expected_next_duration_in_minutes": 30 }, { "current_date": datetime.strptime("2022-02-09T14:05:00Z", "%Y-%m-%dT%H:%M:%S%z"), "expected_next_time": None, - "expected_duration_in_minutes": 30 + "expected_current_duration_in_minutes": 30, + "expected_next_duration_in_minutes": 0 } ] @@ -95,8 +99,9 @@ async def test_when_called_during_rates_then_active_returned(): # Assert assert result != None assert result["is_active"] == True + assert result["current_duration_in_minutes"] == test["expected_current_duration_in_minutes"] assert result["next_time"] == test["expected_next_time"] - assert result["current_duration_in_minutes"] == test["expected_duration_in_minutes"] + assert result["next_duration_in_minutes"] == test["expected_next_duration_in_minutes"] @pytest.mark.asyncio async def test_when_called_after_rates_then_not_active_returned():