# TODO: add some negative temps


# General tests
####################################################################################################
#

2023-11-14T13:42:37.787909 000 RQ --- 29:150155 32:134044 --:------ 31DA 001 00
2023-11-14T13:42:37.827784 076 RP --- 32:134044 29:150155 --:------ 31DA 029 00EF007FFF3D3A05320726071A05E8F80000181E1E0000EFEF067F0664

# All Not implemented / Null / Default values
2000-01-01T00:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFEFEF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None,                                      'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None,  'supply_temp': None,  'indoor_temp': None,  'outdoor_temp': None,   'bypass_position': None, 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0,    'post_heat': None, 'pre_heat': None, 'supply_flow': None,  'exhaust_flow': None,  'speed_capabilities': [], '_extra': '00'}

# All Implemented / Non-null / Non-Default values (min, zero/median, max for scalars) - NOTE: when max is 64, and not C8!
2000-01-01T01:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 000010018B0000F830F060E890CE00000000000000000000000000000000  # {'hvac_id': '00', 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': 0.0,  'air_quality_basis': 'voc',          'co2_level': 395,  'indoor_humidity': 0.0,  'outdoor_humidity': 0.0,  'exhaust_temp': -20.0, 'supply_temp': -40.0, 'indoor_temp': -60.0, 'outdoor_temp': -128.0, 'bypass_position': 0.0,  'exhaust_fan_speed': 0.0, 'supply_fan_speed': 0.0,   'remaining_mins': 0,    'post_heat': 0.0,  'pre_heat': 0.0,  'supply_flow': 0.0,   'exhaust_flow': 0.0,   'speed_capabilities': [], '_extra': '00'}
2000-01-01T02:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 006420018B00000000000000000000000000000000000000000000000000  # {'hvac_id': '00', 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': 0.5,  'air_quality_basis': 'co2',          'co2_level': 395,  'indoor_humidity': 0.0,  'outdoor_humidity': 0.0,  'exhaust_temp': 0.0,   'supply_temp': 0.0,   'indoor_temp': 0.0,   'outdoor_temp': 0.0,    'bypass_position': 0.0,  'exhaust_fan_speed': 0.0, 'supply_fan_speed': 0.0,   'remaining_mins': 0,    'post_heat': 0.0,  'pre_heat': 0.0,  'supply_flow': 0.0,   'exhaust_flow': 0.0,   'speed_capabilities': [], '_extra': '00'}

# Other
2000-01-01T03:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00C8400518646427102AF82EE031FFFFFFC800C8C83FFF64640AFF0AFF00  # {'hvac_id': '00', 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': 1.0,  'air_quality_basis': 'rel_humidity', 'co2_level': 1304, 'indoor_humidity': 1.0,  'outdoor_humidity': 1.0,  'exhaust_temp': 100.0, 'supply_temp': 110.0, 'indoor_temp': 120.0, 'outdoor_temp': None,   'bypass_position': 1.0, 'exhaust_fan_speed': 1.0, 'supply_fan_speed': 1.0,    'remaining_mins': None, 'post_heat': 0.5,  'pre_heat': 0.5,  'supply_flow': 28.15, 'exhaust_flow': 28.15, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'speed_6', 'speed_7', 'speed_8', 'speed_9', 'speed_10', 'auto_night', 'reserved', 'post_heater', 'pre_heater'], '_extra': '00'}
2000-01-01T03:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00C8400518646427102AF82EE031FFFFFFC800C8C83FFFC8C80AFF0AFF00  # {'hvac_id': '00', 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': 1.0,  'air_quality_basis': 'rel_humidity', 'co2_level': 1304, 'indoor_humidity': 1.0,  'outdoor_humidity': 1.0,  'exhaust_temp': 100.0, 'supply_temp': 110.0, 'indoor_temp': 120.0, 'outdoor_temp': None,   'bypass_position': 1.0, 'exhaust_fan_speed': 1.0, 'supply_fan_speed': 1.0,    'remaining_mins': None, 'post_heat': 1.0,  'pre_heat': 1.0,  'supply_flow': 28.15, 'exhaust_flow': 28.15, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'speed_6', 'speed_7', 'speed_8', 'speed_9', 'speed_10', 'auto_night', 'reserved', 'post_heater', 'pre_heater'], '_extra': '00'}

# NB: the difference between these (_has_ctl, src, dst, -:-) and above (_has_ctl, src, -:-, src)
# 32:134446 is an Orcon HRU HRC400
2022-11-20T08:32:06.904058 063 RP --- 32:134446 37:171685 --:------ 31DA 030 00EF007FFF2F1B0226069A07EEFFE4F8000038988F0000EFEF1F2420FC00  # {'hvac_id': '00', 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.47, 'outdoor_humidity': 0.27, 'exhaust_temp':  5.5, 'supply_temp': 16.9, 'indoor_temp': 20.30, 'outdoor_temp': -0.28, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': 0.0, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 1], 'exhaust_fan_speed': 0.760, 'supply_fan_speed': 0.715, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 79.72, 'exhaust_flow': 84.44, '_extra': '00'}
# From: https://gathering.tweakers.net/forum/list_messages/2135834/3
2023-01-09T19:04:53.429919 055 RQ --- 37:171685 32:134446 --:------ 31DA 001 00  # {}
2023-01-09T19:04:53.472970 063 RP --- 32:134446 37:171685 --:------ 31DA 030 00EF007FFF3A2B046A071C07C3038AF80000182F2F0000EFEF0A4E0A3300  # {'hvac_id': '00', 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.58, 'outdoor_humidity': 0.43, 'exhaust_temp': 11.3, 'supply_temp': 18.2, 'indoor_temp': 19.87, 'outdoor_temp':  9.06, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': 0.0, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.235, 'supply_fan_speed': 0.235, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 26.38, 'exhaust_flow': 26.11, '_extra': '00'}

# 22-08-21T10:23:55.127583 076 RP --- 32:134446 37:171685 --:------ 10E0 038 000001C8950B0A67FEFFFFFFFFFF150107E5564D442D3135524D533836000000000000000000  > sig: 0001C8950B0A67

# Test payload[2:6] - air_quality & air_quality_base (see also 12C8[2:6]):
####################################################################################################
# Null value is EF00 - No sensor present
2022-05-10T11:09:14.595814 079  I --- 32:134044 --:------ 32:134044 31DA 029 00EF007FFF343308980898088A0882F800001514140000EFEF05F50613    # {'hvac_id': '00', 'air_quality': None,                                       'co2_level': None, 'indoor_humidity': 0.52, 'outdoor_humidity': 0.51, 'exhaust_temp': 22.00, 'supply_temp': 22.00, 'indoor_temp': 21.86, 'outdoor_temp': 21.78, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': 0.0, 'fan_info': 'away', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.1, 'supply_fan_speed': 0.1, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 15.25, 'exhaust_flow': 15.55}
# Errors (some contrived)
2022-03-11T22:43:00.078143 085  I --- 18:126620 --:------ 18:126620 31DA 029 00F0000518EFEF057504EA079B04C24000C8024EFF0000EFEF43264326    # {'hvac_id': '00', 'air_quality_fault': 'short_circuit',                      'co2_level': 1304, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 13.97, 'supply_temp': 12.58, 'indoor_temp': 19.47, 'outdoor_temp': 12.18, 'speed_capabilities': ['low_med_high'], 'bypass_position': 1.0, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.39, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 171.9, 'exhaust_flow': 171.9}
2002-01-01T01:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00F1007FFFEFEF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'air_quality_fault': 'open_circuit',                       'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2002-01-01T02:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00F2007FFFEFEF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'air_quality_fault': 'unavailable',                        'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2002-01-01T03:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00F3007FFFEFEF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'air_quality_fault': 'out_of_range_high',                  'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2002-01-01T04:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00F4007FFFEFEF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'air_quality_fault': 'out_of_range_low',                   'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2002-01-01T05:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00F5007FFFEFEF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'air_quality_fault': 'unreliable',                         'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2002-01-01T15:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00FF007FFFEFEF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'air_quality_fault': 'invalid_FF00',                       'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
# TODO: find non-contrived aq_basis of 0x20 or 0x10
2022-02-09T08:24:07.934140 086  I --- 18:126620 --:------ 18:126620 31DA 029 00C84001ACEFEF05AA055E074D05114808C80000FF0000EFEF19641964    # {'hvac_id': '00', 'air_quality': 1.000, 'air_quality_basis': 'rel_humidity', 'co2_level': 428, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 14.50, 'supply_temp': 13.74, 'indoor_temp': 18.69, 'outdoor_temp': 12.97, 'speed_capabilities': ['low_med_high', 'auto', 'auto_night'], 'bypass_position': 1.0, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.0, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 65.0, 'exhaust_flow': 65.0}
2022-02-09T09:00:00.000000 ...  I --- 18:126620 --:------ 18:126620 31DA 029 00C82001ACEFEF05AA055E074D05114808C80000FF0000EFEF19641964    # {'hvac_id': '00', 'air_quality': 1.000, 'air_quality_basis': 'co2',          'co2_level': 428, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 14.50, 'supply_temp': 13.74, 'indoor_temp': 18.69, 'outdoor_temp': 12.97, 'speed_capabilities': ['low_med_high', 'auto', 'auto_night'], 'bypass_position': 1.0, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.0, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 65.0, 'exhaust_flow': 65.0}
2022-02-09T10:00:00.000000 ...  I --- 18:126620 --:------ 18:126620 31DA 029 00C81001ACEFEF05AA055E074D05114808C80000FF0000EFEF19641964    # {'hvac_id': '00', 'air_quality': 1.000, 'air_quality_basis': 'voc',          'co2_level': 428, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 14.50, 'supply_temp': 13.74, 'indoor_temp': 18.69, 'outdoor_temp': 12.97, 'speed_capabilities': ['low_med_high', 'auto', 'auto_night'], 'bypass_position': 1.0, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.0, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 65.0, 'exhaust_flow': 65.0}
2022-02-10T08:00:00.000000 ...  I --- 18:126620 --:------ 18:126620 31DA 029 00004001ACEFEF05AA055E074D05114808C80000FF0000EFEF19641964    # {'hvac_id': '00', 'air_quality': 0.000, 'air_quality_basis': 'rel_humidity', 'co2_level': 428, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 14.50, 'supply_temp': 13.74, 'indoor_temp': 18.69, 'outdoor_temp': 12.97, 'speed_capabilities': ['low_med_high', 'auto', 'auto_night'], 'bypass_position': 1.0, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.0, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 65.0, 'exhaust_flow': 65.0}
2022-02-10T09:00:00.000000 ...  I --- 18:126620 --:------ 18:126620 31DA 029 00002001ACEFEF05AA055E074D05114808C80000FF0000EFEF19641964    # {'hvac_id': '00', 'air_quality': 0.000, 'air_quality_basis': 'co2',          'co2_level': 428, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 14.50, 'supply_temp': 13.74, 'indoor_temp': 18.69, 'outdoor_temp': 12.97, 'speed_capabilities': ['low_med_high', 'auto', 'auto_night'], 'bypass_position': 1.0, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.0, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 65.0, 'exhaust_flow': 65.0}
2022-02-10T10:00:00.000000 ...  I --- 18:126620 --:------ 18:126620 31DA 029 00001001ACEFEF05AA055E074D05114808C80000FF0000EFEF19641964    # {'hvac_id': '00', 'air_quality': 0.000, 'air_quality_basis': 'voc',          'co2_level': 428, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 14.50, 'supply_temp': 13.74, 'indoor_temp': 18.69, 'outdoor_temp': 12.97, 'speed_capabilities': ['low_med_high', 'auto', 'auto_night'], 'bypass_position': 1.0, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.0, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 65.0, 'exhaust_flow': 65.0}
# Actual payloads (wrong dates) between 0 & 100%
2002-02-02T04:50:01.616000 080  I --- 37:261128 --:------ 37:261128 31DA 029 00A74005133AEF7FFF7FFF7FFF7FFFF808EF1805000000EFEF7FFF7FFF    # {'hvac_id': '00', 'air_quality': 0.835, 'air_quality_basis': 'rel_humidity', 'co2_level': 1299, 'indoor_humidity': 0.58, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.025, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2002-02-02T04:50:01.717000 ...  I --- 37:261128 --:------ 37:261128 12C8 003 00A740                                                        # {                 'air_quality': 0.835, 'air_quality_basis': 'rel_humidity'}
2002-02-02T04:50:31.443000 ...  I --- 37:261128 --:------ 37:261128 31DA 029 007A4005993AEF7FFF7FFF7FFF7FFFF808EF1807000000EFEF7FFF7FFF    # {'hvac_id': '00', 'air_quality': 0.610, 'air_quality_basis': 'rel_humidity', 'co2_level': 1433, 'indoor_humidity': 0.58, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.035, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2002-02-02T04:50:31.544000 ...  I --- 37:261128 --:------ 37:261128 12C8 003 007A40                                                        # {                 'air_quality': 0.610, 'air_quality_basis': 'rel_humidity'}
2002-02-10T04:51:40.262000 ...  I --- 37:261128 --:------ 37:261128 31DA 029 009540054B3AEF7FFF7FFF7FFF7FFFF808EF180E000000EFEF7FFF7FFF    # {'hvac_id': '00', 'air_quality': 0.745, 'air_quality_basis': 'rel_humidity', 'co2_level': 1355, 'indoor_humidity': 0.58, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.07, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2002-02-02T04:51:41.192000 ...  I --- 37:261128 --:------ 37:261128 12C8 003 009540                                                        # {                 'air_quality': 0.745, 'air_quality_basis': 'rel_humidity'}



# Test payload[6:10] - co2_level (see also 1298[6:10]):
####################################################################################################
# Null value is 7FFF - No sensor present
#
# Errors (contrived)
2006-01-01T00:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF0080FFEFEF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'co2_level_fault': 'short_circuit',     'air_quality': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2006-01-01T01:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF0081FFEFEF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'co2_level_fault': 'open_circuit',      'air_quality': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2006-01-01T02:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF008200EFEF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'co2_level_fault': 'unavailable',       'air_quality': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2006-01-01T03:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF0083FFEFEF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'co2_level_fault': 'out_of_range_high', 'air_quality': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2006-01-01T04:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF008400EFEF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'co2_level_fault': 'out_of_range_low',  'air_quality': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2006-01-01T05:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF0085FFEFEF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'co2_level_fault': 'unreliable',        'air_quality': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2006-01-01T15:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF008F00EFEF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'co2_level_fault': 'invalid_8F00',      'air_quality': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
# low/high values for sensor
2022-07-04T16:41:13.884504 ...  I --- 37:201960 --:------ 37:201960 31DA 030 00C840018B2BEF7FFF7FFF7FFF7FFFF808EF9819000000EFEF7FFF7FFF00  # {'hvac_id': '00', 'co2_level': 395,                       'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'indoor_humidity': 0.43, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'fan_info': 'auto', '_unknown_fan_info_flags': [1, 0, 0], 'exhaust_fan_speed': 0.125, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2022-07-04T16:31:12.498230 ...  I --- 37:201960 --:------ 37:201960 31DA 030 00C840018D2BEF7FFF7FFF7FFF7FFFF808EF9819000000EFEF7FFF7FFF00  # {'hvac_id': '00', 'co2_level': 397,                       'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'indoor_humidity': 0.43, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'fan_info': 'auto', '_unknown_fan_info_flags': [1, 0, 0], 'exhaust_fan_speed': 0.125, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2022-07-04T14:09:03.810575 ...  I --- 37:237600 --:------ 37:237600 31DA 029 00C84004B2EFEF7FFF7FFF7FFF7FFFF808EF831F000000EFEF7FFF7FFF    # {'hvac_id': '00', 'co2_level': 1202,                      'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'fan_info': 'speed 3, high', '_unknown_fan_info_flags': [1, 0, 0], 'exhaust_fan_speed': 0.155, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2022-03-11T22:42:49.786134 ...  I --- 18:126620 --:------ 18:126620 31DA 029 00F0000518EFEF057504EA079B04C24000C8014EFF0000EFEF43264326    # {'hvac_id': '00', 'co2_level': 1304,                      'air_quality_fault': 'short_circuit',                    'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 13.97, 'supply_temp': 12.58, 'indoor_temp': 19.47, 'outdoor_temp': 12.18, 'speed_capabilities': ['low_med_high'], 'bypass_position': 1.0, 'fan_info': 'speed 1, low', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.39, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 171.9, 'exhaust_flow': 171.9}



# Test payload[10:12] - indoor humidity (see also 12A0[2:12]):
####################################################################################################
# Null value is EF - No sensor present
2021-02-12T17:29:26.939678 ...  I --- --:------ --:------ 20:008749 31DA 029 00EF007FFFEFEF7FFF7FFF7FFF7FFFF000EF0162000000EFEF7FFF7FFF    # {'hvac_id': '00', 'indoor_humidity': None, 'indoor_temp': None,  'air_quality': None, 'co2_level': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'bypass_position': None, 'fan_info': 'speed 1, low', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.49, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
# Errors (contrived)
2010-01-01T00:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFF0EF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'indoor_humidity_fault': 'short_circuit',     'air_quality': None, 'co2_level': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2010-01-01T01:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFF1EF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'indoor_humidity_fault': 'open_circuit',      'air_quality': None, 'co2_level': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2010-01-01T02:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFF2EF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'indoor_humidity_fault': 'unavailable',       'air_quality': None, 'co2_level': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2010-01-01T03:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFF3EF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'indoor_humidity_fault': 'out_of_range_high', 'air_quality': None, 'co2_level': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2010-01-01T04:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFF4EF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'indoor_humidity_fault': 'out_of_range_low',  'air_quality': None, 'co2_level': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2010-01-01T05:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFF5EF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'indoor_humidity_fault': 'unreliable',        'air_quality': None, 'co2_level': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2010-01-01T15:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFFFEF7FFF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'indoor_humidity_fault': 'invalid_FF',        'air_quality': None, 'co2_level': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
# is not None, c.f. concurrent 12A0 (max C8, or max 64?):
2022-05-30T10:30:04.990606 ...  I --- 32:155617 --:------ 32:155617 31DA 030 00EF007FFF2B21053207D008320509F0000002727E0000EFEF1B5818BD00  # {'hvac_id': '00', 'indoor_humidity': 0.43, 'indoor_temp': 20.98, 'air_quality': None, 'co2_level': None, 'outdoor_humidity': 0.33, 'exhaust_temp': 13.3, 'supply_temp': 20.0, 'outdoor_temp': 12.89, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'bypass_position': 0.0, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.57, 'supply_fan_speed': 0.63, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 70.0, 'exhaust_flow': 63.33, '_extra': '00'}
2022-05-30T10:32:34.966709 ...  I --- 32:155617 --:------ 32:155617 12A0 007 002B08337FFF00                                                # {                 'indoor_humidity': 0.43, 'temperature': 20.99, 'dewpoint_temp': None}
2022-06-05T15:24:46.166073 ...  I --- 32:155617 --:------ 32:155617 31DA 030 00EF007FFF3F4C07BC08AC08C707B7F0000002727E0000EFEF1B5818BD00  # {'hvac_id': '00', 'indoor_humidity': 0.63, 'indoor_temp': 22.47, 'air_quality': None, 'co2_level': None, 'outdoor_humidity': 0.76, 'exhaust_temp': 19.8, 'supply_temp': 22.2, 'outdoor_temp': 19.75, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'bypass_position': 0.0, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.57, 'supply_fan_speed': 0.63, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 70.0, 'exhaust_flow': 63.33, '_extra': '00'}
2022-06-05T15:31:56.149151 ...  I --- 32:155617 --:------ 32:155617 12A0 007 003F08C67FFF00                                                # {                 'indoor_humidity': 0.63, 'temperature': 22.46, 'dewpoint_temp': None}



# Test payload[12:14] - outdoor humidity (see also 1280[2:12]):
####################################################################################################
# Null value is EF - No sensor present
2021-02-12T17:29:26.939678 ...  I --- --:------ --:------ 20:008749 31DA 029 00EF007FFFEFEF7FFF7FFF7FFF7FFFF000EF0162000000EFEF7FFF7FFF    # {'hvac_id': '00', 'outdoor_humidity': None,                'outdoor_temp': None,  'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'bypass_position': None, 'fan_info': 'speed 1, low', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.49, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
# Fault
2022-08-16T02:06:01.833524 ...  I --- 32:155617 --:------ 32:155617 31DA 030 00EF007FFF3DF208520938096D084DF800001834460000EFEF0F300B4800  # {'hvac_id': '00', 'outdoor_humidity_fault': 'unavailable', 'outdoor_temp': 21.25, 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.61, 'exhaust_temp': 21.3, 'supply_temp': 23.6, 'indoor_temp': 24.13, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': 0.0, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.26, 'supply_fan_speed': 0.35, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 38.88, 'exhaust_flow': 28.88, '_extra': '00'}



# Test payload[14:18, 18:22, 22:26, 26:30] - exhaust temp (and 3 more):
####################################################################################################
# Null value is 7FFF - No sensor present
2021-02-12T17:29:06.941269 075  I --- --:------ --:------ 20:008749 31DA 029 00EF007FFFEFEF7FFF7FFF7FFF7FFFF000EF015C000000EFEF7FFF7FFF    # {'hvac_id': '00', 'exhaust_temp': None,                      'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'bypass_position': None, 'fan_info': 'speed 1, low', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.46, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2022-07-04T17:12:21.076024 ...  I --- 37:087793 --:------ 37:087793 31DA 030 00EF007FFF2CEF7FFF7FFF7FFF7FFFF800EF0128000000EFEF7FFF7FFF00  # {'hvac_id': '00', 'exhaust_temp': None,                      'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.44, 'outdoor_humidity': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': None, 'fan_info': 'speed 1, low', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.2, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
# Errors (contrived) (0x954E == -273.15)
2014-01-01T00:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFEFEF80007FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'exhaust_temp_fault': 'short_circuit',     'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2014-01-01T01:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFEFEF81FF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'exhaust_temp_fault': 'open_circuit',      'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2014-01-01T02:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFEFEF82007FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'exhaust_temp_fault': 'unavailable',       'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2014-01-01T03:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFEFEF83FF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'exhaust_temp_fault': 'out_of_range_high', 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2014-01-01T04:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFEFEF84007FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'exhaust_temp_fault': 'out_of_range_low',  'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2014-01-01T05:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFEFEF85FF7FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'exhaust_temp_fault': 'unreliable',        'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2014-01-01T15:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFEFEF8F007FFF7FFF7FFF0000EF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'exhaust_temp_fault': 'invalid_8F00',      'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'bypass_position': None, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
# TODO: Fault codes (defined as  < -273.0), probably only a few from value[:2] == "80" (see co2_level):
2000-01-01T01:00:00.000000 ...  I --- 37:087793 --:------ 37:087793 31DA 030 00EF007FFF2CEF80007FFF7FFF7FFFF800EF0128000000EFEF7FFF7FFF00  # {'hvac_id': '00', 'exhaust_temp_fault': 'short_circuit',     'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.44, 'outdoor_humidity': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': None, 'fan_info': 'speed 1, low', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.2, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2000-01-01T02:00:00.000000 ...  I --- 37:087793 --:------ 37:087793 31DA 030 00EF007FFF2CEF955B7FFF7FFF7FFFF800EF0128000000EFEF7FFF7FFF00  # {'hvac_id': '00', 'exhaust_temp_fault': 'unreliable',        'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.44, 'outdoor_humidity': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': None, 'fan_info': 'speed 1, low', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.2, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2000-01-01T03:00:00.000000 ...  I --- 37:087793 --:------ 37:087793 31DA 030 00EF007FFF2CEF955C7FFF7FFF7FFFF800EF0128000000EFEF7FFF7FFF00  # {'hvac_id': '00', 'exhaust_temp_fault': 'unreliable',        'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.44, 'outdoor_humidity': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': None, 'fan_info': 'speed 1, low', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.2, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
# All temp sensors present (BTW, 1290 only seen as OTB|1290 so far)
2022-08-16T02:06:01.833524 ...  I --- 32:155617 --:------ 32:155617 31DA 030 00EF007FFF3DF208520938096D084DF800001834460000EFEF0F300B4800  # {'hvac_id': '00', 'exhaust_temp': 21.3,                      'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.61, 'outdoor_humidity_fault': 'unavailable', 'supply_temp': 23.6, 'indoor_temp': 24.13, 'outdoor_temp': 21.25, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': 0.0, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.26, 'supply_fan_speed': 0.35, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 38.88, 'exhaust_flow': 28.88, '_extra': '00'}



# Test payload[30:34] - speed capability (see also fan_mode):
####################################################################################################
# Null value is ??
#
# 0002 = post_heater (here, payload[46:48] == "00")
2021-10-12T05:27:28.547945 ...  I --- 30:079129 --:------ 30:079129 31DA 029 21EF00020136EF7FFF7FFF7FFF7FFF0002EF18FFFF000000EF7FFF7FFF    # {'hvac_id': '21', 'speed_capabilities': ['post_heater'],                                                 'fan_info': 'auto',            '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 513,  'indoor_humidity': 0.54, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'bypass_position': None, 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2021-07-10T10:48:07.577385 ...  I --- 30:082155 --:------ 30:082155 31DA 029 21EF007FFF41EF7FFF7FFF7FFF7FFF0002EF18FFFF000000EF7FFF7FFF    # {'hvac_id': '21', 'speed_capabilities': ['post_heater'],                                                 'fan_info': 'auto',            '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.65, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'bypass_position': None, 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2021-10-12T05:27:00.792393 ...  I --- 30:079129 --:------ 30:079129 31DA 029 21EF00020136EF7FFF7FFF7FFF7FFF0002EF18FFFF000000EF7FFF7FFF    # {'hvac_id': '21', 'speed_capabilities': ['post_heater'],                                                 'fan_info': 'auto',            '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 513,  'indoor_humidity': 0.54, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'bypass_position': None, 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2021-07-10T10:48:18.703601 ...  I --- 30:082155 --:------ 30:082155 31DA 029 21EF007FFF41EF7FFF7FFF7FFF7FFF0002EF18FFFF000000EF7FFF7FFF    # {'hvac_id': '21', 'speed_capabilities': ['post_heater'],                                                 'fan_info': 'auto',            '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.65, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'bypass_position': None, 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2021-07-10T10:47:47.072184 ...  I --- 30:082155 --:------ 30:082155 31DA 029 21EF007FFF41EF7FFF7FFF7FFF7FFF0002EF18FFFF000000EF7FFF7FFF    # {'hvac_id': '21', 'speed_capabilities': ['post_heater'],                                                 'fan_info': 'auto',            '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.65, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'bypass_position': None, 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2021-01-20T12:07:42.768567 ...  I --- 30:082155 --:------ 30:082155 31DA 029 21EF007FFF38EF7FFF7FFF7FFF7FFF0002EF18FFFF000000EF7FFF7FFF    # {'hvac_id': '21', 'speed_capabilities': ['post_heater'],                                                 'fan_info': 'auto',            '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.56, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'bypass_position': None, 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
# 4000 = low_med_high               # TODO: same device_id as below!!!
2022-03-11T22:43:00.224378 ... RP --- 18:126620 21:038634 --:------ 31DA 029 00F0000518EFEF057504EA079B04C24000C8024EFF0000EFEF43264326    # {'hvac_id': '00', 'speed_capabilities': ['low_med_high'],                                                'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality_fault': 'short_circuit', 'co2_level': 1304, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 13.97, 'supply_temp': 12.58, 'indoor_temp': 19.47, 'outdoor_temp': 12.18, 'bypass_position': 1.0, 'exhaust_fan_speed': 0.39, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 171.9, 'exhaust_flow': 171.9}
# 4808 = low_med_high, auto, night  # TODO: same device_id as below!!!
2022-03-11T22:43:01.478048 ... RP --- 18:126620 21:038634 --:------ 31DA 029 00C8400518EFEF056204DC079B04B24808C8011CFF0000EFEF3B063B06    # {'hvac_id': '00', 'speed_capabilities': ['low_med_high', 'auto', 'auto_night'],                          'fan_info': 'speed 1, low',    '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 1304, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 13.78, 'supply_temp': 12.44, 'indoor_temp': 19.47, 'outdoor_temp': 12.02, 'bypass_position': 1.0 ,'exhaust_fan_speed': 0.14, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 151.1, 'exhaust_flow': 151.1}
# F000 = off, low_med_high, timer, boost
2021-02-12T17:28:57.159946 ...  I --- --:------ --:------ 20:008749 31DA 029 00EF007FFFEFEF7FFF7FFF7FFF7FFFF000EF0201000000EFEF7FFF7FFF    # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'],                       'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'bypass_position': None, 'exhaust_fan_speed': 0.005, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2022-07-04T15:31:17.405902 ...  I --- 20:043678 --:------ 20:043678 31DA 029 00EF007FFFEFEF7FFF7FFF7FFF7FFFF000EF0250000000EFEF7FFF7FFF    # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'],                       'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'bypass_position': None, 'exhaust_fan_speed': 0.4, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2022-06-06T19:14:48.163998 ...  I --- 32:155617 --:------ 32:155617 31DA 030 00EF007FFF38310708088E08C106F7F0000002727E0000EFEF1B7318BD00  # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'],                       'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.56, 'outdoor_humidity': 0.49, 'exhaust_temp': 18.0, 'supply_temp': 21.9, 'indoor_temp': 22.41, 'outdoor_temp': 17.83, 'bypass_position': 0.0, 'exhaust_fan_speed': 0.57, 'supply_fan_speed': 0.63, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 70.27, 'exhaust_flow': 63.33, '_extra': '00'}
2022-06-06T19:20:25.141892 ...  I --- 32:153258 --:------ 32:153258 31DA 030 00EF007FFF372E074408FC08ED0715F000000296740000EFEF12C2186700  # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'],                       'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.55, 'outdoor_humidity': 0.46, 'exhaust_temp': 18.6, 'supply_temp': 23.0, 'indoor_temp': 22.85, 'outdoor_temp': 18.13, 'bypass_position': 0.0, 'exhaust_fan_speed': 0.75, 'supply_fan_speed': 0.58, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 48.02, 'exhaust_flow': 62.47, '_extra': '00'}
2022-08-07T09:50:18.838695 ...  I --- 32:153073 --:------ 32:153073 31DA 030 00EF007FFF3C3508200848083D0852F0000003B4B40000EFEF1D491D4900  # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'],                       'fan_info': 'speed 3, high',   '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.60, 'outdoor_humidity': 0.53, 'exhaust_temp': 20.8, 'supply_temp': 21.2, 'indoor_temp': 21.09, 'outdoor_temp': 21.30, 'bypass_position': 0.0, 'exhaust_fan_speed': 0.9, 'supply_fan_speed': 0.9, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 74.97, 'exhaust_flow': 74.97, '_extra': '00'}
# F001 = off, low_med_high, timer, boost, pre_heater (here, payload[48:50] == "00")
#          11:03:39.740000 ...  I --- 32:132125 --:------ 32:132125 31DA 030 00EF007FFF2612035C074E07850495F001001834340000EF000E360E1B00
# F002 - off, low_med_high, timer, boost, post_heater
2024-06-21T04:49:59.398298 ...  I --- 32:137185 --:------ 32:137185 31DA 030 00EF007FFFEFEF086C07CC09380730F002A0023440000068EF7FFF7FFF00  # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'post_heater'], 'exhaust_fan_speed': 0.26, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 21.56, 'supply_temp': 19.96, 'indoor_temp': 23.60, 'outdoor_temp': 18.40, 'bypass_position': 0.80, 'supply_fan_speed': 0.32, 'remaining_mins': 0, 'post_heat': 0.52, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
# F800 = off, low_med_high, timer, boost, auto
2022-07-04T16:50:53.947284 ...  I --- 37:231842 --:------ 37:231842 31DA 029 00EF007FFF35EF7FFF7FFF7FFF7FFFF800EF0112000000EFEF7FFF7FFF    # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'],               'fan_info': 'speed 1, low',    '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.53, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None,  'outdoor_temp': None,  'bypass_position': None, 'exhaust_fan_speed': 0.090, 'supply_fan_speed': 0.00, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2022-07-04T16:52:18.386983 ...  I --- 37:087793 --:------ 37:087793 31DA 030 00EF007FFF2BEF7FFF7FFF7FFF7FFFF800EF0129000000EFEF7FFF7FFF00  # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'],               'fan_info': 'speed 1, low',    '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.43, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None,  'outdoor_temp': None,  'bypass_position': None, 'exhaust_fan_speed': 0.205, 'supply_fan_speed': 0.00, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2022-08-18T23:36:09.416613 ...  I --- 32:143293 --:------ 32:143293 31DA 030 00EF007FFF473D083E0960097A07CDF800001822220000EFEF0760076000  # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'],               'fan_info': 'auto',            '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.71, 'outdoor_humidity': 0.61, 'exhaust_temp': 21.1, 'supply_temp': 24.0, 'indoor_temp': 24.26, 'outdoor_temp': 19.97, 'bypass_position': 0.00, 'exhaust_fan_speed': 0.170, 'supply_fan_speed': 0.17, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 18.88, 'exhaust_flow': 18.88, '_extra': '00'}
2022-08-18T23:38:58.802908 ...  I --- 32:143479 --:------ 32:143479 31DA 030 00EF007FFF483F08A2091A0902086EF800001822220000EFEF0760076000  # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'],               'fan_info': 'auto',            '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.72, 'outdoor_humidity': 0.63, 'exhaust_temp': 22.1, 'supply_temp': 23.3, 'indoor_temp': 23.06, 'outdoor_temp': 21.58, 'bypass_position': 0.00, 'exhaust_fan_speed': 0.170, 'supply_fan_speed': 0.17, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 18.88, 'exhaust_flow': 18.88, '_extra': '00'}
2022-05-10T11:08:51.537761 ...  I --- 32:134044 --:------ 32:134044 31DA 029 00EF007FFF343308980898088B0880F80000011E1E0000EFEF22F017F8    # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'],               'fan_info': 'speed 1, low',    '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.52, 'outdoor_humidity': 0.51, 'exhaust_temp': 22.0, 'supply_temp': 22.0, 'indoor_temp': 21.87, 'outdoor_temp': 21.76, 'bypass_position': 0.00, 'exhaust_fan_speed': 0.150, 'supply_fan_speed': 0.15, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 89.44, 'exhaust_flow': 61.36}
# F808 - off, low_med_high, timer, boost, auto, night
2022-07-04T17:17:12.886441 ...  I --- 37:239374 --:------ 37:239374 31DA 029 00EF007FFF30EF7FFF7FFF7FFF7FFFF808EF83C7000000EFEF7FFF7FFF    # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'fan_info': 'speed 3, high',   '_unknown_fan_info_flags': [1, 0, 0], 'air_quality': None,                                     'co2_level': None, 'indoor_humidity': 0.48, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'bypass_position': None, 'exhaust_fan_speed': 0.995, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2022-07-04T17:17:37.748037 ...  I --- 37:238124 --:------ 37:238124 31DA 029 00C84001D231EF7FFF7FFF7FFF7FFFF808EF0102000000EFEF7FFF7FFF    # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'fan_info': 'speed 1, low',    '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 466,  'indoor_humidity': 0.49, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'bypass_position': None, 'exhaust_fan_speed': 0.010, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2022-07-04T17:19:19.886950 ...  I --- 37:242903 --:------ 37:242903 31DA 029 00C840021030EF7FFF7FFF7FFF7FFFF808EF0117000000EFEF7FFF7FFF    # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'fan_info': 'speed 1, low',    '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 528,  'indoor_humidity': 0.48, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'bypass_position': None, 'exhaust_fan_speed': 0.115, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2022-07-04T17:19:42.551539 ...  I --- 37:237614 --:------ 37:237614 31DA 029 00C840023538EF7FFF7FFF7FFF7FFFF808EF011B000000EFEF7FFF7FFF    # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'fan_info': 'speed 1, low',    '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 565,  'indoor_humidity': 0.56, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'bypass_position': None, 'exhaust_fan_speed': 0.135, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2022-07-04T17:19:52.960407 ...  I --- 37:238109 --:------ 37:238109 31DA 029 00C84001C02EEF7FFF7FFF7FFF7FFFF808EF0101000000EFEF7FFF7FFF    # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'fan_info': 'speed 1, low',    '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 448,  'indoor_humidity': 0.46, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'bypass_position': None, 'exhaust_fan_speed': 0.005, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2022-02-04T19:52:10.155806 ...  I --- 37:261128 --:------ 37:261128 31DA 029 00C84003973EEF7FFF7FFF7FFF7FFFF808EF03C8000000EFEF7FFF7FFF    # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'fan_info': 'speed 3, high',   '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 919,  'indoor_humidity': 0.62, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'bypass_position': None, 'exhaust_fan_speed': 1.000, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2022-02-04T20:22:34.842394 ... RP --- 37:261128 37:258565 --:------ 31DA 029 00C84003A734EF7FFF7FFF7FFF7FFFF808EF03C8000000EFEF7FFF7FFF    # {'hvac_id': '00', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'fan_info': 'speed 3, high',   '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 935,  'indoor_humidity': 0.52, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'bypass_position': None, 'exhaust_fan_speed': 1.000, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}

# TODO - these are not internally consistent
#          08:04:30.321000 ...  I --- 18:126620 --:------ 18:126620 31DA 029 00C84001C0EFEF053704EE077404A54808C80000FF0000EFEF14461446    < AssertionError({'hvac_id': '00', 'fan_info': 'off',  'speed_capabilities': ['low_med_high', 'auto', 'auto night']})
#          05:27:00.792000 ...  I --- 30:079129 --:------ 30:079129 31DA 029 21EF00020136EF7FFF7FFF7FFF7FFF0002EF18FFFF000000EF7FFF7FFF    < AssertionError({'hvac_id': '21', 'fan_info': 'auto', 'speed_capabilities': ['post_heater']})
#          12:07:42.768000 ...  I --- 30:082155 --:------ 30:082155 31DA 029 21EF007FFF38EF7FFF7FFF7FFF7FFF0002EF18FFFF000000EF7FFF7FFF    < AssertionError({'hvac_id': '21', 'fan_info': 'auto', 'speed_capabilities': ['post_heater']})
#          11:03:39.740000 ...  I --- 32:132125 --:------ 32:132125 31DA 030 00EF007FFF2612035C074E07850495F001001834340000EF000E360E1B00  < AssertionError({'hvac_id': '00', 'fan_info': 'auto', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'pre_heater'], '_extra': '00'})
#          23:30:08.709000 ...  I --- 32:155617 --:------ 32:155617 31DA 030 00EF007FFF2F2A085208E808F20843F000001834460000EFEF0F300B4800  < AssertionError({'hvac_id': '00', 'fan_info': 'auto', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], '_extra': '00'})
#          21:36:43.490000 ...  I --- 32:155617 --:------ 32:155617 31DA 030 00EF007FFF2C2709740942091C0971F000001514180000EFEF0535043B00  < AssertionError({'hvac_id': '00', 'fan_info': 'away', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], '_extra': '00'})
#          13:52:34.580000 ...  I --- 32:153258 --:------ 32:153258 31DA 030 00EF007FFF3F3C09CE09A6095A0990F800001514140000EFEF033E035A00  < AssertionError({'hvac_id': '00', 'fan_info': 'away', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], '_extra': '00'})
#          11:09:14.595000 ...  I --- 32:134044 --:------ 32:134044 31DA 029 00EF007FFF343308980898088A0882F800001514140000EFEF05F50613    < AssertionError({'hvac_id': '00', 'fan_info': 'away', 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto']})



# Test payload[34:36] - bypass position (as a % open, usually - but not always 0% or 100%):
####################################################################################################
# Null value is EF
2021-02-12T17:28:57.159946 ...  I --- --:------ --:------ 20:008749 31DA 029 00EF007FFFEFEF7FFF7FFF7FFF7FFFF000EF0201000000EFEF7FFF7FFF    # {'hvac_id': '00', 'bypass_position': None,                   'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.005, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
# Errors (contrived)
2034-01-01T00:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFEFEF7FFF7FFF7FFF7FFF0000F000FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'bypass_position_fault': 'open_circuit',   'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2034-01-01T01:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFEFEF7FFF7FFF7FFF7FFF0000F100FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'bypass_position_fault': 'short_circuit',  'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2034-01-01T02:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFEFEF7FFF7FFF7FFF7FFF0000F200FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'bypass_position_fault': 'unavailable',    'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2034-01-01T12:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFEFEF7FFF7FFF7FFF7FFF0000FC00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'bypass_position_fault': 'invalid_FC',     'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2034-01-01T13:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFEFEF7FFF7FFF7FFF7FFF0000FD00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'bypass_position_fault': 'stuck_valve',    'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2034-01-01T14:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFEFEF7FFF7FFF7FFF7FFF0000FE00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'bypass_position_fault': 'stuck_actuator', 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2034-01-01T15:00:00.000000 ...  I --- 37:123456 --:------ 37:123456 31DA 030 00EF007FFFEFEF7FFF7FFF7FFF7FFF0000FF00FFFF0000EFEF7FFF7FFF00  # {'hvac_id': '00', 'bypass_position_fault': 'other_fault',    'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': [], 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
# closed, open
2022-05-10T11:09:14.595814 ...  I --- 32:134044 --:------ 32:134044 31DA 029 00EF007FFF343308980898088A0882F800001514140000EFEF05F50613    # {'hvac_id': '00', 'bypass_position': 0.000,                  'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.52, 'outdoor_humidity': 0.51, 'exhaust_temp': 22.0, 'supply_temp': 22.0, 'indoor_temp': 21.86, 'outdoor_temp': 21.78, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'fan_info': 'away', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.1, 'supply_fan_speed': 0.1, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 15.25, 'exhaust_flow': 15.55}
2022-03-11T22:43:00.078143 ...  I --- 18:126620 --:------ 18:126620 31DA 029 00F0000518EFEF057504EA079B04C24000C8024EFF0000EFEF43264326    # {'hvac_id': '00', 'bypass_position': 1.000,                  'air_quality_fault': 'short_circuit', 'co2_level': 1304, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 13.97, 'supply_temp': 12.58, 'indoor_temp': 19.47, 'outdoor_temp': 12.18, 'speed_capabilities': ['low_med_high'], 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.39, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 171.9, 'exhaust_flow': 171.9}
# others
2022-06-19T21:15:39.055941 ...  I --- 32:155617 --:------ 32:155617 31DA 030 00EF007FFF353406D6089808E006A8F000000264640000EFEF15CF159700  # {'hvac_id': '00', 'bypass_position': 0.000,                  'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.53, 'outdoor_humidity': 0.52, 'exhaust_temp': 17.5, 'supply_temp': 22.0, 'indoor_temp': 22.72, 'outdoor_temp': 17.04, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.5, 'supply_fan_speed': 0.5, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 55.83, 'exhaust_flow': 55.27, '_extra': '00'}
2022-06-19T21:15:49.151801 ...  I --- 32:155617 --:------ 32:155617 31DA 030 00EF007FFF353406D6088E08E206A8F000390264640000EFEF15B3167600  # {'hvac_id': '00', 'bypass_position': 0.285,                  'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.53, 'outdoor_humidity': 0.52, 'exhaust_temp': 17.5, 'supply_temp': 21.9, 'indoor_temp': 22.74, 'outdoor_temp': 17.04, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.5, 'supply_fan_speed': 0.5, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 55.55, 'exhaust_flow': 57.5, '_extra': '00'}
2022-06-19T21:15:59.067646 ...  I --- 32:155617 --:------ 32:155617 31DA 030 00EF007FFF353406E0089808E006A9F000980264640000EFEF1597157C00  # {'hvac_id': '00', 'bypass_position': 0.760,                  'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.53, 'outdoor_humidity': 0.52, 'exhaust_temp': 17.6, 'supply_temp': 22.0, 'indoor_temp': 22.72, 'outdoor_temp': 17.05, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.5, 'supply_fan_speed': 0.5, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 55.27, 'exhaust_flow': 55.0, '_extra': '00'}
2022-06-19T21:16:09.063478 ...  I --- 32:155617 --:------ 32:155617 31DA 030 00EF007FFF353406EA08A208E106ABF000C80272780000EFEF16C9160600  # {'hvac_id': '00', 'bypass_position': 1.000,                  'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.53, 'outdoor_humidity': 0.52, 'exhaust_temp': 17.7, 'supply_temp': 22.1, 'indoor_temp': 22.73, 'outdoor_temp': 17.07, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.57, 'supply_fan_speed': 0.6, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 58.33, 'exhaust_flow': 56.38, '_extra': '00'}



# Test payload[36:38] - fan_info (?varies between vendors):
####################################################################################################
# TODO - 3 MSBs
2021-10-12T05:27:28.547945 ...  I --- 30:079129 --:------ 30:079129 31DA 029 21EF00020136EF7FFF7FFF7FFF7FFF0002EF18FFFF000000EF7FFF7FFF    # {'hvac_id': '21', '_unknown_fan_info_flags': [0, 0, 0], 'fan_info': 'auto',            'air_quality': None, 'co2_level': 513, 'indoor_humidity': 0.54, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['post_heater'], 'bypass_position': None, 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2022-11-20T08:32:06.904058 063 RP --- 32:134446 37:171685 --:------ 31DA 030 00EF007FFF2F1B0226069A07EEFFE4F8000038988F0000EFEF1F2420FC00  # {'hvac_id': '00', '_unknown_fan_info_flags': [0, 0, 1], 'fan_info': 'auto',            'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.47, 'outdoor_humidity': 0.27, 'exhaust_temp': 5.5, 'supply_temp': 16.9, 'indoor_temp': 20.3, 'outdoor_temp': -0.28, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': 0.0, 'exhaust_fan_speed': 0.76, 'supply_fan_speed': 0.715, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 79.72, 'exhaust_flow': 84.44, '_extra': '00'}
2022-03-08T11:01:52.010358 ...  I --- 32:132125 --:------ 32:132125 31DA 030 00EF007FFF2614035C075807810468F0012E4100000000EF000053008A00  # {'hvac_id': '00', '_unknown_fan_info_flags': [0, 1, 0], 'fan_info': 'speed 1, low',    'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.38, 'outdoor_humidity': 0.2, 'exhaust_temp': 8.6, 'supply_temp': 18.8, 'indoor_temp': 19.21, 'outdoor_temp': 11.28, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'pre_heater'], 'bypass_position': 0.23, 'exhaust_fan_speed': 0.0, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': 0.0, 'supply_flow': 0.83, 'exhaust_flow': 1.38, '_extra': '00'}
2022-07-04T16:00:00.000000 ...  I --- 37:201960 --:------ 37:201960 31DA 030 00EF00018B2BEF7FFF7FFF7FFF7FFFF808EF9819000000EFEF7FFF7FFF00  # {'hvac_id': '00', '_unknown_fan_info_flags': [1, 0, 0], 'fan_info': 'auto',            'air_quality': None, 'co2_level': 395, 'indoor_humidity': 0.43, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'exhaust_fan_speed': 0.125, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}

# Only seen 32:
2018-01-08T08:32:06.904000 ... RP --- 32:134446 37:171685 --:------ 31DA 030 00EF007FFF2F1B0226069A07EEFFE4F8000038988F0000EFEF1F2420FC00  # {'hvac_id': '00', '_unknown_fan_info_flags': [0, 0, 1], 'fan_info': 'auto',            'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.47, 'outdoor_humidity': 0.27, 'exhaust_temp': 5.5, 'supply_temp': 16.9, 'indoor_temp': 20.3, 'outdoor_temp': -0.28, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': 0.0, 'exhaust_fan_speed': 0.76, 'supply_fan_speed': 0.715, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 79.72, 'exhaust_flow': 84.44, '_extra': '00'}

# Only seen 32:
2018-01-08T11:01:52.010000 ...  I --- 32:132125 --:------ 32:132125 31DA 030 00EF007FFF2614035C075807810468F0012E4100000000EF000053008A00  # {'hvac_id': '00', '_unknown_fan_info_flags': [0, 1, 0], 'fan_info': 'speed 1, low',    'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.38, 'outdoor_humidity': 0.2, 'exhaust_temp': 8.6, 'supply_temp': 18.8, 'indoor_temp': 19.21, 'outdoor_temp': 11.28, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'pre_heater'], 'bypass_position': 0.23, 'exhaust_fan_speed': 0.0, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': 0.0, 'supply_flow': 0.83, 'exhaust_flow': 1.38, '_extra': '00'}
2018-01-08T08:59:23.244000 ...  I --- 32:153258 --:------ 32:153258 31DA 030 00EF007FFF434207F80942091D07F3F800695864000000EFEF04FB000000  # {'hvac_id': '00', '_unknown_fan_info_flags': [0, 1, 0], 'fan_info': 'auto',            'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.67, 'outdoor_humidity': 0.66, 'exhaust_temp': 20.4, 'supply_temp': 23.7, 'indoor_temp': 23.33, 'outdoor_temp': 20.35, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': 0.525, 'exhaust_fan_speed': 0.5, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 12.75, 'exhaust_flow': 0.0, '_extra': '00'}
2018-01-08T00:35:36.437000 ...  I --- 32:155617 --:------ 32:155617 31DA 030 00EF007FFF2B27060E0848089605F9F000445800000000EFEF02D2154400  # {'hvac_id': '00', '_unknown_fan_info_flags': [0, 1, 0], 'fan_info': 'auto',            'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.43, 'outdoor_humidity': 0.39, 'exhaust_temp': 15.5, 'supply_temp': 21.2, 'indoor_temp': 21.98, 'outdoor_temp': 15.29, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'bypass_position': 0.34, 'exhaust_fan_speed': 0.0, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 7.22, 'exhaust_flow': 54.44, '_extra': '00'}
2018-01-08T18:59:09.277000 ... RP --- 32:155617 37:171871 --:------ 31DA 030 00EF007FFF302F09C40942090D09C2F000894264000000EFEF05F7016900  # {'hvac_id': '00', '_unknown_fan_info_flags': [0, 1, 0], 'fan_info': 'speed 2, medium', 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.48, 'outdoor_humidity': 0.47, 'exhaust_temp': 25.0, 'supply_temp': 23.7, 'indoor_temp': 23.17, 'outdoor_temp': 24.98, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'bypass_position': 0.685, 'exhaust_fan_speed': 0.5, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 15.27, 'exhaust_flow': 3.61, '_extra': '00'}

# Only seen 37:
2018-01-08T13:47:28.981000 ...  I --- 37:054614 --:------ 37:054614 31DA 029 00EF007FFFEFEF7FFF7FFF7FFF7FFFF808EF980E000000EFEF7FFF7FFF    # {'hvac_id': '00', '_unknown_fan_info_flags': [1, 0, 0], 'fan_info': 'auto',            'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'exhaust_fan_speed': 0.07, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2018-01-08T14:26:34.294000 ...  I --- 37:197660 --:------ 37:197660 31DA 029 00EF007FFF38EF7FFF7FFF7FFF7FFFF808EF811E000000EFEF7FFF7FFF    # {'hvac_id': '00', '_unknown_fan_info_flags': [1, 0, 0], 'fan_info': 'speed 1, low',    'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.56, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'exhaust_fan_speed': 0.15, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2018-01-08T13:59:27.554000 ...  I --- 37:197661 --:------ 37:197661 31DA 029 00C84001FF35EF7FFF7FFF7FFF7FFFF808EF980A000000EFEF7FFF7FFF    # {'hvac_id': '00', '_unknown_fan_info_flags': [1, 0, 0], 'fan_info': 'auto',            'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 511, 'indoor_humidity': 0.53, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'exhaust_fan_speed': 0.05, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2018-01-08T14:00:44.987000 ... RP --- 37:197661 37:193313 --:------ 31DA 029 00C84001FF35EF7FFF7FFF7FFF7FFFF808EF980A000000EFEF7FFF7FFF    # {'hvac_id': '00', '_unknown_fan_info_flags': [1, 0, 0], 'fan_info': 'auto',            'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 511, 'indoor_humidity': 0.53, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'exhaust_fan_speed': 0.05, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2018-01-08T16:51:15.512000 ...  I --- 37:201960 --:------ 37:201960 31DA 030 00C840018C2BEF7FFF7FFF7FFF7FFFF808EF981A000000EFEF7FFF7FFF00  # {'hvac_id': '00', '_unknown_fan_info_flags': [1, 0, 0], 'fan_info': 'auto',            'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 396, 'indoor_humidity': 0.43, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'exhaust_fan_speed': 0.13, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2018-01-08T17:16:37.788000 ... RP --- 37:231676 37:143534 --:------ 31DA 029 00EF007FFF2FEF7FFF7FFF7FFF7FFFF808EF811C000000EFEF7FFF7FFF    # {'hvac_id': '00', '_unknown_fan_info_flags': [1, 0, 0], 'fan_info': 'speed 1, low',    'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.47, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'exhaust_fan_speed': 0.14, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2018-01-08T15:03:07.828000 ...  I --- 37:231859 --:------ 37:231859 31DA 029 00EF007FFF2DEF7FFF7FFF7FFF7FFFF808EF810D000000EFEF7FFF7FFF    # {'hvac_id': '00', '_unknown_fan_info_flags': [1, 0, 0], 'fan_info': 'speed 1, low',    'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.45, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'exhaust_fan_speed': 0.065, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2018-01-08T16:58:41.564000 ...  I --- 37:237286 --:------ 37:237286 31DA 029 00EF007FFF2FEF7FFF7FFF7FFF7FFFF808EF83C8000000EFEF7FFF7FFF    # {'hvac_id': '00', '_unknown_fan_info_flags': [1, 0, 0], 'fan_info': 'speed 3, high',   'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.47, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'exhaust_fan_speed': 1.0, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2018-01-08T17:12:15.393000 ...  I --- 37:237292 --:------ 37:237292 31DA 029 00EF007FFF2CEF7FFF7FFF7FFF7FFFF808EF9818000000EFEF7FFF7FFF    # {'hvac_id': '00', '_unknown_fan_info_flags': [1, 0, 0], 'fan_info': 'auto',            'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.44, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'exhaust_fan_speed': 0.12, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2018-01-08T16:49:01.238000 ...  I --- 37:237600 --:------ 37:237600 31DA 029 00C84002B2EFEF7FFF7FFF7FFF7FFFF808EF831E000000EFEF7FFF7FFF    # {'hvac_id': '00', '_unknown_fan_info_flags': [1, 0, 0], 'fan_info': 'speed 3, high',   'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 690, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'exhaust_fan_speed': 0.15, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2018-01-08T17:03:30.424000 ...  I --- 37:237608 --:------ 37:237608 31DA 029 00EF007FFF33EF7FFF7FFF7FFF7FFFF808EF9801000000EFEF7FFF7FFF    # {'hvac_id': '00', '_unknown_fan_info_flags': [1, 0, 0], 'fan_info': 'auto',            'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.51, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'exhaust_fan_speed': 0.005, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2018-01-08T17:10:36.450000 ...  I --- 37:238176 --:------ 37:238176 31DA 029 00EF007FFF34EF7FFF7FFF7FFF7FFFF808EF810D000000EFEF7FFF7FFF    # {'hvac_id': '00', '_unknown_fan_info_flags': [1, 0, 0], 'fan_info': 'speed 1, low',    'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.52, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'exhaust_fan_speed': 0.065, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2018-01-08T17:17:12.886000 ...  I --- 37:239374 --:------ 37:239374 31DA 029 00EF007FFF30EF7FFF7FFF7FFF7FFFF808EF83C7000000EFEF7FFF7FFF    # {'hvac_id': '00', '_unknown_fan_info_flags': [1, 0, 0], 'fan_info': 'speed 3, high',   'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.48, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'exhaust_fan_speed': 0.995, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
# These are not always [0, 1, 1]
2018-01-08T00:00:00.503000 ...  I --- 18:124535 --:------ 18:124535 31DA 029 15C8400249EFEF0590054E07E005394800C87800FF0000EFEF28A028A0    # {'hvac_id': '15', '_unknown_fan_info_flags': [0, 1, 1], 'fan_info': 'auto',            'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 585, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 14.24, 'supply_temp': 13.58, 'indoor_temp': 20.16, 'outdoor_temp': 13.37, 'speed_capabilities': ['low_med_high', 'auto'], 'bypass_position': 1.0, 'exhaust_fan_speed': 0.0, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 104.0, 'exhaust_flow': 104.0}
2018-01-08T00:00:00.504000 ... RP --- 18:124535 37:103015 --:------ 31DA 029 16C84002EDEFEF058E054E07E205394808C87800FF0000EFEF28462846    # {'hvac_id': '16', '_unknown_fan_info_flags': [0, 1, 1], 'fan_info': 'auto',            'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 749, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 14.22, 'supply_temp': 13.58, 'indoor_temp': 20.18, 'outdoor_temp': 13.37, 'speed_capabilities': ['low_med_high', 'auto', 'auto_night'], 'bypass_position': 1.0, 'exhaust_fan_speed': 0.0, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 103.1, 'exhaust_flow': 103.1}
2018-01-08T00:00:00.505000 ...  I --- 18:124535 --:------ 18:124535 31DA 029 17C8400211EFEF0590054B07E205394808C87800FF0000EFEF28B428B4    # {'hvac_id': '17', '_unknown_fan_info_flags': [0, 1, 1], 'fan_info': 'auto',            'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 529, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 14.24, 'supply_temp': 13.55, 'indoor_temp': 20.18, 'outdoor_temp': 13.37, 'speed_capabilities': ['low_med_high', 'auto', 'auto_night'], 'bypass_position': 1.0, 'exhaust_fan_speed': 0.0, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 104.2, 'exhaust_flow': 104.2}



# Test payload[38:40, 40:42] - exhaust/supply speed (see also: supply/exhaust flow):
####################################################################################################
# Not implemented - NOTE: FF, not EF
2021-07-10T10:48:07.577385 ...  I --- 30:082155 --:------ 30:082155 31DA 029 21EF007FFF41EF7FFF7FFF7FFF7FFF0002EF18FFFF000000EF7FFF7FFF    # {'hvac_id': '21', 'exhaust_fan_speed': None,  'supply_fan_speed': None,  'supply_flow': None,  'exhaust_flow': None,  'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.65, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['post_heater'], 'bypass_position': None, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 0], 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': None}
# Errors - no errors ever seen!
#
2022-02-09T09:00:00.000000 ...  I --- 18:126620 --:------ 18:126620 31DA 029 00C82001ACEFEF05AA055E074D05114808C80000FF0000EFEF19641964    # {'hvac_id': '00', 'exhaust_fan_speed': 0.000, 'supply_fan_speed': None,  'supply_flow': 65.00, 'exhaust_flow': 65.00, 'air_quality': 1.0, 'air_quality_basis': 'co2', 'co2_level': 428, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 14.5, 'supply_temp': 13.74, 'indoor_temp': 18.69, 'outdoor_temp': 12.97, 'speed_capabilities': ['low_med_high', 'auto', 'auto_night'], 'bypass_position': 1.0, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None}
2022-06-23T00:04:14.680745 ...  I --- 32:155617 --:------ 32:155617 31DA 030 00EF007FFF2F29080C08DE08E90808F000000000000000EFEF0037001B00  # {'hvac_id': '00', 'exhaust_fan_speed': 0.000, 'supply_fan_speed': 0.000, 'supply_flow':  0.55, 'exhaust_flow':  0.27, 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.47, 'outdoor_humidity': 0.41, 'exhaust_temp': 20.6, 'supply_temp': 22.7, 'indoor_temp': 22.81, 'outdoor_temp': 20.56, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'bypass_position': 0.0, 'fan_info': 'off', '_unknown_fan_info_flags': [0, 0, 0], 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, '_extra': '00'}
2021-02-12T17:28:57.159946 ...  I --- --:------ --:------ 20:008749 31DA 029 00EF007FFFEFEF7FFF7FFF7FFF7FFFF000EF0201000000EFEF7FFF7FFF    # {'hvac_id': '00', 'exhaust_fan_speed': 0.005, 'supply_fan_speed': 0.000, 'supply_flow': None,  'exhaust_flow': None,  'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'bypass_position': None, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None}
2022-11-20T08:32:06.904058 ... RP --- 32:134446 37:171685 --:------ 31DA 030 00EF007FFF2F1B0226069A07EEFFE4F8000038988F0000EFEF1F2420FC00  # {'hvac_id': '00', 'exhaust_fan_speed': 0.760, 'supply_fan_speed': 0.715, 'supply_flow': 79.72, 'exhaust_flow': 84.44, 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.47, 'outdoor_humidity': 0.27, 'exhaust_temp': 5.50, 'supply_temp': 16.9, 'indoor_temp': 20.3, 'outdoor_temp': -0.28, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': 0.0, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 1], 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, '_extra': '00'}
2022-03-08T11:21:00.745911 ...  I --- 32:132125 --:------ 32:132125 31DA 030 00EF007FFF2712038E0762079704BDF0010003C8C80000EF000E360DFF00  # {'hvac_id': '00', 'exhaust_fan_speed': 1.000, 'supply_fan_speed': 1.000, 'supply_flow': 36.38, 'exhaust_flow': 35.83, 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.39, 'outdoor_humidity': 0.18, 'exhaust_temp': 9.10, 'supply_temp': 18.9, 'indoor_temp': 19.43, 'outdoor_temp': 12.13, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'pre_heater'], 'bypass_position': 0.0, 'fan_info': 'speed 3, high', '_unknown_fan_info_flags': [0, 0, 0], 'remaining_mins': 0, 'post_heat': None, 'pre_heat': 0.0, '_extra': '00'}



# Test payload[42:46] - time remaining (c.f. 22F3):
####################################################################################################
# No null value - No time is 0000
2022-07-04T17:15:56.591751 ...  I --- 37:239356 --:------ 37:239356 31DA 029 00C84002E334EF7FFF7FFF7FFF7FFFF808EF0115000000EFEF7FFF7FFF    # {'hvac_id': '00', 'remaining_mins': 0, 'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 739, 'indoor_humidity': 0.52, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'fan_info': 'speed 1, low', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.105, 'supply_fan_speed': 0.0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
# various times
2022-07-04T15:11:21.793118 ...  I 135 --:------ --:------ 29:052148 22F3 003 63000A                                                        # {                 'minutes':        10, 'flags': [0, 0, 0, 0, 0, 0, 0, 0], 'new_speed_mode': 'fan_boost', 'fallback_speed_mode': 'per_vent_speed', '_scheme': 'itho', 'seqx_num': '135'}
2022-07-04T15:11:21.860590 ...  I --- --:------ --:------ 37:237616 31DA 029 00C84001DA2EEF7FFF7FFF7FFF7FFFF808EF0DC800000AEFEF7FFF7FFF    # {'hvac_id': '00', 'remaining_mins': 10, 'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 474, 'indoor_humidity': 0.46, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'fan_info': 'speed 3 temporary override', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 1.0, 'supply_fan_speed': 0.0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2021-02-12T17:29:11.859716 ...  I 019 --:------ --:------ 39:159057 22F3 003 00000A                                                        # {                 'minutes':        10, 'flags': [0, 0, 0, 0, 0, 0, 0, 0], 'new_speed_mode': 'fan_boost', 'fallback_speed_mode': 'per_vent_speed', '_scheme': 'itho', 'seqx_num': '019'}
2021-02-12T17:29:11.897592 ...  I --- --:------ --:------ 20:008749 31DA 029 00EF007FFFEFEF7FFF7FFF7FFF7FFFF000EF0DB600000AEFEF7FFF7FFF    # {'hvac_id': '00', 'remaining_mins': 10, 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'bypass_position': None, 'fan_info': 'speed 3 temporary override', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.91, 'supply_fan_speed': 0.0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2021-02-12T17:29:30.662408 ...  I 025 --:------ --:------ 39:159057 22F3 003 000014                                                        # {                  'minutes':        20, 'flags': [0, 0, 0, 0, 0, 0, 0, 0], 'new_speed_mode': 'fan_boost', 'fallback_speed_mode': 'per_vent_speed', '_scheme': 'itho', 'seqx_num': '025'}
2021-02-12T17:29:30.699459 ...  I --- --:------ --:------ 20:008749 31DA 029 00EF007FFFEFEF7FFF7FFF7FFF7FFFF000EF0DB0000014EFEF7FFF7FFF    # {'hvac_id': '00', 'remaining_mins': 20, 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'bypass_position': None, 'fan_info': 'speed 3 temporary override', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.88, 'supply_fan_speed': 0.0, 'remaining_mins': 20.0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
2021-02-12T17:29:30.862259 ...  I 026 --:------ --:------ 39:159057 22F3 003 00001E                                                        # {                 'minutes':        30, 'flags': [0, 0, 0, 0, 0, 0, 0, 0], 'new_speed_mode': 'fan_boost', 'fallback_speed_mode': 'per_vent_speed', '_scheme': 'itho', 'seqx_num': '026'}
2021-02-12T17:29:30.897969 ...  I --- --:------ --:------ 20:008749 31DA 029 00EF007FFFEFEF7FFF7FFF7FFF7FFFF000EF0DB000001EEFEF7FFF7FFF    # {'hvac_id': '00', 'remaining_mins': 30, 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'bypass_position': None, 'fan_info': 'speed 3 temporary override', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.88, 'supply_fan_speed': 0.0, 'remaining_mins': 30.0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None}
#
2022-07-28T14:20:26.582700 ...  I --- 32:134446 --:------ 32:134446 31DA 030 00EF007FFF38280852088E087A0834F800000B2222003BEFEF0ABE0ABE00  # {'hvac_id': '00', 'remaining_mins': 59, 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.56, 'outdoor_humidity': 0.4, 'exhaust_temp': 21.3, 'supply_temp': 21.9, 'indoor_temp': 21.7, 'outdoor_temp': 21.0, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': 0.0, 'fan_info': 'speed 1 temporary override', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.17, 'supply_fan_speed': 0.17, 'post_heat': None, 'pre_heat': None, 'supply_flow': 27.5, 'exhaust_flow': 27.5, '_extra': '00'}



# Test payload[46:48, 48:50] - post/pre-heater (as a %):
####################################################################################################
# Null value is EF - No heater present
2022-08-07T09:51:03.499416 ...  I --- 32:134446 --:------ 32:134446 31DA 030 00EF007FFF3B32085208AC08A20843F80000182F2F0000EFEF0A330A3300  # {'hvac_id': '00', 'post_heat': None, 'pre_heat': None, 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.59, 'outdoor_humidity': 0.5, 'exhaust_temp': 21.3, 'supply_temp': 22.2, 'indoor_temp': 22.1, 'outdoor_temp': 21.15, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': 0.0, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': 0.235, 'supply_fan_speed': 0.235, 'remaining_mins': 0, 'supply_flow': 26.11, 'exhaust_flow': 26.11, '_extra': '00'}
# post-heat, pre-heat
2021-10-12T05:27:28.547945 ...  I --- 30:079129 --:------ 30:079129 31DA 029 21EF00020136EF7FFF7FFF7FFF7FFF0002EF18FFFF000000EF7FFF7FFF    # {'hvac_id': '21', 'post_heat': 0.00, 'pre_heat': None, 'air_quality': None, 'co2_level': 513, 'indoor_humidity': 0.54, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['post_heater'], 'bypass_position': None, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 0], 'exhaust_fan_speed': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'supply_flow': None, 'exhaust_flow': None}
2022-03-08T11:01:52.010358 ...  I --- 32:132125 --:------ 32:132125 31DA 030 00EF007FFF2614035C075807810468F0012E4100000000EF000053008A00  # {'hvac_id': '00', 'post_heat': None, 'pre_heat': 0.00, 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.38, 'outdoor_humidity': 0.2, 'exhaust_temp': 8.6, 'supply_temp': 18.8, 'indoor_temp': 19.21, 'outdoor_temp': 11.28, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'pre_heater'], 'bypass_position': 0.23, 'fan_info': 'speed 1, low', '_unknown_fan_info_flags': [0, 1, 0], 'exhaust_fan_speed': 0.0, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'supply_flow': 0.83, 'exhaust_flow': 1.38, '_extra': '00'}
2024-06-21T04:49:59.398298 ...  I --- 32:137185 --:------ 32:137185 31DA 030 00EF007FFFEFEF086C07CC09380730F002A0023440000068EF7FFF7FFF00  # {'hvac_id': '00', 'post_heat': 0.52, 'pre_heat': None, 'exhaust_fan_speed': 0.26, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 21.56, 'supply_temp': 19.96, 'indoor_temp': 23.60, 'outdoor_temp': 18.40, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'post_heater'], 'bypass_position': 0.80, 'supply_fan_speed': 0.32, 'remaining_mins': 0, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}



# Test payload[50:54, 54:58] - supply/exhaust flow (see also exhaust/supply rate):
####################################################################################################
# Null value is 7FFF - No sensor present
2022-02-04T20:42:10.971835 ...  I --- 37:261128 --:------ 37:261128 31DA 029 00C84003D635EF7FFF7FFF7FFF7FFFF808EF1915000000EFEF7FFF7FFF    # {'hvac_id': '00', 'supply_flow': None,                'exhaust_flow': None,  'exhaust_fan_speed': 0.105, 'supply_fan_speed': 0.000, 'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 982, 'indoor_humidity': 0.53, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'fan_info': 'auto_night', '_unknown_fan_info_flags': [0, 0, 0], 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None}
2021-02-12T17:28:57.159946 ...  I --- --:------ --:------ 20:008749 31DA 029 00EF007FFFEFEF7FFF7FFF7FFF7FFFF000EF0201000000EFEF7FFF7FFF    # {'hvac_id': '00', 'supply_flow': None,                'exhaust_flow': None,  'exhaust_fan_speed': 0.005, 'supply_fan_speed': 0.000, 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost'], 'bypass_position': None, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None}
2022-07-04T17:15:17.083327 ...  I --- 37:195851 --:------ 37:195851 31DA 030 00C84002AA2CEF7FFF7FFF7FFF7FFFF808EF1819000000EFEF7FFF7FFF00  # {'hvac_id': '00', 'supply_flow': None,                'exhaust_flow': None,  'exhaust_fan_speed': 0.125, 'supply_fan_speed': 0.000, 'air_quality': 1.0, 'air_quality_basis': 'rel_humidity', 'co2_level': 682, 'indoor_humidity': 0.44, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto', 'auto_night'], 'bypass_position': None, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 0], 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, '_extra': '00'}
#
2022-05-10T11:09:59.688070 ...  I --- 32:134044 --:------ 32:134044 31DA 029 00EF007FFF343408980898088E0880F800000D6E6E000FEFEF070A083C    # {'hvac_id': '00', 'supply_flow': 18.02,               'exhaust_flow': 21.08, 'exhaust_fan_speed': 0.550, 'supply_fan_speed': 0.550, 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.52, 'outdoor_humidity': 0.52, 'exhaust_temp': 22.0, 'supply_temp': 22.0, 'indoor_temp': 21.9, 'outdoor_temp': 21.76, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': 0.0, 'fan_info': 'speed 3 temporary override', '_unknown_fan_info_flags': [0, 0, 0], 'remaining_mins': 15.0, 'post_heat': None, 'pre_heat': None}
2022-07-28T13:23:19.128205 ...  I --- 32:134446 --:------ 32:134446 31DA 030 00EF007FFF3928082A08660860080EF800000B2F2F003BEFEF0AA20A8600  # {'hvac_id': '00', 'supply_flow': 27.22,               'exhaust_flow': 26.94, 'exhaust_fan_speed': 0.235, 'supply_fan_speed': 0.235, 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.57, 'outdoor_humidity': 0.4, 'exhaust_temp': 20.9, 'supply_temp': 21.5, 'indoor_temp': 21.44, 'outdoor_temp': 20.62, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': 0.0, 'fan_info': 'speed 1 temporary override', '_unknown_fan_info_flags': [0, 0, 0], 'remaining_mins': 59.0, 'post_heat': None, 'pre_heat': None, '_extra': '00'}
# error
2022-08-16T08:05:59.042330 ...  I --- 32:155617 --:------ 32:155617 31DA 030 00EF007FFF3E4107D0089808F807C1F800001834460000EFEF82000B4800  # {'hvac_id': '00', 'supply_flow_fault': 'unavailable', 'exhaust_flow': 28.88, 'exhaust_fan_speed': 0.260, 'supply_fan_speed': 0.350, 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.62, 'outdoor_humidity': 0.65, 'exhaust_temp': 20.0, 'supply_temp': 22.0, 'indoor_temp': 22.96, 'outdoor_temp': 19.85, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': 0.0, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 0], 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, '_extra': '00'}


# Siber DF EVO 2
2024-06-21T04:47:19.545913 ...  I --- 32:137185 --:------ 32:137185 31DA 030 00EF007FFFEFEF080607D809480737F002AA02344000005CEF7FFF7FFF00  # {'hvac_id': '00', 'exhaust_fan_speed': 0.26, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 20.54, 'supply_temp': 20.08, 'indoor_temp': 23.76, 'outdoor_temp': 18.47, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'post_heater'], 'bypass_position': 0.85, 'supply_fan_speed': 0.32, 'remaining_mins': 0, 'post_heat': 0.46, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2024-06-21T04:49:59.398298 ...  I --- 32:137185 --:------ 32:137185 31DA 030 00EF007FFFEFEF086C07CC09380730F002A0023440000068EF7FFF7FFF00  # {'hvac_id': '00', 'exhaust_fan_speed': 0.26, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 21.56, 'supply_temp': 19.96, 'indoor_temp': 23.60, 'outdoor_temp': 18.40, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'post_heater'], 'bypass_position': 0.80, 'supply_fan_speed': 0.32, 'remaining_mins': 0, 'post_heat': 0.52, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
# Siber DF EVO 2, 2026 version _extra = 40
2026-01-15 12:44:19.792000 ...  I --- 32:137185 --:------ 32:137185 31DA 030 00EF007FFFEFEF070D0789074B0603F00200035C6C0000AAEF7FFF7FFF40  # {'hvac_id': '00', 'exhaust_fan_speed': 0.46, 'fan_info': 'speed 3, high', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 18.05, 'supply_temp': 19.29, 'indoor_temp': 18.67, 'outdoor_temp': 15.39, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'post_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.54, 'remaining_mins': 0, 'post_heat': 0.85, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '40'}
2026-01-15 12:52:27.266000 ... RP --- 32:137185 37:145236 --:------ 31DA 030 00EF007FFFEFEF070A0786074905FEF00200035C6C0000ADEF7FFF7FFF40  # {'hvac_id': '00', 'exhaust_fan_speed': 0.46, 'fan_info': 'speed 3, high', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 18.02, 'supply_temp': 19.26, 'indoor_temp': 18.65, 'outdoor_temp': 15.34, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'post_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.54, 'remaining_mins': 0, 'post_heat': 0.865, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '40'}
2026-01-15 12:54:19.538000 ...  I --- 32:137185 --:------ 32:137185 31DA 030 00EF007FFFEFEF070A0786074B0600F00200035C6C0000ADEF7FFF7FFF40  # {'hvac_id': '00', 'exhaust_fan_speed': 0.46, 'fan_info': 'speed 3, high', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 18.02, 'supply_temp': 19.26, 'indoor_temp': 18.67, 'outdoor_temp': 15.36, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'post_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.54, 'remaining_mins': 0, 'post_heat': 0.865, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '40'}
2026-01-15 13:03:22.232000 ...  I --- 32:137185 --:------ 32:137185 31DA 030 00EF007FFFEFEF07070782074505F6F002000234400000B2EF7FFF7FFF40  # {'hvac_id': '00', 'exhaust_fan_speed': 0.26, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 17.99, 'supply_temp': 19.22, 'indoor_temp': 18.61, 'outdoor_temp': 15.26, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'post_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.32, 'remaining_mins': 0, 'post_heat': 0.89, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '40'}
2026-01-15 14:07:47.235000 ... RP --- 32:137185 37:145236 --:------ 31DA 030 00EF007FFFEFEF06CA07BC079F060FF00200011628000078EF7FFF7FFF40  # {'hvac_id': '00', 'exhaust_fan_speed': 0.11, 'fan_info': 'speed 1, low', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 17.38, 'supply_temp': 19.8, 'indoor_temp': 19.51, 'outdoor_temp': 15.51, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'post_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.2, 'remaining_mins': 0, 'post_heat': 0.6, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '40'}
2026-01-15 13:54:07.538000 ...  I --- 32:137185 --:------ 32:137185 31DA 030 00EF007FFFEFEF06AE0796077E0603F0020001162800009EEF7FFF7FFF40  # {'hvac_id': '00', 'exhaust_fan_speed': 0.11, 'fan_info': 'speed 1, low', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 17.1, 'supply_temp': 19.42, 'indoor_temp': 19.18, 'outdoor_temp': 15.39, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'post_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.2, 'remaining_mins': 0, 'post_heat': 0.79, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '40'}

# Vasco D60 HRU
# speed is actually in 31D9[4:6]
2024-10-15T12:46:03.623447 082  I --- 32:022222 --:------ 32:022222 31DA 030 00EF007FFFEFEF058506EE0773051FA800EF0232320000EF00051902EE00  # {'hvac_id': '00', 'exhaust_fan_speed': 0.25, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 14.13, 'supply_temp': 17.74, 'indoor_temp': 19.07, 'outdoor_temp': 13.11, 'speed_capabilities': ['off', 'timer', 'auto'], 'bypass_position': None, 'supply_fan_speed': 0.25, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': 0.0, 'supply_flow': 13.05, 'exhaust_flow': 7.5, '_extra': '00'}
2024-10-15T13:53:09.930437 083  I --- 32:022222 --:------ 32:022222 31DA 030 00EF007FFFEFEF05F8075207B705B1A800EF0232320000EF000263018400  # {'hvac_id': '00', 'exhaust_fan_speed': 0.25, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 15.28, 'supply_temp': 18.74, 'indoor_temp': 19.75, 'outdoor_temp': 14.57, 'speed_capabilities': ['off', 'timer', 'auto'], 'bypass_position': None, 'supply_fan_speed': 0.25, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': 0.0, 'supply_flow': 6.11, 'exhaust_flow': 3.88, '_extra': '00'}
2024-10-15T13:21:16.306823 084  I --- 32:022222 --:------ 32:022222 31DA 030 00EF007FFFEFEF05CC07220795057AA800EF0232320000EF0003CC026300  # {'hvac_id': '00', 'exhaust_fan_speed': 0.25, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 14.84, 'supply_temp': 18.26, 'indoor_temp': 19.41, 'outdoor_temp': 14.02, 'speed_capabilities': ['off', 'timer', 'auto'], 'bypass_position': None, 'supply_fan_speed': 0.25, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': 0.0, 'supply_flow': 9.72, 'exhaust_flow': 6.11, '_extra': '00'}
2024-10-15T15:45:21.214426 086  I --- 32:022222 --:------ 32:022222 31DA 030 00EF007FFFEFEF062C7FFF7FFF05AAA800EF0128280000EF007FFF7FFF00  # {'hvac_id': '00', 'exhaust_fan_speed': 0.2, 'fan_info': 'speed 1, low', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 15.8, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': 14.5, 'speed_capabilities': ['off', 'timer', 'auto'], 'bypass_position': None, 'supply_fan_speed': 0.2, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': 0.0, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2024-10-15T22:54:16.347179 085  I --- 32:022222 --:------ 32:022222 31DA 030 00EF007FFFEFEF04D0070507A30443A800EF011E1E0000EF0002EE020F00  # {'hvac_id': '00', 'exhaust_fan_speed': 0.15, 'fan_info': 'speed 1, low', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 12.32, 'supply_temp': 17.97, 'indoor_temp': 19.55, 'outdoor_temp': 10.91, 'speed_capabilities': ['off', 'timer', 'auto'], 'bypass_position': None, 'supply_fan_speed': 0.15, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': 0.0, 'supply_flow': 7.5, 'exhaust_flow': 5.27, '_extra': '00'}
# fan manual 2
2024-10-18T13:37:05.811916 087  I --- 32:022222 --:------ 32:022222 31DA 030 00EF007FFFEFEF082C07F9081C082BA800EF0232320000EF00051902B600  # {'hvac_id': '00', 'exhaust_fan_speed': 0.25, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 20.92, 'supply_temp': 20.41, 'indoor_temp': 20.76, 'outdoor_temp': 20.91, 'speed_capabilities': ['off', 'timer', 'auto'], 'bypass_position': None, 'supply_fan_speed': 0.25, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': 0.0, 'supply_flow': 13.05, 'exhaust_flow': 6.94, '_extra': '00'}
# Rainy, speed 2
2024-10-21T13:21:55.233373 094  I --- 32:022222 --:------ 32:022222 31DA 030 00EF007FFFEFEF06CA077307C00692A800EF0232320000EF00053502EE00  # {'hvac_id': '00', 'exhaust_fan_speed': 0.25, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 17.38, 'supply_temp': 19.07, 'indoor_temp': 19.84, 'outdoor_temp': 16.82, 'speed_capabilities': ['off', 'timer', 'auto'], 'bypass_position': None, 'supply_fan_speed': 0.25, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': 0.0, 'supply_flow': 13.33, 'exhaust_flow': 7.5, '_extra': '00'}

# ClimaRad VenturaV1x
# .I + 31DA 030   00 EF 00 029C 00 EF 070D 7FFF 0833 07A8 BE09001F 0000 000000008500850000 (auto)
# .I + 31DA 030   00 EF 00 02C8 00 EF 07AA 7FFF 07CB 05F0 BE09001F 0808 000000008500850000 (speed 1)
# .I + 31DA 030   00 EF 00 023B 00 EF 0751 7FFF 0732 055A BE09001F 1414 000000008500850000 (speed 2)
# .I + 31DA 030   00 EF 00 019F 00 EF 067A 7FFF 0807 074E BE09001F 0000 000000008500850000 (auto)
# .I + 31DA 030   00 EF 00 0195 F7 EF 0621 7FFF 0846 0773 BE09001F 0000 000000008500850000 (wake up button press, no changes)
# .I + 31DA 030   00 EF 00 01AB 3E EF 0572 7FFF 07BC 06EA BE09001F 0000 000000008500850000
#                   airQ?   |    |      |         |    |  no ascii  |_|___0x00|08|14|28|7E repeated in [40:42]
# Deduction:                |    |      |         |    |___0502-07F7 << 0-255 = speed% ?
#         CO2?___hexStr4 ___|    |      |         |___055A-0813=hexStr4
#        not RH 00|08|52|9A|D3___|      |___0300-D7CA_ << 0-255 = ?
#                                       |         |    |
#                                     temp2    temp3 temp4 -- assigned based on value lo>hi for a HRU
#
2025-04-09 22:26:44.278000 049  I --- 37:153226 --:------ 37:153226 31DA 030 00EF00018600EF051C7FFF085D06E9BE09001F0000000000008500850000  # {'hvac_id': '00', 'exhaust_fan_speed': 0.0, 'fan_info': '-unknown 0x1F-', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 390, 'indoor_humidity': 0.0, 'outdoor_humidity': None, 'exhaust_temp': 13.08, 'supply_temp': None, 'indoor_temp': 21.41, 'outdoor_temp': 17.69, 'speed_capabilities': ['off', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'auto_night', 'pre_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': 0.0, 'supply_flow_fault': 'unreliable', 'exhaust_flow_fault': 'unreliable', '_extra': '00'}
2025-04-09 22:17:33.667000 048  I --- 37:153226 --:------ 37:153226 12A0 021 0022086E7FFF0001EF7FFF7FFF000238052201D500                    # [{'hvac_idx': '00', 'indoor_humidity': 0.34, 'temperature': 21.58, 'dewpoint_temp': None, '_unknown_12': '00'}, {'hvac_idx': '01', 'rel_humidity': None, '_unknown_12': '00'}, {'hvac_idx': '02', 'outdoor_humidity': 0.56, 'temperature': 13.14, 'dewpoint_temp': 4.69, '_unknown_12': '00'}]  # indeed outside_temp ~ 13.08 C

2024-10-18T00:03:42.690880 065  I --- 37:153226 --:------ 37:153226 31DA 030 00EF00024300EF06E77FFF08190775BE09001F0000000000008500850000  # {'hvac_id': '00', 'exhaust_fan_speed': 0.0, 'fan_info': '-unknown 0x1F-', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 579, 'indoor_humidity': 0.0, 'outdoor_humidity': None, 'exhaust_temp': 17.67, 'supply_temp': None, 'indoor_temp': 20.73, 'outdoor_temp': 19.09, 'speed_capabilities': ['off', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'auto_night', 'pre_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': 0.0, 'supply_flow_fault': 'unreliable', 'exhaust_flow_fault': 'unreliable', '_extra': '00'}
2024-10-18T00:03:42.690881 065  I --- 37:153226 --:------ 37:153226 31DA 030 00EF00029C00EF070D7FFF083307A8BE09001F0000000000008500850000  # {'hvac_id': '00', 'exhaust_fan_speed': 0.0, 'fan_info': '-unknown 0x1F-', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 668, 'indoor_humidity': 0.0, 'outdoor_humidity': None, 'exhaust_temp': 18.05, 'supply_temp': None, 'indoor_temp': 20.99, 'outdoor_temp': 19.6, 'speed_capabilities': ['off', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'auto_night', 'pre_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': 0.0, 'supply_flow_fault': 'unreliable', 'exhaust_flow_fault': 'unreliable', '_extra': '00'}    # auto
2024-10-18T00:03:42.690882 065  I --- 37:153226 --:------ 37:153226 31DA 030 00EF0002C800EF07AA7FFF07CB05F0BE09001F0808000000008500850000  # {'hvac_id': '00', 'exhaust_fan_speed': 0.04, 'fan_info': '-unknown 0x1F-', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 712, 'indoor_humidity': 0.0, 'outdoor_humidity': None, 'exhaust_temp': 19.62, 'supply_temp': None, 'indoor_temp': 19.95, 'outdoor_temp': 15.2, 'speed_capabilities': ['off', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'auto_night', 'pre_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.04, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': 0.0, 'supply_flow_fault': 'unreliable', 'exhaust_flow_fault': 'unreliable', '_extra': '00'}  # speed 1
2024-10-18T00:03:42.690883 065  I --- 37:153226 --:------ 37:153226 31DA 030 00EF00023B00EF07517FFF0732055ABE09001F1414000000008500850000  # {'hvac_id': '00', 'exhaust_fan_speed': 0.1, 'fan_info': '-unknown 0x1F-', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 571, 'indoor_humidity': 0.0, 'outdoor_humidity': None, 'exhaust_temp': 18.73, 'supply_temp': None, 'indoor_temp': 18.42, 'outdoor_temp': 13.7, 'speed_capabilities': ['off', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'auto_night', 'pre_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.1, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': 0.0, 'supply_flow_fault': 'unreliable', 'exhaust_flow_fault': 'unreliable', '_extra': '00'}    # speed 2
2024-10-18T00:03:42.690884 065  I --- 37:153226 --:------ 37:153226 31DA 030 00EF00019F00EF067A7FFF0807074EBE09001F0000000000008500850000  # {'hvac_id': '00', 'exhaust_fan_speed': 0.0, 'fan_info': '-unknown 0x1F-', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 415, 'indoor_humidity': 0.0, 'outdoor_humidity': None, 'exhaust_temp': 16.58, 'supply_temp': None, 'indoor_temp': 20.55, 'outdoor_temp': 18.7, 'speed_capabilities': ['off', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'auto_night', 'pre_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': 0.0, 'supply_flow_fault': 'unreliable', 'exhaust_flow_fault': 'unreliable', '_extra': '00'}  # auto, not blowing
2024-10-18T00:03:42.690885 065  I --- 37:153226 --:------ 37:153226 31DA 030 00EF000195F7EF06217FFF08460773BE09001F0000000000008500850000  # {'hvac_id': '00', 'exhaust_fan_speed': 0.0, 'fan_info': '-unknown 0x1F-', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 405, 'indoor_humidity_fault': 'invalid_F7', 'outdoor_humidity': None, 'exhaust_temp': 15.69, 'supply_temp': None, 'indoor_temp': 21.18, 'outdoor_temp': 19.07, 'speed_capabilities': ['off', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'auto_night', 'pre_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': 0.0, 'supply_flow_fault': 'unreliable', 'exhaust_flow_fault': 'unreliable', '_extra': '00'} # 1st button press = no changes
2024-10-18T00:03:42.690886 065  I --- 37:153226 --:------ 37:153226 31DA 030 00EF0001AB3EEF05727FFF07BC06EABE09001F0000000000008500850000  # {'hvac_id': '00', 'exhaust_fan_speed': 0.0, 'fan_info': '-unknown 0x1F-', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 427, 'indoor_humidity': 0.62, 'outdoor_humidity': None, 'exhaust_temp': 13.94, 'supply_temp': None, 'indoor_temp': 19.8, 'outdoor_temp': 17.7, 'speed_capabilities': ['off', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'auto_night', 'pre_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': 0.0, 'supply_flow_fault': 'unreliable', 'exhaust_flow_fault': 'unreliable', '_extra': '00'}
2024-10-18T01:13:47.239622 065  I --- 37:153226 --:------ 37:153226 31DA 030 00EF00022C00EF06D67FFF08070767BE09001F0000000000008500850000  # {'hvac_id': '00', 'exhaust_fan_speed': 0.0, 'fan_info': '-unknown 0x1F-', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 556, 'indoor_humidity': 0.0, 'outdoor_humidity': None, 'exhaust_temp': 17.5, 'supply_temp': None, 'indoor_temp': 20.55, 'outdoor_temp': 18.95, 'speed_capabilities': ['off', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'auto_night', 'pre_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': 0.0, 'supply_flow_fault': 'unreliable', 'exhaust_flow_fault': 'unreliable', '_extra': '00'}
# Compare 'indoor_temp': 20.55, 'exhaust_temp': 18.95 with temperatures in 12A0 at same time:
# 2024-10-18T01:13:47.417683 064  I --- 37:153226 --:------ 37:153226 12A0 021 003F08077FFF0001EF7FFF7FFF00024E06D6055D00
# [{'hvac_idx': '00', 'indoor_humidity': 0.65, 'temperature': 19.33, 'dewpoint_temp': None},
#  {'hvac_idx': '01', 'rel_humidity': None},
#  {'hvac_idx': '02', 'outdoor_humidity': 0.71, 'temperature': 18.73, 'dewpoint_temp': 13.44}]
# Selector string:
# My VenturaV1x: BE09001F = BE 09 00 1F  = d 190  9   0  31 (1F = Fan Info)
# Another HVC:   F800EF18 = F8 00 EF 18  = d 248  0  NA  24
# An unidentified HVC (picked up from the neighbours' house):
2024-10-21T00:03:43.334878 084  I --- 37:125482 --:------ 37:125482 31DA 030 00EF007FFF4BEF7FFF7FFF7FFF7FFFF800EF18C8000000EFEF7FFF7FFF00  # {'hvac_id': '00', 'exhaust_fan_speed': 1.0, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.75, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': None, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
# Same, Rainy:
2024-10-21T13:25:18.172659 084  I --- 37:125482 --:------ 37:125482 31DA 030 00EF007FFF41EF7FFF7FFF7FFF7FFFF800EF183C000000EFEF7FFF7FFF00  # {'hvac_id': '00', 'exhaust_fan_speed': 0.3, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.65, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['off', 'low_med_high', 'timer', 'boost', 'auto'], 'bypass_position': None, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
# D60 same moment:
2024-10-21T13:21:55.233373 094  I --- 32:022222 --:------ 32:022222 31DA 030 00EF007FFFEFEF06CA077307C00692A800EF0232320000EF00053502EE00  # {'hvac_id': '00', 'exhaust_fan_speed': 0.25, 'fan_info': 'speed 2, medium', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temp': 17.38, 'supply_temp': 19.07, 'indoor_temp': 19.84, 'outdoor_temp': 16.82, 'speed_capabilities': ['off', 'timer', 'auto'], 'bypass_position': None, 'supply_fan_speed': 0.25, 'remaining_mins': 0, 'post_heat': None, 'pre_heat': 0.0, 'supply_flow': 13.33, 'exhaust_flow': 7.5, '_extra': '00'}

# VenturaV1x cont. Rainy cf. D60 'exhaust_temp': 17.38, 'supply_temp': 19.07, 'indoor_temp': 19.84, 'outdoor_temp': 16.82 matching temps
2024-10-21T13:19:33.347521 060  I --- 37:153226 --:------ 37:153226 31DA 030 00EF00019E00EF06E57FFF07FF0763BE09001F0000000000008500850000  # {'hvac_id': '00', 'exhaust_fan_speed': 0.0, 'fan_info': '-unknown 0x1F-', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 414, 'indoor_humidity': 0.0, 'outdoor_humidity': None, 'exhaust_temp': 17.65, 'supply_temp': None, 'indoor_temp': 20.47, 'outdoor_temp': 18.91, 'speed_capabilities': ['off', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'auto_night', 'pre_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': 0.0, 'supply_flow_fault': 'unreliable', 'exhaust_flow_fault': 'unreliable', '_extra': '00'}
## 2024-10-21T13:29:34.002088 061  I --- 37:153226 --:------ 37:153226 31DA 030 00EF00019F00EF06E17FFF07FB0764BE09001F0000000000008500850000  # {'hvac_id': '00', 'exhaust_fan_speed': 0.63, 'fan_info': '-unknown 0x1F-', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 647, 'indoor_humidity': 0.0, 'outdoor_humidity': None, 'exhaust_temp': 19.02, 'supply_temp': None, 'indoor_temp': 18.84, 'outdoor_temp': 15.59, 'speed_capabilities': ['off', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'auto_night', 'pre_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.63, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': 0.0, 'supply_flow_fault': 'unreliable', 'exhaust_flow_fault': 'unreliable', '_extra': '00'}
# Manual 2, same temps, note CO2 level (CO2 sensor in room: 681 ppm = 0x02A9) so 415 is something else (HexStr2)
## 2024-10-21T13:49:35.331599 061  I --- 37:153226 --:------ 37:153226 31DA 030 00EF00019E00EF06E17FFF08020766BE09001F0000000000008500850000  # {'hvac_id': '00', 'exhaust_fan_speed': 0.63, 'fan_info': '-unknown 0x1F-', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 647, 'indoor_humidity': 0.0, 'outdoor_humidity': None, 'exhaust_temp': 19.02, 'supply_temp': None, 'indoor_temp': 18.84, 'outdoor_temp': 15.59, 'speed_capabilities': ['off', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'auto_night', 'pre_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.63, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': 0.0, 'supply_flow_fault': 'unreliable', 'exhaust_flow_fault': 'unreliable', '_extra': '00'}
# 12A0 from same HRU at same moment: # 2024-10-21T13:49:35.480133 060  I --- 37:153226 --:------ 37:153226 12A0   [snip]                   # [{'hvac_idx': '00', 'indoor_humidity': 0.65, 'temperature': 20.5, 'dewpoint_temp': None}, {'hvac_idx': '01', 'rel_humidity': None}, {'hvac_idx': '02', 'outdoor_humidity': 0.78, 'temperature': 17.61, 'dewpoint_temp': 13.81}]
# Next boosting speed 5 (in 12A0): rising CO2 is clearly wrong, temp dropping indoors OK
2024-10-21T14:39:38.823617 061  I --- 37:153226 --:------ 37:153226 31DA 030 00EF00028700EF076E7FFF075C0617BE09001F7E7E000000008500850000  # {'hvac_id': '00', 'exhaust_fan_speed': 0.63, 'fan_info': '-unknown 0x1F-', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 647, 'indoor_humidity': 0.0, 'outdoor_humidity': None, 'exhaust_temp': 19.02, 'supply_temp': None, 'indoor_temp': 18.84, 'outdoor_temp': 15.59, 'speed_capabilities': ['off', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'auto_night', 'pre_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.63, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': 0.0, 'supply_flow_fault': 'unreliable', 'exhaust_flow_fault': 'unreliable', '_extra': '00'}
# Down to speed 3
2024-10-21T14:59:40.122477 061  I --- 37:153226 --:------ 37:153226 31DA 030 00EF00023900EF07597FFF07390620BE09001F2828000000008500850000  # {'hvac_id': '00', 'exhaust_fan_speed': 0.2, 'fan_info': '-unknown 0x1F-', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 569, 'indoor_humidity': 0.0, 'outdoor_humidity': None, 'exhaust_temp': 18.81, 'supply_temp': None, 'indoor_temp': 18.49, 'outdoor_temp': 15.68, 'speed_capabilities': ['off', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'auto_night', 'pre_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.2, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': 0.0, 'supply_flow_fault': 'unreliable', 'exhaust_flow_fault': 'unreliable', '_extra': '00'}
# Back to Auto, 1h later
2024-10-21T16:19:45.476345 061  I --- 37:153226 --:------ 37:153226 31DA 030 00EF0001BD00EF06FD7FFF07CA0743BE09001F0000000000008500850000  # {'hvac_id': '00', 'exhaust_fan_speed': 0.0, 'fan_info': '-unknown 0x1F-', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': 445, 'indoor_humidity': 0.0, 'outdoor_humidity': None, 'exhaust_temp': 17.89, 'supply_temp': None, 'indoor_temp': 19.94, 'outdoor_temp': 18.59, 'speed_capabilities': ['off', 'timer', 'boost', 'auto', 'speed_4', 'speed_5', 'auto_night', 'pre_heater'], 'bypass_position': 0.0, 'supply_fan_speed': 0.0, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': 0.0, 'supply_flow_fault': 'unreliable', 'exhaust_flow_fault': 'unreliable', '_extra': '00'}
# speed is correct, exhaust_temp rises to room temp when no fresh air passing, actual outdoor_temp is now in fact 15.3C (independent sensor), room_temp = 20.2C (measured using an independent sensor, see 12A0)
# 2025-04-28T16:22:00.000000 000  I --- 37:153226 --:------ 37:153226 31DA 030 00EF000251D3EF085C7FFF09D208DCBE09001F0000000000008500850000 # {}
# RH > 1.0! 0xD3 = d211/200 <<< AssertionError(D3)

# Nuaire CO2 to PIV ECO-RM by stevieb12345
2026-02-22T02:18:44.604884 073 RQ --- 32:166025 30:079129 --:------ 31DA 001 21                                                             # {}
2026-02-22T02:13:07.726180 055  I --- 30:072506 --:------ 30:072506 31DA 030 21EF007FFF39EF7FFF7FFF7FFF7FFF0002EF18FFFF000000EF7FFF7FFF00   # {'hvac_id': '21', 'exhaust_fan_speed': None, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.57, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['post_heater'], 'bypass_position': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
2026-02-22T02:52:30.764085 055  I --- 30:072506 --:------ 30:072506 31DA 030 21EF007FFF39EF7FFF7FFF7FFF7FFF0002EF18FFFF000000EF7FFF7FFF00   # {'hvac_id': '21', 'exhaust_fan_speed': None, 'fan_info': 'auto', '_unknown_fan_info_flags': [0, 0, 0], 'air_quality': None, 'co2_level': None, 'indoor_humidity': 0.57, 'outdoor_humidity': None, 'exhaust_temp': None, 'supply_temp': None, 'indoor_temp': None, 'outdoor_temp': None, 'speed_capabilities': ['post_heater'], 'bypass_position': None, 'supply_fan_speed': None, 'remaining_mins': 0, 'post_heat': 0.0, 'pre_heat': None, 'supply_flow': None, 'exhaust_flow': None, '_extra': '00'}
