Just finished testing the idea that @zxdavb outlined to persuade the HCE80 to switch the MT4 motors to open the valve of an ufh circuit (I have the NC-version):
This would also switch on the circulation pump of the ufh distributor in my case, since it is connected to the auxiliary relay contact of the MT4.
@bishop: based on the packet log @zxdavb provided and my own logs, I get the impression that the communication between evohome and the HCE80 works slightly different than you have described here:
In my understanding (when all devices have been bound to evohome, in my case):
Evohome (CTL) receives/sets a setpoint higher than the current sensor temperature
Evohome ‘broadcasts’ the setpoint, which is picked up by the HCE80 (is that right? no receiver listed in the packet log).
The HCE80 determines the heat_demand for the UFH circuit and sends this back to evohome, which in turn calls for heat to the boiler through the OTB.
The procedure that I followed to implement the idea of @zxdavb:
put evohome in ‘heat-off’-mode. (command: “W 01:123465 2E04 01FFFFFFFFFFFF00”)
request the current setpoint of the zone from the HCE80 (command, f.e. zone 5: “RQ 02:123456 2309 04”).
write the same setpoint back to the HCE80 to trigger it to send a code 22C9-packet with the current ‘temp_low’ (the setpoint) and ‘temp_high’ values (command, e.g. current setpoint is 16.5 degrees: “W 02:123456 2309 040672”)
write the ‘temp_high’ value back to the HCE80 as the ‘setpoint’ for this zone. This will trigger a ‘heat_demand’ of 1.0 (100%) for that zone in the HCE80 and switch on the relay controlling the valve of the ufh circuits in question (the goal). This is not the normal way for evohome to communicate the setpoint (normally done via an ‘I’-packet as a broadcast), but will be picked-up by the HCE80 (command, e.g. for zone 5 to a setpoint of 26 degrees, which is also the current temp_high: “W 02:123456 2309 040A28”)
Set the evohome controller back to ‘auto’ mode when done (command: “W 01:123465 2E04 00FFFFFFFFFFFF00”
The result is that the HCE80 switches the motors controlling the valves of the designated circuits, without evohome responding to the heat_demand sent by the HCE80(!). It stays it this state until evohome sends the system_sync packet (code 1F09) and the subsequent setpoints (code 2309) and temperatures (code 3C09) for all zones. In response, the HCE80 takes over these setpoints and returns to the original state without any heat_demand.
The idea clearly works for the duration of one sync cycle, so it should to possible to make a script that waits for the next sync cycle and immediately overwrites the setpoints of the HCE80 again (for a desired number of times). I’ll try to make something based on the existing scripts in discovery.py from the ramses_rf repo.
If there are any ideas to improve the routine, let me know.
Sorry I mislead you but nice that you managed to do this anyway. I will have to check the packets I get from my UFH once I restart the heating to see if mine behave the same way.
I may be ‘safer’ (and simpler) to do a temporary change to away mode. The evohome UI only allows you to do this for a set number of days (until midnight of that day), but there is no reason why it couldn’t be for (say) 15 mins - this just isn’t exposed to HA (it is available in ramses_rf though) - as a start, have a look at set_system_mode() in command.py.
Then you don’t have to send it back, or worry that the controller missed the packet requesting it is set bac.
Notably: I’ve never sent a W|2309 to a UFC, but I suspect the idx (04, in the example above) is a circuit number, and not a zone_idx (when you speak to a controller, it’s a zone_idx)
Can you not get away with just having a target setpoint of 35C? It would be much simpler (only one packet to send) - I am sure the 22C9 is not needed.
The beauty is, nothing to do, just wait for the next 1F09… Only one packet for the controller, and one for each circuit you want pumping.
Only problem is these 1F09 sync cycles are every 2-5 mins (it varies, but is a constant per controller: mine is 185.5 seconds), and you want to have the above persist for at least 5 mins, so probably at least a couple of cycles - says: repeat sending the 2309 pkts every 30s for 5 mins.
Question: I have a somewhat convoluted setup for the USB radio. This occasionally leads to USB errors and the radio hanging. I can catch the error and reset the stick using usbreset, but then need to reload ramses_cc for the integration to pickup the freshly reset stick and start the packet sequence again. Is there a way to reload the integration without having to restart HA completely?
I have automation to trigger on the following log entry, just don’t want to restart the whole thing:
File "/srv/homeassistant/lib/python3.10/site-packages/serial/serialposix.py", line 595, in read
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)
I’m trying to fake a sensor for an existing zone with an hr92, I have already 1 zone with a fake sensor for a fee years but don’t remember how i did it.
I’m in the zone and have tried the button temperature sensor and then Remote sensor, pressed then the call fake device service in ha, but that pairs nothing. Did the same with rf device button and no succes eighter. Is this good of do I have to delete the zone and and the hr92 and a fake temp sensor?
Edit: saw in the wiki that i need to add the new id firts to the know list, but still no luck.
But then I get this in the log: The device id does not exist: 03:256006
Deleting zone didn’t help, hopefully my schema is still good.