public C_Message(String raw) { super(raw); logger.fine(" *** C-Message ***"); String[] tokens = this.getPayload().split(Message.DELIMETER); rfAddress = tokens[0]; byte[] bytes = Base64.decodeBase64(tokens[1].getBytes()); int[] data = new int[bytes.length]; for (int i = 0; i < bytes.length; i++) { data[i] = bytes[i] & 0xFF; } length = data[0]; if (length != data.length - 1) { logger.fine( "C_Message malformed: wrong data length. Expected bytes " + length + ", actual bytes " + (data.length - 1)); } String rfAddress2 = Utils.toHex(data[1], data[2], data[3]); if (!rfAddress.toUpperCase().equals(rfAddress2.toUpperCase())) { logger.fine( "C_Message malformed: wrong RF address. Expected address " + rfAddress.toUpperCase() + ", actual address " + rfAddress2.toUpperCase()); } deviceType = DeviceType.create(data[4]); serialNumber = getSerialNumber(bytes); if (deviceType == DeviceType.HeatingThermostatPlus || deviceType == DeviceType.HeatingThermostat || deviceType == DeviceType.WallMountedThermostat) parseHeatingThermostatData(bytes); if (deviceType == DeviceType.EcoSwitch || deviceType == DeviceType.ShutterContact) logger.finer( "Device " + rfAddress + " type " + deviceType.toString() + " Data:" + parseData(bytes)); }