You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:22:58