fix:太阳能网控,离线报警优化配置。

This commit is contained in:
tianyongbao
2026-04-26 07:24:50 +08:00
parent 51aae2b2b9
commit d34e47dbf7
3 changed files with 27 additions and 1 deletions

View File

@@ -245,6 +245,8 @@ aliyun:
call-success-suppress-hours: 2
# 设备离线告警延迟触发时间(分钟),设备离线超过此时间后才发送告警
offline-warn-delay-minutes: 6
# 太阳能网控离线告警延迟触发时间分钟工作1分钟休眠同分钟为正常行为需要更长延迟
solar-offline-warn-delay-minutes: 30
# 是否启用报警电话通知(全局开关,关闭后所有类型的报警都不会触发电话通知)
call-notice-enabled: true
# AMQP 服务端订阅配置(使用数据同步的 AppKey + AppSecret

View File

@@ -89,6 +89,13 @@ public class AliyunIotProperties {
*/
private int offlineWarnDelayMinutes = 6;
/**
* 太阳能网控离线告警延迟触发时间(分钟)
* 太阳能网控工作1分钟、休眠10分钟属于正常行为需要更长的延迟才能判定为真正离线
* 默认 30 分钟
*/
private int solarOfflineWarnDelayMinutes = 30;
/**
* 夜间溶解氧饱和度告警阈值(%),超过此值时开始计时
* 对应 C# DeviceSaturabilityWarnValue = 200

View File

@@ -888,8 +888,25 @@ public class DeviceDataHandler {
log.debug("[离线告警] 已有等待标记,跳过重复写入: {}", deviceName);
return;
}
String offlineTime = LocalDateTime.now().format(DATETIME_FORMATTER);
// 查询设备类型太阳能网控type=3使用独立的延迟时长
int offlineDelayMinutes = aliyunIotProperties.getOfflineWarnDelayMinutes();
try {
Device deviceForType = deviceMapper.selectOne(
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<Device>()
.eq(Device::getSerialNum, deviceName)
.select(Device::getDeviceType)
.last("LIMIT 1")
);
if (deviceForType != null && Integer.valueOf(3).equals(deviceForType.getDeviceType())) {
offlineDelayMinutes = aliyunIotProperties.getSolarOfflineWarnDelayMinutes();
log.debug("[离线告警] 太阳能网控设备,使用延迟 {} 分钟: {}", offlineDelayMinutes, deviceName);
}
} catch (Exception e) {
log.warn("[离线告警] 查询设备类型失败,使用默认延迟: {}", e.getMessage());
}
String offlineTime = LocalDateTime.now().format(DATETIME_FORMATTER);
int ttlMinutes = offlineDelayMinutes * OFFLINE_WAIT_TTL_MULTIPLIER;
RedisUtils.setCacheObject(redisKey, offlineTime, Duration.ofMinutes(ttlMinutes));
log.info("[离线告警] 设备离线,已记录等待标记,将在 {} 分钟后触发告警: {}", offlineDelayMinutes, deviceName);