模仿IoT代理命令的NGSI v2终结点是什么?

时间:2018-06-27 10:21:44

标签: iot fiware

当测试命令Southbound时,我当前正在使用NGSI v1端点,如下所示:

curl -X POST \
  'http://{{iot-agent}}/v1/updateContext' \
  -H 'Content-Type: application/json' \
  -H 'fiware-service: openiot' \
  -H 'fiware-servicepath: /' \
  -d '{
    "contextElements": [
        {
            "type": "Bell",
            "isPattern": "false",
            "id": "urn:ngsi-ld:Bell:001",
            "attributes": [
                {
                    "name": "ring",
                    "type": "command",
                    "value": ""
                }
            ]
        }
    ],
    "updateAction": "UPDATE"
}'

如您所见,这是NGSI v1请求。根据Slideshare(幻灯片16)上的this presentation,对NGS​​I v1的使用被禁止-我想用NGSI v2请求代替它。我相信所有IoT代理现在都支持NGSI v2,但是我无法在文档中找到替换NGSI v2请求的详细信息。

所以问题是,使用NGSI v2模仿Orion的命令的等效cUrl命令是什么?

2 个答案:

答案 0 :(得分:1)

this document中,您可以看到有关如何使用NGSIv2 API发送命令的很好的参考:

  

如果看一下先前的设备示例,您会发现定义了“ ping”命令。 ContextBroker中NGSI实体上对此属性“ Ping”的任何更新都将向您的设备发送命令。例如,要发送值为“ Ping request”的“ Ping”命令,您可以在ContextBroker API中使用以下操作:

 PUT /v2/entities/[ENTITY_ID]/attrs/ping

 {
   "value": "Ping request",
   "type": "command"
 }
     

ContextBroker API非常灵活,并允许以多种方式更新属性。有关详细信息,请查看NGSIv2 specification

     

重要说明:请勿在NGSI API中使用具有创建语义的操作。否则,实体/属性将在ContextBroker本地创建,并且该命令将不会执行到设备(如果要使其再次运行,则需要删除创建的实体/属性)。因此,不得使用以下操作

     
      
  • POST /v2/entities
  •   
  • PUT /v2/entities
  •   
  • POST /v2/op/entitesactionType appendappendStrictreplace
  •   
  • POST /v1/updateContextactionType APPENDAPPEND_STRICTREPLACE
  •   

编辑:以上所有内容均指最终客户用来发送命令的 Orion端点。 @ jason-fox已澄清问题是指向从Orion接收命令请求的 IOTA端点{{iot-agent}}应该很明显,但是我很遗憾错过了这一部分:)

从Orion到IOTA的命令通信基于注册转发机制。当前,Orion始终使用NGSIv1转发更新(即使在客户端使用NGSIv2更新的情况下)。将来,我们设想使用NGSIv2,但是要实现这一点,首先,我们需要:

  • 要完成基于NGSIv2的上下文源转发规范。目前正在讨论in this PR。欢迎对该PR提出反馈意见!
  • 在Orion中基于上下文源转发规范实现转发
  • 要在IOTA中实现符合上下文源转发规范的NGSIv2端点。

以上内容完成后,唯一的机制是基于NGSIv1的当前机制。但是,请注意,Orion-IOTA交互是平台组件的内部组件,最终客户可以将其所有交互(基于NGSIv2)与平台(尤其是基于Orion端点)进行交互,因此,这不是一个大问题。

答案 1 :(得分:0)

基于NGSIv2的上下文源转发规范现已完成,旧的/v1端点已被弃用。根据有关 NGSIv2支持 issue的讨论,正确的发送请求如下:

curl -iX POST \
  http://localhost:4041/v2/op/update \
  -H 'Content-Type: application/json' \
  -H 'fiware-service: openiot' \
  -H 'fiware-servicepath: /' \
  -d '{
    "actionType": "update",
    "entities": [
        {
            "type": "Bell",
            "id": "urn:ngsi-ld:Bell:001",
            "ring" : {
                "type": "command",
                "value": ""
            }
        }
    ]
}'