From c70342f9ab0855670937c66e6c109f0ff9b62b4b Mon Sep 17 00:00:00 2001 From: Christophe Camicas Date: Mon, 27 Nov 2023 18:11:58 +0100 Subject: [PATCH] initial commit --- .github/workflows/hacs-action.yml | 17 + .github/workflows/hassfest-action.yml | 12 + .gitignore | 129 ++ .vscode/settings.json | 8 + .vscode/tasks.json | 17 + CHANGELOG.md | 7 + LICENSE.md | 21 + README.md | 94 + custom_components/gazdebordeaux/__init__.py | 31 + .../gazdebordeaux/config_flow.py | 78 + custom_components/gazdebordeaux/const.py | 3 + .../gazdebordeaux/coordinator.py | 214 ++ custom_components/gazdebordeaux/enum.py | 34 + .../gazdebordeaux/gazdebordeaux.py | 148 ++ custom_components/gazdebordeaux/manifest.json | 15 + custom_components/gazdebordeaux/manifest.py | 17 + custom_components/gazdebordeaux/sensor.py | 136 ++ custom_components/gazdebordeaux/strings.json | 12 + hacs.json | 5 + pytest.ini | 12 + requirements.txt | 5 + tests/__init__.py | 0 tests/resources/high_daily_data.json | 1960 +++++++++++++++++ tests/resources/low_daily_data.json | 1960 +++++++++++++++++ 24 files changed, 4935 insertions(+) create mode 100644 .github/workflows/hacs-action.yml create mode 100644 .github/workflows/hassfest-action.yml create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json create mode 100644 CHANGELOG.md create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 custom_components/gazdebordeaux/__init__.py create mode 100644 custom_components/gazdebordeaux/config_flow.py create mode 100644 custom_components/gazdebordeaux/const.py create mode 100644 custom_components/gazdebordeaux/coordinator.py create mode 100644 custom_components/gazdebordeaux/enum.py create mode 100644 custom_components/gazdebordeaux/gazdebordeaux.py create mode 100644 custom_components/gazdebordeaux/manifest.json create mode 100644 custom_components/gazdebordeaux/manifest.py create mode 100644 custom_components/gazdebordeaux/sensor.py create mode 100644 custom_components/gazdebordeaux/strings.json create mode 100644 hacs.json create mode 100644 pytest.ini create mode 100644 requirements.txt create mode 100644 tests/__init__.py create mode 100644 tests/resources/high_daily_data.json create mode 100644 tests/resources/low_daily_data.json diff --git a/.github/workflows/hacs-action.yml b/.github/workflows/hacs-action.yml new file mode 100644 index 0000000..789343b --- /dev/null +++ b/.github/workflows/hacs-action.yml @@ -0,0 +1,17 @@ +name: HACS Action + +on: + push: + pull_request: + +jobs: + hacs: + name: HACS Action + runs-on: "ubuntu-latest" + steps: + - uses: "actions/checkout@v2" + - name: HACS Action + uses: "hacs/action@main" + with: + category: "integration" + ignore: archived, brands, requirements diff --git a/.github/workflows/hassfest-action.yml b/.github/workflows/hassfest-action.yml new file mode 100644 index 0000000..64de9a2 --- /dev/null +++ b/.github/workflows/hassfest-action.yml @@ -0,0 +1,12 @@ +name: Validate with hassfest + +on: + push: + pull_request: + +jobs: + validate: + runs-on: "ubuntu-latest" + steps: + - uses: "actions/checkout@v2" + - uses: "home-assistant/actions/hassfest@master" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b6e4761 --- /dev/null +++ b/.gitignore @@ -0,0 +1,129 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..e59d60b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "python.analysis.typeCheckingMode": "basic", + "python.testing.pytestArgs": [ + "tests" + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..9bd3464 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,17 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "Deploy", + "type": "shell", + "command": "scp -r ./custom_components/gazdebordeaux hass:/root/homeassistant/custom_components", + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..9643463 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [1.0.0] - 2023-11-27 diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..d367df8 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Christophe Camicas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..38915a8 --- /dev/null +++ b/README.md @@ -0,0 +1,94 @@ +# Home Assistant Gaz De Bordeaux integration +Since Gaz De Bordeaux is a France specific provider, this README is in French + +## Installation +### Method 1 : HACS (recommended) + +Follow the steps described below to add GrDF Gazpar integration with [HACS](https://hacs.xyz/): + +1. From [HACS](https://hacs.xyz/) (Home Assistant Community Store), open the upper left menu and select `Custom repositories` option to add the new repo. + +2. Add the address with the category `Integration`, and click `ADD`. The new corresponding repo appears in the repo list. + +3. Select this repo (this integration description is displayed in a window) and click on `INSTALL THIS REPOSITORY` button on the lower right of this window. + +4. Keep the last version and click the button `INSTALL` on the lower right. + +5. Do click on `RELOAD` button for completion! The integration is now ready. It remains the configuration. + +### Method 2 : Manual + +Copy the gazdebordeaux directory in HA config/custom_components/gazdebordeaux directory. + +`scp -r ./gazdebordeaux hass:/root/config/custom_components` + +## Configuration +After the installation, restart your HA application. You could now add the `Gaz De Bordeaux` directly like any other integration. You should be prompted with a form asking for your login and password. +This is the login you should use to check your consumption on the following website: https://life.gazdebordeaux.fr/ + +## Home Assistant Energy module integration + +You probably want to integrate Gaz De Bordeaux data into the Home Assistant Energy module. + +![Dashboard](images/energy_module.png) + +In Home Assistant energy configuration panel, you can set directly the sensor `gazdebordeaux:energy_consumption` in the gas consumption section, and `sensor.currently_bill_cost_to_date` + +## Specific dashboard + +If you prefer a specific dashboard to the Energy module, I recommend using the following template +```yaml + - title: Energy + path: energy + icon: mdi:lightning-bolt + type: sidebar + badges: [] + cards: + - chart_type: line + period: day + type: statistics-graph + entities: + - entity: gazdebordeaux:energy_consumption + name: Conso + stat_types: + - state + title: Conso kWh + hide_legend: true + - type: statistic + entity: gazdebordeaux:energy_consumption + period: + calendar: + period: month + stat_type: change + view_layout: + position: sidebar + name: Month consumption + - type: statistic + entity: gazdebordeaux:energy_cost + period: + calendar: + period: month + stat_type: change + unit: € + view_layout: + position: sidebar + name: Month cost + - type: entities + entities: + - entity: sensor.current_bill_gas_cost_to_date + icon: mdi:currency-eur + - entity: sensor.current_bill_gas_usage_to_date + - entity: sensor.current_energy_usage_to_date + view_layout: + position: sidebar + - chart_type: line + period: day + type: statistics-graph + entities: + - entity: gazdebordeaux:energy_cost + name: Coût + stat_types: + - state + hide_legend: true + title: Coût € +``` \ No newline at end of file diff --git a/custom_components/gazdebordeaux/__init__.py b/custom_components/gazdebordeaux/__init__.py new file mode 100644 index 0000000..92a5ce7 --- /dev/null +++ b/custom_components/gazdebordeaux/__init__.py @@ -0,0 +1,31 @@ +"""The Gaz de Bordeaux integration.""" +from __future__ import annotations + +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import Platform +from homeassistant.core import HomeAssistant + +from .const import DOMAIN +from .coordinator import GdbCoordinator + +PLATFORMS: list[Platform] = [Platform.SENSOR] + + +async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: + """Set up Gaz de Bordeaux from a config entry.""" + + coordinator = GdbCoordinator(hass, entry.data) + await coordinator.async_config_entry_first_refresh() + hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator + + await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) + + return True + + +async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: + """Unload a config entry.""" + if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS): + hass.data[DOMAIN].pop(entry.entry_id) + + return unload_ok \ No newline at end of file diff --git a/custom_components/gazdebordeaux/config_flow.py b/custom_components/gazdebordeaux/config_flow.py new file mode 100644 index 0000000..24d0394 --- /dev/null +++ b/custom_components/gazdebordeaux/config_flow.py @@ -0,0 +1,78 @@ +"""Config flow for Gazdebordeaux integration.""" +from __future__ import annotations + +from collections.abc import Mapping +import logging +from typing import Any + +import voluptuous as vol + +from homeassistant import config_entries +from homeassistant.const import CONF_PASSWORD, CONF_USERNAME +from homeassistant.core import HomeAssistant, callback +from homeassistant.data_entry_flow import FlowResult +from homeassistant.helpers.aiohttp_client import async_create_clientsession + +from .const import DOMAIN +from .gazdebordeaux import Gazdebordeaux + +_LOGGER = logging.getLogger(__name__) + +STEP_USER_DATA_SCHEMA = vol.Schema( + { + vol.Required(CONF_USERNAME): str, + vol.Required(CONF_PASSWORD): str, + } +) + + +async def _validate_login( + hass: HomeAssistant, login_data: dict[str, str] +) -> dict[str, str]: + """Validate login data and return any errors.""" + api = Gazdebordeaux( + async_create_clientsession(hass), + login_data[CONF_USERNAME], + login_data[CONF_PASSWORD], + ) + errors: dict[str, str] = {} + try: + await api.async_login() + except Exception: + errors["base"] = "invalid_auth" + return errors + + +class GazdebordeauxConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): + """Handle a config flow for Gazdebordeaux.""" + + VERSION = 1 + + def __init__(self) -> None: + """Initialize a new GazdebordeauxConfigFlow.""" + self.reauth_entry: config_entries.ConfigEntry | None = None + self.utility_info: dict[str, Any] | None = None + + async def async_step_user( + self, user_input: dict[str, Any] | None = None + ) -> FlowResult: + """Handle the initial step.""" + errors: dict[str, str] = {} + if user_input is not None: + + errors = await _validate_login(self.hass, user_input) + if not errors: + return self._async_create_gazdebordeaux_entry(user_input) + + return self.async_show_form( + step_id="user", data_schema=STEP_USER_DATA_SCHEMA, errors=errors + ) + + + @callback + def _async_create_gazdebordeaux_entry(self, data: dict[str, Any]) -> FlowResult: + """Create the config entry.""" + return self.async_create_entry( + title=f"({data[CONF_USERNAME]})", + data=data, + ) diff --git a/custom_components/gazdebordeaux/const.py b/custom_components/gazdebordeaux/const.py new file mode 100644 index 0000000..a4b301d --- /dev/null +++ b/custom_components/gazdebordeaux/const.py @@ -0,0 +1,3 @@ +"""Constants for the Gaz de Bordeaux integration.""" + +DOMAIN = "gazdebordeaux" diff --git a/custom_components/gazdebordeaux/coordinator.py b/custom_components/gazdebordeaux/coordinator.py new file mode 100644 index 0000000..9081175 --- /dev/null +++ b/custom_components/gazdebordeaux/coordinator.py @@ -0,0 +1,214 @@ +"""Coordinator to handle Opower connections.""" +from datetime import datetime, timedelta +import logging +from types import MappingProxyType +from typing import Any, cast + +from .gazdebordeaux import Gazdebordeaux, DailyUsageRead, TotalUsageRead + +from homeassistant.components.recorder import get_instance +from homeassistant.components.recorder.models import StatisticData, StatisticMetaData +from homeassistant.components.recorder.statistics import ( + async_add_external_statistics, + get_last_statistics, + statistics_during_period, + StatisticsRow +) +from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, UnitOfEnergy, UnitOfVolume +from homeassistant.core import HomeAssistant, callback +from homeassistant.exceptions import ConfigEntryAuthFailed +from homeassistant.helpers import aiohttp_client +from homeassistant.helpers.update_coordinator import DataUpdateCoordinator + +from .const import DOMAIN + +_LOGGER = logging.getLogger(__name__) + + +class GdbCoordinator(DataUpdateCoordinator[TotalUsageRead]): + """Handle fetching GazdeBordeaux data, updating sensors and inserting statistics.""" + + def __init__( + self, + hass: HomeAssistant, + entry_data: MappingProxyType[str, Any], + ) -> None: + """Initialize the data handler.""" + super().__init__( + hass, + _LOGGER, + name="gazdebordeaux", + # Data is updated daily. + # Refresh every 12h to be at most 12h behind. + update_interval=timedelta(hours=12), + ) + self.api = Gazdebordeaux( + aiohttp_client.async_get_clientsession(hass), + entry_data[CONF_USERNAME], + entry_data[CONF_PASSWORD], + ) + + @callback + def _dummy_listener() -> None: + pass + + # Force the coordinator to periodically update by registering at least one listener. + # Needed when the _async_update_data below returns {} for utilities that don't provide + # forecast, which results to no sensors added, no registered listeners, and thus + # _async_update_data not periodically getting called which is needed for _insert_statistics. + self.async_add_listener(_dummy_listener) + + async def _async_update_data( + self, + ) -> TotalUsageRead: + """Fetch data from API endpoint.""" + try: + # Login expires after a few minutes. + # Given the infrequent updating (every 12h) + # assume previous session has expired and re-login. + await self.api.async_login() + except Exception as err: + raise ConfigEntryAuthFailed from err + + totalUsage: TotalUsageRead = await self.api.async_get_total_usage() + + # Because Opower provides historical usage/cost with a delay of a couple of days + # we need to insert data into statistics. + await self._insert_statistics() + + # Because Opower provides historical usage/cost with a delay of a couple of days + # we need to insert data into statistics. + await self._insert_statistics() + return totalUsage + + + async def _insert_statistics(self) -> None: + """Insert gdb statistics.""" + cost_statistic_id = f"{DOMAIN}:energy_cost" + consumption_statistic_id = f"{DOMAIN}:energy_consumption" + volume_statistic_id = f"{DOMAIN}:volume" + _LOGGER.debug( + "Updating Statistics for %s, %s and %s", + cost_statistic_id, + consumption_statistic_id, + volume_statistic_id + ) + + last_stat = await get_instance(self.hass).async_add_executor_job( + get_last_statistics, self.hass, 1, consumption_statistic_id, True, set() + ) + if not last_stat: + _LOGGER.debug("Updating statistic for the first time") + usage_reads = await self._async_get_all_data() + cost_sum = 0.0 + consumption_sum = 0.0 + volume_sum = 0.0 + last_stats_time = None + else: + usage_reads = await self._async_get_recent_usage_reads( + last_stat[consumption_statistic_id][0]["start"] # type: ignore + ) + if not usage_reads: + _LOGGER.debug("No recent usage/cost data. Skipping update") + return + + stats = await get_instance(self.hass).async_add_executor_job( + statistics_during_period, + self.hass, + usage_reads[0].date, + None, + {cost_statistic_id, consumption_statistic_id, volume_statistic_id}, + "day", + None, + {"sum"}, + ) + # s:StatisticsRow =stats[cost_statistic_id][0] + + cost_sum = cast(float, stats[cost_statistic_id][0]["sum"]) # type: ignore + consumption_sum = cast(float, stats[consumption_statistic_id][0]["sum"]) # type: ignore + volume_sum = cast(float, stats[volume_statistic_id][0]["sum"]) # type: ignore + last_stats_time = stats[cost_statistic_id][0]["start"] # type: ignore + + cost_statistics = [] + consumption_statistics = [] + volume_statistics = [] + + for usage_read in usage_reads: + start = usage_read.date + start.tzinfo + if last_stats_time is not None and start.timestamp() <= last_stats_time: + continue + cost_sum += usage_read.price + consumption_sum += usage_read.amountOfEnergy + volume_sum += usage_read.volumeOfEnergy + + cost_statistics.append( + StatisticData( + start=start, state=usage_read.price, sum=cost_sum + ) + ) + consumption_statistics.append( + StatisticData( + start=start, state=usage_read.amountOfEnergy, sum=consumption_sum + ) + ) + volume_statistics.append( + StatisticData( + start=start, state=usage_read.volumeOfEnergy, sum=volume_sum + ) + ) + + name_prefix = " ".join( + ( + "Gaz de Bordeaux", + ) + ) + cost_metadata = StatisticMetaData( + has_mean=False, + has_sum=True, + name=f"{name_prefix} cost", + source=DOMAIN, + statistic_id=cost_statistic_id, + unit_of_measurement=None, + ) + consumption_metadata = StatisticMetaData( + has_mean=False, + has_sum=True, + name=f"{name_prefix} consumption", + source=DOMAIN, + statistic_id=consumption_statistic_id, + unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR + ) + volume_metadata = StatisticMetaData( + has_mean=False, + has_sum=True, + name=f"{name_prefix} volume", + source=DOMAIN, + statistic_id=volume_statistic_id, + unit_of_measurement=UnitOfVolume.CUBIC_METERS + ) + + async_add_external_statistics(self.hass, cost_metadata, cost_statistics) + async_add_external_statistics(self.hass, consumption_metadata, consumption_statistics) + async_add_external_statistics(self.hass, volume_metadata, volume_statistics) + + async def _async_get_all_data(self) -> list[DailyUsageRead]: + """Get all cost reads since account activation but at different resolutions depending on age. + + - month resolution for all years (since account activation) + - day resolution for past 3 years (if account's read resolution supports it) + - hour resolution for past 2 months (if account's read resolution supports it) + """ + usage_reads = [] + + start = None + end = datetime.now() + usage_reads = await self.api.async_get_daily_usage(start, end) + return usage_reads + + async def _async_get_recent_usage_reads(self, last_stat_time: float) -> list[DailyUsageRead]: + """Get cost reads within the past 30 days to allow corrections in data from utilities.""" + return await self.api.async_get_daily_usage( + datetime.fromtimestamp(last_stat_time) - timedelta(days=30), + datetime.now(), + ) \ No newline at end of file diff --git a/custom_components/gazdebordeaux/enum.py b/custom_components/gazdebordeaux/enum.py new file mode 100644 index 0000000..ad8960b --- /dev/null +++ b/custom_components/gazdebordeaux/enum.py @@ -0,0 +1,34 @@ +from enum import Enum + +# ------------------------------------------------------------------------------------------------------------ +class PropertyName(Enum): + TIME_PERIOD = "time_period" + START_INDEX = "start_index_m3" + END_INDEX = "end_index_m3" + VOLUME = "volume_m3" + ENERGY = "energy_kwh" + CONVERTER_FACTOR = "converter_factor_kwh/m3" + TEMPERATURE = "temperature_degC" + TYPE = "type" + TIMESTAMP = "timestamp" + + def __str__(self): + return self.value + + def __repr__(self): + return self.__str__() + + +# ------------------------------------------------------------------------------------------------------------ +class Frequency(Enum): + HOURLY = "hourly" + DAILY = "daily" + WEEKLY = "weekly" + MONTHLY = "monthly" + YEARLY = "yearly" + + def __str__(self): + return self.value + + def __repr__(self): + return self.__str__() \ No newline at end of file diff --git a/custom_components/gazdebordeaux/gazdebordeaux.py b/custom_components/gazdebordeaux/gazdebordeaux.py new file mode 100644 index 0000000..bc0e6d2 --- /dev/null +++ b/custom_components/gazdebordeaux/gazdebordeaux.py @@ -0,0 +1,148 @@ +import logging +import dataclasses +from datetime import datetime +import pytz +from aiohttp import ClientSession +from json.decoder import JSONDecodeError +from typing import List, Any + +DATA_URL = "https://life.gazdebordeaux.fr/api{0}/consumptions" +LOGIN_URL = "https://life.gazdebordeaux.fr/api/login_check" +ME_URL = "https://life.gazdebordeaux.fr/api/users/me" + +INPUT_DATE_FORMAT = "%Y-%m-%d" + +Logger = logging.getLogger(__name__) + +# ------------------------------------------------------------------------------------------------------------ +@dataclasses.dataclass +class TotalUsageRead: + amountOfEnergy: float + volumeOfEnergy: float + price: float + +@dataclasses.dataclass +class DailyUsageRead: + date: datetime + amountOfEnergy: float + volumeOfEnergy: float + price: float + ratio: float + temperature: float +# ------------------------------------------------------------------------------------------------------------ +class Gazdebordeaux: + def __init__(self, session: ClientSession, username: str, password: str, token=None, house=None): + self._session = session + self._username = username + self._password = password + self._token: str|None = token + self._selectedHouse: str|None = house + + async def async_login(self): + Logger.debug("Loging in...") + async with self._session.post(LOGIN_URL, json={ + "email":self._username, + "password":self._password + }) as response: + token = await response.json() + + if token["token"] is None: + raise Exception("invalid auth" + await response.text()) + Logger.debug("Login response OK") + self._token = token["token"] + + # ------------------------------------------------------ + async def async_get_total_usage(self): + monthly_data = await self.async_get_data(None, None, "year") + Logger.debug("Data retreived %s", monthly_data) + + paris_tz = pytz.timezone('Europe/Paris') + d = monthly_data["total"] + return TotalUsageRead( + amountOfEnergy = d["amountOfEnergy"], + volumeOfEnergy = d["volumeOfEnergy"], + price = d["price"], + ) + + async def async_get_daily_usage(self, start: datetime|None, end: datetime|None) -> List[DailyUsageRead]: + daily_data = await self.async_get_data(start, end, "month") + Logger.debug("Data retreived %s", daily_data) + + usageReads: List[DailyUsageRead] = [] + + paris_tz = pytz.timezone('Europe/Paris') + for d in daily_data: + if d == "total": + continue + usageReads.append(DailyUsageRead( + date = datetime.strptime(d, INPUT_DATE_FORMAT).replace(tzinfo=paris_tz), + amountOfEnergy = daily_data[d]["amountOfEnergy"], + volumeOfEnergy = daily_data[d]["volumeOfEnergy"], + price = daily_data[d]["price"], + ratio = daily_data[d]["ratio"], + temperature = daily_data[d]["temperature"], + + )) + + Logger.debug("Data transformed: %s", usageReads) + return usageReads + + + async def async_get_data(self, start: datetime|None, end: datetime|None, scale: str) -> Any: + try: + if self._token is None: + await self.async_login() + if self._token is None: + return None + + if self._selectedHouse is None: + await self.loadHouse() + + headers = { + "Authorization": "Bearer " + self._token, + "Connection": "keep-alive", + "Content-Type": "application/json" + } + payload = { + "email":self._username, + "password":self._password + } + params = { + "scale": scale + } + if start is not None: + params["startDate"] = start.strftime("%Y-%m-%d") + if end is not None: + params["endDate"] = end.strftime("%Y-%m-%d") + + async with self._session.get(DATA_URL.format(self._selectedHouse), headers=headers, json=payload, params=params) as response: + return await response.json() + + except Exception: + Logger.error("An unexpected error occured while loading the data", exc_info=True) + raise + + async def loadHouse(self): + if self._token is None: + await self.async_login() + if self._token is None: + return + + Logger.debug("Loading house info...") + + headers = { + "Authorization": "Bearer " + self._token, + "Connection": "keep-alive", + "Content-Type": "application/json" + } + + # querying House id + async with self._session.get(ME_URL, headers=headers) as response: + try: + data = await response.json() + self._selectedHouse = data["selectedHouse"] + Logger.debug("Loaded house info: %s", data) + + except JSONDecodeError: + Logger.error("An unexpected error occured while loading the house", exc_info=True) + raise diff --git a/custom_components/gazdebordeaux/manifest.json b/custom_components/gazdebordeaux/manifest.json new file mode 100644 index 0000000..70be9a1 --- /dev/null +++ b/custom_components/gazdebordeaux/manifest.json @@ -0,0 +1,15 @@ +{ + "domain": "gazdebordeaux", + "name": "Gaz de Bordeaux", + "documentation": "", + "version": "1.0.0", + "issue_tracker": "", + "config_flow": true, + "requirements": [ + ], + "dependencies": [], + "codeowners": [ + "@chriscamicas" + ], + "iot_class": "cloud_polling" +} diff --git a/custom_components/gazdebordeaux/manifest.py b/custom_components/gazdebordeaux/manifest.py new file mode 100644 index 0000000..b9b57dc --- /dev/null +++ b/custom_components/gazdebordeaux/manifest.py @@ -0,0 +1,17 @@ +import json +import os + + +# -------------------------------------------------------------------------------------------- +class Manifest: + + # --------------------------------- + @staticmethod + def version(): + + manifestFilePath = f"{os.path.dirname(__file__)}/manifest.json" + + with open(manifestFilePath) as jsonFile: + manifest = json.load(jsonFile) + + return manifest["version"] diff --git a/custom_components/gazdebordeaux/sensor.py b/custom_components/gazdebordeaux/sensor.py new file mode 100644 index 0000000..4906f7e --- /dev/null +++ b/custom_components/gazdebordeaux/sensor.py @@ -0,0 +1,136 @@ +"""Support for Opower sensors.""" +from __future__ import annotations + +from collections.abc import Callable +from dataclasses import dataclass + +from .gazdebordeaux import TotalUsageRead + +from homeassistant.components.sensor import ( + SensorDeviceClass, + SensorEntity, + SensorEntityDescription, + SensorStateClass, +) +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import UnitOfEnergy, UnitOfVolume +from homeassistant.core import HomeAssistant +from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import StateType +from homeassistant.helpers.update_coordinator import CoordinatorEntity + +from .const import DOMAIN +from .coordinator import GdbCoordinator + + +@dataclass +class GdbEntityDescriptionMixin: + """Mixin values for required keys.""" + + value_fn: Callable[[TotalUsageRead], str | float] + + +@dataclass +class GdbEntityDescription(SensorEntityDescription, GdbEntityDescriptionMixin): + """Class describing Gaz de Bordeaux sensors entities.""" + + +# suggested_display_precision=0 for all sensors since +# Opower provides 0 decimal points for all these. +# (for the statistics in the energy dashboard Opower does provide decimal points) + +GAS_SENSORS: tuple[GdbEntityDescription, ...] = ( + GdbEntityDescription( + key="gas_usage_to_date", + name="Current bill gas usage to date", + device_class=SensorDeviceClass.GAS, + native_unit_of_measurement=UnitOfVolume.CUBIC_METERS, + suggested_unit_of_measurement=UnitOfVolume.CUBIC_METERS, + state_class=SensorStateClass.TOTAL, + suggested_display_precision=0, + value_fn=lambda data: data.volumeOfEnergy, + ), + GdbEntityDescription( + key="gas_energy_to_date", + name="Current energy usage to date", + device_class=SensorDeviceClass.ENERGY, + native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR, + suggested_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR, + state_class=SensorStateClass.TOTAL, + suggested_display_precision=0, + value_fn=lambda data: data.amountOfEnergy, + ), + GdbEntityDescription( + key="gas_cost_to_date", + name="Current bill gas cost to date", + device_class=SensorDeviceClass.MONETARY, + native_unit_of_measurement="€", + suggested_unit_of_measurement="€", + state_class=SensorStateClass.TOTAL, + suggested_display_precision=0, + value_fn=lambda data: data.price, + ), +) + + +async def async_setup_entry( + hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback +) -> None: + """Set up the Gdb sensor.""" + + coordinator: GdbCoordinator = hass.data[DOMAIN][entry.entry_id] + entities: list[GdbSensor] = [] + totalUsage = coordinator.data + + device_id = f"gazpar" + device = DeviceInfo( + identifiers={(DOMAIN, device_id)}, + name=f"Gaz de Bordeaux", + manufacturer="Regaz", + model="gazpar", + entry_type=DeviceEntryType.SERVICE, + ) + sensors: tuple[GdbEntityDescription, ...] = GAS_SENSORS + for sensor in sensors: + entities.append( + GdbSensor( + coordinator, + sensor, + "", + device, + device_id, + ) + ) + + async_add_entities(entities) + + +class GdbSensor(CoordinatorEntity[GdbCoordinator], SensorEntity): + """Representation of an Gdb sensor.""" + + entity_description: GdbEntityDescription + + def __init__( + self, + coordinator: GdbCoordinator, + description: GdbEntityDescription, + utility_account_id: str, + device: DeviceInfo, + device_id: str, + ) -> None: + """Initialize the sensor.""" + super().__init__(coordinator) + self.entity_description = description + self._attr_unique_id = f"{device_id}_{description.key}" + self._attr_device_info = device + self.utility_account_id = utility_account_id + + @property + def native_value(self) -> StateType: + """Return the state.""" + if self.coordinator.data is not None: + return self.entity_description.value_fn( + self.coordinator.data + ) + return None \ No newline at end of file diff --git a/custom_components/gazdebordeaux/strings.json b/custom_components/gazdebordeaux/strings.json new file mode 100644 index 0000000..58fee87 --- /dev/null +++ b/custom_components/gazdebordeaux/strings.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "username": "[%key:common::config_flow::data::username%]", + "password": "[%key:common::config_flow::data::password%]" + } + } + } + } +} \ No newline at end of file diff --git a/hacs.json b/hacs.json new file mode 100644 index 0000000..9f3cc23 --- /dev/null +++ b/hacs.json @@ -0,0 +1,5 @@ +{ + "name": "Gaz de Bordeaux", + "country": "FR", + "render_readme": true +} diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..2c8438b --- /dev/null +++ b/pytest.ini @@ -0,0 +1,12 @@ +[pytest] +log_level = DEBUG +log_format = %(asctime)s %(levelname)s [%(name)s] %(message)s +log_date_format = %Y-%m-%d %H:%M:%S +log_cli_level = DEBUG +log_cli = True +log_cli_format = %(asctime)s %(levelname)s [%(name)s] %(message)s +log_cli_date_format = %Y-%m-%d %H:%M:%S +log_file_level = DEBUG +log_file_format = %(asctime)s %(levelname)s [%(name)s] %(message)s +log_file_date_format = %Y-%m-%d %H:%M:%S +log_file = log/pytest.log diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..6264844 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +--index-url https://test.pypi.org/simple +--extra-index-url https://pypi.org/simple +flake8 +pytest +homeassistant \ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/resources/high_daily_data.json b/tests/resources/high_daily_data.json new file mode 100644 index 0000000..66ed1a6 --- /dev/null +++ b/tests/resources/high_daily_data.json @@ -0,0 +1,1960 @@ +[ + { + "time_period": "18/04/2021", + "start_index_m3": 13702.0, + "end_index_m3": 13703.0, + "volume_m3": 0.0, + "energy_kwh": 0.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "17/04/2021", + "start_index_m3": 13702.0, + "end_index_m3": 13702.0, + "volume_m3": 7.7, + "energy_kwh": 1.2, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "16/04/2021", + "start_index_m3": 13702.0, + "end_index_m3": 13702.0, + "volume_m3": 9.9, + "energy_kwh": 0.7, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "15/04/2021", + "start_index_m3": 13701.0, + "end_index_m3": 13702.0, + "volume_m3": 7.4, + "energy_kwh": 83.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "14/04/2021", + "start_index_m3": 13670.0, + "end_index_m3": 13677.0, + "volume_m3": 7.5, + "energy_kwh": 84.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "13/04/2021", + "start_index_m3": 13663.0, + "end_index_m3": 13670.0, + "volume_m3": 6.8, + "energy_kwh": 76.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "12/04/2021", + "start_index_m3": 13651.0, + "end_index_m3": 13663.0, + "volume_m3": 11.6, + "energy_kwh": 130.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "11/04/2021", + "start_index_m3": 13642.0, + "end_index_m3": 13651.0, + "volume_m3": 8.9, + "energy_kwh": 100.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "10/04/2021", + "start_index_m3": 13639.0, + "end_index_m3": 13642.0, + "volume_m3": 3.7, + "energy_kwh": 41.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "09/04/2021", + "start_index_m3": 13634.0, + "end_index_m3": 13639.0, + "volume_m3": 4.7, + "energy_kwh": 52.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "08/04/2021", + "start_index_m3": 13628.0, + "end_index_m3": 13634.0, + "volume_m3": 6.5, + "energy_kwh": 73.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "07/04/2021", + "start_index_m3": 13618.0, + "end_index_m3": 13628.0, + "volume_m3": 9.6, + "energy_kwh": 108.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "06/04/2021", + "start_index_m3": 13605.0, + "end_index_m3": 13618.0, + "volume_m3": 13.2, + "energy_kwh": 148.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "05/04/2021", + "start_index_m3": 13592.0, + "end_index_m3": 13605.0, + "volume_m3": 12.3, + "energy_kwh": 138.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "04/04/2021", + "start_index_m3": 13584.0, + "end_index_m3": 13592.0, + "volume_m3": 8.6, + "energy_kwh": 96.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "03/04/2021", + "start_index_m3": 13582.0, + "end_index_m3": 13584.0, + "volume_m3": 2.1, + "energy_kwh": 23.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "02/04/2021", + "start_index_m3": 13580.0, + "end_index_m3": 13582.0, + "volume_m3": 2.1, + "energy_kwh": 23.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "01/04/2021", + "start_index_m3": 13578.0, + "end_index_m3": 13580.0, + "volume_m3": 1.9, + "energy_kwh": 21.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 17.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "31/03/2021", + "start_index_m3": 13575.0, + "end_index_m3": 13578.0, + "volume_m3": 2.3, + "energy_kwh": 25.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 18.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "30/03/2021", + "start_index_m3": 13574.0, + "end_index_m3": 13575.0, + "volume_m3": 1.9, + "energy_kwh": 21.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 17.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "29/03/2021", + "start_index_m3": 13571.0, + "end_index_m3": 13574.0, + "volume_m3": 2.5, + "energy_kwh": 28.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 15.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "28/03/2021", + "start_index_m3": 13566.0, + "end_index_m3": 13571.0, + "volume_m3": 4.9, + "energy_kwh": 55.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "27/03/2021", + "start_index_m3": 13559.0, + "end_index_m3": 13566.0, + "volume_m3": 7.5, + "energy_kwh": 84.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "26/03/2021", + "start_index_m3": 13549.0, + "end_index_m3": 13559.0, + "volume_m3": 9.3, + "energy_kwh": 104.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "25/03/2021", + "start_index_m3": 13544.0, + "end_index_m3": 13549.0, + "volume_m3": 5.3, + "energy_kwh": 59.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "24/03/2021", + "start_index_m3": 13540.0, + "end_index_m3": 13544.0, + "volume_m3": 4.3, + "energy_kwh": 48.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "23/03/2021", + "start_index_m3": 13532.0, + "end_index_m3": 13540.0, + "volume_m3": 8.1, + "energy_kwh": 91.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "22/03/2021", + "start_index_m3": 13519.0, + "end_index_m3": 13532.0, + "volume_m3": 12.8, + "energy_kwh": 144.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "21/03/2021", + "start_index_m3": 13509.0, + "end_index_m3": 13519.0, + "volume_m3": 10.2, + "energy_kwh": 114.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "20/03/2021", + "start_index_m3": 13497.0, + "end_index_m3": 13509.0, + "volume_m3": 11.7, + "energy_kwh": 131.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "19/03/2021", + "start_index_m3": 13486.0, + "end_index_m3": 13497.0, + "volume_m3": 10.8, + "energy_kwh": 121.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "18/03/2021", + "start_index_m3": 13475.0, + "end_index_m3": 13486.0, + "volume_m3": 11.3, + "energy_kwh": 127.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "17/03/2021", + "start_index_m3": 13463.0, + "end_index_m3": 13475.0, + "volume_m3": 11.8, + "energy_kwh": 132.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "16/03/2021", + "start_index_m3": 13452.0, + "end_index_m3": 13463.0, + "volume_m3": 10.8, + "energy_kwh": 121.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "15/03/2021", + "start_index_m3": 13441.0, + "end_index_m3": 13452.0, + "volume_m3": 11.3, + "energy_kwh": 127.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "14/03/2021", + "start_index_m3": 13434.0, + "end_index_m3": 13441.0, + "volume_m3": 6.8, + "energy_kwh": 76.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "13/03/2021", + "start_index_m3": 13425.0, + "end_index_m3": 13434.0, + "volume_m3": 9.5, + "energy_kwh": 106.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "12/03/2021", + "start_index_m3": 13415.0, + "end_index_m3": 13425.0, + "volume_m3": 9.6, + "energy_kwh": 108.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "11/03/2021", + "start_index_m3": 13409.0, + "end_index_m3": 13415.0, + "volume_m3": 6.0, + "energy_kwh": 67.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "10/03/2021", + "start_index_m3": 13399.0, + "end_index_m3": 13409.0, + "volume_m3": 9.8, + "energy_kwh": 110.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "09/03/2021", + "start_index_m3": 13390.0, + "end_index_m3": 13399.0, + "volume_m3": 8.9, + "energy_kwh": 100.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "08/03/2021", + "start_index_m3": 13380.0, + "end_index_m3": 13390.0, + "volume_m3": 10.6, + "energy_kwh": 119.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "07/03/2021", + "start_index_m3": 13368.0, + "end_index_m3": 13380.0, + "volume_m3": 11.9, + "energy_kwh": 133.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "06/03/2021", + "start_index_m3": 13356.0, + "end_index_m3": 13368.0, + "volume_m3": 12.3, + "energy_kwh": 138.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "05/03/2021", + "start_index_m3": 13343.0, + "end_index_m3": 13356.0, + "volume_m3": 12.6, + "energy_kwh": 141.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "04/03/2021", + "start_index_m3": 13338.0, + "end_index_m3": 13343.0, + "volume_m3": 5.4, + "energy_kwh": 60.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "03/03/2021", + "start_index_m3": 13333.0, + "end_index_m3": 13338.0, + "volume_m3": 4.9, + "energy_kwh": 55.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 11.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "02/03/2021", + "start_index_m3": 13325.0, + "end_index_m3": 13333.0, + "volume_m3": 7.4, + "energy_kwh": 83.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 11.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "01/03/2021", + "start_index_m3": 13317.0, + "end_index_m3": 13325.0, + "volume_m3": 8.6, + "energy_kwh": 96.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "28/02/2021", + "start_index_m3": 13306.0, + "end_index_m3": 13317.0, + "volume_m3": 11.1, + "energy_kwh": 124.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "27/02/2021", + "start_index_m3": 13296.0, + "end_index_m3": 13306.0, + "volume_m3": 9.2, + "energy_kwh": 102.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "26/02/2021", + "start_index_m3": 13291.0, + "end_index_m3": 13296.0, + "volume_m3": 5.0, + "energy_kwh": 55.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "25/02/2021", + "start_index_m3": 13285.0, + "end_index_m3": 13291.0, + "volume_m3": 6.4, + "energy_kwh": 71.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 13.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "24/02/2021", + "start_index_m3": 13281.0, + "end_index_m3": 13285.0, + "volume_m3": 3.7, + "energy_kwh": 41.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "23/02/2021", + "start_index_m3": 13278.0, + "end_index_m3": 13281.0, + "volume_m3": 3.4, + "energy_kwh": 38.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "22/02/2021", + "start_index_m3": 13269.0, + "end_index_m3": 13278.0, + "volume_m3": 8.5, + "energy_kwh": 95.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 13.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "21/02/2021", + "start_index_m3": 13265.0, + "end_index_m3": 13269.0, + "volume_m3": 4.4, + "energy_kwh": 49.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 13.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "20/02/2021", + "start_index_m3": 13259.0, + "end_index_m3": 13265.0, + "volume_m3": 6.2, + "energy_kwh": 69.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 13.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "19/02/2021", + "start_index_m3": 13250.0, + "end_index_m3": 13259.0, + "volume_m3": 9.2, + "energy_kwh": 102.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "18/02/2021", + "start_index_m3": 13240.0, + "end_index_m3": 13250.0, + "volume_m3": 9.1, + "energy_kwh": 101.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "17/02/2021", + "start_index_m3": 13231.0, + "end_index_m3": 13240.0, + "volume_m3": 9.4, + "energy_kwh": 105.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "16/02/2021", + "start_index_m3": 13222.0, + "end_index_m3": 13231.0, + "volume_m3": 8.8, + "energy_kwh": 98.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "15/02/2021", + "start_index_m3": 13211.0, + "end_index_m3": 13222.0, + "volume_m3": 10.9, + "energy_kwh": 121.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "14/02/2021", + "start_index_m3": 13190.0, + "end_index_m3": 13211.0, + "volume_m3": 21.2, + "energy_kwh": 236.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 0.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "13/02/2021", + "start_index_m3": 13169.0, + "end_index_m3": 13190.0, + "volume_m3": 20.7, + "energy_kwh": 231.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": -2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "12/02/2021", + "start_index_m3": 13148.0, + "end_index_m3": 13169.0, + "volume_m3": 21.1, + "energy_kwh": 235.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": -2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "11/02/2021", + "start_index_m3": 13129.0, + "end_index_m3": 13148.0, + "volume_m3": 19.5, + "energy_kwh": 217.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": -2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "10/02/2021", + "start_index_m3": 13106.0, + "end_index_m3": 13129.0, + "volume_m3": 22.4, + "energy_kwh": 250.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": -3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "09/02/2021", + "start_index_m3": 13086.0, + "end_index_m3": 13106.0, + "volume_m3": 20.2, + "energy_kwh": 225.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "08/02/2021", + "start_index_m3": 13068.0, + "end_index_m3": 13086.0, + "volume_m3": 18.4, + "energy_kwh": 205.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "07/02/2021", + "start_index_m3": 13052.0, + "end_index_m3": 13068.0, + "volume_m3": 15.8, + "energy_kwh": 176.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "06/02/2021", + "start_index_m3": 13042.0, + "end_index_m3": 13052.0, + "volume_m3": 9.8, + "energy_kwh": 109.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "05/02/2021", + "start_index_m3": 13033.0, + "end_index_m3": 13042.0, + "volume_m3": 9.2, + "energy_kwh": 102.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "04/02/2021", + "start_index_m3": 13023.0, + "end_index_m3": 13033.0, + "volume_m3": 10.3, + "energy_kwh": 115.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "03/02/2021", + "start_index_m3": 13016.0, + "end_index_m3": 13023.0, + "volume_m3": 6.6, + "energy_kwh": 73.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "02/02/2021", + "start_index_m3": 13009.0, + "end_index_m3": 13016.0, + "volume_m3": 6.9, + "energy_kwh": 77.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "01/02/2021", + "start_index_m3": 12999.0, + "end_index_m3": 13009.0, + "volume_m3": 10.2, + "energy_kwh": 112.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "31/01/2021", + "start_index_m3": 12989.0, + "end_index_m3": 12999.0, + "volume_m3": 9.6, + "energy_kwh": 105.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "30/01/2021", + "start_index_m3": 12981.0, + "end_index_m3": 12989.0, + "volume_m3": 8.1, + "energy_kwh": 88.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "29/01/2021", + "start_index_m3": 12973.0, + "end_index_m3": 12981.0, + "volume_m3": 8.0, + "energy_kwh": 87.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "28/01/2021", + "start_index_m3": 12967.0, + "end_index_m3": 12973.0, + "volume_m3": 6.7, + "energy_kwh": 73.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "27/01/2021", + "start_index_m3": 12954.0, + "end_index_m3": 12967.0, + "volume_m3": 12.6, + "energy_kwh": 138.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "26/01/2021", + "start_index_m3": 12937.0, + "end_index_m3": 12954.0, + "volume_m3": 16.9, + "energy_kwh": 185.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "25/01/2021", + "start_index_m3": 12920.0, + "end_index_m3": 12937.0, + "volume_m3": 17.5, + "energy_kwh": 192.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "24/01/2021", + "start_index_m3": 12903.0, + "end_index_m3": 12920.0, + "volume_m3": 16.9, + "energy_kwh": 185.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "23/01/2021", + "start_index_m3": 12886.0, + "end_index_m3": 12903.0, + "volume_m3": 16.7, + "energy_kwh": 183.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "22/01/2021", + "start_index_m3": 12873.0, + "end_index_m3": 12886.0, + "volume_m3": 12.6, + "energy_kwh": 138.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "21/01/2021", + "start_index_m3": 12864.0, + "end_index_m3": 12873.0, + "volume_m3": 9.9, + "energy_kwh": 108.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "20/01/2021", + "start_index_m3": 12854.0, + "end_index_m3": 12864.0, + "volume_m3": 9.4, + "energy_kwh": 103.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "19/01/2021", + "start_index_m3": 12842.0, + "end_index_m3": 12854.0, + "volume_m3": 12.4, + "energy_kwh": 136.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "18/01/2021", + "start_index_m3": 12829.0, + "end_index_m3": 12842.0, + "volume_m3": 13.2, + "energy_kwh": 144.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "17/01/2021", + "start_index_m3": 12817.0, + "end_index_m3": 12829.0, + "volume_m3": 12.0, + "energy_kwh": 131.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "16/01/2021", + "start_index_m3": 12800.0, + "end_index_m3": 12817.0, + "volume_m3": 17.0, + "energy_kwh": 186.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "15/01/2021", + "start_index_m3": 12782.0, + "end_index_m3": 12800.0, + "volume_m3": 18.0, + "energy_kwh": 197.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "14/01/2021", + "start_index_m3": 12773.0, + "end_index_m3": 12782.0, + "volume_m3": 8.6, + "energy_kwh": 94.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "13/01/2021", + "start_index_m3": 12763.0, + "end_index_m3": 12773.0, + "volume_m3": 9.9, + "energy_kwh": 108.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "12/01/2021", + "start_index_m3": 12753.0, + "end_index_m3": 12763.0, + "volume_m3": 10.0, + "energy_kwh": 109.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "11/01/2021", + "start_index_m3": 12736.0, + "end_index_m3": 12753.0, + "volume_m3": 17.1, + "energy_kwh": 187.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "10/01/2021", + "start_index_m3": 12719.0, + "end_index_m3": 12736.0, + "volume_m3": 16.5, + "energy_kwh": 181.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "09/01/2021", + "start_index_m3": 12703.0, + "end_index_m3": 12719.0, + "volume_m3": 16.1, + "energy_kwh": 176.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 1.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "08/01/2021", + "start_index_m3": 12690.0, + "end_index_m3": 12703.0, + "volume_m3": 13.6, + "energy_kwh": 149.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "07/01/2021", + "start_index_m3": 12674.0, + "end_index_m3": 12690.0, + "volume_m3": 16.1, + "energy_kwh": 176.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "06/01/2021", + "start_index_m3": 12660.0, + "end_index_m3": 12674.0, + "volume_m3": 13.6, + "energy_kwh": 149.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "05/01/2021", + "start_index_m3": 12642.0, + "end_index_m3": 12660.0, + "volume_m3": 17.8, + "energy_kwh": 195.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "04/01/2021", + "start_index_m3": 12624.0, + "end_index_m3": 12642.0, + "volume_m3": 17.8, + "energy_kwh": 195.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "03/01/2021", + "start_index_m3": 12614.0, + "end_index_m3": 12624.0, + "volume_m3": 10.2, + "energy_kwh": 112.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "02/01/2021", + "start_index_m3": 12600.0, + "end_index_m3": 12614.0, + "volume_m3": 14.1, + "energy_kwh": 154.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "01/01/2021", + "start_index_m3": 12582.0, + "end_index_m3": 12600.0, + "volume_m3": 18.3, + "energy_kwh": 202.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "31/12/2020", + "start_index_m3": 12566.0, + "end_index_m3": 12582.0, + "volume_m3": 15.5, + "energy_kwh": 171.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "30/12/2020", + "start_index_m3": 12553.0, + "end_index_m3": 12566.0, + "volume_m3": 13.3, + "energy_kwh": 147.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "29/12/2020", + "start_index_m3": 12539.0, + "end_index_m3": 12553.0, + "volume_m3": 14.1, + "energy_kwh": 156.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "28/12/2020", + "start_index_m3": 12525.0, + "end_index_m3": 12539.0, + "volume_m3": 14.3, + "energy_kwh": 158.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "27/12/2020", + "start_index_m3": 12514.0, + "end_index_m3": 12525.0, + "volume_m3": 10.5, + "energy_kwh": 116.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "26/12/2020", + "start_index_m3": 12495.0, + "end_index_m3": 12514.0, + "volume_m3": 19.3, + "energy_kwh": 213.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "25/12/2020", + "start_index_m3": 12482.0, + "end_index_m3": 12495.0, + "volume_m3": 13.1, + "energy_kwh": 145.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "24/12/2020", + "start_index_m3": 12472.0, + "end_index_m3": 12482.0, + "volume_m3": 9.3, + "energy_kwh": 103.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "23/12/2020", + "start_index_m3": 12467.0, + "end_index_m3": 12472.0, + "volume_m3": 5.6, + "energy_kwh": 62.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 11.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "22/12/2020", + "start_index_m3": 12462.0, + "end_index_m3": 12467.0, + "volume_m3": 5.0, + "energy_kwh": 55.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "21/12/2020", + "start_index_m3": 12456.0, + "end_index_m3": 12462.0, + "volume_m3": 6.3, + "energy_kwh": 69.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "20/12/2020", + "start_index_m3": 12450.0, + "end_index_m3": 12456.0, + "volume_m3": 5.7, + "energy_kwh": 63.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "19/12/2020", + "start_index_m3": 12443.0, + "end_index_m3": 12450.0, + "volume_m3": 6.6, + "energy_kwh": 73.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "18/12/2020", + "start_index_m3": 12434.0, + "end_index_m3": 12443.0, + "volume_m3": 9.3, + "energy_kwh": 103.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "17/12/2020", + "start_index_m3": 12425.0, + "end_index_m3": 12434.0, + "volume_m3": 9.3, + "energy_kwh": 103.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "16/12/2020", + "start_index_m3": 12414.0, + "end_index_m3": 12425.0, + "volume_m3": 10.2, + "energy_kwh": 113.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "15/12/2020", + "start_index_m3": 12408.0, + "end_index_m3": 12414.0, + "volume_m3": 6.8, + "energy_kwh": 75.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "14/12/2020", + "start_index_m3": 12401.0, + "end_index_m3": 12408.0, + "volume_m3": 7.0, + "energy_kwh": 77.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "13/12/2020", + "start_index_m3": 12387.0, + "end_index_m3": 12401.0, + "volume_m3": 13.5, + "energy_kwh": 149.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "12/12/2020", + "start_index_m3": 12378.0, + "end_index_m3": 12387.0, + "volume_m3": 8.7, + "energy_kwh": 96.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "11/12/2020", + "start_index_m3": 12369.0, + "end_index_m3": 12378.0, + "volume_m3": 9.4, + "energy_kwh": 104.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "10/12/2020", + "start_index_m3": 12356.0, + "end_index_m3": 12369.0, + "volume_m3": 12.6, + "energy_kwh": 139.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "09/12/2020", + "start_index_m3": 12342.0, + "end_index_m3": 12356.0, + "volume_m3": 14.6, + "energy_kwh": 161.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "08/12/2020", + "start_index_m3": 12327.0, + "end_index_m3": 12342.0, + "volume_m3": 15.2, + "energy_kwh": 168.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "07/12/2020", + "start_index_m3": 12312.0, + "end_index_m3": 12327.0, + "volume_m3": 14.7, + "energy_kwh": 162.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "06/12/2020", + "start_index_m3": 12297.0, + "end_index_m3": 12312.0, + "volume_m3": 14.6, + "energy_kwh": 161.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "05/12/2020", + "start_index_m3": 12285.0, + "end_index_m3": 12297.0, + "volume_m3": 12.4, + "energy_kwh": 137.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "04/12/2020", + "start_index_m3": 12271.0, + "end_index_m3": 12285.0, + "volume_m3": 13.8, + "energy_kwh": 152.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "03/12/2020", + "start_index_m3": 12259.0, + "end_index_m3": 12271.0, + "volume_m3": 11.8, + "energy_kwh": 130.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "02/12/2020", + "start_index_m3": 12248.0, + "end_index_m3": 12259.0, + "volume_m3": 10.9, + "energy_kwh": 120.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "01/12/2020", + "start_index_m3": 12238.0, + "end_index_m3": 12248.0, + "volume_m3": 10.1, + "energy_kwh": 113.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "30/11/2020", + "start_index_m3": 12225.0, + "end_index_m3": 12238.0, + "volume_m3": 13.3, + "energy_kwh": 149.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "29/11/2020", + "start_index_m3": 12210.0, + "end_index_m3": 12225.0, + "volume_m3": 15.0, + "energy_kwh": 168.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "28/11/2020", + "start_index_m3": 12201.0, + "end_index_m3": 12210.0, + "volume_m3": 9.2, + "energy_kwh": 103.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "27/11/2020", + "start_index_m3": 12192.0, + "end_index_m3": 12201.0, + "volume_m3": 9.3, + "energy_kwh": 104.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "26/11/2020", + "start_index_m3": 12182.0, + "end_index_m3": 12192.0, + "volume_m3": 9.9, + "energy_kwh": 111.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "25/11/2020", + "start_index_m3": 12175.0, + "end_index_m3": 12182.0, + "volume_m3": 6.8, + "energy_kwh": 76.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "24/11/2020", + "start_index_m3": 12163.0, + "end_index_m3": 12175.0, + "volume_m3": 11.8, + "energy_kwh": 132.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "23/11/2020", + "start_index_m3": 12155.0, + "end_index_m3": 12163.0, + "volume_m3": 8.3, + "energy_kwh": 93.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "22/11/2020", + "start_index_m3": 12143.0, + "end_index_m3": 12155.0, + "volume_m3": 11.4, + "energy_kwh": 128.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "21/11/2020", + "start_index_m3": 12132.0, + "end_index_m3": 12143.0, + "volume_m3": 10.9, + "energy_kwh": 122.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "20/11/2020", + "start_index_m3": 12122.0, + "end_index_m3": 12132.0, + "volume_m3": 10.8, + "energy_kwh": 121.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "19/11/2020", + "start_index_m3": 12115.0, + "end_index_m3": 12122.0, + "volume_m3": 7.0, + "energy_kwh": 78.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "18/11/2020", + "start_index_m3": 12108.0, + "end_index_m3": 12115.0, + "volume_m3": 6.2, + "energy_kwh": 69.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "17/11/2020", + "start_index_m3": 12100.0, + "end_index_m3": 12108.0, + "volume_m3": 8.2, + "energy_kwh": 92.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 11.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "16/11/2020", + "start_index_m3": 12092.0, + "end_index_m3": 12100.0, + "volume_m3": 7.8, + "energy_kwh": 87.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 11.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "15/11/2020", + "start_index_m3": 12088.0, + "end_index_m3": 12092.0, + "volume_m3": 4.6, + "energy_kwh": 51.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 13.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "14/11/2020", + "start_index_m3": 12083.0, + "end_index_m3": 12088.0, + "volume_m3": 5.1, + "energy_kwh": 57.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 13.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "13/11/2020", + "start_index_m3": 12077.0, + "end_index_m3": 12083.0, + "volume_m3": 5.9, + "energy_kwh": 66.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 13.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "12/11/2020", + "start_index_m3": 12070.0, + "end_index_m3": 12077.0, + "volume_m3": 7.1, + "energy_kwh": 79.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 11.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "11/11/2020", + "start_index_m3": 12063.0, + "end_index_m3": 12070.0, + "volume_m3": 6.8, + "energy_kwh": 76.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "10/11/2020", + "start_index_m3": 12057.0, + "end_index_m3": 12063.0, + "volume_m3": 6.0, + "energy_kwh": 67.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "09/11/2020", + "start_index_m3": 12052.0, + "end_index_m3": 12057.0, + "volume_m3": 4.9, + "energy_kwh": 55.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "08/11/2020", + "start_index_m3": 12047.0, + "end_index_m3": 12052.0, + "volume_m3": 4.7, + "energy_kwh": 52.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "07/11/2020", + "start_index_m3": 12041.0, + "end_index_m3": 12047.0, + "volume_m3": 6.2, + "energy_kwh": 69.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "06/11/2020", + "start_index_m3": 12032.0, + "end_index_m3": 12041.0, + "volume_m3": 9.6, + "energy_kwh": 107.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "05/11/2020", + "start_index_m3": 12022.0, + "end_index_m3": 12032.0, + "volume_m3": 9.3, + "energy_kwh": 104.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "04/11/2020", + "start_index_m3": 12012.0, + "end_index_m3": 12022.0, + "volume_m3": 10.5, + "energy_kwh": 117.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "03/11/2020", + "start_index_m3": 12003.0, + "end_index_m3": 12012.0, + "volume_m3": 8.6, + "energy_kwh": 96.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "02/11/2020", + "start_index_m3": 12000.0, + "end_index_m3": 12003.0, + "volume_m3": 3.0, + "energy_kwh": 33.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "01/11/2020", + "start_index_m3": 11999.0, + "end_index_m3": 12000.0, + "volume_m3": 1.3, + "energy_kwh": 14.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 17.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "31/10/2020", + "start_index_m3": 11996.0, + "end_index_m3": 11999.0, + "volume_m3": 2.8, + "energy_kwh": 31.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "30/10/2020", + "start_index_m3": 11992.0, + "end_index_m3": 11996.0, + "volume_m3": 4.2, + "energy_kwh": 46.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "29/10/2020", + "start_index_m3": 11987.0, + "end_index_m3": 11992.0, + "volume_m3": 4.9, + "energy_kwh": 54.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "28/10/2020", + "start_index_m3": 11981.0, + "end_index_m3": 11987.0, + "volume_m3": 5.7, + "energy_kwh": 63.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "27/10/2020", + "start_index_m3": 11974.0, + "end_index_m3": 11981.0, + "volume_m3": 6.8, + "energy_kwh": 75.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 11.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "26/10/2020", + "start_index_m3": 11967.0, + "end_index_m3": 11974.0, + "volume_m3": 7.8, + "energy_kwh": 86.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "25/10/2020", + "start_index_m3": 11960.0, + "end_index_m3": 11967.0, + "volume_m3": 7.1, + "energy_kwh": 79.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "24/10/2020", + "start_index_m3": 11958.0, + "end_index_m3": 11960.0, + "volume_m3": 2.0, + "energy_kwh": 22.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "23/10/2020", + "start_index_m3": 11956.0, + "end_index_m3": 11958.0, + "volume_m3": 1.7, + "energy_kwh": 18.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 15.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + } +] \ No newline at end of file diff --git a/tests/resources/low_daily_data.json b/tests/resources/low_daily_data.json new file mode 100644 index 0000000..a7054a8 --- /dev/null +++ b/tests/resources/low_daily_data.json @@ -0,0 +1,1960 @@ +[ + { + "time_period": "18/04/2021", + "start_index_m3": 13702.0, + "end_index_m3": 13702.0, + "volume_m3": 0.0, + "energy_kwh": 1.1, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "17/04/2021", + "start_index_m3": 13702.0, + "end_index_m3": 13702.0, + "volume_m3": 7.7, + "energy_kwh": 1.2, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "16/04/2021", + "start_index_m3": 13702.0, + "end_index_m3": 13702.0, + "volume_m3": 9.9, + "energy_kwh": 0.7, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "15/04/2021", + "start_index_m3": 13701.0, + "end_index_m3": 13702.0, + "volume_m3": 7.4, + "energy_kwh": 83.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "14/04/2021", + "start_index_m3": 13670.0, + "end_index_m3": 13677.0, + "volume_m3": 7.5, + "energy_kwh": 84.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "13/04/2021", + "start_index_m3": 13663.0, + "end_index_m3": 13670.0, + "volume_m3": 6.8, + "energy_kwh": 76.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "12/04/2021", + "start_index_m3": 13651.0, + "end_index_m3": 13663.0, + "volume_m3": 11.6, + "energy_kwh": 130.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "11/04/2021", + "start_index_m3": 13642.0, + "end_index_m3": 13651.0, + "volume_m3": 8.9, + "energy_kwh": 100.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "10/04/2021", + "start_index_m3": 13639.0, + "end_index_m3": 13642.0, + "volume_m3": 3.7, + "energy_kwh": 41.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "09/04/2021", + "start_index_m3": 13634.0, + "end_index_m3": 13639.0, + "volume_m3": 4.7, + "energy_kwh": 52.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "08/04/2021", + "start_index_m3": 13628.0, + "end_index_m3": 13634.0, + "volume_m3": 6.5, + "energy_kwh": 73.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "07/04/2021", + "start_index_m3": 13618.0, + "end_index_m3": 13628.0, + "volume_m3": 9.6, + "energy_kwh": 108.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "06/04/2021", + "start_index_m3": 13605.0, + "end_index_m3": 13618.0, + "volume_m3": 13.2, + "energy_kwh": 148.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "05/04/2021", + "start_index_m3": 13592.0, + "end_index_m3": 13605.0, + "volume_m3": 12.3, + "energy_kwh": 138.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "04/04/2021", + "start_index_m3": 13584.0, + "end_index_m3": 13592.0, + "volume_m3": 8.6, + "energy_kwh": 96.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "03/04/2021", + "start_index_m3": 13582.0, + "end_index_m3": 13584.0, + "volume_m3": 2.1, + "energy_kwh": 23.0, + "converter_factor_kwh/m3": 11.268, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "02/04/2021", + "start_index_m3": 13580.0, + "end_index_m3": 13582.0, + "volume_m3": 2.1, + "energy_kwh": 23.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "01/04/2021", + "start_index_m3": 13578.0, + "end_index_m3": 13580.0, + "volume_m3": 1.9, + "energy_kwh": 21.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 17.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "31/03/2021", + "start_index_m3": 13575.0, + "end_index_m3": 13578.0, + "volume_m3": 2.3, + "energy_kwh": 25.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 18.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "30/03/2021", + "start_index_m3": 13574.0, + "end_index_m3": 13575.0, + "volume_m3": 1.9, + "energy_kwh": 21.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 17.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "29/03/2021", + "start_index_m3": 13571.0, + "end_index_m3": 13574.0, + "volume_m3": 2.5, + "energy_kwh": 28.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 15.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "28/03/2021", + "start_index_m3": 13566.0, + "end_index_m3": 13571.0, + "volume_m3": 4.9, + "energy_kwh": 55.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "27/03/2021", + "start_index_m3": 13559.0, + "end_index_m3": 13566.0, + "volume_m3": 7.5, + "energy_kwh": 84.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "26/03/2021", + "start_index_m3": 13549.0, + "end_index_m3": 13559.0, + "volume_m3": 9.3, + "energy_kwh": 104.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "25/03/2021", + "start_index_m3": 13544.0, + "end_index_m3": 13549.0, + "volume_m3": 5.3, + "energy_kwh": 59.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "24/03/2021", + "start_index_m3": 13540.0, + "end_index_m3": 13544.0, + "volume_m3": 4.3, + "energy_kwh": 48.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "23/03/2021", + "start_index_m3": 13532.0, + "end_index_m3": 13540.0, + "volume_m3": 8.1, + "energy_kwh": 91.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "22/03/2021", + "start_index_m3": 13519.0, + "end_index_m3": 13532.0, + "volume_m3": 12.8, + "energy_kwh": 144.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "21/03/2021", + "start_index_m3": 13509.0, + "end_index_m3": 13519.0, + "volume_m3": 10.2, + "energy_kwh": 114.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "20/03/2021", + "start_index_m3": 13497.0, + "end_index_m3": 13509.0, + "volume_m3": 11.7, + "energy_kwh": 131.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "19/03/2021", + "start_index_m3": 13486.0, + "end_index_m3": 13497.0, + "volume_m3": 10.8, + "energy_kwh": 121.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "18/03/2021", + "start_index_m3": 13475.0, + "end_index_m3": 13486.0, + "volume_m3": 11.3, + "energy_kwh": 127.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "17/03/2021", + "start_index_m3": 13463.0, + "end_index_m3": 13475.0, + "volume_m3": 11.8, + "energy_kwh": 132.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "16/03/2021", + "start_index_m3": 13452.0, + "end_index_m3": 13463.0, + "volume_m3": 10.8, + "energy_kwh": 121.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "15/03/2021", + "start_index_m3": 13441.0, + "end_index_m3": 13452.0, + "volume_m3": 11.3, + "energy_kwh": 127.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "14/03/2021", + "start_index_m3": 13434.0, + "end_index_m3": 13441.0, + "volume_m3": 6.8, + "energy_kwh": 76.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "13/03/2021", + "start_index_m3": 13425.0, + "end_index_m3": 13434.0, + "volume_m3": 9.5, + "energy_kwh": 106.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "12/03/2021", + "start_index_m3": 13415.0, + "end_index_m3": 13425.0, + "volume_m3": 9.6, + "energy_kwh": 108.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "11/03/2021", + "start_index_m3": 13409.0, + "end_index_m3": 13415.0, + "volume_m3": 6.0, + "energy_kwh": 67.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "10/03/2021", + "start_index_m3": 13399.0, + "end_index_m3": 13409.0, + "volume_m3": 9.8, + "energy_kwh": 110.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "09/03/2021", + "start_index_m3": 13390.0, + "end_index_m3": 13399.0, + "volume_m3": 8.9, + "energy_kwh": 100.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "08/03/2021", + "start_index_m3": 13380.0, + "end_index_m3": 13390.0, + "volume_m3": 10.6, + "energy_kwh": 119.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "07/03/2021", + "start_index_m3": 13368.0, + "end_index_m3": 13380.0, + "volume_m3": 11.9, + "energy_kwh": 133.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "06/03/2021", + "start_index_m3": 13356.0, + "end_index_m3": 13368.0, + "volume_m3": 12.3, + "energy_kwh": 138.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "05/03/2021", + "start_index_m3": 13343.0, + "end_index_m3": 13356.0, + "volume_m3": 12.6, + "energy_kwh": 141.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "04/03/2021", + "start_index_m3": 13338.0, + "end_index_m3": 13343.0, + "volume_m3": 5.4, + "energy_kwh": 60.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "03/03/2021", + "start_index_m3": 13333.0, + "end_index_m3": 13338.0, + "volume_m3": 4.9, + "energy_kwh": 55.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 11.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "02/03/2021", + "start_index_m3": 13325.0, + "end_index_m3": 13333.0, + "volume_m3": 7.4, + "energy_kwh": 83.0, + "converter_factor_kwh/m3": 11.253, + "temperature_degC": 11.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "01/03/2021", + "start_index_m3": 13317.0, + "end_index_m3": 13325.0, + "volume_m3": 8.6, + "energy_kwh": 96.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "28/02/2021", + "start_index_m3": 13306.0, + "end_index_m3": 13317.0, + "volume_m3": 11.1, + "energy_kwh": 124.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "27/02/2021", + "start_index_m3": 13296.0, + "end_index_m3": 13306.0, + "volume_m3": 9.2, + "energy_kwh": 102.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "26/02/2021", + "start_index_m3": 13291.0, + "end_index_m3": 13296.0, + "volume_m3": 5.0, + "energy_kwh": 55.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "25/02/2021", + "start_index_m3": 13285.0, + "end_index_m3": 13291.0, + "volume_m3": 6.4, + "energy_kwh": 71.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 13.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "24/02/2021", + "start_index_m3": 13281.0, + "end_index_m3": 13285.0, + "volume_m3": 3.7, + "energy_kwh": 41.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "23/02/2021", + "start_index_m3": 13278.0, + "end_index_m3": 13281.0, + "volume_m3": 3.4, + "energy_kwh": 38.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "22/02/2021", + "start_index_m3": 13269.0, + "end_index_m3": 13278.0, + "volume_m3": 8.5, + "energy_kwh": 95.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 13.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "21/02/2021", + "start_index_m3": 13265.0, + "end_index_m3": 13269.0, + "volume_m3": 4.4, + "energy_kwh": 49.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 13.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "20/02/2021", + "start_index_m3": 13259.0, + "end_index_m3": 13265.0, + "volume_m3": 6.2, + "energy_kwh": 69.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 13.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "19/02/2021", + "start_index_m3": 13250.0, + "end_index_m3": 13259.0, + "volume_m3": 9.2, + "energy_kwh": 102.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "18/02/2021", + "start_index_m3": 13240.0, + "end_index_m3": 13250.0, + "volume_m3": 9.1, + "energy_kwh": 101.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "17/02/2021", + "start_index_m3": 13231.0, + "end_index_m3": 13240.0, + "volume_m3": 9.4, + "energy_kwh": 105.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "16/02/2021", + "start_index_m3": 13222.0, + "end_index_m3": 13231.0, + "volume_m3": 8.8, + "energy_kwh": 98.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "15/02/2021", + "start_index_m3": 13211.0, + "end_index_m3": 13222.0, + "volume_m3": 10.9, + "energy_kwh": 121.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "14/02/2021", + "start_index_m3": 13190.0, + "end_index_m3": 13211.0, + "volume_m3": 21.2, + "energy_kwh": 236.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 0.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "13/02/2021", + "start_index_m3": 13169.0, + "end_index_m3": 13190.0, + "volume_m3": 20.7, + "energy_kwh": 231.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": -2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "12/02/2021", + "start_index_m3": 13148.0, + "end_index_m3": 13169.0, + "volume_m3": 21.1, + "energy_kwh": 235.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": -2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "11/02/2021", + "start_index_m3": 13129.0, + "end_index_m3": 13148.0, + "volume_m3": 19.5, + "energy_kwh": 217.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": -2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "10/02/2021", + "start_index_m3": 13106.0, + "end_index_m3": 13129.0, + "volume_m3": 22.4, + "energy_kwh": 250.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": -3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "09/02/2021", + "start_index_m3": 13086.0, + "end_index_m3": 13106.0, + "volume_m3": 20.2, + "energy_kwh": 225.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "08/02/2021", + "start_index_m3": 13068.0, + "end_index_m3": 13086.0, + "volume_m3": 18.4, + "energy_kwh": 205.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "07/02/2021", + "start_index_m3": 13052.0, + "end_index_m3": 13068.0, + "volume_m3": 15.8, + "energy_kwh": 176.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "06/02/2021", + "start_index_m3": 13042.0, + "end_index_m3": 13052.0, + "volume_m3": 9.8, + "energy_kwh": 109.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "05/02/2021", + "start_index_m3": 13033.0, + "end_index_m3": 13042.0, + "volume_m3": 9.2, + "energy_kwh": 102.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "04/02/2021", + "start_index_m3": 13023.0, + "end_index_m3": 13033.0, + "volume_m3": 10.3, + "energy_kwh": 115.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "03/02/2021", + "start_index_m3": 13016.0, + "end_index_m3": 13023.0, + "volume_m3": 6.6, + "energy_kwh": 73.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "02/02/2021", + "start_index_m3": 13009.0, + "end_index_m3": 13016.0, + "volume_m3": 6.9, + "energy_kwh": 77.0, + "converter_factor_kwh/m3": 11.177, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "01/02/2021", + "start_index_m3": 12999.0, + "end_index_m3": 13009.0, + "volume_m3": 10.2, + "energy_kwh": 112.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "31/01/2021", + "start_index_m3": 12989.0, + "end_index_m3": 12999.0, + "volume_m3": 9.6, + "energy_kwh": 105.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "30/01/2021", + "start_index_m3": 12981.0, + "end_index_m3": 12989.0, + "volume_m3": 8.1, + "energy_kwh": 88.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "29/01/2021", + "start_index_m3": 12973.0, + "end_index_m3": 12981.0, + "volume_m3": 8.0, + "energy_kwh": 87.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "28/01/2021", + "start_index_m3": 12967.0, + "end_index_m3": 12973.0, + "volume_m3": 6.7, + "energy_kwh": 73.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "27/01/2021", + "start_index_m3": 12954.0, + "end_index_m3": 12967.0, + "volume_m3": 12.6, + "energy_kwh": 138.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "26/01/2021", + "start_index_m3": 12937.0, + "end_index_m3": 12954.0, + "volume_m3": 16.9, + "energy_kwh": 185.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "25/01/2021", + "start_index_m3": 12920.0, + "end_index_m3": 12937.0, + "volume_m3": 17.5, + "energy_kwh": 192.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "24/01/2021", + "start_index_m3": 12903.0, + "end_index_m3": 12920.0, + "volume_m3": 16.9, + "energy_kwh": 185.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "23/01/2021", + "start_index_m3": 12886.0, + "end_index_m3": 12903.0, + "volume_m3": 16.7, + "energy_kwh": 183.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "22/01/2021", + "start_index_m3": 12873.0, + "end_index_m3": 12886.0, + "volume_m3": 12.6, + "energy_kwh": 138.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "21/01/2021", + "start_index_m3": 12864.0, + "end_index_m3": 12873.0, + "volume_m3": 9.9, + "energy_kwh": 108.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "20/01/2021", + "start_index_m3": 12854.0, + "end_index_m3": 12864.0, + "volume_m3": 9.4, + "energy_kwh": 103.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "19/01/2021", + "start_index_m3": 12842.0, + "end_index_m3": 12854.0, + "volume_m3": 12.4, + "energy_kwh": 136.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "18/01/2021", + "start_index_m3": 12829.0, + "end_index_m3": 12842.0, + "volume_m3": 13.2, + "energy_kwh": 144.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "17/01/2021", + "start_index_m3": 12817.0, + "end_index_m3": 12829.0, + "volume_m3": 12.0, + "energy_kwh": 131.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "16/01/2021", + "start_index_m3": 12800.0, + "end_index_m3": 12817.0, + "volume_m3": 17.0, + "energy_kwh": 186.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "15/01/2021", + "start_index_m3": 12782.0, + "end_index_m3": 12800.0, + "volume_m3": 18.0, + "energy_kwh": 197.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "14/01/2021", + "start_index_m3": 12773.0, + "end_index_m3": 12782.0, + "volume_m3": 8.6, + "energy_kwh": 94.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "13/01/2021", + "start_index_m3": 12763.0, + "end_index_m3": 12773.0, + "volume_m3": 9.9, + "energy_kwh": 108.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "12/01/2021", + "start_index_m3": 12753.0, + "end_index_m3": 12763.0, + "volume_m3": 10.0, + "energy_kwh": 109.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "11/01/2021", + "start_index_m3": 12736.0, + "end_index_m3": 12753.0, + "volume_m3": 17.1, + "energy_kwh": 187.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "10/01/2021", + "start_index_m3": 12719.0, + "end_index_m3": 12736.0, + "volume_m3": 16.5, + "energy_kwh": 181.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "09/01/2021", + "start_index_m3": 12703.0, + "end_index_m3": 12719.0, + "volume_m3": 16.1, + "energy_kwh": 176.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 1.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "08/01/2021", + "start_index_m3": 12690.0, + "end_index_m3": 12703.0, + "volume_m3": 13.6, + "energy_kwh": 149.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "07/01/2021", + "start_index_m3": 12674.0, + "end_index_m3": 12690.0, + "volume_m3": 16.1, + "energy_kwh": 176.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "06/01/2021", + "start_index_m3": 12660.0, + "end_index_m3": 12674.0, + "volume_m3": 13.6, + "energy_kwh": 149.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "05/01/2021", + "start_index_m3": 12642.0, + "end_index_m3": 12660.0, + "volume_m3": 17.8, + "energy_kwh": 195.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "04/01/2021", + "start_index_m3": 12624.0, + "end_index_m3": 12642.0, + "volume_m3": 17.8, + "energy_kwh": 195.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "03/01/2021", + "start_index_m3": 12614.0, + "end_index_m3": 12624.0, + "volume_m3": 10.2, + "energy_kwh": 112.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "02/01/2021", + "start_index_m3": 12600.0, + "end_index_m3": 12614.0, + "volume_m3": 14.1, + "energy_kwh": 154.0, + "converter_factor_kwh/m3": 10.98, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "01/01/2021", + "start_index_m3": 12582.0, + "end_index_m3": 12600.0, + "volume_m3": 18.3, + "energy_kwh": 202.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 2.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "31/12/2020", + "start_index_m3": 12566.0, + "end_index_m3": 12582.0, + "volume_m3": 15.5, + "energy_kwh": 171.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "30/12/2020", + "start_index_m3": 12553.0, + "end_index_m3": 12566.0, + "volume_m3": 13.3, + "energy_kwh": 147.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "29/12/2020", + "start_index_m3": 12539.0, + "end_index_m3": 12553.0, + "volume_m3": 14.1, + "energy_kwh": 156.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "28/12/2020", + "start_index_m3": 12525.0, + "end_index_m3": 12539.0, + "volume_m3": 14.3, + "energy_kwh": 158.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "27/12/2020", + "start_index_m3": 12514.0, + "end_index_m3": 12525.0, + "volume_m3": 10.5, + "energy_kwh": 116.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "26/12/2020", + "start_index_m3": 12495.0, + "end_index_m3": 12514.0, + "volume_m3": 19.3, + "energy_kwh": 213.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "25/12/2020", + "start_index_m3": 12482.0, + "end_index_m3": 12495.0, + "volume_m3": 13.1, + "energy_kwh": 145.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "24/12/2020", + "start_index_m3": 12472.0, + "end_index_m3": 12482.0, + "volume_m3": 9.3, + "energy_kwh": 103.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "23/12/2020", + "start_index_m3": 12467.0, + "end_index_m3": 12472.0, + "volume_m3": 5.6, + "energy_kwh": 62.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 11.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "22/12/2020", + "start_index_m3": 12462.0, + "end_index_m3": 12467.0, + "volume_m3": 5.0, + "energy_kwh": 55.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "21/12/2020", + "start_index_m3": 12456.0, + "end_index_m3": 12462.0, + "volume_m3": 6.3, + "energy_kwh": 69.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "20/12/2020", + "start_index_m3": 12450.0, + "end_index_m3": 12456.0, + "volume_m3": 5.7, + "energy_kwh": 63.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "19/12/2020", + "start_index_m3": 12443.0, + "end_index_m3": 12450.0, + "volume_m3": 6.6, + "energy_kwh": 73.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 10.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "18/12/2020", + "start_index_m3": 12434.0, + "end_index_m3": 12443.0, + "volume_m3": 9.3, + "energy_kwh": 103.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "17/12/2020", + "start_index_m3": 12425.0, + "end_index_m3": 12434.0, + "volume_m3": 9.3, + "energy_kwh": 103.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "16/12/2020", + "start_index_m3": 12414.0, + "end_index_m3": 12425.0, + "volume_m3": 10.2, + "energy_kwh": 113.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "15/12/2020", + "start_index_m3": 12408.0, + "end_index_m3": 12414.0, + "volume_m3": 6.8, + "energy_kwh": 75.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "14/12/2020", + "start_index_m3": 12401.0, + "end_index_m3": 12408.0, + "volume_m3": 7.0, + "energy_kwh": 77.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "13/12/2020", + "start_index_m3": 12387.0, + "end_index_m3": 12401.0, + "volume_m3": 13.5, + "energy_kwh": 149.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "12/12/2020", + "start_index_m3": 12378.0, + "end_index_m3": 12387.0, + "volume_m3": 8.7, + "energy_kwh": 96.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "11/12/2020", + "start_index_m3": 12369.0, + "end_index_m3": 12378.0, + "volume_m3": 9.4, + "energy_kwh": 104.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "10/12/2020", + "start_index_m3": 12356.0, + "end_index_m3": 12369.0, + "volume_m3": 12.6, + "energy_kwh": 139.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 6.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "09/12/2020", + "start_index_m3": 12342.0, + "end_index_m3": 12356.0, + "volume_m3": 14.6, + "energy_kwh": 161.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "08/12/2020", + "start_index_m3": 12327.0, + "end_index_m3": 12342.0, + "volume_m3": 15.2, + "energy_kwh": 168.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "07/12/2020", + "start_index_m3": 12312.0, + "end_index_m3": 12327.0, + "volume_m3": 14.7, + "energy_kwh": 162.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 4.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "06/12/2020", + "start_index_m3": 12297.0, + "end_index_m3": 12312.0, + "volume_m3": 14.6, + "energy_kwh": 161.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "05/12/2020", + "start_index_m3": 12285.0, + "end_index_m3": 12297.0, + "volume_m3": 12.4, + "energy_kwh": 137.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "04/12/2020", + "start_index_m3": 12271.0, + "end_index_m3": 12285.0, + "volume_m3": 13.8, + "energy_kwh": 152.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "03/12/2020", + "start_index_m3": 12259.0, + "end_index_m3": 12271.0, + "volume_m3": 11.8, + "energy_kwh": 130.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "02/12/2020", + "start_index_m3": 12248.0, + "end_index_m3": 12259.0, + "volume_m3": 10.9, + "energy_kwh": 120.0, + "converter_factor_kwh/m3": 11.087, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "01/12/2020", + "start_index_m3": 12238.0, + "end_index_m3": 12248.0, + "volume_m3": 10.1, + "energy_kwh": 113.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "30/11/2020", + "start_index_m3": 12225.0, + "end_index_m3": 12238.0, + "volume_m3": 13.3, + "energy_kwh": 149.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 5.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "29/11/2020", + "start_index_m3": 12210.0, + "end_index_m3": 12225.0, + "volume_m3": 15.0, + "energy_kwh": 168.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 3.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "28/11/2020", + "start_index_m3": 12201.0, + "end_index_m3": 12210.0, + "volume_m3": 9.2, + "energy_kwh": 103.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "27/11/2020", + "start_index_m3": 12192.0, + "end_index_m3": 12201.0, + "volume_m3": 9.3, + "energy_kwh": 104.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "26/11/2020", + "start_index_m3": 12182.0, + "end_index_m3": 12192.0, + "volume_m3": 9.9, + "energy_kwh": 111.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "25/11/2020", + "start_index_m3": 12175.0, + "end_index_m3": 12182.0, + "volume_m3": 6.8, + "energy_kwh": 76.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "24/11/2020", + "start_index_m3": 12163.0, + "end_index_m3": 12175.0, + "volume_m3": 11.8, + "energy_kwh": 132.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "23/11/2020", + "start_index_m3": 12155.0, + "end_index_m3": 12163.0, + "volume_m3": 8.3, + "energy_kwh": 93.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "22/11/2020", + "start_index_m3": 12143.0, + "end_index_m3": 12155.0, + "volume_m3": 11.4, + "energy_kwh": 128.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "21/11/2020", + "start_index_m3": 12132.0, + "end_index_m3": 12143.0, + "volume_m3": 10.9, + "energy_kwh": 122.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "20/11/2020", + "start_index_m3": 12122.0, + "end_index_m3": 12132.0, + "volume_m3": 10.8, + "energy_kwh": 121.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 7.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "19/11/2020", + "start_index_m3": 12115.0, + "end_index_m3": 12122.0, + "volume_m3": 7.0, + "energy_kwh": 78.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "18/11/2020", + "start_index_m3": 12108.0, + "end_index_m3": 12115.0, + "volume_m3": 6.2, + "energy_kwh": 69.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "17/11/2020", + "start_index_m3": 12100.0, + "end_index_m3": 12108.0, + "volume_m3": 8.2, + "energy_kwh": 92.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 11.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "16/11/2020", + "start_index_m3": 12092.0, + "end_index_m3": 12100.0, + "volume_m3": 7.8, + "energy_kwh": 87.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 11.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "15/11/2020", + "start_index_m3": 12088.0, + "end_index_m3": 12092.0, + "volume_m3": 4.6, + "energy_kwh": 51.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 13.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "14/11/2020", + "start_index_m3": 12083.0, + "end_index_m3": 12088.0, + "volume_m3": 5.1, + "energy_kwh": 57.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 13.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "13/11/2020", + "start_index_m3": 12077.0, + "end_index_m3": 12083.0, + "volume_m3": 5.9, + "energy_kwh": 66.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 13.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "12/11/2020", + "start_index_m3": 12070.0, + "end_index_m3": 12077.0, + "volume_m3": 7.1, + "energy_kwh": 79.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 11.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "11/11/2020", + "start_index_m3": 12063.0, + "end_index_m3": 12070.0, + "volume_m3": 6.8, + "energy_kwh": 76.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "10/11/2020", + "start_index_m3": 12057.0, + "end_index_m3": 12063.0, + "volume_m3": 6.0, + "energy_kwh": 67.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "09/11/2020", + "start_index_m3": 12052.0, + "end_index_m3": 12057.0, + "volume_m3": 4.9, + "energy_kwh": 55.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "08/11/2020", + "start_index_m3": 12047.0, + "end_index_m3": 12052.0, + "volume_m3": 4.7, + "energy_kwh": 52.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "07/11/2020", + "start_index_m3": 12041.0, + "end_index_m3": 12047.0, + "volume_m3": 6.2, + "energy_kwh": 69.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "06/11/2020", + "start_index_m3": 12032.0, + "end_index_m3": 12041.0, + "volume_m3": 9.6, + "energy_kwh": 107.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 9.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "05/11/2020", + "start_index_m3": 12022.0, + "end_index_m3": 12032.0, + "volume_m3": 9.3, + "energy_kwh": 104.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "04/11/2020", + "start_index_m3": 12012.0, + "end_index_m3": 12022.0, + "volume_m3": 10.5, + "energy_kwh": 117.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "03/11/2020", + "start_index_m3": 12003.0, + "end_index_m3": 12012.0, + "volume_m3": 8.6, + "energy_kwh": 96.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 8.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "02/11/2020", + "start_index_m3": 12000.0, + "end_index_m3": 12003.0, + "volume_m3": 3.0, + "energy_kwh": 33.0, + "converter_factor_kwh/m3": 11.236, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "01/11/2020", + "start_index_m3": 11999.0, + "end_index_m3": 12000.0, + "volume_m3": 1.3, + "energy_kwh": 14.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 17.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "31/10/2020", + "start_index_m3": 11996.0, + "end_index_m3": 11999.0, + "volume_m3": 2.8, + "energy_kwh": 31.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "30/10/2020", + "start_index_m3": 11992.0, + "end_index_m3": 11996.0, + "volume_m3": 4.2, + "energy_kwh": 46.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "29/10/2020", + "start_index_m3": 11987.0, + "end_index_m3": 11992.0, + "volume_m3": 4.9, + "energy_kwh": 54.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "28/10/2020", + "start_index_m3": 11981.0, + "end_index_m3": 11987.0, + "volume_m3": 5.7, + "energy_kwh": 63.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 12.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "27/10/2020", + "start_index_m3": 11974.0, + "end_index_m3": 11981.0, + "volume_m3": 6.8, + "energy_kwh": 75.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 11.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "26/10/2020", + "start_index_m3": 11967.0, + "end_index_m3": 11974.0, + "volume_m3": 7.8, + "energy_kwh": 86.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "25/10/2020", + "start_index_m3": 11960.0, + "end_index_m3": 11967.0, + "volume_m3": 7.1, + "energy_kwh": 79.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "24/10/2020", + "start_index_m3": 11958.0, + "end_index_m3": 11960.0, + "volume_m3": 2.0, + "energy_kwh": 22.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 14.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + }, + { + "time_period": "23/10/2020", + "start_index_m3": 11956.0, + "end_index_m3": 11958.0, + "volume_m3": 1.7, + "energy_kwh": 18.0, + "converter_factor_kwh/m3": 11.146, + "temperature_degC": 15.0, + "type": "MES", + "timestamp": "2021-04-20T10:21:46.265119" + } +] \ No newline at end of file