Skip to content

Commit

Permalink
Added new binary sensor meteoalarm to get weather alerts in Europe (#…
Browse files Browse the repository at this point in the history
…23663)

* Added new component meteoalarm

* Update sensor.py

* Update manifest.json

* Update manifest.json

* Update manifest.json

* Added file CODEOWNERS

* Modified some code, thanks @amelchio

* removed Throttle because is not being used anymore

* Update _attributes ad _state

* some cleanup

* Update sensor.py

Change sensor to binarysensor

* Rename sensor.py to binary_sensor.py

rename the file

* Update binary_sensor.py

Removed BinarySensorDevice from class

* Update binary_sensor.py

Made a mistake with BinarySensorDevice

* Update binary_sensor.py

clean up white spaces

* Update binary_sensor.py

Fix BinarySensorDevice

* Update binary_sensor.py

cleanup the import libs

* modified __init__

* fix

* final fix, thanks @amelchio

* forgot to change the sensor.py

* correct some typo in text

* fix typos

* fix another typo

* fix typo
  • Loading branch information
rolfberkenbosch authored and amelchio committed May 7, 2019
1 parent 1f551e5 commit c07c557
Show file tree
Hide file tree
Showing 6 changed files with 115 additions and 0 deletions.
1 change: 1 addition & 0 deletions .coveragerc
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions CODEOWNERS
Validating CODEOWNERS rules …
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions homeassistant/components/meteoalarm/__init__.py
@@ -0,0 +1 @@
"""The meteoalarm component."""
99 changes: 99 additions & 0 deletions 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
10 changes: 10 additions & 0 deletions 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"]
}
3 changes: 3 additions & 0 deletions requirements_all.txt
Expand Up @@ -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

Expand Down

0 comments on commit c07c557

Please sign in to comment.