zxdavb / ramses_rf

An interface for the RAMSES RF protocol, as used by Honeywell-compatible HVAC & CH/DHW systems.
MIT License
62 stars 17 forks source link

AssertionError for 31DA #39

Closed dennisvbussel closed 1 year ago

dennisvbussel commented 2 years ago

First of all, my complements on the amount of work done in this and in the accompanying repositories.

At home I have an Itho HVAC system which I eventually want to integrate in my home automation system (homeassistant). My ventilation unit (HRU ECO 300) is rf-coupled with my thermostat (Spider). Remote control works fine and if I control the ventilation locally using a 3-way switch then the thermostat correctly updates its ventilation state. This way I know that my ventilation unit is broadcasting it's state, next step is receive and decode this information.

As hardware I use a Arduino pro Micro in combination with CC1101 868MHz Module flashed with evofw3 Version 0.7.0.

The following command is used to eavesdrop the ventilation packets: python client.py listen COM13

The following packet contains the information I need to retrieve the status of my ventilation unit:

20:44:09.259  I --- 18:126620 --:------ 18:126620 31DA 029 00F0007FFFEFEF0443034B07A7032B4000C80100FF0000EFEF2BB62BB6 << AssertionError(F0)
Traceback (most recent call last):
  File "C:\DEV\ramses_rf\ramses_rf\protocol\message.py", line 355, in _validate
    result = PAYLOAD_PARSERS.get(self.code, parser_unknown)(
  File "C:\DEV\ramses_rf\ramses_rf\protocol\parsers.py", line 126, in wrapper
    return func(*args, **kwargs)
  File "C:\DEV\ramses_rf\ramses_rf\protocol\parsers.py", line 1531, in parser_31da
    assert payload[2:4] in ("00", "EF"), payload[2:4]
AssertionError: F0

Took a while to decode this message by hand:

Byte:
00 - ? -> No clue what this byte could be
F0 - Air quality -> shorted sensor
00 - Quality base -> based on outside air
7FFF - Co2 Level -> Not available
EF - Outdoor humidity -> Not available
EF - Indoor humidity -> Not available
0457 - Exhaust temperature -> Value tbd
0360 - Supply temperature -> Value tbd
079B - Indoor temperature -> Value tbd
033B - Outdoor temperature -> Value tbd
4000 - Capability flags -> Away capable?
C8 - Bypass position -> Value tbd
02 - Flags -> Speed 2
50 - Exhaust fan speed -> Value tbd
FF - Inlet fan speed     -> Not available
0000 - Remaining time -> off
EF - Post heater -> Not available
EF - Pre heater -> Not available    
43E4 - Inlet flow -> Value tbd
43E4 - Exhaust flow  -> Value tbd

My goal is to eventually get these values into HomeAssistant using evohome_cc. Can you help me overcome the error above and point me into the right direction getting this into HomeAssistant?

Thanks in advance!

zxdavb commented 2 years ago

Welcome!

Have you tried python -O client.py listen COM13 - the -O turns off the Asserts.

Have you read: https://github.com/zxdavb/ramses_rf/issues/29

It is a matter of tweaking the code: ramses_rf, then evohome_cc.

Start by sending me some packet logs.

dennisvbussel commented 2 years ago

Hi,

Thank you for your quick reply. I tuned off the Asserts and had some fun with my thermostat/ventilation:

I ran the following sequence starting from speed 2: Speed 2 -> Speed 3 -> Speed 3 (10min) -> Speed 3 -> (20min) -> Speed 3 -> (30min)

Looking at the log data i clearly see the responses:

15:20:54.976 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.91, 'outdoor_temperature': 11.4, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3', 'exhaust_fan_speed': 0.4, 'supply_fan_speed': None, 'remaining_time': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 167.5, 'exhaust_flow': 167.5}
15:20:54.976 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.91, 'outdoor_temperature': 11.4, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3', 'exhaust_fan_speed': 0.4, 'supply_fan_speed': None, 'remaining_time': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 167.5, 'exhaust_flow': 167.5}
15:20:55.022  I --- 21:038634 18:126620 --:------ 22F1 003 000407 << Corrupt packet: Invalid code for 21:038634 to Tx: 22F1 (will be ignored)
15:20:55.053 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.91, 'outdoor_temperature': 11.4, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3', 'exhaust_fan_speed': 0.4, 'supply_fan_speed': None, 'remaining_time': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 167.5, 'exhaust_flow': 167.5}
15:20:55.053 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.91, 'outdoor_temperature': 11.4, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3', 'exhaust_fan_speed': 0.4, 'supply_fan_speed': None, 'remaining_time': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 167.5, 'exhaust_flow': 167.5}
15:20:55.084 RQ --- 21:038634 18:126620 --:------ 31DA 001 00 << Corrupt packet: Invalid code for 21:038634 to Tx: 31DA (will be ignored)
15:20:55.115 || HGI:126620 | 21 :038634 | RP | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.91, 'outdoor_temperature': 11.4, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3', 'exhaust_fan_speed': 0.4, 'supply_fan_speed': None, 'remaining_time': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 167.5, 'exhaust_flow': 167.5}
15:20:55.115 || HGI:126620 | 21 :038634 | RP | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.91, 'outdoor_temperature': 11.4, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3', 'exhaust_fan_speed': 0.4, 'supply_fan_speed': None, 'remaining_time': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 167.5, 'exhaust_flow': 167.5}
15:20:58.212  I --- 21:038634 18:126620 --:------ 22F3 007 00000A00000000 << Corrupt packet: Invalid code for 21:038634 to Tx: 22F3 (will be ignored)
15:20:58.244 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.94, 'outdoor_temperature': 11.42, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.5, 'supply_fan_speed': None, 'remaining_time': 10, 'post_heat': None, 'pre_heat': None, 'supply_flow': 171.9, 'exhaust_flow': 171.9}
15:20:58.244 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.94, 'outdoor_temperature': 11.42, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.5, 'supply_fan_speed': None, 'remaining_time': 10, 'post_heat': None, 'pre_heat': None, 'supply_flow': 171.9, 'exhaust_flow': 171.9}
15:20:58.290  I --- 21:038634 18:126620 --:------ 22F3 007 00000A00000000 << Corrupt packet: Invalid code for 21:038634 to Tx: 22F3 (will be ignored)
15:20:58.336 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.94, 'outdoor_temperature': 11.42, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.5, 'supply_fan_speed': None, 'remaining_time': 10, 'post_heat': None, 'pre_heat': None, 'supply_flow': 171.9, 'exhaust_flow': 171.9}
15:20:58.337 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.94, 'outdoor_temperature': 11.42, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.5, 'supply_fan_speed': None, 'remaining_time': 10, 'post_heat': None, 'pre_heat': None, 'supply_flow': 171.9, 'exhaust_flow': 171.9}
15:20:58.383  I --- 21:038634 18:126620 --:------ 22F3 007 00000A00000000 << Corrupt packet: Invalid code for 21:038634 to Tx: 22F3 (will be ignored)
15:20:58.414 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.94, 'outdoor_temperature': 11.42, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.5, 'supply_fan_speed': None, 'remaining_time': 10, 'post_heat': None, 'pre_heat': None, 'supply_flow': 171.9, 'exhaust_flow': 171.9}
15:20:58.414 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.94, 'outdoor_temperature': 11.42, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.5, 'supply_fan_speed': None, 'remaining_time': 10, 'post_heat': None, 'pre_heat': None, 'supply_flow': 171.9, 'exhaust_flow': 171.9}
15:20:59.725  I --- 21:038940 --:------ 21:038940 3110 004 00006F10 << Corrupt packet: Unknown verb/code pair:  I/3110 (will be ignored)
15:21:00.773  I --- 21:038634 18:126620 --:------ 22F3 007 00001400000000 << Corrupt packet: Invalid code for 21:038634 to Tx: 22F3 (will be ignored)
15:21:00.819 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.94, 'outdoor_temperature': 11.42, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.66, 'supply_fan_speed': None, 'remaining_time': 20, 'post_heat': None, 'pre_heat': None, 'supply_flow': 182.5, 'exhaust_flow': 182.5}
15:21:00.819 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.94, 'outdoor_temperature': 11.42, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.66, 'supply_fan_speed': None, 'remaining_time': 20, 'post_heat': None, 'pre_heat': None, 'supply_flow': 182.5, 'exhaust_flow': 182.5}
15:21:00.850  I --- 21:038634 18:126620 --:------ 22F3 007 00001400000000 << Corrupt packet: Invalid code for 21:038634 to Tx: 22F3 (will be ignored)
15:21:00.881 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.94, 'outdoor_temperature': 11.42, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.66, 'supply_fan_speed': None, 'remaining_time': 20, 'post_heat': None, 'pre_heat': None, 'supply_flow': 182.5, 'exhaust_flow': 182.5}
15:21:00.881 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.94, 'outdoor_temperature': 11.42, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.66, 'supply_fan_speed': None, 'remaining_time': 20, 'post_heat': None, 'pre_heat': None, 'supply_flow': 182.5, 'exhaust_flow': 182.5}
15:21:00.928  I --- 21:038634 --:------ 21:038634 3110 004 00004E10 << Corrupt packet: Unknown verb/code pair:  I/3110 (will be ignored)
15:21:01.005  I --- 21:038634 18:126620 --:------ 22F3 007 00001400000000 << Corrupt packet: Invalid code for 21:038634 to Tx: 22F3 (will be ignored)
15:21:01.052 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.94, 'outdoor_temperature': 11.42, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.66, 'supply_fan_speed': None, 'remaining_time': 20, 'post_heat': None, 'pre_heat': None, 'supply_flow': 182.5, 'exhaust_flow': 182.5}
15:21:01.052 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.94, 'outdoor_temperature': 11.42, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.66, 'supply_fan_speed': None, 'remaining_time': 20, 'post_heat': None, 'pre_heat': None, 'supply_flow': 182.5, 'exhaust_flow': 182.5}
15:21:03.486  I --- 21:038634 18:126620 --:------ 22F3 007 00001E00000000 << Corrupt packet: Invalid code for 21:038634 to Tx: 22F3 (will be ignored)
15:21:03.517 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.91, 'outdoor_temperature': 11.4, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.83, 'supply_fan_speed': None, 'remaining_time': 30, 'post_heat': None, 'pre_heat': None, 'supply_flow': 191.7, 'exhaust_flow': 191.7}
15:21:03.518 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.91, 'outdoor_temperature': 11.4, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.83, 'supply_fan_speed': None, 'remaining_time': 30, 'post_heat': None, 'pre_heat': None, 'supply_flow': 191.7, 'exhaust_flow': 191.7}
15:21:03.564  I --- 21:038634 18:126620 --:------ 22F3 007 00001E00000000 << Corrupt packet: Invalid code for 21:038634 to Tx: 22F3 (will be ignored)
15:21:03.641  I --- 21:038634 18:126620 --:------ 22F3 007 00001E00000000 << Corrupt packet: Invalid code for 21:038634 to Tx: 22F3 (will be ignored)
15:21:03.688 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.91, 'outdoor_temperature': 11.4, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.83, 'supply_fan_speed': None, 'remaining_time': 30, 'post_heat': None, 'pre_heat': None, 'supply_flow': 191.7, 'exhaust_flow': 191.7}
15:21:03.688 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.96, 'supply_temperature': 11.76, 'indoor_temperature': 19.91, 'outdoor_temperature': 11.4, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 3 temporary override', 'exhaust_fan_speed': 0.83, 'supply_fan_speed': None, 'remaining_time': 30, 'post_heat': None, 'pre_heat': None, 'supply_flow': 191.7, 'exhaust_flow': 191.7}
15:21:06.198 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.97, 'supply_temperature': 11.76, 'indoor_temperature': 19.94, 'outdoor_temperature': 11.38, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 1', 'exhaust_fan_speed': 0.93, 'supply_fan_speed': None, 'remaining_time': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 207.7, 'exhaust_flow': 207.7}
15:21:06.198 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 12.97, 'supply_temperature': 11.76, 'indoor_temperature': 19.94, 'outdoor_temperature': 11.38, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 1', 'exhaust_fan_speed': 0.93, 'supply_fan_speed': None, 'remaining_time': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 207.7, 'exhaust_flow': 207.7}
15:21:06.244  I --- 21:038634 18:126620 --:------ 22F1 003 000207 << Corrupt packet: Invalid code for 21:038634 to Tx: 22F1 (will be ignored)
15:21:06.352 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 13.0, 'supply_temperature': 11.71, 'indoor_temperature': 19.91, 'outdoor_temperature': 11.38, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 1', 'exhaust_fan_speed': 0.94, 'supply_fan_speed': None, 'remaining_time': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 214.9, 'exhaust_flow': 214.9}
15:21:06.352 || HGI:126620 |            |  I | vent_31da        |      || {'air_quality': 1.2, 'air_quality_base': 0, 'co2_level': None, 'indoor_humidity': None, 'outdoor_humidity': None, 'exhaust_temperature': 13.0, 'supply_temperature': 11.71, 'indoor_temperature': 19.91, 'outdoor_temperature': 11.38, 'speed_cap': 16384, 'bypass_pos': 1.0, 'fan_info': 'speed 1', 'exhaust_fan_speed': 0.94, 'supply_fan_speed': None, 'remaining_time': 0, 'post_heat': None, 'pre_heat': None, 'supply_flow': 214.9, 'exhaust_flow': 214.9}

Id's 22f1 and 22f3 gives te follwoing error and are manually decodeable: Corrupt packet: Invalid code for 21:038634 to Tx: 22F3 (will be ignored)

22F1 003 000407 ID: 22f1 controls ventilation speed

22F3 007 00001400000000 ID: 22f3 controls timed ventilation speed

I eventually also want the now controlled by the button on the thermostat id [22f1] and [22f3] controlled using HomeAssistant if possible.

I feel like i'm nearly there :)

reneklootwijk commented 2 years ago

I have multiple RF remotes for my Itho ventilation unit. The remotes send id 22F1 with the following data for the various modes:

The ventilation unit itself reports its status using id 31d9 with the following data:

zxdavb commented 1 year ago

I believe all this has been addressed - so am closing this issue - please comment below if I am wrong.