From 68550fba4346d62e38de3fb173b334e02f16a839 Mon Sep 17 00:00:00 2001
From: BottlecapDave <me@davidskendall.co.uk>
Date: Sat, 18 Jan 2025 08:46:32 +0000
Subject: [PATCH] fix: Added more guards against invalid data when retrieving
 previous consumption data (15 minutes dev time)

---
 .../coordinators/previous_consumption_and_rates.py     | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/custom_components/octopus_energy/coordinators/previous_consumption_and_rates.py b/custom_components/octopus_energy/coordinators/previous_consumption_and_rates.py
index 7396fb4e..ae299c39 100644
--- a/custom_components/octopus_energy/coordinators/previous_consumption_and_rates.py
+++ b/custom_components/octopus_energy/coordinators/previous_consumption_and_rates.py
@@ -274,7 +274,10 @@ async def async_fetch_consumption_and_rates(
             _LOGGER.debug("Dispatches not available for intelligent tariff. Using existing rate information")
             return previous_data
           
-          if previous_data is not None and previous_data.rates[0]["start"] == period_from and previous_data.rates[-1]["end"] == period_to:
+          if (previous_data is not None and 
+              previous_data.rates is not None and 
+              len(previous_data.rates) > 0 and 
+              previous_data.rates[0]["start"] == period_from and previous_data.rates[-1]["end"] == period_to):
             _LOGGER.info('Previous rates are for our target consumption, so using previously retrieved rates and standing charges')
             rate_data = previous_data.rates
             standing_charge = { "value_inc_vat": previous_data.standing_charge }
@@ -302,7 +305,10 @@ async def async_fetch_consumption_and_rates(
             _LOGGER.error(f"Could not determine tariff code for previous consumption for gas {identifier}/{serial_number}")
             return previous_data
           
-          if previous_data is not None and previous_data.rates[0]["start"] == period_from and previous_data.rates[-1]["end"] == period_to:
+          if (previous_data is not None and 
+              previous_data.rates is not None and 
+              len(previous_data.rates) > 0 and 
+              previous_data.rates[0]["start"] == period_from and previous_data.rates[-1]["end"] == period_to):
             _LOGGER.info('Previous rates are for our target consumption, so using previously retrieved rates and standing charges')
             rate_data = previous_data.rates
             standing_charge = { "value_inc_vat": previous_data.standing_charge }