Add option to set language of openweathermap sensor, and handle updating errors (#8046)

* Add option to set language of openweathermap sensor messages

* handle error updating openweathermap sensor
This commit is contained in:
Eugenio Panadero 2017-06-17 12:37:34 +02:00 committed by Fabian Affolter
parent 844c8149d7
commit 18f81d7824

View File

@ -23,6 +23,7 @@ _LOGGER = logging.getLogger(__name__)
CONF_ATTRIBUTION = "Data provided by OpenWeatherMap"
CONF_FORECAST = 'forecast'
CONF_LANGUAGE = 'language'
DEFAULT_NAME = 'OWM'
@ -45,7 +46,8 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Optional(CONF_MONITORED_CONDITIONS, default=[]):
vol.All(cv.ensure_list, [vol.In(SENSOR_TYPES)]),
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
vol.Optional(CONF_FORECAST, default=False): cv.boolean
vol.Optional(CONF_FORECAST, default=False): cv.boolean,
vol.Optional(CONF_LANGUAGE, default=None): cv.string,
})
@ -61,8 +63,11 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
name = config.get(CONF_NAME)
forecast = config.get(CONF_FORECAST)
language = config.get(CONF_LANGUAGE)
if isinstance(language, str):
language = language.lower()[:2]
owm = OWM(config.get(CONF_API_KEY))
owm = OWM(API_key=config.get(CONF_API_KEY), language=language)
if not owm:
_LOGGER.error("Unable to connect to OpenWeatherMap")
@ -178,7 +183,10 @@ class WeatherData(object):
@Throttle(MIN_TIME_BETWEEN_UPDATES)
def update(self):
"""Get the latest data from OpenWeatherMap."""
obs = self.owm.weather_at_coords(self.latitude, self.longitude)
try:
obs = self.owm.weather_at_coords(self.latitude, self.longitude)
except TypeError:
obs = None
if obs is None:
_LOGGER.warning("Failed to fetch data from OpenWeatherMap")
return
@ -186,6 +194,9 @@ class WeatherData(object):
self.data = obs.get_weather()
if self.forecast == 1:
obs = self.owm.three_hours_forecast_at_coords(
self.latitude, self.longitude)
self.fc_data = obs.get_forecast()
try:
obs = self.owm.three_hours_forecast_at_coords(
self.latitude, self.longitude)
self.fc_data = obs.get_forecast()
except TypeError:
_LOGGER.warning("Failed to fetch forecast from OpenWeatherMap")