Welcome to the preheat_open Quick Start Guide!

Installation

If you haven’t done so already, please install the package by the terminal command

pip install preheat_open

Setting up an API key

This step is required to access data via the Neogrid API. Obtain or access your API key by accessing your user profile page in the PreHEAT App.

Importing and setting up a configuration object

The preheat_open package consists of a model layer and an api interface. These are found in the modules preheat_open and preheat_open.api modules, respectively. It is recommended to import both modules as aliases:

[1]:
import preheat_open as po
import preheat_open.api.configuration as conf

The first step hereafter would in most cases be setting up a configuration object:

[2]:
# config = conf.PersonalConfig()
# config.name = "Testy McTestface"
# config.email = "test@test.com"
# config.update.all()

# config2 = conf.NeogridApiConfig()
# config2.token = ""
# config2.update.all()

Creating configuration yaml file

Loading a Location

[3]:
with po.ApiAdapter() as adapter:
    location = adapter.get_location(2756)

Getting units, zones, components etc.

[4]:
units = list(location.get_units())
units
[4]:
[Unit(type=COLD_WATER, name=cold_water_primary, id=15316),
 Unit(type=COOLING, name=cooling_primary, id=15315),
 Unit(type=CUSTOM, name=custom_unit_1, id=15319),
 Unit(type=CONTROL, name=control_unit_custom_1, id=15357),
 Unit(type=ELECTRICITY, name=electricity_primary, id=15317),
 Unit(type=HEAT_PUMP, name=heat_pump_1, id=15320),
 Unit(type=HEATING, name=heating_primary, id=15314),
 Unit(type=SECONDARY, name=, id=15401),
 Unit(type=CONTROL, name=dummy_heating_controller, id=15402),
 Unit(type=HOT_WATER, name=dhw_primary, id=15313),
 Unit(type=INDOOR_CLIMATE, name=indoor_climate_1, id=15318),
 Unit(type=MAIN, name=main_unit, id=15312),
 Unit(type=VENTILATION, name=ventilation_primary_1, id=15321),
 Unit(type=WEATHER_FORECAST, name=Weather Forecast, id=168)]

it is also possible to call location.get_units with keyword arguments type, name, id and/or parent. for parent provide a dict with key type name and/or id.

[5]:
secondary_heating=list(location.get_units(type=po.UnitType.SECONDARY,parent=dict(type=po.UnitType.HEATING)))[0]
secondary_heating
[5]:
Unit(type=SECONDARY, name=, id=15401)

inspect the components on a unit, calling get_components gets all components of the specified unit and all subunits. the method can also be called om the location directly. the method take to same keyword arguments as get_units (type,name,id,parent)

[6]:
components = list(secondary_heating.get_components())
components
[6]:
[Component(id=32718, type=RETURN_TEMPERATURE, name=ReturnFlowTemperature),
 Component(id=32717, type=SUPPLY_TEMPERATURE, name=InletFlowTemperature),
 Component(id=32719, type=SETPOINT, name=CONTROL_POSITION)]

Getting measurements

[7]:
from datetime import datetime
from zoneinfo import ZoneInfo

from preheat_open.api.configuration import PersonalConfig


start=datetime(year=2021,month=1,day=1,tzinfo=ZoneInfo(PersonalConfig().timezone))
end=datetime(year=2021,month=2,day=1,tzinfo=ZoneInfo(PersonalConfig().timezone))
date_range=po.DateRange(start=start,end=end,resolution=po.TimeResolution.HOUR)
with po.ApiAdapter() as adapter:
    location = adapter.get_location(2756)
    data=location.get_measurements(date_range=date_range)
data.describe(include="all")
[7]:
returnT_secondaries supplyT_secondaries setPoint_controls energy_hotWater energy_main flow_main power_main returnT_main supplyT_main volume_main ... Fog_weatherForecast WindGust_weatherForecast DewPointTemperature_weatherForecast Cloudiness_weatherForecast Precipitation_weatherForecast DirectSunPower_weatherForecast DiffuseSunPower_weatherForecast SunAltitude_weatherForecast SunAzimuth_weatherForecast DirectSunPowerVertical_weatherForecast
count 744.000000 744.000000 744.000000 744.000000 744.000000 744.000000 744.000000 744.000000 744.000000 744.000000 ... 744.000000 744.000000 744.000000 744.000000 744.000000 744.000000 744.000000 280.000000 280.000000 744.000000
mean 27.492025 44.958604 49.816222 150.034000 150.034000 0.049380 0.002511 27.492025 44.958604 75017.000000 ... 4.746774 6.317876 -1.442742 81.468414 0.058199 0.012734 0.009709 6.208637 180.363852 0.080009
std 0.422389 0.839649 8.252764 5.158046 5.158046 0.008470 0.000413 0.422389 0.839649 2579.023071 ... 19.484085 3.885302 3.014670 31.244306 0.208210 0.029371 0.018463 5.602159 35.731004 0.155620
min 26.283087 42.597957 24.074562 141.118000 141.118000 0.022071 0.001101 26.283087 42.597957 70559.000000 ... 0.000000 0.700000 -9.500000 0.000000 0.000000 0.000000 0.000000 -5.997874 123.476758 0.000000
25% 27.187001 44.386678 44.374730 145.576000 145.576000 0.043342 0.002251 27.187001 44.386678 72788.000000 ... 0.000000 3.200000 -3.600000 79.625000 0.000000 0.000000 0.000000 2.269923 150.938403 0.000000
50% 27.478029 44.950991 49.975029 150.034000 150.034000 0.049688 0.002517 27.478029 44.950991 75017.000000 ... 0.000000 5.550000 -1.000000 98.400000 0.000000 0.000000 0.000000 7.131741 180.067720 0.000000
75% 27.780777 45.517521 55.583354 154.492000 154.492000 0.055308 0.002783 27.780777 45.517521 77246.000000 ... 0.200000 8.300000 0.500000 100.000000 0.000000 0.008033 0.011686 10.699912 208.516595 0.079380
max 29.016393 47.896567 79.607441 158.950000 158.950000 0.075355 0.003761 29.016393 47.896567 79475.000000 ... 100.000000 20.800000 6.500000 100.000000 1.800000 0.198844 0.075078 15.792465 247.515851 0.703051

8 rows × 28 columns

Getting setpoint schedules, electricity prices and comfort profiles

[32]:
with po.ApiAdapter() as adapter:
    location = adapter.get_location(2756)
    control_units = list(location.get_units(type=po.UnitType.CONTROL))
    for control_unit in control_units:
        setpoint_schedule=control_unit.get_schedule(date_range=date_range)
        print(setpoint_schedule)
    electricity_unit=list(location.get_units(type=po.UnitType.ELECTRICITY))[0]
    price_data= electricity_unit.get_electricity_price(date_range=date_range)
    comfort_profiles = location.get_comfort_profiles(date_range=date_range)

Control schedule:
Control schedule:
[18]:
setpoint_schedule
[18]:
Control schedule:
[19]:
price_data
[19]:
ElectricityPrices(data=[], tariff_included=None, vat_included=None)
[20]:
comfort_profiles.profiles
[20]:
{629: Comfort profile, 629, Second profile:
 Time, Setpoint, Vacation,
 630: Comfort profile, 630, First profile:
 Time, Setpoint, Vacation,
 1258: Comfort profile, 1258, Zone_A:
 Time, Setpoint, Vacation
 2021-01-01T00:00:00+01:00 20.0 False
 2021-01-01T01:00:00+01:00 20.0 False
 2021-01-01T02:00:00+01:00 20.0 False
 2021-01-01T03:00:00+01:00 20.0 False
 2021-01-01T04:00:00+01:00 20.0 False
 2021-01-01T05:00:00+01:00 20.0 False
 2021-01-01T06:00:00+01:00 22.0 False
 2021-01-01T07:00:00+01:00 22.0 False
 2021-01-01T08:00:00+01:00 22.0 False
 2021-01-01T09:00:00+01:00 22.0 False
 ...
 2021-01-31T14:00:00+01:00 22.0 False
 2021-01-31T15:00:00+01:00 22.0 False
 2021-01-31T16:00:00+01:00 22.0 False
 2021-01-31T17:00:00+01:00 22.0 False
 2021-01-31T18:00:00+01:00 22.0 False
 2021-01-31T19:00:00+01:00 22.0 False
 2021-01-31T20:00:00+01:00 22.0 False
 2021-01-31T21:00:00+01:00 22.0 False
 2021-01-31T22:00:00+01:00 22.0 False
 2021-01-31T23:00:00+01:00 20.0 False}

Posting a setpoint schedule

[30]:
import pandas as pd
import numpy as np
with po.ApiAdapter() as adapter:
    location = adapter.get_location(2756)

    schedule=comfort_profiles.profiles[1258].to_frame()

    df=pd.DataFrame({'value':schedule['setpoint'],
                     "operation": np.where(schedule['vacation']==False,
                    "NORMAL",
                    "CLOSED",
                ),})
    setpoint_schedule = po.SetpointSchedule.from_frame(frame=df)
    res=control_units[0].request_schedule(setpoint_schedule)
Function not run because application is not in production mode. Function: <bound method Session.request of <requests.sessions.Session object at 0x7e295166a2f0>>((), {'method': 'PUT', 'url': 'https://api.neogrid.dk/public/api/v1/controlunit/15357/setpoint', 'params': None, 'headers': {}, 'json': {'schedule': [{'startTime': '2020-12-31T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-01T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-02T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-03T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-04T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-05T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-06T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-07T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-08T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-09T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-10T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-11T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-12T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-13T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-14T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-15T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-16T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-17T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-18T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-19T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-20T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-21T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-22T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-23T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-24T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-25T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-26T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-27T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-28T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-29T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-30T23:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T00:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T01:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T02:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T03:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T04:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T05:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T06:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T07:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T08:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T09:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T10:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T11:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T12:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T13:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T14:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T15:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T16:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T17:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T18:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T19:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T20:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T21:00:00Z', 'value': 22.0, 'operation': 'NORMAL'}, {'startTime': '2021-01-31T22:00:00Z', 'value': 20.0, 'operation': 'NORMAL'}]}, 'timeout': 10})
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[30], line 14
      8 df=pd.DataFrame({'value':schedule['setpoint'],
      9                  "operation": np.where(schedule['vacation']==False,
     10                 "NORMAL",
     11                 "CLOSED",
     12             ),})
     13 setpoint_schedule = po.SetpointSchedule.from_frame(frame=df)
---> 14 res=control_units[0].request_schedule(setpoint_schedule)

File ~/code/preheat_open_git/preheat_open/unit.py:671, in Unit.request_schedule(self, schedule)
    662 def request_schedule(self, schedule: SetpointSchedule) -> Response:
    663     """
    664     Sends a scheduling request to the API.
    665
   (...)
    669     :rtype: requests.Response
    670     """
--> 671     return self.location.adapter.put_setpoint_schedule(
    672         schedule=schedule, control_unit=self
    673     )

File ~/code/preheat_open_git/preheat_open/interfaces.py:40, in log_method_call.<locals>.decorator.<locals>.wrapper(self, *args, **kwargs)
     33 # Log the formatted message
     34 getattr(logger, level)(
     35     "%s.%s(%s)",
     36     self.__class__.__name__,
     37     method.__name__,
     38     all_args_str,
     39 )
---> 40 return method(self, *args, **kwargs)

File ~/code/preheat_open_git/preheat_open/api/adapter.py:478, in ApiAdapter.put_setpoint_schedule(self, schedule, control_unit)
    467     control_unit_id = control_unit
    468 payload = {
    469     "schedule": [
    470         {
   (...)
    476     ]
    477 }
--> 478 return self._api_session.put(
    479     endpoint=f"controlunit/{control_unit_id}/setpoint",
    480     json_body=payload,
    481 )

File ~/code/preheat_open_git/preheat_open/api/session.py:223, in ApiSession.put(self, endpoint, out, json_body, params)
    207 def put(
    208     self,
    209     endpoint: str = "",
   (...)
    212     params: dict[str, Any] | None = None,
    213 ) -> Response:
    214     """
    215     Method to send a PUT request to the API
    216
   (...)
    221     :return: API response in request.Response format
    222     """
--> 223     return self.__send_request(
    224         method="PUT", endpoint=endpoint, out=out, params=params, json_body=json_body
    225     )

File ~/code/preheat_open_git/preheat_open/api/session.py:185, in ApiSession.__send_request(self, method, endpoint, out, json_body, params)
    172 else:
    173     response = run_if_production_mode(
    174         function=self.session.request,
    175         method=method,
   (...)
    182         timeout=self.timeout_seconds[method],
    183     )
--> 185 self.__check_and_raise_error(response)
    187 return response

File ~/code/preheat_open_git/preheat_open/api/session.py:125, in ApiSession.__check_and_raise_error(self, response)
    124 def __check_and_raise_error(self, response: Response):
--> 125     logger.debug("%s %s", response.status_code, response.reason)
    127     if not response.ok:
    128         msg = f"""{response.request.method} - FAILED
    129         URL: {response.request.url}
    130         Body: {str(response.request.body)}
    131         Response: {response.text}
    132         """

AttributeError: 'NoneType' object has no attribute 'status_code'
[9]:
adapter.close()