mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 06:07:17 +00:00
support feedback for ZHA device reconfiguration (#48447)
This commit is contained in:
parent
78cff36f96
commit
aa0292974a
@ -462,9 +462,38 @@ async def websocket_remove_group_members(hass, connection, msg):
|
|||||||
)
|
)
|
||||||
async def websocket_reconfigure_node(hass, connection, msg):
|
async def websocket_reconfigure_node(hass, connection, msg):
|
||||||
"""Reconfigure a ZHA nodes entities by its ieee address."""
|
"""Reconfigure a ZHA nodes entities by its ieee address."""
|
||||||
zha_gateway = hass.data[DATA_ZHA][DATA_ZHA_GATEWAY]
|
zha_gateway: ZhaGatewayType = hass.data[DATA_ZHA][DATA_ZHA_GATEWAY]
|
||||||
ieee = msg[ATTR_IEEE]
|
ieee = msg[ATTR_IEEE]
|
||||||
device = zha_gateway.get_device(ieee)
|
device: ZhaDeviceType = zha_gateway.get_device(ieee)
|
||||||
|
ieee_str = str(device.ieee)
|
||||||
|
nwk_str = device.nwk.__repr__()
|
||||||
|
|
||||||
|
class DeviceLogFilterer(logging.Filter):
|
||||||
|
"""Log filterer that limits messages to the specified device."""
|
||||||
|
|
||||||
|
def filter(self, record):
|
||||||
|
message = record.getMessage()
|
||||||
|
return nwk_str in message or ieee_str in message
|
||||||
|
|
||||||
|
filterer = DeviceLogFilterer()
|
||||||
|
|
||||||
|
async def forward_messages(data):
|
||||||
|
"""Forward events to websocket."""
|
||||||
|
connection.send_message(websocket_api.event_message(msg["id"], data))
|
||||||
|
|
||||||
|
remove_dispatcher_function = async_dispatcher_connect(
|
||||||
|
hass, "zha_gateway_message", forward_messages
|
||||||
|
)
|
||||||
|
|
||||||
|
@callback
|
||||||
|
def async_cleanup() -> None:
|
||||||
|
"""Remove signal listener and turn off debug mode."""
|
||||||
|
zha_gateway.async_disable_debug_mode(filterer=filterer)
|
||||||
|
remove_dispatcher_function()
|
||||||
|
|
||||||
|
connection.subscriptions[msg["id"]] = async_cleanup
|
||||||
|
zha_gateway.async_enable_debug_mode(filterer=filterer)
|
||||||
|
|
||||||
_LOGGER.debug("Reconfiguring node with ieee_address: %s", ieee)
|
_LOGGER.debug("Reconfiguring node with ieee_address: %s", ieee)
|
||||||
hass.async_create_task(device.async_configure())
|
hass.async_create_task(device.async_configure())
|
||||||
|
|
||||||
|
@ -473,24 +473,29 @@ class ZHAGateway:
|
|||||||
)
|
)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_enable_debug_mode(self):
|
def async_enable_debug_mode(self, filterer=None):
|
||||||
"""Enable debug mode for ZHA."""
|
"""Enable debug mode for ZHA."""
|
||||||
self._log_levels[DEBUG_LEVEL_ORIGINAL] = async_capture_log_levels()
|
self._log_levels[DEBUG_LEVEL_ORIGINAL] = async_capture_log_levels()
|
||||||
async_set_logger_levels(DEBUG_LEVELS)
|
async_set_logger_levels(DEBUG_LEVELS)
|
||||||
self._log_levels[DEBUG_LEVEL_CURRENT] = async_capture_log_levels()
|
self._log_levels[DEBUG_LEVEL_CURRENT] = async_capture_log_levels()
|
||||||
|
|
||||||
|
if filterer:
|
||||||
|
self._log_relay_handler.addFilter(filterer)
|
||||||
|
|
||||||
for logger_name in DEBUG_RELAY_LOGGERS:
|
for logger_name in DEBUG_RELAY_LOGGERS:
|
||||||
logging.getLogger(logger_name).addHandler(self._log_relay_handler)
|
logging.getLogger(logger_name).addHandler(self._log_relay_handler)
|
||||||
|
|
||||||
self.debug_enabled = True
|
self.debug_enabled = True
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_disable_debug_mode(self):
|
def async_disable_debug_mode(self, filterer=None):
|
||||||
"""Disable debug mode for ZHA."""
|
"""Disable debug mode for ZHA."""
|
||||||
async_set_logger_levels(self._log_levels[DEBUG_LEVEL_ORIGINAL])
|
async_set_logger_levels(self._log_levels[DEBUG_LEVEL_ORIGINAL])
|
||||||
self._log_levels[DEBUG_LEVEL_CURRENT] = async_capture_log_levels()
|
self._log_levels[DEBUG_LEVEL_CURRENT] = async_capture_log_levels()
|
||||||
for logger_name in DEBUG_RELAY_LOGGERS:
|
for logger_name in DEBUG_RELAY_LOGGERS:
|
||||||
logging.getLogger(logger_name).removeHandler(self._log_relay_handler)
|
logging.getLogger(logger_name).removeHandler(self._log_relay_handler)
|
||||||
|
if filterer:
|
||||||
|
self._log_relay_handler.removeFilter(filterer)
|
||||||
self.debug_enabled = False
|
self.debug_enabled = False
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
|
Loading…
x
Reference in New Issue
Block a user