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

Thanks, changed and problem gone. Not sure why it was set to true.

This was one of the automations I kept meaning to write, so thanks for beating me to it. Saved me a bit of work. I have added an extra condition (still to be tested), which should stop the action from being run when you’ve gone on holiday and turned the hot water off.

  - condition: state
    entity_id: water_heater.stored_hw
    state: auto
    attribute: operation_mode

I was thinking about adding that but our hot water cools down so slow that I doubt it will get that low by itself in the time we will be away

Fixing other-halfs, 1 automation rule at a time:

- id: 'Yvette Away - Turn Off Heating'
  alias: 'Yvette Away - Turn Off Heating'
  trigger:
    - platform: state
      entity_id: person.yvette
      to: 'not_home'
  condition:
    condition: or
    conditions:
      - condition: template
        value_template: '{{ is_state_attr("climate.yvette_office", "preset_mode", "temporary") }}' 
      - condition: template
        value_template: '{{ is_state_attr("climate.yvette_office", "preset_mode", "permanent") }}' 
  action:
    - service: climate.set_preset_mode
      data:
        entity_id: climate.yvette_office
        preset_mode: 'none'
1 Like

So, version 0.17.13 has been released as the latest Stable version.

Changes since 0.17.11 include only bugfixes, but note: it will delete any packet log files older than 7 days, unless you change your configuration:

evohome_cc:
  serial_port: /dev/ttyACM0
  packet_log:
    file_name: ramses_packet.log
    rotate_backups: 365  # keep a year's worth of old packet logs

So, version 0.18.2 has been released as the latest pre-release version.

It includes changes specifically for UFH.

Hello,

I’ve updated to 0.18.2 and I have the following error:

Logger: homeassistant
Source: /usr/src/homeassistant/homeassistant/runner.py:98
First occurred: 9:37:58 PM (1 occurrences)
Last logged: 9:37:58 PM

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 fnc(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/entities.py", line 131, in wrapper
    return fnc(self, discover_flag=discover_flag)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/devices.py", line 1111, in _discover
    [  # only 2309 has any potential?
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/devices.py", line 1114, in <listcomp>
    if ufh_idx["enabled"]
TypeError: string indices must be integers

I have the same problem with 0.18.1 (did not have the time to try it before but just tried it now to check if the error was present in both release or not)

I’ve tried rebooting with restore_cache at false but it did not help.

Yeah - I had a fix for it, but since decided to change the way things were done… watch this space.

Davis, was away for a while but I am running 17.13, ofcourse overlooked the restore_state one for sure but am running here without issues now. Before in my previous version (didnt spend much time lately with HASS) it was dead all of the sudden. But another big surprise after I updated (see below) now it recognized the extra actuator. And for sure I did not rebind and so… The only thing it reported before was the RFG100 Gateway which it did not see yet (?)… Will monitor this stall issue here

{
    "version": 1,
    "minor_version": 1,
    "key": "evohome_cc",
    "data": {
        "client_state": {
            "schema": {
                "main_controller": "01:059885",
                "01:059885": {
                    "system": {
                        "heating_control": "10:030670"
                    },
                    "orphans": [],
                    "stored_hotwater": {},
                    "underfloor_heating": {},
                    "zones": {
                        "00": {
                            "_name": "Woonkamer",
                            "zone_type": "radiator_valve",
                            "zone_sensor": "34:177047",
                            "sensor_alt": "34:177047",
                            "devices": [
                                "04:126378",
                                "04:126354",
                                "04:126368",
                                "34:177047"
                            ],
                            "actuators": [
                                "04:126378",
                                "04:126354",
                                "04:126368"
                            ]
                        },
                        "01": {
                            "_name": "Hal",
                            "zone_type": "radiator_valve",
                            "zone_sensor": "03:075455",
                            "sensor_alt": "03:075455",
                            "devices": [
                                "04:126322",
                                "03:075455"
                            ],
                            "actuators": [
                                "04:126322"
                            ]
                        },
                        "02": {
                            "_name": "Badkamer",
                            "zone_type": "radiator_valve",
                            "zone_sensor": "34:176627",
                            "sensor_alt": "34:176627",
                            "devices": [
                                "04:126376",
                                "34:176627"
                            ],
                            "actuators": [
                                "04:126376"
                            ]
                        },
                        "03": {
                            "_name": "Logeerkamer",
                            "zone_type": "radiator_valve",
                            "zone_sensor": "04:126366",
                            "sensor_alt": "04:126366",
                            "devices": [
                                "04:126366"
                            ],
                            "actuators": [
                                "04:126366"
                            ]
                        },
                        "04": {
                            "_name": "Kamer Yet",
                            "zone_type": "radiator_valve",
                            "zone_sensor": "34:155573",
                            "sensor_alt": "34:155573",
                            "devices": [
                                "04:126382",
                                "34:155573"
                            ],
                            "actuators": [
                                "04:126382"
                            ]
                        },
                        "05": {
                            "_name": "Kamer Marco",
                            "zone_type": "radiator_valve",
                            "zone_sensor": "34:162993",
                            "sensor_alt": "34:162993",
                            "devices": [
                                "04:126374",
                                "34:162993"
                            ],
                            "actuators": [
                                "04:126374"
                            ]
                        }
                    }
                },
                "orphans": [],
                "device_hints": {}
            },

The only thing I see passing by in the log:

2022-01-22 15:52:52 INFO (MainThread) [ramses_rf.message] || CTL:059885 | RFG:051821 | RP | zone_mode        |  01  || {'zone_idx': '01', 'mode': 'follow_schedule', 'setpoint': 12.0}
2022-01-22 15:52:52 ERROR (MainThread) [homeassistant] Error doing job: Exception in callback SerialTransport._read_ready()
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/asyncio/events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "/usr/local/lib/python3.9/site-packages/serial_asyncio/__init__.py", line 119, in _read_ready
    self._protocol.data_received(data)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py", line 477, in data_received
    self._line_received(dtm, _normalise(_str(raw_line)), raw_line)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py", line 460, in _line_received
    self._pkt_received(pkt)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py", line 704, in _pkt_received
    self._qos_received(pkt)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py", line 762, in _qos_received
    logger_rcvd(msg, wanted=wanted)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py", line 723, in logger_rcvd
    pkt._hdr or str(pkt),
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/frame.py", line 347, in _hdr
    self._hdr_ = pkt_header(self)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/frame.py", line 474, in pkt_header
    return f"{header}|{pkt._ctx}" if isinstance(pkt._ctx, str) else header
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/frame.py", line 336, in _ctx
    self._ctx_ = self._idx
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/frame.py", line 358, in _idx
    self._idx_ = _pkt_idx(self) or False
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/frame.py", line 433, in _pkt_idx
    raise InvalidPayloadError(
ramses_rf.protocol.exceptions.InvalidPayloadError: Corrupt payload: Packet idx is 01, but expecting no idx (00)
2022-01-22 15:52:57 INFO (MainThread) [ramses_rf.message] || RFG:051821 | CTL:059885 | RQ | zone_mode        |  02  || {}
2022-01-22 15:52:57 INFO (MainThread) [ramses_rf.message] || CTL:059885 | RFG:051821 | RP | zone_mode        |  02  || {'zone_idx': '02', 'mode': 'follow_schedule', 'setpoint': 12.0}
2022-01-22 15:52:57 ERROR (MainThread) [homeassistant] Error doing job: Exception in callback SerialTransport._read_ready()
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/asyncio/events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "/usr/local/lib/python3.9/site-packages/serial_asyncio/__init__.py", line 119, in _read_ready
    self._protocol.data_received(data)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py", line 477, in data_received
    self._line_received(dtm, _normalise(_str(raw_line)), raw_line)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py", line 460, in _line_received
    self._pkt_received(pkt)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py", line 704, in _pkt_received
    self._qos_received(pkt)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py", line 762, in _qos_received
    logger_rcvd(msg, wanted=wanted)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py", line 723, in logger_rcvd
    pkt._hdr or str(pkt),
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/frame.py", line 347, in _hdr
    self._hdr_ = pkt_header(self)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/frame.py", line 474, in pkt_header
    return f"{header}|{pkt._ctx}" if isinstance(pkt._ctx, str) else header
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/frame.py", line 336, in _ctx
    self._ctx_ = self._idx
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/frame.py", line 358, in _idx
    self._idx_ = _pkt_idx(self) or False
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/frame.py", line 433, in _pkt_idx
    raise InvalidPayloadError(
ramses_rf.protocol.exceptions.InvalidPayloadError: Corrupt payload: Packet idx is 01, but expecting no idx (00)

Hmm… just checked my logs, there seems to be some activity but my overview does not report anything anymore…

Is it possible with this integration to send a heat demand (of zero) directly to the BDR91?

I have a small issue with occasional lockouts, which occur when the demands from all TRVs drop to zero, but the async nature of Evohome means that the change to now zero demand is not sent to the BDR91 immediately, resulting in the occasional final firing of the boiler when there is no need. And occasionally this causes a boiler lockout, even with ABV etc. in place and working.

My thinking was that as soon as HA recognises no load from TRVs, that it sends zero demand to the BDR91. Possible, or non-starter?

Well, it shouldn’t be doing that - I must have introduced a bug - I’ll have a look.

FWIW, I am not normally interested in the contents of the evohome_cc file.

Hi @zxdavb,

Can I help by providing log files? I am now using 0.18.2 and have a UFH. For communication I am still using HGI80.

I do have an error:

Error doing job: Exception in callback SerialTransport._read_ready()

and this was also with 0.18.1

Please provide more information Was it working fine with 0.17.x or did you have the same error?

Please describe your setup - HassOS? VM? ser2net? etc.?

I run as a docker container and pass the usb directly through. This error did not occur with version 0.17.10 or below.

The config I use:

evohome_cc:
  serial_port: /dev/ttyUSB0
  scan_interval: 60
  packet_log: /config/evohome/packets.log
  rotate_backups: 365  # keep a year's worth of old packet logs
  ramses_rf:
    # disable_discovery: true
    # enable_eavesdrop: true
    enforce_known_list: true
    # max_zones: 8
  schema:
    controller: 01:040078
  restore_cache: true
  known_list:
    - 01:040078
    - 02:013748
    - 10:025262
    - 18:013217
    - 22:170592
    - 22:156865
    - 22:170591
    - 04:233367
    - 04:233377
    - 04:233386
    - 04:233146
    - 20:000329: {class: FAN}
    - 20:000908: {class: FAN}
    - 20:001004: {class: FAN}
    - 20:001349: {class: FAN}
    - 20:001397: {class: FAN}
    - 20:001468: {class: FAN}
    - 20:001476: {class: FAN}
    - 37:217426: {class: FAN}
  block_list:
    - 01:103468
    - 04:098311
    - 04:098313
    - 04:098315
    - 04:098317
    - 07:042737
    - 07:044315
    - 07:044339
    - 07:044814
    - 10:050714
    - 10:138926
    - 13:158003
    - 29:057487
    - 34:052703
    - 34:059813
    - 34:128229
    - 34:128251
    - 34:128585

The full log message is:

Logger: homeassistant
Source: /usr/src/homeassistant/homeassistant/runner.py:98
First occurred: 22 januari 2022 09:19:28 (15 occurrences)
Last logged: 11:57:27

Error doing job: Exception in callback SerialTransport._read_ready()
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/asyncio/events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "/usr/local/lib/python3.9/site-packages/serial_asyncio/__init__.py", line 119, in _read_ready
    self._protocol.data_received(data)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py", line 477, in data_received
    self._line_received(dtm, _normalise(_str(raw_line)), raw_line)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py", line 460, in _line_received
    self._pkt_received(pkt)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py", line 704, in _pkt_received
    self._qos_received(pkt)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py", line 762, in _qos_received
    logger_rcvd(msg, wanted=wanted)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/transport.py", line 723, in logger_rcvd
    pkt._hdr or str(pkt),
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/frame.py", line 353, in _hdr
    self._hdr_ = pkt_header(self)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/frame.py", line 480, in pkt_header
    return f"{header}|{pkt._ctx}" if isinstance(pkt._ctx, str) else header
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/frame.py", line 342, in _ctx
    self._ctx_ = self._idx
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/frame.py", line 364, in _idx
    self._idx_ = _pkt_idx(self) or False
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/frame.py", line 414, in _pkt_idx
    raise InvalidPayloadError(
ramses_rf.protocol.exceptions.InvalidPayloadError: Corrupt payload: Packet idx is 63, but expecting no idx (00)

Sorry @zxdavb I forgot to mention it but thank you for the great work/time you put in this.

I’ve just noticed this error, which I think is new.

I should be able to run through all the HVAC function some time this week and provide the packet logs.

Logger: ramses_rf.protocol.message
Source: /usr/local/lib/python3.9/site-packages/ramses_rf/protocol/message.py:395
First occurred: 16:33:17 (4 occurrences)
Last logged: 16:46:13

I --- 32:166025 --:------ 32:166025 1298 003 008400 < AssertionError()
I --- 30:079129 --:------ 30:079129 31DA 029 21EF0084002FEF7FFF7FFF7FFF7FFF0002EF18FFFF000000EF7FFF7FFF < AssertionError()
RP --- 30:079129 32:166025 --:------ 31DA 029 21EF0084002FEF7FFF7FFF7FFF7FFF0002EF18FFFF000000EF7FFF7FFF < AssertionError()
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/message.py", line 386, in _validate
    result = PAYLOAD_PARSERS.get(self.code, parser_unknown)(
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/parsers.py", line 152, in wrapper
    result = fnc(payload, msg, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/parsers.py", line 964, in parser_1298
    return {"co2_level": double(payload[2:])}
  File "/usr/local/lib/python3.9/site-packages/ramses_rf/protocol/helpers.py", line 117, in double
    assert result < 32767
AssertionError

What I noticed is that 02_013748_relay_demand is as percentage. I think this is the control of the pump of the UFH (HCE80) and only can be on or off. In the log the value is 0% or 100%.

In the previous version I was running it was not seeing the correct number of actuators for that room. It declared one of the actuators as an orphan. This is why I check this evohome_cc file. I’ve been running the 17.13 version the last couple of days. The thing is that looking in the homeassistant.log file it seems to be running but when I inspect the entities, almost all of them are unavailable. It seems to stop feeding the data into HA. I will try and see how latest 18.2 version will hold.