1 """Interfaces with Egardia/Woonveilig alarm control panel."""
5 from pythonegardia
import egardiadevice, egardiaserver
7 import voluptuous
as vol
15 EVENT_HOMEASSISTANT_STOP,
23 _LOGGER = logging.getLogger(__name__)
25 ATTR_DISCOVER_DEVICES =
"egardia_sensor"
27 CONF_REPORT_SERVER_CODES =
"report_server_codes"
28 CONF_REPORT_SERVER_ENABLED =
"report_server_enabled"
29 CONF_REPORT_SERVER_PORT =
"report_server_port"
30 CONF_VERSION =
"version"
32 DEFAULT_NAME =
"Egardia"
34 DEFAULT_REPORT_SERVER_ENABLED =
False
35 DEFAULT_REPORT_SERVER_PORT = 52010
36 DEFAULT_VERSION =
"GATE-01"
39 EGARDIA_DEVICE =
"egardiadevice"
40 EGARDIA_NAME =
"egardianame"
41 EGARDIA_REPORT_SERVER_CODES =
"egardia_rs_codes"
42 EGARDIA_REPORT_SERVER_ENABLED =
"egardia_rs_enabled"
43 EGARDIA_SERVER =
"egardia_server"
45 NOTIFICATION_ID =
"egardia_notification"
46 NOTIFICATION_TITLE =
"Egardia"
48 REPORT_SERVER_CODES_IGNORE =
"ignore"
50 SERVER_CODE_SCHEMA = vol.Schema(
52 vol.Optional(
"arm"): vol.All(cv.ensure_list_csv, [cv.string]),
53 vol.Optional(
"disarm"): vol.All(cv.ensure_list_csv, [cv.string]),
54 vol.Optional(
"armhome"): vol.All(cv.ensure_list_csv, [cv.string]),
55 vol.Optional(
"triggered"): vol.All(cv.ensure_list_csv, [cv.string]),
56 vol.Optional(
"ignore"): vol.All(cv.ensure_list_csv, [cv.string]),
60 CONFIG_SCHEMA = vol.Schema(
64 vol.Required(CONF_HOST): cv.string,
65 vol.Required(CONF_PASSWORD): cv.string,
66 vol.Required(CONF_USERNAME): cv.string,
67 vol.Optional(CONF_VERSION, default=DEFAULT_VERSION): cv.string,
68 vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
69 vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
70 vol.Optional(CONF_REPORT_SERVER_CODES, default={}): SERVER_CODE_SCHEMA,
72 CONF_REPORT_SERVER_ENABLED, default=DEFAULT_REPORT_SERVER_ENABLED
75 CONF_REPORT_SERVER_PORT, default=DEFAULT_REPORT_SERVER_PORT
80 extra=vol.ALLOW_EXTRA,
84 def setup(hass: HomeAssistant, config: ConfigType) -> bool:
85 """Set up the Egardia platform."""
88 username = conf.get(CONF_USERNAME)
89 password = conf.get(CONF_PASSWORD)
90 host = conf.get(CONF_HOST)
91 port = conf.get(CONF_PORT)
92 version = conf.get(CONF_VERSION)
93 rs_enabled = conf.get(CONF_REPORT_SERVER_ENABLED)
94 rs_port = conf.get(CONF_REPORT_SERVER_PORT)
96 device = hass.data[EGARDIA_DEVICE] = egardiadevice.EgardiaDevice(
97 host, port, username, password,
"", version
99 except requests.exceptions.RequestException:
101 "An error occurred accessing your Egardia device. "
102 "Please check configuration"
105 except egardiadevice.UnauthorizedError:
106 _LOGGER.error(
"Unable to authorize. Wrong password or username")
110 _LOGGER.debug(
"Setting up EgardiaServer")
112 if EGARDIA_SERVER
not in hass.data:
113 server = egardiaserver.EgardiaServer(
"", rs_port)
114 bound = server.bind()
117 "Binding error occurred while starting EgardiaServer."
119 hass.data[EGARDIA_SERVER] = server
122 def handle_stop_event(event):
123 """Handle Home Assistant stop event."""
127 hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, handle_stop_event)
130 _LOGGER.error(
"Binding error occurred while starting EgardiaServer")
133 discovery.load_platform(
134 hass, Platform.ALARM_CONTROL_PANEL, DOMAIN, discovered=conf, hass_config=config
138 sensors = device.getsensors()
139 discovery.load_platform(
140 hass, Platform.BINARY_SENSOR, DOMAIN, {ATTR_DISCOVER_DEVICES: sensors}, config
bool setup(HomeAssistant hass, ConfigType config)