如何在ThingsBoard规则链脚本中生成键名为变量的msg输出?
ThingsBoard规则链脚本:动态设置msg键名的实现方法
设备通过HTTP Post上传数据至ThingsBoard Cloud,当前依赖规则链处理数据(集成功能无法正常使用)。需要将传感器数据中的unit字段作为输出msg的键名,对应value字段作为值,例如输出格式为{"Humidity":"65.3", "AirPressure":"1008.4"},但现有脚本仅能生成固定键名的输出。
核心解决思路
JavaScript中使用点语法(如Newmsg.s1Sensor1Unit)无法将变量作为对象键名,必须改用方括号语法(Newmsg[变量名]),才能实现动态键名的赋值。
修改后的脚本(固定处理item1/item2)
var s1Data = s.S1; var Newmsg = {}; // 以item1的unit作为键,value作为对应值 Newmsg[s1Data.item1.unit] = s1Data.item1.value; // 处理item2同理 Newmsg[s1Data.item2.unit] = s1Data.item2.value; return {msg: Newmsg};
更灵活的循环写法(适配多个item)
如果后续有更多itemN格式的传感器数据,用循环可避免重复代码:
var s1Data = s.S1; var Newmsg = {}; // 遍历s1Data的所有属性,筛选出以"item"开头的字段 for (var key in s1Data) { if (key.startsWith("item")) { var item = s1Data[key]; Newmsg[item.unit] = item.value; } } return {msg: Newmsg};
预期输出
"msg": { "Humidity": "65.3", "AirPressure": "1008.4" }
内容的提问来源于stack exchange,提问作者Cameron Creevey
相关产品推荐
相关产品推荐

