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()
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()
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()