core/homeassistant/components/spc/__init__.py

77 lines
2.1 KiB
Python

"""Support for Vanderbilt (formerly Siemens) SPC alarm systems."""
import logging
import voluptuous as vol
from homeassistant.helpers import discovery, aiohttp_client
from homeassistant.helpers.dispatcher import async_dispatcher_send
import homeassistant.helpers.config_validation as cv
_LOGGER = logging.getLogger(__name__)
CONF_WS_URL = "ws_url"
CONF_API_URL = "api_url"
DOMAIN = "spc"
DATA_API = "spc_api"
SIGNAL_UPDATE_ALARM = "spc_update_alarm_{}"
SIGNAL_UPDATE_SENSOR = "spc_update_sensor_{}"
CONFIG_SCHEMA = vol.Schema(
{
DOMAIN: vol.Schema(
{
vol.Required(CONF_WS_URL): cv.string,
vol.Required(CONF_API_URL): cv.string,
}
)
},
extra=vol.ALLOW_EXTRA,
)
async def async_setup(hass, config):
"""Set up the SPC component."""
from pyspcwebgw import SpcWebGateway
async def async_upate_callback(spc_object):
from pyspcwebgw.area import Area
from pyspcwebgw.zone import Zone
if isinstance(spc_object, Area):
async_dispatcher_send(hass, SIGNAL_UPDATE_ALARM.format(spc_object.id))
elif isinstance(spc_object, Zone):
async_dispatcher_send(hass, SIGNAL_UPDATE_SENSOR.format(spc_object.id))
session = aiohttp_client.async_get_clientsession(hass)
spc = SpcWebGateway(
loop=hass.loop,
session=session,
api_url=config[DOMAIN].get(CONF_API_URL),
ws_url=config[DOMAIN].get(CONF_WS_URL),
async_callback=async_upate_callback,
)
hass.data[DATA_API] = spc
if not await spc.async_load_parameters():
_LOGGER.error("Failed to load area/zone information from SPC.")
return False
# add sensor devices for each zone (typically motion/fire/door sensors)
hass.async_create_task(
discovery.async_load_platform(hass, "binary_sensor", DOMAIN, {}, config)
)
# create a separate alarm panel for each area
hass.async_create_task(
discovery.async_load_platform(hass, "alarm_control_panel", DOMAIN, {}, config)
)
# start listening for incoming events over websocket
spc.start()
return True