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.comfoair.internal.datatypes;
15 import org.eclipse.jdt.annotation.NonNullByDefault;
16 import org.eclipse.jdt.annotation.Nullable;
17 import org.openhab.binding.comfoair.internal.ComfoAirCommandType;
18 import org.openhab.core.library.types.StringType;
19 import org.openhab.core.types.State;
20 import org.openhab.core.types.UnDefType;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
25 * Class to handle error messages
27 * @author Holger Hees - Initial Contribution
28 * @author Hans Böhm - Refactoring
31 public class DataTypeMessage implements ComfoAirDataType {
32 private static final DataTypeMessage SINGLETON_INSTANCE = new DataTypeMessage();
34 private DataTypeMessage() {
37 private final Logger logger = LoggerFactory.getLogger(DataTypeMessage.class);
39 public static DataTypeMessage getInstance() {
40 return SINGLETON_INSTANCE;
44 public State convertToState(int @Nullable [] data, ComfoAirCommandType commandType) {
46 logger.trace("\"DataTypeMessage\" class \"convertToState\" method parameter: null");
47 return UnDefType.NULL;
49 int[] readReplyDataPos = commandType.getReadReplyDataPos();
50 if (readReplyDataPos != null) {
51 int errorAlo = data[readReplyDataPos[0]];
52 int errorE = data[readReplyDataPos[1]];
53 int errorEA = (data.length > 9) ? data[readReplyDataPos[2]] : -1;
54 int errorAhi = (data.length > 9) ? data[readReplyDataPos[3]] : -1;
56 StringBuilder errorCode = new StringBuilder();
59 errorCode.append("A");
60 errorCode.append(convertToCode(errorAlo));
61 } else if (errorAhi > 0) {
62 if (errorAhi == 0x80) {
63 errorCode.append("A0");
65 errorCode.append("A");
66 errorCode.append(convertToCode(errorAhi) + 8);
71 if (errorCode.length() > 0) {
72 errorCode.append(" ");
74 errorCode.append("E");
75 errorCode.append(convertToCode(errorE));
76 } else if (errorEA > 0) {
77 if (errorCode.length() > 0) {
78 errorCode.append(" ");
80 errorCode.append("EA");
81 errorCode.append(convertToCode(errorEA));
83 return new StringType(errorCode.length() > 0 ? errorCode.toString() : "No Errors");
85 return UnDefType.UNDEF;
91 public int @Nullable [] convertFromState(State value, ComfoAirCommandType commandType) {
95 private int convertToCode(int code) {