From 2286029b5d82d48e4edb410caad7f2f145c541bc Mon Sep 17 00:00:00 2001 From: Eugenio Panadero Date: Wed, 11 Jan 2023 14:49:42 +0100 Subject: [PATCH] Bump `aiopvpc` to 4.0.1 (#85612) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 📦️ 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 --- .../pvpc_hourly_pricing/__init__.py | 21 +- .../pvpc_hourly_pricing/manifest.json | 4 +- .../components/pvpc_hourly_pricing/sensor.py | 15 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- .../pvpc_hourly_pricing/conftest.py | 29 +- .../fixtures/PVPC_DATA_2021_06_01.json | 154 ----- .../fixtures/PVPC_DATA_2023_01_06.json | 652 ++++++++++++++++++ .../pvpc_hourly_pricing/test_config_flow.py | 15 +- .../pvpc_hourly_pricing/test_sensor.py | 6 +- 10 files changed, 701 insertions(+), 199 deletions(-) delete mode 100644 tests/components/pvpc_hourly_pricing/fixtures/PVPC_DATA_2021_06_01.json create mode 100644 tests/components/pvpc_hourly_pricing/fixtures/PVPC_DATA_2023_01_06.json diff --git a/homeassistant/components/pvpc_hourly_pricing/__init__.py b/homeassistant/components/pvpc_hourly_pricing/__init__.py index faa5c5828d2..d83c0e82521 100644 --- a/homeassistant/components/pvpc_hourly_pricing/__init__.py +++ b/homeassistant/components/pvpc_hourly_pricing/__init__.py @@ -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 diff --git a/homeassistant/components/pvpc_hourly_pricing/manifest.json b/homeassistant/components/pvpc_hourly_pricing/manifest.json index 7b44d2cfa95..02bcee70d01 100644 --- a/homeassistant/components/pvpc_hourly_pricing/manifest.json +++ b/homeassistant/components/pvpc_hourly_pricing/manifest.json @@ -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"] } diff --git a/homeassistant/components/pvpc_hourly_pricing/sensor.py b/homeassistant/components/pvpc_hourly_pricing/sensor.py index 7419b8eef46..4792b6d9269 100644 --- a/homeassistant/components/pvpc_hourly_pricing/sensor.py +++ b/homeassistant/components/pvpc_hourly_pricing/sensor.py @@ -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 diff --git a/requirements_all.txt b/requirements_all.txt index 86a16e82558..e3d15df978b 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -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 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 743c9974410..44bc105e4f2 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -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 diff --git a/tests/components/pvpc_hourly_pricing/conftest.py b/tests/components/pvpc_hourly_pricing/conftest.py index 632284774ee..fb2c9188ce7 100644 --- a/tests/components/pvpc_hourly_pricing/conftest.py +++ b/tests/components/pvpc_hourly_pricing/conftest.py @@ -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",' diff --git a/tests/components/pvpc_hourly_pricing/fixtures/PVPC_DATA_2021_06_01.json b/tests/components/pvpc_hourly_pricing/fixtures/PVPC_DATA_2021_06_01.json deleted file mode 100644 index eb2fb6f19f5..00000000000 --- a/tests/components/pvpc_hourly_pricing/fixtures/PVPC_DATA_2021_06_01.json +++ /dev/null @@ -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" - } - ] - } - } - ] -} diff --git a/tests/components/pvpc_hourly_pricing/fixtures/PVPC_DATA_2023_01_06.json b/tests/components/pvpc_hourly_pricing/fixtures/PVPC_DATA_2023_01_06.json new file mode 100644 index 00000000000..501a40d8a54 --- /dev/null +++ b/tests/components/pvpc_hourly_pricing/fixtures/PVPC_DATA_2023_01_06.json @@ -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" + } + ] +} diff --git a/tests/components/pvpc_hourly_pricing/test_config_flow.py b/tests/components/pvpc_hourly_pricing/test_config_flow.py index e67aca154c4..b0ee2c9585a 100644 --- a/tests/components/pvpc_hourly_pricing/test_config_flow.py +++ b/tests/components/pvpc_hourly_pricing/test_config_flow.py @@ -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 diff --git a/tests/components/pvpc_hourly_pricing/test_sensor.py b/tests/components/pvpc_hourly_pricing/test_sensor.py index 5153e9cedbd..eb5b35b38d4 100644 --- a/tests/components/pvpc_hourly_pricing/test_sensor.py +++ b/tests/components/pvpc_hourly_pricing/test_sensor.py @@ -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()