iRT bus modification


All iRT-capable boards have sold out. This page is for reference only.


Old boilers like the Nefit Ecomline don’t use the EMS bus but the iRT bus. The EMS interface board can be modified to work with the iRT bus.

Victor-Mo reverse engineered large parts of the iRT protocol and adapted the EMS-ESP firmware to work with iRT.


The firmware and hardware modification is experimental. It may not work on your boiler. It may also need additional testing on your side. It is NOT plug and play. I cannot provide support. I do not have an iRT boiler and the iRT firmware was created by someone else. For support visit Victor-Mo’s Github repository 1.

Supported boilers

Boilers with the iRT bus are f.i. the Nefit Ecomline, Buderus GB112 and other boilers with an UBA 1.0 / UBA 4000 and UBA 1.5 / UBA 4001.

old UBA models


To interface with the iRT bus you need a modified EMS interface board. You also need a Wemos D1 Mini with the iRT firmware on it.

iRT modified base board

The EMS interface base board is of course created for interfacing with the EMS bus. To make it work for iRT, SMD resistor R5 needs to be removed and a 1,5MOhm resistor needs to be placed on R21 or R22. If you purchased the iRT modified base board these modifications are already done.

iRT modified board

R22 (for through hole resistors) is placed in parallel with R21 in case you need to change the 1,5MOhm resistance.

If you ever want to revert back to EMS, you can remove R21/R22 and place a 100kOhm resistor on either R5 or R23. R23 is in parallel with R5.

iRT modified board

I do not sell these base boards anymore

Wemos D1 Mini

As a microcontroller you have to use an ESP8266-based Wemos D1 Mini. Get the original one from Lolin, some clones have issues.

The iRT firmware

The iRT firmware is based on EMS-ESP 1.9.5.

To upload the firmware it’s probably the easiest to download the bin file from Victor-Mo’s Github repository 1 and use the NodeMCU method described HERE.

Operating modes

There are two operating modes, passive mode and active mode. In passive mode the firmware can decode the water temperature, if the boiler is running, what mode: heating or warm water, and if the pump is running.

In the (very experimental) active mode it will start the burner and sets a max water temp. The burner power is a fixed value depended on the water temperature you set, ‘set_water 35’ will set a maximum water temperature of 35 degrees Celsius and a very low burner power. ‘set_water 90’ will run the boiler at full power and a maximum water temperature of 90 degrees Celsius. For active mode you need to remove the thermostat because iRT does not support more than one device on the bus.

You can find more information on Victor-Mo’s Github repository 1.

Available parameters

iRT-ESP delivers a handful of parameters, most of which are dependant on the thermostat model. See below for an example:

Boiler stats:
Hot tap water: off
Central heating: active
Warm Water activated: on
Warm Water selected temperature: 40.0 C
Warm Water current temperature: 62.0 C
Warm Water 3-way valve: off
Selected flow temperature: 40 C
Current flow temperature: 44.0 C
Return temperature: 37.0 C
Gas: on
Boiler pump: on
Fan: on
Ignition: off
Burner selected max power: 30 %
System service code: -H (83)
Heating temperature setting on the boiler: 55 C
Outside temperature: 12.0 C
Flow temp. PID: 1.00 0.10 0.00
Max. flow temp.: 60 C

With the telnet command ‘log m’ you can show the MQTT messages that are being send, this is from an example system: {“wWSelTemp”:40, “selFlowTemp”:40, “selBurnPow”:30, “outdoorTemp”:12, “wWCurTmp”:62, “curFlowTemp”:44, “retTemp”:37, “wWActivated”:”on”, “burnGas”:”on”, “heatPmp”:”on”, “fanWork”:”on”, “ignWork”:”off”, “heating_temp”:55, “wWHeat”:”off”, “ServiceCode”:”-H”, “ServiceCodeNumber”:83}

Home Assistant integration

To get the info from iRT-ESP into Home Assistant you have to use the MQTT interface.

For each sensor add a new one manually in your configuration.yaml file like below.

- platform: mqtt
  name: "Outdoor temperature"
  state_topic: "irt-esp/boiler_data"
  device_class: "temperature"
  value_template: "{{ value_json.outdoorTemp }}"
  qos: 0
  unit_of_measurement: "°C"
  icon: mdi:coolant-temperature
  unique_id: "boiler_outdoorTemp"`