|
| 1 | +"""Smart Thermostat Radiator""" |
| 2 | + |
| 3 | +import logging |
| 4 | + |
| 5 | +from ..const.climate import SmartThermostatRadiatorMode |
| 6 | + |
| 7 | +_LOGGER = logging.getLogger(__name__) |
| 8 | + |
| 9 | + |
| 10 | +def process_smart_thermostat_radiator( |
| 11 | + data: bytes | None, mfr_data: bytes | None |
| 12 | +) -> dict[str, bool | int | str]: |
| 13 | + """Process Smart Thermostat Radiator data.""" |
| 14 | + if mfr_data is None: |
| 15 | + return {} |
| 16 | + |
| 17 | + _seq_num = mfr_data[6] |
| 18 | + _isOn = bool(mfr_data[7] & 0b10000000) |
| 19 | + _battery = mfr_data[7] & 0b01111111 |
| 20 | + |
| 21 | + temp_data = mfr_data[8:11] |
| 22 | + target_decimal = (temp_data[0] >> 4) & 0x0F |
| 23 | + local_decimal = temp_data[0] & 0x0F |
| 24 | + |
| 25 | + local_sign = 1 if (temp_data[1] & 0x80) else -1 |
| 26 | + local_int = temp_data[1] & 0x7F |
| 27 | + local_temp = local_sign * (local_int + (local_decimal / 10)) |
| 28 | + |
| 29 | + target_sign = 1 if (temp_data[2] & 0x80) else -1 |
| 30 | + target_int = temp_data[2] & 0x7F |
| 31 | + target_temp = target_sign * (target_int + (target_decimal / 10)) |
| 32 | + |
| 33 | + last_mode = SmartThermostatRadiatorMode.get_mode_name((mfr_data[11] >> 4) & 0x0F) |
| 34 | + mode = SmartThermostatRadiatorMode.get_mode_name(mfr_data[11] & 0x07) |
| 35 | + |
| 36 | + need_update_temp = bool((mfr_data[12] >> 5) & 0x01) |
| 37 | + restarted = bool((mfr_data[12] >> 4) & 0x01) |
| 38 | + fault_code = (mfr_data[12] >> 1) & 0x07 |
| 39 | + door_open = bool(mfr_data[12] & 0x01) |
| 40 | + |
| 41 | + result = { |
| 42 | + "sequence_number": _seq_num, |
| 43 | + "isOn": _isOn, |
| 44 | + "battery": _battery, |
| 45 | + "temperature": local_temp, |
| 46 | + "target_temperature": target_temp, |
| 47 | + "mode": mode, |
| 48 | + "last_mode": last_mode, |
| 49 | + "need_update_temp": need_update_temp, |
| 50 | + "restarted": restarted, |
| 51 | + "fault_code": fault_code, |
| 52 | + "door_open": door_open, |
| 53 | + } |
| 54 | + |
| 55 | + _LOGGER.debug( |
| 56 | + "Smart Thermostat Radiator mfr data: %s, result: %s", mfr_data.hex(), result |
| 57 | + ) |
| 58 | + return result |
0 commit comments