[quote data-userid="6" data-postid="16507"] Can you post the 'message body' so that I can try to analyse the data. It may be that HA does not know how to interpret the data. [/quote] Here is a message received/status update pair: 2023-02-18 20:00:33.279 DEBUG (Heat Pump Wi-Fi Controller) [custom_components.midea_ac_lan.midea.devices.c3.device] [device_id] Received: {'header': 'aab9c300000000000004', 'body': '0400000026be000067900b281e323028ff01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8000000000000000000000000000000000014', 'message type': '04', 'body type': '04'} 2023-02-18 20:00:33.280 DEBUG (Heat Pump Wi-Fi Controller) [custom_components.midea_ac_lan.midea.core.device] [device_id] Status update: {'status_heating': False, 'status_dhw': False, 'status_tbh': False, 'status_ibh': False, 'total_energy_consumption': 9918, 'total_produced_energy': 26512, 'total_mystery1': 47247269426, 'total_mystery2': 206161116929, 'outdoor_temperature': None} and here is the code including my test vars. I don't think they will distort anything, the just provide another channel to inspect the data: In midea_devices.py C3Attributes.total_energy_consumption: { "type": "sensor", "name": "Total energy consumption", "device_class": SensorDeviceClass.ENERGY, "unit": ENERGY_KILO_WATT_HOUR, "state_class": SensorStateClass.TOTAL_INCREASING }, C3Attributes.total_produced_energy: { "type": "sensor", "name": "Total produced energy", "device_class": SensorDeviceClass.ENERGY, "unit": ENERGY_KILO_WATT_HOUR, "state_class": SensorStateClass.TOTAL_INCREASING }, C3Attributes.total_mystery1: { "type": "sensor", "name": "Total Mystery 1", "device_class": SensorDeviceClass.TEMPERATURE, "unit": TEMP_CELSIUS, "state_class": SensorStateClass.MEASUREMENT }, C3Attributes.total_mystery2: { "type": "sensor", "name": "Total Mystery 2", "device_class": SensorDeviceClass.TEMPERATURE, "unit": TEMP_CELSIUS, "state_class": SensorStateClass.MEASUREMENT }, C3Attributes.outdoor_temperature: { "type": "sensor", "name": "Outdoor Temperature", "device_class": SensorDeviceClass.TEMPERATURE, "unit": TEMP_CELSIUS, "state_class": SensorStateClass.MEASUREMENT }, In ..\C3\device.py total_energy_consumption = "total_energy_consumption" total_produced_energy = "total_produced_energy" total_mystery1 = "total_mystery1" total_mystery2 = "total_mystery2" outdoor_temperature = "outdoor_temperature" and DeviceAttributes.total_energy_consumption: None, DeviceAttributes.total_produced_energy: None, DeviceAttributes.total_mystery1: None, DeviceAttributes.total_mystery2: None, DeviceAttributes.outdoor_temperature: None, and in ..\C3\message.py self.total_energy_consumption = ( (body[data_offset + 1] << 32) + (body[data_offset + 2] << 16) + (body[data_offset + 3] << 8) + (body[data_offset + 4])) self.total_produced_energy = ( (body[data_offset + 5] << 32) + (body[data_offset + 6] << 16) + (body[data_offset + 7] << 8) + (body[data_offset + 8])) self.total_mystery1 = ( (body[data_offset + 9] << 32) + (body[data_offset + 10] << 16) + (body[data_offset + 11] << 8) + (body[data_offset + 12])) self.total_mystery2 = ( (body[data_offset + 13] << 32) + (body[data_offset + 14] << 16) + (body[data_offset + 15] << 8) + (body[data_offset + 16])) if body[9] != 0xFF: self.outdoor_temperature = None else: temp_integer = int((body[9] - 50) / 2) temp_decimal = ((body[13] & 0xF) * 0.1) if len(body) > 10 else 0 if body[9] > 49: self.outdoor_temperature = temp_integer + temp_decimal else: self.outdoor_temperature = temp_integer - temp_decimal Your outdoor_temperature code looks like the code in the AC (air conditioner) message.py, but it is not quite the same: if body[14] == 0xFF: self.outdoor_temperature = None else: temp_integer = int((body[14] - 50) / 2) temp_decimal = (((body[18] & 0xF0) >> 4) * 0.1) if len(body) > 20 else 0 if body[14] > 49: self.outdoor_temperature = temp_integer + temp_decimal else: self.outdoor_temperature = temp_integer - temp_decimal in that you started at byte 9 (the next byte after the ones used for the total energy parameters) but what if Midea 'always' have corresponding parameters in the same places in the messages, ie outdoor_temperature always starts at byte 14? I shall try this mod, ie start at byte 14 instead of 9, and let you know the result. I've missed the 0800 message so it won't be until after 0900 that I get a result. I also noticed your code has '& 0xF' rather than '& 0xF0' which I think are different numbers?  [quote data-userid="5046" data-postid="16513"] Seems the values from registries 143-144 and 145-146 are coresponding to your status message values: "total_energy_consumption" and "total_produced_energy" I suspect that "total_mistery" may represent combined bit values like in modbus registries 0,5,128 or 129 [/quote] I agree about addresses 143 to 146. These are core parameters in that they give rise to periodic energy used/produced figure, by subtraction, last 24 hour use = current total minus total this time yesterday etc. The 'total_mystery' values are just experimental additions, with different handling inside the python code at various times to try out different approaches. At the moment (see above example) they are processed using bitwise operators (echoing what is done to get the total energy figures) but 'a number << 32' produces a very large number eg in decimal 2 << 32 = 8589934592, hence the large numbers. Previously I had them just return the byte value from the message (eg self.total_mystery1 = body[data_offset + 19] ) but on the ones I tried no obviously recognisable data got returned, hence calling the labels total_mystery 1 and 2 until such time as they start to make sense.