Пример #1
0
async def _copy_node(server, parent_nodeid, rdesc, nodeid, recursive):
    addnode = ua.AddNodesItem()
    addnode.RequestedNewNodeId = nodeid
    addnode.BrowseName = rdesc.BrowseName
    addnode.ParentNodeId = parent_nodeid
    addnode.ReferenceTypeId = rdesc.ReferenceTypeId
    addnode.TypeDefinition = rdesc.TypeDefinition
    addnode.NodeClass = rdesc.NodeClass
    node_to_copy = make_node(server, rdesc.NodeId)
    attr_obj = getattr(ua, ua.NodeClass(rdesc.NodeClass).name + "Attributes")
    await _read_and_copy_attrs(node_to_copy, attr_obj(), addnode)
    res = (await server.add_nodes([addnode]))[0]
    added_nodes = [res.AddedNodeId]
    if recursive:
        descs = await node_to_copy.get_children_descriptions()
        for desc in descs:
            nodes = await _copy_node(
                server,
                res.AddedNodeId,
                desc,
                nodeid=ua.NodeId(NamespaceIndex=desc.NodeId.NamespaceIndex),
                recursive=True)
            added_nodes.extend(nodes)

    return added_nodes
Пример #2
0
 async def read(self, parameters):
     self.logger.debug("read")
     request = ua.ReadRequest()
     request.Parameters = parameters
     data = await self.protocol.send_request(request)
     response = struct_from_binary(ua.ReadResponse, data)
     self.logger.debug(response)
     response.ResponseHeader.ServiceResult.check()
     # cast to Enum attributes that need to
     for idx, rv in enumerate(parameters.NodesToRead):
         if rv.AttributeId == ua.AttributeIds.NodeClass:
             dv = response.Results[idx]
             if dv.StatusCode.is_good():
                 dv.Value.Value = ua.NodeClass(dv.Value.Value)
         elif rv.AttributeId == ua.AttributeIds.ValueRank:
             dv = response.Results[idx]
             if dv.StatusCode.is_good() and dv.Value.Value in (-3, -2, -1, 0, 1, 2, 3, 4):
                 dv.Value.Value = ua.ValueRank(dv.Value.Value)
     return response.Results
Пример #3
0
 async def read_node_class(self):
     """
     get node class attribute of node
     """
     result = await self.read_attribute(ua.AttributeIds.NodeClass)
     return ua.NodeClass(result.Value.Value)