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



我发现了一些与命令一起使用的麻烦。根据该协议的sintaxis,可以使用对Orion Context Broker的UpdateContext操作执行命令,该操作现在正常工作。

疑问是,如何按照协议中的指定给命令一些参数?

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

如果我发送了以下REST请求,它给了我400个不好的请求,抱怨奇怪的字符:

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"
}'

如果不在"值"键中,我应该在哪里发行该参数?

如果我使用以下请求,则该请求如预期的:

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"
}'

预先感谢

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

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

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

<value>可以随您的设备所需的需要很复杂。例如,它可以像发送一个值一样简单:

dev1@turn|left

即。我们告诉我们的UL设备向左开一个阀。

或它可以像这样的值(只是一个示例(:

dev1@turn|direction:left,lapse:3

即。我们告诉我们的UL设备经过3秒的时间后左转。在这种情况下,我们正在发送direction:left,lapse:3字符串,因为我们的UL设备知道如何解码。您可能会通过许多其他替代方案,IR取决于您的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接受的文档(我们对此表示歉意(。为什么?因为=是Orion CB中的禁止字符。

由于给出的命令的值是通过Orion CB" Update Context"操作指定的,即必须更新属性建模命令,以便将命令转发给代理(因为代理是属性的上下文提供商(,该值必须根据Orion CB规范。

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

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

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

edit :关于命令语法的iotagent存储库的文档已修复。

最新更新