Thingsboard:在一个保存时间序列节点中保存多个时间序列读数 Post

Thingsboard : Save multiple timeseries readings in one Save Timeseries Node Post

我正在尝试将我作为数组获得的一系列带时间戳的时间序列读数保存在保存时间序列节点的一个 POST 中。 我在转换脚本节点函数的 msg 参数中获取值,将其转换为预期格式,并将它们保存在保存时间序列节点中。 之后,我打算将它们绘制成折线图。

我试过用两种不同的方式格式化输出 JSON 但它总是只保存数组的最后一个值。 有什么办法可以节省大量资金吗?

这里是保存时间序列节点的 2 个不同的输出:

[{
    "ts": 1636160453000,
    "reading": {
        "value": 536.5833333333334
    }
}, {
    "ts": 1636158641000,
    "reading": {
        "value": 538.4666666666667
    }
}, {
    "ts": 1636156829000,
    "reading": {
        "value": 547.9333333333333
    }
}, {
    "ts": 1636155019000,
    "reading": {
        "value": 523.4666666666667
    }
}, {
    "ts": 1636153207000,
    "reading": {
        "value": 549.8666666666667
    }
}, {
    "ts": 1636151455000,
    "reading": {
        "value": 516.0344827586207
    }
}, {
    "ts": 1636149643000,
    "reading": {
        "value": 500.26666666666665
    }
}, {
    "ts": 1636147831000,
    "reading": {
        "value": 496.56666666666666
    }
}, {
    "ts": 1636146020000,
    "reading": {
        "value": 521.7
    }
}, {
    "ts": 1636144210000,
    "reading": {
        "value": 543
    }
}]

***************************

[{
    "ts": 1636160453000,
    "reading": 588.5714285714286
}, {
    "ts": 1636158641000,
    "reading": 538.4666666666667
}, {
    "ts": 1636156829000,
    "reading": 547.9333333333333
}, {
    "ts": 1636155019000,
    "reading": 523.4666666666667
}, {
    "ts": 1636153207000,
    "reading": 549.8666666666667
}, {
    "ts": 1636151455000,
    "reading": 516.0344827586207
}, {
    "ts": 1636149643000,
    "reading": 500.26666666666665
}, {
    "ts": 1636147831000,
    "reading": 496.56666666666666
}, {
    "ts": 1636146020000,
    "reading": 521.7
}, {
    "ts": 1636144210000,
    "reading": 543
}]

谢谢!!

在保存时间序列节点之前放置一个转换 - 脚本节点。这些节点可以输出一个值列表作为单独的消息(假设 TB3.3.1)。

对于你的情况,我建议这样

// Don't include these, I'm just including them to get this snippet working
var msg = [{"ts": 12345, "readings": { "value": 500}}, {"ts": 54321, "readings": { "value": 600}}]
var metadata = {"deviceName": "Example", "deviceType": "default", "ts": 100000}

// Include below this line
var result = []
msg.forEach(function (reading) {
  var newMsg = reading.readings;
  var newMeta = metadata
  
  newMeta.ts = reading.ts
  result.push({
    "msg": newMsg,
    "metadata": newMeta,
    "msgType": "POST_TELEMETRY_REQUEST"
  })
})

console.log(result) // Delete me
//return result // <<< Uncomment this line

这会在每次读数时向您发送一条消息保存时间序列节点,并添加正确的时间戳。

我在我的解决方案中使用了类似的代码,尽管我在编写上述代码之前没有测试这个确切的示例,因此您可能需要稍微修改它。