mirror of
https://github.com/home-assistant/core.git
synced 2025-07-27 15:17:35 +00:00
Add address-specific KNX listeners that fire events on the HASS bus (#8374)
* Add address-specific KNX listeners that fire events on the HASS bus * Added docstring 1-byte messages will be converted from a list to the value * Formating
This commit is contained in:
parent
8682f21fc5
commit
63cc658010
@ -24,11 +24,14 @@ DOMAIN = 'knx'
|
|||||||
EVENT_KNX_FRAME_RECEIVED = 'knx_frame_received'
|
EVENT_KNX_FRAME_RECEIVED = 'knx_frame_received'
|
||||||
|
|
||||||
KNXTUNNEL = None
|
KNXTUNNEL = None
|
||||||
|
CONF_LISTEN = "listen"
|
||||||
|
|
||||||
CONFIG_SCHEMA = vol.Schema({
|
CONFIG_SCHEMA = vol.Schema({
|
||||||
DOMAIN: vol.Schema({
|
DOMAIN: vol.Schema({
|
||||||
vol.Optional(CONF_HOST, default=DEFAULT_HOST): cv.string,
|
vol.Optional(CONF_HOST, default=DEFAULT_HOST): cv.string,
|
||||||
vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
|
vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
|
||||||
|
vol.Optional(CONF_LISTEN, default=[]):
|
||||||
|
vol.All(cv.ensure_list, [cv.string]),
|
||||||
}),
|
}),
|
||||||
}, extra=vol.ALLOW_EXTRA)
|
}, extra=vol.ALLOW_EXTRA)
|
||||||
|
|
||||||
@ -38,7 +41,7 @@ def setup(hass, config):
|
|||||||
global KNXTUNNEL
|
global KNXTUNNEL
|
||||||
|
|
||||||
from knxip.ip import KNXIPTunnel
|
from knxip.ip import KNXIPTunnel
|
||||||
from knxip.core import KNXException
|
from knxip.core import KNXException, parse_group_address
|
||||||
|
|
||||||
host = config[DOMAIN].get(CONF_HOST)
|
host = config[DOMAIN].get(CONF_HOST)
|
||||||
port = config[DOMAIN].get(CONF_PORT)
|
port = config[DOMAIN].get(CONF_PORT)
|
||||||
@ -61,6 +64,24 @@ def setup(hass, config):
|
|||||||
|
|
||||||
_LOGGER.info("KNX IP tunnel to %s:%i established", host, port)
|
_LOGGER.info("KNX IP tunnel to %s:%i established", host, port)
|
||||||
|
|
||||||
|
def received_knx_event(address, data):
|
||||||
|
"""Process received KNX message."""
|
||||||
|
if len(data) == 1:
|
||||||
|
data = data[0]
|
||||||
|
hass.bus.fire('knx_event', {
|
||||||
|
'address': address,
|
||||||
|
'data': data
|
||||||
|
})
|
||||||
|
|
||||||
|
for listen in config[DOMAIN].get(CONF_LISTEN):
|
||||||
|
_LOGGER.debug("Registering listener for %s", listen)
|
||||||
|
try:
|
||||||
|
KNXTUNNEL.register_listener(parse_group_address(listen),
|
||||||
|
received_knx_event)
|
||||||
|
except KNXException as knxexception:
|
||||||
|
_LOGGER.error("Can't register KNX listener for address %s (%s)",
|
||||||
|
listen, knxexception)
|
||||||
|
|
||||||
hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, close_tunnel)
|
hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, close_tunnel)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user