{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Welcome to the preheat_open Quick Start Guide!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Installation\n", "\n", "If you haven't done so already, please install the package by the terminal command\n", "\n", " pip install preheat_open\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting up an API key\n", "\n", "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](https://app.neogrid.dk/v2/#!/app/user/profile)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Importing and setting up a configuration object\n", "\n", "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: " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import preheat_open as po\n", "import preheat_open.configuration as conf" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first step hereafter would in most cases be setting up a configuration object:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# config = conf.PersonalConfig()\n", "# config.name = \"Testy McTestface\"\n", "# config.email = \"test@test.com\"\n", "# config.update.all()\n", "\n", "# config2 = conf.NeogridApiConfig()\n", "# config2.token = \"\"\n", "# config2.update.all()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating configuration yaml file" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Loading a Location" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "with po.ApiAdapter() as adapter:\n", " location = adapter.get_location(2756)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Getting units, zones, components etc." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Unit(type=COLD_WATER, name=cold_water_primary, id=15316),\n", " Unit(type=COOLING, name=cooling_primary, id=15315),\n", " Unit(type=CUSTOM, name=custom_unit_1, id=15319),\n", " Unit(type=CONTROL, name=control_unit_custom_1, id=15357),\n", " Unit(type=ELECTRICITY, name=electricity_primary, id=15317),\n", " Unit(type=HEAT_PUMP, name=heat_pump_1, id=15320),\n", " Unit(type=HEATING, name=heating_primary, id=15314),\n", " Unit(type=SECONDARY, name=, id=15401),\n", " Unit(type=CONTROL, name=dummy_heating_controller, id=15402),\n", " Unit(type=HOT_WATER, name=dhw_primary, id=15313),\n", " Unit(type=INDOOR_CLIMATE, name=indoor_climate_1, id=15318),\n", " Unit(type=MAIN, name=main_unit, id=15312),\n", " Unit(type=VENTILATION, name=ventilation_primary_1, id=15321),\n", " Unit(type=WEATHER_FORECAST, name=Weather Forecast, id=168)]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "units = list(location.get_units())\n", "units" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Unit(type=SECONDARY, name=, id=15401)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "secondary_heating=list(location.get_units(type=po.UnitType.SECONDARY,parent=dict(type=po.UnitType.HEATING)))[0]\n", "secondary_heating" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Component(id=32718, type=RETURN_TEMPERATURE, name=ReturnFlowTemperature),\n", " Component(id=32717, type=SUPPLY_TEMPERATURE, name=InletFlowTemperature),\n", " Component(id=32719, type=SETPOINT, name=CONTROL_POSITION)]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "components = list(secondary_heating.get_components())\n", "components" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Getting measurements" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "application/vnd.microsoft.datawrangler.viewer.v0+json": { "columns": [ { "name": "index", "rawType": "object", "type": "string" }, { "name": "returnT_secondaries", "rawType": "float64", "type": "float" }, { "name": "supplyT_secondaries", "rawType": "float64", "type": "float" }, { "name": "setPoint_controls", "rawType": "float64", "type": "float" }, { "name": "energy_hotWater", "rawType": "float64", "type": "float" }, { "name": "energy_main", "rawType": "float64", "type": "float" }, { "name": "flow_main", "rawType": "float64", "type": "float" }, { "name": "power_main", "rawType": "float64", "type": "float" }, { "name": "returnT_main", "rawType": "float64", "type": "float" }, { "name": "supplyT_main", "rawType": "float64", "type": "float" }, { "name": "volume_main", "rawType": "float64", "type": "float" }, { "name": "Temperature_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "Humidity_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "WindDirection_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "WindSpeed_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "Pressure_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "LowClouds_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "MediumClouds_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "HighClouds_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "Fog_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "WindGust_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "DewPointTemperature_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "Cloudiness_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "Precipitation_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "DirectSunPower_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "DiffuseSunPower_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "SunAltitude_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "SunAzimuth_weatherForecast", "rawType": "float64", "type": "float" }, { "name": "DirectSunPowerVertical_weatherForecast", "rawType": "float64", "type": "float" } ], "ref": "d6e6a70e-459b-4cee-bc8d-419a2c2f5fb5", "rows": [ [ "count", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "744.0", "280.0", "280.0", "744.0" ], [ "mean", "27.49202473681781", "44.958604195426354", "49.81622196233966", "150.034", "150.034", "0.049380452124203646", "0.002510949603420642", "27.49202473681781", "44.958604195426354", "75017.0", "0.6061827956989249", "87.62795698924731", "169.4483870967742", "3.9811827956989245", "1008.0317204301074", "71.2625", "28.76666666666667", "36.51935483870968", "4.746774193548387", "6.317876344086022", "-1.442741935483871", "81.46841397849462", "0.058198924731182794", "0.012734068525176133", "0.009709260603110816", "6.208637424637199", "180.3638517762185", "0.08000914108767515" ], [ "std", "0.422389260631018", "0.8396488283636956", "8.252763502699567", "5.158046141709087", "5.158046141709087", "0.008469857048419627", "0.00041274276013765753", "0.422389260631018", "0.8396488283636956", "2579.0230708545437", "2.5797564647492583", "7.556582300402117", "112.23595193706906", "2.433623974980795", "13.579513675112098", "35.92761722325197", "37.84683827401721", "42.611370999764524", "19.48408510432839", "3.8853024369296376", "3.014670456770153", "31.244306457993954", "0.20820965518025902", "0.029370676809688325", "0.01846299261484226", "5.602158664814182", "35.73100441740844", "0.15561958290469388" ], [ "min", "26.283086968691705", "42.597956796201615", "24.074561645531208", "141.118", "141.118", "0.0220706723726892", "0.0011010581994928", "26.283086968691705", "42.597956796201615", "70559.0", "-7.2", "63.5", "0.1", "0.1", "975.4", "0.0", "0.0", "0.0", "0.0", "0.7", "-9.5", "0.0", "0.0", "0.0", "0.0", "-5.997874449104728", "123.47675818880802", "0.0" ], [ "25%", "27.187001022044186", "44.38667755294227", "44.37472967092138", "145.576", "145.576", "0.04334173310565485", "0.00225127080353725", "27.187001022044186", "44.38667755294227", "72788.0", "-0.6", "82.9", "44.675000000000004", "2.0", "998.6999999999999", "49.525", "0.0", "0.0", "0.0", "3.2", "-3.6", "79.625", "0.0", "0.0", "0.0", "2.2699229891401767", "150.93840334235838", "0.0" ], [ "50%", "27.478028604736412", "44.95099062081151", "49.975029013479684", "150.034", "150.034", "0.0496879109870548", "0.00251657910859005", "27.478028604736412", "44.95099062081151", "75017.0", "0.8", "88.4", "190.6", "3.5", "1007.45", "90.35", "2.8", "6.35", "0.0", "5.55", "-1.0", "98.4", "0.0", "0.0", "0.0", "7.131740883759861", "180.06771958545494", "0.0" ], [ "75%", "27.780777358353518", "45.517521422503926", "55.58335410904594", "154.492", "154.492", "0.05530776542826207", "0.0027831151128289", "27.780777358353518", "45.517521422503926", "77246.0", "1.825", "93.4", "266.5", "5.4", "1018.9", "99.6", "61.575", "89.025", "0.2", "8.3", "0.5", "100.0", "0.0", "0.0080333954143675", "0.011685804222865", "10.699911555529152", "208.5165951929517", "0.0793799904893559" ], [ "max", "29.0163929044678", "47.89656741892616", "79.60744099961735", "158.95", "158.95", "0.0753554870497145", "0.0037611555603908", "29.0163929044678", "47.89656741892616", "79475.0", "7.2", "99.5", "360.0", "12.9", "1029.0", "100.0", "100.0", "100.0", "100.0", "20.8", "6.5", "100.0", "1.8", "0.1988435911012244", "0.0750776910895226", "15.792464577499205", "247.51585063273927", "0.7030512652044633" ] ], "shape": { "columns": 28, "rows": 8 } }, "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
returnT_secondariessupplyT_secondariessetPoint_controlsenergy_hotWaterenergy_mainflow_mainpower_mainreturnT_mainsupplyT_mainvolume_main...Fog_weatherForecastWindGust_weatherForecastDewPointTemperature_weatherForecastCloudiness_weatherForecastPrecipitation_weatherForecastDirectSunPower_weatherForecastDiffuseSunPower_weatherForecastSunAltitude_weatherForecastSunAzimuth_weatherForecastDirectSunPowerVertical_weatherForecast
count744.000000744.000000744.000000744.000000744.000000744.000000744.000000744.000000744.000000744.000000...744.000000744.000000744.000000744.000000744.000000744.000000744.000000280.000000280.000000744.000000
mean27.49202544.95860449.816222150.034000150.0340000.0493800.00251127.49202544.95860475017.000000...4.7467746.317876-1.44274281.4684140.0581990.0127340.0097096.208637180.3638520.080009
std0.4223890.8396498.2527645.1580465.1580460.0084700.0004130.4223890.8396492579.023071...19.4840853.8853023.01467031.2443060.2082100.0293710.0184635.60215935.7310040.155620
min26.28308742.59795724.074562141.118000141.1180000.0220710.00110126.28308742.59795770559.000000...0.0000000.700000-9.5000000.0000000.0000000.0000000.000000-5.997874123.4767580.000000
25%27.18700144.38667844.374730145.576000145.5760000.0433420.00225127.18700144.38667872788.000000...0.0000003.200000-3.60000079.6250000.0000000.0000000.0000002.269923150.9384030.000000
50%27.47802944.95099149.975029150.034000150.0340000.0496880.00251727.47802944.95099175017.000000...0.0000005.550000-1.00000098.4000000.0000000.0000000.0000007.131741180.0677200.000000
75%27.78077745.51752155.583354154.492000154.4920000.0553080.00278327.78077745.51752177246.000000...0.2000008.3000000.500000100.0000000.0000000.0080330.01168610.699912208.5165950.079380
max29.01639347.89656779.607441158.950000158.9500000.0753550.00376129.01639347.89656779475.000000...100.00000020.8000006.500000100.0000001.8000000.1988440.07507815.792465247.5158510.703051
\n", "

8 rows × 28 columns

\n", "
" ], "text/plain": [ " returnT_secondaries supplyT_secondaries setPoint_controls \\\n", "count 744.000000 744.000000 744.000000 \n", "mean 27.492025 44.958604 49.816222 \n", "std 0.422389 0.839649 8.252764 \n", "min 26.283087 42.597957 24.074562 \n", "25% 27.187001 44.386678 44.374730 \n", "50% 27.478029 44.950991 49.975029 \n", "75% 27.780777 45.517521 55.583354 \n", "max 29.016393 47.896567 79.607441 \n", "\n", " energy_hotWater energy_main flow_main power_main returnT_main \\\n", "count 744.000000 744.000000 744.000000 744.000000 744.000000 \n", "mean 150.034000 150.034000 0.049380 0.002511 27.492025 \n", "std 5.158046 5.158046 0.008470 0.000413 0.422389 \n", "min 141.118000 141.118000 0.022071 0.001101 26.283087 \n", "25% 145.576000 145.576000 0.043342 0.002251 27.187001 \n", "50% 150.034000 150.034000 0.049688 0.002517 27.478029 \n", "75% 154.492000 154.492000 0.055308 0.002783 27.780777 \n", "max 158.950000 158.950000 0.075355 0.003761 29.016393 \n", "\n", " supplyT_main volume_main ... Fog_weatherForecast \\\n", "count 744.000000 744.000000 ... 744.000000 \n", "mean 44.958604 75017.000000 ... 4.746774 \n", "std 0.839649 2579.023071 ... 19.484085 \n", "min 42.597957 70559.000000 ... 0.000000 \n", "25% 44.386678 72788.000000 ... 0.000000 \n", "50% 44.950991 75017.000000 ... 0.000000 \n", "75% 45.517521 77246.000000 ... 0.200000 \n", "max 47.896567 79475.000000 ... 100.000000 \n", "\n", " WindGust_weatherForecast DewPointTemperature_weatherForecast \\\n", "count 744.000000 744.000000 \n", "mean 6.317876 -1.442742 \n", "std 3.885302 3.014670 \n", "min 0.700000 -9.500000 \n", "25% 3.200000 -3.600000 \n", "50% 5.550000 -1.000000 \n", "75% 8.300000 0.500000 \n", "max 20.800000 6.500000 \n", "\n", " Cloudiness_weatherForecast Precipitation_weatherForecast \\\n", "count 744.000000 744.000000 \n", "mean 81.468414 0.058199 \n", "std 31.244306 0.208210 \n", "min 0.000000 0.000000 \n", "25% 79.625000 0.000000 \n", "50% 98.400000 0.000000 \n", "75% 100.000000 0.000000 \n", "max 100.000000 1.800000 \n", "\n", " DirectSunPower_weatherForecast DiffuseSunPower_weatherForecast \\\n", "count 744.000000 744.000000 \n", "mean 0.012734 0.009709 \n", "std 0.029371 0.018463 \n", "min 0.000000 0.000000 \n", "25% 0.000000 0.000000 \n", "50% 0.000000 0.000000 \n", "75% 0.008033 0.011686 \n", "max 0.198844 0.075078 \n", "\n", " SunAltitude_weatherForecast SunAzimuth_weatherForecast \\\n", "count 280.000000 280.000000 \n", "mean 6.208637 180.363852 \n", "std 5.602159 35.731004 \n", "min -5.997874 123.476758 \n", "25% 2.269923 150.938403 \n", "50% 7.131741 180.067720 \n", "75% 10.699912 208.516595 \n", "max 15.792465 247.515851 \n", "\n", " DirectSunPowerVertical_weatherForecast \n", "count 744.000000 \n", "mean 0.080009 \n", "std 0.155620 \n", "min 0.000000 \n", "25% 0.000000 \n", "50% 0.000000 \n", "75% 0.079380 \n", "max 0.703051 \n", "\n", "[8 rows x 28 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from datetime import datetime\n", "from zoneinfo import ZoneInfo\n", "\n", "from preheat_open.configuration import PersonalConfig\n", "\n", "\n", "start=datetime(year=2021,month=1,day=1,tzinfo=ZoneInfo(PersonalConfig().timezone))\n", "end=datetime(year=2021,month=2,day=1,tzinfo=ZoneInfo(PersonalConfig().timezone))\n", "date_range=po.DateRange(start=start,end=end,resolution=po.TimeResolution.HOUR)\n", "with po.ApiAdapter() as adapter:\n", " location = adapter.get_location(2756)\n", " data=location.get_measurements(date_range=date_range)\n", "data.describe(include=\"all\")\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Getting setpoint schedules, electricity prices and comfort profiles" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Control schedule:\n", "Control schedule:\n" ] } ], "source": [ "with po.ApiAdapter() as adapter:\n", " location = adapter.get_location(2756)\n", " control_units = list(location.get_units(type=po.UnitType.CONTROL))\n", " for control_unit in control_units:\n", " setpoint_schedule=control_unit.get_schedule(date_range=date_range)\n", " print(setpoint_schedule)\n", " electricity_unit=list(location.get_units(type=po.UnitType.ELECTRICITY))[0]\n", " price_data= electricity_unit.get_electricity_price(date_range=date_range)\n", " comfort_profiles = location.get_comfort_profiles(date_range=date_range)\n", " \n" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Control schedule:" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "setpoint_schedule" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ElectricityPrices(data=[], tariff_included=None, vat_included=None)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "price_data" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{629: Comfort profile, 629, Second profile:\n", " Time, Setpoint, Vacation,\n", " 630: Comfort profile, 630, First profile:\n", " Time, Setpoint, Vacation,\n", " 1258: Comfort profile, 1258, Zone_A:\n", " Time, Setpoint, Vacation\n", " 2021-01-01T00:00:00+01:00 20.0 False\n", " 2021-01-01T01:00:00+01:00 20.0 False\n", " 2021-01-01T02:00:00+01:00 20.0 False\n", " 2021-01-01T03:00:00+01:00 20.0 False\n", " 2021-01-01T04:00:00+01:00 20.0 False\n", " 2021-01-01T05:00:00+01:00 20.0 False\n", " 2021-01-01T06:00:00+01:00 22.0 False\n", " 2021-01-01T07:00:00+01:00 22.0 False\n", " 2021-01-01T08:00:00+01:00 22.0 False\n", " 2021-01-01T09:00:00+01:00 22.0 False\n", " ...\n", " 2021-01-31T14:00:00+01:00 22.0 False\n", " 2021-01-31T15:00:00+01:00 22.0 False\n", " 2021-01-31T16:00:00+01:00 22.0 False\n", " 2021-01-31T17:00:00+01:00 22.0 False\n", " 2021-01-31T18:00:00+01:00 22.0 False\n", " 2021-01-31T19:00:00+01:00 22.0 False\n", " 2021-01-31T20:00:00+01:00 22.0 False\n", " 2021-01-31T21:00:00+01:00 22.0 False\n", " 2021-01-31T22:00:00+01:00 22.0 False\n", " 2021-01-31T23:00:00+01:00 20.0 False}" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "comfort_profiles.profiles" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Posting a setpoint schedule" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Function not run because application is not in production mode. Function: >((), {'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})\n" ] }, { "ename": "AttributeError", "evalue": "'NoneType' object has no attribute 'status_code'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[30], line 14\u001b[0m\n\u001b[1;32m 8\u001b[0m df\u001b[38;5;241m=\u001b[39mpd\u001b[38;5;241m.\u001b[39mDataFrame({\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mvalue\u001b[39m\u001b[38;5;124m'\u001b[39m:schedule[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msetpoint\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 9\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124moperation\u001b[39m\u001b[38;5;124m\"\u001b[39m: np\u001b[38;5;241m.\u001b[39mwhere(schedule[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mvacation\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m==\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[1;32m 10\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNORMAL\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 11\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCLOSED\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 12\u001b[0m ),})\n\u001b[1;32m 13\u001b[0m setpoint_schedule \u001b[38;5;241m=\u001b[39m po\u001b[38;5;241m.\u001b[39mSetpointSchedule\u001b[38;5;241m.\u001b[39mfrom_frame(frame\u001b[38;5;241m=\u001b[39mdf)\n\u001b[0;32m---> 14\u001b[0m res\u001b[38;5;241m=\u001b[39m\u001b[43mcontrol_units\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest_schedule\u001b[49m\u001b[43m(\u001b[49m\u001b[43msetpoint_schedule\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/code/preheat_open_git/preheat_open/unit.py:671\u001b[0m, in \u001b[0;36mUnit.request_schedule\u001b[0;34m(self, schedule)\u001b[0m\n\u001b[1;32m 662\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrequest_schedule\u001b[39m(\u001b[38;5;28mself\u001b[39m, schedule: SetpointSchedule) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Response:\n\u001b[1;32m 663\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 664\u001b[0m \u001b[38;5;124;03m Sends a scheduling request to the API.\u001b[39;00m\n\u001b[1;32m 665\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 669\u001b[0m \u001b[38;5;124;03m :rtype: requests.Response\u001b[39;00m\n\u001b[1;32m 670\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 671\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlocation\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43madapter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mput_setpoint_schedule\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 672\u001b[0m \u001b[43m \u001b[49m\u001b[43mschedule\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mschedule\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcontrol_unit\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\n\u001b[1;32m 673\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/code/preheat_open_git/preheat_open/interfaces.py:40\u001b[0m, in \u001b[0;36mlog_method_call..decorator..wrapper\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 33\u001b[0m \u001b[38;5;66;03m# Log the formatted message\u001b[39;00m\n\u001b[1;32m 34\u001b[0m \u001b[38;5;28mgetattr\u001b[39m(logger, level)(\n\u001b[1;32m 35\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m(\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m)\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 36\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m,\n\u001b[1;32m 37\u001b[0m method\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m,\n\u001b[1;32m 38\u001b[0m all_args_str,\n\u001b[1;32m 39\u001b[0m )\n\u001b[0;32m---> 40\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mmethod\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/code/preheat_open_git/preheat_open/api/adapter.py:478\u001b[0m, in \u001b[0;36mApiAdapter.put_setpoint_schedule\u001b[0;34m(self, schedule, control_unit)\u001b[0m\n\u001b[1;32m 467\u001b[0m control_unit_id \u001b[38;5;241m=\u001b[39m control_unit\n\u001b[1;32m 468\u001b[0m payload \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 469\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mschedule\u001b[39m\u001b[38;5;124m\"\u001b[39m: [\n\u001b[1;32m 470\u001b[0m {\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 476\u001b[0m ]\n\u001b[1;32m 477\u001b[0m }\n\u001b[0;32m--> 478\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_api_session\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mput\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 479\u001b[0m \u001b[43m \u001b[49m\u001b[43mendpoint\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43mf\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcontrolunit/\u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[43mcontrol_unit_id\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43m/setpoint\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 480\u001b[0m \u001b[43m \u001b[49m\u001b[43mjson_body\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpayload\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 481\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/code/preheat_open_git/preheat_open/api/session.py:223\u001b[0m, in \u001b[0;36mApiSession.put\u001b[0;34m(self, endpoint, out, json_body, params)\u001b[0m\n\u001b[1;32m 207\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mput\u001b[39m(\n\u001b[1;32m 208\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 209\u001b[0m endpoint: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 212\u001b[0m params: \u001b[38;5;28mdict\u001b[39m[\u001b[38;5;28mstr\u001b[39m, Any] \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 213\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Response:\n\u001b[1;32m 214\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 215\u001b[0m \u001b[38;5;124;03m Method to send a PUT request to the API\u001b[39;00m\n\u001b[1;32m 216\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 221\u001b[0m \u001b[38;5;124;03m :return: API response in request.Response format\u001b[39;00m\n\u001b[1;32m 222\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 223\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__send_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 224\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mPUT\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mendpoint\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mendpoint\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjson_body\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mjson_body\u001b[49m\n\u001b[1;32m 225\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/code/preheat_open_git/preheat_open/api/session.py:185\u001b[0m, in \u001b[0;36mApiSession.__send_request\u001b[0;34m(self, method, endpoint, out, json_body, params)\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 173\u001b[0m response \u001b[38;5;241m=\u001b[39m run_if_production_mode(\n\u001b[1;32m 174\u001b[0m function\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msession\u001b[38;5;241m.\u001b[39mrequest,\n\u001b[1;32m 175\u001b[0m method\u001b[38;5;241m=\u001b[39mmethod,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 182\u001b[0m timeout\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtimeout_seconds[method],\n\u001b[1;32m 183\u001b[0m )\n\u001b[0;32m--> 185\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__check_and_raise_error\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 187\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\n", "File \u001b[0;32m~/code/preheat_open_git/preheat_open/api/session.py:125\u001b[0m, in \u001b[0;36mApiSession.__check_and_raise_error\u001b[0;34m(self, response)\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__check_and_raise_error\u001b[39m(\u001b[38;5;28mself\u001b[39m, response: Response):\n\u001b[0;32m--> 125\u001b[0m logger\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, \u001b[43mresponse\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstatus_code\u001b[49m, response\u001b[38;5;241m.\u001b[39mreason)\n\u001b[1;32m 127\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m response\u001b[38;5;241m.\u001b[39mok:\n\u001b[1;32m 128\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\"\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mresponse\u001b[38;5;241m.\u001b[39mrequest\u001b[38;5;241m.\u001b[39mmethod\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m - FAILED\u001b[39m\n\u001b[1;32m 129\u001b[0m \u001b[38;5;124m URL: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mresponse\u001b[38;5;241m.\u001b[39mrequest\u001b[38;5;241m.\u001b[39murl\u001b[38;5;132;01m}\u001b[39;00m\n\u001b[1;32m 130\u001b[0m \u001b[38;5;124m Body: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mstr\u001b[39m(response\u001b[38;5;241m.\u001b[39mrequest\u001b[38;5;241m.\u001b[39mbody)\u001b[38;5;132;01m}\u001b[39;00m\n\u001b[1;32m 131\u001b[0m \u001b[38;5;124m Response: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mresponse\u001b[38;5;241m.\u001b[39mtext\u001b[38;5;132;01m}\u001b[39;00m\n\u001b[1;32m 132\u001b[0m \u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\"\"\u001b[39m\n", "\u001b[0;31mAttributeError\u001b[0m: 'NoneType' object has no attribute 'status_code'" ] } ], "source": [ "import pandas as pd\n", "import numpy as np\n", "with po.ApiAdapter() as adapter:\n", " location = adapter.get_location(2756)\n", " \n", " schedule=comfort_profiles.profiles[1258].to_frame()\n", "\n", " df=pd.DataFrame({'value':schedule['setpoint'],\n", " \"operation\": np.where(schedule['vacation']==False,\n", " \"NORMAL\",\n", " \"CLOSED\",\n", " ),})\n", " setpoint_schedule = po.SetpointSchedule.from_frame(frame=df)\n", " res=control_units[0].request_schedule(setpoint_schedule)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "adapter.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] } ], "metadata": { "kernelspec": { "display_name": "devs", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.14" } }, "nbformat": 4, "nbformat_minor": 2 }