diff --git a/.coveragerc b/.coveragerc index 7f0f519133f..92c6cdbcfbc 100644 --- a/.coveragerc +++ b/.coveragerc @@ -122,6 +122,7 @@ omit = homeassistant/components/cast/* homeassistant/components/cert_expiry/helper.py homeassistant/components/channels/* + homeassistant/components/circuit/* homeassistant/components/cisco_ios/device_tracker.py homeassistant/components/cisco_mobility_express/device_tracker.py homeassistant/components/cisco_webex_teams/notify.py diff --git a/CODEOWNERS b/CODEOWNERS index 2d7805d676a..a8aea5f4727 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -68,6 +68,7 @@ homeassistant/components/bt_smarthub/* @jxwolstenholme homeassistant/components/buienradar/* @mjj4791 @ties homeassistant/components/cast/* @emontnemery homeassistant/components/cert_expiry/* @Cereal2nd @jjlawren +homeassistant/components/circuit/* @braam homeassistant/components/cisco_ios/* @fbradyirl homeassistant/components/cisco_mobility_express/* @fbradyirl homeassistant/components/cisco_webex_teams/* @fbradyirl diff --git a/homeassistant/components/circuit/__init__.py b/homeassistant/components/circuit/__init__.py new file mode 100644 index 00000000000..3d97e110475 --- /dev/null +++ b/homeassistant/components/circuit/__init__.py @@ -0,0 +1,38 @@ +"""The Unify Circuit component.""" + +import logging + +import voluptuous as vol + +from homeassistant.const import CONF_NAME, CONF_URL +from homeassistant.helpers import config_validation as cv, discovery + +_LOGGER = logging.getLogger(__name__) + +DOMAIN = "circuit" +CONF_WEBHOOK = "webhook" + +WEBHOOK_SCHEMA = vol.Schema( + {vol.Optional(CONF_NAME): cv.string, vol.Required(CONF_URL): cv.string} +) + +CONFIG_SCHEMA = vol.Schema( + { + DOMAIN: vol.Schema( + {vol.Required(CONF_WEBHOOK): vol.All(cv.ensure_list, [WEBHOOK_SCHEMA])} + ) + }, + extra=vol.ALLOW_EXTRA, +) + + +async def async_setup(hass, config): + """Set up the Unify Circuit component.""" + webhooks = config[DOMAIN][CONF_WEBHOOK] + + for webhook_conf in webhooks: + hass.async_create_task( + discovery.async_load_platform(hass, "notify", DOMAIN, webhook_conf, config) + ) + + return True diff --git a/homeassistant/components/circuit/manifest.json b/homeassistant/components/circuit/manifest.json new file mode 100644 index 00000000000..d6c43e18677 --- /dev/null +++ b/homeassistant/components/circuit/manifest.json @@ -0,0 +1,7 @@ +{ + "domain": "circuit", + "name": "Unify Circuit", + "documentation": "https://www.home-assistant.io/integrations/circuit", + "codeowners": ["@braam"], + "requirements": ["circuit-webhook==1.0.1"] +} diff --git a/homeassistant/components/circuit/notify.py b/homeassistant/components/circuit/notify.py new file mode 100644 index 00000000000..634ecb4f859 --- /dev/null +++ b/homeassistant/components/circuit/notify.py @@ -0,0 +1,37 @@ +"""Unify Circuit platform for notify component.""" +import logging + +from circuit_webhook import Circuit + +from homeassistant.components.notify import BaseNotificationService +from homeassistant.const import CONF_URL + +_LOGGER = logging.getLogger(__name__) + + +def get_service(hass, config, discovery_info=None): + """Get the Unify Circuit notification service.""" + if discovery_info is None: + return None + + return CircuitNotificationService(discovery_info) + + +class CircuitNotificationService(BaseNotificationService): + """Implement the notification service for Unify Circuit.""" + + def __init__(self, config): + """Initialize the service.""" + self.webhook_url = config[CONF_URL] + + def send_message(self, message=None, **kwargs): + """Send a message to the webhook.""" + + webhook_url = self.webhook_url + + if webhook_url and message: + try: + circuit_message = Circuit(url=webhook_url) + circuit_message.post(text=message) + except RuntimeError as err: + _LOGGER.error("Could not send notification. Error: %s", err) diff --git a/requirements_all.txt b/requirements_all.txt index 00b38b49cf2..95a649b2d85 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -403,6 +403,9 @@ buienradar==1.0.4 # homeassistant.components.caldav caldav==0.6.1 +# homeassistant.components.circuit +circuit-webhook==1.0.1 + # homeassistant.components.cisco_mobility_express ciscomobilityexpress==0.3.3