mirror of
https://github.com/home-assistant/core.git
synced 2025-12-24 12:59:34 +00:00
Z-Wave prevent I/O event loop (#6369)
* Prevent Z-Wave I/O in event loop * Move value_handler to util class. * Add docstring
This commit is contained in:
54
homeassistant/components/zwave/util.py
Normal file
54
homeassistant/components/zwave/util.py
Normal file
@@ -0,0 +1,54 @@
|
||||
"""Zwave util methods."""
|
||||
import logging
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def value_handler(value, method=None, class_id=None, index=None,
|
||||
label=None, data=None, member=None, instance=None,
|
||||
**kwargs):
|
||||
"""Get the values for a given command_class with arguments.
|
||||
|
||||
May only be used inside callback.
|
||||
|
||||
"""
|
||||
values = []
|
||||
if class_id is None:
|
||||
values.extend(value.node.get_values(**kwargs).values())
|
||||
else:
|
||||
if not isinstance(class_id, list):
|
||||
class_id = [class_id]
|
||||
for cid in class_id:
|
||||
values.extend(value.node.get_values(
|
||||
class_id=cid, **kwargs).values())
|
||||
_LOGGER.debug('method=%s, class_id=%s, index=%s, label=%s, data=%s,'
|
||||
' member=%s, instance=%d, kwargs=%s',
|
||||
method, class_id, index, label, data, member, instance,
|
||||
kwargs)
|
||||
_LOGGER.debug('values=%s', values)
|
||||
results = None
|
||||
for value in values:
|
||||
if index is not None and value.index != index:
|
||||
continue
|
||||
if label is not None:
|
||||
label_found = False
|
||||
for entry in label:
|
||||
if value.label == entry:
|
||||
label_found = True
|
||||
break
|
||||
if not label_found:
|
||||
continue
|
||||
if method == 'set':
|
||||
value.data = data
|
||||
return
|
||||
if data is not None and value.data != data:
|
||||
continue
|
||||
if instance is not None and value.instance != instance:
|
||||
continue
|
||||
if member is not None:
|
||||
results = getattr(value, member)
|
||||
else:
|
||||
results = value
|
||||
break
|
||||
_LOGGER.debug('final result=%s', results)
|
||||
return results
|
||||
Reference in New Issue
Block a user