Json - Node-RED 提取物
Json - Node-RED Extract
菜鸟寻求帮助...
我有一个 JSON 数据流,看起来像这样..
{
"header" : {
"content" : "telegram",
"gateway" : "EN-GW",
"timestamp" : "2016-08-08T13:45:47.032+0100"
},
"telegram" : {
"deviceId" : "01864892",
"friendlyId" : "Boardroom-CO2-Sensor",
"timestamp" : "2016-08-08T13:45:47.032+0100",
"direction" : "from",
"functions" : [ {
"key" : "humidity",
"value" : 39.00,
"unit" : "%"
}, {
"key" : "concentration",
"value" : 830.00,
"unit" : "ppm"
} ],
"telegramInfo" : {
"data" : "4E53820E",
"status" : "0",
"dbm" : -67,
"rorg" : "A5"
}
}
}
在 Node-RED 中,我有一个函数节点,看起来像这样...
return [msg.payload.telegram.functions];
其中returns这些
{ "key": "concentration", "value": 830, "unit": "ppm", "_msgid": "ff5b0f47.00a4f" }
{ "key": "humidity", "value": 39, "unit": "%", "_msgid": "ff5b0f47.00a4f" }
{ "key": "temperature", "value": 26.6, "unit": "°C", "_msgid": "ef2d6de7.10d29" }
从这些中,我想从每个中获得一个值,例如830 浓度。然后让它检查我在具有两个输出的节点中设置的阈值。比如大于1000输出1,小于1000输出2.
我正在尝试在 Node-RED 中实现什么??
对于可能出现的 NOOB 问题,我们深表歉意。我们将不胜感激。
问题可能是您没有 return 格式正确的消息对象。虽然您从函数 returning 得到的是一个 JSON 对象,但它不符合 Node-RED 约定。
如果您希望其他节点能够轻松处理,来自功能节点的任何 return 都应该有一个有效负载字段。
因此,如果您将 return 更改为如下所示:
return { payload: msg.payload.telegram.functions }
然后下游节点将知道在msg.payload中查找消息的有用内容。
至于比较消息中的键来设置值并输出不同的值,相对简单。在新的功能节点中,您可以这样做:
//check concentration exists
for (var i=0;i<msg.payload.length; i++) {
if (msg.payload[i].concentration) {
//more than 1000
if (msg.payload.conentration >= 1000) {
return {payload: 1};
//less than 1000
} else {
return {payload: 0};
}
}
}
菜鸟寻求帮助...
我有一个 JSON 数据流,看起来像这样..
{
"header" : {
"content" : "telegram",
"gateway" : "EN-GW",
"timestamp" : "2016-08-08T13:45:47.032+0100"
},
"telegram" : {
"deviceId" : "01864892",
"friendlyId" : "Boardroom-CO2-Sensor",
"timestamp" : "2016-08-08T13:45:47.032+0100",
"direction" : "from",
"functions" : [ {
"key" : "humidity",
"value" : 39.00,
"unit" : "%"
}, {
"key" : "concentration",
"value" : 830.00,
"unit" : "ppm"
} ],
"telegramInfo" : {
"data" : "4E53820E",
"status" : "0",
"dbm" : -67,
"rorg" : "A5"
}
}
}
在 Node-RED 中,我有一个函数节点,看起来像这样...
return [msg.payload.telegram.functions];
其中returns这些
{ "key": "concentration", "value": 830, "unit": "ppm", "_msgid": "ff5b0f47.00a4f" }
{ "key": "humidity", "value": 39, "unit": "%", "_msgid": "ff5b0f47.00a4f" }
{ "key": "temperature", "value": 26.6, "unit": "°C", "_msgid": "ef2d6de7.10d29" }
从这些中,我想从每个中获得一个值,例如830 浓度。然后让它检查我在具有两个输出的节点中设置的阈值。比如大于1000输出1,小于1000输出2.
我正在尝试在 Node-RED 中实现什么??
对于可能出现的 NOOB 问题,我们深表歉意。我们将不胜感激。
问题可能是您没有 return 格式正确的消息对象。虽然您从函数 returning 得到的是一个 JSON 对象,但它不符合 Node-RED 约定。
如果您希望其他节点能够轻松处理,来自功能节点的任何 return 都应该有一个有效负载字段。
因此,如果您将 return 更改为如下所示:
return { payload: msg.payload.telegram.functions }
然后下游节点将知道在msg.payload中查找消息的有用内容。
至于比较消息中的键来设置值并输出不同的值,相对简单。在新的功能节点中,您可以这样做:
//check concentration exists
for (var i=0;i<msg.payload.length; i++) {
if (msg.payload[i].concentration) {
//more than 1000
if (msg.payload.conentration >= 1000) {
return {payload: 1};
//less than 1000
} else {
return {payload: 0};
}
}
}