async def get_references(self, refs=ua.ObjectIds.References, direction=ua.BrowseDirection.Both, nodeclassmask=ua.NodeClass.Unspecified, includesubtypes=True): """ returns references of the node based on specific filter defined with: refs = ObjectId of the Reference direction = Browse direction for references nodeclassmask = filter nodes based on specific class includesubtypes = If true subtypes of the reference (ref) are also included """ desc = ua.BrowseDescription() desc.BrowseDirection = direction desc.ReferenceTypeId = _to_nodeid(refs) desc.IncludeSubtypes = includesubtypes desc.NodeClassMask = nodeclassmask desc.ResultMask = ua.BrowseResultMask.All desc.NodeId = self.nodeid params = ua.BrowseParameters() params.View.Timestamp = ua.get_win_epoch() params.NodesToBrowse.append(desc) params.RequestedMaxReferencesPerNode = 0 results = await self.server.browse(params) references = await self._browse_next(results) return references
async def browse_nodes(self, nodes): """ Browses multiple nodes in one ua call returns a List of Tuples(Node, BrowseResult) """ nodestobrowse = [] for node in nodes: desc = ua.BrowseDescription() desc.NodeId = node.nodeid desc.ResultMask = ua.BrowseResultMask.All nodestobrowse.append(desc) parameters = ua.BrowseParameters() parameters.View = ua.ViewDescription() parameters.RequestedMaxReferencesPerNode = 0 parameters.NodesToBrowse = nodestobrowse results = await self.uaclient.browse(parameters) return list(zip(nodes, results))