Browse Source

process ALARM_ACK msg in device state

pull/3970/head
YevhenBondarenko 5 years ago
parent
commit
24ebc06fa4
  1. 7
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/AlarmState.java
  2. 12
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/DeviceState.java

7
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/AlarmState.java

@ -291,4 +291,11 @@ class AlarmState {
}
return updated;
}
public void processAckAlarm(Alarm alarm) {
if (currentAlarm != null && currentAlarm.getId().equals(alarm.getId())) {
currentAlarm.setStatus(alarm.getStatus());
currentAlarm.setAckTs(alarm.getAckTs());
}
}
}

12
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/DeviceState.java

@ -140,6 +140,8 @@ class DeviceState {
stateChanged = processAttributesDeleteNotification(ctx, msg);
} else if (msg.getType().equals(DataConstants.ALARM_CLEAR)) {
stateChanged = processAlarmClearNotification(ctx, msg);
} else if (msg.getType().equals(DataConstants.ALARM_ACK)) {
processAlarmAckNotification(ctx, msg);
} else {
ctx.tellSuccess(msg);
}
@ -161,6 +163,16 @@ class DeviceState {
return stateChanged;
}
private void processAlarmAckNotification(TbContext ctx, TbMsg msg) {
Alarm alarmNf = JacksonUtil.fromString(msg.getData(), Alarm.class);
for (DeviceProfileAlarm alarm : deviceProfile.getAlarmSettings()) {
AlarmState alarmState = alarmStates.computeIfAbsent(alarm.getId(),
a -> new AlarmState(this.deviceProfile, deviceId, alarm, getOrInitPersistedAlarmState(alarm)));
alarmState.processAckAlarm(alarmNf);
}
ctx.tellSuccess(msg);
}
private boolean processAttributesUpdateNotification(TbContext ctx, TbMsg msg) throws ExecutionException, InterruptedException {
Set<AttributeKvEntry> attributes = JsonConverter.convertToAttributes(new JsonParser().parse(msg.getData()));
String scope = msg.getMetaData().getValue("scope");

Loading…
Cancel
Save