More robust attribute checking before conversion, as the object can actually be either a ZWaveNode or a ZWaveController

This commit is contained in:
Fabio Manganiello 2020-05-22 12:08:17 +02:00
parent 98ced4b4e4
commit 1b47615100
1 changed files with 33 additions and 32 deletions

View File

@ -206,45 +206,46 @@ class ZwavePlugin(Plugin):
'node_id': node.node_id,
'home_id': node.home_id,
'capabilities': list(node.capabilities),
'command_classes': [node.get_command_class_as_string(cc) for cc in node.command_classes],
'device_type': node.device_type,
'command_classes': [node.get_command_class_as_string(cc) for cc in node.command_classes]
if hasattr(node, 'command_classes') else [],
'device_type': node.device_type if hasattr(node, 'device_type') else '',
'groups': {
group_id: cls.group_to_dict(group)
for group_id, group in node.groups.items()
},
'is_awake': node.is_awake,
'is_failed': node.is_failed,
'is_beaming_device': node.is_beaming_device,
'is_frequent_listening_device': node.is_frequent_listening_device,
'is_info_received': node.is_info_received,
'is_listening_device': node.is_listening_device,
'is_locked': node.is_locked,
'is_ready': node.is_ready,
'is_routing_device': node.is_routing_device,
'is_security_device': node.is_security_device,
'is_sleeping': node.is_sleeping,
'last_update': node.last_update,
'location': node.location,
'manufacturer_id': node.manufacturer_id,
'manufacturer_name': node.manufacturer_name,
'max_baud_rate': node.max_baud_rate,
'neighbours': [node_id for node_id in node.neighbors],
'name': node.name,
'outdated': node.outdated,
'product_id': node.product_id,
'product_name': node.product_name,
'product_type': node.product_type,
'query_stage': node.query_stage,
'role': node.role,
'security': node.security,
'specific': node.specific,
'type': node.type,
'use_cache': node.use_cache,
'version': node.version,
'is_awake': node.is_awake if hasattr(node, 'is_awake') else False,
'is_failed': node.is_failed if hasattr(node, 'is_failed') else False,
'is_beaming_device': node.is_beaming_device if hasattr(node, 'is_beaming_device') else False,
'is_frequent_listening_device': node.is_frequent_listening_device if hasattr(node, 'is_frequent_listening_device') else False,
'is_info_received': node.is_info_received if hasattr(node, 'is_info_received') else False,
'is_listening_device': node.is_listening_device if hasattr(node, 'is_listening_device') else False,
'is_locked': node.is_locked if hasattr(node, 'is_locked') else False,
'is_ready': node.is_ready if hasattr(node, 'is_ready') else False,
'is_routing_device': node.is_routing_device if hasattr(node, 'is_routing_device') else False,
'is_security_device': node.is_security_device if hasattr(node, 'is_security_device') else False,
'is_sleeping': node.is_sleeping if hasattr(node, 'is_sleeping') else False,
'last_update': node.last_update if hasattr(node, 'last_update') else None,
'location': node.location if hasattr(node, 'location') else None,
'manufacturer_id': node.manufacturer_id if hasattr(node, 'manufacturer_id') else None,
'manufacturer_name': node.manufacturer_name if hasattr(node, 'manufacturer_name') else None,
'max_baud_rate': node.max_baud_rate if hasattr(node, 'max_baud_rate') else None,
'neighbours': [node_id for node_id in node.neighbors] if hasattr(node, 'neighbours') else [],
'name': node.name if hasattr(node, 'name') else None,
'outdated': node.outdated if hasattr(node, 'outdated') else False,
'product_id': node.product_id if hasattr(node, 'product_id') else None,
'product_name': node.product_name if hasattr(node, 'product_name') else None,
'product_type': node.product_type if hasattr(node, 'product_type') else None,
'query_stage': node.query_stage if hasattr(node, 'query_stage') else None,
'role': node.role if hasattr(node, 'role') else None,
'security': node.security if hasattr(node, 'security') else None,
'specific': node.specific if hasattr(node, 'specific') else None,
'type': node.type if hasattr(node, 'type') else None,
'use_cache': node.use_cache if hasattr(node, 'use_cache') else False,
'version': node.version if hasattr(node, 'version') else None,
'values': {
value.id_on_network: cls.value_to_dict(value)
for value_id, value in (node.values or {}).items()
},
} if hasattr(node, 'values') else {},
}
def _get_node(self, node_id: Optional[int] = None, node_name: Optional[str] = None) -> ZWaveNode: