* @param setpoint the setpoint to set.
* @return the serial message
*/
public SerialMessage setMessage(int scale, SetpointType setpointType, BigDecimal setpoint) {
logger.debug("NODE {}: Creating new message for application command THERMOSTAT_SETPOINT_SET", this.getNode().getNodeId());
SerialMessage result = new SerialMessage(this.getNode().getNodeId(), SerialMessageClass.SendData, SerialMessageType.Request, SerialMessageClass.SendData, SerialMessagePriority.Set);
try
{
byte[] encodedValue = encodeValue(setpoint);
byte[] payload = ArrayUtils.addAll(
new byte[] {
(byte) this.getNode().getNodeId(),
(byte) (3 + encodedValue.length),
(byte) getCommandClass().getKey(),
THERMOSTAT_SETPOINT_SET,
(byte) setpointType.getKey()
},
encodedValue
);
// Add the scale
payload[5] += (byte)(scale << 3);
result.setMessagePayload(payload);
return result;
} catch (ArithmeticException e) {
logger.error("NODE {}: Got an arithmetic exception converting value {} to a valid Z-Wave value. Ignoring THERMOSTAT_SETPOINT_SET message.", this.getNode().getNodeId(), setpoint);
return null;
}