ThingsBoard温度脚本告警逻辑问题:需8次临界温度触发告警
ThingsBoard 8次临界温度触发告警脚本修复
原脚本存在的问题
- 定义了
newMsg但未在返回结果中传递,调试时无法查看计数器counter的变化 - 未标记消息类型,无法在调试模式中区分满足条件的IN和不满足的OUT状态
- 告警消息为空,缺少关键信息不利于后续排查
修改后的脚本
// 初始化计数器,确保metadata中存在该字段 metadata.criticalTemperatureCount = metadata.criticalTemperatureCount || 0; // 判断是否满足临界温度条件 var isCritical = msg.deviceAge > 5 && msg.temperature > -10; if (isCritical) { metadata.criticalTemperatureCount++; // 标记当前消息为IN类型(满足临界条件) metadata.msgType = "IN"; } else { // 不满足条件时标记为OUT类型 metadata.msgType = "OUT"; } // 累计满8次临界条件时触发告警 if (metadata.criticalTemperatureCount >= 8) { metadata.alarm = { severity: 'CRITICAL', message: `设备连续上报8次临界温度,当前温度: ${msg.temperature},设备使用时长: ${msg.deviceAge}` }; // 触发告警后重置计数器,重新开始统计 metadata.criticalTemperatureCount = 0; } // 构造返回消息,包含计数器和消息类型方便调试 var newMsg = { temperature: msg.temperature, counter: metadata.criticalTemperatureCount, msgType: metadata.msgType }; return { msg: newMsg, metadata: metadata };
调试验证说明
- 当设备连续上报8次满足
deviceAge>5且temperature>-10的消息时,前8次的msgType会显示为IN,计数器从1递增至8 - 第8次消息处理时自动创建CRITICAL级告警,计数器重置为0
- 第9次及后续消息:若不满足条件则
msgType显示为OUT;若满足条件则重新开始计数,msgType显示为IN,直到再次累计8次触发告警
内容的提问来源于stack exchange,提问作者Conjogo
相关产品推荐
相关产品推荐

