]> git.basschouten.com Git - openhab-addons.git/blob
711570374c0526e41d1c37cac5e4aced95f2bcd3
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2021 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.powermax.internal.message;
14
15 import org.openhab.binding.powermax.internal.message.PowermaxMessageConstants.PowermaxSysEvent;
16 import org.openhab.binding.powermax.internal.state.PowermaxState;
17
18 /**
19  * A class for PANEL message handling
20  *
21  * @author Laurent Garnier - Initial contribution
22  */
23 public class PowermaxPanelMessage extends PowermaxBaseMessage {
24
25     /**
26      * Constructor
27      *
28      * @param message
29      *            the received message as a buffer of bytes
30      */
31     public PowermaxPanelMessage(byte[] message) {
32         super(message);
33     }
34
35     @Override
36     protected PowermaxState handleMessageInternal(PowermaxCommManager commManager) {
37         if (commManager == null) {
38             return null;
39         }
40
41         PowermaxState updatedState = commManager.createNewState();
42
43         byte[] message = getRawData();
44         int msgCnt = message[2] & 0x000000FF;
45
46         debug("Event count", msgCnt);
47
48         for (int i = 1; i <= msgCnt; i++) {
49             byte eventZone = message[2 + 2 * i];
50             byte logEvent = message[3 + 2 * i];
51             int eventType = logEvent & 0x0000007F;
52             PowermaxSysEvent sysEvent = PowermaxMessageConstants.getSystemEvent(eventType);
53             String logEventStr = sysEvent.toString();
54             String logUserStr = commManager.getPanelSettings().getZoneOrUserName(eventZone & 0x000000FF);
55
56             debug("Event " + i + " zone code", eventZone, logUserStr);
57             debug("Event " + i + " event code", eventType, logEventStr);
58
59             if (sysEvent.isAlarm() || sysEvent.isSilentAlarm() || sysEvent.isAlert() || sysEvent.isPanic()
60                     || sysEvent.isTrouble()) {
61                 updatedState.addActiveAlert(eventZone, eventType);
62             }
63
64             if (sysEvent.isAlarm() || (sysEvent.isPanic() && !commManager.getPanelSettings().isSilentPanic())) {
65                 updatedState.ringing.setValue(true);
66                 updatedState.ringingSince.setValue(System.currentTimeMillis());
67             }
68
69             if (sysEvent.isCancel() || sysEvent.isGeneralRestore() || sysEvent.isReset()) {
70                 updatedState.ringing.setValue(false);
71             }
72
73             if (sysEvent.isRestore()) {
74                 updatedState.clearActiveAlert(eventZone, sysEvent.getRestoreFor());
75             }
76
77             if (sysEvent.isGeneralRestore() || sysEvent.isReset()) {
78                 updatedState.clearAllActiveAlerts();
79             }
80
81             if (sysEvent.isReset()) {
82                 updatedState.clearAllActiveAlerts();
83                 updatedState.downloadSetupRequired.setValue(true);
84             }
85         }
86
87         return updatedState;
88     }
89 }