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