]> git.basschouten.com Git - openhab-addons.git/blob
14d16208d785269c9567dd39f900e31594563567
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2020 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.state.PowermaxState;
16
17 /**
18  * A class for PANEL message handling
19  *
20  * @author Laurent Garnier - Initial contribution
21  */
22 public class PowermaxPanelMessage extends PowermaxBaseMessage {
23
24     /**
25      * Constructor
26      *
27      * @param message
28      *            the received message as a buffer of bytes
29      */
30     public PowermaxPanelMessage(byte[] message) {
31         super(message);
32     }
33
34     @Override
35     public PowermaxState handleMessage(PowermaxCommManager commManager) {
36         super.handleMessage(commManager);
37
38         if (commManager == null) {
39             return null;
40         }
41
42         PowermaxState updatedState = commManager.createNewState();
43
44         byte[] message = getRawData();
45         int msgCnt = message[2] & 0x000000FF;
46
47         for (int i = 1; i <= msgCnt; i++) {
48             byte eventZone = message[2 + 2 * i];
49             byte logEvent = message[3 + 2 * i];
50             int eventType = logEvent & 0x0000007F;
51             String logEventStr = (eventType < PowermaxEventLogMessage.LOG_EVENT_TABLE.length)
52                     ? PowermaxEventLogMessage.LOG_EVENT_TABLE[eventType]
53                     : "UNKNOWN";
54             String logUserStr = ((eventZone & 0x000000FF) < PowermaxEventLogMessage.LOG_USER_TABLE.length)
55                     ? PowermaxEventLogMessage.LOG_USER_TABLE[eventZone & 0x000000FF]
56                     : "UNKNOWN";
57             updatedState.setPanelStatus(logEventStr + " (" + logUserStr + ")");
58
59             String alarmStatus;
60             try {
61                 PowermaxAlarmType alarmType = PowermaxAlarmType.fromCode(eventType);
62                 alarmStatus = alarmType.getLabel();
63             } catch (IllegalArgumentException e) {
64                 alarmStatus = "None";
65             }
66             updatedState.setAlarmType(alarmStatus);
67
68             String troubleStatus;
69             try {
70                 PowermaxTroubleType troubleType = PowermaxTroubleType.fromCode(eventType);
71                 troubleStatus = troubleType.getLabel();
72             } catch (IllegalArgumentException e) {
73                 troubleStatus = "None";
74             }
75             updatedState.setTroubleType(troubleStatus);
76
77             if (eventType == 0x60) {
78                 // System reset
79                 updatedState.setDownloadSetupRequired(true);
80             }
81         }
82
83         return updatedState;
84     }
85
86     @Override
87     public String toString() {
88         String str = super.toString();
89
90         byte[] message = getRawData();
91         int msgCnt = message[2] & 0x000000FF;
92
93         str += "\n - event count = " + msgCnt;
94         for (int i = 1; i <= msgCnt; i++) {
95             byte eventZone = message[2 + 2 * i];
96             byte logEvent = message[3 + 2 * i];
97
98             str += "\n - event " + i + " zone code = " + String.format("%08X", eventZone);
99             str += "\n - event " + i + " event code = " + String.format("%08X", logEvent);
100         }
101
102         return str;
103     }
104 }