Bump `aiopvpc` to 4.0.1 (#85612)

* 📦️ Bump aiopvpc version

* ♻️ Evolve DataUpdateCoordinator and PVPC sensor for new aiopvpc

setting `SensorDeviceClass.MONETARY` for the price sensor

* 🍱 tests: Update tests fixtures with new sensor data

for aiopvpc v4 with 'esios_public' as data-source

*  tests: Adapt test suite for new default data-source

* 📦️ Bump aiopvpc version for latest patch 4.0.1

* ️ Revert changes unrelated to library bump

* ️ Revert tests changes unrelated to library bump
This commit is contained in:
Eugenio Panadero 2023-01-11 14:49:42 +01:00 committed by GitHub
parent 82ec769ec5
commit 2286029b5d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 701 additions and 199 deletions

View File

@ -1,9 +1,8 @@
"""The pvpc_hourly_pricing integration to collect Spain official electric prices."""
from collections.abc import Mapping
from datetime import datetime, timedelta
from datetime import timedelta
import logging
from aiopvpc import DEFAULT_POWER_KW, TARIFFS, PVPCData
from aiopvpc import DEFAULT_POWER_KW, TARIFFS, EsiosApiData, PVPCData
import voluptuous as vol
from homeassistant.config_entries import ConfigEntry
@ -122,7 +121,7 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
return unload_ok
class ElecPricesDataUpdateCoordinator(DataUpdateCoordinator[Mapping[datetime, float]]):
class ElecPricesDataUpdateCoordinator(DataUpdateCoordinator[EsiosApiData]):
"""Class to manage fetching Electricity prices data from API."""
def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None:
@ -144,11 +143,13 @@ class ElecPricesDataUpdateCoordinator(DataUpdateCoordinator[Mapping[datetime, fl
"""Return entry ID."""
return self._entry.entry_id
async def _async_update_data(self) -> Mapping[datetime, float]:
async def _async_update_data(self) -> EsiosApiData:
"""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:
api_data = await self.api.async_update_all(self.data, dt_util.utcnow())
if (
not api_data
or not api_data.sensors
or not all(api_data.availability.values())
):
raise UpdateFailed
return prices
return api_data

View File

@ -3,9 +3,9 @@
"name": "Spain electricity hourly pricing (PVPC)",
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/pvpc_hourly_pricing",
"requirements": ["aiopvpc==3.0.0"],
"requirements": ["aiopvpc==4.0.1"],
"codeowners": ["@azogue"],
"quality_scale": "platinum",
"iot_class": "cloud_polling",
"loggers": ["aiopvpc", "holidays"]
"loggers": ["aiopvpc"]
}

View File

@ -142,11 +142,11 @@ class ElecPriceSensor(CoordinatorEntity[ElecPricesDataUpdateCoordinator], Sensor
self._attr_unique_id = unique_id
self._attr_name = name
self._attr_device_info = DeviceInfo(
configuration_url="https://www.ree.es/es/apidatos",
configuration_url="https://api.esios.ree.es",
entry_type=DeviceEntryType.SERVICE,
identifiers={(DOMAIN, coordinator.entry_id)},
manufacturer="REE",
name="PVPC (REData API)",
name="ESIOS API",
)
self._state: StateType = None
self._attrs: Mapping[str, Any] = {}
@ -171,21 +171,26 @@ class ElecPriceSensor(CoordinatorEntity[ElecPricesDataUpdateCoordinator], Sensor
@callback
def update_current_price(self, now: datetime) -> None:
"""Update the sensor state, by selecting the current price for this hour."""
self.coordinator.api.process_state_and_attributes(now)
self.coordinator.api.process_state_and_attributes(
self.coordinator.data, self.entity_description.key, now
)
self.async_write_ha_state()
@property
def native_value(self) -> StateType:
"""Return the state of the sensor."""
self._state = self.coordinator.api.state
self._state = self.coordinator.api.states.get(self.entity_description.key)
return self._state
@property
def extra_state_attributes(self) -> Mapping[str, Any] | None:
"""Return the state attributes."""
sensor_attributes = self.coordinator.api.sensor_attributes.get(
self.entity_description.key, {}
)
self._attrs = {
_PRICE_SENSOR_ATTRIBUTES_MAP[key]: value
for key, value in self.coordinator.api.attributes.items()
for key, value in sensor_attributes.items()
if key in _PRICE_SENSOR_ATTRIBUTES_MAP
}
return self._attrs

View File

@ -244,7 +244,7 @@ aiopurpleair==2022.12.1
aiopvapi==2.0.4
# homeassistant.components.pvpc_hourly_pricing
aiopvpc==3.0.0
aiopvpc==4.0.1
# homeassistant.components.lidarr
# homeassistant.components.radarr

View File

@ -222,7 +222,7 @@ aiopurpleair==2022.12.1
aiopvapi==2.0.4
# homeassistant.components.pvpc_hourly_pricing
aiopvpc==3.0.0
aiopvpc==4.0.1
# homeassistant.components.lidarr
# homeassistant.components.radarr

View File

@ -4,16 +4,12 @@ from http import HTTPStatus
import pytest
from homeassistant.components.pvpc_hourly_pricing import ATTR_TARIFF, DOMAIN
from homeassistant.const import (
ATTR_UNIT_OF_MEASUREMENT,
CURRENCY_EURO,
ENERGY_KILO_WATT_HOUR,
)
from homeassistant.const import ATTR_UNIT_OF_MEASUREMENT, CURRENCY_EURO, UnitOfEnergy
from tests.common import load_fixture
from tests.test_util.aiohttp import AiohttpClientMocker
FIXTURE_JSON_DATA_2021_06_01 = "PVPC_DATA_2021_06_01.json"
FIXTURE_JSON_PUBLIC_DATA_2023_01_06 = "PVPC_DATA_2023_01_06.json"
def check_valid_state(state, tariff: str, value=None, key_attr=None):
@ -21,7 +17,7 @@ def check_valid_state(state, tariff: str, value=None, key_attr=None):
assert state
assert (
state.attributes[ATTR_UNIT_OF_MEASUREMENT]
== f"{CURRENCY_EURO}/{ENERGY_KILO_WATT_HOUR}"
== f"{CURRENCY_EURO}/{UnitOfEnergy.KILO_WATT_HOUR}"
)
try:
_ = float(state.state)
@ -42,17 +38,18 @@ 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."""
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"
mask_url_public = (
"https://api.esios.ree.es/archives/70/download_json?locale=es&date={0}"
)
# 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
example_day = "2023-01-06"
aioclient_mock.get(
mask_url.format(8741, "2021-06-02"),
mask_url_public.format(example_day),
text=load_fixture(f"{DOMAIN}/{FIXTURE_JSON_PUBLIC_DATA_2023_01_06}"),
)
# simulate missing days
aioclient_mock.get(
mask_url_public.format("2023-01-07"),
status=HTTPStatus.BAD_GATEWAY,
text=(
'{"errors":[{"code":502,"status":"502","title":"Bad response from ESIOS",'

View File

@ -1,154 +0,0 @@
{
"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"
}
]
}
}
]
}

View File

@ -0,0 +1,652 @@
{
"PVPC": [
{
"Dia": "06/01/2023",
"Hora": "00-01",
"PCB": "159,69",
"CYM": "159,69",
"COF2TD": "0,000132685792000000",
"PMHPCB": "131,22",
"PMHCYM": "131,22",
"SAHPCB": "14,49",
"SAHCYM": "14,49",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,36",
"CCVCYM": "3,36",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "7,21",
"EDCGASCYM": "7,21"
},
{
"Dia": "06/01/2023",
"Hora": "01-02",
"PCB": "155,71",
"CYM": "155,71",
"COF2TD": "0,000111367791000000",
"PMHPCB": "124,44",
"PMHCYM": "124,44",
"SAHPCB": "18,44",
"SAHCYM": "18,44",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,30",
"CCVCYM": "3,30",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "6,11",
"EDCGASCYM": "6,11"
},
{
"Dia": "06/01/2023",
"Hora": "02-03",
"PCB": "154,41",
"CYM": "154,41",
"COF2TD": "0,000095082106000000",
"PMHPCB": "121,01",
"PMHCYM": "121,01",
"SAHPCB": "20,12",
"SAHCYM": "20,12",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,29",
"CCVCYM": "3,29",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "6,57",
"EDCGASCYM": "6,57"
},
{
"Dia": "06/01/2023",
"Hora": "03-04",
"PCB": "139,37",
"CYM": "139,37",
"COF2TD": "0,000085049382000000",
"PMHPCB": "102,36",
"PMHCYM": "102,36",
"SAHPCB": "24,98",
"SAHCYM": "24,98",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,07",
"CCVCYM": "3,07",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "5,52",
"EDCGASCYM": "5,52"
},
{
"Dia": "06/01/2023",
"Hora": "04-05",
"PCB": "134,02",
"CYM": "134,02",
"COF2TD": "0,000079934351000000",
"PMHPCB": "95,57",
"PMHCYM": "95,57",
"SAHPCB": "26,37",
"SAHCYM": "26,37",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "2,99",
"CCVCYM": "2,99",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "5,66",
"EDCGASCYM": "5,66"
},
{
"Dia": "06/01/2023",
"Hora": "05-06",
"PCB": "140,02",
"CYM": "140,02",
"COF2TD": "0,000078802072000000",
"PMHPCB": "102,11",
"PMHCYM": "102,11",
"SAHPCB": "25,68",
"SAHCYM": "25,68",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,08",
"CCVCYM": "3,08",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "5,73",
"EDCGASCYM": "5,73"
},
{
"Dia": "06/01/2023",
"Hora": "06-07",
"PCB": "154,05",
"CYM": "154,05",
"COF2TD": "0,000080430301000000",
"PMHPCB": "121,91",
"PMHCYM": "121,91",
"SAHPCB": "19,87",
"SAHCYM": "19,87",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,28",
"CCVCYM": "3,28",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "5,56",
"EDCGASCYM": "5,56"
},
{
"Dia": "06/01/2023",
"Hora": "07-08",
"PCB": "163,15",
"CYM": "163,15",
"COF2TD": "0,000084537404000000",
"PMHPCB": "133,05",
"PMHCYM": "133,05",
"SAHPCB": "17,96",
"SAHCYM": "17,96",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,42",
"CCVCYM": "3,42",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "5,30",
"EDCGASCYM": "5,30"
},
{
"Dia": "06/01/2023",
"Hora": "08-09",
"PCB": "180,50",
"CYM": "180,50",
"COF2TD": "0,000092612528000000",
"PMHPCB": "151,14",
"PMHCYM": "151,14",
"SAHPCB": "17,14",
"SAHCYM": "17,14",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,68",
"CCVCYM": "3,68",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "5,12",
"EDCGASCYM": "5,12"
},
{
"Dia": "06/01/2023",
"Hora": "09-10",
"PCB": "174,90",
"CYM": "174,90",
"COF2TD": "0,000114375020000000",
"PMHPCB": "152,13",
"PMHCYM": "152,13",
"SAHPCB": "12,34",
"SAHCYM": "12,34",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,58",
"CCVCYM": "3,58",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "3,44",
"EDCGASCYM": "3,44"
},
{
"Dia": "06/01/2023",
"Hora": "10-11",
"PCB": "166,47",
"CYM": "166,47",
"COF2TD": "0,000137288470000000",
"PMHPCB": "144,86",
"PMHCYM": "144,86",
"SAHPCB": "12,11",
"SAHCYM": "12,11",
"FOMPCB": "0,04",
"FOMCYM": "0,04",
"FOSPCB": "0,19",
"FOSCYM": "0,19",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,44",
"CCVCYM": "3,44",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "2,65",
"EDCGASCYM": "2,65"
},
{
"Dia": "06/01/2023",
"Hora": "11-12",
"PCB": "152,30",
"CYM": "152,30",
"COF2TD": "0,000147389186000000",
"PMHPCB": "132,46",
"PMHCYM": "132,46",
"SAHPCB": "10,92",
"SAHCYM": "10,92",
"FOMPCB": "0,04",
"FOMCYM": "0,04",
"FOSPCB": "0,19",
"FOSCYM": "0,19",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,22",
"CCVCYM": "3,22",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "2,29",
"EDCGASCYM": "2,29"
},
{
"Dia": "06/01/2023",
"Hora": "12-13",
"PCB": "144,54",
"CYM": "144,54",
"COF2TD": "0,000147566474000000",
"PMHPCB": "124,33",
"PMHCYM": "124,33",
"SAHPCB": "11,39",
"SAHCYM": "11,39",
"FOMPCB": "0,04",
"FOMCYM": "0,04",
"FOSPCB": "0,19",
"FOSCYM": "0,19",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,11",
"CCVCYM": "3,11",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "2,30",
"EDCGASCYM": "2,30"
},
{
"Dia": "06/01/2023",
"Hora": "13-14",
"PCB": "132,08",
"CYM": "132,08",
"COF2TD": "0,000152593999000000",
"PMHPCB": "108,55",
"PMHCYM": "108,55",
"SAHPCB": "15,11",
"SAHCYM": "15,11",
"FOMPCB": "0,04",
"FOMCYM": "0,04",
"FOSPCB": "0,19",
"FOSCYM": "0,19",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "2,92",
"CCVCYM": "2,92",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "2,10",
"EDCGASCYM": "2,10"
},
{
"Dia": "06/01/2023",
"Hora": "14-15",
"PCB": "119,60",
"CYM": "119,60",
"COF2TD": "0,000151275074000000",
"PMHPCB": "96,79",
"PMHCYM": "96,79",
"SAHPCB": "15,31",
"SAHCYM": "15,31",
"FOMPCB": "0,04",
"FOMCYM": "0,04",
"FOSPCB": "0,19",
"FOSCYM": "0,19",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "2,73",
"CCVCYM": "2,73",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "1,35",
"EDCGASCYM": "1,35"
},
{
"Dia": "06/01/2023",
"Hora": "15-16",
"PCB": "108,74",
"CYM": "108,74",
"COF2TD": "0,000136801693000000",
"PMHPCB": "85,31",
"PMHCYM": "85,31",
"SAHPCB": "16,78",
"SAHCYM": "16,78",
"FOMPCB": "0,04",
"FOMCYM": "0,04",
"FOSPCB": "0,19",
"FOSCYM": "0,19",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "2,57",
"CCVCYM": "2,57",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "0,66",
"EDCGASCYM": "0,66"
},
{
"Dia": "06/01/2023",
"Hora": "16-17",
"PCB": "123,79",
"CYM": "123,79",
"COF2TD": "0,000129250075000000",
"PMHPCB": "98,80",
"PMHCYM": "98,80",
"SAHPCB": "17,70",
"SAHCYM": "17,70",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,19",
"FOSCYM": "0,19",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "2,80",
"CCVCYM": "2,80",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "1,07",
"EDCGASCYM": "1,07"
},
{
"Dia": "06/01/2023",
"Hora": "17-18",
"PCB": "166,41",
"CYM": "166,41",
"COF2TD": "0,000131159722000000",
"PMHPCB": "148,24",
"PMHCYM": "148,24",
"SAHPCB": "9,16",
"SAHCYM": "9,16",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,45",
"CCVCYM": "3,45",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "2,15",
"EDCGASCYM": "2,15"
},
{
"Dia": "06/01/2023",
"Hora": "18-19",
"PCB": "173,49",
"CYM": "173,49",
"COF2TD": "0,000151915481000000",
"PMHPCB": "157,13",
"PMHCYM": "157,13",
"SAHPCB": "7,31",
"SAHCYM": "7,31",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,55",
"CCVCYM": "3,55",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "2,08",
"EDCGASCYM": "2,08"
},
{
"Dia": "06/01/2023",
"Hora": "19-20",
"PCB": "186,17",
"CYM": "186,17",
"COF2TD": "0,000166375982000000",
"PMHPCB": "168,44",
"PMHCYM": "168,44",
"SAHPCB": "6,56",
"SAHCYM": "6,56",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,74",
"CCVCYM": "3,74",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "4,02",
"EDCGASCYM": "4,02"
},
{
"Dia": "06/01/2023",
"Hora": "20-21",
"PCB": "186,11",
"CYM": "186,11",
"COF2TD": "0,000177449572000000",
"PMHPCB": "168,44",
"PMHCYM": "168,44",
"SAHPCB": "6,52",
"SAHCYM": "6,52",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,74",
"CCVCYM": "3,74",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "3,99",
"EDCGASCYM": "3,99"
},
{
"Dia": "06/01/2023",
"Hora": "21-22",
"PCB": "178,45",
"CYM": "178,45",
"COF2TD": "0,000181996443000000",
"PMHPCB": "161,70",
"PMHCYM": "161,70",
"SAHPCB": "6,65",
"SAHCYM": "6,65",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,63",
"CCVCYM": "3,63",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "3,05",
"EDCGASCYM": "3,05"
},
{
"Dia": "06/01/2023",
"Hora": "22-23",
"PCB": "139,37",
"CYM": "139,37",
"COF2TD": "0,000170132849000000",
"PMHPCB": "122,91",
"PMHCYM": "122,91",
"SAHPCB": "7,67",
"SAHCYM": "7,67",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "3,05",
"CCVCYM": "3,05",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "2,33",
"EDCGASCYM": "2,33"
},
{
"Dia": "06/01/2023",
"Hora": "23-24",
"PCB": "129,35",
"CYM": "129,35",
"COF2TD": "0,000146932566000000",
"PMHPCB": "113,05",
"PMHCYM": "113,05",
"SAHPCB": "8,35",
"SAHCYM": "8,35",
"FOMPCB": "0,05",
"FOMCYM": "0,05",
"FOSPCB": "0,20",
"FOSCYM": "0,20",
"INTPCB": "0,00",
"INTCYM": "0,00",
"PCAPPCB": "0,00",
"PCAPCYM": "0,00",
"TEUPCB": "3,18",
"TEUCYM": "3,18",
"CCVPCB": "2,90",
"CCVCYM": "2,90",
"EDSRPCB": "0,00",
"EDSRCYM": "0,00",
"EDCGASPCB": "1,63",
"EDCGASCYM": "1,63"
}
]
}

View File

@ -19,6 +19,8 @@ from .conftest import check_valid_state
from tests.common import date_util
from tests.test_util.aiohttp import AiohttpClientMocker
_MOCK_TIME_VALID_RESPONSES = datetime(2023, 1, 6, 12, 0, tzinfo=date_util.UTC)
async def test_config_flow(hass, pvpc_aioclient_mock: AiohttpClientMocker):
"""
@ -37,9 +39,8 @@ async def test_config_flow(hass, pvpc_aioclient_mock: AiohttpClientMocker):
ATTR_POWER: 4.6,
ATTR_POWER_P3: 5.75,
}
mock_data = {"return_time": datetime(2021, 6, 1, 12, 0, tzinfo=date_util.UTC)}
with freeze_time(mock_data["return_time"]):
with freeze_time(_MOCK_TIME_VALID_RESPONSES):
result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER}
)
@ -86,9 +87,9 @@ async def test_config_flow(hass, pvpc_aioclient_mock: AiohttpClientMocker):
state = hass.states.get("sensor.test")
check_valid_state(state, tariff=TARIFFS[1])
assert pvpc_aioclient_mock.call_count == 2
assert state.attributes["period"] == "P1"
assert state.attributes["period"] == "P3"
assert state.attributes["next_period"] == "P2"
assert state.attributes["available_power"] == 4600
assert state.attributes["available_power"] == 5750
# check options flow
current_entries = hass.config_entries.async_entries(DOMAIN)
@ -107,6 +108,6 @@ async def test_config_flow(hass, pvpc_aioclient_mock: AiohttpClientMocker):
state = hass.states.get("sensor.test")
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 state.attributes["period"] == "P3"
assert state.attributes["next_period"] == "P2"
assert state.attributes["available_power"] == 4600

View File

@ -58,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(2021, 6, 1, 21, tzinfo=date_util.UTC)}
mock_data = {"return_time": datetime(2023, 1, 6, 21, tzinfo=date_util.UTC)}
caplog.clear()
with caplog.at_level(logging.WARNING):
@ -87,9 +87,9 @@ async def test_multi_sensor_migration(
# check state and availability
state = hass.states.get("sensor.test_pvpc_1")
check_valid_state(state, tariff=TARIFFS[0], value=0.1565)
check_valid_state(state, tariff=TARIFFS[0], value=0.13937)
with freeze_time(mock_data["return_time"] + timedelta(minutes=60)):
with freeze_time(mock_data["return_time"] + timedelta(hours=2)):
async_fire_time_changed(hass, mock_data["return_time"])
await list(hass.data[DOMAIN].values())[0].async_refresh()
await hass.async_block_till_done()