diff --git a/Flash shell cookbook.txt b/Flash shell cookbook.txt new file mode 100644 index 0000000..f8fadb5 --- /dev/null +++ b/Flash shell cookbook.txt @@ -0,0 +1,80 @@ +1. start docker +2. anaconda +3. fdb.bat +4. flask.bat +5. In Flask: +from app.data.processing.fetch_calculate_and_output import fetch_and_output +begin_date = "2025-07-02" +end_date = "2025-08-01" +fetch_and_output(begin_date, end_date) + + +query = f"""SELECT * FROM predictions""" +df.to_csv("prediction.csv") + +import importlib +importlib.reload(parse_usgs_data) +flask code to extract + +import requests +from app.data.processing.hobolink import get_live_hobolink_data +from app.data.processing.predictive_models import v4 +from app.data.processing.usgs import parse_usgs_data + +from datetime import datetime + +This section was attempting to build an extract that exactly matched the date/time of the model (legacy) extract. +Turns out that the stream flow calculations are not sensitive to the date range -- all the aggregation in the code is to collect all samples for one day. I have concluded that the flow data that the USGS API now provides is slightly different than the legacy extract. + +begin_date = "2025-07-02 13:00:00" +end_date = "2025-08-01 12:00:00" +u_begin_date = "2025-07-02T13:00-04:00" +u_end_date = "2025-08-01T12:00-04:00" +begin_date = "2025-07-02" +end_date = "2025-08-01" + +d_begin_date = datetime.strptime(begin_date, "%Y-%m-%d") +d_begin_date = datetime.strptime(begin_date, "%Y-%m-%d %H:%M:%S") +d_end_date = datetime.strptime(end_date, "%Y-%m-%d %H:%M:%S") +d_end_date = datetime.strptime(end_date, "%Y-%m-%d") + +df_hobolink = get_live_hobolink_data(start_date = d_begin_date, end_date = d_end_date) + +res_w = requests.get("https://nwis.waterdata.usgs.gov/usa/nwis/uv/", params={"cb_00060": "on", "cb_00065": "on", "format": "rdb", "site_no": "01104500", "legacy": "1", "period": "", "begin_date": u_begin_date, "end_date": u_end_date}) + + +res_b = requests.get("https://nwis.waterdata.usgs.gov/usa/nwis/uv/", params={"cb_00045": "off", "cb_00065": "on", "format": "rdb", "site_no": "01104683", "legacy": "1", "period": "", "begin_date": u_begin_date, "end_date": u_end_date}) + + +df_usgs_w = parse_usgs_data(res_w,site_no="01104500" ) + + +df_usgs_b = parse_usgs_data(res_b, site_no="01104683") + +df_combined = v4.process_data(df_hobolink=df_hobolink, df_usgs_w=df_usgs_w, df_usgs_b=df_usgs_b) +df_predictions = v4.all_models(df_combined) + +df_combined.to_csv(f"{begin_date} - {end_date}-combined.csv", index=False) +df_predictions.to_csv(f"{begin_date} - {end_date}-predictions.csv", index=False) + +df_usgs_w.to_csv(f"{begin_date} - {end_date}-usgs_w.csv", index=False) +df_usgs_b.to_csv(f"{begin_date} - {end_date}-usgs_b.csv", index=False) +df_hobolink.to_csv(f"{begin_date} - {end_date}-hobolink.csv", index=False) + +This is the recommendation from Claude to reduce the SSL errors. "Solution 1: Use the newer waterservices endpoint (recommended)" + +res_w = requests.get("https://waterservices.usgs.gov/nwis/iv/", params={"sites": "01104500","parameterCd": "00060,00065", "startDT": u_begin_date, "endDT": u_end_date,"format": "rdb"}) + + +res_b = requests.get("https://waterservices.usgs.gov/nwis/iv/",params={"sites": "01104683","parameterCd": "00065", "startDT": u_begin_date, "endDT": u_end_date,"format": "rdb"}) + + +2. TO start flask shell: +docker compose run web flask shell + + + +from app.data.processing.fetch_calculate_and_output import fetch_and_output +begin_date = "2025-05-01" +end_date = "2025-06-04" +fetch_and_output(begin_date, end_date) diff --git a/app/admin/views/data.py b/app/admin/views/data.py index 0826838..e0a0059 100644 --- a/app/admin/views/data.py +++ b/app/admin/views/data.py @@ -116,6 +116,7 @@ def download_from_db(self, sql_table_name: str): # The reason it's OK in this case is because users don't touch it. # However it is dangerous to do this in some other contexts. query = f"""SELECT * FROM {sql_table_name}""" + # query = f"""SELECT * FROM prediction""" try: df = execute_sql(query) except ProgrammingError: diff --git a/app/data/processing/Predictive Model Outputs.py b/app/data/processing/Predictive Model Outputs.py new file mode 100644 index 0000000..d4fdd4d --- /dev/null +++ b/app/data/processing/Predictive Model Outputs.py @@ -0,0 +1,16 @@ +import pandas as pd +import requests + + +# Get data and parse returned JSON +url = "http://localhost/api/v1/model" +res = requests.get(url).json() +records = [ + {"reach": reach["reach"], **row} + for reach in res["model_outputs"] + for row in reach["predictions"] +] + +# Turn into Pandas DataFrame +df = pd.DataFrame(records) +print(df.head()) diff --git a/app/data/processing/fetch_calculate_and_output.py b/app/data/processing/fetch_calculate_and_output.py new file mode 100644 index 0000000..3ac1121 --- /dev/null +++ b/app/data/processing/fetch_calculate_and_output.py @@ -0,0 +1,91 @@ +""" +These are intended to be run from the Flask Shell. They are not incorporated in the web app. + +To run: +1. start docker +2. anaconda +3. fdb.bat +4. flask.bat +5. In Flask: + from app.data.processing.fetch_calculate_and_output import fetch_and_output, consolidate + begin_date = "2025-07-02" + end_date = "2025-08-01" + fetch_and_output(begin_date, end_date) +""" + +import os +import re +from datetime import datetime + +import pandas as pd +import requests + +from app.data.processing.hobolink import get_live_hobolink_data +from app.data.processing.predictive_models import v4 +from app.data.processing.usgs import parse_usgs_data + + +dir_pattern_re = re.compile("^2025-[0-9][0-9]-[0-9][0-9]") + + +def fetch_and_output(begin_date: str, end_date: str) -> None: + d_begin_date = datetime.strptime(begin_date, "%Y-%m-%d") + d_end_date = datetime.strptime(end_date, "%Y-%m-%d") + df_hobolink = get_live_hobolink_data(start_date=d_begin_date, end_date=d_end_date) + res_w = requests.get( + "https://waterservices.usgs.gov/nwis/iv/", + params={ + "sites": "01104500", + "parameterCd": "00060,00065", + "startDT": begin_date, + "endDT": end_date, + "format": "rdb", + }, + ) + + res_b = requests.get( + "https://waterservices.usgs.gov/nwis/iv/", + params={ + "sites": "01104683", + "parameterCd": "00065", + "startDT": begin_date, + "endDT": end_date, + "format": "rdb", + }, + ) + + df_usgs_w = parse_usgs_data(res_w, site_no="01104500") + df_usgs_b = parse_usgs_data(res_b, site_no="01104683") + + df_combined = v4.process_data(df_hobolink=df_hobolink, df_usgs_w=df_usgs_w, df_usgs_b=df_usgs_b) + df_predictions = v4.all_models(df_combined) + + df_combined.to_csv(f"{begin_date} - {end_date}-combined.csv", index=False) + df_predictions.to_csv(f"{begin_date} - {end_date}-predictions.csv", index=False) + + df_usgs_w.to_csv(f"{begin_date} - {end_date}-usgs_w.csv", index=False) + df_usgs_b.to_csv(f"{begin_date} - {end_date}-usgs_b.csv", index=False) + df_hobolink.to_csv(f"{begin_date} - {end_date}-hobolink.csv", index=False) + return + + +def consolidate(category: str) -> None: + dir_list = os.listdir(".") + match_list = [] + for file in dir_list: + if dir_pattern_re.search(file) and file.find(category.lower()) > -1: + match_list.append(file) + match_list.sort() + first = True + for file in match_list: + df = pd.read_csv(file) + if first: + first = False + consol_df = df + else: + consol_df = pd.concat([consol_df, df]) + subset_cols = ["reach_id", "time"] if category.lower().startswith("pred") else ["time"] + consol_df = consol_df.drop_duplicates(subset=subset_cols) + consol_df.to_csv(match_list[0][:10] + " - " + match_list[-1][13:] + ".csv", index=False) + print(consol_df.shape) + return diff --git a/app/data/processing/hobolink.py b/app/data/processing/hobolink.py index 63c99ee..30a68b6 100644 --- a/app/data/processing/hobolink.py +++ b/app/data/processing/hobolink.py @@ -29,6 +29,7 @@ def get_live_hobolink_data( start_date: datetime | None = None, end_date: datetime | None = None, + # When this value was 50, Hobolink wasn't returning Temperature. Change to 30 Apri 2026 days_ago: int = 30, loggers: str | None = None, exclude_sensors: list[str] | None = None, @@ -73,9 +74,9 @@ def request_to_hobolink( data: list[dict[str, Any]] = [] start_date_for_req = start_date - end_date_for_req = min(start_date + pagination_delta, end_date) + # end_date_for_req = min(start_date + pagination_delta, end_date) + end_date_for_req = end_date half_interval = False - while True: res = requests.get( urljoin(BASE_URL, "/v1/data"), diff --git a/app/data/processing/predictive_models/v4.py b/app/data/processing/predictive_models/v4.py index 07e409b..6daf17d 100644 --- a/app/data/processing/predictive_models/v4.py +++ b/app/data/processing/predictive_models/v4.py @@ -28,7 +28,6 @@ def process_data( df_hobolink = df_hobolink.copy() df_usgs_w = df_usgs_w.copy() df_usgs_b = df_usgs_b.copy() - # Cast to datetime type. # When this comes from Celery, it might be a string. df_hobolink["time"] = pd.to_datetime(df_hobolink["time"]) @@ -55,7 +54,6 @@ def process_data( gamma = np.log(df_hobolink["rh"] / 100) + (b * temp_celsius) / (c + temp_celsius) dew_point_est = (c * gamma / (b - gamma)) * 9 / 5 + 32 df_hobolink["dew_point"] = df_hobolink["dew_point"].fillna(dew_point_est) - # Now collapse the data. # Take the mean measurements of everything except rain; rain is the sum # within an hour. (HOBOlink devices record all rain seen in 10 minutes). @@ -97,7 +95,6 @@ def process_data( ) .reset_index() ) - # This is an outer join to include all the data (we collect more Hobolink # data than USGS data). With that said, for the most recent value, we need # to make sure one of the sources didn't update before the other one did. diff --git a/app/data/processing/usgs.py b/app/data/processing/usgs.py index b0e2be9..1b8f038 100644 --- a/app/data/processing/usgs.py +++ b/app/data/processing/usgs.py @@ -8,6 +8,8 @@ """ import os +from datetime import datetime +from datetime import timedelta from typing import Union import pandas as pd @@ -22,8 +24,9 @@ USGS_URL = "https://waterdata.usgs.gov/nwis/uv" +NEW_USGS_URL = "https://waterservices.usgs.gov/nwis/iv/" USGS_STATIC_FILE_NAME = "usgs.pickle" -USGS_DEFAULT_DAYS_AGO = 30 +USGS_DEFAULT_DAYS_AGO = 100 USGS_ROWS_PER_HOUR_WALTHAM = 4 USGS_ROWS_PER_HOUR_MUDDY_RIVER = 6 @@ -48,6 +51,7 @@ def get_live_usgs_data( return df res = request_to_usgs(days_ago=days_ago, site_no=site_no) + df = parse_usgs_data(res, site_no=site_no) return df @@ -62,13 +66,17 @@ def request_to_usgs(days_ago: int = 14, site_no: str = "01104500") -> requests.m Returns: Request Response containing the data from the request. """ + + """Replaced this code with the new calling sequence for USGS data April 2026 # if site is waltham, takes both gage height and flow discharge, # otherwise, only takes gage height + if site_no == "01104500": additional_feature = "on" else: additional_feature = "off" + payload = { "cb_00060": additional_feature, "cb_00065": "on", # always accepts gage height @@ -78,6 +86,27 @@ def request_to_usgs(days_ago: int = 14, site_no: str = "01104500") -> requests.m } res = requests.get(USGS_URL, params=payload) + """ + + # New code April 2026 + + today = datetime.now().date() + delta_days_ago = today - timedelta(days=days_ago) + + start_date_str = delta_days_ago.strftime("%Y-%m-%d") + end_date_str = today.strftime("%Y-%m-%d") + + payload = { + "sites": site_no, + "parameterCd": "00060,00065", + "format": "rdb", + "startDT": start_date_str, + "endDT": end_date_str, + } + + res = requests.get(NEW_USGS_URL, params=payload) + ### + if res.status_code >= 400: error_msg = ( "API request to the USGS endpoint failed with status " f"code {res.status_code}." @@ -118,11 +147,14 @@ def parse_usgs_data(res: Union[str, requests.models.Response], site_no: str) -> if site_no not in column_map: raise ValueError(f"Unknown site number {site_no}. Cannot map columns.") df = df.rename(columns=column_map[site_no]) - df = df[list(column_map[site_no].values())] # Convert types - df["time"] = pd.to_datetime(df["time"]).dt.tz_localize("US/Eastern").dt.tz_convert("UTC") + df["time"] = ( + pd.to_datetime(df["time"]) + .dt.tz_localize("US/Eastern", ambiguous="NaT") + .dt.tz_convert("UTC") + ) # Note to self: ran this once in a test and it gave the following error: # >>> ValueError: could not convert string to float: '' # Reran and it went away @@ -130,5 +162,6 @@ def parse_usgs_data(res: Union[str, requests.models.Response], site_no: str) -> numeric_columns = set(column_map[site_no].values()) - {"time"} # All columns except "time" for col in numeric_columns: - df[col] = df[col].replace("", None).astype(float) + df[col] = df[col].replace("", None).replace("Ice", None).astype(float) + return df diff --git a/prediction.csv b/prediction.csv new file mode 100644 index 0000000..ece6be2 --- /dev/null +++ b/prediction.csv @@ -0,0 +1,536 @@ +,reach_id,time,predicted_ecoli_cfu_100ml,safe +0,2,2025-12-31 18:00:00+00:00,398.0639839092087,True +1,2,2025-12-31 19:00:00+00:00,397.65232815841586,True +2,2,2025-12-31 20:00:00+00:00,396.8791766085349,True +3,2,2025-12-31 21:00:00+00:00,397.1673519049141,True +4,2,2025-12-31 22:00:00+00:00,397.0134294987028,True +5,2,2025-12-31 23:00:00+00:00,396.3865855110771,True +6,2,2026-01-24 23:00:00+00:00,123.11684425806939,True +7,2,2026-01-25 00:00:00+00:00,120.52680758827202,True +8,2,2026-01-25 01:00:00+00:00,117.86771744511987,True +9,2,2026-01-25 02:00:00+00:00,115.1331688661695,True +10,2,2026-01-25 03:00:00+00:00,112.30871568534708,True +11,2,2026-01-25 04:00:00+00:00,109.26729955754588,True +12,2,2026-01-25 05:00:00+00:00,106.21116814463804,True +13,2,2026-01-25 06:00:00+00:00,103.29018606264945,True +14,2,2026-01-25 07:00:00+00:00,100.38660016246396,True +15,2,2026-01-25 08:00:00+00:00,97.58413097119053,True +16,2,2026-01-25 09:00:00+00:00,94.85804198760515,True +17,2,2026-01-25 10:00:00+00:00,92.2442531663579,True +18,2,2026-01-25 11:00:00+00:00,89.87604803260507,True +19,2,2026-01-25 12:00:00+00:00,87.79500927880581,True +20,2,2026-01-25 13:00:00+00:00,85.95411155949564,True +21,2,2026-01-25 14:00:00+00:00,84.34494707052666,True +22,2,2026-01-25 15:00:00+00:00,83.12431587980623,True +23,2,2026-01-25 16:00:00+00:00,82.30775861877729,True +24,2,2026-01-25 17:00:00+00:00,81.68687074739289,True +25,2,2026-01-25 18:00:00+00:00,81.34581074137778,True +26,2,2026-01-25 19:00:00+00:00,81.3443774055609,True +27,2,2026-01-25 20:00:00+00:00,81.57668782728295,True +28,2,2026-01-25 21:00:00+00:00,82.06324101428154,True +29,2,2026-01-25 22:00:00+00:00,82.65233484708777,True +30,2,2026-01-25 23:00:00+00:00,83.1154681799261,True +31,2,2026-01-26 00:00:00+00:00,83.67434820647705,True +32,2,2026-01-26 01:00:00+00:00,84.33412596941871,True +33,2,2026-01-26 02:00:00+00:00,85.0707808902969,True +34,2,2026-01-26 03:00:00+00:00,85.91895081740486,True +35,2,2026-01-26 04:00:00+00:00,86.92886236509536,True +36,2,2026-01-26 05:00:00+00:00,88.16477878655706,True +37,2,2026-01-26 06:00:00+00:00,89.36020677134354,True +38,2,2026-01-26 07:00:00+00:00,90.45624925773448,True +39,2,2026-01-26 08:00:00+00:00,91.93448691071804,True +40,2,2026-01-26 09:00:00+00:00,93.50940787788389,True +41,2,2026-01-26 10:00:00+00:00,95.13183975045175,True +42,2,2026-01-26 11:00:00+00:00,96.86867241792339,True +43,2,2026-01-26 12:00:00+00:00,98.7176616358703,True +44,2,2026-01-26 13:00:00+00:00,100.68390989292254,True +45,2,2026-01-26 14:00:00+00:00,102.83711790087177,True +46,2,2026-01-26 15:00:00+00:00,105.1103626993932,True +47,2,2026-01-26 16:00:00+00:00,107.43155155654553,True +48,2,2026-01-26 17:00:00+00:00,109.82341241859694,True +49,2,2026-01-26 18:00:00+00:00,112.25999178708041,True +50,2,2026-01-26 19:00:00+00:00,114.57210556788202,True +51,2,2026-01-26 20:00:00+00:00,117.04046456631347,True +52,2,2026-01-26 21:00:00+00:00,119.36174060721982,True +53,2,2026-01-26 22:00:00+00:00,121.64317572931493,True +54,2,2026-01-26 23:00:00+00:00,124.32419817247067,True +55,2,2026-01-27 00:00:00+00:00,127.4578092592314,True +56,2,2026-01-27 01:00:00+00:00,131.29626228254457,True +57,2,2026-01-27 02:00:00+00:00,135.34087144368007,True +58,2,2026-01-27 03:00:00+00:00,139.29963188271304,True +59,2,2026-01-27 04:00:00+00:00,142.45203249809893,True +60,2,2026-01-27 05:00:00+00:00,145.5599392354555,True +61,2,2026-01-27 06:00:00+00:00,149.49698228058963,True +62,2,2026-01-27 07:00:00+00:00,153.18147070060965,True +63,2,2026-01-27 08:00:00+00:00,156.67325235212314,True +64,2,2026-01-27 09:00:00+00:00,160.12137950317103,True +65,2,2026-01-27 10:00:00+00:00,163.12140989767667,True +66,2,2026-01-27 11:00:00+00:00,165.72463871289926,True +67,2,2026-01-27 12:00:00+00:00,168.45822837344136,True +68,2,2026-01-27 13:00:00+00:00,171.48149618350553,True +69,2,2026-01-27 14:00:00+00:00,174.37056813799285,True +70,2,2026-01-27 15:00:00+00:00,177.1435904544538,True +71,2,2026-01-27 16:00:00+00:00,179.86343000966096,True +72,2,2026-01-27 17:00:00+00:00,183.07082796011522,True +73,2,2026-01-27 18:00:00+00:00,186.75449790252392,True +74,3,2025-12-31 18:00:00+00:00,374.0915830222469,True +75,3,2025-12-31 19:00:00+00:00,373.5851402577154,True +76,3,2025-12-31 20:00:00+00:00,373.7070772021317,True +77,3,2025-12-31 21:00:00+00:00,371.0006844338852,True +78,3,2025-12-31 22:00:00+00:00,372.27246440521134,True +79,3,2025-12-31 23:00:00+00:00,376.02565246180694,True +80,4,2025-12-31 18:00:00+00:00,350.94992974397456,True +81,4,2025-12-31 19:00:00+00:00,350.192203227763,True +82,4,2025-12-31 20:00:00+00:00,349.83273183358,True +83,4,2025-12-31 21:00:00+00:00,347.0608207159875,True +84,4,2025-12-31 22:00:00+00:00,347.59970929363885,True +85,4,2025-12-31 23:00:00+00:00,350.3104347533149,True +86,5,2025-12-31 18:00:00+00:00,417.16132788156085,True +87,5,2025-12-31 19:00:00+00:00,418.26410407445826,True +88,5,2025-12-31 20:00:00+00:00,420.7283120685651,True +89,5,2025-12-31 21:00:00+00:00,423.57096016829024,True +90,5,2025-12-31 22:00:00+00:00,426.3119659975133,True +91,5,2025-12-31 23:00:00+00:00,428.92983366988733,True +92,5,2026-01-01 00:00:00+00:00,431.89419252264764,True +93,5,2026-01-01 01:00:00+00:00,434.98620664060365,True +94,5,2026-01-01 02:00:00+00:00,438.1371629035573,True +95,5,2026-01-01 03:00:00+00:00,441.42861750192105,True +96,5,2026-01-01 04:00:00+00:00,444.246173182695,True +97,5,2026-01-01 05:00:00+00:00,446.50072017435394,True +98,5,2026-01-01 06:00:00+00:00,448.4630656534036,True +99,5,2026-01-01 07:00:00+00:00,450.75297810889106,True +100,5,2026-01-01 08:00:00+00:00,453.05930857537516,True +101,5,2026-01-01 09:00:00+00:00,455.4829616798704,True +102,5,2026-01-01 10:00:00+00:00,457.96827974101956,True +103,5,2026-01-01 11:00:00+00:00,460.7997389291677,True +104,5,2026-01-01 12:00:00+00:00,463.4010096600813,True +105,5,2026-01-01 13:00:00+00:00,465.25209188864665,True +106,5,2026-01-01 14:00:00+00:00,469.5752704781405,True +107,5,2026-01-01 15:00:00+00:00,475.1110676849511,True +108,5,2026-01-01 16:00:00+00:00,478.20905747922245,True +109,5,2026-01-01 17:00:00+00:00,479.9866134956578,True +110,5,2026-01-01 18:00:00+00:00,480.8968596897409,True +111,5,2026-01-01 19:00:00+00:00,483.6516059984767,True +112,5,2026-01-01 20:00:00+00:00,488.61013877294255,True +113,5,2026-01-01 21:00:00+00:00,493.52219870354253,True +114,5,2026-01-01 22:00:00+00:00,501.81147997979787,True +115,5,2026-01-01 23:00:00+00:00,510.8848811991351,True +116,5,2026-01-02 00:00:00+00:00,518.6949871486134,True +117,5,2026-01-02 01:00:00+00:00,526.6265453306911,True +118,5,2026-01-02 02:00:00+00:00,534.4909558208478,True +119,5,2026-01-02 03:00:00+00:00,541.4922770147674,True +120,5,2026-01-02 04:00:00+00:00,547.7893264335282,True +121,5,2026-01-02 05:00:00+00:00,552.4417699520295,True +122,5,2026-01-02 06:00:00+00:00,556.0612957365064,True +123,5,2026-01-02 07:00:00+00:00,559.1552848340807,True +124,5,2026-01-02 08:00:00+00:00,561.195625659547,True +125,5,2026-01-02 09:00:00+00:00,562.363700127489,True +126,5,2026-01-02 10:00:00+00:00,562.8658566033209,True +127,5,2026-01-02 11:00:00+00:00,563.297803726047,True +128,5,2026-01-07 03:00:00+00:00,445.6300742725884,True +129,5,2026-01-07 04:00:00+00:00,443.05454877759036,True +130,5,2026-01-07 05:00:00+00:00,440.337297419648,True +131,5,2026-01-07 06:00:00+00:00,437.46649615614655,True +132,5,2026-01-07 07:00:00+00:00,580.3502521616081,True +133,5,2026-01-07 08:00:00+00:00,585.8864549851585,True +134,5,2026-01-07 09:00:00+00:00,592.327827725029,True +135,5,2026-01-07 10:00:00+00:00,644.7208204803001,False +136,5,2026-01-07 11:00:00+00:00,702.0510866484994,False +137,5,2026-01-07 12:00:00+00:00,700.1645530518146,False +138,5,2026-01-07 13:00:00+00:00,698.9499705251195,False +139,5,2026-01-07 14:00:00+00:00,698.7996082724272,False +140,5,2026-01-07 15:00:00+00:00,700.5523450301737,False +141,5,2026-01-07 16:00:00+00:00,728.3862004535608,False +142,5,2026-01-07 17:00:00+00:00,730.6830784659666,False +143,5,2026-01-07 18:00:00+00:00,730.9206678142259,False +144,5,2026-01-07 19:00:00+00:00,746.6297997603838,False +145,5,2026-01-07 20:00:00+00:00,758.3653078295778,False +146,5,2026-01-07 21:00:00+00:00,755.4858387545127,False +147,5,2026-01-07 22:00:00+00:00,754.0245658656484,False +148,5,2026-01-07 23:00:00+00:00,764.7601683352487,False +149,5,2026-01-08 00:00:00+00:00,760.5914607048657,False +150,5,2026-01-08 01:00:00+00:00,756.5000969138221,False +151,5,2026-01-08 02:00:00+00:00,751.8292825776734,False +152,5,2026-01-08 03:00:00+00:00,746.0499636069283,False +153,5,2026-01-08 04:00:00+00:00,739.2148797889857,False +154,5,2026-01-08 05:00:00+00:00,729.6822896840356,False +155,5,2026-01-08 06:00:00+00:00,718.4700906050675,False +156,5,2026-01-08 07:00:00+00:00,685.8390196051658,False +157,5,2026-01-08 08:00:00+00:00,664.0544772198256,False +158,5,2026-01-08 09:00:00+00:00,641.9680195091929,False +159,5,2026-01-08 10:00:00+00:00,575.6602461749601,True +160,5,2026-01-08 11:00:00+00:00,516.1176681938551,True +161,5,2026-01-08 12:00:00+00:00,505.4850639038066,True +162,5,2026-01-08 13:00:00+00:00,495.01311299816655,True +163,5,2026-01-08 14:00:00+00:00,483.72053407649986,True +164,5,2026-01-08 15:00:00+00:00,473.42903663348824,True +165,5,2026-01-08 16:00:00+00:00,449.61429375305835,True +166,5,2026-01-08 17:00:00+00:00,440.2431705533954,True +167,5,2026-01-08 18:00:00+00:00,431.4985010643793,True +168,5,2026-01-08 19:00:00+00:00,417.48789085604716,True +169,5,2026-01-08 20:00:00+00:00,404.46088720467657,True +170,5,2026-01-08 21:00:00+00:00,397.2170171584668,True +171,5,2026-01-08 22:00:00+00:00,391.5988696189823,True +172,5,2026-01-08 23:00:00+00:00,380.8234635822837,True +173,5,2026-01-09 00:00:00+00:00,376.27342167149044,True +174,5,2026-01-09 01:00:00+00:00,372.0257333752032,True +175,5,2026-01-09 02:00:00+00:00,368.1569814531053,True +176,5,2026-01-09 03:00:00+00:00,364.42388853071276,True +177,5,2026-01-09 04:00:00+00:00,360.98946334294146,True +178,5,2026-01-09 05:00:00+00:00,358.22570412602266,True +179,5,2026-01-09 06:00:00+00:00,356.01475307827945,True +180,5,2026-01-09 07:00:00+00:00,354.4114226236939,True +181,5,2026-01-09 08:00:00+00:00,352.81583199875894,True +182,5,2026-01-09 09:00:00+00:00,351.30256968224097,True +183,5,2026-01-09 10:00:00+00:00,349.8578165876868,True +184,5,2026-01-09 11:00:00+00:00,348.4755306132,True +185,5,2026-01-09 12:00:00+00:00,346.1198715553637,True +186,5,2026-01-09 13:00:00+00:00,342.41260834804245,True +187,5,2026-01-09 14:00:00+00:00,338.18852095150135,True +188,5,2026-01-09 15:00:00+00:00,333.89815937193015,True +189,5,2026-01-09 16:00:00+00:00,328.7226777950609,True +190,5,2026-01-09 17:00:00+00:00,323.090769123075,True +191,5,2026-01-09 18:00:00+00:00,317.885954221949,True +192,5,2026-01-09 19:00:00+00:00,312.08988767976047,True +193,5,2026-01-09 20:00:00+00:00,307.83311719523215,True +194,5,2026-01-09 21:00:00+00:00,304.01160206837477,True +195,5,2026-01-09 22:00:00+00:00,299.8130595828685,True +196,5,2026-01-09 23:00:00+00:00,295.7961666208796,True +197,5,2026-01-10 00:00:00+00:00,291.9258135183381,True +198,5,2026-01-10 01:00:00+00:00,288.2548586724761,True +199,5,2026-01-10 02:00:00+00:00,284.5632420217924,True +200,5,2026-01-10 03:00:00+00:00,280.9845646116814,True +201,5,2026-01-10 04:00:00+00:00,277.5788103831658,True +202,5,2026-01-10 05:00:00+00:00,274.4010422466362,True +203,5,2026-01-10 06:00:00+00:00,271.3107040648656,True +204,5,2026-01-10 07:00:00+00:00,268.3917423725314,True +205,5,2026-01-10 08:00:00+00:00,265.8027221126712,True +206,5,2026-01-10 09:00:00+00:00,263.1751309639544,True +207,5,2026-01-10 10:00:00+00:00,260.7542963964874,True +208,5,2026-01-10 11:00:00+00:00,258.46677083720857,True +209,5,2026-01-10 12:00:00+00:00,254.84362009879592,True +210,5,2026-01-10 13:00:00+00:00,251.35918678624725,True +211,5,2026-01-10 14:00:00+00:00,247.44740666875595,True +212,5,2026-01-10 15:00:00+00:00,243.0523464479383,True +213,5,2026-01-10 16:00:00+00:00,238.54445638907706,True +214,5,2026-01-10 17:00:00+00:00,234.73352795847188,True +215,5,2026-01-10 18:00:00+00:00,231.27600198836964,True +216,5,2026-01-10 19:00:00+00:00,228.49975601886842,True +217,5,2026-01-10 20:00:00+00:00,226.83091540169997,True +218,5,2026-01-10 21:00:00+00:00,225.94778220300802,True +219,5,2026-01-10 22:00:00+00:00,224.02984150524793,True +220,5,2026-01-10 23:00:00+00:00,222.34370911762454,True +221,5,2026-01-11 00:00:00+00:00,258.1271389014983,True +222,5,2026-01-11 01:00:00+00:00,281.370322258102,True +223,5,2026-01-11 02:00:00+00:00,312.0108997931277,True +224,5,2026-01-11 03:00:00+00:00,341.09849330534456,True +225,5,2026-01-11 04:00:00+00:00,390.59489729540735,True +226,5,2026-01-11 05:00:00+00:00,397.9181863997456,True +227,5,2026-01-11 06:00:00+00:00,411.44092590377295,True +228,5,2026-01-11 07:00:00+00:00,425.9913091219122,True +229,5,2026-01-11 08:00:00+00:00,434.71305549507423,True +230,5,2026-01-11 09:00:00+00:00,436.31467301549736,True +231,5,2026-01-11 10:00:00+00:00,438.3083872724732,True +232,5,2026-01-11 11:00:00+00:00,440.28756255087967,True +233,5,2026-01-11 12:00:00+00:00,444.0776972907088,True +234,5,2026-01-11 13:00:00+00:00,448.8680490818766,True +235,5,2026-01-11 14:00:00+00:00,453.87926297712846,True +236,5,2026-01-11 15:00:00+00:00,459.1101965913946,True +237,5,2026-01-11 16:00:00+00:00,463.7398040352703,True +238,5,2026-01-11 17:00:00+00:00,468.85292875457196,True +239,5,2026-01-11 18:00:00+00:00,471.6375505899059,True +240,5,2026-01-11 19:00:00+00:00,473.6230538649424,True +241,5,2026-01-11 20:00:00+00:00,474.50382852783076,True +242,5,2026-01-11 21:00:00+00:00,474.34743996384486,True +243,5,2026-01-11 22:00:00+00:00,474.3724318061209,True +244,5,2026-01-11 23:00:00+00:00,474.50978715563474,True +245,5,2026-01-12 00:00:00+00:00,447.41941999602085,True +246,5,2026-01-12 01:00:00+00:00,409.92628039435846,True +247,5,2026-01-12 02:00:00+00:00,370.39270339574864,True +248,5,2026-01-12 03:00:00+00:00,339.29830156715934,True +249,5,2026-01-12 04:00:00+00:00,297.39259934425576,True +250,5,2026-01-12 05:00:00+00:00,292.9470873356936,True +251,5,2026-01-12 06:00:00+00:00,284.5006254445024,True +252,5,2026-01-12 07:00:00+00:00,275.8718217663056,True +253,5,2026-01-12 08:00:00+00:00,271.65676980828164,True +254,5,2026-01-12 09:00:00+00:00,271.36175753495706,True +255,5,2026-01-12 10:00:00+00:00,270.92753721168833,True +256,5,2026-01-12 11:00:00+00:00,270.4857224271068,True +257,5,2026-01-12 12:00:00+00:00,270.6856070670116,True +258,5,2026-01-12 13:00:00+00:00,271.45393780010863,True +259,5,2026-01-12 14:00:00+00:00,273.5370379863138,True +260,5,2026-01-12 15:00:00+00:00,276.18725736641625,True +261,5,2026-01-12 16:00:00+00:00,278.460921954708,True +262,5,2026-01-12 17:00:00+00:00,280.5623274611693,True +263,5,2026-01-12 18:00:00+00:00,281.97615236157714,True +264,5,2026-01-12 19:00:00+00:00,283.45651975855264,True +265,5,2026-01-12 20:00:00+00:00,284.24009623166427,True +266,5,2026-01-12 21:00:00+00:00,285.2361202891631,True +267,5,2026-01-12 22:00:00+00:00,287.4153680518718,True +268,5,2026-01-12 23:00:00+00:00,290.01748522837573,True +269,5,2026-01-13 00:00:00+00:00,292.7743570470138,True +270,5,2026-01-13 01:00:00+00:00,296.13437132733065,True +271,5,2026-01-13 02:00:00+00:00,299.79421510524173,True +272,5,2026-01-13 03:00:00+00:00,303.8584609501021,True +273,5,2026-01-13 04:00:00+00:00,307.7850344086956,True +274,5,2026-01-13 05:00:00+00:00,311.63117860808984,True +275,5,2026-01-13 06:00:00+00:00,315.605278075489,True +276,5,2026-01-13 07:00:00+00:00,319.6739211424886,True +277,5,2026-01-13 08:00:00+00:00,323.62332304991423,True +278,5,2026-01-13 09:00:00+00:00,327.7085625417759,True +279,5,2026-01-13 10:00:00+00:00,331.4694356438841,True +280,5,2026-01-13 11:00:00+00:00,334.7452121137008,True +281,5,2026-01-13 12:00:00+00:00,337.60868564946264,True +282,5,2026-01-13 13:00:00+00:00,339.22270787293445,True +283,5,2026-01-13 14:00:00+00:00,340.3780528212854,True +284,5,2026-01-13 15:00:00+00:00,341.2489128150848,True +285,5,2026-01-13 16:00:00+00:00,342.32772939799844,True +286,5,2026-01-13 17:00:00+00:00,342.45635785965334,True +287,5,2026-01-13 18:00:00+00:00,341.83255896956064,True +288,5,2026-01-13 19:00:00+00:00,340.3976428132981,True +289,5,2026-01-13 20:00:00+00:00,338.50107237299795,True +290,5,2026-01-13 21:00:00+00:00,336.75608926987104,True +291,5,2026-01-13 22:00:00+00:00,337.0757659690219,True +292,5,2026-01-13 23:00:00+00:00,337.63745362465465,True +293,5,2026-01-14 00:00:00+00:00,337.9003457203061,True +294,5,2026-01-14 01:00:00+00:00,337.9784281627686,True +295,5,2026-01-14 02:00:00+00:00,338.053219397745,True +296,5,2026-01-14 03:00:00+00:00,338.1255941791562,True +297,5,2026-01-14 04:00:00+00:00,337.5931876204325,True +298,5,2026-01-14 05:00:00+00:00,336.8125177654162,True +299,5,2026-01-14 06:00:00+00:00,336.0188443317829,True +300,5,2026-01-14 07:00:00+00:00,334.7349583096399,True +301,5,2026-01-14 08:00:00+00:00,333.5055300014193,True +302,5,2026-01-14 09:00:00+00:00,331.88899860336664,True +303,5,2026-01-14 10:00:00+00:00,330.0263271783343,True +304,5,2026-01-14 11:00:00+00:00,328.30382859860816,True +305,5,2026-01-14 12:00:00+00:00,324.83846272526375,True +306,5,2026-01-14 13:00:00+00:00,320.45439497231587,True +307,5,2026-01-14 14:00:00+00:00,316.7488888974154,True +308,5,2026-01-14 15:00:00+00:00,312.76438389635865,True +309,5,2026-01-14 16:00:00+00:00,309.6945179755833,True +310,5,2026-01-14 17:00:00+00:00,306.6794457391254,True +311,5,2026-01-14 18:00:00+00:00,305.6786866852973,True +312,5,2026-01-14 19:00:00+00:00,305.01100010583457,True +313,5,2026-01-14 20:00:00+00:00,303.54730394454776,True +314,5,2026-01-14 21:00:00+00:00,301.8736146063458,True +315,5,2026-01-14 22:00:00+00:00,299.78371772361766,True +316,5,2026-01-14 23:00:00+00:00,297.46289503956666,True +317,5,2026-01-15 00:00:00+00:00,295.1995761760437,True +318,5,2026-01-15 01:00:00+00:00,292.72652500939506,True +319,5,2026-01-15 02:00:00+00:00,290.0021026336058,True +320,5,2026-01-15 03:00:00+00:00,287.23446408390737,True +321,5,2026-01-15 04:00:00+00:00,284.6775454069051,True +322,5,2026-01-15 05:00:00+00:00,281.9264014505115,True +323,5,2026-01-15 06:00:00+00:00,278.563066979342,True +324,5,2026-01-15 07:00:00+00:00,274.6952258137522,True +325,5,2026-01-15 08:00:00+00:00,270.73520420775736,True +326,5,2026-01-15 09:00:00+00:00,266.43269691127523,True +327,5,2026-01-15 10:00:00+00:00,261.8999391646497,True +328,5,2026-01-15 11:00:00+00:00,257.2319379788491,True +329,5,2026-01-15 12:00:00+00:00,254.0065552316984,True +330,5,2026-01-15 13:00:00+00:00,251.2424767841985,True +331,5,2026-01-15 14:00:00+00:00,247.28961016127766,True +332,5,2026-01-15 15:00:00+00:00,243.02601688604963,True +333,5,2026-01-15 16:00:00+00:00,238.9956236419384,True +334,5,2026-01-15 17:00:00+00:00,235.00736739597275,True +335,5,2026-01-15 18:00:00+00:00,232.35938258719784,True +336,5,2026-01-15 19:00:00+00:00,230.5282084356433,True +337,5,2026-01-15 20:00:00+00:00,229.14418059043683,True +338,5,2026-01-15 21:00:00+00:00,227.0663362786041,True +339,5,2026-01-15 22:00:00+00:00,225.0600284273678,True +340,5,2026-01-15 23:00:00+00:00,223.48345485949716,True +341,5,2026-01-16 00:00:00+00:00,222.93846097489896,True +342,5,2026-01-16 01:00:00+00:00,222.63830826025233,True +343,5,2026-01-16 02:00:00+00:00,222.81926156564566,True +344,5,2026-01-16 03:00:00+00:00,223.24248778607412,True +345,5,2026-01-16 04:00:00+00:00,223.96945997814353,True +346,5,2026-01-16 05:00:00+00:00,224.99309739041078,True +347,5,2026-01-16 06:00:00+00:00,226.21213318170737,True +348,5,2026-01-16 07:00:00+00:00,227.43316494044242,True +349,5,2026-01-16 08:00:00+00:00,228.8444610557789,True +350,5,2026-01-16 09:00:00+00:00,230.9967603939934,True +351,5,2026-01-16 10:00:00+00:00,233.69442308136988,True +352,5,2026-01-16 11:00:00+00:00,237.10827967537693,True +353,5,2026-01-16 12:00:00+00:00,240.68790592889073,True +354,5,2026-01-16 13:00:00+00:00,244.1143068200026,True +355,5,2026-01-16 14:00:00+00:00,247.31960173916517,True +356,5,2026-01-16 15:00:00+00:00,249.96270738636704,True +357,5,2026-01-16 16:00:00+00:00,251.9523552465858,True +358,5,2026-01-16 17:00:00+00:00,253.5461940589839,True +359,5,2026-01-16 18:00:00+00:00,255.45206480158134,True +360,5,2026-01-16 19:00:00+00:00,257.35259203843935,True +361,5,2026-01-16 20:00:00+00:00,259.25353655706476,True +362,5,2026-01-16 21:00:00+00:00,260.35908193553564,True +363,5,2026-01-16 22:00:00+00:00,261.5173622736149,True +364,5,2026-01-16 23:00:00+00:00,262.39634951658644,True +365,5,2026-01-17 00:00:00+00:00,263.3711338484147,True +366,5,2026-01-17 01:00:00+00:00,264.8196346337769,True +367,5,2026-01-17 02:00:00+00:00,266.35794763848224,True +368,5,2026-01-17 03:00:00+00:00,268.26327145550357,True +369,5,2026-01-17 04:00:00+00:00,270.30008805538205,True +370,5,2026-01-17 05:00:00+00:00,272.5999685137567,True +371,5,2026-01-17 06:00:00+00:00,274.73441211059793,True +372,5,2026-01-17 07:00:00+00:00,277.18888287231186,True +373,5,2026-01-17 08:00:00+00:00,279.65431632286555,True +374,5,2026-01-17 09:00:00+00:00,282.16061510522854,True +375,5,2026-01-17 10:00:00+00:00,284.52386245645476,True +376,5,2026-01-17 11:00:00+00:00,286.7347429786754,True +377,5,2026-01-17 12:00:00+00:00,289.3113369016589,True +378,5,2026-01-17 13:00:00+00:00,291.33675526352306,True +379,5,2026-01-17 14:00:00+00:00,293.65540552303304,True +380,5,2026-01-17 15:00:00+00:00,297.0086440370269,True +381,5,2026-01-17 16:00:00+00:00,300.0870325496762,True +382,5,2026-01-17 17:00:00+00:00,303.6170147185233,True +383,5,2026-01-17 18:00:00+00:00,306.85948382615163,True +384,5,2026-01-17 19:00:00+00:00,309.76633309976074,True +385,5,2026-01-17 20:00:00+00:00,312.84899665064376,True +386,5,2026-01-17 21:00:00+00:00,316.38383607932394,True +387,5,2026-01-17 22:00:00+00:00,318.54372072783275,True +388,5,2026-01-17 23:00:00+00:00,320.7213711528165,True +389,5,2026-01-18 00:00:00+00:00,322.81786505225307,True +390,5,2026-01-18 01:00:00+00:00,324.7170571111591,True +391,5,2026-01-18 02:00:00+00:00,326.5488696568444,True +392,5,2026-01-18 03:00:00+00:00,328.4904100573654,True +393,5,2026-01-18 04:00:00+00:00,330.27815507898816,True +394,5,2026-01-18 05:00:00+00:00,332.0627059508507,True +395,5,2026-01-18 06:00:00+00:00,333.9861104468083,True +396,5,2026-01-18 07:00:00+00:00,336.35291006379583,True +397,5,2026-01-18 08:00:00+00:00,338.5797040951974,True +398,5,2026-01-18 09:00:00+00:00,340.7691267162692,True +399,5,2026-01-18 10:00:00+00:00,342.7472031700197,True +400,5,2026-01-18 11:00:00+00:00,344.7108056006481,True +401,5,2026-01-18 12:00:00+00:00,346.14951184854283,True +402,5,2026-01-18 13:00:00+00:00,348.32386806075147,True +403,5,2026-01-18 14:00:00+00:00,351.7379982610581,True +404,5,2026-01-18 15:00:00+00:00,356.7472690784839,True +405,5,2026-01-18 16:00:00+00:00,361.5427163537052,True +406,5,2026-01-18 17:00:00+00:00,366.78401398618746,True +407,5,2026-01-18 18:00:00+00:00,371.26626096172583,True +408,5,2026-01-18 19:00:00+00:00,374.4373952740259,True +409,5,2026-01-18 20:00:00+00:00,377.2041024482957,True +410,5,2026-01-18 21:00:00+00:00,380.83770014229873,True +411,5,2026-01-18 22:00:00+00:00,382.263075661058,True +412,5,2026-01-18 23:00:00+00:00,494.19185316081723,True +413,5,2026-01-19 00:00:00+00:00,494.53279558429955,True +414,5,2026-01-19 01:00:00+00:00,494.12278391765676,True +415,5,2026-01-19 02:00:00+00:00,493.1529304979948,True +416,5,2026-01-19 03:00:00+00:00,491.9095255932672,True +417,5,2026-01-19 04:00:00+00:00,490.81638952076867,True +418,5,2026-01-19 05:00:00+00:00,489.46948432739674,True +419,5,2026-01-19 06:00:00+00:00,487.89502547603666,True +420,5,2026-01-19 07:00:00+00:00,486.0024499731274,True +421,5,2026-01-19 08:00:00+00:00,483.6853451624168,True +422,5,2026-01-19 09:00:00+00:00,479.94514719935887,True +423,5,2026-01-19 10:00:00+00:00,475.5247837477234,True +424,5,2026-01-19 11:00:00+00:00,470.1302259684128,True +425,5,2026-01-19 12:00:00+00:00,466.27183060491603,True +426,5,2026-01-19 13:00:00+00:00,463.55098556650677,True +427,5,2026-01-19 14:00:00+00:00,460.7868206203912,True +428,5,2026-01-19 15:00:00+00:00,459.0205108600727,True +429,5,2026-01-19 16:00:00+00:00,456.76892461643445,True +430,5,2026-01-19 17:00:00+00:00,454.8753959507999,True +431,5,2026-01-19 18:00:00+00:00,452.4959147876826,True +432,5,2026-01-19 19:00:00+00:00,450.34599539084786,True +433,5,2026-01-19 20:00:00+00:00,448.64476604757266,True +434,5,2026-01-19 21:00:00+00:00,447.43839688363516,True +435,5,2026-01-19 22:00:00+00:00,446.9398367323031,True +436,5,2026-01-19 23:00:00+00:00,439.62429568002705,True +437,5,2026-01-20 00:00:00+00:00,439.21828404601195,True +438,5,2026-01-20 01:00:00+00:00,438.92253987754106,True +439,5,2026-01-20 02:00:00+00:00,438.7476301008978,True +440,5,2026-01-20 03:00:00+00:00,438.3420283381792,True +441,5,2026-01-20 04:00:00+00:00,438.113380379584,True +442,5,2026-01-20 05:00:00+00:00,438.06970474922065,True +443,5,2026-01-20 06:00:00+00:00,438.37388649706884,True +444,5,2026-01-20 07:00:00+00:00,439.09303579007394,True +445,5,2026-01-20 08:00:00+00:00,440.4920451992127,True +446,5,2026-01-20 09:00:00+00:00,442.85176494356784,True +447,5,2026-01-20 10:00:00+00:00,445.55338191743766,True +448,5,2026-01-20 11:00:00+00:00,449.17855498464445,True +449,5,2026-01-20 12:00:00+00:00,452.532288446534,True +450,5,2026-01-20 13:00:00+00:00,456.6104930549005,True +451,5,2026-01-20 14:00:00+00:00,459.9675255926916,True +452,5,2026-01-20 15:00:00+00:00,462.11619799955827,True +453,5,2026-01-20 16:00:00+00:00,463.9402587427474,True +454,5,2026-01-20 17:00:00+00:00,464.7361676120584,True +455,5,2026-01-20 18:00:00+00:00,465.7186569828128,True +456,5,2026-01-20 19:00:00+00:00,466.53354024259386,True +457,5,2026-01-20 20:00:00+00:00,467.8133507659492,True +458,5,2026-01-20 21:00:00+00:00,469.12786938611197,True +459,5,2026-01-20 22:00:00+00:00,474.2845543561658,True +460,5,2026-01-20 23:00:00+00:00,479.8555517209615,True +461,5,2026-01-21 00:00:00+00:00,485.5683127988659,True +462,5,2026-01-21 01:00:00+00:00,491.5066471219067,True +463,5,2026-01-21 02:00:00+00:00,497.15795545071796,True +464,5,2026-01-21 03:00:00+00:00,503.1550352397027,True +465,5,2026-01-21 04:00:00+00:00,509.1801951843443,True +466,5,2026-01-21 05:00:00+00:00,515.1386872080886,True +467,5,2026-01-21 06:00:00+00:00,521.7490429263518,True +468,5,2026-01-21 07:00:00+00:00,527.5789839861308,True +469,5,2026-01-21 08:00:00+00:00,533.5228623055065,True +470,5,2026-01-21 09:00:00+00:00,540.2510538855241,True +471,5,2026-01-21 10:00:00+00:00,547.4161365580715,True +472,5,2026-01-21 11:00:00+00:00,553.7533334025063,True +473,5,2026-01-21 12:00:00+00:00,558.3254216272461,True +474,5,2026-01-21 13:00:00+00:00,560.5354574705337,True +475,5,2026-01-21 14:00:00+00:00,561.1419662219059,True +476,5,2026-01-21 15:00:00+00:00,559.0388938007586,True +477,5,2026-01-21 16:00:00+00:00,557.1427918803671,True +478,5,2026-01-21 17:00:00+00:00,555.206994593153,True +479,5,2026-01-21 18:00:00+00:00,552.6151585612098,True +480,5,2026-01-21 19:00:00+00:00,552.104964854772,True +481,5,2026-01-21 20:00:00+00:00,551.9714870954481,True +482,5,2026-01-21 21:00:00+00:00,550.6234456024824,True +483,5,2026-01-21 22:00:00+00:00,553.5053837595138,True +484,5,2026-01-21 23:00:00+00:00,555.9731153523517,True +485,5,2026-01-22 00:00:00+00:00,557.7066843389172,True +486,5,2026-01-22 01:00:00+00:00,559.32502418028,True +487,5,2026-01-22 02:00:00+00:00,560.7438994599016,True +488,5,2026-01-22 03:00:00+00:00,561.767902617281,True +489,5,2026-01-22 04:00:00+00:00,560.9845030905934,True +490,5,2026-01-22 05:00:00+00:00,559.1546988142155,True +491,5,2026-01-22 06:00:00+00:00,626.7427623984988,True +492,5,2026-01-22 07:00:00+00:00,634.3059871382471,False +493,5,2026-01-22 08:00:00+00:00,631.237946359076,False +494,5,2026-01-22 09:00:00+00:00,627.7731878955315,True +495,5,2026-01-22 10:00:00+00:00,623.8890577970955,True +496,5,2026-01-22 11:00:00+00:00,620.0652953197431,True +497,5,2026-01-22 12:00:00+00:00,610.5594511103781,True +498,5,2026-01-22 13:00:00+00:00,600.1380022228807,True +499,5,2026-01-22 14:00:00+00:00,591.2669408055253,True +500,5,2026-01-22 15:00:00+00:00,583.9047688439967,True +501,5,2026-01-22 16:00:00+00:00,579.4947410121728,True +502,5,2026-01-22 17:00:00+00:00,575.4488762109183,True +503,5,2026-01-22 18:00:00+00:00,571.6207357561774,True +504,5,2026-01-22 19:00:00+00:00,567.894750856675,True +505,5,2026-01-22 20:00:00+00:00,563.0908045672132,True +506,5,2026-01-22 21:00:00+00:00,557.2808328033948,True +507,5,2026-01-22 22:00:00+00:00,552.6840182622298,True +508,5,2026-01-22 23:00:00+00:00,548.7095563207582,True +509,5,2026-01-23 00:00:00+00:00,544.9614024418322,True +510,5,2026-01-23 01:00:00+00:00,541.2716672388071,True +511,5,2026-01-23 02:00:00+00:00,537.7025456693104,True +512,5,2026-01-23 03:00:00+00:00,534.8316588438001,True +513,5,2026-01-23 04:00:00+00:00,532.0077545027694,True +514,5,2026-01-23 05:00:00+00:00,529.3700815863727,True +515,5,2026-01-23 06:00:00+00:00,519.1363574297844,True +516,5,2026-01-23 07:00:00+00:00,509.27564624192837,True +517,5,2026-01-23 08:00:00+00:00,506.8605483369754,True +518,5,2026-01-23 09:00:00+00:00,504.10638981857994,True +519,5,2026-01-23 10:00:00+00:00,501.2471769224855,True +520,5,2026-01-23 11:00:00+00:00,498.1318863867789,True +521,5,2026-01-23 12:00:00+00:00,494.7522901522504,True +522,5,2026-01-23 13:00:00+00:00,490.9742031313043,True +523,5,2026-01-23 14:00:00+00:00,487.5461662668808,True +524,5,2026-01-23 15:00:00+00:00,483.1228491450821,True +525,5,2026-01-23 16:00:00+00:00,478.9381488545217,True +526,5,2026-01-23 17:00:00+00:00,474.69019856737617,True +527,5,2026-01-23 18:00:00+00:00,469.97171194631056,True +528,5,2026-01-23 19:00:00+00:00,465.39345200764194,True +529,5,2026-01-23 20:00:00+00:00,460.5810594559917,True +530,5,2026-01-23 21:00:00+00:00,455.6714378898272,True +531,5,2026-01-23 22:00:00+00:00,451.6681152632162,True +532,5,2026-01-23 23:00:00+00:00,448.14350208181463,True +533,5,2026-01-24 00:00:00+00:00,445.4105211747377,True +534,5,2026-01-24 01:00:00+00:00,443.3067436494215,True