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()