上传时间序列数据¶
数据源配置¶
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 了。它期望数据阅读器使用以下上传数据主题发布数据:
runtime/inject/data/timeseries/{protocol}/{data_source_id}
runtime/inject/diag/timeseries/{protocol}/{data_source_id}
如果服务订阅 cloud/monitoring/update/configuration/{protocol}
,则它们接收 {data_source_id}
。
发布数据¶
-
建立到 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();
-
根据以下模板以 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());
-
根据以下模板发布数据到 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