mirror of
https://github.com/home-assistant/core.git
synced 2025-07-22 20:57:21 +00:00
Run tasks when ZHA devices become available (#20998)
* use tasks for message interception * update available handling * review comments and cleaned up check * review comments
This commit is contained in:
parent
8db8a58763
commit
d692251e62
@ -152,10 +152,14 @@ async def async_setup_entry(hass, config_entry):
|
|||||||
def handle_message(sender, is_reply, profile, cluster,
|
def handle_message(sender, is_reply, profile, cluster,
|
||||||
src_ep, dst_ep, tsn, command_id, args):
|
src_ep, dst_ep, tsn, command_id, args):
|
||||||
"""Handle message from a device."""
|
"""Handle message from a device."""
|
||||||
if sender.last_seen is None and not sender.initializing:
|
if not sender.initializing and sender.ieee in zha_gateway.devices and \
|
||||||
if sender.ieee in zha_gateway.devices:
|
not zha_gateway.devices[sender.ieee].available:
|
||||||
device = zha_gateway.devices[sender.ieee]
|
hass.async_create_task(
|
||||||
device.update_available(True)
|
zha_gateway.async_device_became_available(
|
||||||
|
sender, is_reply, profile, cluster, src_ep, dst_ep, tsn,
|
||||||
|
command_id, args
|
||||||
|
)
|
||||||
|
)
|
||||||
return sender.handle_message(
|
return sender.handle_message(
|
||||||
is_reply, profile, cluster, src_ep, dst_ep, tsn, command_id, args)
|
is_reply, profile, cluster, src_ep, dst_ep, tsn, command_id, args)
|
||||||
|
|
||||||
|
@ -126,6 +126,18 @@ class ZHAGateway:
|
|||||||
self._devices[zigpy_device.ieee] = zha_device
|
self._devices[zigpy_device.ieee] = zha_device
|
||||||
return zha_device
|
return zha_device
|
||||||
|
|
||||||
|
async def async_device_became_available(
|
||||||
|
self, sender, is_reply, profile, cluster, src_ep, dst_ep, tsn,
|
||||||
|
command_id, args):
|
||||||
|
"""Handle tasks when a device becomes available."""
|
||||||
|
self.async_update_device(sender)
|
||||||
|
|
||||||
|
def async_update_device(self, sender):
|
||||||
|
"""Update device that has just become available."""
|
||||||
|
if sender.ieee in self.devices:
|
||||||
|
device = self.devices[sender.ieee]
|
||||||
|
device.update_available(True)
|
||||||
|
|
||||||
async def async_device_initialized(self, device, is_new_join):
|
async def async_device_initialized(self, device, is_new_join):
|
||||||
"""Handle device joined and basic information discovered (async)."""
|
"""Handle device joined and basic information discovered (async)."""
|
||||||
zha_device = await self._get_or_create_device(device)
|
zha_device = await self._get_or_create_device(device)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user