Orion CB 在 'id' 字段中保存具有 'entity_name' 值的设备
Orion CB saves device with 'entity_name' value in 'id' field
我正在尝试开发具有惰性属性的 IoTA。并且发现Context Broker在'id'中保存了device 'entity_name'字段,所以当CB请求惰性属性时,IoTA找不到具有该id的设备。
为了创建设备实体,我向 IoTA 发出此请求:
'devices': [{
'device_id': 'idSensor14',
'entity_name': 'nameSensor14',
'entity_type': 'anysensor',
'attributes': [
{
'name': 't',
'type': 'celsius'
}
],
'lazy': [
{
'name': 'b',
'type': 'mybits'
}
]
}]
然后,如果我们在 CB ('v2/entities/') 中请求实体列表,我们会发现:
{ "id":"nameSensor15",
"type":"anysensor",
"t":{"type":"celsius","value":"","metadata":{}}}
看来CB保存的设备id有误。这是对惰性属性的请求:
data = {
"entities": [{
"isPattern": "false",
"id": myid,
"type": entity_type
},
"attributes": ["b"]
]}
这是 IoA 日志中的错误:
op=IoTAgentNGSI.ContextServer | srv=我的家 | subsrv=/传感器 | msg=查询错误 [DEVICE_NOT_FOUND] 处理请求:未找到具有 id:nameSensor15
的设备
如果从注册请求中删除entity_name,则CB 将使用设备id = 'anysensors:idSensor14'。我的Orion版本是1.7.0,iotagent-node-lib版本是2.5.1。
IOTAgent 应使用 entity_name
作为 id
在 CB 中创建实体。在您的情况下,这意味着 nameSensor14
.
也许您看到的 nameSensor15
对应于其他一些配置操作。
我建议做一个干净的测试。我的意思是:
- 停止所有进程(IOTA 和 CB)。
- 清理所有数据库(在您的 Mongo shell 中查找以
orion
和 iot
开头的数据库)
- 开始CB
- 启动 IOTAgent
- 运行 创建设备请求
- 在 运行 任何其他请求之前,检查 CB 的实体 (
GET /v2/entities
) 和注册 (GET v1/registry/contextEntities/<entity_id>
) 以查看实体是使用正确的 ID 创建的,以及用lazy属性对应的注册。
原因是在 fiware 服务名称中使用大写字母进行设备注册 headers 和 iota 配置,所以我应该使用 myhome
而不是 myHome
,例如。内存和 mongo 设备注册表类型相同。
我正在尝试开发具有惰性属性的 IoTA。并且发现Context Broker在'id'中保存了device 'entity_name'字段,所以当CB请求惰性属性时,IoTA找不到具有该id的设备。
为了创建设备实体,我向 IoTA 发出此请求:
'devices': [{
'device_id': 'idSensor14',
'entity_name': 'nameSensor14',
'entity_type': 'anysensor',
'attributes': [
{
'name': 't',
'type': 'celsius'
}
],
'lazy': [
{
'name': 'b',
'type': 'mybits'
}
]
}]
然后,如果我们在 CB ('v2/entities/') 中请求实体列表,我们会发现:
{ "id":"nameSensor15",
"type":"anysensor",
"t":{"type":"celsius","value":"","metadata":{}}}
看来CB保存的设备id有误。这是对惰性属性的请求:
data = {
"entities": [{
"isPattern": "false",
"id": myid,
"type": entity_type
},
"attributes": ["b"]
]}
这是 IoA 日志中的错误:
op=IoTAgentNGSI.ContextServer | srv=我的家 | subsrv=/传感器 | msg=查询错误 [DEVICE_NOT_FOUND] 处理请求:未找到具有 id:nameSensor15
的设备如果从注册请求中删除entity_name,则CB 将使用设备id = 'anysensors:idSensor14'。我的Orion版本是1.7.0,iotagent-node-lib版本是2.5.1。
IOTAgent 应使用 entity_name
作为 id
在 CB 中创建实体。在您的情况下,这意味着 nameSensor14
.
也许您看到的 nameSensor15
对应于其他一些配置操作。
我建议做一个干净的测试。我的意思是:
- 停止所有进程(IOTA 和 CB)。
- 清理所有数据库(在您的 Mongo shell 中查找以
orion
和iot
开头的数据库) - 开始CB
- 启动 IOTAgent
- 运行 创建设备请求
- 在 运行 任何其他请求之前,检查 CB 的实体 (
GET /v2/entities
) 和注册 (GET v1/registry/contextEntities/<entity_id>
) 以查看实体是使用正确的 ID 创建的,以及用lazy属性对应的注册。
原因是在 fiware 服务名称中使用大写字母进行设备注册 headers 和 iota 配置,所以我应该使用 myhome
而不是 myHome
,例如。内存和 mongo 设备注册表类型相同。