示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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?
示例#4
0
 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)