How to electronically produce a specified resistance?

For my upcoming project, I am interested to control my heating and hot water system with an arduino.

I have a fairly old "combi boiler"* a Worcester-Bosch RD 537i. It has a fairly complex control interface, with a simple computer and user interface on the boiler, and a remote "Bosch TR2" thermostatic room controller.

Most room thermostats simply read the air temperature and send an open/closed signal to the heating system. However in this case, the boiler is vendor-locked to the TR2. No 3rd party controllers are supported, and sparse information from people who have connected the boiler's undocumented external controller interface shows that the boiler does not actually behave correctly (

The TR2 uses three wires to send three control inputs:

  • measured room temperature
  • demanded temperature
  • one of four user modes

Someone online writes that they reverse-engineered the protocol the TR2 uses to communicate to the boiler (Worcester Bosch TR2 room stat - reverse engineered | DIY Forums). If I understand the notes correctly, the resistance between one pair of wires sends the measured room temperature, and the resistance between a different pair of wires sends a sum of the user mode (a large resistance value) plus the demanded temperature (a small resistance value) which is interpreted in increments of 0.5˚C ranging from 5˚C to 30˚C.

Problem 1
I would like to build a controller capable of emulating the TR2 so that I can replace it with something else, maybe even building an OpenTherm interface if appropriate.
So I'd like to write a sketch that will set very accurate resistance values on some sort of digitally actuated potentiometer. No search result I can find however, is using the resistance to communicate information so I want to be sure I have the correct terminology for the sort of components I need to buy.

TR2 Details

  • Wire "A" - presumably, 24V or 25V input
  • Wire "B" - return from A providing a resistance indicating the measured room temperature
  • Wire "C" - return from A providing a resistance indicating the demanded mode and temperature

Development Plan

  • I have a spare TR2
  • I have on order, a spare boiler control panel of the exact same model, including the 25V transformer, working PCB with temperature controller knobs, and programmer user interface
  1. measure resistances on the spare TR2, documenting exactly its values for various control states
  2. connect the TR2 to the spare programmer, confirming how it works
  3. Author an arduino powered controller, confirm against the spare programmer that it works in the same way
  4. Additional modification (detailed in "off-topic" section below)

* "combi boiler" is UK terminology for a combination domestic hot water and central hot-water heating appliance.


Off topic section for later (I am happy to receive advice or input on the below problem as well)

The boiler is natural gas fired, and heats a "core" of hot water that it then passes through heat exchangers to provide two different temperature outputs, one for on-demand hot water, and the other a time-modulated heating circuit. The local controls include a manual heating water temperature, and a manual domestic hot water temperature, both I think 2.2kOhm rheostats mounted directly on the boiler PCB. A user programming module is an independent computer accepting stored commands like mode-dependent on/off scheduling, and two different "default" temperatures used in nighttime and pipe-freeze-prevention modes.

Radiator water control
In the existing design, user manually guesses what is the best radiator water temperature, and the system modulates high/low gas firings to maintain that output temperature. If the weather warms, the system will still work fine to maintain room temperature, but it will not be running in its optimal efficiency mode. For optimum efficiency, the radiator water has to be no warmer than necessary to maintain the set temperature

Problem 2
The only thing this boiler does not provide automatically is temperature modulation of the heating water.

you can find Digital Potentiometers, here is an example of what it looks like

You could connect a potentiometer to a servo.

The servo turns the pot.

A potentiometer and multiple resistor values, some in series with the pot and some which are switched in are mentioned in the link to DIY forums.

Can you attempt to draw a diagram of the complete resistor network together with the three connection A, B and C, the "4 position" switch and the 24/25 volt power supply for this TR2 unit.

It could well be that a single digital pot can cover all the required ranges of resistances with sufficient resolution. However, if the rotary dial pot is only 2.2k and in series with some large resistors, some quite high precision may be required.

1 Like

I have a 4 zone heating controller see Is data transferred using TCP delivered 'whole'? - #16 by PerryBebbington

The input to the boiler is a simple on / off control to light the boiler. There are 4 zone valves controlling the heat to 4 zones in the house.

The way you control the water temperature to the heating circuit is with very slow PWM, in my case there is a 720 second cycle time, with the on / off ratio varied according the the difference between desired and actual room temperature. Because it takes a long time to heat water, and a long time for the heat to get into the room from a radiator, this method of controlling the heating water temperature works perfectly well. The boiler is actually set at 70 degrees, but the water is only ever that hot if the house is really cold.

Is there a simple on /off input to your boiler?

In general, any device which is measuring the resistance of a sensor, does so either by applying a constant current to the sensor, or powering it from a constant voltage through a resistor, It is most unlikely to use any more sophisticated method.

So to emulate the sensor, all you need to do is to know what voltage would correspond to any given sensor reading, and generate that voltage to match.

1 Like

Is there a simple on /off input to your boiler?

Thank you Perry, there is not. That is the way they achieve the vendor lock-in with the room controller.

Larry, thank you. I think that solution sounds positively crazy for the first problem, setting an exactly specified resistance. But for the later ("off-topic") problem, it is actually very good because I could implement that without voiding the warranty on my boiler. I could get an electronic hand and video camera to set the water temperature... But that problem is coming far in the future.

Yes, thank you. This is of course what I will do when my parts come in.

I do have a project to finish ahead of this one, so it won't necessarily be coming very quickly.

Many thanks Paul for this insight. Let me build the requirements first, both with measured Ohms and measured Volts.

Is it possible to fool the boiler, perhaps by having a resistance that tells it to produce high output and another that tell it to produce such a low output it may as well be off?

See (Worcester Bosch TR2 room stat - reverse engineered | DIY Forums ). If I understand the notes correctly, the resistance between one pair of wires sends the measured room temperature, and the resistance between a different pair of wires sends a sum of the user mode (a large resistance value) plus the demanded temperature.

I had a quick read, this bit in particular:

looking back I think a simpler solution is to open/short circuit the
temperature sensor, which looks like a thermistor, between pin 4 and pin
F to fool the boiler into thinking it was cold. May need to insert a
specific value in/across. If there is any interest will look into this
option and report back.

I'm confident it's possible to control it externally, I'm confident I'd be able to do it, but of course only if I had the boiler in front of me, which I don't unfortunately.

What you do next I guess depends on what you want to, I feel you have enough information to do some investigating and experimenting.

If you decide my suggestion is worth exploring I'm happy to give you a starting point with a function to control 1 zone in the way I suggested, you'd have to modify it and incorporation into your code as required.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.