/** * Copyright (c) 2010-2016 by the respective copyright holders. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.openhab.binding.maxcul.internal.messages; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Message class to handle Wall Thermostat Control messages * * @author Paul Hampson (cyclingengineer) * @since 1.6.0 */ public class WallThermostatControlMsg extends BaseMsg { final static private int WALL_THERMOSTAT_CONTROL_SET_POINT_AND_MEASURED_PAYLOAD_LEN = 2; /* * in * bytes */ final static private int WALL_THERMOSTAT_CONTROL_SET_POINT_ONLY_PAYLOAD_LEN = 1; /* * in * bytes */ private static final Logger logger = LoggerFactory.getLogger(WallThermostatControlMsg.class); private Double desiredTemperature; private Double measuredTemperature; public WallThermostatControlMsg(String rawMsg) { super(rawMsg); logger.debug(this.msgType + " Payload Len -> " + this.payload.length); if (this.payload.length == WALL_THERMOSTAT_CONTROL_SET_POINT_AND_MEASURED_PAYLOAD_LEN) { desiredTemperature = (this.payload[0] & 0x7F) / 2.0; int mTemp = (this.payload[0] & 0x80); mTemp <<= 1; mTemp |= ((this.payload[1]) & 0xff); measuredTemperature = mTemp / 10.0; // temperature over 25.5 uses // extra bit in // desiredTemperature byte } else if (this.payload.length == WALL_THERMOSTAT_CONTROL_SET_POINT_ONLY_PAYLOAD_LEN) { desiredTemperature = (this.payload[0] & 0x7F) / 2.0; measuredTemperature = null; } else { logger.error("Got " + this.msgType + " message with incorrect length!"); } } public WallThermostatControlMsg(byte msgCount, byte msgFlag, byte groupId, String srcAddr, String dstAddr) { super(msgCount, msgFlag, MaxCulMsgType.WALL_THERMOSTAT_STATE, groupId, srcAddr, dstAddr); } @Override protected void printFormattedPayload() { logger.debug("\tDesired Temperature => " + desiredTemperature); logger.debug("\tMeasured Temperature => " + measuredTemperature); } public Double getMeasuredTemperature() { return measuredTemperature; } public Double getDesiredTemperature() { return desiredTemperature; } }