---
title: "EMS-ESP Gaskessel (Bosch, Buderus, Junkers, Nefit)"
description: "Heizkreismodus, Raum- und Warmwassersollwert, Vorlauftemperatur, Brennerleistung, Druck und Fehlercode von EMS-Gaskesseln über EMS-ESP."
url: "https://taphome.com/de/compatibility/ems-esp-gas-boiler-http/"
language: de
lastmod: 2026-10-18
generator: hugo
ai:
  topics: ["http","boiler","ems-bus","rest-api","gateway","wifi","ethernet","dhw"]
  questions: ["Ist mein Gaskessel von Buderus, Bosch, Junkers oder Nefit mit TapHome kompatibel?","Wie wird ein Gaskessel über EMS-ESP in TapHome eingebunden?","Was liest und steuert die TapHome-Vorlage für EMS-ESP-Gaskessel?","Wie wird das BBQKees-EMS-ESP-Gateway an den Kessel und an TapHome angeschlossen?","Warum zeigt der Heizkreismodus mit meinem Regler einen Fehler?","Warum meldet ein EMS-ESP-Gerät in TapHome „no value from the gateway“ oder Fehler 401?"]
---

# EMS-ESP Gaskessel (Bosch, Buderus, Junkers, Nefit)

Kommunikation: Packet Parser → HTTP

- [Offizielle Website von BBQKees Electronics](https://bbqkees-electronics.nl)
- [Produktseite BBQKees Gateway E32 V2 KIT](https://bbqkees-electronics.nl/product/gateway-e32-v2-ethernet-wifi-edition-v2-kit/)

> Netzwerkadresse
> 
> TapHome erreicht dieses Gerät unter der beim Import eingegebenen Adresse. Geben Sie dem Gerät eine feste Adresse — eine IP-Reservierung im Router oder seinen mDNS-Namen, falls es einen unterstützt —, sonst funktioniert die Integration nicht mehr, sobald der Router die Adresse ändert.
> 
> [Netzwerkvorbereitung](https://taphome.com/de/docs/setup/network-preparation/)

## Integrationsanleitung

Die Vorlage EMS-ESP Gas Boiler verbindet TapHome mit einem Gaskessel von Bosch, Buderus, Junkers oder Nefit über ein EMS-ESP-Gateway — ein BBQKees Electronics Gateway E32 V2, auf dem die quelloffene Firmware EMS-ESP läuft und das am EMS-Bus des Kessels angeschlossen wird. TapHome kommuniziert mit dem Gateway über dessen lokale HTTP-REST-API (Port 80, JSON); eine Cloud-Verbindung ist nicht nötig. In EMS-ESP erscheint der Kessel als Gerätetyp `boiler` und sein Regler als Gerätetyp `thermostat`.

Die Vorlage liest, ob der Kessel heizt oder Warmwasser bereitet, die Vorlauftemperatur und ihren Zielwert, die Brennerleistung, den letzten vom Kessel gespeicherten Fehlercode, den Anlagendruck, die Brennerstarts, die Außentemperatur sowie Raum- und Warmwassertemperatur. Mit einem Zugangstoken stellt sie außerdem den Modus des Heizkreises 1 (Aus, Manuell, Auto), den Raumsollwert und den Warmwassersollwert ein.

> [!WARNING]
> **Community-Vorlage.** Die Vorlage wurde im TapHome-Portal erstellt und für **EMS-ESP 3.8.6** geschrieben. Sie erhalten sie im TapHome-Portal: [EMS-ESP Gas Boiler — Community-Vorlage](https://portal.taphome.com/portal/community/ems-esp-gas-boiler-http) (XML herunterladen — ohne Anmeldung — und als neues Modul importieren).

**[EMS-ESP Gas Boiler (Bosch / Buderus / Junkers / Nefit)](https://portal.taphome.com/de/portal/community/ems-esp-gas-boiler-http)** — EMS-ESP, HTTP. EMS-ESP 3.8.6 REST template for Bosch, Buderus, Junkers and Nefit gas boilers on the EMS bus: heating circuit mode, room and DHW setpoints, burner, pressure, temperatures and last error code.

## Kompatible Kessel und Regler

Zwei Dinge entscheiden, ob ein Kessel mit dieser Vorlage funktioniert: EMS-ESP muss den Kessel unterstützen, und Kessel und Regler müssen die Werte senden, die die Vorlage liest.

Von der Vorlage abgedeckte Kessel:

- 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

Die [EMS-ESP-Liste unterstützter Kessel](https://docs.emsesp.org/Boilers) nennt weitere Modelle, zum Beispiel Logano, Nefit Proline und Smartline, Condens 2300 und 5000i.

Das Gateway funktioniert mit den Busvarianten EMS, EMS Plus (EMS+), EMS2 und Heatronic 3. Ältere Kessel mit iRT-Bus wie der Nefit Ecomline oder der Buderus GB112 können das Gateway erst nach dem Einbau eines Bosch EasyControlAdapter nutzen. OpenTherm gehört nicht zu den Bustypen, die das Gateway unterstützt.

Welche Werte ein bestimmter Kessel sendet, ist nicht pro Modell dokumentiert. Die Seite Devices in der Weboberfläche von EMS-ESP zeigt nur Entitäten mit einem Wert; eine Entität, die in EMS-ESP existiert, aber keinen Wert hat, wird von der Firmware unterstützt, nicht vom angeschlossenen Kessel. Dieselbe Liste gibt es unter `http://<gateway-ip>/api/boiler/entities` und `http://<gateway-ip>/api/thermostat/entities`.

Der **Heizkreismodus** hängt vom Regler ab, weil jede Reglerfamilie ihre eigene Liste von Modi hat:

| Regler | Modi in EMS-ESP | Heizkreismodus |
|---|---|---|
| RC300, RC310, RC100, HMC310, Rego 2000 / 3000 | manual, auto | Manuell und Auto; die Auswahl Aus endet mit einem Schreibfehler |
| BC400, UI800, CR120 | off, manual, auto | Aus, Manuell und Auto |
| RC35, Junkers-Regler und andere Modelle | andere Listen (zum Beispiel RC35: night, day, auto; Junkers: nofrost, eco, heat, auto) | nicht unterstützt — das Gerät endet mit einem Fehler, löschen Sie es |

Kessel von Junkers und Nefit sind oft mit Reglern von Junkers oder Nefit kombiniert, die eine andere Modusliste haben. Die Kesselgeräte der Vorlage hängen nicht vom Regler ab und funktionieren weiter.

Einige Regler nehmen keine EMS-Schreibbefehle an und erscheinen in EMS-ESP als reine Lesegeräte: Buderus Logamatic TC100, Bosch EasyControl CT200, Junkers CT100, Moduline Easy, Junkers FW / FR mit Baujahr vor 9/2008 und Tado-Thermostate. Mit ihnen lassen sich Modus und Raumsollwert nicht aus TapHome ändern.

## Hardware-Anschluss

Das BBQKees Gateway E32 V2 KIT enthält das Gateway, ein 150 cm langes EMS-Servicekabel, ein 100 cm langes Kabel für die EMS-Schraubklemmen, einen Adapterstecker für den EMS-Serviceanschluss, ein Netzteil (12 V DC mit Hohlstecker oder 5 V USB-C, je nach Produktionscharge) und ein JST-ZH-Kabel für eigene Temperatursensoren DS18B20. Das Gateway wird auf eine von drei Arten an den Kessel angeschlossen:

| Anschluss am Kessel | Kabel | Stromversorgung |
|---|---|---|
| EMS-Servicebuchse (3,5 mm) | 150 cm EMS-Servicekabel | aus der Servicebuchse |
| EMS-Servicebuchse (3,5 mm) | 150 cm EMS-Servicekabel | externes Netzteil |
| Schraubklemmen des EMS-Busses | 100 cm Kabel für EMS-Schraubklemmen | externes Netzteil (12 V DC oder 5 V USB-C) |

Die Servicebuchse kommt nur in Frage, wenn der Kessel eine hat. Gateways, die ab Sommer 2025 verkauft werden, akzeptieren beide Netzteiltypen. Das [BBQKees EMS Gateway Wiki](https://bbqkees-electronics.nl/wiki/) zeigt, wie das Gateway an einen bestimmten Kessel angeschlossen wird.

- **Netzwerk:** Ethernet (RJ45) oder WLAN. EMS-ESP verbindet sich nur mit 2,4-GHz-WLAN-Netzen mit WPA2, nicht mit 5 GHz.
- **Firmware:** EMS-ESP. Das Gateway E32 V2 (verkauft ab Januar 2024) hat PSRAM und verwendet die Firmware-Variante `ESP32-16MB+`. Die Firmware wird in der Weboberfläche von EMS-ESP unter Settings → Version aktualisiert.

## Konfiguration

### Ersteinrichtung von EMS-ESP

1. Beim ersten Start öffnet EMS-ESP einen WLAN-Zugangspunkt `ems-esp` (WPA-Passwort `ems-esp-neo`). Ein Gateway am Ethernet ist unter der IP-Adresse erreichbar, die ihm der Router zugewiesen hat.
2. Melden Sie sich mit dem Standardbenutzer `admin` / `admin` an und ändern Sie das Passwort.
3. Verbinden Sie das Gateway unter Settings → Network mit dem Heimnetz (WLAN oder Ethernet).
4. Reservieren Sie im Router eine feste IP-Adresse für das Gateway (DHCP-Reservierung) — die Vorlage spricht das Gateway über seine IP-Adresse an.

### Wichtige Einstellungen in EMS-ESP

- **Temperaturen in °C** — lassen Sie „Convert temperature values to Fahrenheit“ unter Settings → Application ausgeschaltet. Das Modul prüft dies alle 60 s und zeigt einen Fehler, wenn EMS-ESP °F meldet.
- **Language: English** — lassen Sie die Sprache unter Settings → Application auf English. Das Gerät Heizkreismodus erkennt den Modus an seinem Optionstext (`off`, `manual`, `auto`), und EMS-ESP übersetzt diese Texte in die gewählte Sprache; mit einer anderen Sprache endet das Gerät mit einem Fehler, der den gemeldeten Text nennt. Schreibzugriffe verwenden die englischen Texte, die EMS-ESP in jeder Sprache akzeptiert, und die anderen Geräte hängen nicht von der Sprache ab.
- **Boolean Format und Enum Format** spielen keine Rolle. Die Vorlage liest die Schlüssel `index` und `bool` und den numerischen `value` aus dem Entitätsdetail von EMS-ESP, die von diesen Einstellungen nicht abhängen.
- **Firmware 3.8** — das Modul zeigt eine Warnung, wenn das Gateway eine Version außerhalb der Reihe 3.8 meldet. In 3.7.0 wanderten die Warmwasser-Entitäten vom Präfix `ww` in das verschachtelte Objekt `dhw`, und EMS-ESP bekam eine eigene Modusliste für Regler vom Typ BC400; zwischen 3.8.0 und 3.8.6 haben sich die von der Vorlage verwendeten Entitäten nicht geändert.

### Zugangstoken für Schreibzugriffe

Lesen braucht keine Authentifizierung. Schreiben — Heizkreismodus, Raum- und Warmwassersollwert — braucht das EMS-ESP-Zugangstoken eines Benutzers mit Administratorrechten:

1. Öffnen Sie die Weboberfläche von EMS-ESP → Settings → Security → Manage Users.
2. Klicken Sie auf das Schlüsselsymbol eines Benutzers mit Administratorrechten und kopieren Sie das Token. Das Token hat kein Ablaufdatum.
3. Fügen Sie das Token beim Import der Vorlage in den Importparameter `AccessToken` ein.

Ohne Token ist die Integration nur lesend und jeder Schreibzugriff endet mit Fehler 401. Schalten Sie stattdessen nicht „Bypass Access Token authorization on API calls“ in EMS-ESP ein — die API wird dadurch offen, und die EMS-ESP-Dokumentation rät davon ab.

### Importparameter

| Parameter | Beschreibung |
|---|---|
| `IpAddress` | IP-Adresse des EMS-ESP-Gateways |
| `AccessToken` | EMS-ESP-Zugangstoken eines Benutzers mit Administratorrechten — nur für Schreibzugriffe nötig; für eine rein lesende Integration leer lassen |

## Gerätefunktionen

### Heizkreis 1

- **Heizkreismodus** — Aus, Manuell oder Auto für Heizkreis 1. Das Gerät liest die Position in der Modusliste des Reglers, sucht ihren Optionstext und zeigt Aus, Manuell oder Auto; es schreibt den englischen Optionstext. Welche Modi funktionieren, hängt vom Regler ab (siehe Tabelle oben).
- **Raumthermostat** — aktuelle und gewählte Raumtemperatur des Heizkreises 1, wie sie der Regler meldet. Der Sollwertbereich des Geräts ist 0–30 °C. EMS-ESP führt den Raumsollwert in Schritten von 0,5 °C; die Vorlage sendet den Wert unverändert.

### Kesselstatus

- **Heizen aktiv** — aktiv, solange der Kessel für die Raumheizung läuft.
- **Warmwasserbereitung aktiv** — aktiv, solange der Kessel Trinkwasser erwärmt.

### Temperaturen

- **Vorlauftemperatur** — aktuelle Vorlauftemperatur des Kessels mit einer Auflösung von 0,1 °C.
- **Vorlauf-Zieltemperatur** — die Vorlauftemperatur, die der Kessel anstrebt (0–90 °C), vom Regler vorgegeben. Das Gerät ist bewusst nur lesbar: EMS-ESP könnte diesen Wert schreiben, aber eine geschriebene Vorlauftemperatur würde den Raumregler übersteuern.
- **Außentemperatur** — Außentemperatur, wie sie der Kessel meldet, mit einer Auflösung von 0,1 °C.

### Brenner und Anlagendruck

- **Brennerleistung** — aktuelle Brennerleistung in Prozent. Das Gerät liest außerdem den letzten vom Kessel gespeicherten Fehlercode und zeigt ihn als Infomeldung „Last error code (stored by the boiler): …“, zum Beispiel `2E(207) 100.75.2000 65:00 (0 min)`. Das ist der Code, den der Kessel zuletzt gespeichert hat, mit Datum und Dauer — nicht unbedingt eine aktive Störung; die Meldung bleibt auch nach Behebung der Störung bestehen. Wenn der Fehlercode nicht gelesen werden kann, zeigt das Gerät eine Warnung und die Brennerleistung bleibt verfügbar.
- **Brennerstarts** — Gesamtzahl der vom Kessel gezählten Brennerstarts.
- **Anlagendruck** — Wasserdruck der Heizungsanlage in bar mit einer Auflösung von 0,1 bar.

### Warmwasser

- **Warmwasser** — aktuelle und gewählte Warmwassertemperatur des Kessels. Der Sollwertbereich des Geräts ist 10–70 °C, der Sollwert wird in ganzen Grad gesendet und der Kessel wendet seine eigenen Grenzen an.

Die Vorlage schreibt den Warmwassersollwert des Kessels (`dhw.seltemp`), nicht die Warmwassereinstellungen des Reglers (`dhw.settemp`, `dhw.mode`). Die EMS-ESP-Dokumentation weist darauf hin, dass vom Regler verwaltete Kesseleinstellungen von ihm überschrieben werden; ein Regler, der das Warmwasser verwaltet, kann den in TapHome gesetzten Sollwert also überschreiben.

### So kommuniziert die Vorlage mit EMS-ESP

Jedes Gerät liest seine eigenen Werte mit einer HTTP-GET-Anfrage pro Entität auf `/api/<device>/[hc1/|dhw/]<entity>` und nimmt den Schlüssel `value`, `index` oder `bool` aus der Antwort. Die meisten Geräte fragen alle 30 s ab; Anlagendruck und Außentemperatur alle 60 s und Brennerstarts alle 5 Minuten. Das Modul liest `/api/system/info` alle 60 s. Schreibzugriffe sind HTTP-POST-Anfragen mit einem JSON-Body und dem Zugangstoken im Header `Authorization: Bearer`.

EMS-ESP 3.8.3 und neuer antwortet mit `429 Too Many Requests` auf eine GET-Anfrage, die weniger als 50 ms nach dem vorherigen API-Aufruf eintrifft. Die Vorlage wartet deshalb vor jeder GET-Anfrage 60 ms und wiederholt sie bei 429 einmal nach 200 ms. Ein anderer Client, der die EMS-ESP-API zur gleichen Zeit abfragt (zum Beispiel ein zweites Hausautomationssystem), kann trotzdem gelegentlich eine Wiederholung auslösen.

> [!NOTE]
> **Warum REST und nicht Modbus.** EMS-ESP bietet auch Modbus TCP, aber seine Registeroffsets haben sich zwischen den stabilen Versionen 3.8.0 und 3.8.6 verschoben, daher würde eine Modbus-Vorlage nach einem Firmware-Update des Gateways stillschweigend andere Werte lesen. Die REST-API spricht Werte über ihren Namen an — eine umbenannte Entität endet in einem sichtbaren Gerätefehler.

## Fehlerbehebung

### Gerätefehler „no value from the gateway“

Die Meldung „no value from the gateway — this controller or unit does not report it; delete this device“ bedeutet, dass der angeschlossene Kessel oder Regler diese Entität nicht sendet. Prüfen Sie die Seite Devices von EMS-ESP oder `http://<gateway-ip>/api/boiler/entities` und `http://<gateway-ip>/api/thermostat/entities` und löschen Sie das Gerät nach dem Import — die anderen Geräte funktionieren weiter.

### Gerätefehler 404

Ein `404` mit einer Meldung wie `no 'xyz' in thermostat` bedeutet, dass EMS-ESP die Entität unter diesem Pfad nicht kennt — Regler oder Kessel haben sie nicht, oder die Firmware verwendet einen anderen Namen. `unknown device` bedeutet, dass EMS-ESP am EMS-Bus keinen Kessel und keinen Regler dieses Typs erkannt hat.

### Heizkreismodus meldet einen anderen Text

Der Fehler „hc1.mode reports '…'“ erscheint, wenn EMS-ESP einen anderen Modustext als `off`, `manual` oder `auto` meldet. Entweder ist die EMS-ESP-Sprache nicht English (unter Settings → Application auf English stellen), oder der Regler verwendet eine andere Modusliste (zum Beispiel RC35 oder ein Junkers-Regler) — löschen Sie dann das Gerät Heizkreismodus.

### Die Auswahl Aus endet mit einem Schreibfehler

Regler der RC300-Familie (RC300, RC310, RC100, HMC310, Rego 2000 / 3000) haben keinen Aus-Modus. EMS-ESP lehnt einen Wert ab, der nicht in der Liste des Reglers steht, daher zeigt das Gerät einen Schreibfehler (`hc1.mode write: HTTP …`). Verwenden Sie bei diesen Reglern Manuell oder Auto.

### Schreibzugriff endet mit Fehler 401

Das Zugangstoken fehlt oder ist falsch. Kopieren Sie es erneut unter Settings → Security → Manage Users → Schlüsselsymbol eines Benutzers mit Administratorrechten und tragen Sie es in die Variable `AccessToken` des Moduls ein. Das Token wird aus dem Benutzernamen und dem Super-User-Passwort unter Settings → Security → Security Settings abgeleitet.

### Fehler 429

Ein anderer Client fragt die EMS-ESP-API im selben Moment ab. Die Vorlage verteilt ihre eigenen Anfragen bereits zeitlich und wiederholt sie einmal; verringern Sie die Abfragerate des anderen Clients, wenn der Fehler wiederkehrt.

### Fehler oder Warnung des Moduls

- „EMS-ESP reports °F“ — schalten Sie Fahrenheit unter Settings → Application aus.
- „Template written for EMS-ESP 3.8.6, gateway reports …“ — das Gateway läuft mit einer Firmware außerhalb der Reihe 3.8. Aktualisieren Sie EMS-ESP unter Settings → Version.

### Gateway nicht erreichbar

1. Prüfen Sie die LED des Gateways: 1 blaues Blinken beim Start = EMS-Bus noch nicht verbunden (Kabel und Einstellung EMS Tx Mode prüfen), 2 rote Blinksignale = Netzwerk verbindet sich noch (Settings → Network prüfen; WLAN muss 2,4 GHz WPA2 sein), Dauerlicht = EMS-Daten fließen.
2. Öffnen Sie `http://<gateway-ip>/api/system/info` im Browser — wenn es antwortet, ist das Gateway erreichbar.
3. Wenn sich die IP-Adresse geändert hat, finden Sie das Gateway über den mDNS-Namen `http://ems-esp.local` und richten Sie dann im Router eine DHCP-Reservierung ein.
4. Verwenden Sie `http://` — die EMS-ESP-API unterstützt kein HTTPS mit selbstsignierten Zertifikaten.

## Verfügbare Geräte 11

Diese Geräte erscheinen nach dem Import in TapHome.

EMS-ESP-Gateway Modul

Benutzerdefinierte Variablen

`AccessToken` (string) EMS-ESP-Zugangstoken eines Benutzers mit Administratorrechten, wird bei jedem Schreibzugriff (Heizkreismodus, Raum- und Warmwassersollwert) als Bearer-Header gesendet; Lesen funktioniert ohne, ein leeres Token ergibt also eine rein lesende Integration

EMS-ESP web interface → Settings → Security → Manage Users → key icon of a user with admin rights; paste the token into the AccessToken import parameter. The token has no expiry date.

Lesen (Modul)

```taphome
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/system/info");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/system/info");
END
IF r.IsSuccess = false
    ADDERROR("system/info: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
ELSE
    VAR fahrenheit := PARSEJSON(r.Content, "settings.fahrenheit", true);
    IF fahrenheit
        ADDERROR("EMS-ESP reports \u00b0F \u2014 switch Fahrenheit off in EMS-ESP Settings \u2192 Application");
    END
    VAR version := PARSEJSON(r.Content, "system.version", true);
    IF !ISNULL(version)
        IF INDEXOF(TOSTRING(version), "3.8.") != 0
            ADDWARNING("Template written for EMS-ESP 3.8.6, gateway reports " + version);
        END
    END
END
```

Heizkreismodus Mehrwertschalter Lesen und Schreiben

Betriebsmodus des Heizkreises 1 — Aus, Manuell oder Auto; Regler der RC300-Familie bieten nur Manuell und Auto, BC400 / UI800 / CR120 auch Aus; erfordert EMS-ESP-Sprache English

enum json\_path

Werte / Zustände: Off · Manual · Auto

Schaltzustand lesen

```taphome
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/thermostat/hc1/mode");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/thermostat/hc1/mode");
END
IF r.IsSuccess = false
    ADDERROR("hc1.mode: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    RETURN(NaN);
END
VAR enumList := PARSEJSON(r.Content, "enum", true);
VAR idx := PARSEJSON(r.Content, "index", true);
IF ISNULL(enumList) OR ISNULL(idx)
    ADDERROR("hc1.mode: no value from the gateway \u2014 this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
VAR text := PARSEJSON(r.Content, "$.enum[" + TOSTRING(idx) + "]", true);
IF ISNULL(text)
    ADDERROR("hc1.mode: no value from the gateway \u2014 this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
IF text = "off"
    RETURN(0);
ELSEIF text = "manual"
    RETURN(1);
ELSEIF text = "auto"
    RETURN(2);
ELSE
    ADDERROR("hc1.mode reports '" + text + "': this template supports controllers with off / manual / auto and needs EMS-ESP Language = English (Settings \u2192 Application)");
    RETURN(NaN);
END
```

Schaltzustand schreiben

```taphome
VAR modeName := IF(Mu = 0, "off", IF(Mu = 1, "manual", "auto"));
VAR body := "{\"value\":\"" + modeName + "\"}";
VAR r := SENDHTTPREQUEST("/api/thermostat/hc1/mode", "POST", body, "Content-Type: application/json", "Authorization: Bearer " + AccessToken);
IF r.IsSuccess = false
    IF r.StatusCode = 401
        ADDERROR("hc1.mode write: access token missing or wrong (EMS-ESP Settings \u2192 Security \u2192 Manage Users \u2192 key icon of an admin user)");
    ELSE
        ADDERROR("hc1.mode write: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    END
END
```

Raumthermostat Thermostat Lesen und Schreiben

Aktuelle und gewählte Raumtemperatur des Heizkreises 1 vom Regler; Sollwert 0–30 °C, von EMS-ESP in Schritten von 0,5 °C geführt

numeric Einheit: °C

Temperatur lesen

```taphome
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/thermostat/hc1/currtemp");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/thermostat/hc1/currtemp");
END
IF r.IsSuccess = false
    ADDERROR("hc1.currtemp: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    RETURN(NaN);
END
VAR v := PARSEJSON(r.Content, "value", true);
IF ISNULL(v)
    ADDERROR("hc1.currtemp: no value from the gateway \u2014 this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(v);
```

Solltemperatur lesen

```taphome
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/thermostat/hc1/seltemp");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/thermostat/hc1/seltemp");
END
IF r.IsSuccess = false
    ADDERROR("hc1.seltemp: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    RETURN(NaN);
END
VAR v := PARSEJSON(r.Content, "value", true);
IF ISNULL(v)
    ADDERROR("hc1.seltemp: no value from the gateway \u2014 this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(v);
```

Solltemperatur schreiben

```taphome
VAR body := "{\"value\":" + Se + "}";
VAR r := SENDHTTPREQUEST("/api/thermostat/hc1/seltemp", "POST", body, "Content-Type: application/json", "Authorization: Bearer " + AccessToken);
IF r.IsSuccess = false
    IF r.StatusCode = 401
        ADDERROR("hc1.seltemp write: access token missing or wrong (EMS-ESP Settings \u2192 Security \u2192 Manage Users \u2192 key icon of an admin user)");
    ELSE
        ADDERROR("hc1.seltemp write: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    END
END
```

Heizen aktiv Reed-Kontakt Nur lesen

Aktiv, solange der Kessel für die Raumheizung läuft

boolean

Lesen

```taphome
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/heatingactive");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/heatingactive");
END
IF r.IsSuccess = false
    ADDERROR("heatingactive: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    RETURN(NaN);
END
VAR v := PARSEJSON(r.Content, "bool", true);
IF ISNULL(v)
    ADDERROR("heatingactive: no value from the gateway \u2014 this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(v);
```

Warmwasserbereitung aktiv Reed-Kontakt Nur lesen

Aktiv, solange der Kessel Trinkwasser erwärmt

boolean

Lesen

```taphome
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/tapwateractive");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/tapwateractive");
END
IF r.IsSuccess = false
    ADDERROR("tapwateractive: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    RETURN(NaN);
END
VAR v := PARSEJSON(r.Content, "bool", true);
IF ISNULL(v)
    ADDERROR("tapwateractive: no value from the gateway \u2014 this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(v);
```

Vorlauftemperatur Temperatursensor Nur lesen

numeric Einheit: °C

Temperatur lesen

```taphome
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/curflowtemp");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/curflowtemp");
END
IF r.IsSuccess = false
    ADDERROR("curflowtemp: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    RETURN(NaN);
END
VAR v := PARSEJSON(r.Content, "value", true);
IF ISNULL(v)
    ADDERROR("curflowtemp: no value from the gateway \u2014 this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(v);
```

Vorlauf-Zieltemperatur Variable Nur lesen

Vorlauftemperatur, die der Kessel anstrebt (0–90 °C), vom Regler vorgegeben; nur lesbar, damit TapHome den Regler nie übersteuert

numeric Einheit: °C

Lesen

```taphome
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/selflowtemp");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/selflowtemp");
END
IF r.IsSuccess = false
    ADDERROR("selflowtemp: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    RETURN(NaN);
END
VAR v := PARSEJSON(r.Content, "value", true);
IF ISNULL(v)
    ADDERROR("selflowtemp: no value from the gateway \u2014 this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(v);
```

Brennerleistung Variable Nur lesen

Aktuelle Brennerleistung in Prozent; zeigt außerdem den letzten vom Kessel gespeicherten Fehlercode als Infomeldung — nicht unbedingt eine aktive Störung

numeric Einheit: %

Lesen

```taphome
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/curburnpow");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/curburnpow");
END
IF r.IsSuccess = false
    ADDERROR("curburnpow: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    RETURN(NaN);
END
VAR v := PARSEJSON(r.Content, "value", true);
IF ISNULL(v)
    ADDERROR("curburnpow: no value from the gateway \u2014 this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(v);
```

Lesen (Modul)

```taphome
SLEEP(60);
VAR rlc := SENDHTTPREQUEST("/api/boiler/lastcode");
IF rlc.StatusCode = 429
    SLEEP(200);
    rlc := SENDHTTPREQUEST("/api/boiler/lastcode");
END
IF rlc.IsSuccess = false
    ADDWARNING(1, "lastcode: HTTP " + rlc.StatusCode + IF(ISNULL(PARSEJSON(rlc.Content, "message", true)), "", ": " + PARSEJSON(rlc.Content, "message", true)));
ELSE
    VAR lc := PARSEJSON(rlc.Content, "value", true);
    IF !ISNULL(lc)
        ADDINFO(1, "Last error code (stored by the boiler): " + lc);
    END
END
```

Anlagendruck Variable Nur lesen

Wasserdruck der Heizungsanlage in bar

numeric Einheit: bar

Lesen

```taphome
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/syspress");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/syspress");
END
IF r.IsSuccess = false
    ADDERROR("syspress: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    RETURN(NaN);
END
VAR v := PARSEJSON(r.Content, "value", true);
IF ISNULL(v)
    ADDERROR("syspress: no value from the gateway \u2014 this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(v);
```

Brennerstarts Variable Nur lesen

Gesamtzahl der vom Kessel gezählten Brennerstarts

numeric

Lesen

```taphome
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/burnstarts");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/burnstarts");
END
IF r.IsSuccess = false
    ADDERROR("burnstarts: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    RETURN(NaN);
END
VAR v := PARSEJSON(r.Content, "value", true);
IF ISNULL(v)
    ADDERROR("burnstarts: no value from the gateway \u2014 this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(v);
```

Warmwasser Thermostat Lesen und Schreiben

Aktuelle und gewählte Warmwassertemperatur des Kessels; der Sollwert wird in ganzen Grad gesendet und der Kessel wendet seine eigenen Grenzen an

numeric Einheit: °C

Temperatur lesen

```taphome
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/dhw/curtemp");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/dhw/curtemp");
END
IF r.IsSuccess = false
    ADDERROR("dhw.curtemp: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    RETURN(NaN);
END
VAR v := PARSEJSON(r.Content, "value", true);
IF ISNULL(v)
    ADDERROR("dhw.curtemp: no value from the gateway \u2014 this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(v);
```

Solltemperatur lesen

```taphome
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/dhw/seltemp");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/dhw/seltemp");
END
IF r.IsSuccess = false
    ADDERROR("dhw.seltemp: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    RETURN(NaN);
END
VAR v := PARSEJSON(r.Content, "value", true);
IF ISNULL(v)
    ADDERROR("dhw.seltemp: no value from the gateway \u2014 this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(v);
```

Solltemperatur schreiben

```taphome
VAR body := "{\"value\":" + ROUND(Se) + "}";
VAR r := SENDHTTPREQUEST("/api/boiler/dhw/seltemp", "POST", body, "Content-Type: application/json", "Authorization: Bearer " + AccessToken);
IF r.IsSuccess = false
    IF r.StatusCode = 401
        ADDERROR("dhw.seltemp write: access token missing or wrong (EMS-ESP Settings \u2192 Security \u2192 Manage Users \u2192 key icon of an admin user)");
    ELSE
        ADDERROR("dhw.seltemp write: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    END
END
```

Außentemperatur Temperatursensor Nur lesen

Außentemperatur, wie sie der Kessel meldet

numeric Einheit: °C

Temperatur lesen

```taphome
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/outdoortemp");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/outdoortemp");
END
IF r.IsSuccess = false
    ADDERROR("outdoortemp: HTTP " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "message", true)), "", ": " + PARSEJSON(r.Content, "message", true)));
    RETURN(NaN);
END
VAR v := PARSEJSON(r.Content, "value", true);
IF ISNULL(v)
    ADDERROR("outdoortemp: no value from the gateway \u2014 this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(v);
```

**Verbindung:** Packet Parser → HTTP • Hostname: `ems-esp.local`

Mögliche Verbesserungen (17)

- Writing the selected flow temperature — Writable in EMS-ESP (0–90 °C), deliberately left out: a written flow temperature overrides the room controller; the template only reads it (Flow Temperature Target)
- Heating circuits 2–8 — Same entities as hc1 under the hc2…hc8 path prefix; the template covers heating circuit 1 only — devices for further circuits would be copies with a different path
- Summer / winter switchover — winter / auto / summer, RC100 and RC300
- Further heating circuit settings — Comfort / eco / manual setpoints, summer and frost thresholds, flow temperature limits, heating curve design temperature, offset, room influence, control mode and time program (RC100 / RC300 and others); the docs mark the command table as incomplete and model-dependent
- Controller-side domestic hot water settings — DHW mode (off / on / auto), DHW set temperatures, one-time charge and circulation mode on RC100 / RC300 — the template reads and writes the boiler DHW entities instead
- Boiler-side hot water functions — Hot water enable, one-time charge, circulation pump and mode, flow temperature offset and maximum power for hot water; some of them are overwritten by the thermostat (docs Boilers)
- Boiler comfort mode, heating enable and heating temperature limit — comfort hot / eco / intelligent; heatingactivated and heatingtemp are not changeable on some systems (for example with an MC10 rotary control)
- Burner and pump parameters — Burner hysteresis, minimum burner period, modulation limits and pump settings — installer parameters, the allowed ranges depend on the boiler type
- Maintenance message and error reset — Set or reset the maintenance message; reset error should be used only with an active error (docs Boilers) — candidates for service actions
- EMS-ESP firmware version — Already fetched by the module for the version warning; could be exposed as a module service attribute
- Restart EMS-ESP — GET with access token; candidate for a module service action
- Refresh all device values — Forces EMS-ESP to re-read all values from the EMS bus; no authentication
- Temperature sensors on the gateway (DS18B20) — The kit includes a JST ZH cable for own DS18B20 sensors; their readings are available over the same REST API
- Analog sensors and outputs of the gateway — Readings and setvalue for gateway analog inputs, counters and output pins
- Custom entities — User-defined entities for EMS telegrams EMS-ESP does not decode yet
- Entity discovery lists — Not a device — the live list of entities a given installation reports; the way to check which template devices will work before importing
- Other EMS-ESP interfaces — EMS-ESP also offers Modbus TCP (since 3.7.0) and MQTT / MQTT Discovery; the template uses the REST API by entity name because Modbus register offsets move between firmware releases

## Importparameter

Diese Werte geben Sie beim Import des XML ein.

| In der App abgefragt              | Standard             |
|-----------------------------------|----------------------|
| Gateway IP Address                | Beim Import eingeben |
| EMS-ESP Access Token (admin user) | Beim Import eingeben |

## Quellen

- EMS-ESP 3.8.6 REST API facts (TapHome digest of the firmware at tag v3.8.6)
  
  [github.com](https://github.com/emsesp/EMS-ESP32/tree/v3.8.6) 2026-10-18
- EMS-ESP documentation — Commands and API Reference
  
  [docs.emsesp.org](https://docs.emsesp.org/Commands) 2026-10-18
- EMS-ESP documentation — Configuring EMS-ESP
  
  [docs.emsesp.org](https://docs.emsesp.org/Configuring) 2026-10-18
- EMS-ESP documentation — Supported Boilers
  
  [docs.emsesp.org](https://docs.emsesp.org/Boilers) 2026-10-18
- EMS-ESP documentation — Supported Thermostats
  
  [docs.emsesp.org](https://docs.emsesp.org/Thermostats) 2026-10-18
- EMS-ESP documentation — Installing
  
  [docs.emsesp.org](https://docs.emsesp.org/Installing) 2026-10-18
- EMS-ESP documentation — Getting Started
  
  [docs.emsesp.org](https://docs.emsesp.org/Getting-Started) 2026-10-18
- EMS-ESP changelog 3.7.0 – 3.8.6
  
  [github.com](https://github.com/emsesp/EMS-ESP32/blob/v3.8.6/CHANGELOG.md) 2026-10-18
- BBQKees Gateway E32 V2 KIT (Ethernet + WiFi Edition V2 KIT) — product page
  
  [bbqkees-electronics.nl](https://bbqkees-electronics.nl/product/gateway-e32-v2-ethernet-wifi-edition-v2-kit/) 2026-10-18

## Verwandte Dokumentation

- [Packet-Parser-Integration](https://taphome.com/de/compatibility/packet-parser-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/de/docs/integration/packet-parser/)
- [Packet-Parser-Funktionen](https://taphome.com/de/docs/script/packet-parser/)
- [Parsing-Funktionen](https://taphome.com/de/docs/script/parsing-functions/)

