
The EMS-ESP Gas Boiler template connects TapHome to a Bosch, Buderus, Junkers or Nefit gas boiler through an EMS-ESP gateway — a BBQKees Electronics Gateway E32 V2 that runs the open-source EMS-ESP firmware and plugs into the EMS bus of the boiler. TapHome talks to the gateway over its local HTTP REST API (port 80, JSON); no cloud connection is needed. In EMS-ESP the boiler appears as device type boiler and its controller as device type thermostat.
The template reads whether the boiler is heating or making hot water, the flow temperature and its target, the burner power, the last error code stored by the boiler, the system pressure, the burner starts, the outdoor temperature and the room and hot water temperatures. With an access token it also sets the mode of heating circuit 1 (Off, Manual, Auto), the room setpoint and the hot water setpoint.
Community template — not yet tested with TapHome. The template was generated in the TapHome portal and written against EMS-ESP 3.8.6; it has not been verified on a real installation yet. Get it from the TapHome portal: EMS-ESP Gas Boiler — community template (download the XML — no sign-in needed — and import it as a new module).
Compatible boilers and controllers
Two things decide whether a boiler works with this template: EMS-ESP must support the boiler, and the boiler and its controller must report the values the template reads.
Boilers covered by the template:
- Buderus GB125, GB135, GB162, GBx72, GB192, GB192i.2, Logamax Plus GB022, U122
- Bosch / Junkers Cerapur GC2200W, Cerapur Top, Condens 2500, GC9000
- Nefit Topline, Trendline
- Worcester Greenstar Si, 30Ri Compact, 8000
The EMS-ESP list of supported boilers names further models, for example Logano, Nefit Proline and Smartline, Condens 2300 and 5000i.
The gateway works with the EMS, EMS Plus (EMS+), EMS2 and Heatronic 3 bus variants. Older boilers with the iRT bus, such as the Nefit Ecomline or the Buderus GB112, can use the gateway only after a Bosch EasyControlAdapter is installed. OpenTherm is not among the bus types the gateway supports.
Which values a given boiler reports is not documented per model. The Devices page of the EMS-ESP web interface shows only entities that have a value; an entity that exists in EMS-ESP but has no value is supported by the firmware, not by the connected boiler. The same list is available at http://<gateway-ip>/api/boiler/entities and http://<gateway-ip>/api/thermostat/entities.
Heating circuit mode depends on the controller, because each controller family has its own list of modes:
| Controller | Modes in EMS-ESP | Heating Circuit Mode |
|---|---|---|
| RC300, RC310, RC100, HMC310, Rego 2000 / 3000 | manual, auto | Manual and Auto; selecting Off ends in a write error |
| BC400, UI800, CR120 | off, manual, auto | Off, Manual and Auto |
| RC35, Junkers controllers and other models | other lists (for example RC35: night, day, auto; Junkers: nofrost, eco, heat, auto) | not supported — the device ends in an error, delete it |
Junkers and Nefit boilers are often paired with Junkers or Nefit controllers that have another mode list. The boiler devices of the template do not depend on the controller and keep working.
Some controllers do not accept EMS write commands and appear in EMS-ESP as read-only devices: Buderus Logamatic TC100, Bosch EasyControl CT200, Junkers CT100, Moduline Easy, Junkers FW / FR built before 9/2008 and Tado thermostats. With them the mode and the room setpoint cannot be changed from TapHome.
Hardware connection
The BBQKees Gateway E32 V2 KIT contains the gateway, a 150 cm EMS service cable, a 100 cm EMS screw terminal cable, an EMS service port adapter plug, a power supply (12 V DC barrel jack or 5 V USB-C, depending on the production batch) and a JST ZH cable for own DS18B20 temperature sensors. The gateway connects to the boiler in one of three ways:
| Connection on the boiler | Cable | Power |
|---|---|---|
| EMS service jack (3.5 mm) | 150 cm EMS service cable | from the service jack |
| EMS service jack (3.5 mm) | 150 cm EMS service cable | external power supply |
| EMS bus screw terminals | 100 cm EMS screw terminal cable | external power supply (12 V DC or 5 V USB-C) |
The service jack is an option only when the boiler has one. Gateways sold from summer 2025 onward accept both types of power supply. The BBQKees EMS Gateway Wiki shows how to connect the gateway to a specific boiler.
- Network: Ethernet (RJ45) or Wi-Fi. EMS-ESP connects only to 2.4 GHz WPA2 Wi-Fi networks, not to 5 GHz.
- Firmware: EMS-ESP. The Gateway E32 V2 (sold from January 2024) has PSRAM and uses the
ESP32-16MB+firmware variant. The firmware is updated in the EMS-ESP web interface under Settings → Version.
Configuration
First-time setup of EMS-ESP
- On the first start EMS-ESP opens a Wi-Fi access point
ems-esp(WPA passwordems-esp-neo). A gateway on Ethernet is reachable on the IP address the router assigned to it. - Sign in with the default user
admin/adminand change the password. - Connect the gateway to the home network in Settings → Network (Wi-Fi or Ethernet).
- Reserve a fixed IP address for the gateway in the router (DHCP reservation) — the template addresses the gateway by its IP address.
EMS-ESP settings that matter
- Temperatures in °C — keep “Convert temperature values to Fahrenheit” off in Settings → Application. The module checks this every 60 s and shows an error when EMS-ESP reports °F.
- Language: English — keep Language in Settings → Application on English. The Heating Circuit Mode device recognises the mode by its option text (
off,manual,auto), and EMS-ESP translates these texts into the selected language; with another language the device ends in an error that names the reported text. Writes use the English texts, which EMS-ESP accepts in every language, and the other devices do not depend on the language. - Boolean Format and Enum Format do not matter. The template reads the
indexandboolkeys and the numericvalueof the EMS-ESP entity detail, which do not depend on these settings. - Firmware 3.8 — the module shows a warning when the gateway reports a version outside the 3.8 series. In 3.7.0 the hot water entities moved from the
wwprefix to the nesteddhwobject and EMS-ESP got a separate mode list for BC400-type controllers; between 3.8.0 and 3.8.6 the entities used by the template did not change.
Access token for writes
Reading needs no authentication. Writing — heating circuit mode, room and hot water setpoints — needs the EMS-ESP access token of a user with admin rights:
- Open the EMS-ESP web interface → Settings → Security → Manage Users.
- Click the key icon of a user with admin rights and copy the token. The token has no expiry date.
- Paste the token into the
AccessTokenimport parameter when importing the template.
Without a token the integration is read-only and every write ends in error 401. Do not switch on “Bypass Access Token authorization on API calls” in EMS-ESP instead — it makes the API open, and the EMS-ESP documentation does not recommend it.
Import parameters
| Parameter | Description |
|---|---|
IpAddress | IP address of the EMS-ESP gateway |
AccessToken | EMS-ESP access token of an admin user — needed only for writes; leave it empty for a read-only integration |
Device capabilities
Heating circuit 1
- Heating Circuit Mode — Off, Manual or Auto for heating circuit 1. The device reads the position in the mode list of the controller, looks up its option text and shows Off, Manual or Auto; it writes the English option text. Which modes work depends on the controller (see the table above).
- Room Thermostat — current and selected room temperature of heating circuit 1 as reported by the controller. The setpoint range of the device is 0–30 °C. EMS-ESP keeps the room setpoint in 0.5 °C steps; the template sends the value unchanged.
Boiler status
- Heating Active — Active while the boiler runs for space heating.
- Tap Water Heating Active — Active while the boiler heats domestic hot water.
Temperatures
- Flow Temperature — current flow temperature of the boiler, with 0.1 °C resolution.
- Flow Temperature Target — the flow temperature the boiler is aiming for (0–90 °C), set by the controller. The device is read-only on purpose: EMS-ESP could write this value, but a written flow temperature would override the room controller.
- Outdoor Temperature — outside temperature as reported by the boiler, with 0.1 °C resolution.
Burner and system pressure
- Burner Power — current burner output in percent. The device also reads the last error code stored by the boiler and shows it as the info message “Last error code (stored by the boiler): …”, for example
2E(207) 100.75.2000 65:00 (0 min). This is the code the boiler stored last, with its date and duration — not necessarily an active fault; the message stays after the fault is gone. When the error code cannot be read, the device shows a warning and the burner power stays available. - Burner Starts — total number of burner starts counted by the boiler.
- System Pressure — water pressure of the heating system in bar, with 0.1 bar resolution.
Domestic hot water
- Domestic Hot Water — current and selected hot water temperature of the boiler. The setpoint range of the device is 10–70 °C, the setpoint is sent in whole degrees and the boiler enforces its own limits.
The template writes the hot water setpoint of the boiler (dhw.seltemp), not the hot water settings of the controller (dhw.settemp, dhw.mode). The EMS-ESP documentation notes that boiler settings managed by the controller are overwritten by it, so a controller that manages hot water may overwrite the setpoint set in TapHome. This has not been verified on a real installation yet.
How the template talks to EMS-ESP
Each device reads its own values with one HTTP GET per entity on /api/<device>/[hc1/|dhw/]<entity> and takes the value, index or bool key of the answer. Most devices poll every 30 s; System Pressure and Outdoor Temperature poll every 60 s and Burner Starts every 5 minutes. The module reads /api/system/info every 60 s. Writes are HTTP POST requests with a JSON body and the access token in the Authorization: Bearer header.
EMS-ESP 3.8.3 and newer answers 429 Too Many Requests to a GET that arrives less than 50 ms after the previous API call. The template therefore waits 60 ms before each GET and retries once after 200 ms when it gets 429. Another client polling the EMS-ESP API at the same time (for example a second home automation system) can still cause an occasional retry.
Why REST and not Modbus. EMS-ESP also offers Modbus TCP, but its register offsets moved between the stable releases 3.8.0 and 3.8.6, so a Modbus template would silently read other values after a firmware update of the gateway. The REST API addresses values by name — a renamed entity ends in a visible device error instead.
Troubleshooting
Device error “no value from the gateway”
The message “no value from the gateway — this controller or unit does not report it; delete this device” means the connected boiler or controller does not report this entity. Check the Devices page of EMS-ESP or http://<gateway-ip>/api/boiler/entities and http://<gateway-ip>/api/thermostat/entities, then delete the device after the import — the other devices keep working.
Device error 404
A 404 with a message such as no 'xyz' in thermostat means that EMS-ESP does not know the entity under this path — the controller or boiler does not have it, or the firmware uses another name. unknown device means EMS-ESP has not detected a boiler or controller of that type on the EMS bus.
Heating Circuit Mode reports another text
The error “hc1.mode reports ‘…’” appears when EMS-ESP reports a mode text other than off, manual or auto. Either the EMS-ESP Language is not English (set it to English in Settings → Application), or the controller uses another mode list (for example RC35 or a Junkers controller) — then delete the Heating Circuit Mode device.
Selecting Off ends in a write error
Controllers of the RC300 family (RC300, RC310, RC100, HMC310, Rego 2000 / 3000) have no off mode. EMS-ESP refuses a value that is not in the list of the controller, so the device shows a write error (hc1.mode write: HTTP …). Use Manual or Auto with these controllers.
Write fails with error 401
The access token is missing or wrong. Copy it again from Settings → Security → Manage Users → key icon of an admin user and enter it into the AccessToken variable of the module. The token is derived from the user name and the super user password in Settings → Security → Security Settings.
Error 429
Another client polls the EMS-ESP API at the same moment. The template already paces its own requests and retries once; reduce the polling rate of the other client if the error repeats.
Module error or warning
- “EMS-ESP reports °F” — switch Fahrenheit off in Settings → Application.
- “Template written for EMS-ESP 3.8.6, gateway reports …” — the gateway runs firmware outside the 3.8 series. Update EMS-ESP in Settings → Version.
Gateway not reachable
- Check the gateway LED: 1 blue flash during boot = EMS bus not connected yet (check the cable and the EMS Tx Mode setting), 2 red flashes = network still connecting (check Settings → Network; Wi-Fi must be 2.4 GHz WPA2), steady light = EMS data is flowing.
- Open
http://<gateway-ip>/api/system/infoin a browser — if it answers, the gateway is reachable. - If the IP address has changed, open the mDNS name
http://ems-esp.localto find the gateway, then set a DHCP reservation in the router. - Use
http://— the EMS-ESP API does not support HTTPS with self-signed certificates.
