mirror of
https://github.com/home-assistant/core.git
synced 2025-07-28 15:47:12 +00:00
Merge pull request #62690 from home-assistant/rc
This commit is contained in:
commit
4f25e98999
@ -432,7 +432,7 @@ homeassistant/components/recollect_waste/* @bachya
|
||||
homeassistant/components/recorder/* @home-assistant/core
|
||||
homeassistant/components/rejseplanen/* @DarkFox
|
||||
homeassistant/components/renault/* @epenet
|
||||
homeassistant/components/repetier/* @MTrab
|
||||
homeassistant/components/repetier/* @MTrab @ShadowBr0ther
|
||||
homeassistant/components/rflink/* @javicalle
|
||||
homeassistant/components/rfxtrx/* @danielhiversen @elupus @RobBie1221
|
||||
homeassistant/components/ridwell/* @bachya
|
||||
|
@ -76,6 +76,8 @@ from .helpers import CastStatusListener, ChromecastInfo, ChromeCastZeroconf
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
APP_IDS_UNRELIABLE_MEDIA_INFO = ("Netflix",)
|
||||
|
||||
CAST_SPLASH = "https://www.home-assistant.io/images/cast/splash.png"
|
||||
|
||||
SUPPORT_CAST = SUPPORT_PLAY_MEDIA | SUPPORT_TURN_OFF
|
||||
@ -564,7 +566,10 @@ class CastDevice(MediaPlayerEntity):
|
||||
if media_status.player_is_idle:
|
||||
return STATE_IDLE
|
||||
if self.app_id is not None and self.app_id != pychromecast.IDLE_APP_ID:
|
||||
if self.app_id in APP_IDS_UNRELIABLE_MEDIA_INFO:
|
||||
# Some apps don't report media status, show the player as playing
|
||||
return STATE_PLAYING
|
||||
return STATE_IDLE
|
||||
if self._chromecast is not None and self._chromecast.is_idle:
|
||||
return STATE_OFF
|
||||
return None
|
||||
|
@ -199,7 +199,7 @@ class DeconzBaseLight(DeconzDevice, LightEntity):
|
||||
"""Turn on light."""
|
||||
data: dict[str, bool | float | int | str | tuple[float, float]] = {"on": True}
|
||||
|
||||
if attr_brightness := kwargs.get(ATTR_BRIGHTNESS):
|
||||
if (attr_brightness := kwargs.get(ATTR_BRIGHTNESS)) is not None:
|
||||
data["brightness"] = attr_brightness
|
||||
|
||||
if attr_color_temp := kwargs.get(ATTR_COLOR_TEMP):
|
||||
@ -215,16 +215,16 @@ class DeconzBaseLight(DeconzDevice, LightEntity):
|
||||
if ATTR_XY_COLOR in kwargs:
|
||||
data["xy"] = kwargs[ATTR_XY_COLOR]
|
||||
|
||||
if attr_transition := kwargs.get(ATTR_TRANSITION):
|
||||
if (attr_transition := kwargs.get(ATTR_TRANSITION)) is not None:
|
||||
data["transition_time"] = int(attr_transition * 10)
|
||||
elif "IKEA" in self._device.manufacturer:
|
||||
data["transition_time"] = 0
|
||||
|
||||
if (alert := FLASH_TO_DECONZ.get(kwargs.get(ATTR_FLASH, ""))) is not None:
|
||||
if (alert := FLASH_TO_DECONZ.get(kwargs.get(ATTR_FLASH))) is not None:
|
||||
data["alert"] = alert
|
||||
del data["on"]
|
||||
|
||||
if (effect := EFFECT_TO_DECONZ.get(kwargs.get(ATTR_EFFECT, ""))) is not None:
|
||||
if (effect := EFFECT_TO_DECONZ.get(kwargs.get(ATTR_EFFECT))) is not None:
|
||||
data["effect"] = effect
|
||||
|
||||
await self._device.set_state(**data)
|
||||
@ -236,11 +236,11 @@ class DeconzBaseLight(DeconzDevice, LightEntity):
|
||||
|
||||
data: dict[str, bool | int | str] = {"on": False}
|
||||
|
||||
if ATTR_TRANSITION in kwargs:
|
||||
if (attr_transition := kwargs.get(ATTR_TRANSITION)) is not None:
|
||||
data["brightness"] = 0
|
||||
data["transition_time"] = int(kwargs[ATTR_TRANSITION] * 10)
|
||||
data["transition_time"] = int(attr_transition * 10)
|
||||
|
||||
if (alert := FLASH_TO_DECONZ.get(kwargs.get(ATTR_FLASH, ""))) is not None:
|
||||
if (alert := FLASH_TO_DECONZ.get(kwargs.get(ATTR_FLASH))) is not None:
|
||||
data["alert"] = alert
|
||||
del data["on"]
|
||||
|
||||
|
@ -2,7 +2,12 @@
|
||||
"domain": "dht",
|
||||
"name": "DHT Sensor",
|
||||
"documentation": "https://www.home-assistant.io/integrations/dht",
|
||||
"requirements": ["adafruit-circuitpython-dht==3.6.0"],
|
||||
"codeowners": ["@thegardenmonkey"],
|
||||
"requirements": [
|
||||
"adafruit-circuitpython-dht==3.7.0",
|
||||
"RPi.GPIO==0.7.1a4"
|
||||
],
|
||||
"codeowners": [
|
||||
"@thegardenmonkey"
|
||||
],
|
||||
"iot_class": "local_polling"
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
"name": "Flux LED/MagicHome",
|
||||
"config_flow": true,
|
||||
"documentation": "https://www.home-assistant.io/integrations/flux_led",
|
||||
"requirements": ["flux_led==0.27.8"],
|
||||
"requirements": ["flux_led==0.27.13"],
|
||||
"quality_scale": "platinum",
|
||||
"codeowners": ["@icemanch"],
|
||||
"iot_class": "local_push",
|
||||
|
@ -3,6 +3,7 @@ import logging
|
||||
|
||||
from fritzconnection.core.exceptions import FritzConnectionException, FritzSecurityError
|
||||
from fritzconnection.core.logger import fritzlogger
|
||||
from requests import exceptions
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import (
|
||||
@ -45,7 +46,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
await fritz_tools.async_start(entry.options)
|
||||
except FritzSecurityError as ex:
|
||||
raise ConfigEntryAuthFailed from ex
|
||||
except FritzConnectionException as ex:
|
||||
except (FritzConnectionException, exceptions.ConnectionError) as ex:
|
||||
raise ConfigEntryNotReady from ex
|
||||
|
||||
hass.data.setdefault(DOMAIN, {})
|
||||
|
@ -117,7 +117,7 @@ class FritzBoxToolsFlowHandler(ConfigFlow, domain=DOMAIN):
|
||||
self._port = ssdp_location.port
|
||||
self._name = (
|
||||
discovery_info.upnp.get(ssdp.ATTR_UPNP_FRIENDLY_NAME)
|
||||
or self.fritz_tools.model
|
||||
or discovery_info.upnp[ssdp.ATTR_UPNP_MODEL_NAME]
|
||||
)
|
||||
self.context[CONF_HOST] = self._host
|
||||
|
||||
|
@ -3,13 +3,12 @@ from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
from collections.abc import Callable
|
||||
from http import HTTPStatus
|
||||
import logging
|
||||
from typing import Any
|
||||
|
||||
from aiohttp import client_exceptions
|
||||
from aiohue import HueBridgeV1, HueBridgeV2, LinkButtonNotPressed, Unauthorized
|
||||
from aiohue.errors import AiohueException
|
||||
from aiohue.errors import AiohueException, BridgeBusy
|
||||
import async_timeout
|
||||
|
||||
from homeassistant import core
|
||||
@ -38,9 +37,6 @@ class HueBridge:
|
||||
self.config_entry = config_entry
|
||||
self.hass = hass
|
||||
self.authorized = False
|
||||
self.parallel_updates_semaphore = asyncio.Semaphore(
|
||||
3 if self.api_version == 1 else 10
|
||||
)
|
||||
# Jobs to be executed when API is reset.
|
||||
self.reset_jobs: list[core.CALLBACK_TYPE] = []
|
||||
self.sensor_manager: SensorManager | None = None
|
||||
@ -83,6 +79,7 @@ class HueBridge:
|
||||
client_exceptions.ClientOSError,
|
||||
client_exceptions.ServerDisconnectedError,
|
||||
client_exceptions.ContentTypeError,
|
||||
BridgeBusy,
|
||||
) as err:
|
||||
raise ConfigEntryNotReady(
|
||||
f"Error connecting to the Hue bridge at {self.host}"
|
||||
@ -115,50 +112,19 @@ class HueBridge:
|
||||
async def async_request_call(
|
||||
self, task: Callable, *args, allowed_errors: list[str] | None = None, **kwargs
|
||||
) -> Any:
|
||||
"""Limit parallel requests to Hue hub.
|
||||
|
||||
The Hue hub can only handle a certain amount of parallel requests, total.
|
||||
Although we limit our parallel requests, we still will run into issues because
|
||||
other products are hitting up Hue.
|
||||
|
||||
ClientOSError means hub closed the socket on us.
|
||||
ContentResponseError means hub raised an error.
|
||||
Since we don't make bad requests, this is on them.
|
||||
"""
|
||||
max_tries = 5
|
||||
async with self.parallel_updates_semaphore:
|
||||
for tries in range(max_tries):
|
||||
"""Send request to the Hue bridge, optionally omitting error(s)."""
|
||||
try:
|
||||
return await task(*args, **kwargs)
|
||||
except AiohueException as err:
|
||||
# The new V2 api is a bit more fanatic with throwing errors
|
||||
# The (new) Hue api can be a bit fanatic with throwing errors
|
||||
# some of which we accept in certain conditions
|
||||
# handle that here. Note that these errors are strings and do not have
|
||||
# an identifier or something.
|
||||
if allowed_errors is not None and str(err) in allowed_errors:
|
||||
# log only
|
||||
self.logger.debug(
|
||||
"Ignored error/warning from Hue API: %s", str(err)
|
||||
)
|
||||
self.logger.debug("Ignored error/warning from Hue API: %s", str(err))
|
||||
return None
|
||||
raise err
|
||||
except (
|
||||
client_exceptions.ClientOSError,
|
||||
client_exceptions.ClientResponseError,
|
||||
client_exceptions.ServerDisconnectedError,
|
||||
) as err:
|
||||
if tries == max_tries:
|
||||
self.logger.error("Request failed %s times, giving up", tries)
|
||||
raise
|
||||
|
||||
# We only retry if it's a server error. So raise on all 4XX errors.
|
||||
if (
|
||||
isinstance(err, client_exceptions.ClientResponseError)
|
||||
and err.status < HTTPStatus.INTERNAL_SERVER_ERROR
|
||||
):
|
||||
raise
|
||||
|
||||
await asyncio.sleep(HUB_BUSY_SLEEP * tries)
|
||||
|
||||
async def async_reset(self) -> bool:
|
||||
"""Reset this bridge to default state.
|
||||
|
@ -3,7 +3,7 @@
|
||||
"name": "Philips Hue",
|
||||
"config_flow": true,
|
||||
"documentation": "https://www.home-assistant.io/integrations/hue",
|
||||
"requirements": ["aiohue==3.0.7"],
|
||||
"requirements": ["aiohue==3.0.10"],
|
||||
"ssdp": [
|
||||
{
|
||||
"manufacturer": "Royal Philips Electronics",
|
||||
|
@ -8,6 +8,7 @@ from aiohue.v2.controllers.events import EventType
|
||||
from aiohue.v2.controllers.scenes import ScenesController
|
||||
from aiohue.v2.models.scene import Scene as HueScene
|
||||
|
||||
from homeassistant.components.light import ATTR_TRANSITION
|
||||
from homeassistant.components.scene import Scene as SceneEntity
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
@ -16,6 +17,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from .bridge import HueBridge
|
||||
from .const import DOMAIN
|
||||
from .v2.entity import HueBaseEntity
|
||||
from .v2.helpers import normalize_hue_transition
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
@ -94,11 +96,9 @@ class HueSceneEntity(HueBaseEntity, SceneEntity):
|
||||
|
||||
async def async_activate(self, **kwargs: Any) -> None:
|
||||
"""Activate Hue scene."""
|
||||
transition = kwargs.get("transition")
|
||||
if transition is not None:
|
||||
# hue transition duration is in milliseconds
|
||||
transition = int(transition * 1000)
|
||||
transition = normalize_hue_transition(kwargs.get(ATTR_TRANSITION))
|
||||
dynamic = kwargs.get("dynamic", self.is_dynamic)
|
||||
|
||||
await self.bridge.async_request_call(
|
||||
self.controller.recall,
|
||||
self.resource.id,
|
||||
|
@ -142,18 +142,21 @@ class HueBaseEntity(Entity):
|
||||
if self._ignore_availability is not None:
|
||||
# already processed
|
||||
return
|
||||
cur_state = self.resource.on.on
|
||||
if self._last_state is None:
|
||||
self._last_state = cur_state
|
||||
return
|
||||
if self.device.product_data.certified:
|
||||
# certified products report their state correctly
|
||||
self._ignore_availability = False
|
||||
# some (3th party) Hue lights report their connection status incorrectly
|
||||
# causing the zigbee availability to report as disconnected while in fact
|
||||
# it can be controlled. Although this is in fact something the device manufacturer
|
||||
# should fix, we work around it here. If the light is reported unavailable
|
||||
# by the zigbee connectivity but the state changesm its considered as a
|
||||
# by the zigbee connectivity but the state changes its considered as a
|
||||
# malfunctioning device and we report it.
|
||||
# while the user should actually fix this issue instead of ignoring it, we
|
||||
# ignore the availability for this light from this point.
|
||||
cur_state = self.resource.on.on
|
||||
if self._last_state is None:
|
||||
self._last_state = cur_state
|
||||
return
|
||||
if zigbee := self.bridge.api.devices.get_zigbee_connectivity(self.device.id):
|
||||
if (
|
||||
self._last_state != cur_state
|
||||
@ -163,7 +166,7 @@ class HueBaseEntity(Entity):
|
||||
# while it was reported as not connected!
|
||||
self.logger.warning(
|
||||
"Light %s changed state while reported as disconnected. "
|
||||
"This is an indicator that routing is not working properly for this device. "
|
||||
"This might be an indicator that routing is not working for this device. "
|
||||
"Home Assistant will ignore availability for this light from now on. "
|
||||
"Device details: %s - %s (%s) fw: %s",
|
||||
self.name,
|
||||
|
@ -29,6 +29,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from ..bridge import HueBridge
|
||||
from ..const import CONF_ALLOW_HUE_GROUPS, DOMAIN
|
||||
from .entity import HueBaseEntity
|
||||
from .helpers import normalize_hue_brightness, normalize_hue_transition
|
||||
|
||||
ALLOWED_ERRORS = [
|
||||
"device (groupedLight) has communication issues, command (on) may not have effect",
|
||||
@ -147,17 +148,11 @@ class GroupedHueLight(HueBaseEntity, LightEntity):
|
||||
|
||||
async def async_turn_on(self, **kwargs: Any) -> None:
|
||||
"""Turn the light on."""
|
||||
transition = kwargs.get(ATTR_TRANSITION)
|
||||
transition = normalize_hue_transition(kwargs.get(ATTR_TRANSITION))
|
||||
xy_color = kwargs.get(ATTR_XY_COLOR)
|
||||
color_temp = kwargs.get(ATTR_COLOR_TEMP)
|
||||
brightness = kwargs.get(ATTR_BRIGHTNESS)
|
||||
brightness = normalize_hue_brightness(kwargs.get(ATTR_BRIGHTNESS))
|
||||
flash = kwargs.get(ATTR_FLASH)
|
||||
if brightness is not None:
|
||||
# Hue uses a range of [0, 100] to control brightness.
|
||||
brightness = float((brightness / 255) * 100)
|
||||
if transition is not None:
|
||||
# hue transition duration is in milliseconds
|
||||
transition = int(transition * 1000)
|
||||
|
||||
# NOTE: a grouped_light can only handle turn on/off
|
||||
# To set other features, you'll have to control the attached lights
|
||||
@ -193,10 +188,7 @@ class GroupedHueLight(HueBaseEntity, LightEntity):
|
||||
|
||||
async def async_turn_off(self, **kwargs: Any) -> None:
|
||||
"""Turn the light off."""
|
||||
transition = kwargs.get(ATTR_TRANSITION)
|
||||
if transition is not None:
|
||||
# hue transition duration is in milliseconds
|
||||
transition = int(transition * 1000)
|
||||
transition = normalize_hue_transition(kwargs.get(ATTR_TRANSITION))
|
||||
|
||||
# NOTE: a grouped_light can only handle turn on/off
|
||||
# To set other features, you'll have to control the attached lights
|
||||
|
19
homeassistant/components/hue/v2/helpers.py
Normal file
19
homeassistant/components/hue/v2/helpers.py
Normal file
@ -0,0 +1,19 @@
|
||||
"""Helper functions for Philips Hue v2."""
|
||||
|
||||
|
||||
def normalize_hue_brightness(brightness):
|
||||
"""Return calculated brightness values."""
|
||||
if brightness is not None:
|
||||
# Hue uses a range of [0, 100] to control brightness.
|
||||
brightness = float((brightness / 255) * 100)
|
||||
|
||||
return brightness
|
||||
|
||||
|
||||
def normalize_hue_transition(transition):
|
||||
"""Return rounded transition values."""
|
||||
if transition is not None:
|
||||
# hue transition duration is in milliseconds and round them to 100ms
|
||||
transition = int(round(transition, 1) * 1000)
|
||||
|
||||
return transition
|
@ -4,7 +4,7 @@ from typing import TYPE_CHECKING
|
||||
|
||||
from aiohue.v2 import HueBridgeV2
|
||||
from aiohue.v2.controllers.events import EventType
|
||||
from aiohue.v2.models.button import Button
|
||||
from aiohue.v2.models.button import Button, ButtonEvent
|
||||
|
||||
from homeassistant.const import CONF_DEVICE_ID, CONF_ID, CONF_TYPE, CONF_UNIQUE_ID
|
||||
from homeassistant.core import callback
|
||||
@ -27,6 +27,11 @@ async def async_setup_hue_events(bridge: "HueBridge"):
|
||||
api: HueBridgeV2 = bridge.api # to satisfy typing
|
||||
conf_entry = bridge.config_entry
|
||||
dev_reg = device_registry.async_get(hass)
|
||||
last_state = {
|
||||
x.id: x.button.last_event
|
||||
for x in api.sensors.button.items
|
||||
if x.button is not None
|
||||
}
|
||||
|
||||
# at this time the `button` resource is the only source of hue events
|
||||
btn_controller = api.sensors.button
|
||||
@ -35,6 +40,21 @@ async def async_setup_hue_events(bridge: "HueBridge"):
|
||||
def handle_button_event(evt_type: EventType, hue_resource: Button) -> None:
|
||||
"""Handle event from Hue devices controller."""
|
||||
LOGGER.debug("Received button event: %s", hue_resource)
|
||||
|
||||
# guard for missing button object on the resource
|
||||
if hue_resource.button is None:
|
||||
return
|
||||
|
||||
cur_event = hue_resource.button.last_event
|
||||
last_event = last_state.get(hue_resource.id)
|
||||
# ignore the event if the last_event value is exactly the same
|
||||
# this may happen if some other metadata of the button resource is adjusted
|
||||
if cur_event == last_event:
|
||||
return
|
||||
if cur_event != ButtonEvent.REPEAT:
|
||||
# do not store repeat event
|
||||
last_state[hue_resource.id] = cur_event
|
||||
|
||||
hue_device = btn_controller.get_device(hue_resource.id)
|
||||
device = dev_reg.async_get_device({(DOMAIN, hue_device.id)})
|
||||
|
||||
@ -44,7 +64,7 @@ async def async_setup_hue_events(bridge: "HueBridge"):
|
||||
CONF_ID: slugify(f"{hue_device.metadata.name}: Button"),
|
||||
CONF_DEVICE_ID: device.id, # type: ignore
|
||||
CONF_UNIQUE_ID: hue_resource.id,
|
||||
CONF_TYPE: hue_resource.button.last_event.value,
|
||||
CONF_TYPE: cur_event.value,
|
||||
CONF_SUBTYPE: hue_resource.metadata.control_id,
|
||||
}
|
||||
hass.bus.async_fire(ATTR_HUE_EVENT, data)
|
||||
|
@ -30,6 +30,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from ..bridge import HueBridge
|
||||
from ..const import DOMAIN
|
||||
from .entity import HueBaseEntity
|
||||
from .helpers import normalize_hue_brightness, normalize_hue_transition
|
||||
|
||||
ALLOWED_ERRORS = [
|
||||
"device (light) has communication issues, command (on) may not have effect",
|
||||
@ -155,17 +156,11 @@ class HueLight(HueBaseEntity, LightEntity):
|
||||
|
||||
async def async_turn_on(self, **kwargs: Any) -> None:
|
||||
"""Turn the device on."""
|
||||
transition = kwargs.get(ATTR_TRANSITION)
|
||||
transition = normalize_hue_transition(kwargs.get(ATTR_TRANSITION))
|
||||
xy_color = kwargs.get(ATTR_XY_COLOR)
|
||||
color_temp = kwargs.get(ATTR_COLOR_TEMP)
|
||||
brightness = kwargs.get(ATTR_BRIGHTNESS)
|
||||
brightness = normalize_hue_brightness(kwargs.get(ATTR_BRIGHTNESS))
|
||||
flash = kwargs.get(ATTR_FLASH)
|
||||
if brightness is not None:
|
||||
# Hue uses a range of [0, 100] to control brightness.
|
||||
brightness = float((brightness / 255) * 100)
|
||||
if transition is not None:
|
||||
# hue transition duration is in milliseconds
|
||||
transition = int(transition * 1000)
|
||||
|
||||
await self.bridge.async_request_call(
|
||||
self.controller.set_state,
|
||||
@ -181,11 +176,9 @@ class HueLight(HueBaseEntity, LightEntity):
|
||||
|
||||
async def async_turn_off(self, **kwargs: Any) -> None:
|
||||
"""Turn the light off."""
|
||||
transition = kwargs.get(ATTR_TRANSITION)
|
||||
transition = normalize_hue_transition(kwargs.get(ATTR_TRANSITION))
|
||||
flash = kwargs.get(ATTR_FLASH)
|
||||
if transition is not None:
|
||||
# hue transition duration is in milliseconds
|
||||
transition = int(transition * 1000)
|
||||
|
||||
await self.bridge.async_request_call(
|
||||
self.controller.set_state,
|
||||
id=self.resource.id,
|
||||
|
@ -4,7 +4,7 @@
|
||||
"config_flow": true,
|
||||
"documentation": "https://www.home-assistant.io/integrations/knx",
|
||||
"requirements": [
|
||||
"xknx==0.18.14"
|
||||
"xknx==0.18.15"
|
||||
],
|
||||
"codeowners": [
|
||||
"@Julius2342",
|
||||
|
@ -1,12 +1,15 @@
|
||||
"""The pvpc_hourly_pricing integration to collect Spain official electric prices."""
|
||||
from datetime import datetime, timedelta
|
||||
import logging
|
||||
from typing import Mapping
|
||||
|
||||
from aiopvpc import DEFAULT_POWER_KW, TARIFFS
|
||||
from aiopvpc import DEFAULT_POWER_KW, TARIFFS, PVPCData
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
|
||||
from homeassistant.const import CONF_NAME
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.entity_registry import (
|
||||
EntityRegistry,
|
||||
@ -14,6 +17,8 @@ from homeassistant.helpers.entity_registry import (
|
||||
async_migrate_entries,
|
||||
)
|
||||
from homeassistant.helpers.typing import ConfigType
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||
from homeassistant.util import dt as dt_util
|
||||
|
||||
from .const import (
|
||||
ATTR_POWER,
|
||||
@ -99,6 +104,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
await hass.config_entries.async_remove(entry.entry_id)
|
||||
return False
|
||||
|
||||
coordinator = ElecPricesDataUpdateCoordinator(hass, entry)
|
||||
await coordinator.async_config_entry_first_refresh()
|
||||
|
||||
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
|
||||
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
|
||||
entry.async_on_unload(entry.add_update_listener(async_update_options))
|
||||
return True
|
||||
@ -119,4 +128,39 @@ async def async_update_options(hass: HomeAssistant, entry: ConfigEntry) -> None:
|
||||
|
||||
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
"""Unload a config entry."""
|
||||
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
|
||||
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
|
||||
if unload_ok:
|
||||
hass.data[DOMAIN].pop(entry.entry_id)
|
||||
return unload_ok
|
||||
|
||||
|
||||
class ElecPricesDataUpdateCoordinator(DataUpdateCoordinator[Mapping[datetime, float]]):
|
||||
"""Class to manage fetching Electricity prices data from API."""
|
||||
|
||||
def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None:
|
||||
"""Initialize."""
|
||||
self.api = PVPCData(
|
||||
session=async_get_clientsession(hass),
|
||||
tariff=entry.data[ATTR_TARIFF],
|
||||
local_timezone=hass.config.time_zone,
|
||||
power=entry.data[ATTR_POWER],
|
||||
power_valley=entry.data[ATTR_POWER_P3],
|
||||
)
|
||||
super().__init__(
|
||||
hass, _LOGGER, name=DOMAIN, update_interval=timedelta(minutes=30)
|
||||
)
|
||||
self._entry = entry
|
||||
|
||||
@property
|
||||
def entry_id(self) -> str:
|
||||
"""Return entry ID."""
|
||||
return self._entry.entry_id
|
||||
|
||||
async def _async_update_data(self) -> Mapping[datetime, float]:
|
||||
"""Update electricity prices from the ESIOS API."""
|
||||
prices = await self.api.async_update_prices(dt_util.utcnow())
|
||||
self.api.process_state_and_attributes(dt_util.utcnow())
|
||||
if not prices:
|
||||
raise UpdateFailed
|
||||
|
||||
return prices
|
||||
|
@ -3,7 +3,7 @@
|
||||
"name": "Spain electricity hourly pricing (PVPC)",
|
||||
"config_flow": true,
|
||||
"documentation": "https://www.home-assistant.io/integrations/pvpc_hourly_pricing",
|
||||
"requirements": ["aiopvpc==2.2.4"],
|
||||
"requirements": ["aiopvpc==3.0.0"],
|
||||
"codeowners": ["@azogue"],
|
||||
"quality_scale": "platinum",
|
||||
"iot_class": "cloud_polling"
|
||||
|
@ -1,73 +1,160 @@
|
||||
"""Sensor to collect the reference daily prices of electricity ('PVPC') in Spain."""
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Mapping
|
||||
from datetime import datetime
|
||||
import logging
|
||||
from random import randint
|
||||
from typing import Any
|
||||
|
||||
from aiopvpc import PVPCData
|
||||
|
||||
from homeassistant.components.sensor import STATE_CLASS_MEASUREMENT, SensorEntity
|
||||
from homeassistant.components.sensor import (
|
||||
SensorEntity,
|
||||
SensorEntityDescription,
|
||||
SensorStateClass,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import CONF_NAME, CURRENCY_EURO, ENERGY_KILO_WATT_HOUR
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||
from homeassistant.helpers.entity import DeviceEntryType, DeviceInfo
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.helpers.event import async_call_later, async_track_time_change
|
||||
from homeassistant.helpers.restore_state import RestoreEntity
|
||||
import homeassistant.util.dt as dt_util
|
||||
from homeassistant.helpers.event import async_track_time_change
|
||||
from homeassistant.helpers.typing import StateType
|
||||
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
||||
|
||||
from .const import ATTR_POWER, ATTR_POWER_P3, ATTR_TARIFF
|
||||
from . import ElecPricesDataUpdateCoordinator
|
||||
from .const import DOMAIN
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
ATTR_PRICE = "price"
|
||||
ICON = "mdi:currency-eur"
|
||||
UNIT = f"{CURRENCY_EURO}/{ENERGY_KILO_WATT_HOUR}"
|
||||
|
||||
_DEFAULT_TIMEOUT = 10
|
||||
PARALLEL_UPDATES = 1
|
||||
SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
|
||||
SensorEntityDescription(
|
||||
key="PVPC",
|
||||
icon="mdi:currency-eur",
|
||||
native_unit_of_measurement=f"{CURRENCY_EURO}/{ENERGY_KILO_WATT_HOUR}",
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
),
|
||||
)
|
||||
_PRICE_SENSOR_ATTRIBUTES_MAP = {
|
||||
"tariff": "tariff",
|
||||
"period": "period",
|
||||
"available_power": "available_power",
|
||||
"next_period": "next_period",
|
||||
"hours_to_next_period": "hours_to_next_period",
|
||||
"next_better_price": "next_better_price",
|
||||
"hours_to_better_price": "hours_to_better_price",
|
||||
"num_better_prices_ahead": "num_better_prices_ahead",
|
||||
"price_position": "price_position",
|
||||
"price_ratio": "price_ratio",
|
||||
"max_price": "max_price",
|
||||
"max_price_at": "max_price_at",
|
||||
"min_price": "min_price",
|
||||
"min_price_at": "min_price_at",
|
||||
"next_best_at": "next_best_at",
|
||||
"price_00h": "price_00h",
|
||||
"price_01h": "price_01h",
|
||||
"price_02h": "price_02h",
|
||||
"price_02h_d": "price_02h_d", # only on DST day change with 25h
|
||||
"price_03h": "price_03h",
|
||||
"price_04h": "price_04h",
|
||||
"price_05h": "price_05h",
|
||||
"price_06h": "price_06h",
|
||||
"price_07h": "price_07h",
|
||||
"price_08h": "price_08h",
|
||||
"price_09h": "price_09h",
|
||||
"price_10h": "price_10h",
|
||||
"price_11h": "price_11h",
|
||||
"price_12h": "price_12h",
|
||||
"price_13h": "price_13h",
|
||||
"price_14h": "price_14h",
|
||||
"price_15h": "price_15h",
|
||||
"price_16h": "price_16h",
|
||||
"price_17h": "price_17h",
|
||||
"price_18h": "price_18h",
|
||||
"price_19h": "price_19h",
|
||||
"price_20h": "price_20h",
|
||||
"price_21h": "price_21h",
|
||||
"price_22h": "price_22h",
|
||||
"price_23h": "price_23h",
|
||||
# only seen in the evening
|
||||
"next_better_price (next day)": "next_better_price (next day)",
|
||||
"hours_to_better_price (next day)": "hours_to_better_price (next day)",
|
||||
"num_better_prices_ahead (next day)": "num_better_prices_ahead (next day)",
|
||||
"price_position (next day)": "price_position (next day)",
|
||||
"price_ratio (next day)": "price_ratio (next day)",
|
||||
"max_price (next day)": "max_price (next day)",
|
||||
"max_price_at (next day)": "max_price_at (next day)",
|
||||
"min_price (next day)": "min_price (next day)",
|
||||
"min_price_at (next day)": "min_price_at (next day)",
|
||||
"next_best_at (next day)": "next_best_at (next day)",
|
||||
"price_next_day_00h": "price_next_day_00h",
|
||||
"price_next_day_01h": "price_next_day_01h",
|
||||
"price_next_day_02h": "price_next_day_02h",
|
||||
"price_next_day_02h_d": "price_next_day_02h_d",
|
||||
"price_next_day_03h": "price_next_day_03h",
|
||||
"price_next_day_04h": "price_next_day_04h",
|
||||
"price_next_day_05h": "price_next_day_05h",
|
||||
"price_next_day_06h": "price_next_day_06h",
|
||||
"price_next_day_07h": "price_next_day_07h",
|
||||
"price_next_day_08h": "price_next_day_08h",
|
||||
"price_next_day_09h": "price_next_day_09h",
|
||||
"price_next_day_10h": "price_next_day_10h",
|
||||
"price_next_day_11h": "price_next_day_11h",
|
||||
"price_next_day_12h": "price_next_day_12h",
|
||||
"price_next_day_13h": "price_next_day_13h",
|
||||
"price_next_day_14h": "price_next_day_14h",
|
||||
"price_next_day_15h": "price_next_day_15h",
|
||||
"price_next_day_16h": "price_next_day_16h",
|
||||
"price_next_day_17h": "price_next_day_17h",
|
||||
"price_next_day_18h": "price_next_day_18h",
|
||||
"price_next_day_19h": "price_next_day_19h",
|
||||
"price_next_day_20h": "price_next_day_20h",
|
||||
"price_next_day_21h": "price_next_day_21h",
|
||||
"price_next_day_22h": "price_next_day_22h",
|
||||
"price_next_day_23h": "price_next_day_23h",
|
||||
}
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
config_entry: ConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
||||
) -> None:
|
||||
"""Set up the electricity price sensor from config_entry."""
|
||||
name = config_entry.data[CONF_NAME]
|
||||
pvpc_data_handler = PVPCData(
|
||||
tariff=config_entry.data[ATTR_TARIFF],
|
||||
power=config_entry.data[ATTR_POWER],
|
||||
power_valley=config_entry.data[ATTR_POWER_P3],
|
||||
local_timezone=hass.config.time_zone,
|
||||
websession=async_get_clientsession(hass),
|
||||
timeout=_DEFAULT_TIMEOUT,
|
||||
)
|
||||
coordinator: ElecPricesDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
||||
name = entry.data[CONF_NAME]
|
||||
async_add_entities(
|
||||
[ElecPriceSensor(name, config_entry.unique_id, pvpc_data_handler)], False
|
||||
[ElecPriceSensor(coordinator, SENSOR_TYPES[0], entry.unique_id, name)]
|
||||
)
|
||||
|
||||
|
||||
class ElecPriceSensor(RestoreEntity, SensorEntity):
|
||||
class ElecPriceSensor(CoordinatorEntity, SensorEntity):
|
||||
"""Class to hold the prices of electricity as a sensor."""
|
||||
|
||||
_attr_icon = ICON
|
||||
_attr_native_unit_of_measurement = UNIT
|
||||
_attr_should_poll = False
|
||||
_attr_state_class = STATE_CLASS_MEASUREMENT
|
||||
coordinator: ElecPricesDataUpdateCoordinator
|
||||
|
||||
def __init__(self, name, unique_id, pvpc_data_handler):
|
||||
"""Initialize the sensor object."""
|
||||
self._name = name
|
||||
self._unique_id = unique_id
|
||||
self._pvpc_data = pvpc_data_handler
|
||||
self._num_retries = 0
|
||||
def __init__(
|
||||
self,
|
||||
coordinator: ElecPricesDataUpdateCoordinator,
|
||||
description: SensorEntityDescription,
|
||||
unique_id: str | None,
|
||||
name: str,
|
||||
) -> None:
|
||||
"""Initialize ESIOS sensor."""
|
||||
super().__init__(coordinator)
|
||||
self.entity_description = description
|
||||
self._attr_attribution = coordinator.api.attribution
|
||||
self._attr_unique_id = unique_id
|
||||
self._attr_name = name
|
||||
self._attr_device_info = DeviceInfo(
|
||||
configuration_url="https://www.ree.es/es/apidatos",
|
||||
entry_type=DeviceEntryType.SERVICE,
|
||||
identifiers={(DOMAIN, coordinator.entry_id)},
|
||||
manufacturer="REE",
|
||||
name="PVPC (REData API)",
|
||||
)
|
||||
self._state: StateType = None
|
||||
self._attrs: Mapping[str, Any] = {}
|
||||
|
||||
async def async_added_to_hass(self) -> None:
|
||||
"""Handle entity which will be added."""
|
||||
await super().async_added_to_hass()
|
||||
if state := await self.async_get_last_state():
|
||||
self._pvpc_data.state = state.state
|
||||
|
||||
# Update 'state' value in hour changes
|
||||
self.async_on_remove(
|
||||
@ -75,86 +162,31 @@ class ElecPriceSensor(RestoreEntity, SensorEntity):
|
||||
self.hass, self.update_current_price, second=[0], minute=[0]
|
||||
)
|
||||
)
|
||||
# Update prices at random time, 2 times/hour (don't want to upset API)
|
||||
random_minute = randint(1, 29)
|
||||
mins_update = [random_minute, random_minute + 30]
|
||||
self.async_on_remove(
|
||||
async_track_time_change(
|
||||
self.hass, self.async_update_prices, second=[0], minute=mins_update
|
||||
)
|
||||
)
|
||||
_LOGGER.debug(
|
||||
"Setup of price sensor %s (%s) with tariff '%s', "
|
||||
"updating prices each hour at %s min",
|
||||
"Setup of price sensor %s (%s) with tariff '%s'",
|
||||
self.name,
|
||||
self.entity_id,
|
||||
self._pvpc_data.tariff,
|
||||
mins_update,
|
||||
self.coordinator.api.tariff,
|
||||
)
|
||||
now = dt_util.utcnow()
|
||||
await self.async_update_prices(now)
|
||||
self.update_current_price(now)
|
||||
|
||||
@property
|
||||
def unique_id(self) -> str | None:
|
||||
"""Return a unique ID."""
|
||||
return self._unique_id
|
||||
|
||||
@property
|
||||
def name(self) -> str:
|
||||
"""Return the name of the sensor."""
|
||||
return self._name
|
||||
|
||||
@property
|
||||
def native_value(self) -> float:
|
||||
"""Return the state of the sensor."""
|
||||
return self._pvpc_data.state
|
||||
|
||||
@property
|
||||
def available(self) -> bool:
|
||||
"""Return True if entity is available."""
|
||||
return self._pvpc_data.state_available
|
||||
|
||||
@property
|
||||
def extra_state_attributes(self) -> dict[str, Any]:
|
||||
"""Return the state attributes."""
|
||||
return self._pvpc_data.attributes
|
||||
|
||||
@callback
|
||||
def update_current_price(self, now):
|
||||
def update_current_price(self, now: datetime) -> None:
|
||||
"""Update the sensor state, by selecting the current price for this hour."""
|
||||
self._pvpc_data.process_state_and_attributes(now)
|
||||
self.coordinator.api.process_state_and_attributes(now)
|
||||
self.async_write_ha_state()
|
||||
|
||||
async def async_update_prices(self, now):
|
||||
"""Update electricity prices from the ESIOS API."""
|
||||
prices = await self._pvpc_data.async_update_prices(now)
|
||||
if not prices and self._pvpc_data.source_available:
|
||||
self._num_retries += 1
|
||||
if self._num_retries > 2:
|
||||
_LOGGER.warning(
|
||||
"%s: repeated bad data update, mark component as unavailable source",
|
||||
self.entity_id,
|
||||
)
|
||||
self._pvpc_data.source_available = False
|
||||
return
|
||||
@property
|
||||
def native_value(self) -> StateType:
|
||||
"""Return the state of the sensor."""
|
||||
self._state = self.coordinator.api.state
|
||||
return self._state
|
||||
|
||||
retry_delay = 2 * self._num_retries * self._pvpc_data.timeout
|
||||
_LOGGER.debug(
|
||||
"%s: Bad update[retry:%d], will try again in %d s",
|
||||
self.entity_id,
|
||||
self._num_retries,
|
||||
retry_delay,
|
||||
)
|
||||
async_call_later(self.hass, retry_delay, self.async_update_prices)
|
||||
return
|
||||
|
||||
if not prices:
|
||||
_LOGGER.debug("%s: data source is not yet available", self.entity_id)
|
||||
return
|
||||
|
||||
self._num_retries = 0
|
||||
if not self._pvpc_data.source_available:
|
||||
self._pvpc_data.source_available = True
|
||||
_LOGGER.warning("%s: component has recovered data access", self.entity_id)
|
||||
self.update_current_price(now)
|
||||
@property
|
||||
def extra_state_attributes(self) -> Mapping[str, Any] | None:
|
||||
"""Return the state attributes."""
|
||||
self._attrs = {
|
||||
_PRICE_SENSOR_ATTRIBUTES_MAP[key]: value
|
||||
for key, value in self.coordinator.api.attributes.items()
|
||||
if key in _PRICE_SENSOR_ATTRIBUTES_MAP
|
||||
}
|
||||
return self._attrs
|
||||
|
@ -5,7 +5,7 @@ from dataclasses import dataclass
|
||||
from datetime import timedelta
|
||||
import logging
|
||||
|
||||
import pyrepetier
|
||||
import pyrepetierng as pyrepetier
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components.sensor import SensorEntityDescription
|
||||
|
@ -2,7 +2,7 @@
|
||||
"domain": "repetier",
|
||||
"name": "Repetier-Server",
|
||||
"documentation": "https://www.home-assistant.io/integrations/repetier",
|
||||
"requirements": ["pyrepetier==3.0.5"],
|
||||
"codeowners": ["@MTrab"],
|
||||
"requirements": ["pyrepetierng==0.1.0"],
|
||||
"codeowners": ["@MTrab", "@ShadowBr0ther"],
|
||||
"iot_class": "local_polling"
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
"""Entity representing a Sonos power sensor."""
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from typing import Any
|
||||
|
||||
from homeassistant.components.binary_sensor import (
|
||||
@ -16,11 +17,14 @@ from .speaker import SonosSpeaker
|
||||
|
||||
ATTR_BATTERY_POWER_SOURCE = "power_source"
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def async_setup_entry(hass, config_entry, async_add_entities):
|
||||
"""Set up Sonos from a config entry."""
|
||||
|
||||
async def _async_create_entity(speaker: SonosSpeaker) -> None:
|
||||
_LOGGER.debug("Creating battery binary_sensor on %s", speaker.zone_name)
|
||||
entity = SonosPowerEntity(speaker)
|
||||
async_add_entities([entity])
|
||||
|
||||
|
@ -149,7 +149,6 @@ SONOS_CREATE_BATTERY = "sonos_create_battery"
|
||||
SONOS_CREATE_SWITCHES = "sonos_create_switches"
|
||||
SONOS_CREATE_LEVELS = "sonos_create_levels"
|
||||
SONOS_CREATE_MEDIA_PLAYER = "sonos_create_media_player"
|
||||
SONOS_ENTITY_CREATED = "sonos_entity_created"
|
||||
SONOS_POLL_UPDATE = "sonos_poll_update"
|
||||
SONOS_ALARMS_UPDATED = "sonos_alarms_updated"
|
||||
SONOS_FAVORITES_UPDATED = "sonos_favorites_updated"
|
||||
|
@ -10,15 +10,11 @@ from soco.core import SoCo
|
||||
from soco.exceptions import SoCoException
|
||||
|
||||
import homeassistant.helpers.device_registry as dr
|
||||
from homeassistant.helpers.dispatcher import (
|
||||
async_dispatcher_connect,
|
||||
async_dispatcher_send,
|
||||
)
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||
from homeassistant.helpers.entity import DeviceInfo, Entity
|
||||
|
||||
from .const import (
|
||||
DOMAIN,
|
||||
SONOS_ENTITY_CREATED,
|
||||
SONOS_FAVORITES_UPDATED,
|
||||
SONOS_POLL_UPDATE,
|
||||
SONOS_STATE_UPDATED,
|
||||
@ -60,9 +56,6 @@ class SonosEntity(Entity):
|
||||
self.async_write_ha_state,
|
||||
)
|
||||
)
|
||||
async_dispatcher_send(
|
||||
self.hass, f"{SONOS_ENTITY_CREATED}-{self.soco.uid}", self.platform.domain
|
||||
)
|
||||
|
||||
async def async_poll(self, now: datetime.datetime) -> None:
|
||||
"""Poll the entity if subscriptions fail."""
|
||||
|
@ -3,7 +3,7 @@
|
||||
"name": "Sonos",
|
||||
"config_flow": true,
|
||||
"documentation": "https://www.home-assistant.io/integrations/sonos",
|
||||
"requirements": ["soco==0.25.0"],
|
||||
"requirements": ["soco==0.25.1"],
|
||||
"dependencies": ["ssdp"],
|
||||
"after_dependencies": ["plex", "zeroconf"],
|
||||
"zeroconf": ["_sonos._tcp.local."],
|
||||
|
@ -132,6 +132,7 @@ async def async_setup_entry(
|
||||
@callback
|
||||
def async_create_entities(speaker: SonosSpeaker) -> None:
|
||||
"""Handle device discovery and create entities."""
|
||||
_LOGGER.debug("Creating media_player on %s", speaker.zone_name)
|
||||
async_add_entities([SonosMediaPlayerEntity(speaker)])
|
||||
|
||||
@service.verify_domain_control(hass, SONOS_DOMAIN)
|
||||
|
@ -1,6 +1,8 @@
|
||||
"""Entity representing a Sonos number control."""
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
|
||||
from homeassistant.components.number import NumberEntity
|
||||
from homeassistant.const import ENTITY_CATEGORY_CONFIG
|
||||
from homeassistant.core import callback
|
||||
@ -13,6 +15,8 @@ from .speaker import SonosSpeaker
|
||||
|
||||
LEVEL_TYPES = ("bass", "treble")
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def async_setup_entry(hass, config_entry, async_add_entities):
|
||||
"""Set up the Sonos number platform from a config entry."""
|
||||
@ -21,6 +25,9 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
|
||||
def _async_create_entities(speaker: SonosSpeaker) -> None:
|
||||
entities = []
|
||||
for level_type in LEVEL_TYPES:
|
||||
_LOGGER.debug(
|
||||
"Creating %s number control on %s", level_type, speaker.zone_name
|
||||
)
|
||||
entities.append(SonosLevelEntity(speaker, level_type))
|
||||
async_add_entities(entities)
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
"""Entity representing a Sonos battery level."""
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
|
||||
from homeassistant.components.sensor import SensorEntity
|
||||
from homeassistant.const import (
|
||||
DEVICE_CLASS_BATTERY,
|
||||
@ -14,6 +16,8 @@ from .const import SONOS_CREATE_AUDIO_FORMAT_SENSOR, SONOS_CREATE_BATTERY
|
||||
from .entity import SonosEntity
|
||||
from .speaker import SonosSpeaker
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def async_setup_entry(hass, config_entry, async_add_entities):
|
||||
"""Set up Sonos from a config entry."""
|
||||
@ -22,11 +26,13 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
|
||||
def _async_create_audio_format_entity(
|
||||
speaker: SonosSpeaker, audio_format: str
|
||||
) -> None:
|
||||
_LOGGER.debug("Creating audio input format sensor on %s", speaker.zone_name)
|
||||
entity = SonosAudioInputFormatSensorEntity(speaker, audio_format)
|
||||
async_add_entities([entity])
|
||||
|
||||
@callback
|
||||
def _async_create_battery_sensor(speaker: SonosSpeaker) -> None:
|
||||
_LOGGER.debug("Creating battery level sensor on %s", speaker.zone_name)
|
||||
entity = SonosBatteryEntity(speaker)
|
||||
async_add_entities([entity])
|
||||
|
||||
|
@ -20,10 +20,7 @@ from soco.music_library import MusicLibrary
|
||||
from soco.plugins.sharelink import ShareLinkPlugin
|
||||
from soco.snapshot import Snapshot
|
||||
|
||||
from homeassistant.components.binary_sensor import DOMAIN as BINARY_SENSOR_DOMAIN
|
||||
from homeassistant.components.media_player import DOMAIN as MP_DOMAIN
|
||||
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
|
||||
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.exceptions import HomeAssistantError
|
||||
@ -42,7 +39,6 @@ from .const import (
|
||||
BATTERY_SCAN_INTERVAL,
|
||||
DATA_SONOS,
|
||||
DOMAIN,
|
||||
PLATFORMS,
|
||||
SCAN_INTERVAL,
|
||||
SONOS_CHECK_ACTIVITY,
|
||||
SONOS_CREATE_ALARM,
|
||||
@ -51,7 +47,6 @@ from .const import (
|
||||
SONOS_CREATE_LEVELS,
|
||||
SONOS_CREATE_MEDIA_PLAYER,
|
||||
SONOS_CREATE_SWITCHES,
|
||||
SONOS_ENTITY_CREATED,
|
||||
SONOS_POLL_UPDATE,
|
||||
SONOS_REBOOTED,
|
||||
SONOS_SPEAKER_ACTIVITY,
|
||||
@ -161,9 +156,6 @@ class SonosSpeaker:
|
||||
self._share_link_plugin: ShareLinkPlugin | None = None
|
||||
self.available = True
|
||||
|
||||
# Synchronization helpers
|
||||
self._platforms_ready: set[str] = set()
|
||||
|
||||
# Subscriptions and events
|
||||
self.subscriptions_failed: bool = False
|
||||
self._subscriptions: list[SubscriptionBase] = []
|
||||
@ -217,7 +209,6 @@ class SonosSpeaker:
|
||||
dispatch_pairs = (
|
||||
(SONOS_CHECK_ACTIVITY, self.async_check_activity),
|
||||
(SONOS_SPEAKER_ADDED, self.update_group_for_uid),
|
||||
(f"{SONOS_ENTITY_CREATED}-{self.soco.uid}", self.async_handle_new_entity),
|
||||
(f"{SONOS_REBOOTED}-{self.soco.uid}", self.async_rebooted),
|
||||
(f"{SONOS_SPEAKER_ACTIVITY}-{self.soco.uid}", self.speaker_activity),
|
||||
)
|
||||
@ -253,15 +244,11 @@ class SonosSpeaker:
|
||||
self.hass, self.async_poll_battery, BATTERY_SCAN_INTERVAL
|
||||
)
|
||||
dispatcher_send(self.hass, SONOS_CREATE_BATTERY, self)
|
||||
else:
|
||||
self._platforms_ready.update({BINARY_SENSOR_DOMAIN, SENSOR_DOMAIN})
|
||||
|
||||
if new_alarms := [
|
||||
alarm.alarm_id for alarm in self.alarms if alarm.zone.uid == self.soco.uid
|
||||
]:
|
||||
dispatcher_send(self.hass, SONOS_CREATE_ALARM, self, new_alarms)
|
||||
else:
|
||||
self._platforms_ready.add(SWITCH_DOMAIN)
|
||||
|
||||
dispatcher_send(self.hass, SONOS_CREATE_SWITCHES, self)
|
||||
|
||||
@ -277,19 +264,11 @@ class SonosSpeaker:
|
||||
dispatcher_send(self.hass, SONOS_CREATE_MEDIA_PLAYER, self)
|
||||
dispatcher_send(self.hass, SONOS_SPEAKER_ADDED, self.soco.uid)
|
||||
|
||||
self.hass.create_task(self.async_subscribe())
|
||||
|
||||
#
|
||||
# Entity management
|
||||
#
|
||||
async def async_handle_new_entity(self, entity_type: str) -> None:
|
||||
"""Listen to new entities to trigger first subscription."""
|
||||
if self._platforms_ready == PLATFORMS:
|
||||
return
|
||||
|
||||
self._platforms_ready.add(entity_type)
|
||||
if self._platforms_ready == PLATFORMS:
|
||||
self._resubscription_lock = asyncio.Lock()
|
||||
await self.async_subscribe()
|
||||
|
||||
def write_entity_states(self) -> None:
|
||||
"""Write states for associated SonosEntity instances."""
|
||||
dispatcher_send(self.hass, f"{SONOS_STATE_UPDATED}-{self.soco.uid}")
|
||||
@ -405,6 +384,9 @@ class SonosSpeaker:
|
||||
|
||||
async def async_resubscribe(self, exception: Exception) -> None:
|
||||
"""Attempt to resubscribe when a renewal failure is detected."""
|
||||
if not self._resubscription_lock:
|
||||
self._resubscription_lock = asyncio.Lock()
|
||||
|
||||
async with self._resubscription_lock:
|
||||
if not self.available:
|
||||
return
|
||||
|
@ -3,7 +3,7 @@
|
||||
"name": "Tile",
|
||||
"config_flow": true,
|
||||
"documentation": "https://www.home-assistant.io/integrations/tile",
|
||||
"requirements": ["pytile==5.2.4"],
|
||||
"requirements": ["pytile==2021.12.0"],
|
||||
"codeowners": ["@bachya"],
|
||||
"iot_class": "cloud_polling"
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ from homeassistant.const import (
|
||||
)
|
||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.util.dt import get_time_zone
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
@ -131,12 +132,15 @@ class TrainSensor(SensorEntity):
|
||||
self._state = None
|
||||
self._departure_state = None
|
||||
self._delay_in_minutes = None
|
||||
self._timezone = get_time_zone("Europe/Stockholm")
|
||||
|
||||
async def async_update(self):
|
||||
"""Retrieve latest state."""
|
||||
if self._time is not None:
|
||||
departure_day = next_departuredate(self._weekday)
|
||||
when = datetime.combine(departure_day, self._time)
|
||||
when = datetime.combine(departure_day, self._time).astimezone(
|
||||
self._timezone
|
||||
)
|
||||
try:
|
||||
self._state = await self._train_api.async_get_train_stop(
|
||||
self._from_station, self._to_station, when
|
||||
@ -193,8 +197,8 @@ class TrainSensor(SensorEntity):
|
||||
"""Return the departure state."""
|
||||
if (state := self._state) is not None:
|
||||
if state.time_at_location is not None:
|
||||
return state.time_at_location
|
||||
return state.time_at_location.astimezone(self._timezone)
|
||||
if state.estimated_time_at_location is not None:
|
||||
return state.estimated_time_at_location
|
||||
return state.advertised_time_at_location
|
||||
return state.estimated_time_at_location.astimezone(self._timezone)
|
||||
return state.advertised_time_at_location.astimezone(self._timezone)
|
||||
return None
|
||||
|
@ -1,6 +1,7 @@
|
||||
"""Support for Vallox ventilation units."""
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
from dataclasses import dataclass, field
|
||||
import ipaddress
|
||||
import logging
|
||||
@ -13,7 +14,7 @@ from vallox_websocket_api.vallox import get_uuid as calculate_uuid
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.const import CONF_HOST, CONF_NAME, EVENT_HOMEASSISTANT_STARTED
|
||||
from homeassistant.core import HomeAssistant, ServiceCall
|
||||
from homeassistant.core import CoreState, HomeAssistant, ServiceCall
|
||||
from homeassistant.helpers import config_validation as cv
|
||||
from homeassistant.helpers.discovery import async_load_platform
|
||||
from homeassistant.helpers.typing import ConfigType, StateType
|
||||
@ -25,6 +26,7 @@ from .const import (
|
||||
DEFAULT_FAN_SPEED_HOME,
|
||||
DEFAULT_NAME,
|
||||
DOMAIN,
|
||||
INITIAL_COORDINATOR_UPDATE_RETRY_INTERVAL_SECONDS,
|
||||
METRIC_KEY_PROFILE_FAN_SPEED_AWAY,
|
||||
METRIC_KEY_PROFILE_FAN_SPEED_BOOST,
|
||||
METRIC_KEY_PROFILE_FAN_SPEED_HOME,
|
||||
@ -171,7 +173,24 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
||||
hass.data[DOMAIN] = {"client": client, "coordinator": coordinator, "name": name}
|
||||
|
||||
async def _async_load_platform_delayed(*_: Any) -> None:
|
||||
# We need a successful update before loading the platforms, because platform init code
|
||||
# derives the UUIDs from the data the coordinator fetches.
|
||||
warned_once = False
|
||||
while hass.state == CoreState.running:
|
||||
await coordinator.async_refresh()
|
||||
if coordinator.last_update_success:
|
||||
break
|
||||
|
||||
if not warned_once:
|
||||
_LOGGER.warning(
|
||||
"Vallox integration not ready yet; Retrying in background"
|
||||
)
|
||||
warned_once = True
|
||||
|
||||
await asyncio.sleep(INITIAL_COORDINATOR_UPDATE_RETRY_INTERVAL_SECONDS)
|
||||
else:
|
||||
return
|
||||
|
||||
hass.async_create_task(async_load_platform(hass, "sensor", DOMAIN, {}, config))
|
||||
hass.async_create_task(async_load_platform(hass, "fan", DOMAIN, {}, config))
|
||||
|
||||
|
@ -7,6 +7,7 @@ from vallox_websocket_api import PROFILE as VALLOX_PROFILE
|
||||
DOMAIN = "vallox"
|
||||
DEFAULT_NAME = "Vallox"
|
||||
|
||||
INITIAL_COORDINATOR_UPDATE_RETRY_INTERVAL_SECONDS = 5
|
||||
STATE_SCAN_INTERVAL = timedelta(seconds=60)
|
||||
|
||||
# Common metric keys and (default) values.
|
||||
|
@ -7,7 +7,7 @@ from homeassistant.backports.enum import StrEnum
|
||||
|
||||
MAJOR_VERSION: Final = 2021
|
||||
MINOR_VERSION: Final = 12
|
||||
PATCH_VERSION: Final = "4"
|
||||
PATCH_VERSION: Final = "5"
|
||||
__short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}"
|
||||
__version__: Final = f"{__short_version__}.{PATCH_VERSION}"
|
||||
REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 8, 0)
|
||||
|
@ -61,6 +61,7 @@ PyViCare==2.13.1
|
||||
PyXiaomiGateway==0.13.4
|
||||
|
||||
# homeassistant.components.bmp280
|
||||
# homeassistant.components.dht
|
||||
# homeassistant.components.mcp23017
|
||||
# homeassistant.components.rpi_gpio
|
||||
# homeassistant.components.rpi_rf
|
||||
@ -94,7 +95,7 @@ accuweather==0.3.0
|
||||
adafruit-circuitpython-bmp280==3.1.1
|
||||
|
||||
# homeassistant.components.dht
|
||||
adafruit-circuitpython-dht==3.6.0
|
||||
adafruit-circuitpython-dht==3.7.0
|
||||
|
||||
# homeassistant.components.mcp23017
|
||||
adafruit-circuitpython-mcp230xx==2.2.2
|
||||
@ -186,7 +187,7 @@ aiohomekit==0.6.4
|
||||
aiohttp_cors==0.7.0
|
||||
|
||||
# homeassistant.components.hue
|
||||
aiohue==3.0.7
|
||||
aiohue==3.0.10
|
||||
|
||||
# homeassistant.components.imap
|
||||
aioimaplib==0.9.0
|
||||
@ -234,7 +235,7 @@ aiopulse==0.4.3
|
||||
aiopvapi==1.6.19
|
||||
|
||||
# homeassistant.components.pvpc_hourly_pricing
|
||||
aiopvpc==2.2.4
|
||||
aiopvpc==3.0.0
|
||||
|
||||
# homeassistant.components.webostv
|
||||
aiopylgtv==0.4.0
|
||||
@ -658,7 +659,7 @@ fjaraskupan==1.0.2
|
||||
flipr-api==1.4.1
|
||||
|
||||
# homeassistant.components.flux_led
|
||||
flux_led==0.27.8
|
||||
flux_led==0.27.13
|
||||
|
||||
# homeassistant.components.homekit
|
||||
fnvhash==0.1.0
|
||||
@ -1753,7 +1754,7 @@ pyrainbird==0.4.3
|
||||
pyrecswitch==1.0.2
|
||||
|
||||
# homeassistant.components.repetier
|
||||
pyrepetier==3.0.5
|
||||
pyrepetierng==0.1.0
|
||||
|
||||
# homeassistant.components.risco
|
||||
pyrisco==0.3.1
|
||||
@ -1961,7 +1962,7 @@ python_opendata_transport==0.2.1
|
||||
pythonegardia==1.0.40
|
||||
|
||||
# homeassistant.components.tile
|
||||
pytile==5.2.4
|
||||
pytile==2021.12.0
|
||||
|
||||
# homeassistant.components.touchline
|
||||
pytouchline==0.7
|
||||
@ -2184,7 +2185,7 @@ smhi-pkg==1.0.15
|
||||
snapcast==2.1.3
|
||||
|
||||
# homeassistant.components.sonos
|
||||
soco==0.25.0
|
||||
soco==0.25.1
|
||||
|
||||
# homeassistant.components.solaredge_local
|
||||
solaredge-local==0.2.0
|
||||
@ -2448,7 +2449,7 @@ xbox-webapi==2.0.11
|
||||
xboxapi==2.0.1
|
||||
|
||||
# homeassistant.components.knx
|
||||
xknx==0.18.14
|
||||
xknx==0.18.15
|
||||
|
||||
# homeassistant.components.bluesound
|
||||
# homeassistant.components.fritz
|
||||
|
@ -131,7 +131,7 @@ aiohomekit==0.6.4
|
||||
aiohttp_cors==0.7.0
|
||||
|
||||
# homeassistant.components.hue
|
||||
aiohue==3.0.7
|
||||
aiohue==3.0.10
|
||||
|
||||
# homeassistant.components.apache_kafka
|
||||
aiokafka==0.6.0
|
||||
@ -164,7 +164,7 @@ aiopulse==0.4.3
|
||||
aiopvapi==1.6.19
|
||||
|
||||
# homeassistant.components.pvpc_hourly_pricing
|
||||
aiopvpc==2.2.4
|
||||
aiopvpc==3.0.0
|
||||
|
||||
# homeassistant.components.webostv
|
||||
aiopylgtv==0.4.0
|
||||
@ -399,7 +399,7 @@ fjaraskupan==1.0.2
|
||||
flipr-api==1.4.1
|
||||
|
||||
# homeassistant.components.flux_led
|
||||
flux_led==0.27.8
|
||||
flux_led==0.27.13
|
||||
|
||||
# homeassistant.components.homekit
|
||||
fnvhash==0.1.0
|
||||
@ -1172,7 +1172,7 @@ python-twitch-client==0.6.0
|
||||
python_awair==0.2.1
|
||||
|
||||
# homeassistant.components.tile
|
||||
pytile==5.2.4
|
||||
pytile==2021.12.0
|
||||
|
||||
# homeassistant.components.traccar
|
||||
pytraccar==0.10.0
|
||||
@ -1291,7 +1291,7 @@ smarthab==0.21
|
||||
smhi-pkg==1.0.15
|
||||
|
||||
# homeassistant.components.sonos
|
||||
soco==0.25.0
|
||||
soco==0.25.1
|
||||
|
||||
# homeassistant.components.solaredge
|
||||
solaredge==0.0.2
|
||||
@ -1450,7 +1450,7 @@ wolf_smartset==0.1.11
|
||||
xbox-webapi==2.0.11
|
||||
|
||||
# homeassistant.components.knx
|
||||
xknx==0.18.14
|
||||
xknx==0.18.15
|
||||
|
||||
# homeassistant.components.bluesound
|
||||
# homeassistant.components.fritz
|
||||
|
@ -1082,7 +1082,12 @@ async def test_entity_control(hass: HomeAssistant):
|
||||
chromecast.media_controller.seek.assert_called_once_with(123)
|
||||
|
||||
|
||||
async def test_entity_media_states(hass: HomeAssistant):
|
||||
# Some smart TV's with Google TV report "Netflix", not the Netflix app's ID
|
||||
@pytest.mark.parametrize(
|
||||
"app_id, state_no_media",
|
||||
[(pychromecast.APP_YOUTUBE, "idle"), ("Netflix", "playing")],
|
||||
)
|
||||
async def test_entity_media_states(hass: HomeAssistant, app_id, state_no_media):
|
||||
"""Test various entity media states."""
|
||||
entity_id = "media_player.speaker"
|
||||
reg = er.async_get(hass)
|
||||
@ -1090,7 +1095,7 @@ async def test_entity_media_states(hass: HomeAssistant):
|
||||
info = get_fake_chromecast_info()
|
||||
|
||||
chromecast, _ = await async_setup_media_player_cast(hass, info)
|
||||
_, conn_status_cb, media_status_cb = get_status_callbacks(chromecast)
|
||||
cast_status_cb, conn_status_cb, media_status_cb = get_status_callbacks(chromecast)
|
||||
|
||||
connection_status = MagicMock()
|
||||
connection_status.status = "CONNECTED"
|
||||
@ -1103,6 +1108,15 @@ async def test_entity_media_states(hass: HomeAssistant):
|
||||
assert state.state == "off"
|
||||
assert entity_id == reg.async_get_entity_id("media_player", "cast", str(info.uuid))
|
||||
|
||||
# App id updated, but no media status
|
||||
chromecast.app_id = app_id
|
||||
cast_status = MagicMock()
|
||||
cast_status_cb(cast_status)
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get(entity_id)
|
||||
assert state.state == state_no_media
|
||||
|
||||
# Got media status
|
||||
media_status = MagicMock(images=None)
|
||||
media_status.player_is_playing = True
|
||||
media_status_cb(media_status)
|
||||
@ -1124,15 +1138,23 @@ async def test_entity_media_states(hass: HomeAssistant):
|
||||
state = hass.states.get(entity_id)
|
||||
assert state.state == "idle"
|
||||
|
||||
media_status.player_is_idle = False
|
||||
chromecast.is_idle = True
|
||||
media_status_cb(media_status)
|
||||
# No media status, app is still running
|
||||
media_status_cb(None)
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get(entity_id)
|
||||
assert state.state == state_no_media
|
||||
|
||||
# App no longer running
|
||||
chromecast.app_id = pychromecast.IDLE_APP_ID
|
||||
cast_status = MagicMock()
|
||||
cast_status_cb(cast_status)
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get(entity_id)
|
||||
assert state.state == "off"
|
||||
|
||||
# No cast status
|
||||
chromecast.is_idle = False
|
||||
media_status_cb(media_status)
|
||||
cast_status_cb(None)
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get(entity_id)
|
||||
assert state.state == "unknown"
|
||||
|
@ -399,6 +399,20 @@ async def test_light_state_change(hass, aioclient_mock, mock_deconz_websocket):
|
||||
"xy": (0.411, 0.351),
|
||||
},
|
||||
),
|
||||
( # Turn on light without transition time
|
||||
{
|
||||
"light_on": True,
|
||||
"service": SERVICE_TURN_ON,
|
||||
"call": {
|
||||
ATTR_ENTITY_ID: "light.hue_go",
|
||||
ATTR_TRANSITION: 0,
|
||||
},
|
||||
},
|
||||
{
|
||||
"on": True,
|
||||
"transitiontime": 0,
|
||||
},
|
||||
),
|
||||
( # Turn on light with short color loop
|
||||
{
|
||||
"light_on": False,
|
||||
@ -453,6 +467,22 @@ async def test_light_state_change(hass, aioclient_mock, mock_deconz_websocket):
|
||||
"alert": "select",
|
||||
},
|
||||
),
|
||||
( # Turn off light without transition time
|
||||
{
|
||||
"light_on": True,
|
||||
"service": SERVICE_TURN_OFF,
|
||||
"call": {
|
||||
ATTR_ENTITY_ID: "light.hue_go",
|
||||
ATTR_TRANSITION: 0,
|
||||
ATTR_FLASH: FLASH_SHORT,
|
||||
},
|
||||
},
|
||||
{
|
||||
"bri": 0,
|
||||
"transitiontime": 0,
|
||||
"alert": "select",
|
||||
},
|
||||
),
|
||||
( # Turn off light with long flashing
|
||||
{
|
||||
"light_on": True,
|
||||
|
@ -25,7 +25,7 @@ async def test_hue_event(hass, mock_bridge_v2, v2_resources_test_data):
|
||||
|
||||
# Emit button update event
|
||||
btn_event = {
|
||||
"button": {"last_event": "short_release"},
|
||||
"button": {"last_event": "initial_press"},
|
||||
"id": "c658d3d8-a013-4b81-8ac6-78b248537e70",
|
||||
"metadata": {"control_id": 1},
|
||||
"type": "button",
|
||||
|
@ -110,16 +110,16 @@ async def test_light_turn_on_service(hass, mock_bridge_v2, v2_resources_test_dat
|
||||
assert test_light.attributes["color_mode"] == COLOR_MODE_COLOR_TEMP
|
||||
assert test_light.attributes["brightness"] == 255
|
||||
|
||||
# test again with sending transition
|
||||
# test again with sending transition with 250ms which should round up to 200ms
|
||||
await hass.services.async_call(
|
||||
"light",
|
||||
"turn_on",
|
||||
{"entity_id": test_light_id, "brightness_pct": 50, "transition": 6},
|
||||
{"entity_id": test_light_id, "brightness_pct": 50, "transition": 0.25},
|
||||
blocking=True,
|
||||
)
|
||||
assert len(mock_bridge_v2.mock_requests) == 2
|
||||
assert mock_bridge_v2.mock_requests[1]["json"]["on"]["on"] is True
|
||||
assert mock_bridge_v2.mock_requests[1]["json"]["dynamics"]["duration"] == 6000
|
||||
assert mock_bridge_v2.mock_requests[1]["json"]["dynamics"]["duration"] == 200
|
||||
|
||||
# test again with sending flash/alert
|
||||
await hass.services.async_call(
|
||||
@ -170,12 +170,12 @@ async def test_light_turn_off_service(hass, mock_bridge_v2, v2_resources_test_da
|
||||
await hass.services.async_call(
|
||||
"light",
|
||||
"turn_off",
|
||||
{"entity_id": test_light_id, "transition": 6},
|
||||
{"entity_id": test_light_id, "transition": 0.25},
|
||||
blocking=True,
|
||||
)
|
||||
assert len(mock_bridge_v2.mock_requests) == 2
|
||||
assert mock_bridge_v2.mock_requests[1]["json"]["on"]["on"] is False
|
||||
assert mock_bridge_v2.mock_requests[1]["json"]["dynamics"]["duration"] == 6000
|
||||
assert mock_bridge_v2.mock_requests[1]["json"]["dynamics"]["duration"] == 200
|
||||
|
||||
|
||||
async def test_light_added(hass, mock_bridge_v2):
|
||||
@ -310,7 +310,7 @@ async def test_grouped_lights(hass, mock_bridge_v2, v2_resources_test_data):
|
||||
"entity_id": test_light_id,
|
||||
"brightness_pct": 100,
|
||||
"xy_color": (0.123, 0.123),
|
||||
"transition": 6,
|
||||
"transition": 0.25,
|
||||
},
|
||||
blocking=True,
|
||||
)
|
||||
@ -325,7 +325,7 @@ async def test_grouped_lights(hass, mock_bridge_v2, v2_resources_test_data):
|
||||
assert mock_bridge_v2.mock_requests[index]["json"]["color"]["xy"]["x"] == 0.123
|
||||
assert mock_bridge_v2.mock_requests[index]["json"]["color"]["xy"]["y"] == 0.123
|
||||
assert (
|
||||
mock_bridge_v2.mock_requests[index]["json"]["dynamics"]["duration"] == 6000
|
||||
mock_bridge_v2.mock_requests[index]["json"]["dynamics"]["duration"] == 200
|
||||
)
|
||||
|
||||
# Now generate update events by emitting the json we've sent as incoming events
|
||||
@ -374,7 +374,7 @@ async def test_grouped_lights(hass, mock_bridge_v2, v2_resources_test_data):
|
||||
"turn_off",
|
||||
{
|
||||
"entity_id": test_light_id,
|
||||
"transition": 6,
|
||||
"transition": 0.25,
|
||||
},
|
||||
blocking=True,
|
||||
)
|
||||
@ -384,5 +384,5 @@ async def test_grouped_lights(hass, mock_bridge_v2, v2_resources_test_data):
|
||||
for index in range(0, 3):
|
||||
assert mock_bridge_v2.mock_requests[index]["json"]["on"]["on"] is False
|
||||
assert (
|
||||
mock_bridge_v2.mock_requests[index]["json"]["dynamics"]["duration"] == 6000
|
||||
mock_bridge_v2.mock_requests[index]["json"]["dynamics"]["duration"] == 200
|
||||
)
|
||||
|
@ -77,13 +77,13 @@ async def test_scene_turn_on_service(hass, mock_bridge_v2, v2_resources_test_dat
|
||||
await hass.services.async_call(
|
||||
"scene",
|
||||
"turn_on",
|
||||
{"entity_id": test_entity_id, "transition": 6},
|
||||
{"entity_id": test_entity_id, "transition": 0.25},
|
||||
blocking=True,
|
||||
)
|
||||
assert len(mock_bridge_v2.mock_requests) == 2
|
||||
assert mock_bridge_v2.mock_requests[1]["json"]["recall"] == {
|
||||
"action": "active",
|
||||
"duration": 6000,
|
||||
"duration": 200,
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,4 +1,6 @@
|
||||
"""Tests for the pvpc_hourly_pricing integration."""
|
||||
from http import HTTPStatus
|
||||
|
||||
import pytest
|
||||
|
||||
from homeassistant.components.pvpc_hourly_pricing import ATTR_TARIFF, DOMAIN
|
||||
@ -11,10 +13,7 @@ from homeassistant.const import (
|
||||
from tests.common import load_fixture
|
||||
from tests.test_util.aiohttp import AiohttpClientMocker
|
||||
|
||||
FIXTURE_JSON_DATA_2019_10_26 = "PVPC_CURV_DD_2019_10_26.json"
|
||||
FIXTURE_JSON_DATA_2019_10_27 = "PVPC_CURV_DD_2019_10_27.json"
|
||||
FIXTURE_JSON_DATA_2019_10_29 = "PVPC_CURV_DD_2019_10_29.json"
|
||||
FIXTURE_JSON_DATA_2021_06_01 = "PVPC_CURV_DD_2021_06_01.json"
|
||||
FIXTURE_JSON_DATA_2021_06_01 = "PVPC_DATA_2021_06_01.json"
|
||||
|
||||
|
||||
def check_valid_state(state, tariff: str, value=None, key_attr=None):
|
||||
@ -27,7 +26,7 @@ def check_valid_state(state, tariff: str, value=None, key_attr=None):
|
||||
try:
|
||||
_ = float(state.state)
|
||||
# safety margins for current electricity price (it shouldn't be out of [0, 0.2])
|
||||
assert -0.1 < float(state.state) < 0.3
|
||||
assert -0.1 < float(state.state) < 0.5
|
||||
assert state.attributes[ATTR_TARIFF] == tariff
|
||||
except ValueError:
|
||||
pass
|
||||
@ -43,28 +42,22 @@ def check_valid_state(state, tariff: str, value=None, key_attr=None):
|
||||
@pytest.fixture
|
||||
def pvpc_aioclient_mock(aioclient_mock: AiohttpClientMocker):
|
||||
"""Create a mock config entry."""
|
||||
aioclient_mock.get(
|
||||
"https://api.esios.ree.es/archives/70/download_json?locale=es&date=2019-10-26",
|
||||
text=load_fixture(f"{DOMAIN}/{FIXTURE_JSON_DATA_2019_10_26}"),
|
||||
)
|
||||
aioclient_mock.get(
|
||||
"https://api.esios.ree.es/archives/70/download_json?locale=es&date=2019-10-27",
|
||||
text=load_fixture(f"{DOMAIN}/{FIXTURE_JSON_DATA_2019_10_27}"),
|
||||
)
|
||||
# missing day
|
||||
aioclient_mock.get(
|
||||
"https://api.esios.ree.es/archives/70/download_json?locale=es&date=2019-10-28",
|
||||
text='{"message":"No values for specified archive"}',
|
||||
)
|
||||
aioclient_mock.get(
|
||||
"https://api.esios.ree.es/archives/70/download_json?locale=es&date=2019-10-29",
|
||||
text=load_fixture(f"{DOMAIN}/{FIXTURE_JSON_DATA_2019_10_29}"),
|
||||
)
|
||||
|
||||
mask_url = "https://apidatos.ree.es/es/datos/mercados/precios-mercados-tiempo-real"
|
||||
mask_url += "?time_trunc=hour&geo_ids={0}&start_date={1}T00:00&end_date={1}T23:59"
|
||||
# new format for prices >= 2021-06-01
|
||||
sample_data = load_fixture(f"{DOMAIN}/{FIXTURE_JSON_DATA_2021_06_01}")
|
||||
|
||||
# tariff variant with different geo_ids=8744
|
||||
aioclient_mock.get(mask_url.format(8741, "2021-06-01"), text=sample_data)
|
||||
aioclient_mock.get(mask_url.format(8744, "2021-06-01"), text=sample_data)
|
||||
# simulate missing day
|
||||
aioclient_mock.get(
|
||||
"https://api.esios.ree.es/archives/70/download_json?locale=es&date=2021-06-01",
|
||||
text=load_fixture(f"{DOMAIN}/{FIXTURE_JSON_DATA_2021_06_01}"),
|
||||
mask_url.format(8741, "2021-06-02"),
|
||||
status=HTTPStatus.BAD_GATEWAY,
|
||||
text=(
|
||||
'{"errors":[{"code":502,"status":"502","title":"Bad response from ESIOS",'
|
||||
'"detail":"There are no data for the selected filters."}]}'
|
||||
),
|
||||
)
|
||||
|
||||
return aioclient_mock
|
||||
|
@ -1,820 +0,0 @@
|
||||
{
|
||||
"PVPC": [
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "00-01",
|
||||
"GEN": "114,20",
|
||||
"NOC": "65,17",
|
||||
"VHC": "69,02",
|
||||
"COFGEN": "0,000087148314000000",
|
||||
"COFNOC": "0,000135978057000000",
|
||||
"COFVHC": "0,000151138804000000",
|
||||
"PMHGEN": "59,56",
|
||||
"PMHNOC": "57,22",
|
||||
"PMHVHC": "59,81",
|
||||
"SAHGEN": "1,96",
|
||||
"SAHNOC": "1,89",
|
||||
"SAHVHC": "1,97",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,14",
|
||||
"INTGEN": "0,93",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,94",
|
||||
"PCAPGEN": "5,54",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "1,31",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "2,01",
|
||||
"CCVNOC": "1,86",
|
||||
"CCVVHC": "1,95"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "01-02",
|
||||
"GEN": "111,01",
|
||||
"NOC": "62,10",
|
||||
"VHC": "59,03",
|
||||
"COFGEN": "0,000072922194000000",
|
||||
"COFNOC": "0,000124822445000000",
|
||||
"COFVHC": "0,000160597191000000",
|
||||
"PMHGEN": "56,23",
|
||||
"PMHNOC": "54,03",
|
||||
"PMHVHC": "52,62",
|
||||
"SAHGEN": "2,14",
|
||||
"SAHNOC": "2,05",
|
||||
"SAHVHC": "2,00",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,14",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,94",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,56",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "0,72",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,96",
|
||||
"CCVNOC": "1,82",
|
||||
"CCVVHC": "1,77"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "02-03",
|
||||
"GEN": "105,17",
|
||||
"NOC": "56,48",
|
||||
"VHC": "53,56",
|
||||
"COFGEN": "0,000064100056000000",
|
||||
"COFNOC": "0,000117356595000000",
|
||||
"COFVHC": "0,000158787037000000",
|
||||
"PMHGEN": "50,26",
|
||||
"PMHNOC": "48,29",
|
||||
"PMHVHC": "47,03",
|
||||
"SAHGEN": "2,35",
|
||||
"SAHNOC": "2,26",
|
||||
"SAHVHC": "2,20",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,94",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,55",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "0,72",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,87",
|
||||
"CCVNOC": "1,73",
|
||||
"CCVVHC": "1,68"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "03-04",
|
||||
"GEN": "102,45",
|
||||
"NOC": "53,87",
|
||||
"VHC": "51,02",
|
||||
"COFGEN": "0,000059549798000000",
|
||||
"COFNOC": "0,000113408113000000",
|
||||
"COFVHC": "0,000152391581000000",
|
||||
"PMHGEN": "47,42",
|
||||
"PMHNOC": "45,57",
|
||||
"PMHVHC": "44,38",
|
||||
"SAHGEN": "2,51",
|
||||
"SAHNOC": "2,41",
|
||||
"SAHVHC": "2,35",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,14",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,94",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,56",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "0,72",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,83",
|
||||
"CCVNOC": "1,69",
|
||||
"CCVVHC": "1,65"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "04-05",
|
||||
"GEN": "102,15",
|
||||
"NOC": "53,58",
|
||||
"VHC": "50,73",
|
||||
"COFGEN": "0,000057296575000000",
|
||||
"COFNOC": "0,000111308472000000",
|
||||
"COFVHC": "0,000145270809000000",
|
||||
"PMHGEN": "47,05",
|
||||
"PMHNOC": "45,21",
|
||||
"PMHVHC": "44,03",
|
||||
"SAHGEN": "2,58",
|
||||
"SAHNOC": "2,48",
|
||||
"SAHVHC": "2,41",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,14",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,94",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,56",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "0,72",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,83",
|
||||
"CCVNOC": "1,69",
|
||||
"CCVVHC": "1,64"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "05-06",
|
||||
"GEN": "101,62",
|
||||
"NOC": "53,13",
|
||||
"VHC": "50,34",
|
||||
"COFGEN": "0,000057285870000000",
|
||||
"COFNOC": "0,000111061995000000",
|
||||
"COFVHC": "0,000141535570000000",
|
||||
"PMHGEN": "46,55",
|
||||
"PMHNOC": "44,76",
|
||||
"PMHVHC": "43,63",
|
||||
"SAHGEN": "2,60",
|
||||
"SAHNOC": "2,50",
|
||||
"SAHVHC": "2,43",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,93",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,87",
|
||||
"PCAPGEN": "5,54",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "0,72",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,82",
|
||||
"CCVNOC": "1,68",
|
||||
"CCVVHC": "1,64"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "06-07",
|
||||
"GEN": "102,36",
|
||||
"NOC": "53,90",
|
||||
"VHC": "51,08",
|
||||
"COFGEN": "0,000060011439000000",
|
||||
"COFNOC": "0,000113191071000000",
|
||||
"COFVHC": "0,000139395926000000",
|
||||
"PMHGEN": "46,58",
|
||||
"PMHNOC": "44,82",
|
||||
"PMHVHC": "43,69",
|
||||
"SAHGEN": "3,32",
|
||||
"SAHNOC": "3,20",
|
||||
"SAHVHC": "3,12",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,93",
|
||||
"INTNOC": "0,89",
|
||||
"INTVHC": "0,87",
|
||||
"PCAPGEN": "5,51",
|
||||
"PCAPNOC": "0,92",
|
||||
"PCAPVHC": "0,72",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,82",
|
||||
"CCVNOC": "1,69",
|
||||
"CCVVHC": "1,64"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "07-08",
|
||||
"GEN": "106,73",
|
||||
"NOC": "58,10",
|
||||
"VHC": "61,55",
|
||||
"COFGEN": "0,000067624746000000",
|
||||
"COFNOC": "0,000113073036000000",
|
||||
"COFVHC": "0,000130165590000000",
|
||||
"PMHGEN": "50,24",
|
||||
"PMHNOC": "48,34",
|
||||
"PMHVHC": "50,45",
|
||||
"SAHGEN": "3,98",
|
||||
"SAHNOC": "3,83",
|
||||
"SAHVHC": "4,00",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,93",
|
||||
"INTNOC": "0,89",
|
||||
"INTVHC": "0,93",
|
||||
"PCAPGEN": "5,50",
|
||||
"PCAPNOC": "0,92",
|
||||
"PCAPVHC": "1,30",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,89",
|
||||
"CCVNOC": "1,75",
|
||||
"CCVVHC": "1,83"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "08-09",
|
||||
"GEN": "107,75",
|
||||
"NOC": "59,43",
|
||||
"VHC": "62,66",
|
||||
"COFGEN": "0,000083194704000000",
|
||||
"COFNOC": "0,000083589950000000",
|
||||
"COFVHC": "0,000069841029000000",
|
||||
"PMHGEN": "51,74",
|
||||
"PMHNOC": "50,02",
|
||||
"PMHVHC": "51,97",
|
||||
"SAHGEN": "3,62",
|
||||
"SAHNOC": "3,50",
|
||||
"SAHVHC": "3,63",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,88",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,40",
|
||||
"PCAPNOC": "0,91",
|
||||
"PCAPVHC": "1,27",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,89",
|
||||
"CCVNOC": "1,76",
|
||||
"CCVVHC": "1,83"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "09-10",
|
||||
"GEN": "110,38",
|
||||
"NOC": "62,09",
|
||||
"VHC": "65,34",
|
||||
"COFGEN": "0,000105869478000000",
|
||||
"COFNOC": "0,000077963480000000",
|
||||
"COFVHC": "0,000057355982000000",
|
||||
"PMHGEN": "55,41",
|
||||
"PMHNOC": "53,64",
|
||||
"PMHVHC": "55,65",
|
||||
"SAHGEN": "2,60",
|
||||
"SAHNOC": "2,52",
|
||||
"SAHVHC": "2,61",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,90",
|
||||
"INTNOC": "0,87",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,36",
|
||||
"PCAPNOC": "0,90",
|
||||
"PCAPVHC": "1,26",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,92",
|
||||
"CCVNOC": "1,79",
|
||||
"CCVVHC": "1,86"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "10-11",
|
||||
"GEN": "108,10",
|
||||
"NOC": "60,00",
|
||||
"VHC": "63,02",
|
||||
"COFGEN": "0,000121833263000000",
|
||||
"COFNOC": "0,000085468800000000",
|
||||
"COFVHC": "0,000063770407000000",
|
||||
"PMHGEN": "53,39",
|
||||
"PMHNOC": "51,77",
|
||||
"PMHVHC": "53,58",
|
||||
"SAHGEN": "2,42",
|
||||
"SAHNOC": "2,34",
|
||||
"SAHVHC": "2,42",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,90",
|
||||
"INTNOC": "0,87",
|
||||
"INTVHC": "0,90",
|
||||
"PCAPGEN": "5,32",
|
||||
"PCAPNOC": "0,90",
|
||||
"PCAPVHC": "1,25",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,88",
|
||||
"CCVNOC": "1,76",
|
||||
"CCVVHC": "1,82"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "11-12",
|
||||
"GEN": "104,11",
|
||||
"NOC": "56,20",
|
||||
"VHC": "59,04",
|
||||
"COFGEN": "0,000125947995000000",
|
||||
"COFNOC": "0,000085228595000000",
|
||||
"COFVHC": "0,000064070840000000",
|
||||
"PMHGEN": "50,02",
|
||||
"PMHNOC": "48,54",
|
||||
"PMHVHC": "50,20",
|
||||
"SAHGEN": "1,89",
|
||||
"SAHNOC": "1,83",
|
||||
"SAHVHC": "1,90",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,89",
|
||||
"INTNOC": "0,87",
|
||||
"INTVHC": "0,90",
|
||||
"PCAPGEN": "5,31",
|
||||
"PCAPNOC": "0,90",
|
||||
"PCAPVHC": "1,25",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,81",
|
||||
"CCVNOC": "1,70",
|
||||
"CCVVHC": "1,76"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "12-13",
|
||||
"GEN": "103,61",
|
||||
"NOC": "55,65",
|
||||
"VHC": "58,52",
|
||||
"COFGEN": "0,000128302145000000",
|
||||
"COFNOC": "0,000082279443000000",
|
||||
"COFVHC": "0,000063904657000000",
|
||||
"PMHGEN": "49,50",
|
||||
"PMHNOC": "47,99",
|
||||
"PMHVHC": "49,67",
|
||||
"SAHGEN": "1,90",
|
||||
"SAHNOC": "1,84",
|
||||
"SAHVHC": "1,90",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,90",
|
||||
"INTNOC": "0,87",
|
||||
"INTVHC": "0,90",
|
||||
"PCAPGEN": "5,32",
|
||||
"PCAPNOC": "0,90",
|
||||
"PCAPVHC": "1,25",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,81",
|
||||
"CCVNOC": "1,69",
|
||||
"CCVVHC": "1,75"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "13-14",
|
||||
"GEN": "104,03",
|
||||
"NOC": "122,60",
|
||||
"VHC": "122,60",
|
||||
"COFGEN": "0,000134270665000000",
|
||||
"COFNOC": "0,000080726428000000",
|
||||
"COFVHC": "0,000063976543000000",
|
||||
"PMHGEN": "49,98",
|
||||
"PMHNOC": "50,33",
|
||||
"PMHVHC": "50,33",
|
||||
"SAHGEN": "1,85",
|
||||
"SAHNOC": "1,87",
|
||||
"SAHVHC": "1,87",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,89",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,90",
|
||||
"PCAPGEN": "5,30",
|
||||
"PCAPNOC": "5,50",
|
||||
"PCAPVHC": "5,50",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "1,81",
|
||||
"CCVNOC": "1,83",
|
||||
"CCVVHC": "1,83"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "14-15",
|
||||
"GEN": "103,44",
|
||||
"NOC": "122,00",
|
||||
"VHC": "122,00",
|
||||
"COFGEN": "0,000130580837000000",
|
||||
"COFNOC": "0,000079392022000000",
|
||||
"COFVHC": "0,000064422150000000",
|
||||
"PMHGEN": "49,25",
|
||||
"PMHNOC": "49,60",
|
||||
"PMHVHC": "49,60",
|
||||
"SAHGEN": "1,97",
|
||||
"SAHNOC": "1,98",
|
||||
"SAHVHC": "1,98",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,90",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,90",
|
||||
"PCAPGEN": "5,32",
|
||||
"PCAPNOC": "5,52",
|
||||
"PCAPVHC": "5,52",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "1,81",
|
||||
"CCVNOC": "1,82",
|
||||
"CCVVHC": "1,82"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "15-16",
|
||||
"GEN": "100,57",
|
||||
"NOC": "119,16",
|
||||
"VHC": "119,16",
|
||||
"COFGEN": "0,000114850139000000",
|
||||
"COFNOC": "0,000070924506000000",
|
||||
"COFVHC": "0,000056150579000000",
|
||||
"PMHGEN": "46,19",
|
||||
"PMHNOC": "46,55",
|
||||
"PMHVHC": "46,55",
|
||||
"SAHGEN": "2,15",
|
||||
"SAHNOC": "2,17",
|
||||
"SAHVHC": "2,17",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,90",
|
||||
"INTNOC": "0,91",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,36",
|
||||
"PCAPNOC": "5,57",
|
||||
"PCAPVHC": "5,57",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "1,77",
|
||||
"CCVNOC": "1,79",
|
||||
"CCVVHC": "1,79"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "16-17",
|
||||
"GEN": "99,90",
|
||||
"NOC": "118,48",
|
||||
"VHC": "118,48",
|
||||
"COFGEN": "0,000105915899000000",
|
||||
"COFNOC": "0,000065274280000000",
|
||||
"COFVHC": "0,000051268616000000",
|
||||
"PMHGEN": "45,44",
|
||||
"PMHNOC": "45,80",
|
||||
"PMHVHC": "45,80",
|
||||
"SAHGEN": "2,25",
|
||||
"SAHNOC": "2,27",
|
||||
"SAHVHC": "2,27",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,90",
|
||||
"INTNOC": "0,91",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,35",
|
||||
"PCAPNOC": "5,56",
|
||||
"PCAPVHC": "5,56",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "1,76",
|
||||
"CCVNOC": "1,78",
|
||||
"CCVVHC": "1,78"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "17-18",
|
||||
"GEN": "102,97",
|
||||
"NOC": "121,53",
|
||||
"VHC": "121,53",
|
||||
"COFGEN": "0,000104178581000000",
|
||||
"COFNOC": "0,000063611672000000",
|
||||
"COFVHC": "0,000049947652000000",
|
||||
"PMHGEN": "48,62",
|
||||
"PMHNOC": "48,96",
|
||||
"PMHVHC": "48,96",
|
||||
"SAHGEN": "2,14",
|
||||
"SAHNOC": "2,16",
|
||||
"SAHVHC": "2,16",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,90",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,90",
|
||||
"PCAPGEN": "5,33",
|
||||
"PCAPNOC": "5,53",
|
||||
"PCAPVHC": "5,53",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "1,80",
|
||||
"CCVNOC": "1,82",
|
||||
"CCVVHC": "1,82"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "18-19",
|
||||
"GEN": "107,71",
|
||||
"NOC": "126,30",
|
||||
"VHC": "126,30",
|
||||
"COFGEN": "0,000106669089000000",
|
||||
"COFNOC": "0,000070000350000000",
|
||||
"COFVHC": "0,000061100876000000",
|
||||
"PMHGEN": "53,37",
|
||||
"PMHNOC": "53,74",
|
||||
"PMHVHC": "53,74",
|
||||
"SAHGEN": "2,05",
|
||||
"SAHNOC": "2,06",
|
||||
"SAHVHC": "2,06",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,90",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,90",
|
||||
"PCAPGEN": "5,33",
|
||||
"PCAPNOC": "5,53",
|
||||
"PCAPVHC": "5,53",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "1,87",
|
||||
"CCVNOC": "1,89",
|
||||
"CCVVHC": "1,89"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "19-20",
|
||||
"GEN": "118,75",
|
||||
"NOC": "137,49",
|
||||
"VHC": "137,49",
|
||||
"COFGEN": "0,000115010612000000",
|
||||
"COFNOC": "0,000095780287000000",
|
||||
"COFVHC": "0,000092687680000000",
|
||||
"PMHGEN": "64,21",
|
||||
"PMHNOC": "64,71",
|
||||
"PMHVHC": "64,71",
|
||||
"SAHGEN": "2,07",
|
||||
"SAHNOC": "2,08",
|
||||
"SAHVHC": "2,08",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,90",
|
||||
"INTNOC": "0,91",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,35",
|
||||
"PCAPNOC": "5,55",
|
||||
"PCAPVHC": "5,55",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "2,04",
|
||||
"CCVNOC": "2,06",
|
||||
"CCVVHC": "2,06"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "20-21",
|
||||
"GEN": "124,00",
|
||||
"NOC": "142,78",
|
||||
"VHC": "142,78",
|
||||
"COFGEN": "0,000129085428000000",
|
||||
"COFNOC": "0,000144302922000000",
|
||||
"COFVHC": "0,000185612441000000",
|
||||
"PMHGEN": "69,13",
|
||||
"PMHNOC": "69,67",
|
||||
"PMHVHC": "69,67",
|
||||
"SAHGEN": "2,30",
|
||||
"SAHNOC": "2,32",
|
||||
"SAHVHC": "2,32",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,90",
|
||||
"INTNOC": "0,91",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,36",
|
||||
"PCAPNOC": "5,56",
|
||||
"PCAPVHC": "5,56",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "2,12",
|
||||
"CCVNOC": "2,14",
|
||||
"CCVVHC": "2,14"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "21-22",
|
||||
"GEN": "124,16",
|
||||
"NOC": "143,00",
|
||||
"VHC": "143,00",
|
||||
"COFGEN": "0,000133109692000000",
|
||||
"COFNOC": "0,000151101318000000",
|
||||
"COFVHC": "0,000197574745000000",
|
||||
"PMHGEN": "68,50",
|
||||
"PMHNOC": "69,09",
|
||||
"PMHVHC": "69,09",
|
||||
"SAHGEN": "3,05",
|
||||
"SAHNOC": "3,07",
|
||||
"SAHVHC": "3,07",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,91",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,38",
|
||||
"PCAPNOC": "5,60",
|
||||
"PCAPVHC": "5,60",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "2,13",
|
||||
"CCVNOC": "2,15",
|
||||
"CCVVHC": "2,15"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "22-23",
|
||||
"GEN": "120,30",
|
||||
"NOC": "139,04",
|
||||
"VHC": "139,04",
|
||||
"COFGEN": "0,000120157209000000",
|
||||
"COFNOC": "0,000148137882000000",
|
||||
"COFVHC": "0,000194906294000000",
|
||||
"PMHGEN": "64,33",
|
||||
"PMHNOC": "64,82",
|
||||
"PMHVHC": "64,82",
|
||||
"SAHGEN": "3,38",
|
||||
"SAHNOC": "3,41",
|
||||
"SAHVHC": "3,41",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,92",
|
||||
"INTVHC": "0,92",
|
||||
"PCAPGEN": "5,42",
|
||||
"PCAPNOC": "5,63",
|
||||
"PCAPVHC": "5,63",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "2,08",
|
||||
"CCVNOC": "2,10",
|
||||
"CCVVHC": "2,10"
|
||||
},
|
||||
{
|
||||
"Dia": "26/10/2019",
|
||||
"Hora": "23-24",
|
||||
"GEN": "118,05",
|
||||
"NOC": "69,05",
|
||||
"VHC": "72,93",
|
||||
"COFGEN": "0,000103870556000000",
|
||||
"COFNOC": "0,000146233245000000",
|
||||
"COFVHC": "0,000182184931000000",
|
||||
"PMHGEN": "61,54",
|
||||
"PMHNOC": "59,25",
|
||||
"PMHVHC": "61,80",
|
||||
"SAHGEN": "3,85",
|
||||
"SAHNOC": "3,71",
|
||||
"SAHVHC": "3,87",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,92",
|
||||
"INTNOC": "0,89",
|
||||
"INTVHC": "0,93",
|
||||
"PCAPGEN": "5,49",
|
||||
"PCAPNOC": "0,92",
|
||||
"PCAPVHC": "1,29",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "2,05",
|
||||
"CCVNOC": "1,91",
|
||||
"CCVVHC": "2,00"
|
||||
}
|
||||
]
|
||||
}
|
@ -1,854 +0,0 @@
|
||||
{
|
||||
"PVPC": [
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "00-01",
|
||||
"GEN": "115,15",
|
||||
"NOC": "65,95",
|
||||
"VHC": "69,94",
|
||||
"COFGEN": "0,000083408754000000",
|
||||
"COFNOC": "0,000125204015000000",
|
||||
"COFVHC": "0,000143740251000000",
|
||||
"PMHGEN": "59,13",
|
||||
"PMHNOC": "56,72",
|
||||
"PMHVHC": "59,37",
|
||||
"SAHGEN": "3,28",
|
||||
"SAHNOC": "3,14",
|
||||
"SAHVHC": "3,29",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,14",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,14",
|
||||
"INTGEN": "0,94",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,94",
|
||||
"PCAPGEN": "5,58",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "1,32",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "2,03",
|
||||
"CCVNOC": "1,88",
|
||||
"CCVVHC": "1,97"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "01-02",
|
||||
"GEN": "109,63",
|
||||
"NOC": "60,60",
|
||||
"VHC": "57,48",
|
||||
"COFGEN": "0,000069962863000000",
|
||||
"COFNOC": "0,000114629494000000",
|
||||
"COFVHC": "0,000147622130000000",
|
||||
"PMHGEN": "53,21",
|
||||
"PMHNOC": "51,01",
|
||||
"PMHVHC": "49,61",
|
||||
"SAHGEN": "3,72",
|
||||
"SAHNOC": "3,57",
|
||||
"SAHVHC": "3,47",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,14",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,95",
|
||||
"INTNOC": "0,91",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,61",
|
||||
"PCAPNOC": "0,94",
|
||||
"PCAPVHC": "0,73",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,95",
|
||||
"CCVNOC": "1,80",
|
||||
"CCVVHC": "1,75"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "02-03",
|
||||
"GEN": "108,41",
|
||||
"NOC": "59,38",
|
||||
"VHC": "56,29",
|
||||
"COFGEN": "0,000065978330000000",
|
||||
"COFNOC": "0,000111216294000000",
|
||||
"COFVHC": "0,000145651145000000",
|
||||
"PMHGEN": "52,09",
|
||||
"PMHNOC": "49,90",
|
||||
"PMHVHC": "48,53",
|
||||
"SAHGEN": "3,62",
|
||||
"SAHNOC": "3,47",
|
||||
"SAHVHC": "3,37",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,14",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,95",
|
||||
"INTNOC": "0,91",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,63",
|
||||
"PCAPNOC": "0,94",
|
||||
"PCAPVHC": "0,73",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,93",
|
||||
"CCVNOC": "1,79",
|
||||
"CCVVHC": "1,73"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "03-04",
|
||||
"GEN": "108,22",
|
||||
"NOC": "59,31",
|
||||
"VHC": "56,27",
|
||||
"COFGEN": "0,000061999708000000",
|
||||
"COFNOC": "0,000107809474000000",
|
||||
"COFVHC": "0,000143671560000000",
|
||||
"PMHGEN": "51,88",
|
||||
"PMHNOC": "49,78",
|
||||
"PMHVHC": "48,45",
|
||||
"SAHGEN": "3,68",
|
||||
"SAHNOC": "3,53",
|
||||
"SAHVHC": "3,44",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,14",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,94",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,59",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "0,73",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,93",
|
||||
"CCVNOC": "1,78",
|
||||
"CCVVHC": "1,73"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "04-05",
|
||||
"GEN": "107,03",
|
||||
"NOC": "58,16",
|
||||
"VHC": "55,10",
|
||||
"COFGEN": "0,000057358428000000",
|
||||
"COFNOC": "0,000103595831000000",
|
||||
"COFVHC": "0,000139122535000000",
|
||||
"PMHGEN": "50,53",
|
||||
"PMHNOC": "48,48",
|
||||
"PMHVHC": "47,15",
|
||||
"SAHGEN": "3,85",
|
||||
"SAHNOC": "3,69",
|
||||
"SAHVHC": "3,59",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,14",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,94",
|
||||
"INTNOC": "0,91",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,60",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "0,73",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,91",
|
||||
"CCVNOC": "1,76",
|
||||
"CCVVHC": "1,71"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "05-06",
|
||||
"GEN": "104,79",
|
||||
"NOC": "56,01",
|
||||
"VHC": "53,06",
|
||||
"COFGEN": "0,000055060063000000",
|
||||
"COFNOC": "0,000101732765000000",
|
||||
"COFVHC": "0,000134441142000000",
|
||||
"PMHGEN": "48,28",
|
||||
"PMHNOC": "46,32",
|
||||
"PMHVHC": "45,08",
|
||||
"SAHGEN": "3,91",
|
||||
"SAHNOC": "3,75",
|
||||
"SAHVHC": "3,65",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,14",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,94",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,59",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "0,73",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,87",
|
||||
"CCVNOC": "1,73",
|
||||
"CCVVHC": "1,68"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "06-07",
|
||||
"GEN": "104,56",
|
||||
"NOC": "55,85",
|
||||
"VHC": "52,94",
|
||||
"COFGEN": "0,000054511300000000",
|
||||
"COFNOC": "0,000101250808000000",
|
||||
"COFVHC": "0,000131206727000000",
|
||||
"PMHGEN": "48,10",
|
||||
"PMHNOC": "46,18",
|
||||
"PMHVHC": "44,98",
|
||||
"SAHGEN": "3,90",
|
||||
"SAHNOC": "3,74",
|
||||
"SAHVHC": "3,65",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,14",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,94",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,57",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "0,72",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,87",
|
||||
"CCVNOC": "1,73",
|
||||
"CCVVHC": "1,68"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "07-08",
|
||||
"GEN": "107,72",
|
||||
"NOC": "58,93",
|
||||
"VHC": "55,95",
|
||||
"COFGEN": "0,000056191283000000",
|
||||
"COFNOC": "0,000102978398000000",
|
||||
"COFVHC": "0,000130073563000000",
|
||||
"PMHGEN": "50,23",
|
||||
"PMHNOC": "48,26",
|
||||
"PMHVHC": "47,01",
|
||||
"SAHGEN": "4,89",
|
||||
"SAHNOC": "4,70",
|
||||
"SAHVHC": "4,57",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,14",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,94",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,56",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "0,72",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,91",
|
||||
"CCVNOC": "1,77",
|
||||
"CCVVHC": "1,72"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "08-09",
|
||||
"GEN": "107,80",
|
||||
"NOC": "59,29",
|
||||
"VHC": "62,70",
|
||||
"COFGEN": "0,000060083432000000",
|
||||
"COFNOC": "0,000100348617000000",
|
||||
"COFVHC": "0,000118460190000000",
|
||||
"PMHGEN": "50,94",
|
||||
"PMHNOC": "49,13",
|
||||
"PMHVHC": "51,20",
|
||||
"SAHGEN": "4,38",
|
||||
"SAHNOC": "4,23",
|
||||
"SAHVHC": "4,40",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,92",
|
||||
"INTNOC": "0,89",
|
||||
"INTVHC": "0,93",
|
||||
"PCAPGEN": "5,47",
|
||||
"PCAPNOC": "0,92",
|
||||
"PCAPVHC": "1,29",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,90",
|
||||
"CCVNOC": "1,76",
|
||||
"CCVVHC": "1,84"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "09-10",
|
||||
"GEN": "106,74",
|
||||
"NOC": "58,40",
|
||||
"VHC": "61,63",
|
||||
"COFGEN": "0,000070236674000000",
|
||||
"COFNOC": "0,000071273888000000",
|
||||
"COFVHC": "0,000062511624000000",
|
||||
"PMHGEN": "50,00",
|
||||
"PMHNOC": "48,29",
|
||||
"PMHVHC": "50,22",
|
||||
"SAHGEN": "4,34",
|
||||
"SAHNOC": "4,20",
|
||||
"SAHVHC": "4,36",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,88",
|
||||
"INTVHC": "0,92",
|
||||
"PCAPGEN": "5,42",
|
||||
"PCAPNOC": "0,91",
|
||||
"PCAPVHC": "1,28",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,87",
|
||||
"CCVNOC": "1,74",
|
||||
"CCVVHC": "1,82"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "10-11",
|
||||
"GEN": "106,13",
|
||||
"NOC": "57,81",
|
||||
"VHC": "61,02",
|
||||
"COFGEN": "0,000089379429000000",
|
||||
"COFNOC": "0,000066131351000000",
|
||||
"COFVHC": "0,000053107930000000",
|
||||
"PMHGEN": "50,32",
|
||||
"PMHNOC": "48,60",
|
||||
"PMHVHC": "50,54",
|
||||
"SAHGEN": "3,43",
|
||||
"SAHNOC": "3,31",
|
||||
"SAHVHC": "3,44",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,88",
|
||||
"INTVHC": "0,92",
|
||||
"PCAPGEN": "5,42",
|
||||
"PCAPNOC": "0,91",
|
||||
"PCAPVHC": "1,28",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,86",
|
||||
"CCVNOC": "1,73",
|
||||
"CCVVHC": "1,81"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "11-12",
|
||||
"GEN": "105,00",
|
||||
"NOC": "56,78",
|
||||
"VHC": "59,91",
|
||||
"COFGEN": "0,000106229062000000",
|
||||
"COFNOC": "0,000075658481000000",
|
||||
"COFVHC": "0,000058816566000000",
|
||||
"PMHGEN": "50,34",
|
||||
"PMHNOC": "48,65",
|
||||
"PMHVHC": "50,56",
|
||||
"SAHGEN": "2,33",
|
||||
"SAHNOC": "2,25",
|
||||
"SAHVHC": "2,34",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,88",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,39",
|
||||
"PCAPNOC": "0,91",
|
||||
"PCAPVHC": "1,27",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,84",
|
||||
"CCVNOC": "1,72",
|
||||
"CCVVHC": "1,79"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "12-13",
|
||||
"GEN": "105,07",
|
||||
"NOC": "56,79",
|
||||
"VHC": "59,92",
|
||||
"COFGEN": "0,000113739886000000",
|
||||
"COFNOC": "0,000079251893000000",
|
||||
"COFVHC": "0,000061868784000000",
|
||||
"PMHGEN": "50,41",
|
||||
"PMHNOC": "48,69",
|
||||
"PMHVHC": "50,59",
|
||||
"SAHGEN": "2,31",
|
||||
"SAHNOC": "2,23",
|
||||
"SAHVHC": "2,32",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,88",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,40",
|
||||
"PCAPNOC": "0,91",
|
||||
"PCAPVHC": "1,27",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,85",
|
||||
"CCVNOC": "1,72",
|
||||
"CCVVHC": "1,79"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "13-14",
|
||||
"GEN": "104,67",
|
||||
"NOC": "123,29",
|
||||
"VHC": "59,59",
|
||||
"COFGEN": "0,000116885572000000",
|
||||
"COFNOC": "0,000077561607000000",
|
||||
"COFVHC": "0,000061189779000000",
|
||||
"PMHGEN": "50,08",
|
||||
"PMHNOC": "50,47",
|
||||
"PMHVHC": "50,30",
|
||||
"SAHGEN": "2,29",
|
||||
"SAHNOC": "2,31",
|
||||
"SAHVHC": "2,30",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,90",
|
||||
"INTNOC": "0,91",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,37",
|
||||
"PCAPNOC": "5,57",
|
||||
"PCAPVHC": "1,27",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,83",
|
||||
"CCVNOC": "1,85",
|
||||
"CCVVHC": "1,78"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "14-15",
|
||||
"GEN": "107,41",
|
||||
"NOC": "126,05",
|
||||
"VHC": "126,05",
|
||||
"COFGEN": "0,000122253070000000",
|
||||
"COFNOC": "0,000076034460000000",
|
||||
"COFVHC": "0,000059795888000000",
|
||||
"PMHGEN": "52,87",
|
||||
"PMHNOC": "53,28",
|
||||
"PMHVHC": "53,28",
|
||||
"SAHGEN": "2,20",
|
||||
"SAHNOC": "2,22",
|
||||
"SAHVHC": "2,22",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,90",
|
||||
"INTNOC": "0,91",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,37",
|
||||
"PCAPNOC": "5,57",
|
||||
"PCAPVHC": "5,57",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "1,87",
|
||||
"CCVNOC": "1,89",
|
||||
"CCVVHC": "1,89"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "15-16",
|
||||
"GEN": "108,36",
|
||||
"NOC": "127,06",
|
||||
"VHC": "127,06",
|
||||
"COFGEN": "0,000120316270000000",
|
||||
"COFNOC": "0,000073732639000000",
|
||||
"COFVHC": "0,000059483320000000",
|
||||
"PMHGEN": "53,68",
|
||||
"PMHNOC": "54,14",
|
||||
"PMHVHC": "54,14",
|
||||
"SAHGEN": "2,29",
|
||||
"SAHNOC": "2,31",
|
||||
"SAHVHC": "2,31",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,92",
|
||||
"INTVHC": "0,92",
|
||||
"PCAPGEN": "5,39",
|
||||
"PCAPNOC": "5,60",
|
||||
"PCAPVHC": "5,60",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "1,89",
|
||||
"CCVNOC": "1,91",
|
||||
"CCVVHC": "1,91"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "16-17",
|
||||
"GEN": "106,15",
|
||||
"NOC": "124,78",
|
||||
"VHC": "124,78",
|
||||
"COFGEN": "0,000106276301000000",
|
||||
"COFNOC": "0,000065442255000000",
|
||||
"COFVHC": "0,000053614900000000",
|
||||
"PMHGEN": "51,38",
|
||||
"PMHNOC": "51,78",
|
||||
"PMHVHC": "51,78",
|
||||
"SAHGEN": "2,40",
|
||||
"SAHNOC": "2,42",
|
||||
"SAHVHC": "2,42",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,92",
|
||||
"INTVHC": "0,92",
|
||||
"PCAPGEN": "5,40",
|
||||
"PCAPNOC": "5,61",
|
||||
"PCAPVHC": "5,61",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "1,86",
|
||||
"CCVNOC": "1,88",
|
||||
"CCVVHC": "1,88"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "17-18",
|
||||
"GEN": "105,09",
|
||||
"NOC": "123,72",
|
||||
"VHC": "123,72",
|
||||
"COFGEN": "0,000098092024000000",
|
||||
"COFNOC": "0,000060340481000000",
|
||||
"COFVHC": "0,000050280869000000",
|
||||
"PMHGEN": "51,35",
|
||||
"PMHNOC": "51,75",
|
||||
"PMHVHC": "51,75",
|
||||
"SAHGEN": "1,40",
|
||||
"SAHNOC": "1,41",
|
||||
"SAHVHC": "1,41",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,92",
|
||||
"INTVHC": "0,92",
|
||||
"PCAPGEN": "5,40",
|
||||
"PCAPNOC": "5,61",
|
||||
"PCAPVHC": "5,61",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "1,85",
|
||||
"CCVNOC": "1,86",
|
||||
"CCVVHC": "1,86"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "18-19",
|
||||
"GEN": "108,12",
|
||||
"NOC": "126,77",
|
||||
"VHC": "126,77",
|
||||
"COFGEN": "0,000095857172000000",
|
||||
"COFNOC": "0,000058545227000000",
|
||||
"COFVHC": "0,000049936767000000",
|
||||
"PMHGEN": "54,41",
|
||||
"PMHNOC": "54,83",
|
||||
"PMHVHC": "54,83",
|
||||
"SAHGEN": "1,35",
|
||||
"SAHNOC": "1,36",
|
||||
"SAHVHC": "1,36",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,91",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,38",
|
||||
"PCAPNOC": "5,59",
|
||||
"PCAPVHC": "5,59",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "1,89",
|
||||
"CCVNOC": "1,91",
|
||||
"CCVVHC": "1,91"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "19-20",
|
||||
"GEN": "112,76",
|
||||
"NOC": "131,51",
|
||||
"VHC": "131,51",
|
||||
"COFGEN": "0,000099686581000000",
|
||||
"COFNOC": "0,000063674261000000",
|
||||
"COFVHC": "0,000057884599000000",
|
||||
"PMHGEN": "58,53",
|
||||
"PMHNOC": "59,03",
|
||||
"PMHVHC": "59,03",
|
||||
"SAHGEN": "1,77",
|
||||
"SAHNOC": "1,79",
|
||||
"SAHVHC": "1,79",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,92",
|
||||
"INTVHC": "0,92",
|
||||
"PCAPGEN": "5,40",
|
||||
"PCAPNOC": "5,62",
|
||||
"PCAPVHC": "5,62",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "1,96",
|
||||
"CCVNOC": "1,98",
|
||||
"CCVVHC": "1,98"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "20-21",
|
||||
"GEN": "118,69",
|
||||
"NOC": "137,48",
|
||||
"VHC": "137,48",
|
||||
"COFGEN": "0,000111025948000000",
|
||||
"COFNOC": "0,000087846097000000",
|
||||
"COFVHC": "0,000084304207000000",
|
||||
"PMHGEN": "64,79",
|
||||
"PMHNOC": "65,35",
|
||||
"PMHVHC": "65,35",
|
||||
"SAHGEN": "1,34",
|
||||
"SAHNOC": "1,35",
|
||||
"SAHVHC": "1,35",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,92",
|
||||
"INTVHC": "0,92",
|
||||
"PCAPGEN": "5,40",
|
||||
"PCAPNOC": "5,62",
|
||||
"PCAPVHC": "5,62",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "2,05",
|
||||
"CCVNOC": "2,07",
|
||||
"CCVVHC": "2,07"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "21-22",
|
||||
"GEN": "121,19",
|
||||
"NOC": "139,94",
|
||||
"VHC": "139,94",
|
||||
"COFGEN": "0,000129356812000000",
|
||||
"COFNOC": "0,000137580750000000",
|
||||
"COFVHC": "0,000175068439000000",
|
||||
"PMHGEN": "66,00",
|
||||
"PMHNOC": "66,51",
|
||||
"PMHVHC": "66,51",
|
||||
"SAHGEN": "2,64",
|
||||
"SAHNOC": "2,66",
|
||||
"SAHVHC": "2,66",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,91",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,38",
|
||||
"PCAPNOC": "5,58",
|
||||
"PCAPVHC": "5,58",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "2,08",
|
||||
"CCVNOC": "2,10",
|
||||
"CCVVHC": "2,10"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "22-23",
|
||||
"GEN": "120,21",
|
||||
"NOC": "138,96",
|
||||
"VHC": "138,96",
|
||||
"COFGEN": "0,000132818174000000",
|
||||
"COFNOC": "0,000143862321000000",
|
||||
"COFVHC": "0,000185393247000000",
|
||||
"PMHGEN": "65,72",
|
||||
"PMHNOC": "66,23",
|
||||
"PMHVHC": "66,23",
|
||||
"SAHGEN": "1,94",
|
||||
"SAHNOC": "1,96",
|
||||
"SAHVHC": "1,96",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,91",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,38",
|
||||
"PCAPNOC": "5,59",
|
||||
"PCAPVHC": "5,59",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "2,07",
|
||||
"CCVNOC": "2,09",
|
||||
"CCVVHC": "2,09"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "23-24",
|
||||
"GEN": "117,85",
|
||||
"NOC": "68,93",
|
||||
"VHC": "136,63",
|
||||
"COFGEN": "0,000117725347000000",
|
||||
"COFNOC": "0,000138623638000000",
|
||||
"COFVHC": "0,000180725170000000",
|
||||
"PMHGEN": "62,92",
|
||||
"PMHNOC": "60,64",
|
||||
"PMHVHC": "63,46",
|
||||
"SAHGEN": "2,28",
|
||||
"SAHNOC": "2,20",
|
||||
"SAHVHC": "2,30",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,92",
|
||||
"INTNOC": "0,89",
|
||||
"INTVHC": "0,93",
|
||||
"PCAPGEN": "5,48",
|
||||
"PCAPNOC": "0,92",
|
||||
"PCAPVHC": "5,69",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "2,05",
|
||||
"CCVNOC": "1,91",
|
||||
"CCVVHC": "2,07"
|
||||
},
|
||||
{
|
||||
"Dia": "27/10/2019",
|
||||
"Hora": "24-25",
|
||||
"GEN": "118,42",
|
||||
"NOC": "69,35",
|
||||
"VHC": "73,34",
|
||||
"COFGEN": "0,000097485259000000",
|
||||
"COFNOC": "0,000133828173000000",
|
||||
"COFVHC": "0,000166082424000000",
|
||||
"PMHGEN": "63,21",
|
||||
"PMHNOC": "60,82",
|
||||
"PMHVHC": "63,52",
|
||||
"SAHGEN": "2,51",
|
||||
"SAHNOC": "2,41",
|
||||
"SAHVHC": "2,52",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,93",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,94",
|
||||
"PCAPGEN": "5,52",
|
||||
"PCAPNOC": "0,92",
|
||||
"PCAPVHC": "1,30",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "2,07",
|
||||
"CCVNOC": "1,92",
|
||||
"CCVVHC": "2,01"
|
||||
}
|
||||
]
|
||||
}
|
@ -1,820 +0,0 @@
|
||||
{
|
||||
"PVPC": [
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "00-01",
|
||||
"GEN": "117,17",
|
||||
"NOC": "68,21",
|
||||
"VHC": "72,10",
|
||||
"COFGEN": "0,000077051997000000",
|
||||
"COFNOC": "0,000124733002000000",
|
||||
"COFVHC": "0,000143780107000000",
|
||||
"PMHGEN": "62,55",
|
||||
"PMHNOC": "60,23",
|
||||
"PMHVHC": "62,86",
|
||||
"SAHGEN": "1,96",
|
||||
"SAHNOC": "1,89",
|
||||
"SAHVHC": "1,97",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,93",
|
||||
"INTNOC": "0,89",
|
||||
"INTVHC": "0,93",
|
||||
"PCAPGEN": "5,50",
|
||||
"PCAPNOC": "0,92",
|
||||
"PCAPVHC": "1,30",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "2,04",
|
||||
"CCVNOC": "1,90",
|
||||
"CCVVHC": "1,99"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "01-02",
|
||||
"GEN": "115,34",
|
||||
"NOC": "66,27",
|
||||
"VHC": "63,14",
|
||||
"COFGEN": "0,000063669626000000",
|
||||
"COFNOC": "0,000113703738000000",
|
||||
"COFVHC": "0,000153709241000000",
|
||||
"PMHGEN": "60,54",
|
||||
"PMHNOC": "58,17",
|
||||
"PMHVHC": "56,70",
|
||||
"SAHGEN": "2,11",
|
||||
"SAHNOC": "2,02",
|
||||
"SAHVHC": "1,97",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,93",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,87",
|
||||
"PCAPGEN": "5,54",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "0,72",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "2,02",
|
||||
"CCVNOC": "1,88",
|
||||
"CCVVHC": "1,83"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "02-03",
|
||||
"GEN": "112,37",
|
||||
"NOC": "63,40",
|
||||
"VHC": "60,25",
|
||||
"COFGEN": "0,000057299719000000",
|
||||
"COFNOC": "0,000107847932000000",
|
||||
"COFVHC": "0,000151346355000000",
|
||||
"PMHGEN": "57,42",
|
||||
"PMHNOC": "55,17",
|
||||
"PMHVHC": "53,69",
|
||||
"SAHGEN": "2,27",
|
||||
"SAHNOC": "2,18",
|
||||
"SAHVHC": "2,12",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,14",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,94",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,57",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "0,72",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,98",
|
||||
"CCVNOC": "1,84",
|
||||
"CCVVHC": "1,79"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "03-04",
|
||||
"GEN": "111,32",
|
||||
"NOC": "62,39",
|
||||
"VHC": "59,27",
|
||||
"COFGEN": "0,000054631496000000",
|
||||
"COFNOC": "0,000105135123000000",
|
||||
"COFVHC": "0,000145712713000000",
|
||||
"PMHGEN": "55,92",
|
||||
"PMHNOC": "53,73",
|
||||
"PMHVHC": "52,29",
|
||||
"SAHGEN": "2,74",
|
||||
"SAHNOC": "2,63",
|
||||
"SAHVHC": "2,56",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,14",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,94",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,57",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "0,72",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,97",
|
||||
"CCVNOC": "1,82",
|
||||
"CCVVHC": "1,77"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "04-05",
|
||||
"GEN": "111,08",
|
||||
"NOC": "62,17",
|
||||
"VHC": "59,04",
|
||||
"COFGEN": "0,000053587732000000",
|
||||
"COFNOC": "0,000103791403000000",
|
||||
"COFVHC": "0,000139739507000000",
|
||||
"PMHGEN": "55,64",
|
||||
"PMHNOC": "53,46",
|
||||
"PMHVHC": "52,03",
|
||||
"SAHGEN": "2,79",
|
||||
"SAHNOC": "2,68",
|
||||
"SAHVHC": "2,61",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,14",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,94",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,56",
|
||||
"PCAPNOC": "0,93",
|
||||
"PCAPVHC": "0,72",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,96",
|
||||
"CCVNOC": "1,82",
|
||||
"CCVVHC": "1,77"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "05-06",
|
||||
"GEN": "113,57",
|
||||
"NOC": "64,62",
|
||||
"VHC": "61,53",
|
||||
"COFGEN": "0,000054978965000000",
|
||||
"COFNOC": "0,000104220226000000",
|
||||
"COFVHC": "0,000135044065000000",
|
||||
"PMHGEN": "58,23",
|
||||
"PMHNOC": "55,99",
|
||||
"PMHVHC": "54,57",
|
||||
"SAHGEN": "2,69",
|
||||
"SAHNOC": "2,58",
|
||||
"SAHVHC": "2,52",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,93",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,87",
|
||||
"PCAPGEN": "5,53",
|
||||
"PCAPNOC": "0,92",
|
||||
"PCAPVHC": "0,72",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "2,00",
|
||||
"CCVNOC": "1,85",
|
||||
"CCVVHC": "1,80"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "06-07",
|
||||
"GEN": "113,48",
|
||||
"NOC": "64,78",
|
||||
"VHC": "61,84",
|
||||
"COFGEN": "0,000063808739000000",
|
||||
"COFNOC": "0,000109956697000000",
|
||||
"COFVHC": "0,000134904594000000",
|
||||
"PMHGEN": "58,13",
|
||||
"PMHNOC": "56,06",
|
||||
"PMHVHC": "54,78",
|
||||
"SAHGEN": "2,80",
|
||||
"SAHNOC": "2,70",
|
||||
"SAHVHC": "2,64",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,12",
|
||||
"INTGEN": "0,92",
|
||||
"INTNOC": "0,89",
|
||||
"INTVHC": "0,87",
|
||||
"PCAPGEN": "5,45",
|
||||
"PCAPNOC": "0,91",
|
||||
"PCAPVHC": "0,71",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "0,89",
|
||||
"CCVGEN": "1,98",
|
||||
"CCVNOC": "1,84",
|
||||
"CCVVHC": "1,80"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "07-08",
|
||||
"GEN": "118,40",
|
||||
"NOC": "69,72",
|
||||
"VHC": "73,36",
|
||||
"COFGEN": "0,000086957107000000",
|
||||
"COFNOC": "0,000119021762000000",
|
||||
"COFVHC": "0,000131848949000000",
|
||||
"PMHGEN": "63,73",
|
||||
"PMHNOC": "61,60",
|
||||
"PMHVHC": "64,00",
|
||||
"SAHGEN": "2,12",
|
||||
"SAHNOC": "2,05",
|
||||
"SAHVHC": "2,13",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,88",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,40",
|
||||
"PCAPNOC": "0,91",
|
||||
"PCAPVHC": "1,27",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "2,05",
|
||||
"CCVNOC": "1,91",
|
||||
"CCVVHC": "1,99"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "08-09",
|
||||
"GEN": "117,71",
|
||||
"NOC": "69,47",
|
||||
"VHC": "72,71",
|
||||
"COFGEN": "0,000103659543000000",
|
||||
"COFNOC": "0,000093080441000000",
|
||||
"COFVHC": "0,000078478538000000",
|
||||
"PMHGEN": "63,59",
|
||||
"PMHNOC": "61,75",
|
||||
"PMHVHC": "63,81",
|
||||
"SAHGEN": "1,76",
|
||||
"SAHNOC": "1,71",
|
||||
"SAHVHC": "1,77",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,12",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,89",
|
||||
"INTNOC": "0,86",
|
||||
"INTVHC": "0,89",
|
||||
"PCAPGEN": "5,27",
|
||||
"PCAPNOC": "0,89",
|
||||
"PCAPVHC": "1,24",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "2,01",
|
||||
"CCVNOC": "1,89",
|
||||
"CCVVHC": "1,96"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "09-10",
|
||||
"GEN": "115,84",
|
||||
"NOC": "67,79",
|
||||
"VHC": "70,80",
|
||||
"COFGEN": "0,000109607743000000",
|
||||
"COFNOC": "0,000077907419000000",
|
||||
"COFVHC": "0,000061476325000000",
|
||||
"PMHGEN": "62,27",
|
||||
"PMHNOC": "60,57",
|
||||
"PMHVHC": "62,44",
|
||||
"SAHGEN": "1,29",
|
||||
"SAHNOC": "1,25",
|
||||
"SAHVHC": "1,29",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,12",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,88",
|
||||
"INTNOC": "0,86",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,23",
|
||||
"PCAPNOC": "0,88",
|
||||
"PCAPVHC": "1,23",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,98",
|
||||
"CCVNOC": "1,86",
|
||||
"CCVVHC": "1,92"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "10-11",
|
||||
"GEN": "114,70",
|
||||
"NOC": "66,74",
|
||||
"VHC": "69,67",
|
||||
"COFGEN": "0,000115808394000000",
|
||||
"COFNOC": "0,000078426619000000",
|
||||
"COFVHC": "0,000062221967000000",
|
||||
"PMHGEN": "61,05",
|
||||
"PMHNOC": "59,42",
|
||||
"PMHVHC": "61,21",
|
||||
"SAHGEN": "1,41",
|
||||
"SAHNOC": "1,37",
|
||||
"SAHVHC": "1,41",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,12",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,88",
|
||||
"INTNOC": "0,86",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,22",
|
||||
"PCAPNOC": "0,88",
|
||||
"PCAPVHC": "1,23",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,96",
|
||||
"CCVNOC": "1,84",
|
||||
"CCVVHC": "1,90"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "11-12",
|
||||
"GEN": "114,45",
|
||||
"NOC": "66,51",
|
||||
"VHC": "69,43",
|
||||
"COFGEN": "0,000117753360000000",
|
||||
"COFNOC": "0,000076432674000000",
|
||||
"COFVHC": "0,000061112533000000",
|
||||
"PMHGEN": "60,85",
|
||||
"PMHNOC": "59,23",
|
||||
"PMHVHC": "61,01",
|
||||
"SAHGEN": "1,37",
|
||||
"SAHNOC": "1,34",
|
||||
"SAHVHC": "1,38",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,12",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,88",
|
||||
"INTNOC": "0,85",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,21",
|
||||
"PCAPNOC": "0,88",
|
||||
"PCAPVHC": "1,23",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,95",
|
||||
"CCVNOC": "1,84",
|
||||
"CCVVHC": "1,90"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "12-13",
|
||||
"GEN": "114,46",
|
||||
"NOC": "133,04",
|
||||
"VHC": "69,45",
|
||||
"COFGEN": "0,000121492044000000",
|
||||
"COFNOC": "0,000074703573000000",
|
||||
"COFVHC": "0,000061457855000000",
|
||||
"PMHGEN": "60,95",
|
||||
"PMHNOC": "61,33",
|
||||
"PMHVHC": "61,11",
|
||||
"SAHGEN": "1,30",
|
||||
"SAHNOC": "1,31",
|
||||
"SAHVHC": "1,31",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,88",
|
||||
"INTNOC": "0,88",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,20",
|
||||
"PCAPNOC": "5,39",
|
||||
"PCAPVHC": "1,22",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,95",
|
||||
"CCVNOC": "1,97",
|
||||
"CCVVHC": "1,90"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "13-14",
|
||||
"GEN": "113,37",
|
||||
"NOC": "131,94",
|
||||
"VHC": "131,94",
|
||||
"COFGEN": "0,000126490319000000",
|
||||
"COFNOC": "0,000074777760000000",
|
||||
"COFVHC": "0,000060760068000000",
|
||||
"PMHGEN": "59,86",
|
||||
"PMHNOC": "60,24",
|
||||
"PMHVHC": "60,24",
|
||||
"SAHGEN": "1,32",
|
||||
"SAHNOC": "1,33",
|
||||
"SAHVHC": "1,33",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,87",
|
||||
"INTNOC": "0,88",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,19",
|
||||
"PCAPNOC": "5,38",
|
||||
"PCAPVHC": "5,38",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "1,93",
|
||||
"CCVNOC": "1,95",
|
||||
"CCVVHC": "1,95"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "14-15",
|
||||
"GEN": "112,88",
|
||||
"NOC": "131,46",
|
||||
"VHC": "131,46",
|
||||
"COFGEN": "0,000120771211000000",
|
||||
"COFNOC": "0,000072095790000000",
|
||||
"COFVHC": "0,000058765117000000",
|
||||
"PMHGEN": "59,31",
|
||||
"PMHNOC": "59,68",
|
||||
"PMHVHC": "59,68",
|
||||
"SAHGEN": "1,37",
|
||||
"SAHNOC": "1,38",
|
||||
"SAHVHC": "1,38",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,88",
|
||||
"INTNOC": "0,88",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,21",
|
||||
"PCAPNOC": "5,40",
|
||||
"PCAPVHC": "5,40",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "1,93",
|
||||
"CCVNOC": "1,94",
|
||||
"CCVVHC": "1,94"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "15-16",
|
||||
"GEN": "115,75",
|
||||
"NOC": "134,41",
|
||||
"VHC": "134,41",
|
||||
"COFGEN": "0,000110808247000000",
|
||||
"COFNOC": "0,000066006577000000",
|
||||
"COFVHC": "0,000053763013000000",
|
||||
"PMHGEN": "62,14",
|
||||
"PMHNOC": "62,58",
|
||||
"PMHVHC": "62,58",
|
||||
"SAHGEN": "1,34",
|
||||
"SAHNOC": "1,35",
|
||||
"SAHVHC": "1,35",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,88",
|
||||
"INTNOC": "0,89",
|
||||
"INTVHC": "0,89",
|
||||
"PCAPGEN": "5,23",
|
||||
"PCAPNOC": "5,42",
|
||||
"PCAPVHC": "5,42",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "1,98",
|
||||
"CCVNOC": "1,99",
|
||||
"CCVVHC": "1,99"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "16-17",
|
||||
"GEN": "118,08",
|
||||
"NOC": "136,75",
|
||||
"VHC": "136,75",
|
||||
"COFGEN": "0,000107924950000000",
|
||||
"COFNOC": "0,000063090606000000",
|
||||
"COFVHC": "0,000052115396000000",
|
||||
"PMHGEN": "64,48",
|
||||
"PMHNOC": "64,93",
|
||||
"PMHVHC": "64,93",
|
||||
"SAHGEN": "1,31",
|
||||
"SAHNOC": "1,32",
|
||||
"SAHVHC": "1,32",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,88",
|
||||
"INTNOC": "0,89",
|
||||
"INTVHC": "0,89",
|
||||
"PCAPGEN": "5,22",
|
||||
"PCAPNOC": "5,42",
|
||||
"PCAPVHC": "5,42",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "2,01",
|
||||
"CCVNOC": "2,03",
|
||||
"CCVVHC": "2,03"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "17-18",
|
||||
"GEN": "121,32",
|
||||
"NOC": "139,95",
|
||||
"VHC": "139,95",
|
||||
"COFGEN": "0,000111993776000000",
|
||||
"COFNOC": "0,000063840323000000",
|
||||
"COFVHC": "0,000053264660000000",
|
||||
"PMHGEN": "67,88",
|
||||
"PMHNOC": "68,30",
|
||||
"PMHVHC": "68,30",
|
||||
"SAHGEN": "1,10",
|
||||
"SAHNOC": "1,11",
|
||||
"SAHVHC": "1,11",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,88",
|
||||
"INTNOC": "0,88",
|
||||
"INTVHC": "0,88",
|
||||
"PCAPGEN": "5,22",
|
||||
"PCAPNOC": "5,41",
|
||||
"PCAPVHC": "5,41",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "2,06",
|
||||
"CCVNOC": "2,07",
|
||||
"CCVVHC": "2,07"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "18-19",
|
||||
"GEN": "126,19",
|
||||
"NOC": "144,85",
|
||||
"VHC": "144,85",
|
||||
"COFGEN": "0,000117118878000000",
|
||||
"COFNOC": "0,000072058416000000",
|
||||
"COFVHC": "0,000066417528000000",
|
||||
"PMHGEN": "69,04",
|
||||
"PMHNOC": "69,47",
|
||||
"PMHVHC": "69,47",
|
||||
"SAHGEN": "4,73",
|
||||
"SAHNOC": "4,76",
|
||||
"SAHVHC": "4,76",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,88",
|
||||
"INTNOC": "0,89",
|
||||
"INTVHC": "0,89",
|
||||
"PCAPGEN": "5,22",
|
||||
"PCAPNOC": "5,42",
|
||||
"PCAPVHC": "5,42",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "2,13",
|
||||
"CCVNOC": "2,15",
|
||||
"CCVVHC": "2,15"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "19-20",
|
||||
"GEN": "125,34",
|
||||
"NOC": "144,06",
|
||||
"VHC": "144,06",
|
||||
"COFGEN": "0,000128443388000000",
|
||||
"COFNOC": "0,000098772457000000",
|
||||
"COFVHC": "0,000100678475000000",
|
||||
"PMHGEN": "68,61",
|
||||
"PMHNOC": "69,09",
|
||||
"PMHVHC": "69,09",
|
||||
"SAHGEN": "4,31",
|
||||
"SAHNOC": "4,34",
|
||||
"SAHVHC": "4,34",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,88",
|
||||
"INTNOC": "0,89",
|
||||
"INTVHC": "0,89",
|
||||
"PCAPGEN": "5,24",
|
||||
"PCAPNOC": "5,43",
|
||||
"PCAPVHC": "5,43",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "2,12",
|
||||
"CCVNOC": "2,14",
|
||||
"CCVVHC": "2,14"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "20-21",
|
||||
"GEN": "120,62",
|
||||
"NOC": "139,31",
|
||||
"VHC": "139,31",
|
||||
"COFGEN": "0,000144847952000000",
|
||||
"COFNOC": "0,000148736569000000",
|
||||
"COFVHC": "0,000192706770000000",
|
||||
"PMHGEN": "67,11",
|
||||
"PMHNOC": "67,58",
|
||||
"PMHVHC": "67,58",
|
||||
"SAHGEN": "1,12",
|
||||
"SAHNOC": "1,12",
|
||||
"SAHVHC": "1,12",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,89",
|
||||
"INTNOC": "0,89",
|
||||
"INTVHC": "0,89",
|
||||
"PCAPGEN": "5,27",
|
||||
"PCAPNOC": "5,47",
|
||||
"PCAPVHC": "5,47",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "2,06",
|
||||
"CCVNOC": "2,07",
|
||||
"CCVVHC": "2,07"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "21-22",
|
||||
"GEN": "120,67",
|
||||
"NOC": "139,36",
|
||||
"VHC": "139,36",
|
||||
"COFGEN": "0,000143400205000000",
|
||||
"COFNOC": "0,000153448551000000",
|
||||
"COFVHC": "0,000201113372000000",
|
||||
"PMHGEN": "66,43",
|
||||
"PMHNOC": "66,90",
|
||||
"PMHVHC": "66,90",
|
||||
"SAHGEN": "1,80",
|
||||
"SAHNOC": "1,81",
|
||||
"SAHVHC": "1,81",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,89",
|
||||
"INTNOC": "0,90",
|
||||
"INTVHC": "0,90",
|
||||
"PCAPGEN": "5,30",
|
||||
"PCAPNOC": "5,50",
|
||||
"PCAPVHC": "5,50",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "62,01",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "2,06",
|
||||
"CCVNOC": "2,08",
|
||||
"CCVVHC": "2,08"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "22-23",
|
||||
"GEN": "117,80",
|
||||
"NOC": "69,35",
|
||||
"VHC": "136,53",
|
||||
"COFGEN": "0,000122948482000000",
|
||||
"COFNOC": "0,000146077289000000",
|
||||
"COFVHC": "0,000194614149000000",
|
||||
"PMHGEN": "63,25",
|
||||
"PMHNOC": "61,28",
|
||||
"PMHVHC": "63,75",
|
||||
"SAHGEN": "2,10",
|
||||
"SAHNOC": "2,03",
|
||||
"SAHVHC": "2,11",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,90",
|
||||
"INTNOC": "0,87",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,34",
|
||||
"PCAPNOC": "0,90",
|
||||
"PCAPVHC": "5,54",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "62,01",
|
||||
"CCVGEN": "2,03",
|
||||
"CCVNOC": "1,90",
|
||||
"CCVVHC": "2,04"
|
||||
},
|
||||
{
|
||||
"Dia": "29/10/2019",
|
||||
"Hora": "23-24",
|
||||
"GEN": "111,95",
|
||||
"NOC": "63,48",
|
||||
"VHC": "66,87",
|
||||
"COFGEN": "0,000098841799000000",
|
||||
"COFNOC": "0,000139677463000000",
|
||||
"COFVHC": "0,000176886301000000",
|
||||
"PMHGEN": "56,97",
|
||||
"PMHNOC": "55,07",
|
||||
"PMHVHC": "57,22",
|
||||
"SAHGEN": "2,52",
|
||||
"SAHNOC": "2,44",
|
||||
"SAHVHC": "2,53",
|
||||
"FOMGEN": "0,03",
|
||||
"FOMNOC": "0,03",
|
||||
"FOMVHC": "0,03",
|
||||
"FOSGEN": "0,13",
|
||||
"FOSNOC": "0,13",
|
||||
"FOSVHC": "0,13",
|
||||
"INTGEN": "0,91",
|
||||
"INTNOC": "0,88",
|
||||
"INTVHC": "0,91",
|
||||
"PCAPGEN": "5,40",
|
||||
"PCAPNOC": "0,91",
|
||||
"PCAPVHC": "1,27",
|
||||
"TEUGEN": "44,03",
|
||||
"TEUNOC": "2,22",
|
||||
"TEUVHC": "2,88",
|
||||
"CCVGEN": "1,95",
|
||||
"CCVNOC": "1,82",
|
||||
"CCVVHC": "1,89"
|
||||
}
|
||||
]
|
||||
}
|
@ -1,604 +0,0 @@
|
||||
{
|
||||
"PVPC": [
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "00-01",
|
||||
"PCB": "116,33",
|
||||
"CYM": "116,33",
|
||||
"COF2TD": "0,000088075182000000",
|
||||
"PMHPCB": "104,00",
|
||||
"PMHCYM": "104,00",
|
||||
"SAHPCB": "3,56",
|
||||
"SAHCYM": "3,56",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,17",
|
||||
"FOSCYM": "0,17",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,00",
|
||||
"PCAPCYM": "0,00",
|
||||
"TEUPCB": "6,00",
|
||||
"TEUCYM": "6,00",
|
||||
"CCVPCB": "2,57",
|
||||
"CCVCYM": "2,57",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "01-02",
|
||||
"PCB": "115,95",
|
||||
"CYM": "115,95",
|
||||
"COF2TD": "0,000073094842000000",
|
||||
"PMHPCB": "103,18",
|
||||
"PMHCYM": "103,18",
|
||||
"SAHPCB": "3,99",
|
||||
"SAHCYM": "3,99",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,17",
|
||||
"FOSCYM": "0,17",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,00",
|
||||
"PCAPCYM": "0,00",
|
||||
"TEUPCB": "6,00",
|
||||
"TEUCYM": "6,00",
|
||||
"CCVPCB": "2,58",
|
||||
"CCVCYM": "2,58",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "02-03",
|
||||
"PCB": "114,89",
|
||||
"CYM": "114,89",
|
||||
"COF2TD": "0,000065114032000000",
|
||||
"PMHPCB": "101,87",
|
||||
"PMHCYM": "101,87",
|
||||
"SAHPCB": "4,25",
|
||||
"SAHCYM": "4,25",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,17",
|
||||
"FOSCYM": "0,17",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,00",
|
||||
"PCAPCYM": "0,00",
|
||||
"TEUPCB": "6,00",
|
||||
"TEUCYM": "6,00",
|
||||
"CCVPCB": "2,56",
|
||||
"CCVCYM": "2,56",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "03-04",
|
||||
"PCB": "114,96",
|
||||
"CYM": "114,96",
|
||||
"COF2TD": "0,000061272596000000",
|
||||
"PMHPCB": "102,01",
|
||||
"PMHCYM": "102,01",
|
||||
"SAHPCB": "4,19",
|
||||
"SAHCYM": "4,19",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,17",
|
||||
"FOSCYM": "0,17",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,00",
|
||||
"PCAPCYM": "0,00",
|
||||
"TEUPCB": "6,00",
|
||||
"TEUCYM": "6,00",
|
||||
"CCVPCB": "2,57",
|
||||
"CCVCYM": "2,57",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "04-05",
|
||||
"PCB": "114,84",
|
||||
"CYM": "114,84",
|
||||
"COF2TD": "0,000059563056000000",
|
||||
"PMHPCB": "101,87",
|
||||
"PMHCYM": "101,87",
|
||||
"SAHPCB": "4,21",
|
||||
"SAHCYM": "4,21",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,17",
|
||||
"FOSCYM": "0,17",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,00",
|
||||
"PCAPCYM": "0,00",
|
||||
"TEUPCB": "6,00",
|
||||
"TEUCYM": "6,00",
|
||||
"CCVPCB": "2,56",
|
||||
"CCVCYM": "2,56",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "05-06",
|
||||
"PCB": "116,03",
|
||||
"CYM": "116,03",
|
||||
"COF2TD": "0,000059907686000000",
|
||||
"PMHPCB": "103,14",
|
||||
"PMHCYM": "103,14",
|
||||
"SAHPCB": "4,11",
|
||||
"SAHCYM": "4,11",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,17",
|
||||
"FOSCYM": "0,17",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,00",
|
||||
"PCAPCYM": "0,00",
|
||||
"TEUPCB": "6,00",
|
||||
"TEUCYM": "6,00",
|
||||
"CCVPCB": "2,58",
|
||||
"CCVCYM": "2,58",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "06-07",
|
||||
"PCB": "116,29",
|
||||
"CYM": "116,29",
|
||||
"COF2TD": "0,000062818713000000",
|
||||
"PMHPCB": "103,64",
|
||||
"PMHCYM": "103,64",
|
||||
"SAHPCB": "3,88",
|
||||
"SAHCYM": "3,88",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,17",
|
||||
"FOSCYM": "0,17",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,00",
|
||||
"PCAPCYM": "0,00",
|
||||
"TEUPCB": "6,00",
|
||||
"TEUCYM": "6,00",
|
||||
"CCVPCB": "2,57",
|
||||
"CCVCYM": "2,57",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "07-08",
|
||||
"PCB": "115,70",
|
||||
"CYM": "115,70",
|
||||
"COF2TD": "0,000072575564000000",
|
||||
"PMHPCB": "103,85",
|
||||
"PMHCYM": "103,85",
|
||||
"SAHPCB": "3,10",
|
||||
"SAHCYM": "3,10",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,16",
|
||||
"FOSCYM": "0,16",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,00",
|
||||
"PCAPCYM": "0,00",
|
||||
"TEUPCB": "6,00",
|
||||
"TEUCYM": "6,00",
|
||||
"CCVPCB": "2,55",
|
||||
"CCVCYM": "2,55",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "08-09",
|
||||
"PCB": "152,89",
|
||||
"CYM": "152,89",
|
||||
"COF2TD": "0,000086825264000000",
|
||||
"PMHPCB": "105,65",
|
||||
"PMHCYM": "105,65",
|
||||
"SAHPCB": "2,36",
|
||||
"SAHCYM": "2,36",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,17",
|
||||
"FOSCYM": "0,17",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,34",
|
||||
"PCAPCYM": "0,34",
|
||||
"TEUPCB": "41,77",
|
||||
"TEUCYM": "41,77",
|
||||
"CCVPCB": "2,57",
|
||||
"CCVCYM": "2,57",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "09-10",
|
||||
"PCB": "150,83",
|
||||
"CYM": "150,83",
|
||||
"COF2TD": "0,000095768317000000",
|
||||
"PMHPCB": "103,77",
|
||||
"PMHCYM": "103,77",
|
||||
"SAHPCB": "2,24",
|
||||
"SAHCYM": "2,24",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,16",
|
||||
"FOSCYM": "0,16",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,34",
|
||||
"PCAPCYM": "0,34",
|
||||
"TEUPCB": "41,77",
|
||||
"TEUCYM": "41,77",
|
||||
"CCVPCB": "2,53",
|
||||
"CCVCYM": "2,53",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "10-11",
|
||||
"PCB": "242,62",
|
||||
"CYM": "149,28",
|
||||
"COF2TD": "0,000102672431000000",
|
||||
"PMHPCB": "102,38",
|
||||
"PMHCYM": "102,11",
|
||||
"SAHPCB": "2,38",
|
||||
"SAHCYM": "2,37",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,16",
|
||||
"FOSCYM": "0,16",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "2,01",
|
||||
"PCAPCYM": "0,34",
|
||||
"TEUPCB": "133,12",
|
||||
"TEUCYM": "41,77",
|
||||
"CCVPCB": "2,54",
|
||||
"CCVCYM": "2,51",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "11-12",
|
||||
"PCB": "240,50",
|
||||
"CYM": "240,50",
|
||||
"COF2TD": "0,000105691470000000",
|
||||
"PMHPCB": "100,14",
|
||||
"PMHCYM": "100,14",
|
||||
"SAHPCB": "2,52",
|
||||
"SAHCYM": "2,52",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,16",
|
||||
"FOSCYM": "0,16",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "2,02",
|
||||
"PCAPCYM": "2,02",
|
||||
"TEUPCB": "133,12",
|
||||
"TEUCYM": "133,12",
|
||||
"CCVPCB": "2,51",
|
||||
"CCVCYM": "2,51",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "12-13",
|
||||
"PCB": "238,09",
|
||||
"CYM": "238,09",
|
||||
"COF2TD": "0,000110462952000000",
|
||||
"PMHPCB": "97,58",
|
||||
"PMHCYM": "97,58",
|
||||
"SAHPCB": "2,71",
|
||||
"SAHCYM": "2,71",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,16",
|
||||
"FOSCYM": "0,16",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "2,02",
|
||||
"PCAPCYM": "2,02",
|
||||
"TEUPCB": "133,12",
|
||||
"TEUCYM": "133,12",
|
||||
"CCVPCB": "2,47",
|
||||
"CCVCYM": "2,47",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "13-14",
|
||||
"PCB": "235,30",
|
||||
"CYM": "235,30",
|
||||
"COF2TD": "0,000119052052000000",
|
||||
"PMHPCB": "94,65",
|
||||
"PMHCYM": "94,65",
|
||||
"SAHPCB": "2,89",
|
||||
"SAHCYM": "2,89",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,16",
|
||||
"FOSCYM": "0,16",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "2,02",
|
||||
"PCAPCYM": "2,02",
|
||||
"TEUPCB": "133,12",
|
||||
"TEUCYM": "133,12",
|
||||
"CCVPCB": "2,43",
|
||||
"CCVCYM": "2,43",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "14-15",
|
||||
"PCB": "137,96",
|
||||
"CYM": "231,28",
|
||||
"COF2TD": "0,000117990009000000",
|
||||
"PMHPCB": "89,95",
|
||||
"PMHCYM": "90,19",
|
||||
"SAHPCB": "3,37",
|
||||
"SAHCYM": "3,38",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,16",
|
||||
"FOSCYM": "0,16",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,34",
|
||||
"PCAPCYM": "2,03",
|
||||
"TEUPCB": "41,77",
|
||||
"TEUCYM": "133,12",
|
||||
"CCVPCB": "2,34",
|
||||
"CCVCYM": "2,37",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "15-16",
|
||||
"PCB": "132,88",
|
||||
"CYM": "132,88",
|
||||
"COF2TD": "0,000108598330000000",
|
||||
"PMHPCB": "84,43",
|
||||
"PMHCYM": "84,43",
|
||||
"SAHPCB": "3,89",
|
||||
"SAHCYM": "3,89",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,16",
|
||||
"FOSCYM": "0,16",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,34",
|
||||
"PCAPCYM": "0,34",
|
||||
"TEUPCB": "41,77",
|
||||
"TEUCYM": "41,77",
|
||||
"CCVPCB": "2,26",
|
||||
"CCVCYM": "2,26",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "16-17",
|
||||
"PCB": "131,93",
|
||||
"CYM": "131,93",
|
||||
"COF2TD": "0,000104114191000000",
|
||||
"PMHPCB": "83,66",
|
||||
"PMHCYM": "83,66",
|
||||
"SAHPCB": "3,73",
|
||||
"SAHCYM": "3,73",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,16",
|
||||
"FOSCYM": "0,16",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,34",
|
||||
"PCAPCYM": "0,34",
|
||||
"TEUPCB": "41,77",
|
||||
"TEUCYM": "41,77",
|
||||
"CCVPCB": "2,25",
|
||||
"CCVCYM": "2,25",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "17-18",
|
||||
"PCB": "135,99",
|
||||
"CYM": "135,99",
|
||||
"COF2TD": "0,000105171071000000",
|
||||
"PMHPCB": "88,07",
|
||||
"PMHCYM": "88,07",
|
||||
"SAHPCB": "3,31",
|
||||
"SAHCYM": "3,31",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,16",
|
||||
"FOSCYM": "0,16",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,34",
|
||||
"PCAPCYM": "0,34",
|
||||
"TEUPCB": "41,77",
|
||||
"TEUCYM": "41,77",
|
||||
"CCVPCB": "2,31",
|
||||
"CCVCYM": "2,31",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "18-19",
|
||||
"PCB": "231,44",
|
||||
"CYM": "138,13",
|
||||
"COF2TD": "0,000106417649000000",
|
||||
"PMHPCB": "90,57",
|
||||
"PMHCYM": "90,33",
|
||||
"SAHPCB": "3,16",
|
||||
"SAHCYM": "3,15",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,16",
|
||||
"FOSCYM": "0,16",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "2,02",
|
||||
"PCAPCYM": "0,34",
|
||||
"TEUPCB": "133,12",
|
||||
"TEUCYM": "41,77",
|
||||
"CCVPCB": "2,37",
|
||||
"CCVCYM": "2,34",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "19-20",
|
||||
"PCB": "240,40",
|
||||
"CYM": "240,40",
|
||||
"COF2TD": "0,000108017615000000",
|
||||
"PMHPCB": "99,53",
|
||||
"PMHCYM": "99,53",
|
||||
"SAHPCB": "3,00",
|
||||
"SAHCYM": "3,00",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,17",
|
||||
"FOSCYM": "0,17",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "2,04",
|
||||
"PCAPCYM": "2,04",
|
||||
"TEUPCB": "133,12",
|
||||
"TEUCYM": "133,12",
|
||||
"CCVPCB": "2,52",
|
||||
"CCVCYM": "2,52",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "20-21",
|
||||
"PCB": "246,20",
|
||||
"CYM": "246,20",
|
||||
"COF2TD": "0,000114631042000000",
|
||||
"PMHPCB": "104,32",
|
||||
"PMHCYM": "104,32",
|
||||
"SAHPCB": "3,90",
|
||||
"SAHCYM": "3,90",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,17",
|
||||
"FOSCYM": "0,17",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "2,05",
|
||||
"PCAPCYM": "2,05",
|
||||
"TEUPCB": "133,12",
|
||||
"TEUCYM": "133,12",
|
||||
"CCVPCB": "2,61",
|
||||
"CCVCYM": "2,61",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "21-22",
|
||||
"PCB": "248,08",
|
||||
"CYM": "248,08",
|
||||
"COF2TD": "0,000127585671000000",
|
||||
"PMHPCB": "107,28",
|
||||
"PMHCYM": "107,28",
|
||||
"SAHPCB": "2,78",
|
||||
"SAHCYM": "2,78",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,17",
|
||||
"FOSCYM": "0,17",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "2,06",
|
||||
"PCAPCYM": "2,06",
|
||||
"TEUPCB": "133,12",
|
||||
"TEUCYM": "133,12",
|
||||
"CCVPCB": "2,64",
|
||||
"CCVCYM": "2,64",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "22-23",
|
||||
"PCB": "155,91",
|
||||
"CYM": "249,41",
|
||||
"COF2TD": "0,000130129026000000",
|
||||
"PMHPCB": "108,02",
|
||||
"PMHCYM": "108,39",
|
||||
"SAHPCB": "2,93",
|
||||
"SAHCYM": "2,94",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,17",
|
||||
"FOSCYM": "0,17",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,35",
|
||||
"PCAPCYM": "2,09",
|
||||
"TEUPCB": "41,77",
|
||||
"TEUCYM": "133,12",
|
||||
"CCVPCB": "2,64",
|
||||
"CCVCYM": "2,67",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
},
|
||||
{
|
||||
"Dia": "01/06/2021",
|
||||
"Hora": "23-24",
|
||||
"PCB": "156,50",
|
||||
"CYM": "156,50",
|
||||
"COF2TD": "0,000110367990000000",
|
||||
"PMHPCB": "108,02",
|
||||
"PMHCYM": "108,02",
|
||||
"SAHPCB": "3,50",
|
||||
"SAHCYM": "3,50",
|
||||
"FOMPCB": "0,03",
|
||||
"FOMCYM": "0,03",
|
||||
"FOSPCB": "0,17",
|
||||
"FOSCYM": "0,17",
|
||||
"INTPCB": "0,00",
|
||||
"INTCYM": "0,00",
|
||||
"PCAPPCB": "0,35",
|
||||
"PCAPCYM": "0,35",
|
||||
"TEUPCB": "41,77",
|
||||
"TEUCYM": "41,77",
|
||||
"CCVPCB": "2,66",
|
||||
"CCVCYM": "2,66",
|
||||
"EDSRPCB": "0,00",
|
||||
"EDSRCYM": "0,00"
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,154 @@
|
||||
{
|
||||
"data": {
|
||||
"type": "Precios mercado peninsular en tiempo real",
|
||||
"id": "mer13",
|
||||
"attributes": {
|
||||
"title": "Precios mercado peninsular en tiempo real",
|
||||
"last-update": "2021-05-31T20:19:18.000+02:00",
|
||||
"description": null
|
||||
},
|
||||
"meta": {
|
||||
"cache-control": {
|
||||
"cache": "MISS"
|
||||
}
|
||||
}
|
||||
},
|
||||
"included": [
|
||||
{
|
||||
"type": "PVPC (\u20ac\/MWh)",
|
||||
"id": "1001",
|
||||
"groupId": null,
|
||||
"attributes": {
|
||||
"title": "PVPC (\u20ac\/MWh)",
|
||||
"description": null,
|
||||
"color": "#ffcf09",
|
||||
"type": null,
|
||||
"magnitude": "price",
|
||||
"composite": false,
|
||||
"last-update": "2021-05-31T20:19:18.000+02:00",
|
||||
"values": [
|
||||
{
|
||||
"value": 116.33,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T00:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 115.95,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T01:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 114.89,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T02:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 114.96,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T03:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 114.84,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T04:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 116.03,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T05:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 116.29,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T06:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 115.7,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T07:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 152.89,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T08:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 150.83,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T09:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 149.28,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T10:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 240.5,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T11:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 238.09,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T12:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 235.3,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T13:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 231.28,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T14:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 132.88,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T15:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 131.93,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T16:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 135.99,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T17:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 138.13,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T18:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 240.4,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T19:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 246.2,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T20:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 248.08,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T21:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 249.41,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T22:00:00.000+02:00"
|
||||
},
|
||||
{
|
||||
"value": 156.5,
|
||||
"percentage": 1,
|
||||
"datetime": "2021-06-01T23:00:00.000+02:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
@ -90,10 +90,9 @@ async def test_config_flow(
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get("sensor.test")
|
||||
check_valid_state(state, tariff=TARIFFS[1])
|
||||
price_pbc = state.state
|
||||
assert pvpc_aioclient_mock.call_count == 2
|
||||
assert state.attributes["period"] == "P2"
|
||||
assert state.attributes["next_period"] == "P1"
|
||||
assert state.attributes["period"] == "P1"
|
||||
assert state.attributes["next_period"] == "P2"
|
||||
assert state.attributes["available_power"] == 4600
|
||||
|
||||
# check options flow
|
||||
@ -111,10 +110,8 @@ async def test_config_flow(
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get("sensor.test")
|
||||
price_cym = state.state
|
||||
check_valid_state(state, tariff=TARIFFS[0])
|
||||
assert pvpc_aioclient_mock.call_count == 3
|
||||
assert state.attributes["period"] == "P2"
|
||||
assert state.attributes["next_period"] == "P1"
|
||||
assert state.attributes["available_power"] == 3000
|
||||
assert price_cym < price_pbc
|
||||
|
@ -11,100 +11,19 @@ from homeassistant.components.pvpc_hourly_pricing import (
|
||||
TARIFFS,
|
||||
)
|
||||
from homeassistant.const import CONF_NAME
|
||||
from homeassistant.core import ATTR_NOW, EVENT_TIME_CHANGED
|
||||
from homeassistant.util import dt as dt_util
|
||||
|
||||
from .conftest import check_valid_state
|
||||
|
||||
from tests.common import MockConfigEntry, date_util, mock_registry
|
||||
from tests.common import (
|
||||
MockConfigEntry,
|
||||
async_fire_time_changed,
|
||||
date_util,
|
||||
mock_registry,
|
||||
)
|
||||
from tests.test_util.aiohttp import AiohttpClientMocker
|
||||
|
||||
|
||||
async def _process_time_step(
|
||||
hass, mock_data, key_state=None, value=None, tariff="discrimination", delta_min=60
|
||||
):
|
||||
state = hass.states.get("sensor.test_dst")
|
||||
check_valid_state(state, tariff=tariff, value=value, key_attr=key_state)
|
||||
|
||||
mock_data["return_time"] += timedelta(minutes=delta_min)
|
||||
hass.bus.async_fire(EVENT_TIME_CHANGED, {ATTR_NOW: mock_data["return_time"]})
|
||||
await hass.async_block_till_done()
|
||||
return state
|
||||
|
||||
|
||||
async def test_sensor_availability(
|
||||
hass, caplog, legacy_patchable_time, pvpc_aioclient_mock: AiohttpClientMocker
|
||||
):
|
||||
"""Test sensor availability and handling of cloud access."""
|
||||
hass.config.time_zone = dt_util.get_time_zone("Europe/Madrid")
|
||||
config_entry = MockConfigEntry(
|
||||
domain=DOMAIN, data={CONF_NAME: "test_dst", ATTR_TARIFF: "discrimination"}
|
||||
)
|
||||
config_entry.add_to_hass(hass)
|
||||
assert len(hass.config_entries.async_entries(DOMAIN)) == 1
|
||||
mock_data = {"return_time": datetime(2019, 10, 27, 20, 0, 0, tzinfo=date_util.UTC)}
|
||||
|
||||
def mock_now():
|
||||
return mock_data["return_time"]
|
||||
|
||||
with patch("homeassistant.util.dt.utcnow", new=mock_now):
|
||||
assert await hass.config_entries.async_setup(config_entry.entry_id)
|
||||
|
||||
# check migration
|
||||
current_entries = hass.config_entries.async_entries(DOMAIN)
|
||||
assert len(current_entries) == 1
|
||||
migrated_entry = current_entries[0]
|
||||
assert migrated_entry.version == 1
|
||||
assert migrated_entry.data[ATTR_POWER] == migrated_entry.data[ATTR_POWER_P3]
|
||||
assert migrated_entry.data[ATTR_TARIFF] == TARIFFS[0]
|
||||
|
||||
await hass.async_block_till_done()
|
||||
caplog.clear()
|
||||
assert pvpc_aioclient_mock.call_count == 2
|
||||
|
||||
await _process_time_step(hass, mock_data, "price_21h", 0.13896)
|
||||
await _process_time_step(hass, mock_data, "price_22h", 0.06893)
|
||||
assert pvpc_aioclient_mock.call_count == 4
|
||||
await _process_time_step(hass, mock_data, "price_23h", 0.06935)
|
||||
assert pvpc_aioclient_mock.call_count == 5
|
||||
|
||||
# sensor has no more prices, state is "unavailable" from now on
|
||||
await _process_time_step(hass, mock_data, value="unavailable")
|
||||
await _process_time_step(hass, mock_data, value="unavailable")
|
||||
num_errors = sum(
|
||||
1
|
||||
for x in caplog.records
|
||||
if x.levelno == logging.ERROR and "unknown job listener" not in x.msg
|
||||
)
|
||||
num_warnings = sum(1 for x in caplog.records if x.levelno == logging.WARNING)
|
||||
assert num_warnings == 1
|
||||
assert num_errors == 0
|
||||
assert pvpc_aioclient_mock.call_count == 9
|
||||
|
||||
# check that it is silent until it becomes available again
|
||||
caplog.clear()
|
||||
with caplog.at_level(logging.WARNING):
|
||||
# silent mode
|
||||
for _ in range(21):
|
||||
await _process_time_step(hass, mock_data, value="unavailable")
|
||||
assert pvpc_aioclient_mock.call_count == 30
|
||||
assert len(caplog.messages) == 0
|
||||
|
||||
# warning about data access recovered
|
||||
await _process_time_step(hass, mock_data, value="unavailable")
|
||||
assert pvpc_aioclient_mock.call_count == 31
|
||||
assert len(caplog.messages) == 1
|
||||
assert caplog.records[0].levelno == logging.WARNING
|
||||
|
||||
# working ok again
|
||||
await _process_time_step(hass, mock_data, "price_00h", value=0.06821)
|
||||
assert pvpc_aioclient_mock.call_count == 32
|
||||
await _process_time_step(hass, mock_data, "price_01h", value=0.06627)
|
||||
assert pvpc_aioclient_mock.call_count == 33
|
||||
assert len(caplog.messages) == 1
|
||||
assert caplog.records[0].levelno == logging.WARNING
|
||||
|
||||
|
||||
async def test_multi_sensor_migration(
|
||||
hass, caplog, legacy_patchable_time, pvpc_aioclient_mock: AiohttpClientMocker
|
||||
):
|
||||
@ -139,7 +58,7 @@ async def test_multi_sensor_migration(
|
||||
assert len(hass.config_entries.async_entries(DOMAIN)) == 2
|
||||
assert len(entity_reg.entities) == 2
|
||||
|
||||
mock_data = {"return_time": datetime(2019, 10, 27, 20, tzinfo=date_util.UTC)}
|
||||
mock_data = {"return_time": datetime(2021, 6, 1, 21, tzinfo=date_util.UTC)}
|
||||
|
||||
def mock_now():
|
||||
return mock_data["return_time"]
|
||||
@ -164,3 +83,15 @@ async def test_multi_sensor_migration(
|
||||
|
||||
await hass.async_block_till_done()
|
||||
assert pvpc_aioclient_mock.call_count == 2
|
||||
|
||||
# check state and availability
|
||||
state = hass.states.get("sensor.test_pvpc_1")
|
||||
check_valid_state(state, tariff=TARIFFS[0], value=0.1565)
|
||||
|
||||
mock_data["return_time"] += timedelta(minutes=60)
|
||||
async_fire_time_changed(hass, mock_data["return_time"])
|
||||
await list(hass.data[DOMAIN].values())[0].async_refresh()
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get("sensor.test_pvpc_1")
|
||||
check_valid_state(state, tariff=TARIFFS[0], value="unavailable")
|
||||
assert pvpc_aioclient_mock.call_count == 3
|
||||
|
Loading…
x
Reference in New Issue
Block a user