将特定实体发送到 FIWARE QuantumLeap
Sending a specific entity to FIWARE QuantumLeap
在我的应用程序中,我有一个非常具体的实体格式,其中一个属性值是一个 json 值数组。
{
"id": "Proximity3",
"type": "SensorAgent",
"measurementType": {
"type": "string",
"value": "boolean",
"metadata": {}
},
"modifiedTime": {
"type": "string",
"value": "2020-06-08T12:30:11.091506Z",
"metadata": {}
},
"readings": {
"type": "array",
"value": [
{
"type": "SensorReading",
"value": {
"reading": {
"type": "boolean",
"value": false
}
}
}
],
"metadata": {}
},
"sanID": {
"type": "string",
"value": "SAN_3",
"metadata": {}
},
"sensorID": {
"type": "string",
"value": "Proximity3",
"metadata": {}
},
"sensorManufacturer": {
"type": "string",
"value": "Unknown",
"metadata": {}
},
"sensorType": {
"type": "string",
"value": "ON_OFF_SENSOR",
"metadata": {}
}
}
]
如您所见,readings 属性中存储了一组值(在此示例中只有一个。
每当我尝试将 QuantumLeap 订阅到 Orion Context Broker 时,订阅都会成功,但 QuantumLeap 没有收到任何数据(即使查询 http://localhost:8668/v2/attrs 也会得到 'No records were found for such query.')。尝试在订阅中使用 attrFormat,但未成功。
同时,这 https://quantumleap.readthedocs.io/en/latest/user/ 表明 QuantumLeap 需要一个特定的实体。
我的问题是,有没有什么办法可以让这个实体进入 QuantumLeap,或者我需要更改实体?
从 QuantumLeap Data Insertion 文档中可以清楚地看出,QuantumLeap 希望它收到的通知包含作为原生 JSON 类型传递的属性(如 Number
)
"temperature": {
"value": 24.2,
"type": "Number",
"metadata": {}
}
如果你的上下文代理以不同的方式保存属性,直接通知总是会失败,但是没有什么能阻止你代理通知并以 QuantumLeap 喜欢的方式重新格式化它。
创建一个简单的订阅监听器来读取当前的订阅数据,
重新格式化您需要的位并转发给 Quantum Leap 和 return 接收到的 HTTP success/failure 返回到上下文代理。
const request = require('request');
function receiver(req, res) {
let data = [];
// Manipulate the data
req.body.data.readings.value.forEach((reading) => {
data.push[reading.value]
});
// Copy the rest of data from the original subscription
// Then Forward to QuantumLeap - replace with real values
const options = {
url: '/subscription/to/quantum/leap',
method: 'POST',
json: data,
headers:
};
// Respond back to context broker with response from QL
request(options, (error, response, body) => {
return error ? res.send(error) : res.status(204).send();
});
}
在我的应用程序中,我有一个非常具体的实体格式,其中一个属性值是一个 json 值数组。
{
"id": "Proximity3",
"type": "SensorAgent",
"measurementType": {
"type": "string",
"value": "boolean",
"metadata": {}
},
"modifiedTime": {
"type": "string",
"value": "2020-06-08T12:30:11.091506Z",
"metadata": {}
},
"readings": {
"type": "array",
"value": [
{
"type": "SensorReading",
"value": {
"reading": {
"type": "boolean",
"value": false
}
}
}
],
"metadata": {}
},
"sanID": {
"type": "string",
"value": "SAN_3",
"metadata": {}
},
"sensorID": {
"type": "string",
"value": "Proximity3",
"metadata": {}
},
"sensorManufacturer": {
"type": "string",
"value": "Unknown",
"metadata": {}
},
"sensorType": {
"type": "string",
"value": "ON_OFF_SENSOR",
"metadata": {}
}
}
]
如您所见,readings 属性中存储了一组值(在此示例中只有一个。
每当我尝试将 QuantumLeap 订阅到 Orion Context Broker 时,订阅都会成功,但 QuantumLeap 没有收到任何数据(即使查询 http://localhost:8668/v2/attrs 也会得到 'No records were found for such query.')。尝试在订阅中使用 attrFormat,但未成功。
同时,这 https://quantumleap.readthedocs.io/en/latest/user/ 表明 QuantumLeap 需要一个特定的实体。 我的问题是,有没有什么办法可以让这个实体进入 QuantumLeap,或者我需要更改实体?
从 QuantumLeap Data Insertion 文档中可以清楚地看出,QuantumLeap 希望它收到的通知包含作为原生 JSON 类型传递的属性(如 Number
)
"temperature": {
"value": 24.2,
"type": "Number",
"metadata": {}
}
如果你的上下文代理以不同的方式保存属性,直接通知总是会失败,但是没有什么能阻止你代理通知并以 QuantumLeap 喜欢的方式重新格式化它。
创建一个简单的订阅监听器来读取当前的订阅数据, 重新格式化您需要的位并转发给 Quantum Leap 和 return 接收到的 HTTP success/failure 返回到上下文代理。
const request = require('request');
function receiver(req, res) {
let data = [];
// Manipulate the data
req.body.data.readings.value.forEach((reading) => {
data.push[reading.value]
});
// Copy the rest of data from the original subscription
// Then Forward to QuantumLeap - replace with real values
const options = {
url: '/subscription/to/quantum/leap',
method: 'POST',
json: data,
headers:
};
// Respond back to context broker with response from QL
request(options, (error, response, body) => {
return error ? res.send(error) : res.status(204).send();
});
}