我正在开发一个系统,我使用Orion CB作为主要事件总线,也使用iotagent节点lib,以便与第三方API Build 接口 .
现在发生的是我在iotagent上注册一个只有惰性属性的新设备,其中一个应该是一个json字符串 .
覆盖查询处理程序及其子函数我尝试将这个json字符串字符串化并将其保留为json格式,这就是我得到的:
1)字符串化json:
当我查询Orion来检索实体时,它会回复该实体不存在,状态代码为404.查看iotagent调试日志,我看到它的响应正是我所期望的(所有属性格式正确),并以"statusCode"结束:{"code":200,"reasonPhrase":"OK"}所以似乎iotagent正在回复Orion,状态代码为200(成功!) .
2)保持json原样:
当我查询Orion以检索它回复状态代码为200的实体时,所有属性都可以,但是带有json的属性是空的 . 再次,看看iotagent调试日志,我看到响应是我想要查询到Orion的响应,它以"statusCode"结尾:{"code":200,"reasonPhrase":"OK"} .
这里发生了什么?第一种情况可能是什么问题?似乎由于某种原因,Orion不喜欢iotagent的反应,它说实体不存在 . 而在第二种情况下,我认为问题可能出在不允许的数据结构中(json作为属性值) .
我错过了什么吗?如果有人可以帮助我解决这个问题,我会很高兴,如果您需要更多信息,请告诉我 .
编辑:
这就是我配置设备的方式:
{
"devices": [
{
"device_id": "taxi_list",
"entity_name": "taxi_list",
"entity_type": "taxilist",
"lazy": [
{
"name": "taxiPosition",
"type": "StructuredValue"
},
{
"name": "error",
"type": "string"
},
{
"name": "status",
"type": "string"
},
{
"name": "corsaRuntime",
"type": "string"
}
]
}
]
}
我需要拥有json的属性是“taxiPosition”,因此它的类型是“StructuredValue” . 创建响应我只是在'device'检索的有效负载上使用JSON.parse(),并将此值分配给属性,如:
responses.push({
name: 'taxiPositions',
type: 'StructuredValue',
value: [{...}, {...}]
});
其中值是具有简单的一级键值对的对象数组,其格式如下:
{ "idTaxi": "100", "idStato": "1", "lat": "90.843227100000000", "lng": "64.228254600000000", "nome": "Name", "cognome": "Surname", "licenza": "24XX", "cellulare": "+39320662332XX", "email": "xxxxxx@xxxx.eu", "targa": "XX000XX", "modelloAuto": "Focus SW", "marcaAuto": "Ford", "annoImmatricolazione": "2020", "passeggeri": "4", "dataCreazione": "2014-05-05", "rank": "4.2", "n_corse": "6", "os": "A", "dataOraInizioTurno": "05-01-2018 07:51", "dataOraFineTurno": "05-01-2018 11:50", "radio": "1", "pos": "0", "nome_radio": null, "iban": "" }
当我尝试将值作为字符串传递时,代码是相同的,但属性的类型是“string”,并且通过在先前解析的json上使用JSON.stringify()来获取值 .
要从Orion查询实体,我只需调用/ v2 / entities / taxi_list
2 回答
我测试了一些格式,最后两个是最好的选择:这是一个验证json:
其他格式:
然后,您可以使用:
此示例中的实体“id”:“taxi_list”,更有趣 . 因为Orion创建结构化格式,Orion将验证 . 在tax_list3的有效负载中,值中的字符串将表示值,而不进行Orion验证 .
阿拉戈纳](https://stackoverflow.com/users/8362361/f-aragona)
您使用的Fiware Orion版本是什么?对于IotAgent,您使用的是最新的吗?
另一方面,强烈建议使用docker-compose来部署你正在使用的所有服务,除非是Mosquitto
对于Mosquitto和IotAgent,您必须从源代码安装它 .
克隆并安装后,必须根据IP容器设置
config.js
. 附上我给你一些脚本,以创建一个实体和一个设备 . 为了将device
分配给entity
,一步一步地遵循是很重要的Scripts
1.Create Service
注意:
必须在
config.js
IotAgent JSON文件中定义"apikey": "1234"
字段 ."cbroker":"172.18.0.3"
字段是ORION IP容器2 Create Device
3.Send meassures to OCB (使用IotAgent-JSON导致有效负载)
4.Query to Orion to see results
如果你解决了,请告诉我 .
fernando.mendez@atos.net