def add_object_type_node(self, requested_new_node_id: UaNodeId, parent_node_id: UaNodeId, reference_type_id: UaNodeId, browse_name: UaQualifiedName, type_definition: UaNodeId, attr: UaNodeAttributes = None, node_context=None): if attr is None: attr = UA_ATTRIBUTES_DEFAULT.VARIABLE out_node_id = UaNodeId() # TODO: test if node_context is not None: node_context = ffi.new_handle(node_context) else: node_context = ffi.NULL status_code = lib.UA_Server_addObjectTypeNode( self.ua_server, requested_new_node_id._val, parent_node_id._val, reference_type_id._val, browse_name._val, type_definition._val, attr._val, node_context, out_node_id._ptr) out_node_id._update() return ServerServiceResults.NodeIdResult(UaStatusCode(status_code), out_node_id)
def create_condition(self, condition_id: UaNodeId, condition_type: UaNodeId, condition_name: UaQualifiedName, condition_source: UaNodeId, hierarchical_reference_type: UaNodeId): out_node_id = UaNodeId() status_code = lib.UA_Server_createCondition( self.ua_server, condition_id._val, condition_type._val, condition_name._val, condition_source._val, hierarchical_reference_type._val, out_node_id._ptr) out_node_id._update() return ServerServiceResults.NodeIdResult(UaStatusCode(status_code), out_node_id)
def add_data_source_variable_node(self, requested_new_node_id: UaNodeId, parent_node_id: UaNodeId, reference_type_id: UaNodeId, browse_name: UaQualifiedName, type_definition: UaNodeId, data_source: UaDataSource, attr: UaVariableAttributes = None, node_context=None): out_node_id = UaNodeId() if attr is None: attr = UA_ATTRIBUTES_DEFAULT.VARIABLE if node_context is not None: node_context = ffi.new_handle(node_context) else: node_context = ffi.NULL # todo: requested_new_node_id currently mustn't be NULL or this doesn't work # only has to be added to dict if python callbacks are used instead of only c callbacks if data_source.uses_python_read_callback or data_source.uses_python_write_callback: _ServerCallback.callbacks_dict[str( requested_new_node_id)] = data_source status_code = lib.UA_Server_addDataSourceVariableNode( self.ua_server, requested_new_node_id._val, parent_node_id._val, reference_type_id._val, browse_name._val, type_definition._val, attr._val, data_source._val, node_context, out_node_id._ptr) out_node_id._update() # todo: update dict entry with out node id return ServerServiceResults.NodeIdResult( UaStatusCode(status_code), out_node_id) # TODO: out_node not None?
def read_data_type(self, node_id: UaNodeId): out_type = UaNodeId() status_code = lib.UA_Server_readDataType(self.ua_server, node_id._val, out_type._ptr) out_type._update() return ServerServiceResults.NodeIdResult(status_code, out_type._ptr)