diff --git a/.coveragerc b/.coveragerc index c5eedd28e9e5be..21cf4a9e5ad2c7 100644 --- a/.coveragerc +++ b/.coveragerc @@ -348,6 +348,7 @@ omit = homeassistant/components/message_bird/notify.py homeassistant/components/met/weather.py homeassistant/components/meteo_france/* + homeassistant/components/meteoalarm/* homeassistant/components/metoffice/sensor.py homeassistant/components/metoffice/weather.py homeassistant/components/microsoft/tts.py diff --git a/CODEOWNERS b/CODEOWNERS index e9a5d1142b0aff..ac03ac9cd0b946 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -144,6 +144,7 @@ homeassistant/components/matrix/* @tinloaf homeassistant/components/mediaroom/* @dgomes homeassistant/components/melissa/* @kennedyshead homeassistant/components/met/* @danielhiversen +homeassistant/components/meteoalarm/* @rolfberkenbosch homeassistant/components/miflora/* @danielhiversen @ChristianKuehnel homeassistant/components/mill/* @danielhiversen homeassistant/components/min_max/* @fabaff diff --git a/homeassistant/components/meteoalarm/__init__.py b/homeassistant/components/meteoalarm/__init__.py new file mode 100644 index 00000000000000..f9a1fd9786ff83 --- /dev/null +++ b/homeassistant/components/meteoalarm/__init__.py @@ -0,0 +1 @@ +"""The meteoalarm component.""" diff --git a/homeassistant/components/meteoalarm/binary_sensor.py b/homeassistant/components/meteoalarm/binary_sensor.py new file mode 100644 index 00000000000000..8af43d3b087883 --- /dev/null +++ b/homeassistant/components/meteoalarm/binary_sensor.py @@ -0,0 +1,99 @@ +"""Binary Sensor for MeteoAlarm.eu.""" +from datetime import timedelta +import logging + +import voluptuous as vol + +from homeassistant.components.binary_sensor import ( + PLATFORM_SCHEMA, BinarySensorDevice) +from homeassistant.const import ( + ATTR_ATTRIBUTION, CONF_NAME) +import homeassistant.helpers.config_validation as cv + +_LOGGER = logging.getLogger(__name__) + +CONF_COUNTRY = 'country' +CONF_PROVINCE = 'province' +CONF_LANGUAGE = 'language' + +ATTRIBUTION = "Information provided by MeteoAlarm." + +DEFAULT_NAME = 'meteoalarm' +DEFAULT_DEVICE_CLASS = 'safety' + +ICON = 'mdi:alert' + +SCAN_INTERVAL = timedelta(minutes=30) + + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Required(CONF_COUNTRY): cv.string, + vol.Required(CONF_PROVINCE): cv.string, + vol.Optional(CONF_LANGUAGE, default='en'): cv.string, + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, +}) + + +def setup_platform(hass, config, add_entities, discovery_info=None): + """Set up the MeteoAlarm binary sensor platform.""" + from meteoalertapi import Meteoalert + + country = config[CONF_COUNTRY] + province = config[CONF_PROVINCE] + language = config[CONF_LANGUAGE] + name = config[CONF_NAME] + + try: + api = Meteoalert(country, province, language) + except KeyError(): + _LOGGER.error("Wrong country digits, or province name") + return + + add_entities([MeteoAlertBinarySensor(api, name)], True) + + +class MeteoAlertBinarySensor(BinarySensorDevice): + """Representation of a MeteoAlert binary sensor.""" + + def __init__(self, api, name): + """Initialize the MeteoAlert binary sensor.""" + self._name = name + self._attributes = {} + self._state = None + self._api = api + + @property + def name(self): + """Return the name of the binary sensor.""" + return self._name + + @property + def is_on(self): + """Return the status of the binary sensor.""" + return self._state + + @property + def device_state_attributes(self): + """Return the state attributes.""" + self._attributes[ATTR_ATTRIBUTION] = ATTRIBUTION + return self._attributes + + @property + def icon(self): + """Icon to use in the frontend.""" + return ICON + + @property + def device_class(self): + """Return the class of this binary sensor.""" + return DEFAULT_DEVICE_CLASS + + def update(self): + """Update device state.""" + alert = self._api.get_alert() + if alert: + self._attributes = alert + self._state = True + else: + self._attributes = {} + self._state = False diff --git a/homeassistant/components/meteoalarm/manifest.json b/homeassistant/components/meteoalarm/manifest.json new file mode 100644 index 00000000000000..d84749547ae6c0 --- /dev/null +++ b/homeassistant/components/meteoalarm/manifest.json @@ -0,0 +1,10 @@ +{ + "domain": "meteoalarm", + "name": "meteoalarm", + "documentation": "https://www.home-assistant.io/components/meteoalarm", + "requirements": [ + "meteoalertapi==0.0.8" + ], + "dependencies": [], + "codeowners": ["@rolfberkenbosch"] +} diff --git a/requirements_all.txt b/requirements_all.txt index b80f14f040877c..7094c89662f8da 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -706,6 +706,9 @@ mbddns==0.1.2 # homeassistant.components.message_bird messagebird==1.2.0 +# homeassistant.components.meteoalarm +meteoalertapi==0.0.8 + # homeassistant.components.meteo_france meteofrance==0.3.4