带参数的Ultralight 2.0命令(轮询模式)

时间:2017-06-26 11:28:05

标签: fiware fiware-orion

我发现一些使用命令的麻烦。根据协议的sintaxis,可以使用对Orion Context Broker的updateContext操作执行命令,现在它正在完美地工作。

疑问是,我如何给命令一些参数,如协议中所规定的那样?

<device name>@<command name>|<param name>=<value>|....

如果我发送以下REST请求,它会给我一个400 Bad请求,抱怨奇怪的字符:

curl -X PUT \
  'http://MYIP:1026/v2/entities/1111/attrs/blink?type=Thing' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'fiware-service: howtoservice' \
  -H 'fiware-servicepath: /howto' \
  -d '{
    "type": "command",
    "value": "blink=true|another_param=false"
}'

如果params不在“value”键中,我应该在哪里发出它?

如果我使用以下请求,它会按预期运行:

curl -X PUT \
  'http://MYIP:1026/v2/entities/1111/attrs/blink?type=Thing' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'fiware-service: howtoservice' \
  -H 'fiware-servicepath: /howto' \
  -d '{
    "type": "command",
    "value": "true"
}'

提前致谢

1 个答案:

答案 0 :(得分:1)

关于这个问题,有几件事情。它们都与错误的文档有关,我很害怕。

首先,文档应该说从代理向UL设备发送命令的一般方法是:

<device name>@<command name>|<value>
然后

<value>可能与您的设备需求一样复杂。例如,它可以像发送单个值一样简单:

dev1@turn|left

即。我们告诉我们的UL设备左转阀门。

或者它可以是像这样的组合值(只是一个例子):

dev1@turn|direction:left,lapse:3

即。我们告诉我们的UL设备在3秒钟后经过左转。在这种情况下,我们发送direction:left,lapse:3字符串,因为我们的UL设备知道如何解码它。您可以通过许多其他替代方案,取决于您的UL设备能够理解的内容;只是一些例子:

dev1@turn|direction:left|lapse:3 --> value is direction:left|lapse:3
dev1@turn|direction|left|lapse|3 --> value is direction|left|lapse|3
dev1@turn|direction left lapse 3 --> value is direction left lapse 3

考虑到这一点,在文档示例中我们必须假设发送的<value>是:

<param1 name>=<value>|<param1 name>=<value>|...

其次,以上<value>的文档示例无法使用:)在所有可能的组合中,我们决定记录Orion CB不接受的一个(我们对此表示歉意) )。为什么?因为=是猎户座CB中的forbidden字符。

由于命令的值是通过Orion CB“更新上下文”操作指定的,即必须更新命令的属性,以便命令被转发到代理(因为代理是属性的上下文提供者) ,这个值必须符合Orion CB规范。

因此,使用上述任何一种可能性更新Orion CB,即:

direction:left|lapse:3
direction|left|lapse|3
direction left lapse 3

完全有效。 direction=left|lapse=3或包含=的任何其他字符串不是这种情况。

编辑IOTAgent repository regarding command syntax的文档已修复。