Skip to content

上传时间序列数据

数据源配置

Open Edge Device Kit 使用数据源配置来正确地上传时间序列数据到 MindSphere。数据源配置在名为data.cfg 的文件中定义。格式如下所示。

数据源配置示例
{
    "dataConfiguration": {
        "agentId": "f5f6c04336fa4116a6417b8b1eef7495",
        "configurationId": "1",
        "uploadCycle": "10",
        "description": null,
        "dataSources": [{
            "name": "my_data_source_1",
            "dataSourceId": "12cs3",
            "description": "my_descripton",
            "protocol": "my_protocol",
            "readCycleInSeconds": "5",
            "protocolData": {
                "myField1": "",
                "myField2": "",
                "myField3": ""
            },
            "dataPoints": [{
                "dataPointId": "0000",
                "name": "my_variable1",
                "description": "my_descripton_1",
                "unit": "PERCENT",
                "dataType": "INT",
                "dataPointData": {
                    "myField1": "",
                    "myField2": ""
                }
            },
            {
                "dataPointId": "0001",
                "name": "my_variable_2",
                "description": "my_descripton_2",
                "unit": "PERCENT",
                "dataType": "LONG",
                "dataPointData": {
                    "myField1": "",
                    "myField2": ""
                }
            }]
        }]
    }
}

对于每个数据源,Open Edge Device Kit 在成功应用配置之后发布数据源配置消息。此消息应触发设备上的数据读取器模块来发布时间序列数据。

上传时间序列数据

数据源配置完成应用后,Open Edge Device Kit 就可以将时间序列数据上传到 MindSphere 了。它期望数据阅读器使用以下上传数据主题发布数据:

如果服务订阅 cloud/monitoring/update/configuration/{protocol},则它们接收 {data_source_id}

发布数据

  1. 建立到 MQTT 代理的连接,其中 <mqtt_host> 是主机名称, <mqtt_port> 是端口:

    String broker = String.format("tcp://%s:%d", <mqtt_host>, <mqtt_port>);
    MqttClient mqttClient = new MqttClient(broker, "MQTT_client_id");
    mqttClient.connect();
    
  2. 根据以下模板以 JSON 格式准备数据。占位符由角括号 <> 表示。

    String jsonTemplate = "[\n" +
        "  {\n" +
        "    \"timestamp\": \"<time_stamp>\",\n" +
        "    \"values\": [\n" +
        "      {\n" +
        "        \"dataPointId\": \"<data_point_id>\",\n" +
        "        \"value\": \"<data_value>\",\n" +
        "        \"qualityCode\": \"<quality_code>\"\n" +
        "      }\n" +
        "    ]\n" +
        "  }\n" +
        "]";
    
    jsonTemplate = jsonTemplate.replace("<time_stamp>", data.getTimestamp());
    jsonTemplate = jsonTemplate.replace("<data_point_id>", data.getDataPointID());
    jsonTemplate = jsonTemplate.replace("<data_value>", data.getDataValue());
    jsonTemplate = jsonTemplate.replace("<quality_code>", data.getQualityCode());
    
  1. 根据以下模板发布数据到 Open Edge Device Kit。占位符由角括号 <> 表示。

    String topicTemplate = "runtime/inject/data/timeseries/<protocol>/<data_source_id>";
    
    topicTemplate = topicTemplate.replace("<protocol>", dataTimeSeriesProtocol);
    topicTemplate = topicTemplate.replace("<data_source_id>", dataTimeSeriesSource);
    
    mqttClient.publish(topicTemplate, jsonTemplate.getBytes());
    

信息

所有数据阅读器都应该使用各自的 <protocol><data_source_id> 参数订阅下面的主题。当他们收到这个消息时,他们应该停止所有的活动。

runtime/data/timeseries/stop/<protocol>/<data_source_id>

缓存数据

Open Edge Device Kit 为时间序列数据上传提供了缓存机制,以防止数据丢失。如果 MindConnect 交换端点不可用,则将接收到的时间序列数据加密并缓存在本地文件系统中。当端点再次可访问时,将上传存储的数据。

注意

缓存大小是有限的,传入的数据将在一段时间后开始覆盖旧的缓存数据。缓存大小可以使用settings file中的参数 offlineCache > size 来调整。


Last update: November 16, 2021