From d746035a9177062bc4e893089c4607dc96ffafd2 Mon Sep 17 00:00:00 2001 From: Quentame Date: Tue, 10 Sep 2019 13:17:10 +0200 Subject: [PATCH] =?UTF-8?q?Add=20M=C3=A9t=C3=A9o=20France=20icons=20+=20de?= =?UTF-8?q?vice=5Fclass=20(#26441)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add Météo France icons * Add Météo France device_class (temperature) + use constants * Fix weather alert info log * Use new f"{...} {...}" format for sensor name --- .../components/meteo_france/__init__.py | 59 +-------- .../components/meteo_france/const.py | 112 ++++++++++++++++++ .../components/meteo_france/sensor.py | 27 ++++- .../components/meteo_france/weather.py | 2 +- 4 files changed, 139 insertions(+), 61 deletions(-) create mode 100644 homeassistant/components/meteo_france/const.py diff --git a/homeassistant/components/meteo_france/__init__.py b/homeassistant/components/meteo_france/__init__.py index d6460fd6e5a..cfcd78400bd 100644 --- a/homeassistant/components/meteo_france/__init__.py +++ b/homeassistant/components/meteo_france/__init__.py @@ -4,70 +4,17 @@ import logging import voluptuous as vol -from homeassistant.const import CONF_MONITORED_CONDITIONS, TEMP_CELSIUS +from homeassistant.const import CONF_MONITORED_CONDITIONS import homeassistant.helpers.config_validation as cv from homeassistant.helpers.discovery import load_platform from homeassistant.util import Throttle +from .const import DOMAIN, CONF_CITY, SENSOR_TYPES, DATA_METEO_FRANCE + _LOGGER = logging.getLogger(__name__) -ATTRIBUTION = "Data provided by Météo-France" - -CONF_CITY = "city" - -DATA_METEO_FRANCE = "data_meteo_france" -DEFAULT_WEATHER_CARD = True -DOMAIN = "meteo_france" - SCAN_INTERVAL = datetime.timedelta(minutes=5) -SENSOR_TYPES = { - "rain_chance": ["Rain chance", "%"], - "freeze_chance": ["Freeze chance", "%"], - "thunder_chance": ["Thunder chance", "%"], - "snow_chance": ["Snow chance", "%"], - "weather": ["Weather", None], - "wind_speed": ["Wind Speed", "km/h"], - "next_rain": ["Next rain", "min"], - "temperature": ["Temperature", TEMP_CELSIUS], - "uv": ["UV", None], - "weather_alert": ["Weather Alert", None], -} - -CONDITION_CLASSES = { - "clear-night": ["Nuit Claire"], - "cloudy": ["Très nuageux"], - "fog": ["Brume ou bancs de brouillard", "Brouillard", "Brouillard givrant"], - "hail": ["Risque de grêle"], - "lightning": ["Risque d'orages", "Orages"], - "lightning-rainy": ["Pluie orageuses", "Pluies orageuses", "Averses orageuses"], - "partlycloudy": ["Ciel voilé", "Ciel voilé nuit", "Éclaircies"], - "pouring": ["Pluie forte"], - "rainy": [ - "Bruine / Pluie faible", - "Bruine", - "Pluie faible", - "Pluies éparses / Rares averses", - "Pluies éparses", - "Rares averses", - "Pluie / Averses", - "Averses", - "Pluie", - ], - "snowy": [ - "Neige / Averses de neige", - "Neige", - "Averses de neige", - "Neige forte", - "Quelques flocons", - ], - "snowy-rainy": ["Pluie et neige", "Pluie verglaçante"], - "sunny": ["Ensoleillé"], - "windy": [], - "windy-variant": [], - "exceptional": [], -} - def has_all_unique_cities(value): """Validate that all cities are unique.""" diff --git a/homeassistant/components/meteo_france/const.py b/homeassistant/components/meteo_france/const.py new file mode 100644 index 00000000000..223aca20bac --- /dev/null +++ b/homeassistant/components/meteo_france/const.py @@ -0,0 +1,112 @@ +"""Meteo-France component constants.""" + +from homeassistant.const import TEMP_CELSIUS + +DOMAIN = "meteo_france" +DATA_METEO_FRANCE = "data_meteo_france" +ATTRIBUTION = "Data provided by Météo-France" + +CONF_CITY = "city" + +DEFAULT_WEATHER_CARD = True + +SENSOR_TYPE_NAME = "name" +SENSOR_TYPE_UNIT = "unit" +SENSOR_TYPE_ICON = "icon" +SENSOR_TYPE_CLASS = "device_class" +SENSOR_TYPES = { + "rain_chance": { + SENSOR_TYPE_NAME: "Rain chance", + SENSOR_TYPE_UNIT: "%", + SENSOR_TYPE_ICON: "mdi:weather-rainy", + SENSOR_TYPE_CLASS: None, + }, + "freeze_chance": { + SENSOR_TYPE_NAME: "Freeze chance", + SENSOR_TYPE_UNIT: "%", + SENSOR_TYPE_ICON: "mdi:snowflake", + SENSOR_TYPE_CLASS: None, + }, + "thunder_chance": { + SENSOR_TYPE_NAME: "Thunder chance", + SENSOR_TYPE_UNIT: "%", + SENSOR_TYPE_ICON: "mdi:weather-lightning", + SENSOR_TYPE_CLASS: None, + }, + "snow_chance": { + SENSOR_TYPE_NAME: "Snow chance", + SENSOR_TYPE_UNIT: "%", + SENSOR_TYPE_ICON: "mdi:weather-snowy", + SENSOR_TYPE_CLASS: None, + }, + "weather": { + SENSOR_TYPE_NAME: "Weather", + SENSOR_TYPE_UNIT: None, + SENSOR_TYPE_ICON: "mdi:weather-partly-cloudy", + SENSOR_TYPE_CLASS: None, + }, + "wind_speed": { + SENSOR_TYPE_NAME: "Wind Speed", + SENSOR_TYPE_UNIT: "km/h", + SENSOR_TYPE_ICON: "mdi:weather-windy", + SENSOR_TYPE_CLASS: None, + }, + "next_rain": { + SENSOR_TYPE_NAME: "Next rain", + SENSOR_TYPE_UNIT: "min", + SENSOR_TYPE_ICON: "mdi:weather-rainy", + SENSOR_TYPE_CLASS: None, + }, + "temperature": { + SENSOR_TYPE_NAME: "Temperature", + SENSOR_TYPE_UNIT: TEMP_CELSIUS, + SENSOR_TYPE_ICON: "mdi:thermometer", + SENSOR_TYPE_CLASS: "temperature", + }, + "uv": { + SENSOR_TYPE_NAME: "UV", + SENSOR_TYPE_UNIT: None, + SENSOR_TYPE_ICON: "mdi:sunglasses", + SENSOR_TYPE_CLASS: None, + }, + "weather_alert": { + SENSOR_TYPE_NAME: "Weather Alert", + SENSOR_TYPE_UNIT: None, + SENSOR_TYPE_ICON: "mdi:weather-cloudy-alert", + SENSOR_TYPE_CLASS: None, + }, +} + +CONDITION_CLASSES = { + "clear-night": ["Nuit Claire"], + "cloudy": ["Très nuageux"], + "fog": ["Brume ou bancs de brouillard", "Brouillard", "Brouillard givrant"], + "hail": ["Risque de grêle"], + "lightning": ["Risque d'orages", "Orages"], + "lightning-rainy": ["Pluie orageuses", "Pluies orageuses", "Averses orageuses"], + "partlycloudy": ["Ciel voilé", "Ciel voilé nuit", "Éclaircies"], + "pouring": ["Pluie forte"], + "rainy": [ + "Bruine / Pluie faible", + "Bruine", + "Pluie faible", + "Pluies éparses / Rares averses", + "Pluies éparses", + "Rares averses", + "Pluie / Averses", + "Averses", + "Pluie", + ], + "snowy": [ + "Neige / Averses de neige", + "Neige", + "Averses de neige", + "Neige forte", + "Quelques flocons", + ], + "snowy-rainy": ["Pluie et neige", "Pluie verglaçante"], + "sunny": ["Ensoleillé"], + "windy": [], + "windy-variant": [], + "exceptional": [], +} diff --git a/homeassistant/components/meteo_france/sensor.py b/homeassistant/components/meteo_france/sensor.py index 95113a60cd3..8c2bd32048f 100644 --- a/homeassistant/components/meteo_france/sensor.py +++ b/homeassistant/components/meteo_france/sensor.py @@ -4,7 +4,16 @@ import logging from homeassistant.const import ATTR_ATTRIBUTION, CONF_MONITORED_CONDITIONS from homeassistant.helpers.entity import Entity -from . import ATTRIBUTION, CONF_CITY, DATA_METEO_FRANCE, SENSOR_TYPES +from .const import ( + ATTRIBUTION, + CONF_CITY, + DATA_METEO_FRANCE, + SENSOR_TYPES, + SENSOR_TYPE_ICON, + SENSOR_TYPE_NAME, + SENSOR_TYPE_UNIT, + SENSOR_TYPE_CLASS, +) _LOGGER = logging.getLogger(__name__) @@ -44,7 +53,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): alert_watcher = None else: _LOGGER.info( - "Weather alert watcher added for %s" "in department %s", + "Weather alert watcher added for %s in department %s", city, datas["dept"], ) @@ -79,7 +88,7 @@ class MeteoFranceSensor(Entity): @property def name(self): """Return the name of the sensor.""" - return "{} {}".format(self._data["name"], SENSOR_TYPES[self._condition][0]) + return f"{self._data['name']} {SENSOR_TYPES[self._condition][SENSOR_TYPE_NAME]}" @property def state(self): @@ -111,7 +120,17 @@ class MeteoFranceSensor(Entity): @property def unit_of_measurement(self): """Return the unit of measurement.""" - return SENSOR_TYPES[self._condition][1] + return SENSOR_TYPES[self._condition][SENSOR_TYPE_UNIT] + + @property + def icon(self): + """Return the icon.""" + return SENSOR_TYPES[self._condition][SENSOR_TYPE_ICON] + + @property + def device_class(self): + """Return the device class of the sensor.""" + return SENSOR_TYPES[self._condition][SENSOR_TYPE_CLASS] def update(self): """Fetch new state data for the sensor.""" diff --git a/homeassistant/components/meteo_france/weather.py b/homeassistant/components/meteo_france/weather.py index 9a861d13c2e..00da55809ff 100644 --- a/homeassistant/components/meteo_france/weather.py +++ b/homeassistant/components/meteo_france/weather.py @@ -12,7 +12,7 @@ from homeassistant.components.weather import ( import homeassistant.util.dt as dt_util from homeassistant.const import TEMP_CELSIUS -from . import ATTRIBUTION, CONDITION_CLASSES, CONF_CITY, DATA_METEO_FRANCE +from .const import ATTRIBUTION, CONDITION_CLASSES, CONF_CITY, DATA_METEO_FRANCE _LOGGER = logging.getLogger(__name__)