diff --git a/homeassistant/components/watttime/config_flow.py b/homeassistant/components/watttime/config_flow.py index f479ec69630b..51f099e7d319 100644 --- a/homeassistant/components/watttime/config_flow.py +++ b/homeassistant/components/watttime/config_flow.py @@ -145,7 +145,7 @@ class WattTimeConfigFlow(ConfigFlow, domain=DOMAIN): try: grid_region = await self._client.emissions.async_get_grid_region( - user_input[CONF_LATITUDE], user_input[CONF_LONGITUDE] + user_input[CONF_LATITUDE], user_input[CONF_LONGITUDE], "co2_moer" ) except CoordinatesNotFoundError: return self.async_show_form( @@ -168,8 +168,8 @@ class WattTimeConfigFlow(ConfigFlow, domain=DOMAIN): CONF_PASSWORD: self._data[CONF_PASSWORD], CONF_LATITUDE: user_input[CONF_LATITUDE], CONF_LONGITUDE: user_input[CONF_LONGITUDE], - CONF_BALANCING_AUTHORITY: grid_region["name"], - CONF_BALANCING_AUTHORITY_ABBREV: grid_region["abbrev"], + CONF_BALANCING_AUTHORITY: grid_region["region_full_name"], + CONF_BALANCING_AUTHORITY_ABBREV: grid_region["region"], }, ) diff --git a/homeassistant/components/watttime/coordinator.py b/homeassistant/components/watttime/coordinator.py index b52a986ee96d..e9da03746710 100644 --- a/homeassistant/components/watttime/coordinator.py +++ b/homeassistant/components/watttime/coordinator.py @@ -4,23 +4,23 @@ from datetime import timedelta from typing import override from aiowatttime import Client -from aiowatttime.emissions import RealTimeEmissionsResponseType from aiowatttime.errors import InvalidCredentialsError, WattTimeError from homeassistant.config_entries import ConfigEntry -from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryAuthFailed +from homeassistant.helpers.typing import StateType from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed -from .const import DOMAIN, LOGGER +from .const import CONF_BALANCING_AUTHORITY_ABBREV, DOMAIN, LOGGER DEFAULT_UPDATE_INTERVAL = timedelta(minutes=5) +type WattTimeData = dict[str, StateType] type WattTimeConfigEntry = ConfigEntry[WattTimeCoordinator] -class WattTimeCoordinator(DataUpdateCoordinator[RealTimeEmissionsResponseType]): +class WattTimeCoordinator(DataUpdateCoordinator[WattTimeData]): """Coordinator for WattTime data updates.""" config_entry: WattTimeConfigEntry @@ -42,12 +42,11 @@ class WattTimeCoordinator(DataUpdateCoordinator[RealTimeEmissionsResponseType]): self.client = client @override - async def _async_update_data(self) -> RealTimeEmissionsResponseType: + async def _async_update_data(self) -> WattTimeData: """Get the latest realtime emissions data.""" try: - return await self.client.emissions.async_get_realtime_emissions( - self.config_entry.data[CONF_LATITUDE], - self.config_entry.data[CONF_LONGITUDE], + data = await self.client.emissions.async_get_realtime_emissions( + self.config_entry.data[CONF_BALANCING_AUTHORITY_ABBREV] ) except InvalidCredentialsError as err: raise ConfigEntryAuthFailed("Invalid username/password") from err @@ -55,3 +54,5 @@ class WattTimeCoordinator(DataUpdateCoordinator[RealTimeEmissionsResponseType]): raise UpdateFailed( f"Error while requesting data from WattTime: {err}" ) from err + + return {"percent": data["data"][0]["value"]} diff --git a/homeassistant/components/watttime/manifest.json b/homeassistant/components/watttime/manifest.json index 3abe910b9b0e..eafc24d0c91f 100644 --- a/homeassistant/components/watttime/manifest.json +++ b/homeassistant/components/watttime/manifest.json @@ -7,5 +7,5 @@ "integration_type": "service", "iot_class": "cloud_polling", "loggers": ["aiowatttime"], - "requirements": ["aiowatttime==0.1.1"] + "requirements": ["aiowatttime==2024.6.0"] } diff --git a/homeassistant/components/watttime/sensor.py b/homeassistant/components/watttime/sensor.py index cb78e17031d0..5eb6b1f4f5a9 100644 --- a/homeassistant/components/watttime/sensor.py +++ b/homeassistant/components/watttime/sensor.py @@ -1,7 +1,7 @@ """Support for WattTime sensors.""" from collections.abc import Mapping -from typing import Any, cast, override +from typing import Any, override from homeassistant.components.sensor import ( SensorEntity, @@ -110,4 +110,4 @@ class RealtimeEmissionsSensor(CoordinatorEntity[WattTimeCoordinator], SensorEnti @override def native_value(self) -> StateType: """Return the value reported by the sensor.""" - return cast(StateType, self.coordinator.data[self.entity_description.key]) + return self.coordinator.data[self.entity_description.key] diff --git a/requirements_all.txt b/requirements_all.txt index ffc67f3b66dc..7486abb83188 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -480,7 +480,7 @@ aiovodafone==3.3.2 aiowaqi==3.1.0 # homeassistant.components.watttime -aiowatttime==0.1.1 +aiowatttime==2024.6.0 # homeassistant.components.webdav aiowebdav2==0.6.2 diff --git a/tests/components/watttime/fixtures/grid_region_data.json b/tests/components/watttime/fixtures/grid_region_data.json index 0104ebeb98c8..ef8341103010 100644 --- a/tests/components/watttime/fixtures/grid_region_data.json +++ b/tests/components/watttime/fixtures/grid_region_data.json @@ -1,5 +1,5 @@ { - "id": 263, - "abbrev": "PJM_NJ", - "name": "PJM New Jersey" + "region": "PJM_NJ", + "region_full_name": "PJM New Jersey", + "signal_type": "co2_moer" } diff --git a/tests/components/watttime/fixtures/realtime_emissions_data.json b/tests/components/watttime/fixtures/realtime_emissions_data.json index d11476bc8705..f034b8f88f58 100644 --- a/tests/components/watttime/fixtures/realtime_emissions_data.json +++ b/tests/components/watttime/fixtures/realtime_emissions_data.json @@ -1,7 +1,11 @@ { - "freq": "300", - "ba": "CAISO_NORTH", - "percent": "53", - "moer": "850.743982", - "point_time": "2019-01-29T14:55:00.00Z" + "data": [{ "point_time": "2024-06-18T18:40:00+00:00", "value": 96.0 }], + "meta": { + "data_point_period_seconds": 300, + "region": "PJM_NJ", + "signal_type": "co2_moer", + "units": "percentile", + "warnings": [], + "model": { "date": "2022-10-01" } + } } diff --git a/tests/components/watttime/snapshots/test_diagnostics.ambr b/tests/components/watttime/snapshots/test_diagnostics.ambr index 3cc5e1d6f66b..ddeefc914ba8 100644 --- a/tests/components/watttime/snapshots/test_diagnostics.ambr +++ b/tests/components/watttime/snapshots/test_diagnostics.ambr @@ -2,11 +2,7 @@ # name: test_entry_diagnostics dict({ 'data': dict({ - 'ba': 'CAISO_NORTH', - 'freq': '300', - 'moer': '850.743982', - 'percent': '53', - 'point_time': '2019-01-29T14:55:00.00Z', + 'percent': 96.0, }), 'entry': dict({ 'data': dict({