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 对应于其他一些配置操作。

我建议做一个干净的测试。我的意思是:

  1. 停止所有进程(IOTA 和 CB)。
  2. 清理所有数据库(在您的 Mongo shell 中查找以 orioniot 开头的数据库)
  3. 开始CB
  4. 启动 IOTAgent
  5. 运行 创建设备请求
  6. 在 运行 任何其他请求之前,检查 CB 的实体 (GET /v2/entities) 和注册 (GET v1/registry/contextEntities/<entity_id>) 以查看实体是使用正确的 ID 创建的,以及用lazy属性对应的注册。

原因是在 fiware 服务名称中使用大写字母进行设备注册 headers 和 iota 配置,所以我应该使用 myhome 而不是 myHome,例如。内存和 mongo 设备注册表类型相同。