我使用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"
}
但是,当设置'在属性中 - orion发送正确的响应。我在IoTA中编写了queryContextHandler和updateContextHandler,但是没有调用它们。 Orion是一个docker镜像,而node-lib来自npm。
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-next(git version:bd9f08cf86a631efe6dc1b078acaccc64648860aae)
和iotagent-node-lib版本为2.5.1
答案 0 :(得分:1)
Orion在尝试将请求转发给Context Provider时返回"error forwarding query"
(在您的情况下,IOTA扮演Context Provider的角色)但未能这样做。这种情况的典型原因是连接问题,例如上下文提供程序已关闭,网络问题等。
查看您的帖子,您似乎正在使用以下Context Provider端点:
"providingApplication": "http://myiotagent:4042"
该网址似乎无效,可以解释问题。