具有状态的Fiware执行器/传感器开/关模式

问题描述

我的配置包括orion,IoT Agent JSON和mongoDB。 我想构建一个Fiware Lamp致动器,并且还希望它处于开/关状态(作为传感器)。

此刻,我对主体使用了PATCH请求(形式为ORION): 首先使用命令:

{
  "on": {
      "type" : "command","value" : ""
  }
}

然后使用off命令:

{
  "off": {
      "type" : "command","value" : ""
  }
}

当我收到以上任何信息时,我会从虚拟设备中回复200 OK。

在我的配置中,以上内容使on和off标签都处于待处理状态:

{
    "id": "urn:ngsi-ld:Lamp:001","type": "Lamp","TimeInstant": "2020-11-04T22:42:37.00Z","category": [
        "actuator","sensor"
    ],"controlledProperty": "lamp","function": [
        "onOff","sensing"
    ],"off_info": " ","off_status": "PENDING","on_info": " ","on_status": "PENDING","refStore": "urn:ngsi-ld:Store:001","state": " ","supportedProtocol": [
        "JSON"
    ],"supportedUnits": "My Unit 2","on": "","off": ""
}

我想我想办法了,所以我有没有发送回IoT Agent json的响应以使两个标签之一停止挂起?我是否必须一路更新状态或信息?

PS我希望收到这样的答复:

{
    "id": "urn:ngsi-ld:Lamp:001","on_status": "OFF","off": ""
}

解决方法

命令流如下所示:

enter image description here

假设您的命令已到达指示灯且已打开,则需要将结果传递回IoT Agent。对于JSON IoT Agent,有效负载看起来像这样:

{"on" : "OK"}

其中键是命令的名称,值是状态。我的猜测是您的设备仅响应 200 OK 而没有有效负载,因此IoT代理不知道触发了哪个命令。

请注意,在分布式网络(例如MQTT或AMPQ)的情况下,响应将异步发布到另一个主题上,因此该命令可能会处于PENDING状态。