2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
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
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.powermax.internal.message;
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;
21 * A class for EVENTLOG message handling
23 * @author Laurent Garnier - Initial contribution
26 public class PowermaxEventLogMessage extends PowermaxBaseMessage {
32 * the received message as a buffer of bytes
34 public PowermaxEventLogMessage(byte[] message) {
39 protected @Nullable PowermaxState handleMessageInternal(@Nullable PowermaxCommManager commManager) {
40 if (commManager == null) {
44 PowermaxPanelSettings panelSettings = commManager.getPanelSettings();
45 PowermaxState updatedState = commManager.createNewState();
47 byte[] message = getRawData();
48 int eventNum = message[3] & 0x000000FF;
50 debug("Event number", eventNum);
53 int eventCnt = message[2] & 0x000000FF;
54 updatedState.setEventLogSize(eventCnt - 1);
56 debug("Event count", eventCnt);
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);
71 if (panelSettings.getPanelType().getPartitions() > 1) {
73 if ((second & 0x01) == 0x01) {
75 } else if ((second & 0x02) == 0x02) {
77 } else if ((second & 0x04) == 0x04) {
82 eventStr = String.format("%s / %s: %s (%s)", timestamp, part, logEventStr, logUserStr);
84 eventStr = String.format("%s: %s (%s)", timestamp, logEventStr, logUserStr);
86 updatedState.setEventLogSize(eventNum - 1);
87 updatedState.setEventLog(eventNum - 1, eventStr);
89 debug("Event " + eventNum + " date/time", timestamp);
90 debug("Event " + eventNum + " zone code", eventZone, logUserStr);
91 debug("Event " + eventNum + " event code", logEvent, logEventStr);