Skip to content

Commit

Permalink
feat(binary-sensor): Added next duration in minutes for target rates
Browse files Browse the repository at this point in the history
  • Loading branch information
BottlecapDave committed Jan 19, 2023
1 parent 2bd037b commit bae76b2
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 7 deletions.
1 change: 1 addition & 0 deletions custom_components/octopus_energy/binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"]

Expand Down
7 changes: 5 additions & 2 deletions custom_components/octopus_energy/target_sensor_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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
}
15 changes: 10 additions & 5 deletions tests/unit/test_is_target_rate_active.py
Original file line number Diff line number Diff line change
Expand Up @@ -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():
Expand Down Expand Up @@ -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
}
]

Expand All @@ -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():
Expand Down

0 comments on commit bae76b2

Please sign in to comment.