如何定义通知量子跳跃时使用的time_index属性?



我对热泵的一些时间序列数据使用FIWARE。我使用猎户座2.5.2和量子跳跃0.7.6。

我的实体有很多属性,这些属性是分批报告的。这些数据批对每个属性都有单独的时间戳,因此测量的确切时间是已知的(这也是相当重要的)。我使用一个小python工具来拆分这些批次,并使用时间戳参数通过http将它们分别发送到iot-agent。

我最终得到这样一个实体:

...
"attrs": {
"temp_outdoor": {
"value": "-6.6",
"type": "Number",
"md": {
"TimeInstant": {
"type": "DateTime",
"value": 1613148707.7509995
}
},
"mdNames": [
"TimeInstant"
],
"creDate": 1612780352.3855166,
"modDate": 1613148716.1449544
},
"temp_return_flow": {
"value": "40.8",
"type": "Number",
"md": {
"TimeInstant": {
"type": "DateTime",
"value": 1613149016.394001
}
},
"mdNames": [
"TimeInstant"
],
"creDate": 1612780352.3855166,
"modDate": 1613149021.5991328
},
"TimeInstant": {
"value": 1613149101.1790009,
"type": "DateTime",
"mdNames": [],
"creDate": 1612780352.3855166,
"modDate": 1613149102.5100079
},
...

我并不真正关心creDate和modDate,而是关心TimeInstant中的"md"每个属性的。还有底部的TimeInstant"属性只是最后一个Data-Point的值,我想?我想使用"md"在createdb中创建time_index。因此,报告的时间必须是自定义元数据。我在订阅《量子跃进》的时候尝试了一些不同的数值,但都没有得到正确的结果。有人能告诉我如何指定md->TimeInstant作为time_index值吗?

我发现文档在这个主题上是相当不确定的,希望有人已经解决了这个谜团,可能会让我进去:)

谢谢!

看看你的有效载荷,不清楚使用的是什么NGSI模型,这将是帮助你所需的信息。无论如何,如文档所述:

时间序列数据库的一个基本元素是时间索引。你可能想知道……存储在哪里?QuantumLeap将在名为time_index的特殊列中保存每个通知的时间索引。

用于接收通知的时间索引的值是根据以下策略定义的,该策略从以下有序的选项列表中选择第一个当前且有效的时间值。

  1. 自定义时间索引。fw - timeindex - attribute http头的值。请注意,对于包含此类标头的通知,必须使用httpCustom块创建相应的订阅,详见NGSI规范的订阅和自定义通知部分。这是您可以指示QL使用通知有效负载的自定义属性作为时间索引指标的方式。
  2. 自定义时间索引元数据。在通知的任何属性元数据部分中找到的最近的自定义时间索引(Fiware-TimeIndex-Attribute)属性值。关于订阅的详细信息,请参见前面的选项。
  3. TimeInstant属性。如FIWARE IoT代理文档中所述。
  4. TimeInstant元数据。在通知的任何属性元数据部分中找到的最新TimeInstant属性值。(同样,请参考FIWARE IoT代理文档。)
  5. 时间戳属性。
  6. 时间戳的元数据。在通知的任何属性元数据部分中找到的最近的时间戳属性值。在FIWARE数据模型文档中指定。
  7. dateModified属性。如果您在Orion订阅部分中有注意的话,这就是"日期修改"。由Orion通知的值。dateModified元数据。在通知的任何属性元数据部分中找到的最近的dateModified属性值。

最后,如果上述选项都不存在,或者找到的值都不能实际转换为日期时间,QL将使用Current Time(接收通知的时间)。

这意味着(如果你理解NGSI模型,文档是相当清楚的),与以下有效载荷

{
"id": "Room1",
"type": "Room",
"temperature": {
"value": 24.2,
"type": "Number",
"metadata": {
"myTime": {
"type": "DateTime",
"value": "2020-12-16T17:13:46.00Z"
}
}
},
"pressure": {
"value": 720,
"type": "Number",
"metadata": {
"TimeInstant": {
"type": "DateTime",
"value": "2020-12-16T17:13:46.00Z"
}
}
},
"dateObserved": "2021-02-02T00:00:00.00Z",
"dateCreated": "2019-09-24T12:49:02.00Z",
"dateModified": "2021-02-02T23:00:50.00Z",
"TimeInstant": {
"type": "DateTime",
"value": "2020-12-16T17:13:46.00Z"
}
}

如果在通知中设置了自定义标题Fiware-TimeIndex-Attribute=dateObserved, time_index将是dateObserved的值。如果您设置Fiware-TimeIndex-Attribute=myTime,它将是myTime属性元数据链接到温度。如果没有传递Fiware-TimeIndex-Attribute头,则将选择元数据属性TimeInstant的最新值。假设在上面的负载中删除元数据属性TimeInstant,那么将选择属性TimeInstant。如果也删除TimeInstant属性,则将选择dateModified值。如果没有接收到该属性,则使用当前时间。

最新更新