Exemplo n.º 1
0
    def _address_space_fixes(self):
        """
        Looks like the xml definition of address space has some error. This is a good place to fix them
        """

        it = ua.AddReferencesItem()
        it.SourceNodeId = ua.NodeId(ua.ObjectIds.BaseObjectType)
        it.ReferenceTypeId = ua.NodeId(ua.ObjectIds.Organizes)
        it.IsForward = False
        it.TargetNodeId = ua.NodeId(ua.ObjectIds.ObjectTypesFolder)
        it.TargetNodeClass = ua.NodeClass.Object

        it2 = ua.AddReferencesItem()
        it2.SourceNodeId = ua.NodeId(ua.ObjectIds.BaseDataType)
        it2.ReferenceTypeId = ua.NodeId(ua.ObjectIds.Organizes)
        it2.IsForward = False
        it2.TargetNodeId = ua.NodeId(ua.ObjectIds.DataTypesFolder)
        it2.TargetNodeClass = ua.NodeClass.Object

        results = self.isession.add_references([it, it2])

        params = ua.WriteParameters()
        for nodeid in (
                ua.ObjectIds.
                Server_ServerCapabilities_OperationLimits_MaxNodesPerRead,
                ua.ObjectIds.
                Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData,
                ua.ObjectIds.
                Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents,
                ua.ObjectIds.
                Server_ServerCapabilities_OperationLimits_MaxNodesPerWrite,
                ua.ObjectIds.
                Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData,
                ua.ObjectIds.
                Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents,
                ua.ObjectIds.
                Server_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall,
                ua.ObjectIds.
                Server_ServerCapabilities_OperationLimits_MaxNodesPerBrowse,
                ua.ObjectIds.
                Server_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes,
                ua.ObjectIds.
                Server_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds,
                ua.ObjectIds.
                Server_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement,
                ua.ObjectIds.
                Server_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall
        ):
            attr = ua.WriteValue()
            attr.NodeId = ua.NodeId(nodeid)
            attr.AttributeId = ua.AttributeIds.Value
            attr.Value = ua.DataValue(ua.Variant(10000, ua.VariantType.UInt32),
                                      ua.StatusCode(ua.StatusCodes.Good))
            attr.Value.ServerTimestamp = datetime.utcnow()
            params.NodesToWrite.append(attr)
        result = self.isession.write(params)
        result[0].check()
Exemplo n.º 2
0
 def set_attribute(self, attributeid, datavalue):
     """
     Set an attribute of a node
     """
     attr = ua.WriteValue()
     attr.NodeId = self.nodeid
     attr.AttributeId = attributeid
     attr.Value = datavalue
     params = ua.WriteParameters()
     params.NodesToWrite = [attr]
     result = self.server.write(params)
     result[0].check()
Exemplo n.º 3
0
    async def set_node_attribute(self,
                                 nodeId,
                                 attribute,
                                 value,
                                 dataType=None):
        """
        Sets node attribute based on given arguments.
        Giving correct dataType for value and node speeds
        up the write operation.

        Arguments                               Example
        nodeId:     Target nodeId               "ns=2;i=2"
        attribute:  Target attribute of node    "Value"
        value:      Value for the attribute     1234
        dataType:   Data type of value          "Int32"

        Results
        boolean:    Indicates success           True
        writeTime:  Time taken for write (ns)   12345678
        """

        attr = ua.WriteValue()

        if nodeId == "":
            attr.NodeId = ua.NodeId.from_string(self.rootNodeId)
        else:
            attr.NodeId = ua.NodeId.from_string(nodeId)

        attr.AttributeId = ua.AttributeIds[attribute]

        if attribute == "Description":
            dataValue = ua.LocalizedText(value)
        else:
            if dataType is None:
                variantType = self.variant_type_finder(value, nodeId)
            else:
                variantType = ua.VariantType[dataType]
            dataValue = ua.Variant(value, variantType)
        attr.Value = ua.DataValue(dataValue)

        params = ua.WriteParameters()
        params.NodesToWrite.append(attr)

        result, writeTime = await self.write(params)
        if attribute == "Value":
            return result[0].is_good(), writeTime
        else:
            return result[0].is_good()