在 Orion Context Broker 中找不到设备惰性属性
Can't find device lazy attributes in Orion Context Broker
我使用 node.js 库开发物联网代理。并通过 IoTA 注册设备:
'devices': [{
'device_id': 'ULSensor',
'entity_name': 'Sensor01',
'entity_type': 'BasicULSensor',
'attributes': [
{
'name': 't',
'type': 'celsius'
},
{
'name': 'l',
'type': 'meters'
}
],
'lazy': [
{
'name': 'p',
'type': 'pascal'
},
{
'name': 'c',
'type': 'curiosity'
}
]
}]
然后使用此负载向 http://orion:1026/v1/queryContext 发出请求:
data = {
"entities": [{
"isPattern": "false",
"id": 'Sensor01',
"type": entity_type
}]
, "attributes": [
'c'
]
}
得到这个:
"errorCode" : {
"code" : "404",
"reasonPhrase" : "No context element found",
"details" : "error forwarding query"
}
但是当在属性中设置 't' 时 - orion 会发送正确的响应。我在IoTA里面写了queryContextHandler和updateContextHandler,但是没有调用。 Orion 是一个 docker 镜像,以及来自 npm 的 node-lib。
IoTA 日志显示有两个注册请求:
"url": "http://orion:1026/NGSI9/registerContext",
"method": "POST",
"json": {
"contextRegistrations": [
{
"entities": [
{
"type": "BasicULSensor",
"isPattern": "false",
"id": "Sensor01"
}
],
"attributes": [
{
"name": "p",
"type": "pascal",
"isDomain": "false"
},
{
"name": "c",
"type": "curiosity",
"isDomain": "false"
}
],
"providingApplication": "http://myiotagent:4042"
}
],
"duration": "P1M"
}
"url": "http://orion:1026/v1/updateContext",
"method": "POST",
"json": {
"contextElements": [
{
"type": "BasicULSensor",
"isPattern": "false",
"id": "Sensor01",
"attributes": [
{
"name": "t",
"type": "celsius",
"value": " "
},
{
"name": "l",
"type": "meters",
"value": " "
}
]
}
],
"updateAction": "APPEND"
}
如何正确注册设备或向 orion 发送查询以获取惰性属性?
谢谢!
EDIT1
contextBroker --version
输出:
1.7.0-下一个(git 版本:bd9f08cf86a631efe6dc1b078ac4c54648860aae)
并且 iotagent-node-lib 版本为 2.5.1
Orion returns "error forwarding query"
当它尝试将请求转发给上下文提供者(在您的情况下,IOTA 扮演上下文提供者的角色)但未能这样做时。典型的原因是连接问题,例如Context Provider 宕机、网络问题等
查看您的 post,您似乎正在使用以下上下文提供程序端点:
"providingApplication": "http://myiotagent:4042"
URL 似乎无效,可以解释问题。
我使用 node.js 库开发物联网代理。并通过 IoTA 注册设备:
'devices': [{
'device_id': 'ULSensor',
'entity_name': 'Sensor01',
'entity_type': 'BasicULSensor',
'attributes': [
{
'name': 't',
'type': 'celsius'
},
{
'name': 'l',
'type': 'meters'
}
],
'lazy': [
{
'name': 'p',
'type': 'pascal'
},
{
'name': 'c',
'type': 'curiosity'
}
]
}]
然后使用此负载向 http://orion:1026/v1/queryContext 发出请求:
data = {
"entities": [{
"isPattern": "false",
"id": 'Sensor01',
"type": entity_type
}]
, "attributes": [
'c'
]
}
得到这个:
"errorCode" : {
"code" : "404",
"reasonPhrase" : "No context element found",
"details" : "error forwarding query"
}
但是当在属性中设置 't' 时 - orion 会发送正确的响应。我在IoTA里面写了queryContextHandler和updateContextHandler,但是没有调用。 Orion 是一个 docker 镜像,以及来自 npm 的 node-lib。
IoTA 日志显示有两个注册请求:
"url": "http://orion:1026/NGSI9/registerContext",
"method": "POST",
"json": {
"contextRegistrations": [
{
"entities": [
{
"type": "BasicULSensor",
"isPattern": "false",
"id": "Sensor01"
}
],
"attributes": [
{
"name": "p",
"type": "pascal",
"isDomain": "false"
},
{
"name": "c",
"type": "curiosity",
"isDomain": "false"
}
],
"providingApplication": "http://myiotagent:4042"
}
],
"duration": "P1M"
}
"url": "http://orion:1026/v1/updateContext",
"method": "POST",
"json": {
"contextElements": [
{
"type": "BasicULSensor",
"isPattern": "false",
"id": "Sensor01",
"attributes": [
{
"name": "t",
"type": "celsius",
"value": " "
},
{
"name": "l",
"type": "meters",
"value": " "
}
]
}
],
"updateAction": "APPEND"
}
如何正确注册设备或向 orion 发送查询以获取惰性属性?
谢谢!
EDIT1
contextBroker --version
输出:
1.7.0-下一个(git 版本:bd9f08cf86a631efe6dc1b078ac4c54648860aae)
并且 iotagent-node-lib 版本为 2.5.1
Orion returns "error forwarding query"
当它尝试将请求转发给上下文提供者(在您的情况下,IOTA 扮演上下文提供者的角色)但未能这样做时。典型的原因是连接问题,例如Context Provider 宕机、网络问题等
查看您的 post,您似乎正在使用以下上下文提供程序端点:
"providingApplication": "http://myiotagent:4042"
URL 似乎无效,可以解释问题。