我注意到,在查询Orion CB时,当它与已配置的设备一起使用并让IoT Agent接收HTTP和MQTT消息时,它将始终输出所有用引号引起来的值:
{
"id": "sensor_data",
"type": "Sensor",
"ActiveTime": {
"type": "Seconds",
"value": "17703",
"metadata": {
"TimeInstant": {
"type": "ISO8601",
"value": "2018-07-04T13:32:27.357Z"
}
}
},
"Distance": {
"type": "Number",
"value": "312",
"metadata": {
"TimeInstant": {
"type": "ISO8601",
"value": "2018-07-04T13:32:27.413Z"
}
}
}
}
但是,如果仅使用Orion CB中的实体,则可以接收实际值(如手册中的示例):
{
"id": "Room1",
"pressure": {
"metadata": {},
"type": "Integer",
"value": 720
},
"temperature": {
"metadata": {},
"type": "Float",
"value": 23
},
"type": "Room"
}
有时,我需要从传感器接收实际值以便对其进行格式化并在其他应用中使用,但是它们用引号引起来,这有点困难。 是否可能以某种方式进行更改?(也许在设备配置中),或者对于设备确实应该采用这种方式吗? 预先感谢!
编辑1 这是我配置设备的方式:
{
"devices": [
{
"device_id": "sensor_data",
"entity_name": "sensor_data",
"entity_type": "Sensor",
"transport": "MQTT",
"timezone": "Europe/Helsinki",
"attributes": [
{ "object_id": "act", "name": "ActiveTime", "type": "Seconds"},
{ "object_id": "dst", "name": "Distance", "type": "Number"}
]
}
]
}
这就是从我的传感器发送MQTT消息的方式(我已经设置了IoT代理理解它们的主题)
/ 123456789 / sensor_data / attrs / act 12 / 123456789 / sensor_data / attrs / dst 322
123456789是我在此处设置的API密钥。
答案 0 :(得分:1)
考虑到NGSIv1始终“字符串化”任何属性值,当IoT代理使用NGSIv1将数据推送到Context Broker时,这种情况通常会发生。最近,IoT代理中引入了使用NGSIv2(没有此限制)的功能。
为了解决您的问题,您必须:
使用最新的IOTA-UL版本(master分支中的当前版本将可用)
启用in documentation中所述的配置中的NGSIv2。这是在config.js
文件中完成的:
config.iota = {
...
contextBroker: {
...
ngsiVersion: 'v2'
}
...
}
或在IOTA-UL流程中使用环境变量IOTA_CB_NGSI_VERSION=v2
。
按照in documentation中的说明启用自动播送。这是在config.js
文件中完成的:
config.iota = {
...
autocast: true,
...
}
或在IOTA-UL流程中使用环境变量IOTA_AUTOCAST=true
。
在供应时为每个属性设置正确的类型。 documentation here)提供了正确的类型:
- 键入“数字”以表示整数或浮点数
- 为布尔类型输入“布尔”
- 为空输入“ None”
因此,在您的情况下,对Distance
的配置是可以的,但对于ActiveTime
,您还应该将Number
用作type
。