关于配置设备的 Orion CB 输出
Orion CB output regarding provisioned device
我注意到在查询 Orion CB 时,当它使用配置的设备并让 IoT 代理接收 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 Agent 设置了主题来理解它们)
/123456789/sensor_data/attrs/act 12
/123456789/sensor_data/attrs/dst 322
123456789是我这里设置的API键
当 IoT 代理使用 NGSIv1 将数据推送到 Context Broker 时,这种情况通常会发生,因为 NGSIv1 总是 "string-fy" 任何属性值。最近,物联网代理中引入了使用 NGSIv2(没有此限制)的功能。
为了解决您的问题,您必须:
使用最新的 IOTA-UL 版本(master 分支的当前版本可以使用)
按照说明在配置中启用 NGSIv2 in documentation。这是在 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) 提供了正确的类型:
- Type "Number" for integer or float numbers
- Type "Boolean" for boolean
- Type "None" for null
因此,在您的情况下,Distance
的配置没问题,但对于 ActiveTime
,您还应该使用 Number
作为 type
。
我注意到在查询 Orion CB 时,当它使用配置的设备并让 IoT 代理接收 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 Agent 设置了主题来理解它们)
/123456789/sensor_data/attrs/act 12 /123456789/sensor_data/attrs/dst 322
123456789是我这里设置的API键
当 IoT 代理使用 NGSIv1 将数据推送到 Context Broker 时,这种情况通常会发生,因为 NGSIv1 总是 "string-fy" 任何属性值。最近,物联网代理中引入了使用 NGSIv2(没有此限制)的功能。
为了解决您的问题,您必须:
使用最新的 IOTA-UL 版本(master 分支的当前版本可以使用)
按照说明在配置中启用 NGSIv2 in documentation。这是在
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) 提供了正确的类型:
- Type "Number" for integer or float numbers
- Type "Boolean" for boolean
- Type "None" for null
因此,在您的情况下,
Distance
的配置没问题,但对于ActiveTime
,您还应该使用Number
作为type
。