]> git.basschouten.com Git - openhab-addons.git/blob
24d20e7effccb899e7fec98e31aba0124c1adc2c
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2022 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.paradoxalarm.internal.parsers;
14
15 import org.openhab.binding.paradoxalarm.internal.model.PartitionState;
16 import org.openhab.binding.paradoxalarm.internal.model.ZoneState;
17 import org.openhab.binding.paradoxalarm.internal.model.ZoneStateFlags;
18 import org.openhab.binding.paradoxalarm.internal.util.ParadoxUtil;
19
20 /**
21  * The {@link EvoParser} Implementation of parser interface for EVO type panels
22  *
23  * @author Konstantin Polihronov - Initial contribution
24  */
25 public class EvoParser extends AbstractParser {
26
27     @Override
28     public PartitionState calculatePartitionState(byte[] partitionFlags) {
29         byte firstByte = partitionFlags[0];
30         PartitionState state = new PartitionState();
31         state.setArmed(ParadoxUtil.isBitSet(firstByte, 0));
32         state.setArmedInAway(ParadoxUtil.isBitSet(firstByte, 1));
33         state.setArmedInStay(ParadoxUtil.isBitSet(firstByte, 2));
34         state.setArmedInNoEntry(ParadoxUtil.isBitSet(firstByte, 3));
35
36         state.setInAlarm(ParadoxUtil.isBitSet(firstByte, 4));
37         state.setInSilentAlarm(ParadoxUtil.isBitSet(firstByte, 5));
38         state.setInAudibleAlarm(ParadoxUtil.isBitSet(firstByte, 6));
39         state.setInFireAlarm(ParadoxUtil.isBitSet(firstByte, 7));
40
41         byte secondByte = partitionFlags[1];
42         state.setReadyToArm(ParadoxUtil.isBitSet(secondByte, 0));
43         state.setInExitDelay(ParadoxUtil.isBitSet(secondByte, 1));
44         state.setInEntryDelay(ParadoxUtil.isBitSet(secondByte, 2));
45         state.setInTrouble(ParadoxUtil.isBitSet(secondByte, 3));
46         state.setHasAlarmInMemory(ParadoxUtil.isBitSet(secondByte, 4));
47         state.setInZoneBypass(ParadoxUtil.isBitSet(secondByte, 5));
48
49         byte thirdByte = partitionFlags[2];
50         state.setHasZoneInTamperTrouble(ParadoxUtil.isBitSet(thirdByte, 4));
51         state.setHasZoneInLowBatteryTrouble(ParadoxUtil.isBitSet(thirdByte, 5));
52         state.setHasZoneInFireLoopTrouble(ParadoxUtil.isBitSet(thirdByte, 6));
53         state.setHasZoneInSupervisionTrouble(ParadoxUtil.isBitSet(thirdByte, 7));
54
55         byte sixthByte = partitionFlags[5];
56         state.setStayInstantReady(ParadoxUtil.isBitSet(sixthByte, 0));
57         state.setForceReady(ParadoxUtil.isBitSet(sixthByte, 1));
58         state.setBypassReady(ParadoxUtil.isBitSet(sixthByte, 2));
59         state.setInhibitReady(ParadoxUtil.isBitSet(sixthByte, 3));
60         state.setAllZoneClosed(ParadoxUtil.isBitSet(sixthByte, 4));
61
62         return state;
63     }
64
65     @Override
66     public ZoneState calculateZoneState(int id, ZoneStateFlags zoneStateFlags) {
67
68         int index = (id - 1) / 8;
69         int bitNumber = id % 8 - 1;
70
71         byte[] zonesOpened = zoneStateFlags.getZonesOpened();
72         boolean isOpened = ParadoxUtil.isBitSet(zonesOpened[index], bitNumber);
73
74         byte[] zonesTampered = zoneStateFlags.getZonesTampered();
75         boolean isTampered = ParadoxUtil.isBitSet(zonesTampered[index], bitNumber);
76
77         byte[] zonesLowBattery = zoneStateFlags.getZonesLowBattery();
78         boolean hasLowBattery = ParadoxUtil.isBitSet(zonesLowBattery[index], bitNumber);
79
80         return new ZoneState(isOpened, isTampered, hasLowBattery);
81     }
82 }