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

v0.15.1 just released.

Please update your configuration.yaml files: config becomes ramses_rf

evohome_cc:
  serial_port: /dev/ttyUSB0
  config:
    enforce_known_list: true

to:

evohome_cc:
  serial_port: /dev/ttyUSB0
  ramses_rf:
    enforce_known_list: true
1 Like

Whilst firmly in the ‘nice to have’ category - are there plans to somehow record/display the Optimum start/stop? Shown as ‘Opt’ on the evohome controller on the wall.

I guess it would have to be an attribute, or additional sensor.

Whilst I only really use the Optimum stop (I set a 1 hour early start maximum on the controller), it would be interesting to know the Optimum stop time, then compare to room temperature/temperature decrease to the actual ‘off’ time.

Hi,

I’ve just updated to v0.15.1. It detected a number of new devices linked to my UFH it seems (devices with 02 and 18 IDs). I see also some error logs in the home assistant logs. I put them below in case it can help you:

Logger: aiohttp.server
Source: custom_components/evohome_cc/climate.py:293
Integration: RAMSES RF (documentation, issues)
First occurred: 10:06:44 AM (3 occurrences)
Last logged: 10:06:44 AM

Error handling request
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/aiohttp/web_protocol.py", line 422, in _handle_request
    resp = await self._request_handler(request)
  File "/usr/local/lib/python3.9/site-packages/aiohttp/web_app.py", line 499, in _handle
    resp = await handler(request)
  File "/usr/local/lib/python3.9/site-packages/aiohttp/web_middlewares.py", line 119, in impl
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 60, in security_filter_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 89, in forwarded_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 24, in request_context_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 78, in ban_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 144, in auth_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 135, in handle
    result = await result
  File "/usr/src/homeassistant/homeassistant/components/api/__init__.py", line 376, in post
    await hass.services.async_call(
  File "/usr/src/homeassistant/homeassistant/core.py", line 1492, in async_call
    task.result()
  File "/usr/src/homeassistant/homeassistant/core.py", line 1527, in _execute_service
    await handler.job.target(service_call)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 665, in handle_service
    await service.entity_service_call(
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 658, in entity_service_call
    future.result()  # pop exception if have
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 843, in async_request_call
    await coro
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 689, in _handle_entity_call
    result = hass.async_run_job(partial(getattr(entity, func), **data))  # type: ignore
  File "/usr/src/homeassistant/homeassistant/core.py", line 452, in async_run_job
    return self.async_run_hass_job(HassJob(target), *args)
  File "/usr/src/homeassistant/homeassistant/core.py", line 433, in async_run_hass_job
    hassjob.target(*args)
  File "/config/custom_components/evohome_cc/climate.py", line 293, in svc_put_zone_temp
    self._device.sensor._make_fake()
AttributeError: 'NoneType' object has no attribute '_make_fake'

and also the following one (later in the log in chronological order):

Logger: ramses_rf.protocol.transport
Source: /usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py:710
First occurred: 10:08:08 AM (10 occurrences)
Last logged: 10:08:51 AM

PktProtocolQos.send_data(0418|RQ|01:076010|06): Expired callback
PktProtocolQos.send_data(0418|RQ|01:076010|05): Expired callback
PktProtocolQos.send_data(0418|RQ|01:076010|01): Expired callback
PktProtocolQos.send_data(0418|RQ|01:076010|00): Expired callback

I also have some warning about Corrupt packet: Invalid verb/code for 32:132125 to Tx: I/31DA (will be ignored) but this is linked to my ventillation unit I think so I am ignoring these for the moment.

I have updated only 10 minutes ago and maybe evohome has not sent all the needed packets yet to be fully detected, but it seems so far that I have lost quite a few updates from devices (e.g. all my OTB sensors are unavailable at the moment).

Let me know if you need more details (e.g. packet logs)

this may be possible, but would be difficult - a hack, really & may not be relaible enough to be worthwhile (see below). In summary: there is not way to deterministically obtain this information - So no current plans.

You could create an automation that looked at the difference between the current setpoint, and the scheduled setpoint - any difference (if not initiated by the user) would be due to optimization.

Maybe you’re overthinking it - just let the controller do this for you?

Send me your configuration.yaml * a packet log please.

I only have one working OT sensor, which is the boiler demand, the rest have been unavailable since this morning.

What sensors did you have, what values did they have?

This version of ramses_rf has some code to determine if such sensors are of no use, and it ‘deprecates’ them.

e.g. a temperature of 71.66C that never changes.

I had these and they all worked fine.

  - entity: sensor.01_169176_heat_demand
    secondary_info: last-updated
  - entity: sensor.10_051349_boiler_setpoint
    secondary_info: last-updated
  - entity: sensor.10_051349_boiler_water_temperature
    secondary_info: last-updated
  - entity: sensor.10_051349_return_water_temperature
    secondary_info: last-updated
  - entity: sensor.10_051349_dhw_temperature
    secondary_info: last-updated
  - entity: sensor.10_051349_dhw_flow_rate
    secondary_info: last-updated
  - entity: sensor.10_051349_modulation_level
    secondary_info: last-updated
  - entity: sensor.10_051349_relative_modulation_level
    secondary_info: last-updated
  - entity: sensor.10_051349_ch_water_pressure
    secondary_info: last-updated

I have found a bug - give me a few minutes.

Try version 0.15.2.

Opps - I have missed something rather obvious! Hang on…

There should be:

        return {
            "boiler_output_temp": self.boiler_output_temp,
            "boiler_return_temp": self.boiler_return_temp,
            "boiler_setpoint": self.boiler_setpoint,
            "ch_max_setpoint": self.ch_max_setpoint,
            "ch_water_pressure": self.ch_water_pressure,
            "dhw_flow_rate": self.dhw_flow_rate,
            "dhw_setpoint": self.dhw_setpoint,
            "dhw_temp": self.dhw_temp,
            "outside_temp": self.outside_temp,
            "rel_modulation_level": self.rel_modulation_level,
        }

now try 0.15.3 - sorry but the entity names have changed

Thanks, out of the 10 you listed, half have started working, the ones below are showing as unavailable.

  - entity: sensor.10_051349_ch_max_setpoint
  - entity: sensor.10_051349_dhw_setpoint
  - entity: sensor.10_051349_dhw_temp
  - entity: sensor.10_051349_outside_temp
  - entity: sensor.10_051349_boiler_setpoint

I also have just noticed this error.

Logger: homeassistant
Source: /usr/src/homeassistant/homeassistant/runner.py:98
First occurred: 06:14:05 (97 occurrences)
Last logged: 06:36:12

Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/helpers.py", line 17, in execute_func
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/devices.py", line 289, in _discover
    self._make_cmd(_10E0, retries=3)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/devices.py", line 189, in _make_cmd
    super()._make_cmd(code, self.id, payload, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/entities.py", line 89, in _make_cmd
    self._send_cmd(self._gwy.create_cmd(verb, dest_id, code, payload, **kwargs))
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/entities.py", line 93, in _send_cmd
    raise RuntimeError("Sending is disabled")
RuntimeError: Sending is disabled

This is what I get from one of your previous log files (after fixing a small typo with dhw_setpoint):

    "devices": {
        "10:051349": {
            "opentherm_status": {
            "opentherm_status": {
                "boiler_output_temp": 40.0,
                "boiler_return_temp": 40.0,
                "boiler_setpoint": null,
                "ch_max_setpoint": null,
                "ch_water_pressure": 1.2,
                "dhw_flow_rate": 0.0,
                "dhw_setpoint": 58.0,
                "dhw_temp": 46.0,
                "outside_temp": null,
                "rel_modulation_level": 0.6
            }
        }
    }

Please send me an up-to-date packet log for the rest, but some of them will be like so:

09:09:34.968 || OTB:051349 | HGI:135447 | RP | opentherm_msg    |  1B  || {'msg_id': 27, 'msg_type': 'Data-Invalid', 'msg_name': 'OutsideTemperature', 'description': 'Outside temperature'}

Notice it says: Data-Invalid. There is a check to confirm the associated value is zero - an alert is raised if this is not the case…

I assume your outside temp wasn’t steady at 0.00C for several hour on the 16th October? :slight_smile:

I have been able to reproduce this bug. Stand by…

David,

Thanks for your great work on this. I’ve had a problem with the latest update (which has also corresponded with me finally getting round to detailing a known list). The individual entities for window, heat demand, battery and temperature for each device all appear, but the zone climate entities are all now orphaned. Below is my current config:

evohome_cc:
    serial_port: /dev/serial/by-id/usb-SparkFun_evofw3_atmega32u4-if00
    ramses_rf:
      enforce_known_list: True
    packet_log: 
      file_name: packet.log
      rotate_bytes: null
      rotate_backups: 7
    schema:
      controller: 01:065252
      heating_control: 10:023327
    known_list:
      - 01:065252
      - 10:023327
      - 04:026365
      - 04:026371
      - 34:226553
      - 04:021553
      - 04:019137
      - 04:196395
      - 34:125635
      - 04:019139
      - 04:021833
      - 04:021555
      - 04:021551
      - 04:021557
      - 04:019135
      - 04:019143
      - 04:026369
      - 04:144565
      - 04:017760
      - 22:139073
      - 18:131597

Thanks

Guyan

Well that looks fine - send me a copy of your schema, and are there any errors in the HA log?

Schema

controller: '01:065252' 
system: heating_control: '10:023327' 
orphans: [] 
stored_hotwater: {} 
underfloor_heating: {} 
zones: {}

There are a couple of warnings:

Logger: ramses_rf.protocol.message
Source: /usr/local/lib/python3.9/site-packages/ramses_rf/protocol/message.py:310
First occurred: 21:53:04 (44 occurrences) 
Last logged: 21:58:09

I --- 04:017760 --:------ 01:065252 12B0 003 0B0000 # has expired (122%)
I --- 04:021557 --:------ 04:021557 30C9 003 00076A # has expired (121%)
I --- 04:019139 --:------ 04:019139 30C9 003 0006D6 # has expired (126%)
I --- 04:019135 --:------ 01:065252 2309 003 0603E8 # has expired (132%)
I --- 04:019135 --:------ 01:065252 2309 003 0603E8 # has expired (133%)
Logger: ramses_rf.devices
Source: /usr/local/lib/python3.9/site-packages/ramses_rf/devices.py:1295 
First occurred: 21:56:23 (1 occurrences) 
Last logged: 21:56:23

RP --- 10:023327 18:131597 --:------ 3220 005 00401B47AB << OpenTherm: deprecating msg_id 27: it appears unsupported

And the below error:

2021-11-04 21:53:01 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/ramses_rf/helpers.py", line 17, in execute_func
return func(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/ramses_rf/devices.py", line 289, in _discover
self._make_cmd(_10E0, retries=3)
File "/usr/local/lib/python3.9/site-packages/ramses_rf/devices.py", line 189, in _make_cmd
super()._make_cmd(code, self.id, payload, **kwargs)
File "/usr/local/lib/python3.9/site-packages/ramses_rf/entities.py", line 89, in _make_cmd
self._send_cmd(self._gwy.create_cmd(verb, dest_id, code, payload, **kwargs))
File "/usr/local/lib/python3.9/site-packages/ramses_rf/entities.py", line 93, in _send_cmd
raise RuntimeError("Sending is disabled")
RuntimeError: Sending is disabled
2021-11-04 21:53:03 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/ramses_rf/helpers.py", line 17, in execute_func
return func(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/ramses_rf/systems.py", line 384, in _discover
super()._discover(discover_flag=discover_flag)
File "/usr/local/lib/python3.9/site-packages/ramses_rf/systems.py", line 429, in _discover
super()._discover(discover_flag=discover_flag)
File "/usr/local/lib/python3.9/site-packages/ramses_rf/systems.py", line 651, in _discover
super()._discover(discover_flag=discover_flag)
File "/usr/local/lib/python3.9/site-packages/ramses_rf/systems.py", line 153, in _discover
super()._discover(discover_flag=discover_flag)
File "/usr/local/lib/python3.9/site-packages/ramses_rf/systems.py", line 514, in _discover
self._make_cmd(_000C, payload=f"00{_000C_DEVICE.DHW_SENSOR}")
File "/usr/local/lib/python3.9/site-packages/ramses_rf/systems.py", line 866, in _make_cmd
super()._make_cmd(code, self._ctl.id, payload, **kwargs)
File "/usr/local/lib/python3.9/site-packages/ramses_rf/entities.py", line 89, in _make_cmd
self._send_cmd(self._gwy.create_cmd(verb, dest_id, code, payload, **kwargs))
File "/usr/local/lib/python3.9/site-packages/ramses_rf/entities.py", line 93, in _send_cmd
raise RuntimeError("Sending is disabled")
RuntimeError: Sending is disabled

I spoke to ideal technical about the weather compensation kit, and they advised me not to have both OT and WC wired up and the same time, so I removed it sometime last month.

I’ll send you today’s packet logs when I get home from work.

This is a proper bug - an effort to fix another issue… I have mentioned it above.

I will reverse it now & have another go, alter on.