]> git.basschouten.com Git - openhab-addons.git/blob
1b24d77d5794e3bebe20ed1c2c18226bda8f0287
[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.PowermaxPanelSettings;
16 import org.openhab.binding.powermax.internal.state.PowermaxState;
17
18 /**
19  * A class for EVENTLOG message handling
20  *
21  * @author Laurent Garnier - Initial contribution
22  */
23 public class PowermaxEventLogMessage extends PowermaxBaseMessage {
24
25     /**
26      * Constructor
27      *
28      * @param message
29      *            the received message as a buffer of bytes
30      */
31     public PowermaxEventLogMessage(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         PowermaxPanelSettings panelSettings = commManager.getPanelSettings();
42         PowermaxState updatedState = commManager.createNewState();
43
44         byte[] message = getRawData();
45         int eventNum = message[3] & 0x000000FF;
46
47         debug("Event number", eventNum);
48
49         if (eventNum == 1) {
50             int eventCnt = message[2] & 0x000000FF;
51             updatedState.setEventLogSize(eventCnt - 1);
52
53             debug("Event count", eventCnt);
54         } else {
55             int second = message[4] & 0x000000FF;
56             int minute = message[5] & 0x000000FF;
57             int hour = message[6] & 0x000000FF;
58             int day = message[7] & 0x000000FF;
59             int month = message[8] & 0x000000FF;
60             int year = (message[9] & 0x000000FF) + 2000;
61             String timestamp = String.format("%02d/%02d/%04d %02d:%02d:%02d", day, month, year, hour, minute, second);
62             byte eventZone = message[10];
63             byte logEvent = message[11];
64             String logEventStr = PowermaxMessageConstants.getSystemEventString(logEvent & 0x000000FF);
65             String logUserStr = PowermaxMessageConstants.getZoneOrUserString(eventZone & 0x000000FF);
66
67             String eventStr;
68             if (panelSettings.getPanelType().getPartitions() > 1) {
69                 String part;
70                 if ((second & 0x01) == 0x01) {
71                     part = "Part. 1";
72                 } else if ((second & 0x02) == 0x02) {
73                     part = "Part. 2";
74                 } else if ((second & 0x04) == 0x04) {
75                     part = "Part. 3";
76                 } else {
77                     part = "Panel";
78                 }
79                 eventStr = String.format("%s / %s: %s (%s)", timestamp, part, logEventStr, logUserStr);
80             } else {
81                 eventStr = String.format("%s: %s (%s)", timestamp, logEventStr, logUserStr);
82             }
83             updatedState.setEventLogSize(eventNum - 1);
84             updatedState.setEventLog(eventNum - 1, eventStr);
85
86             debug("Event " + eventNum + " date/time", timestamp);
87             debug("Event " + eventNum + " zone code", eventZone, logUserStr);
88             debug("Event " + eventNum + " event code", logEvent, logEventStr);
89         }
90
91         return updatedState;
92     }
93 }