105 lines
3.0 KiB
Python
105 lines
3.0 KiB
Python
|
"""Support for Meteo-France weather service."""
|
||
|
from datetime import datetime, timedelta
|
||
|
import logging
|
||
|
|
||
|
from homeassistant.components.meteo_france import (
|
||
|
ATTRIBUTION, CONDITION_CLASSES, CONF_CITY, DATA_METEO_FRANCE)
|
||
|
from homeassistant.components.weather import (
|
||
|
ATTR_FORECAST_CONDITION, ATTR_FORECAST_TEMP, ATTR_FORECAST_TEMP_LOW,
|
||
|
ATTR_FORECAST_TIME, WeatherEntity)
|
||
|
from homeassistant.const import TEMP_CELSIUS
|
||
|
|
||
|
_LOGGER = logging.getLogger(__name__)
|
||
|
|
||
|
|
||
|
def setup_platform(hass, config, add_entities, discovery_info=None):
|
||
|
"""Set up the Meteo-France weather platform."""
|
||
|
if discovery_info is None:
|
||
|
return
|
||
|
|
||
|
city = discovery_info[CONF_CITY]
|
||
|
client = hass.data[DATA_METEO_FRANCE][city]
|
||
|
|
||
|
add_entities([MeteoFranceWeather(client)], True)
|
||
|
|
||
|
|
||
|
class MeteoFranceWeather(WeatherEntity):
|
||
|
"""Representation of a weather condition."""
|
||
|
|
||
|
def __init__(self, client):
|
||
|
"""Initialise the platform with a data instance and station name."""
|
||
|
self._client = client
|
||
|
self._data = {}
|
||
|
|
||
|
def update(self):
|
||
|
"""Update current conditions."""
|
||
|
self._client.update()
|
||
|
self._data = self._client.get_data()
|
||
|
|
||
|
@property
|
||
|
def name(self):
|
||
|
"""Return the name of the sensor."""
|
||
|
return self._data['name']
|
||
|
|
||
|
@property
|
||
|
def condition(self):
|
||
|
"""Return the current condition."""
|
||
|
return self.format_condition(self._data['weather'])
|
||
|
|
||
|
@property
|
||
|
def temperature(self):
|
||
|
"""Return the temperature."""
|
||
|
return self._data['temperature']
|
||
|
|
||
|
@property
|
||
|
def humidity(self):
|
||
|
"""Return the humidity."""
|
||
|
return None
|
||
|
|
||
|
@property
|
||
|
def temperature_unit(self):
|
||
|
"""Return the unit of measurement."""
|
||
|
return TEMP_CELSIUS
|
||
|
|
||
|
@property
|
||
|
def wind_speed(self):
|
||
|
"""Return the wind speed."""
|
||
|
return self._data['wind_speed']
|
||
|
|
||
|
@property
|
||
|
def wind_bearing(self):
|
||
|
"""Return the wind bearing."""
|
||
|
return self._data['wind_bearing']
|
||
|
|
||
|
@property
|
||
|
def attribution(self):
|
||
|
"""Return the attribution."""
|
||
|
return ATTRIBUTION
|
||
|
|
||
|
@property
|
||
|
def forecast(self):
|
||
|
"""Return the forecast."""
|
||
|
reftime = datetime.now().replace(hour=12, minute=00)
|
||
|
reftime += timedelta(hours=24)
|
||
|
forecast_data = []
|
||
|
for key in self._data['forecast']:
|
||
|
value = self._data['forecast'][key]
|
||
|
data_dict = {
|
||
|
ATTR_FORECAST_TIME: reftime.isoformat(),
|
||
|
ATTR_FORECAST_TEMP: int(value['max_temp']),
|
||
|
ATTR_FORECAST_TEMP_LOW: int(value['min_temp']),
|
||
|
ATTR_FORECAST_CONDITION:
|
||
|
self.format_condition(value['weather'])
|
||
|
}
|
||
|
reftime = reftime + timedelta(hours=24)
|
||
|
forecast_data.append(data_dict)
|
||
|
return forecast_data
|
||
|
|
||
|
@staticmethod
|
||
|
def format_condition(condition):
|
||
|
"""Return condition from dict CONDITION_CLASSES."""
|
||
|
for key, value in CONDITION_CLASSES.items():
|
||
|
if condition in value:
|
||
|
return key
|
||
|
return condition
|