带参数的 Ultralight 2.0 命令(轮询模式)
Ultralight 2.0 commands with parameters (polling mode)
我在使用命令时发现了一些问题。根据协议的 sintaxis,可以使用 updateContext 操作对 Orion Context Broker 执行命令,现在它运行良好。
问题是,如何按照协议中的规定为命令提供一些参数?
<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"
}'
如果不在 "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"
}'
提前致谢
关于这个问题有几件事。恐怕它们都与错误的文档有关。
首先,文档应该说从Agent向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 接受的组合(对此我们深表歉意)。为什么?因为=
在Orion CB中是一个forbidden字符。
由于赋予命令的值是通过 Orion CB "update context" 操作指定的,即必须更新建模命令的属性,以便将命令转发给代理(因为代理是属性),此类值必须符合 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 的文档已修复。
我在使用命令时发现了一些问题。根据协议的 sintaxis,可以使用 updateContext 操作对 Orion Context Broker 执行命令,现在它运行良好。
问题是,如何按照协议中的规定为命令提供一些参数?
<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"
}'
如果不在 "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"
}'
提前致谢
关于这个问题有几件事。恐怕它们都与错误的文档有关。
首先,文档应该说从Agent向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 接受的组合(对此我们深表歉意)。为什么?因为=
在Orion CB中是一个forbidden字符。
由于赋予命令的值是通过 Orion CB "update context" 操作指定的,即必须更新建模命令的属性,以便将命令转发给代理(因为代理是属性),此类值必须符合 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 的文档已修复。