diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmProcessor.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmProcessor.java index 64e98ad677..96b49ac391 100644 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmProcessor.java +++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmProcessor.java @@ -41,6 +41,7 @@ import javax.script.Bindings; import javax.script.ScriptException; import java.io.IOException; import java.util.List; +import java.util.concurrent.ExecutionException; /** * @author Andrew Shvayka @@ -131,6 +132,16 @@ public class AlarmProcessor implements RuleProcessor oldAlarmOpt = ctx.findLatestAlarm(alarm.getOriginator(), alarm.getType()); + if (oldAlarmOpt.isPresent() && !oldAlarmOpt.get().getStatus().isCleared()) { + try { + ctx.clearAlarm(oldAlarmOpt.get().getId(), oldAlarmOpt.get().getEndTs()).get(); + } catch (Exception e) { + throw new RuleException("Failed to clear old alarm", e); + } + } + } existing = ctx.createOrUpdateAlarm(alarm); if (existing.getStartTs() == alarm.getStartTs()) { log.debug("[{}][{}] New Active Alarm detected", ctx.getRuleId(), existing.getId()); @@ -140,7 +151,7 @@ public class AlarmProcessor implements RuleProcessor alarm = ctx.findLatestAlarm(ctx.getDeviceMetaData().getDeviceId(), alarmType); if (alarm.isPresent()) { diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmProcessorConfiguration.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmProcessorConfiguration.java index 197cc44acc..8d73dd62fb 100644 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmProcessorConfiguration.java +++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmProcessorConfiguration.java @@ -32,6 +32,7 @@ public class AlarmProcessorConfiguration { private String alarmSeverity; private String alarmStatus; private boolean alarmPropagateFlag; + private boolean newAlarmFlag; private String alarmDetailsTemplate; diff --git a/extensions-core/src/main/resources/AlarmProcessorDescriptor.json b/extensions-core/src/main/resources/AlarmProcessorDescriptor.json index f23b40cea3..74dcffbafa 100644 --- a/extensions-core/src/main/resources/AlarmProcessorDescriptor.json +++ b/extensions-core/src/main/resources/AlarmProcessorDescriptor.json @@ -30,6 +30,11 @@ "type": "boolean", "default": true }, + "newAlarmFlag": { + "title": "New Alarm on each event", + "type": "boolean", + "default": false + }, "alarmDetailsTemplate": { "title": "Alarm details (JSON)", "type": "string", @@ -106,6 +111,7 @@ }, "alarmTypeTemplate", "alarmPropagateFlag", + "newAlarmFlag", { "key": "alarmDetailsTemplate", "type": "textarea",