mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
Fix mysensors callback race (#6311)
* Fix possible race at startup in mysensors callback * Update devices via persistence before starting gateway to avoid two threads calling the same callback at the same time. * Call add_devices max once per callback
This commit is contained in:
parent
e23aa1ccf8
commit
bafa0cc3b8
@ -186,12 +186,12 @@ def setup(hass, config):
|
|||||||
|
|
||||||
def gw_start(event):
|
def gw_start(event):
|
||||||
"""Callback to trigger start of gateway and any persistence."""
|
"""Callback to trigger start of gateway and any persistence."""
|
||||||
gateway.start()
|
|
||||||
hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP,
|
|
||||||
lambda event: gateway.stop())
|
|
||||||
if persistence:
|
if persistence:
|
||||||
for node_id in gateway.sensors:
|
for node_id in gateway.sensors:
|
||||||
gateway.event_callback('persistence', node_id)
|
gateway.event_callback('persistence', node_id)
|
||||||
|
gateway.start()
|
||||||
|
hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP,
|
||||||
|
lambda event: gateway.stop())
|
||||||
|
|
||||||
hass.bus.listen_once(EVENT_HOMEASSISTANT_START, gw_start)
|
hass.bus.listen_once(EVENT_HOMEASSISTANT_START, gw_start)
|
||||||
|
|
||||||
@ -251,6 +251,7 @@ def pf_callback_factory(map_sv_types, devices, entity_class, add_devices=None):
|
|||||||
_LOGGER.info('No sketch_name: node %s', node_id)
|
_LOGGER.info('No sketch_name: node %s', node_id)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
new_devices = []
|
||||||
for child in gateway.sensors[node_id].children.values():
|
for child in gateway.sensors[node_id].children.values():
|
||||||
for value_type in child.values.keys():
|
for value_type in child.values.keys():
|
||||||
key = node_id, child.id, value_type
|
key = node_id, child.id, value_type
|
||||||
@ -272,11 +273,12 @@ def pf_callback_factory(map_sv_types, devices, entity_class, add_devices=None):
|
|||||||
devices[key] = device_class(
|
devices[key] = device_class(
|
||||||
gateway, node_id, child.id, name, value_type, child.type)
|
gateway, node_id, child.id, name, value_type, child.type)
|
||||||
if add_devices:
|
if add_devices:
|
||||||
_LOGGER.info('Adding new devices: %s', devices[key])
|
new_devices.append(devices[key])
|
||||||
add_devices([devices[key]])
|
|
||||||
devices[key].schedule_update_ha_state(True)
|
|
||||||
else:
|
else:
|
||||||
devices[key].update()
|
devices[key].update()
|
||||||
|
if add_devices and new_devices:
|
||||||
|
_LOGGER.info('Adding new devices: %s', new_devices)
|
||||||
|
add_devices(new_devices, True)
|
||||||
return mysensors_callback
|
return mysensors_callback
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user