Bump gios library (#50145)

* Bump gios library

* Use consts for API strings

* Do not store data locally

* Use API_TIMEOUT const
This commit is contained in:
Maciej Bieniek 2021-05-07 13:03:11 +02:00 committed by GitHub
parent 64851dbac3
commit 7a87846146
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 72 additions and 47 deletions

View File

@ -8,7 +8,7 @@ from gios import ApiError, Gios, InvalidSensorsData, NoStationError
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .const import CONF_STATION_ID, DOMAIN, SCAN_INTERVAL from .const import API_TIMEOUT, CONF_STATION_ID, DOMAIN, SCAN_INTERVAL
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -51,8 +51,8 @@ class GiosDataUpdateCoordinator(DataUpdateCoordinator):
async def _async_update_data(self): async def _async_update_data(self):
"""Update data via library.""" """Update data via library."""
try: try:
with timeout(30): with timeout(API_TIMEOUT):
await self.gios.update() return await self.gios.async_update()
except ( except (
ApiError, ApiError,
NoStationError, NoStationError,
@ -60,4 +60,3 @@ class GiosDataUpdateCoordinator(DataUpdateCoordinator):
InvalidSensorsData, InvalidSensorsData,
) as error: ) as error:
raise UpdateFailed(error) from error raise UpdateFailed(error) from error
return self.gios.data

View File

@ -1,28 +1,24 @@
"""Support for the GIOS service.""" """Support for the GIOS service."""
from homeassistant.components.air_quality import ( from homeassistant.components.air_quality import AirQualityEntity
ATTR_CO,
ATTR_NO2,
ATTR_OZONE,
ATTR_PM_2_5,
ATTR_PM_10,
ATTR_SO2,
AirQualityEntity,
)
from homeassistant.const import CONF_NAME from homeassistant.const import CONF_NAME
from homeassistant.helpers.update_coordinator import CoordinatorEntity from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import ATTR_STATION, DEFAULT_NAME, DOMAIN, ICONS_MAP, MANUFACTURER from .const import (
API_AQI,
ATTRIBUTION = "Data provided by GIOŚ" API_CO,
API_NO2,
SENSOR_MAP = { API_O3,
"CO": ATTR_CO, API_PM10,
"NO2": ATTR_NO2, API_PM25,
"O3": ATTR_OZONE, API_SO2,
"PM10": ATTR_PM_10, ATTR_STATION,
"PM2.5": ATTR_PM_2_5, ATTRIBUTION,
"SO2": ATTR_SO2, DEFAULT_NAME,
} DOMAIN,
ICONS_MAP,
MANUFACTURER,
SENSOR_MAP,
)
PARALLEL_UPDATES = 1 PARALLEL_UPDATES = 1
@ -72,43 +68,43 @@ class GiosAirQuality(CoordinatorEntity, AirQualityEntity):
@property @property
def air_quality_index(self): def air_quality_index(self):
"""Return the air quality index.""" """Return the air quality index."""
return self._get_sensor_value("AQI") return self._get_sensor_value(API_AQI)
@property @property
@round_state @round_state
def particulate_matter_2_5(self): def particulate_matter_2_5(self):
"""Return the particulate matter 2.5 level.""" """Return the particulate matter 2.5 level."""
return self._get_sensor_value("PM2.5") return self._get_sensor_value(API_PM25)
@property @property
@round_state @round_state
def particulate_matter_10(self): def particulate_matter_10(self):
"""Return the particulate matter 10 level.""" """Return the particulate matter 10 level."""
return self._get_sensor_value("PM10") return self._get_sensor_value(API_PM10)
@property @property
@round_state @round_state
def ozone(self): def ozone(self):
"""Return the O3 (ozone) level.""" """Return the O3 (ozone) level."""
return self._get_sensor_value("O3") return self._get_sensor_value(API_O3)
@property @property
@round_state @round_state
def carbon_monoxide(self): def carbon_monoxide(self):
"""Return the CO (carbon monoxide) level.""" """Return the CO (carbon monoxide) level."""
return self._get_sensor_value("CO") return self._get_sensor_value(API_CO)
@property @property
@round_state @round_state
def sulphur_dioxide(self): def sulphur_dioxide(self):
"""Return the SO2 (sulphur dioxide) level.""" """Return the SO2 (sulphur dioxide) level."""
return self._get_sensor_value("SO2") return self._get_sensor_value(API_SO2)
@property @property
@round_state @round_state
def nitrogen_dioxide(self): def nitrogen_dioxide(self):
"""Return the NO2 (nitrogen dioxide) level.""" """Return the NO2 (nitrogen dioxide) level."""
return self._get_sensor_value("NO2") return self._get_sensor_value(API_NO2)
@property @property
def attribution(self): def attribution(self):

View File

@ -10,7 +10,7 @@ from homeassistant import config_entries
from homeassistant.const import CONF_NAME from homeassistant.const import CONF_NAME
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
from .const import CONF_STATION_ID, DEFAULT_NAME, DOMAIN from .const import API_TIMEOUT, CONF_STATION_ID, DEFAULT_NAME, DOMAIN
DATA_SCHEMA = vol.Schema( DATA_SCHEMA = vol.Schema(
{ {
@ -38,9 +38,9 @@ class GiosFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
websession = async_get_clientsession(self.hass) websession = async_get_clientsession(self.hass)
with timeout(30): with timeout(API_TIMEOUT):
gios = Gios(user_input[CONF_STATION_ID], websession) gios = Gios(user_input[CONF_STATION_ID], websession)
await gios.update() await gios.async_update()
return self.async_create_entry( return self.async_create_entry(
title=user_input[CONF_STATION_ID], title=user_input[CONF_STATION_ID],

View File

@ -1,6 +1,17 @@
"""Constants for GIOS integration.""" """Constants for GIOS integration."""
from datetime import timedelta from datetime import timedelta
from homeassistant.components.air_quality import (
ATTR_CO,
ATTR_NO2,
ATTR_OZONE,
ATTR_PM_2_5,
ATTR_PM_10,
ATTR_SO2,
)
ATTRIBUTION = "Data provided by GIOŚ"
ATTR_STATION = "station" ATTR_STATION = "station"
CONF_STATION_ID = "station_id" CONF_STATION_ID = "station_id"
DEFAULT_NAME = "GIOŚ" DEFAULT_NAME = "GIOŚ"
@ -9,6 +20,16 @@ SCAN_INTERVAL = timedelta(minutes=30)
DOMAIN = "gios" DOMAIN = "gios"
MANUFACTURER = "Główny Inspektorat Ochrony Środowiska" MANUFACTURER = "Główny Inspektorat Ochrony Środowiska"
API_AQI = "aqi"
API_CO = "co"
API_NO2 = "no2"
API_O3 = "o3"
API_PM10 = "pm10"
API_PM25 = "pm2.5"
API_SO2 = "so2"
API_TIMEOUT = 30
AQI_GOOD = "dobry" AQI_GOOD = "dobry"
AQI_MODERATE = "umiarkowany" AQI_MODERATE = "umiarkowany"
AQI_POOR = "dostateczny" AQI_POOR = "dostateczny"
@ -22,3 +43,12 @@ ICONS_MAP = {
AQI_POOR: "mdi:emoticon-sad", AQI_POOR: "mdi:emoticon-sad",
AQI_VERY_POOR: "mdi:emoticon-dead", AQI_VERY_POOR: "mdi:emoticon-dead",
} }
SENSOR_MAP = {
API_CO: ATTR_CO,
API_NO2: ATTR_NO2,
API_O3: ATTR_OZONE,
API_PM10: ATTR_PM_10,
API_PM25: ATTR_PM_2_5,
API_SO2: ATTR_SO2,
}

View File

@ -3,7 +3,7 @@
"name": "GIO\u015a", "name": "GIO\u015a",
"documentation": "https://www.home-assistant.io/integrations/gios", "documentation": "https://www.home-assistant.io/integrations/gios",
"codeowners": ["@bieniu"], "codeowners": ["@bieniu"],
"requirements": ["gios==0.2.1"], "requirements": ["gios==1.0.1"],
"config_flow": true, "config_flow": true,
"quality_scale": "platinum", "quality_scale": "platinum",
"iot_class": "cloud_polling" "iot_class": "cloud_polling"

View File

@ -657,7 +657,7 @@ georss_qld_bushfire_alert_client==0.3
getmac==0.8.2 getmac==0.8.2
# homeassistant.components.gios # homeassistant.components.gios
gios==0.2.1 gios==1.0.1
# homeassistant.components.gitter # homeassistant.components.gitter
gitterpy==0.1.7 gitterpy==0.1.7

View File

@ -360,7 +360,7 @@ georss_qld_bushfire_alert_client==0.3
getmac==0.8.2 getmac==0.8.2
# homeassistant.components.gios # homeassistant.components.gios
gios==0.2.1 gios==1.0.1
# homeassistant.components.glances # homeassistant.components.glances
glances_api==0.2.0 glances_api==0.2.0

View File

@ -26,8 +26,8 @@ async def init_integration(hass, incomplete_data=False) -> MockConfigEntry:
sensors = json.loads(load_fixture("gios/sensors.json")) sensors = json.loads(load_fixture("gios/sensors.json"))
if incomplete_data: if incomplete_data:
indexes["stIndexLevel"]["indexLevelName"] = "foo" indexes["stIndexLevel"]["indexLevelName"] = "foo"
sensors["PM10"]["values"][0]["value"] = None sensors["pm10"]["values"][0]["value"] = None
sensors["PM10"]["values"][1]["value"] = None sensors["pm10"]["values"][1]["value"] = None
with patch( with patch(
"homeassistant.components.gios.Gios._get_stations", return_value=STATIONS "homeassistant.components.gios.Gios._get_stations", return_value=STATIONS

View File

@ -1,47 +1,47 @@
{ {
"SO2": { "so2": {
"values": [ "values": [
{ "date": "2020-07-31 15:00:00", "value": 4.35478 }, { "date": "2020-07-31 15:00:00", "value": 4.35478 },
{ "date": "2020-07-31 14:00:00", "value": 4.25478 }, { "date": "2020-07-31 14:00:00", "value": 4.25478 },
{ "date": "2020-07-31 13:00:00", "value": 4.34309 } { "date": "2020-07-31 13:00:00", "value": 4.34309 }
] ]
}, },
"C6H6": { "c6h6": {
"values": [ "values": [
{ "date": "2020-07-31 15:00:00", "value": 0.23789 }, { "date": "2020-07-31 15:00:00", "value": 0.23789 },
{ "date": "2020-07-31 14:00:00", "value": 0.22789 }, { "date": "2020-07-31 14:00:00", "value": 0.22789 },
{ "date": "2020-07-31 13:00:00", "value": 0.21315 } { "date": "2020-07-31 13:00:00", "value": 0.21315 }
] ]
}, },
"CO": { "co": {
"values": [ "values": [
{ "date": "2020-07-31 15:00:00", "value": 251.874 }, { "date": "2020-07-31 15:00:00", "value": 251.874 },
{ "date": "2020-07-31 14:00:00", "value": 250.874 }, { "date": "2020-07-31 14:00:00", "value": 250.874 },
{ "date": "2020-07-31 13:00:00", "value": 251.097 } { "date": "2020-07-31 13:00:00", "value": 251.097 }
] ]
}, },
"NO2": { "no2": {
"values": [ "values": [
{ "date": "2020-07-31 15:00:00", "value": 7.13411 }, { "date": "2020-07-31 15:00:00", "value": 7.13411 },
{ "date": "2020-07-31 14:00:00", "value": 7.33411 }, { "date": "2020-07-31 14:00:00", "value": 7.33411 },
{ "date": "2020-07-31 13:00:00", "value": 9.32578 } { "date": "2020-07-31 13:00:00", "value": 9.32578 }
] ]
}, },
"O3": { "o3": {
"values": [ "values": [
{ "date": "2020-07-31 15:00:00", "value": 95.7768 }, { "date": "2020-07-31 15:00:00", "value": 95.7768 },
{ "date": "2020-07-31 14:00:00", "value": 93.7768 }, { "date": "2020-07-31 14:00:00", "value": 93.7768 },
{ "date": "2020-07-31 13:00:00", "value": 89.4232 } { "date": "2020-07-31 13:00:00", "value": 89.4232 }
] ]
}, },
"PM2.5": { "pm2.5": {
"values": [ "values": [
{ "date": "2020-07-31 15:00:00", "value": 4 }, { "date": "2020-07-31 15:00:00", "value": 4 },
{ "date": "2020-07-31 14:00:00", "value": 4 }, { "date": "2020-07-31 14:00:00", "value": 4 },
{ "date": "2020-07-31 13:00:00", "value": 5 } { "date": "2020-07-31 13:00:00", "value": 5 }
] ]
}, },
"PM10": { "pm10": {
"values": [ "values": [
{ "date": "2020-07-31 15:00:00", "value": 16.8344 }, { "date": "2020-07-31 15:00:00", "value": 16.8344 },
{ "date": "2020-07-31 14:00:00", "value": 17.8344 }, { "date": "2020-07-31 14:00:00", "value": 17.8344 },