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

Hi, sure. If you tell me which branch / repo I need to checkout I’ll do it in the next few days.

Remind me, are you using HA too?

Latest evofw3 at master branch of: GitHub - ghoti57/evofw3: Major overhaul of evofw2 Evohome listening software to use asynchronous radio mode - compatible with HA.

Use my bleeding_edge branch of GitHub - zxdavb/ramses_rf: An interface for the RAMSES RF protocol, as used by Honeywell-compatible HVAC & CH/DHW systems. - not the version used by used by HA (but that will be a separate venv).

Yeah, I’m using HA.

I’ve got the bleeding_edge version running now, is there anything specific I need to do? Since heating is generally off these days, I can do some things manually if needed.

This is what i’ve got from ~20 minutes of running with the -p flag.

Devices:
{
    "01:187666": {
        "boiler_relay": null,
        "description": null,
        "device_type": "CTL",
        "dhw_sensor": null,
        "fault_log": [],
        "language": null,
        "last_pkt": "2020-05-21T14:14:09.289917",
        "parent_000c": null,
        "parent_zone": "FF",
        "pkt_1fc9": null,
        "pkt_codes": [
            "2349",
            "2309",
            "1F09",
            "30C9",
            "3150",
            "3220",
            "0008"
        ],
        "rf_signal": null,
        "system_mode": {
            "mode": null,
            "until": null
        }
    },
    "10:138822": {
        "actuator_enabled": {
            "modulation_level": 0.0,
            "flame_active": false,
            "flame_status": "00"
        },
        "actuator_state": null,
        "boiler_setpoint": 10.0,
        "description": null,
        "device_type": "OTB",
        "heat_demand": 0.0,
        "last_pkt": "2020-05-21T14:14:16.750130",
        "parent_000c": null,
        "parent_zone": null,
        "pkt_1fc9": null,
        "pkt_codes": [
            "3EF0",
            "1FD4",
            "22D9",
            "3220",
            "3150"
        ],
        "rf_signal": null
    },
    "04:052743": {
        "battery": {
            "low_battery": null
        },
        "description": null,
        "device_type": "TRV",
        "heat_demand": 0.0,
        "language": null,
        "last_pkt": "2020-05-21T14:10:39.115091",
        "parent_000c": null,
        "parent_zone": null,
        "pkt_1fc9": null,
        "pkt_codes": [
            "3150",
            "12B0"
        ],
        "rf_signal": null,
        "setpoint": null,
        "temperature": null,
        "window_state": false
    },
    "02:001107": {
        "description": null,
        "device_type": "UFH",
        "last_pkt": "2020-05-21T14:09:01.282110",
        "parent_000c": null,
        "parent_zone": null,
        "pkt_1fc9": null,
        "pkt_codes": [
            "3150",
            "22C9"
        ],
        "rf_signal": null
    },
    "04:000437": {
        "battery": {
            "low_battery": null
        },
        "description": null,
        "device_type": "TRV",
        "heat_demand": 0.0,
        "language": null,
        "last_pkt": "2020-05-21T14:06:05.760775",
        "parent_000c": null,
        "parent_zone": null,
        "pkt_1fc9": null,
        "pkt_codes": [
            "3150"
        ],
        "rf_signal": null,
        "setpoint": null,
        "temperature": null,
        "window_state": null
    },
    "04:004788": {
        "battery": {
            "low_battery": null
        },
        "description": null,
        "device_type": "TRV",
        "heat_demand": null,
        "language": null,
        "last_pkt": "2020-05-21T14:06:29.237584",
        "parent_000c": null,
        "parent_zone": null,
        "pkt_1fc9": null,
        "pkt_codes": [
            "12B0"
        ],
        "rf_signal": null,
        "setpoint": null,
        "temperature": null,
        "window_state": false
    },
    "34:242504": {
        "battery": {
            "low_battery": null
        },
        "description": null,
        "device_type": "STA",
        "last_pkt": "2020-05-21T14:11:45.289541",
        "parent_000c": null,
        "parent_zone": null,
        "pkt_1fc9": null,
        "pkt_codes": [
            "30C9"
        ],
        "rf_signal": null,
        "setpoint": null,
        "temperature": 22.36
    },
    "04:052747": {
        "battery": {
            "low_battery": null
        },
        "description": null,
        "device_type": "TRV",
        "heat_demand": null,
        "language": null,
        "last_pkt": "2020-05-21T14:10:03.114207",
        "parent_000c": null,
        "parent_zone": null,
        "pkt_1fc9": null,
        "pkt_codes": [
            "30C9"
        ],
        "rf_signal": null,
        "setpoint": null,
        "temperature": 23.42,
        "window_state": null
    }
}
Domains:
{
    "FF": {
        "last_pkt": "2020-05-21T14:13:02.689761",
        "pkt_codes": [
            "1F09"
        ],
        "relay_demand": null,
        "relay_failsafe": null
    },
    "FC": {
        "heat_demand": 0.0,
        "last_pkt": "2020-05-21T14:10:44.121542",
        "pkt_codes": [
            "3150",
            "0008"
        ],
        "relay_demand": 0.0,
        "relay_failsafe": null,
        "sync_tpi": null,
        "tpi_params": null
    }
}
Zones  :
{
    "02": {
        "actuators": [],
        "configuration": null,
        "configuration_alt": null,
        "devices": [],
        "heat_demand_alt": null,
        "last_pkt": "2020-05-21T14:11:44.556393",
        "name": null,
        "pkt_codes": [
            "2349",
            "3150"
        ],
        "sensor": null,
        "setpoint_alt": {
            "setpoint": 16.0
        },
        "setpoint_status": {
            "setpoint": 16.0,
            "mode": "FollowSchedule",
            "until": null
        },
        "temperature": null,
        "temperature_alt": 22.36,
        "zone_type": null
    },
    "04": {
        "actuators": [],
        "configuration": null,
        "configuration_alt": null,
        "devices": [],
        "heat_demand_alt": null,
        "last_pkt": "2020-05-21T14:10:39.115091",
        "name": null,
        "pkt_codes": [
            "3150",
            "12B0"
        ],
        "sensor": null,
        "setpoint_alt": {
            "setpoint": 16.0
        },
        "setpoint_status": null,
        "temperature": null,
        "temperature_alt": 23.2,
        "zone_type": null
    },
    "00": {
        "actuators": [],
        "configuration": null,
        "configuration_alt": null,
        "devices": [],
        "heat_demand_alt": null,
        "last_pkt": "2020-05-21T14:11:24.555410",
        "name": null,
        "pkt_codes": [
            "3150",
            "2349"
        ],
        "sensor": null,
        "setpoint_alt": {
            "setpoint": 16.0
        },
        "setpoint_status": {
            "setpoint": 16.0,
            "mode": "FollowSchedule",
            "until": null
        },
        "temperature": null,
        "temperature_alt": 24.04,
        "zone_type": null
    },
    "01": {
        "actuators": [],
        "configuration": null,
        "configuration_alt": null,
        "devices": [],
        "heat_demand_alt": null,
        "last_pkt": "2020-05-21T14:06:29.237584",
        "name": null,
        "pkt_codes": [
            "12B0"
        ],
        "sensor": null,
        "setpoint_alt": {
            "setpoint": 16.0
        },
        "setpoint_status": null,
        "temperature": null,
        "temperature_alt": 21.96,
        "zone_type": null
    },
    "03": {
        "actuators": [],
        "configuration": null,
        "configuration_alt": null,
        "devices": [],
        "heat_demand_alt": null,
        "last_pkt": null,
        "name": null,
        "pkt_codes": [],
        "sensor": null,
        "setpoint_alt": {
            "setpoint": 16.0
        },
        "setpoint_status": null,
        "temperature": null,
        "temperature_alt": 23.42,
        "zone_type": null
    }
}

Unfortunately, -p won’t probe for you yet - you’ve got an evofw3, which currently doesn’t send packets (it will soon, though).

The obvious way to tell is by looking at actuators for a zone (incidentally, the zone’s temperature sensor has to be determined heuristically, but the controller will tell me who the actuators are, if I ask):

    "01": {
        "actuators": ["04:056053", "04:056059"],
...
        "pkt_codes": ["0004", "000A", "12B0", "30C9", "2349", "000C", "3150", "2309"],
...
        "sensor": null,

    },

or, parent_000c for a device:

        "parent_000c": "02",

or the pkt_codes for a controller - see how many extra packet types there are - these were sent by my code through a HGI80:

        "pkt_codes": [
            "1F09",
            "1FC9",
            "10E0",
            "0002",
            "0418",
            "2E04",
            "12B0",
            "2349",
            "000C",
            "0004",
            "1100",
            "0005",
            "1F41",
            "1260",
            "0100",
            "10A0",
            "313F",
            "0016",
            "2309",
            "30C9",
            "3B00",
            "0008",
            "3150",
            "000A",
            "0009"
        ],

so, a) I would love 24h of logs with the new parsers - this will test discovery for the UFH.

b) after that - depending how adventurous you are, you could do any of:

  • power off & on
  • remove & rebind

OTB, and/or UFH, and send me the captured packets.

Thanks.

Does anyone here have a Mixing Valve Zone - uses a HM80?

I have flashed my arduino nano with a cc1101 with evofw3. HA works now with my hardware but he don’t get any value in HA.
Logging:

2020-05-31 22:11:39 INFO (MainThread) [evohome.logger] 2020-05-31T22:11:39.820626 RAW: || 079 |  I |     |            |            |  20:026866 | message_31d9     | 003 | 000051   || 000051
2020-05-31 22:11:53 INFO (MainThread) [evohome.logger] 2020-05-31T22:11:53.848681 MSG: || 047 |  I |     | CTL:087939 |            | >broadcast | sync_cycle       | 003 | FF0532   || {'device_id': '01:087939', 'countdown': 133.0}
2020-05-31 22:11:53 INFO (MainThread) [evohome.logger] 2020-05-31T22:11:53.909678 MSG: || 047 |  I |     | CTL:087939 |            | >broadcast | setpoint         | 024 | 0003E... || [{'00': {'setpoint': 10.0}}, {'01': {'setpoint': 5.0}}, {'02': {'setpoint': 5.0}}, {'03': {'setpoint': 10.0}}, {'04': {'setpoint': 10.0}}, {'05': {'setpoint': 10.0}}, {'06': {'setpoint': 10.0}}, {'07': {'setpoint': 5.0}}]
2020-05-31 22:11:53 INFO (MainThread) [evohome.logger] 2020-05-31T22:11:53.971756 MSG: || 047 |  I |     | CTL:087939 |            | >broadcast | temperature      | 024 | 00090... || [{'00': {'temperature': 23.07}}, {'01': {'temperature': 21.67}}, {'02': {'temperature': 21.36}}, {'03': {'temperature': 20.62}}, {'04': {'temperature': 22.22}}, {'05': {'temperature': 22.17}}, {'06': {'temperature': 21.4}}, {'07': {'temperature': 22.5}}]
2020-05-31 22:11:57 INFO (MainThread) [evohome.logger] 2020-05-31T22:11:57.118983 RAW: || 049 |  I |     |            |            |  10:078099 | unknown_1FD4     | 003 | 003A28   || 003A28
2020-05-31 22:12:10 INFO (MainThread) [evohome.logger] 2020-05-31T22:12:10.916528 MSG: || 056 |  I |     | TRV:225661 |            | CTL:087939 | window_state     | 003 | 010000   || {'04:225661': {'window_open': False}}
2020-05-31 22:12:11 INFO (MainThread) [evohome.logger] 2020-05-31T22:12:11.130637 MSG: || 047 | RQ |     | CTL:087939 |  10:078099 |            | actuator_enabled | 001 | 00       || {'device_id': '10:078099'}
2020-05-31 22:12:11 ERROR (MainThread) [evohome.logger] ASSERT failure, raw_packet = >>> 049 RP --- 10:078099 01:087939 --:------ 3EF0 006 0000100000FF <<<```

It looks OK, from what you’ve shown me. COuld you give me a little more to work with? Was it working before?

This is a teaser:

{
    "08": {
        "actuator_enabled": null,
        "actuator_state": null,
        "actuators": [
            "13:106039"
        ],
        "configuration": {
            "min_temp": 5.0,
            "max_temp": 35.0,
            "local_override": true,
            "openwindow_function": true,
            "multiroom_mode": false,
            "unknown_bitmap": "0b00010000"
        },
        "configuration_alt": null,
        "description": "Electric Heat",
        "devices": [
            "13:106039"
        ],
        "heat_demand_alt": null,
        "id": "08",
        "last_comms": "2020-06-01T04:19:17.661623",
        "name": "ZoneValve",
        "pkt_codes": [
            "30C9",
            "2349",
            "12B0",
            "000A",
            "000C",
            "0004",
            "0404"
        ],
        "schedule": [
            {
                "day_of_week": 0,
                "switchpoints": [
                    {
                        "time_of_day": "06:30",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "08:00",
                        "heat_setpoint": 18.0
                    },
                    {
                        "time_of_day": "18:00",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "22:30",
                        "heat_setpoint": 16.0
                    }
                ]
            },
            {
                "day_of_week": 1,
                "switchpoints": [
                    {
                        "time_of_day": "06:30",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "08:00",
                        "heat_setpoint": 18.0
                    },
                    {
                        "time_of_day": "18:00",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "22:30",
                        "heat_setpoint": 16.0
                    }
                ]
            },
            {
                "day_of_week": 2,
                "switchpoints": [
                    {
                        "time_of_day": "06:30",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "08:00",
                        "heat_setpoint": 18.0
                    },
                    {
                        "time_of_day": "18:00",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "22:30",
                        "heat_setpoint": 16.0
                    }
                ]
            },
            {
                "day_of_week": 3,
                "switchpoints": [
                    {
                        "time_of_day": "06:30",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "08:00",
                        "heat_setpoint": 18.0
                    },
                    {
                        "time_of_day": "18:00",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "22:30",
                        "heat_setpoint": 16.0
                    }
                ]
            },
            {
                "day_of_week": 4,
                "switchpoints": [
                    {
                        "time_of_day": "06:30",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "08:00",
                        "heat_setpoint": 18.0
                    },
                    {
                        "time_of_day": "18:00",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "22:30",
                        "heat_setpoint": 16.0
                    }
                ]
            },
            {
                "day_of_week": 5,
                "switchpoints": [
                    {
                        "time_of_day": "08:00",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "10:00",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "18:00",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "23:00",
                        "heat_setpoint": 16.0
                    }
                ]
            },
            {
                "day_of_week": 6,
                "switchpoints": [
                    {
                        "time_of_day": "08:00",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "10:00",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "18:00",
                        "heat_setpoint": 21.0
                    },
                    {
                        "time_of_day": "23:00",
                        "heat_setpoint": 16.0
                    }
                ]
            }
        ],
        "sensor": null,
        "sensors": [],
        "setpoint_status": {
            "setpoint": 5.0,
            "mode": "PermanentOverride",
            "until": null
        },
        "temperature": 23.76,
        "type": "BDR"
    }
}
1 Like

It is my first time that i set it up. But i dont get any data in HA.

What i have done, is flashing my arduino nano --> connect de CC1101 and connect it to my pc.
I add the custom component to HA en add it to the config. Do i have to do anything more?

Well, clearly it’s discovering the devices - has found the TRV (screenshot). It has found your OTB too, although this isn’t in the custom component you’re using (it is in the latest library, though).

When you say you ‘Don’t get any data a in HA’, maybe it’s an issue with the HA UI?

As always, PM me a copy of your packets.log?

I am sorry, I am a bit overwhelmed here - seems everybody is on furlough, so they’re all working on open-source projects - I’ve got git-work everywhere, so it may take a while for me to look in detail at this.

Maybe someone else could chip in?

To keep everyone keen - here is a trace of evohome_rf setting a zone mode (the W, below):

(venv) ➜  evohome git:(bleeding_edge) ✗ python client.py monitor /dev/ttyUSB1 -x "RQ 01:145038 0004 0000"
16:32:27.820 || HGI:013393 | CTL:145038 | RQ | zone_name        | 0000     || {'zone_idx': '00'}
16:32:27.823 || CTL:145038 | HGI:013393 | RP | zone_name        | 00004... || {'zone_idx': '00', 'name': 'Main Room'}
16:32:27.858 || HGI:013393 | CTL:145038 |  W | zone_mode        | 00063... || {'zone_idx': '00', 'mode': 'AdvancedOverride', 'setpoint': 15.9}
16:32:27.881 || CTL:145038 |            |  I | zone_mode        | 00063... || {'zone_idx': '00', 'mode': 'TemporaryOverride', 'setpoint': 15.9, 'until': '2020-06-26 17:00:00'}
16:32:27.893 || CTL:145038 |            |  I | setpoint         | 000636   || [{'zone_idx': '00', 'setpoint': 15.9}]
16:32:27.913 || CTL:145038 | HGI:013393 |  I | zone_mode        | 00063... || {'zone_idx': '00', 'mode': 'TemporaryOverride', 'setpoint': 15.9, 'until': '2020-06-26 17:00:00'}

Latest additions to functionality:

  1. set/clear system modes
  2. set/clear zone mode/setpoints
  3. set/clear DHW modes/setpoints

The above includes a lot of functionality not available in the (existing) RESTful evohome integration, including access to undocumented features, and setting the DHW setpoint. One specific example of this is above, AdvancedOverride: set the target temp fro a zone until next scheduled setpoint.

The only significant missing thing is reading/writing DHW schedule.

1 Like

Been away for a while. But back into the swing of things.
Is there a documented install for HGI80 on the latest version of HA anywhere ?

This is imho where forums fall down for documentation. But onwards!

Forgot to mention, I’ve got HA in a docker container :slight_smile:

Really looking forward to a new release! Out of curiosity, will it be possible to use the OpenTherm bridge to turn on the furnace manually? Sometimes I notice that the water that’s in my hot water tank is getting kind of cold for showers… Could I just turn on the boiler for a while to heat it up? Or to I have to add DHW for that? My water tank doesn’t have it’s own heater element, I think.

Are you saying you have stored DHW? That is, DHW is managed by the furnace and evohome doesn’t know anything about it? Otherwise, there’s the issue of the evohome controller having it’s own opinion on things - this could be good, or bad, depending.

Having looked at the OpenTherm protocol - you bsolutely can have a direct 2-way conversation with the OTB, full functionality, no worries (although all I have done so far is decode the payload). You could get cylinder temp readings, turn things on/off, etc - same as any OT bridge.

Fully fleshing out OpenTherm will be a big chore - doing so may add another 1,000 lines of code… it will have to wait!

The thing is, this is a much bigger project that I thought - evohome_rf (the client library, so not counting any HA code) is now 6000 lines of code, and I’ve only just added read-write.

Mind you, I am just about to remove a huge chunk of it, which was implemented unnecessarily due to a a design error (back then I didn’t know the protocol as well as I do now).

I have a hot water tank, but I don’t have the DHW module for Evohome. I misunderstood how that DHW module would work, thinking my hot water tank was heating itself and that I would never want to turn it off (I thought it was like my hot water tank in the states that heated itself)… Now I’m realizing that it’s just taking water from the furnace and storing it and that water gets cold when the furnace isn’t running, so I’m kicking myself for not having the DHW module installed… As you can see, I’m not very clever when it comes to heating systems yet… I’m much better at computers ;-).

I know the right answer is just to install the DHW module, but I was seeing if there were other options.

Anyhow, I know you will produce something very nice in the end. Patiently waiting. You should put funding on your github so that we can cheer you along :wink:

Where are you, geographically? I’m not exactly sure how your system works…

I think you have a ‘system boiler’ - the boiler has two loops, one for the radiators, and another coil that heats up the water in the cylinder, right?

I am just not clear how/when the cylinder calls for heat…

Well, you have the two boiler relays (BDR91s), so all you need is a CS92A. That would be a lot cheaper than buying an OpenTherm bridge.

I have seen them for sale on ebay for £60 (I bought one for that price, came with a relay you could on-sell). They are easy to fit as they take batteries instead of being hard-wired.

You can easily ‘drive’ the boiler relay through HA using evohome_rf (that would turn the furnace on/off), with automations for scheduling, etc, but it would be useful if you knew the temp inside the cylinder, otherwise you’re just heating the cylinder until it’s safety cutout kicks in?

If that’s the case, maybe you’re cylinder is hotter that you need, or hot when you you don’t need it to be?

Dev is becoming a struggle, and I start a job on Monday… still aiming for this Winter, though.

I’m in Prague. My guess is that is works the way you describe, but I don’t understand it well enough to be sure. I thought I already had an opentherm bridge on the boiler, but maybe it’s a BDR91s instead. The other one is running my electric floor heating upstairs, so wouldn’t be available for this.

I’ll probably just call a professional to sort it out when this whole coronavirus thing is over. I’d make a hash of it.

Development on personal projects like this ebbs and flows. I haven’t been very prolific lately either… But it will come back around. Good luck with your new job!

I have a pi with a manual installation of HA.
I have an evohome system and a RF HGI80.

Is there a newby installation script/description to get my evohome system connected?

When I connect the HGI80 I did not find the /dev/ttyUSB0 device so I think I need a driver as well.

Hi see the posts by Drocona from about post 206 or so - a problem with HassOS, I’m afraid - will work fine on (say) linux…

or, reading again, ‘manual instal’, I think Ubuntu includes the .fw file.