]> git.basschouten.com Git - openhab-addons.git/commitdiff
[paradoxalarm] Fix Paradox EVOHD zone parsing fail #10572 (#15441)
authorKonstantin Polihronov <polychronov@gmail.com>
Tue, 22 Aug 2023 06:47:12 +0000 (09:47 +0300)
committerGitHub <noreply@github.com>
Tue, 22 Aug 2023 06:47:12 +0000 (08:47 +0200)
* Fix Paradox EVOHD zone parsing fail #10572

* Root cause is that EVOHD and EVO192 have much more zones which are
stored in a different memory map model. They should be treated the same
way. Fix is simple and can be downported to 3.x if decided by the
maintainers

Signed-off-by: Konstantin Polihronov <polychronov@gmail.com>
bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/communication/EvoCommunicator.java
bundles/org.openhab.binding.paradoxalarm/src/main/java/org/openhab/binding/paradoxalarm/internal/model/PanelType.java

index 5c6c0b3e05ce05836ddbd9e8e137685d29c269b9..865f3609fceec3d7482c08b1702ec3702b696729 100644 (file)
@@ -193,7 +193,7 @@ public class EvoCommunicator extends GenericCommunicator implements IParadoxComm
     private void createZoneOpenedFlags(ZoneStateFlags result, byte[] firstPage, byte[] secondPage) {
         int pageOffset = panelType == PanelType.EVO48 ? 34 : 40;
         byte[] firstBlock = Arrays.copyOfRange(firstPage, 28, pageOffset);
-        if (panelType != PanelType.EVO192) {
+        if (!PanelType.isBigRamEvo(panelType)) {
             result.setZonesOpened(firstBlock);
         } else {
             byte[] secondBlock = Arrays.copyOfRange(secondPage, 0, 12);
@@ -205,7 +205,7 @@ public class EvoCommunicator extends GenericCommunicator implements IParadoxComm
     private void createZoneTamperedFlags(ZoneStateFlags result, byte[] firstPage, byte[] secondPage) {
         int pageOffset = panelType == PanelType.EVO48 ? 46 : 52;
         byte[] firstBlock = Arrays.copyOfRange(firstPage, 40, pageOffset);
-        if (panelType != PanelType.EVO192) {
+        if (!PanelType.isBigRamEvo(panelType)) {
             result.setZonesTampered(firstBlock);
         } else {
             byte[] secondBlock = Arrays.copyOfRange(secondPage, 12, 24);
@@ -217,7 +217,7 @@ public class EvoCommunicator extends GenericCommunicator implements IParadoxComm
     private void createZoneLowbatteryFlags(ZoneStateFlags result, byte[] firstPage, byte[] secondPage) {
         int pageOffset = panelType == PanelType.EVO48 ? 58 : 64;
         byte[] firstBlock = Arrays.copyOfRange(firstPage, 52, pageOffset);
-        if (panelType != PanelType.EVO192) {
+        if (!PanelType.isBigRamEvo(panelType)) {
             result.setZonesLowBattery(firstBlock);
         } else {
             byte[] secondBlock = Arrays.copyOfRange(secondPage, 24, 36);
index 22c848740504f59b031423b9257adea1866b24a1..6fa56fa93774820c4f53fe212c2590f185ba9d4c 100644 (file)
@@ -59,6 +59,10 @@ public enum PanelType {
         }
     }
 
+    public static boolean isBigRamEvo(PanelType panelType) {
+        return panelType == EVO192 || panelType == EVOHD;
+    }
+
     public int getPartitions() {
         return partitions;
     }