Honeywell CH/DHW via RF - evohome, sundial, hometronics, chronotherm

The above makes sense - ramses_cc.water_heater is not failing.

walked right into this one :slight_smile: will downgradeā€¦

Thanks Devid.
Restored backup from 3 days ago and that got the system operational again. The only change to HA during this period was adding a extra router using ASUSWRT integration so not sure if that somehow broke ramses_cc.

I have released 0.21.40 (stable) and 0.22.40 (latest) versions to address the bug with HA v2023.1:

Unable to prepare setup for platform ramses_cc.sensor: Platform not found (
  cannot import name 'TEMP_CELSIUS' from 'homeassistant.components.sensor' 
    (/usr/src/homeassistant/homeassistant/components/sensor/__init__.py)
).

0.21.40 works as expected on HA 2023.1.1

going from 0.21.6 to 0.21.40 on HA 2022.12.9 gives the following error. not sure if it can handle both flavours of constant? or needs a warning that HA 2023.1.0 is minimum?

Unable to prepare setup for platform ramses_cc.sensor: Platform not found (cannot import name 'UnitOfTime' from 'homeassistant.const' (/srv/homeassistant/lib/python3.10/site-packages/homeassistant/const.py)).

Yes, 2023.1.0 should be the minimum - I did all my testing on 2023.1.1, though.

1 Like

Thanks for the quick fix.

I should start by saying that although Chronotherm is supported, that support is limited compared to evohome.

I am sorry for not making this more clear on the first post.

There have always been plans to make Chronotherm a first-class citizen, but this has been hampered by several factors.

The 18:xxxxxx device is the HGI80-compatible RF to USB gateway (the dongle you purchased).

I would call it a programmer, rather than a thermostat (HA will call it a 'stat, though).

It is unclear to me (the dev) you the limits are of what you can achieve from ramses_cc (expecially with changes to ramses_rf), but I have a feeling you have not reached the limit.

But I am curiousā€¦

If you like, please start by posting your configuration.yaml, and sending me a 24h packet log that includes a restart of HA. I will PM you if you prefer to do so via PM, rather than posting here.

@zxdavb can you tell me if 0.22.4 includes a fix for the send_packet issue that was introduced in 0.22.2?

No - and I need to do something about that, I guess.

Ok Thanks. Iā€™ll stay back on 0.22.1 for now, and manually edit for the files for the breaking change in core.

I registered to say thanks to @zxdavb and @ghoti57 (and others) for ramses_* and evofw3 respectively. Thatā€™s a huge stack of well thought out software to integrate an undocumented protocol.

One suggestion for ramses_cc: would it be possible to add ā€˜Relatedā€™ entries for Evohome Entities, presumably mirroring the schema? On other HA integrations (ESPHome, Shelly) I like being able to hop across and up/down the Device/Entity hierarchy via that tab in the Entity pop-up. e.g. from a zone climate control, youā€™d be able to click through to see Demand, individual valve temperatures (in a multi-actuator zone), battery status etc.

All of the above is planned - but I am very limited with time - I would welcome pull requests from the community.

I would also love to see ramses_cc to be a first class HACS citizen.

Hi Bart Jan,

Regarding the little information overload, been there done that :slight_smile:

Combined with air quality sensors, controlling my Orcon MVS-15RHBP works flawlessly using nanoCul / evofw3 / ramses_cc / HA.
I still think it should be possible to read/request the current fan mode and humidity from the Orcon but somehow it doesnā€™t work. I did a lot of debugging and asked for help here but to no avail yet :slight_smile:

I donā€™t have a video tutorial for you, not even written instructions. Hopefully, my memory doesnā€™t fail me!

I ordered my nanoCul from here: nanoCUL 868 MHz ā™¦ schlauHAUS (FTDI) with culfw and the magnetic base antenna to increase the range. I had to do a lot of trial and error when programming evofw3 but succeeded in the end. I used XLoader instead of Arduino IDE to program the nanoCul, more info: Tutorial - die nanoCUL Firmware updaten - Smarthome Agentur (Dresden)
Use at your own risk!
Before programming you have to put the nanoCul in bootloader mode. Use e.g. hterm software to do this. Verify correct communication by sending ā€œVā€ to get version information back. Switch to bootloader mode by sending ā€œBā€. And you have to compile the evofw3 firmware, using Arduino IDE select board atmega328p (SW UART) and pinout Nano, then run Sketch -> Export Compiled Binary and program this file using XLoader. Of course, you can try using Arduino IDE first.

Now (after programming evofw3 using Xloader) I can use Arduino IDE but I have to select Tools -> Bootloader -> Old bootloader.

Attach the nanoCul to your HA system.
Install ramses_cc according to: 1. Installation Ā· zxdavb/ramses_cc Wiki Ā· GitHub
Depending on your system you probably can run ls -l /dev/serial/by-id to get the id of the nanoCul.
For example I added this to ramses_ccā€™s configuration:
serial_port: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0

Then enable packet.log according to 2. configuration.yaml Ā· zxdavb/ramses_cc Wiki Ā· GitHub, play around with the Orcon remote and look for familiar device idā€™s etc, populate and enforce your known list.
If youā€™ll make it this far I can share my configuration with you for reference.

Cheers,
Nico

1 Like

@nickasdf

Please post a couple of lines from your packet log, like so:

grep -E ' (12A0|31D.) ...' .secret*/*/*.log | head -20

I have an orcon hrc 500 and ramses_cc gives access to all the data provided by the ventillation unit (fan speed, air temperature and humidity, booster time remaining, bypass mode, ā€¦). Since the HRC 500 uses the same remote control as the MVS 15 I would expect that you can get all the information via ramses_cc too.
I did not have anything special to do to get access to the information. I just configured my system as detailed in the wiki. I even used the orcon remote control codes as provided in the wiki and did not bother recording my own. It works perfectly.

The only small thing I noticed is that the temperature of the air exhaust and of the outdoor air seems to be labelled the wrong way round (exhaust should be outdoor and vice versa), but this is a detail and it might be down to me thinking about direction of air in the wrong way :wink:

Thanks!! great post!!

At least this looks like something to start off with.

Still in an little doubt between getting the SSM-D2 from Indaloā€¦ due the antenna rangeā€¦ How is your setup considering concrete walls and floors? For me the signal have to go from the meter cupboard to the attic (2 floors up) with several concrete floors or walls in between.

Do you think the nanocul will do the job?

Orcon HRC 400 here. Why do you think the temperatures are the wrong way around? On my system, the exhaust temperature is (at least now) always higher than the outdoor temperature, which I think makes sense. Also, when the indoor temperature is temporarily higher, I see the supply temperature and the exhaust temperature rise, whereas the outdoor temperature remains almost the same.

Exhaust temperature is measured after heat recovery, outdoor temperature is measured before heat recovery.

2023-01-10T23:30:45.786577 ...  I --- 32:236773 --:------ 32:236773 31D9 003 000001 # 31D9| I|32:236773|00 (00)
2023-01-10T23:32:52.894954 059  I --- 32:236773 --:------ 32:236773 31D9 003 000001
2023-01-10T23:32:57.609834 059  I --- 32:236773 --:------ 32:236773 31D9 003 000002
2023-01-10T23:32:58.423746 059  I --- 32:236773 --:------ 32:236773 31D9 003 000002
2023-01-10T23:33:10.315701 059  I --- 32:236773 --:------ 32:236773 31D9 003 000003
2023-01-10T23:33:10.430760 058  I --- 32:236773 --:------ 32:236773 31D9 003 000003
2023-01-10T23:33:20.049429 059  I --- 32:236773 --:------ 32:236773 31D9 003 000004
2023-01-10T23:33:20.433495 059  I --- 32:236773 --:------ 32:236773 31D9 003 000004
2023-01-11T00:05:05.671114 ...  I --- 32:236773 --:------ 32:236773 31D9 003 000004 # 31D9| I|32:236773|00 (00)
2023-01-11T00:09:33.617176 059  I --- 32:236773 --:------ 32:236773 31D9 003 000004
2023-01-11T00:09:41.971107 059  I --- 32:236773 --:------ 32:236773 31D9 003 000003
2023-01-11T00:09:42.461150 059  I --- 32:236773 --:------ 32:236773 31D9 003 000003
2023-01-11T00:18:28.343090 ...  I --- 32:236773 --:------ 32:236773 31D9 003 000003 # 31D9| I|32:236773|00 (00)
2023-01-11T00:24:41.919909 059  I --- 32:236773 --:------ 32:236773 31D9 003 000004
2023-01-11T00:26:06.789067 ...  I --- 32:236773 --:------ 32:236773 31D9 003 000003 # 31D9| I|32:236773|00 (00)
2023-01-11T00:35:31.043707 ...  I --- 32:236773 --:------ 32:236773 31D9 003 000003 # 31D9| I|32:236773|00 (00)
2023-01-11T00:38:27.609403 ...  I --- 32:236773 --:------ 32:236773 31D9 003 000003 # 31D9| I|32:236773|00 (00)
2023-01-11T00:41:43.544510 000 RQ --- 18:070912 32:236773 --:------ 31D9 001 00
2023-01-11T00:41:43.561379 060 RP --- 32:236773 18:070912 --:------ 31D9 003 000004
2023-01-11T00:42:00.856729 000 RQ --- 18:070912 32:236773 --:------ 31D9 001 00
2023-01-11T00:42:00.871288 060 RP --- 32:236773 18:070912 --:------ 31D9 003 000004
2023-01-11T08:39:30.103293 059  I --- 32:236773 --:------ 32:236773 31D9 003 000001
2023-01-11T08:59:30.063264 060  I --- 32:236773 --:------ 32:236773 31D9 003 000002
2023-01-11T08:59:30.713354 060  I --- 32:236773 --:------ 32:236773 31D9 003 000002
2023-01-11T09:28:00.114894 061  I --- 32:236773 --:------ 32:236773 31D9 003 000001
2023-01-11T09:28:00.596207 061  I --- 32:236773 --:------ 32:236773 31D9 003 000001
2023-01-11T18:38:30.077385 059  I --- 32:236773 --:------ 32:236773 31D9 003 000002
2023-01-11T18:38:30.278577 059  I --- 32:236773 --:------ 32:236773 31D9 003 000002
2023-01-11T19:02:52.781394 000 RQ --- 18:070912 32:236773 --:------ 31D9 001 00
2023-01-11T19:02:52.797609 059 RP --- 32:236773 18:070912 --:------ 31D9 003 000002

I did not find any 31DA packages which I thought Iā€™d seen before but maybe I was confused with a neighborā€™s device.

As you can see I used the send_packet service and got responses when requesting a 31D9 message (doesnā€™t work for 31DA). This message was also sent a few times during the day without request (from fan to fan?), it looks like it will send this package when I switch the fan mode.

The 31D9 message payload is pretty small and by the looks of it, it only contains the current fan mode? My Orcon MVS-15 has a humidity sensor (I donā€™t have a CO2 remote).

edit
I found some interesting lines in the HA logs:

2023-01-11 00:35:31.026 INFO (MainThread) [ramses_rf.dispatcher] || FAN:236773 |  18:070912 | RP | fan_mode         |      || {'fan_mode': 'low', '_scheme': 'orcon', '_mode_idx': '01', '_mode_max': '04'}
2023-01-11 00:35:31.039 INFO (MainThread) [ramses_rf.dispatcher] || REM:163367 | FAN:236773 |  I | fan_mode         |      || {'fan_mode': 'auto', '_scheme': 'orcon', '_mode_idx': '04', '_mode_max': '04'}
2023-01-11 00:35:31.042 INFO (MainThread) [ramses_rf.dispatcher] || REM:163367 | FAN:236773 |  I | fan_boost        |      || {'minutes': 15, 'flags': [0, 0, 0, 0, 0, 0, 1, 0], '_new_speed_mode': 'per_vent_speed', '_fallback_speed_mode': None, 'rate': None, '_unknown_5': '0000'}
2023-01-11 00:35:31.047 INFO (MainThread) [ramses_rf.dispatcher] || FAN:236773 |            |  I | fan_state        |  00  || {'exhaust_fan_speed': 0.015, 'fan_mode': '03', 'passive': False, 'damper_only': False, 'filter_dirty': False, 'frost_cycle': False, 'has_fault': False, '_flags': [0, 0, 0, 0, 0, 0, 0, 0]}
2023-01-11 00:38:27.360 INFO (MainThread) [ramses_rf.dispatcher] || FAN:236773 |  18:070912 | RP | fan_mode         |      || {'fan_mode': 'low', '_scheme': 'orcon', '_mode_idx': '01', '_mode_max': '04'}
2023-01-11 00:38:27.378 INFO (MainThread) [ramses_rf.dispatcher] || REM:163367 | FAN:236773 |  I | fan_mode         |      || {'fan_mode': 'auto', '_scheme': 'orcon', '_mode_idx': '04', '_mode_max': '04'}
2023-01-11 00:38:27.608 INFO (MainThread) [ramses_rf.dispatcher] || REM:163367 | FAN:236773 |  I | fan_boost        |      || {'minutes': 15, 'flags': [0, 0, 0, 0, 0, 0, 1, 0], '_new_speed_mode': 'per_vent_speed', '_fallback_speed_mode': None, 'rate': None, '_unknown_5': '0000'}
2023-01-11 00:38:27.626 INFO (MainThread) [ramses_rf.dispatcher] || FAN:236773 |            |  I | fan_state        |  00  || {'exhaust_fan_speed': 0.015, 'fan_mode': '03', 'passive': False, 'damper_only': False, 'filter_dirty': False, 'frost_cycle': False, 'has_fault': False, '_flags': [0, 0, 0, 0, 0, 0, 0, 0]}
2023-01-11 00:40:42.913 INFO (MainThread) [ramses_rf.dispatcher] || FAN:236773 | HGI:070912 | RP | device_info      |      || {'date_2': '0000-00-00', 'date_1': '0000-00-00', 'manufacturer_sub_id': 'C8', 'product_id': '5F', 'oem_code': '67', 'description': 'VMC-15RPS34'}
2023-01-11 00:41:43.564 INFO (MainThread) [ramses_rf.dispatcher] || FAN:236773 | HGI:070912 | RP | fan_state        |      || {'exhaust_fan_speed': 0.02, 'fan_mode': '04', 'passive': False, 'damper_only': False, 'filter_dirty': False, 'frost_cycle': False, 'has_fault': False, '_flags': [0, 0, 0, 0, 0, 0, 0, 0]}
2023-01-11 00:42:00.872 INFO (MainThread) [ramses_rf.dispatcher] || FAN:236773 | HGI:070912 | RP | fan_state        |      || {'exhaust_fan_speed': 0.02, 'fan_mode': '04', 'passive': False, 'damper_only': False, 'filter_dirty': False, 'frost_cycle': False, 'has_fault': False, '_flags': [0, 0, 0, 0, 0, 0, 0, 0]}
2023-01-11 08:39:30.090 INFO (MainThread) [ramses_rf.dispatcher] || REM:163367 | FAN:236773 |  I | fan_mode         |      || {'fan_mode': 'low', '_scheme': 'orcon', '_mode_idx': '01', '_mode_max': '04'}
2023-01-11 08:39:30.104 INFO (MainThread) [ramses_rf.dispatcher] || FAN:236773 |            |  I | fan_state        |  00  || {'exhaust_fan_speed': 0.005, 'fan_mode': '01', 'passive': False, 'damper_only': False, 'filter_dirty': False, 'frost_cycle': False, 'has_fault': False, '_flags': [0, 0, 0, 0, 0, 0, 0, 0]}
2023-01-11 08:59:30.050 INFO (MainThread) [ramses_rf.dispatcher] || REM:163367 | FAN:236773 |  I | fan_mode         |      || {'fan_mode': 'medium', '_scheme': 'orcon', '_mode_idx': '02', '_mode_max': '04'}
2023-01-11 08:59:30.065 INFO (MainThread) [ramses_rf.dispatcher] || FAN:236773 |            |  I | fan_state        |  00  || {'exhaust_fan_speed': 0.01, 'fan_mode': '02', 'passive': False, 'damper_only': False, 'filter_dirty': False, 'frost_cycle': False, 'has_fault': False, '_flags': [0, 0, 0, 0, 0, 0, 0, 0]}
2023-01-11 08:59:30.715 INFO (MainThread) [ramses_rf.dispatcher] || FAN:236773 |            |  I | fan_state        |  00  || {'exhaust_fan_speed': 0.01, 'fan_mode': '02', 'passive': False, 'damper_only': False, 'filter_dirty': False, 'frost_cycle': False, 'has_fault': False, '_flags': [0, 0, 0, 0, 0, 0, 0, 0]}
2023-01-11 09:28:00.102 INFO (MainThread) [ramses_rf.dispatcher] || REM:163367 | FAN:236773 |  I | fan_mode         |      || {'fan_mode': 'low', '_scheme': 'orcon', '_mode_idx': '01', '_mode_max': '04'}
2023-01-11 09:28:00.116 INFO (MainThread) [ramses_rf.dispatcher] || FAN:236773 |            |  I | fan_state        |  00  || {'exhaust_fan_speed': 0.005, 'fan_mode': '01', 'passive': False, 'damper_only': False, 'filter_dirty': False, 'frost_cycle': False, 'has_fault': False, '_flags': [0, 0, 0, 0, 0, 0, 0, 0]}
2023-01-11 09:28:00.598 INFO (MainThread) [ramses_rf.dispatcher] || FAN:236773 |            |  I | fan_state        |  00  || {'exhaust_fan_speed': 0.005, 'fan_mode': '01', 'passive': False, 'damper_only': False, 'filter_dirty': False, 'frost_cycle': False, 'has_fault': False, '_flags': [0, 0, 0, 0, 0, 0, 0, 0]}
2023-01-11 18:38:30.064 INFO (MainThread) [ramses_rf.dispatcher] || REM:163367 | FAN:236773 |  I | fan_mode         |      || {'fan_mode': 'medium', '_scheme': 'orcon', '_mode_idx': '02', '_mode_max': '04'}
2023-01-11 18:38:30.082 INFO (MainThread) [ramses_rf.dispatcher] || FAN:236773 |            |  I | fan_state        |  00  || {'exhaust_fan_speed': 0.01, 'fan_mode': '02', 'passive': False, 'damper_only': False, 'filter_dirty': False, 'frost_cycle': False, 'has_fault': False, '_flags': [0, 0, 0, 0, 0, 0, 0, 0]}
2023-01-11 18:38:30.280 INFO (MainThread) [ramses_rf.dispatcher] || FAN:236773 |            |  I | fan_state        |  00  || {'exhaust_fan_speed': 0.01, 'fan_mode': '02', 'passive': False, 'damper_only': False, 'filter_dirty': False, 'frost_cycle': False, 'has_fault': False, '_flags': [0, 0, 0, 0, 0, 0, 0, 0]}
2023-01-11 19:02:52.799 INFO (MainThread) [ramses_rf.dispatcher] || FAN:236773 | HGI:070912 | RP | fan_state        |      || {'exhaust_fan_speed': 0.01, 'fan_mode': '02', 'passive': False, 'damper_only': False, 'filter_dirty': False, 'frost_cycle': False, 'has_fault': False, '_flags': [0, 0, 0, 0, 0, 0, 0, 0]}

It looks like itā€™s parsing the 31D9 packages but the HA ramses_rf entitities are unknown/unavailable.
Yesterday, I reinstalled and reconfigured ramses_cc (started with the minimal config) but that made no difference.

And there are a lot of these lines in the HA logging which I assume are because ramses_rf is requesting a lot of package types? Discovery?

... Invalid code for 32:236773 (FAN) to Rx/Tx: 22E0

With the correct antenna (magnetic base in my case), yes absolutely. My setup seems to be exactly the same, all concrete and 2 floors up as well. As you can see in my packages excerpt above I get around 60 RSSI (signal strength) which according to Packet Structure Ā· zxdavb/ramses_protocol Wiki Ā· GitHub is pretty good.

My antenna is still in the utility cabinet and in a subpar spot in terms of interference. I can mount it higher or even outside the cabinet. But the current signal strength is good enough and controlling the fan is very reliable.

I performed the evofw3 autotune process but Iā€™m not sure it was necessary, later I discovered the real issue (configuration). Honeywell CH/DHW via RF - evohome, sundial, hometronics, chronotherm - #3108 by nickasdf