]> git.basschouten.com Git - openhab-addons.git/commitdiff
[openwebnet] Reset zones' alarm state channel when system is armed (#14566)
authorM Valla <12682715+mvalla@users.noreply.github.com>
Sun, 26 Mar 2023 10:19:31 +0000 (12:19 +0200)
committerGitHub <noreply@github.com>
Sun, 26 Mar 2023 10:19:31 +0000 (12:19 +0200)
* [openwebnet] reset zones alarm channel when system is armed and added NONE state
* [openwebnet] added Technical reset alarm. Changes after 1st review

---------

Signed-off-by: Massimo Valla <mvcode00@gmail.com>
bundles/org.openhab.binding.openwebnet/README.md
bundles/org.openhab.binding.openwebnet/src/main/java/org/openhab/binding/openwebnet/internal/OpenWebNetBindingConstants.java
bundles/org.openhab.binding.openwebnet/src/main/java/org/openhab/binding/openwebnet/internal/handler/OpenWebNetAlarmHandler.java
bundles/org.openhab.binding.openwebnet/src/main/resources/OH-INF/i18n/openwebnet.properties
bundles/org.openhab.binding.openwebnet/src/main/resources/OH-INF/thing/channels.xml

index c36b44150a0f1236b736b7c5396466fa241a9a82..d4f3d6ca0755b39dc003a85f370d870b52288d86 100644 (file)
@@ -526,5 +526,6 @@ Special thanks for helping on testing this binding go to:
 [@feodor](https://community.openhab.org/u/feodor),
 [@aconte80](https://community.openhab.org/u/aconte80),
 [@rubenfuser](https://community.openhab.org/u/rubenfuser),
-[@stamate_viorel](https://community.openhab.org/u/stamate_viorel)
+[@stamate_viorel](https://community.openhab.org/u/stamate_viorel),
+[@marchino](https://community.openhab.org/u/marchino)
 and many others at the fantastic openHAB community!
index 7827fd3bc011fd07e4e88010ea3dfb9bb47e1206..7cbf637c32e3f600aed3e1b8b66d5bce8d550cac 100644 (file)
@@ -172,7 +172,7 @@ public class OpenWebNetBindingConstants {
     public static final String CHANNEL_ALARM_SYSTEM_NETWORK = "network";
     public static final String CHANNEL_ALARM_SYSTEM_BATTERY = "battery";
     public static final String CHANNEL_ALARM_ZONE_STATE = "state";
-    public static final String CHANNEL_ALARM_ZONE_ALARM_STATE = "alarm";
+    public static final String CHANNEL_ALARM_ZONE_ALARM = "alarm";
 
     // devices config properties
     public static final String CONFIG_PROPERTY_WHERE = "where";
index 9d5ddb37f3a17211dc05f386566a9e89b55a991a..e6abefe6be8824ae6e760b8a4ebb0f0306096dc2 100644 (file)
@@ -14,6 +14,7 @@ package org.openhab.binding.openwebnet.internal.handler;
 
 import static org.openhab.binding.openwebnet.internal.OpenWebNetBindingConstants.*;
 
+import java.util.HashSet;
 import java.util.Set;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -52,19 +53,35 @@ public class OpenWebNetAlarmHandler extends OpenWebNetThingHandler {
 
     private static long lastAllDevicesRefreshTS = 0; // ts when last all device refresh was sent for this handler
 
+    private static Set<OpenWebNetAlarmHandler> zoneHandlers = new HashSet<OpenWebNetAlarmHandler>();
+
     private static final String BATTERY_OK = "OK";
     private static final String BATTERY_FAULT = "FAULT";
     private static final String BATTERY_UNLOADED = "UNLOADED";
 
-    private static final String SILENT = "SILENT";
-    private static final String INTRUSION = "INTRUSION";
-    private static final String ANTI_PANIC = "ANTI_PANIC";
-    private static final String TAMPERING = "TAMPERING";
+    private static final String ALARM_INTRUSION = "INTRUSION";
+    private static final String ALARM_TAMPERING = "TAMPERING";
+    private static final String ALARM_ANTI_PANIC = "ANTI_PANIC";
+    private static final String ALARM_SILENT = "SILENT";
+    private static final String ALARM_TECHNICAL = "TECHNICAL";
+    private static final String ALARM_TECHNICAL_RESET = "TECHNICAL_RESET";
+    private static final String ALARM_NONE = "NONE";
 
     public OpenWebNetAlarmHandler(Thing thing) {
         super(thing);
     }
 
+    @Override
+    public void initialize() {
+        super.initialize();
+        if (OpenWebNetBindingConstants.THING_TYPE_BUS_ALARM_ZONE.equals(thing.getThingTypeUID())) {
+            zoneHandlers.add(this);
+            // initially set zone alarm to NONE (it will be set if specific alarm message is
+            // received)
+            updateState(CHANNEL_ALARM_ZONE_ALARM, new StringType(ALARM_NONE));
+        }
+    }
+
     @Override
     protected void handleChannelCommand(ChannelUID channel, Command command) {
         logger.warn("Alarm.handleChannelCommand() Read only channel, unsupported command {}", command);
@@ -115,7 +132,7 @@ public class OpenWebNetAlarmHandler extends OpenWebNetThingHandler {
 
     @Override
     protected void handleMessage(BaseOpenMessage msg) {
-        logger.debug("handleMessage({}) for thing: {}", msg, thing.getUID());
+        logger.debug("handleMessage({}) for: {} {}", msg, thing.getUID(), msg.getWhat());
         super.handleMessage(msg);
         ThingTypeUID thingType = thing.getThingTypeUID();
         if (THING_TYPE_BUS_ALARM_SYSTEM.equals(thingType)) {
@@ -141,18 +158,20 @@ public class OpenWebNetAlarmHandler extends OpenWebNetThingHandler {
             case SYSTEM_ENGAGED:
                 updateAlarmSystemArmed(w);
                 break;
-            case SYSTEM_BATTERY_FAULT:
             case SYSTEM_BATTERY_OK:
             case SYSTEM_BATTERY_UNLOADED:
+            case SYSTEM_BATTERY_FAULT:
                 updateBatteryState(w);
                 break;
             case SYSTEM_NETWORK_ERROR:
             case SYSTEM_NETWORK_OK:
                 updateNetworkState(w);
                 break;
+            case DELAY_END:
+                resetAllZonesAlarmState();
+                break;
             case START_PROGRAMMING:
             case STOP_PROGRAMMING:
-            case DELAY_END:
             case NO_CONNECTION_TO_DEVICE:
             default:
                 logger.debug("Alarm.updateSystem() Ignoring unsupported WHAT {}. Frame={}", msg.getWhat(), msg);
@@ -196,10 +215,10 @@ public class OpenWebNetAlarmHandler extends OpenWebNetThingHandler {
             case ZONE_ALARM_TAMPERING:
             case ZONE_ALARM_ANTI_PANIC:
             case ZONE_ALARM_SILENT:
-                updateZoneAlarmState(w);
-                break;
-            case ZONE_ALARM_TECHNICAL:// not handled for now
+            case ZONE_ALARM_TECHNICAL:
             case ZONE_ALARM_TECHNICAL_RESET:
+                updateZoneAlarm(w);
+                break;
             default:
                 logger.debug("Alarm.updateZone() Ignoring unsupported WHAT {}. Frame={}", msg.getWhat(), msg);
         }
@@ -209,15 +228,35 @@ public class OpenWebNetAlarmHandler extends OpenWebNetThingHandler {
         updateState(CHANNEL_ALARM_ZONE_STATE, OnOffType.from(w == Alarm.WhatAlarm.ZONE_ENGAGED));
     }
 
-    private void updateZoneAlarmState(WhatAlarm w) {
-        if (w == Alarm.WhatAlarm.ZONE_ALARM_SILENT) {
-            updateState(CHANNEL_ALARM_ZONE_ALARM_STATE, new StringType(SILENT));
-        } else if (w == Alarm.WhatAlarm.ZONE_ALARM_INTRUSION) {
-            updateState(CHANNEL_ALARM_ZONE_ALARM_STATE, new StringType(INTRUSION));
-        } else if (w == Alarm.WhatAlarm.ZONE_ALARM_ANTI_PANIC) {
-            updateState(CHANNEL_ALARM_ZONE_ALARM_STATE, new StringType(ANTI_PANIC));
-        } else {
-            updateState(CHANNEL_ALARM_ZONE_ALARM_STATE, new StringType(TAMPERING));
+    private void updateZoneAlarm(WhatAlarm w) {
+        switch (w) {
+            case ZONE_ALARM_INTRUSION:
+                updateState(CHANNEL_ALARM_ZONE_ALARM, new StringType(ALARM_INTRUSION));
+                break;
+            case ZONE_ALARM_TAMPERING:
+                updateState(CHANNEL_ALARM_ZONE_ALARM, new StringType(ALARM_TAMPERING));
+                break;
+            case ZONE_ALARM_ANTI_PANIC:
+                updateState(CHANNEL_ALARM_ZONE_ALARM, new StringType(ALARM_ANTI_PANIC));
+                break;
+            case ZONE_ALARM_SILENT:
+                updateState(CHANNEL_ALARM_ZONE_ALARM, new StringType(ALARM_SILENT));
+                break;
+            case ZONE_ALARM_TECHNICAL:
+                updateState(CHANNEL_ALARM_ZONE_ALARM, new StringType(ALARM_TECHNICAL));
+                break;
+            case ZONE_ALARM_TECHNICAL_RESET:
+                updateState(CHANNEL_ALARM_ZONE_ALARM, new StringType(ALARM_TECHNICAL_RESET));
+                break;
+            default:
+                updateState(CHANNEL_ALARM_ZONE_ALARM, new StringType(ALARM_NONE));
+                logger.warn("Alarm.updateZoneAlarm() Ignoring unsupported WHAT {} for  zone {}", w, this.deviceWhere);
+        }
+    }
+
+    private void resetAllZonesAlarmState() {
+        for (OpenWebNetAlarmHandler h : zoneHandlers) {
+            h.updateState(CHANNEL_ALARM_ZONE_ALARM, new StringType(ALARM_NONE));
         }
     }
 
@@ -230,4 +269,13 @@ public class OpenWebNetAlarmHandler extends OpenWebNetThingHandler {
     protected String ownIdPrefix() {
         return Who.BURGLAR_ALARM.value().toString();
     }
+
+    @Override
+    public void dispose() {
+        if (OpenWebNetBindingConstants.THING_TYPE_BUS_ALARM_ZONE.equals(thing.getThingTypeUID())) {
+            zoneHandlers.remove(this);
+            logger.debug("Alarm.dispose() - removed zone {}", this.deviceWhere);
+        }
+        super.dispose();
+    }
 }
index 201fb6144fc5261353abc8b26083556fba884cd8..a417faa795d902aebc01189b99a67a99acb72c30 100644 (file)
@@ -282,6 +282,9 @@ channel-type.openwebnet.zoneAlarm.state.option.INTRUSION = Intrusion
 channel-type.openwebnet.zoneAlarm.state.option.TAMPERING = Tampering
 channel-type.openwebnet.zoneAlarm.state.option.ANTI_PANIC = Anti Panic
 channel-type.openwebnet.zoneAlarm.state.option.SILENT = Silent
+channel-type.openwebnet.zoneAlarm.state.option.TECHNICAL = Technical
+channel-type.openwebnet.zoneAlarm.state.option.TECHNICAL_RESET = Technical Reset
+channel-type.openwebnet.zoneAlarm.state.option.NONE = None
 
 # thing status descriptions
 
index 412bed8c66722e0ed2879f39366e7318ea98eb14..be9b6843b582a6d50a6c92b32bb242c322b3bbdf 100644 (file)
                                <option value="TAMPERING">Tampering</option>
                                <option value="ANTI_PANIC">Anti Panic</option>
                                <option value="SILENT">Silent</option>
+                               <option value="TECHNICAL">Technical</option>
+                               <option value="TECHNICAL_RESET">Technical Reset</option>
+                               <option value="NONE">None</option>
                        </options>
                </state>
        </channel-type>