]> git.basschouten.com Git - openhab-addons.git/blob
a08313472e23f2713d89faeb78e23306050408c5
[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.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     protected PowermaxState handleMessageInternal(PowermaxCommManager commManager) {
36         if (commManager == null) {
37             return null;
38         }
39
40         PowermaxState updatedState = commManager.createNewState();
41
42         byte[] message = getRawData();
43         int msgCnt = message[2] & 0x000000FF;
44
45         debug("Event count", msgCnt);
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 = PowermaxMessageConstants.getSystemEventString(eventType);
52             String logUserStr = PowermaxMessageConstants.getZoneOrUserString(eventZone & 0x000000FF);
53             updatedState.panelStatus.setValue(logEventStr + " (" + logUserStr + ")");
54
55             debug("Event " + i + " zone code", eventZone, logUserStr);
56             debug("Event " + i + " event code", eventType, logEventStr);
57
58             String alarmStatus;
59             try {
60                 PowermaxAlarmType alarmType = PowermaxAlarmType.fromCode(eventType);
61                 alarmStatus = alarmType.getLabel();
62             } catch (IllegalArgumentException e) {
63                 alarmStatus = "None";
64             }
65             updatedState.alarmType.setValue(alarmStatus);
66
67             String troubleStatus;
68             try {
69                 PowermaxTroubleType troubleType = PowermaxTroubleType.fromCode(eventType);
70                 troubleStatus = troubleType.getLabel();
71             } catch (IllegalArgumentException e) {
72                 troubleStatus = "None";
73             }
74             updatedState.troubleType.setValue(troubleStatus);
75
76             if (eventType == 0x60) {
77                 // System reset
78                 updatedState.downloadSetupRequired.setValue(true);
79             }
80         }
81
82         return updatedState;
83     }
84 }