---
title: "EMS-ESP kocioł gazowy (Bosch, Buderus, Junkers, Nefit)"
description: "Tryb obiegu grzewczego, nastawy pomieszczenia i CWU, temperatura zasilania, moc palnika, ciśnienie i kod błędu kotłów gazowych EMS przez EMS-ESP."
url: "https://taphome.com/pl/compatibility/ems-esp-gas-boiler-http/"
language: pl
lastmod: 2026-10-18
generator: hugo
ai:
  topics: ["http","boiler","ems-bus","rest-api","gateway","wifi","ethernet","dhw"]
  questions: ["Czy mój kocioł gazowy Buderus, Bosch, Junkers lub Nefit jest kompatybilny z TapHome?","Jak zintegrować kocioł gazowy z TapHome przez EMS-ESP?","Co odczytuje i czym steruje szablon TapHome dla kotłów gazowych EMS-ESP?","Jak podłączyć bramkę BBQKees EMS-ESP do kotła i do TapHome?","Dlaczego tryb obiegu grzewczego zgłasza błąd z moim regulatorem?","Dlaczego urządzenie EMS-ESP w TapHome zgłasza „no value from the gateway” lub błąd 401?"]
---

# EMS-ESP kocioł gazowy (Bosch, Buderus, Junkers, Nefit)

Komunikacja: Packet Parser → HTTP

- [Oficjalna strona BBQKees Electronics](https://bbqkees-electronics.nl)
- [Strona produktu BBQKees Gateway E32 V2 KIT](https://bbqkees-electronics.nl/product/gateway-e32-v2-ethernet-wifi-edition-v2-kit/)

## Poradnik integracji

Szablon EMS-ESP Gas Boiler łączy TapHome z kotłem gazowym Bosch, Buderus, Junkers lub Nefit przez bramkę EMS-ESP — BBQKees Electronics Gateway E32 V2, która działa na otwartym oprogramowaniu EMS-ESP i podłącza się do magistrali EMS kotła. TapHome komunikuje się z bramką przez jej lokalne HTTP REST API (port 80, JSON); połączenie z chmurą nie jest potrzebne. W EMS-ESP kocioł występuje jako typ urządzenia `boiler`, a jego regulator jako typ urządzenia `thermostat`.

Szablon odczytuje, czy kocioł grzeje lub przygotowuje ciepłą wodę, temperaturę zasilania i jej wartość docelową, moc palnika, ostatni kod błędu zapisany przez kocioł, ciśnienie w instalacji, liczbę startów palnika, temperaturę zewnętrzną oraz temperaturę pomieszczenia i ciepłej wody. Z tokenem dostępu ustawia także tryb obiegu grzewczego 1 (Wyłączony, Ręczny, Auto), nastawę temperatury pomieszczenia i nastawę ciepłej wody.

> [!WARNING]
> **Szablon społeczności — jeszcze nie przetestowany z TapHome.** Szablon powstał w portalu TapHome i został napisany dla **EMS-ESP 3.8.6**; nie został jeszcze sprawdzony w rzeczywistej instalacji. Pobierz go z portalu TapHome: [EMS-ESP Gas Boiler — szablon społeczności](https://portal.taphome.com/portal/community/ems-esp-gas-boiler-http) (pobierz XML — bez logowania — i zaimportuj go jako nowy moduł).

**[EMS-ESP Gas Boiler (Bosch / Buderus / Junkers / Nefit)](https://portal.taphome.com/pl/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.

## Kompatybilne kotły i regulatory

O tym, czy kocioł działa z tym szablonem, decydują dwie rzeczy: EMS-ESP musi obsługiwać kocioł, a kocioł i jego regulator muszą wysyłać wartości, które szablon odczytuje.

Kotły objęte szablonem:

- 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

[Lista kotłów obsługiwanych przez EMS-ESP](https://docs.emsesp.org/Boilers) wymienia kolejne modele, na przykład Logano, Nefit Proline i Smartline, Condens 2300 i 5000i.

Bramka działa z wariantami magistrali EMS, EMS Plus (EMS+), EMS2 i Heatronic 3. Starsze kotły z magistralą iRT, takie jak Nefit Ecomline lub Buderus GB112, mogą korzystać z bramki dopiero po zainstalowaniu adaptera Bosch EasyControlAdapter. OpenTherm nie należy do typów magistrali obsługiwanych przez bramkę.

Które wartości wysyła dany kocioł, nie jest udokumentowane dla poszczególnych modeli. Strona Devices w interfejsie WWW EMS-ESP pokazuje tylko encje z wartością; encja, która istnieje w EMS-ESP, ale nie ma wartości, jest obsługiwana przez oprogramowanie, a nie przez podłączony kocioł. Ta sama lista jest dostępna pod `http://<gateway-ip>/api/boiler/entities` i `http://<gateway-ip>/api/thermostat/entities`.

**Tryb obiegu grzewczego** zależy od regulatora, ponieważ każda rodzina regulatorów ma własną listę trybów:

| Regulator | Tryby w EMS-ESP | Tryb obiegu grzewczego |
|---|---|---|
| RC300, RC310, RC100, HMC310, Rego 2000 / 3000 | manual, auto | Ręczny i Auto; wybór Wyłączony kończy się błędem zapisu |
| BC400, UI800, CR120 | off, manual, auto | Wyłączony, Ręczny i Auto |
| RC35, regulatory Junkers i inne modele | inne listy (na przykład RC35: night, day, auto; Junkers: nofrost, eco, heat, auto) | nieobsługiwane — urządzenie kończy się błędem, usuń je |

Kotły Junkers i Nefit są często połączone z regulatorami Junkers lub Nefit, które mają inną listę trybów. Urządzenia kotła w szablonie nie zależą od regulatora i działają dalej.

Niektóre regulatory nie przyjmują poleceń zapisu EMS i pojawiają się w EMS-ESP jako urządzenia tylko do odczytu: Buderus Logamatic TC100, Bosch EasyControl CT200, Junkers CT100, Moduline Easy, Junkers FW / FR wyprodukowane przed 9/2008 i termostaty Tado. Z nimi trybu i nastawy temperatury pomieszczenia nie da się zmienić z TapHome.

## Połączenie sprzętowe

Zestaw BBQKees Gateway E32 V2 KIT zawiera bramkę, kabel serwisowy EMS 150 cm, kabel 100 cm do zacisków śrubowych EMS, adapter portu serwisowego EMS, zasilacz (12 V DC z wtykiem lub 5 V USB-C, zależnie od partii produkcyjnej) oraz kabel JST ZH do własnych czujników temperatury DS18B20. Bramkę podłącza się do kotła na jeden z trzech sposobów:

| Złącze w kotle | Kabel | Zasilanie |
|---|---|---|
| Gniazdo serwisowe EMS (3,5 mm) | kabel serwisowy EMS 150 cm | z gniazda serwisowego |
| Gniazdo serwisowe EMS (3,5 mm) | kabel serwisowy EMS 150 cm | zasilacz zewnętrzny |
| Zaciski śrubowe magistrali EMS | kabel 100 cm do zacisków śrubowych EMS | zasilacz zewnętrzny (12 V DC lub 5 V USB-C) |

Gniazdo serwisowe wchodzi w grę tylko wtedy, gdy kocioł je ma. Bramki sprzedawane od lata 2025 przyjmują oba typy zasilaczy. [BBQKees EMS Gateway Wiki](https://bbqkees-electronics.nl/wiki/) pokazuje, jak podłączyć bramkę do konkretnego kotła.

- **Sieć:** Ethernet (RJ45) lub Wi-Fi. EMS-ESP łączy się tylko z sieciami Wi-Fi 2,4 GHz z WPA2, nie z 5 GHz.
- **Oprogramowanie:** EMS-ESP. Gateway E32 V2 (sprzedawany od stycznia 2024) ma PSRAM i używa wariantu oprogramowania `ESP32-16MB+`. Oprogramowanie aktualizuje się w interfejsie WWW EMS-ESP w Settings → Version.

## Konfiguracja

### Pierwsza konfiguracja EMS-ESP

1. Przy pierwszym uruchomieniu EMS-ESP otwiera punkt dostępu Wi-Fi `ems-esp` (hasło WPA `ems-esp-neo`). Bramka podłączona przez Ethernet jest dostępna pod adresem IP przydzielonym jej przez router.
2. Zaloguj się domyślnym użytkownikiem `admin` / `admin` i zmień hasło.
3. W Settings → Network podłącz bramkę do sieci domowej (Wi-Fi lub Ethernet).
4. W routerze zarezerwuj dla bramki stały adres IP (rezerwacja DHCP) — szablon adresuje bramkę jej adresem IP.

### Ważne ustawienia EMS-ESP

- **Temperatury w °C** — pozostaw wyłączone „Convert temperature values to Fahrenheit” w Settings → Application. Moduł sprawdza to co 60 s i pokazuje błąd, gdy EMS-ESP zgłasza °F.
- **Language: English** — pozostaw język English w Settings → Application. Urządzenie Tryb obiegu grzewczego rozpoznaje tryb po tekście opcji (`off`, `manual`, `auto`), a EMS-ESP tłumaczy te teksty na wybrany język; przy innym języku urządzenie kończy się błędem, który podaje zgłoszony tekst. Zapisy używają tekstów angielskich, które EMS-ESP akceptuje w każdym języku, a pozostałe urządzenia nie zależą od języka.
- **Boolean Format i Enum Format** nie mają znaczenia. Szablon odczytuje klucze `index` i `bool` oraz liczbowe `value` ze szczegółów encji EMS-ESP, które nie zależą od tych ustawień.
- **Oprogramowanie 3.8** — moduł pokazuje ostrzeżenie, gdy bramka zgłasza wersję spoza serii 3.8. W wersji 3.7.0 encje ciepłej wody przeniesiono z prefiksu `ww` do zagnieżdżonego obiektu `dhw`, a EMS-ESP otrzymał osobną listę trybów dla regulatorów typu BC400; między 3.8.0 a 3.8.6 encje używane przez szablon się nie zmieniły.

### Token dostępu do zapisu

Odczyt nie wymaga uwierzytelniania. Zapis — tryb obiegu grzewczego, nastawy pomieszczenia i ciepłej wody — wymaga tokenu dostępu EMS-ESP użytkownika z uprawnieniami administratora:

1. Otwórz interfejs WWW EMS-ESP → Settings → Security → Manage Users.
2. Kliknij ikonę klucza przy użytkowniku z uprawnieniami administratora i skopiuj token. Token nie ma daty wygaśnięcia.
3. Podczas importu szablonu wklej token do parametru importu `AccessToken`.

Bez tokenu integracja działa tylko w trybie odczytu, a każdy zapis kończy się błędem 401. Zamiast tego nie włączaj w EMS-ESP opcji „Bypass Access Token authorization on API calls” — otwiera ona API, a dokumentacja EMS-ESP jej nie zaleca.

### Parametry importu

| Parametr | Opis |
|---|---|
| `IpAddress` | Adres IP bramki EMS-ESP |
| `AccessToken` | Token dostępu EMS-ESP użytkownika z uprawnieniami administratora — potrzebny tylko do zapisu; dla integracji tylko do odczytu pozostaw pusty |

## Możliwości urządzeń

### Obieg grzewczy 1

- **Tryb obiegu grzewczego** — Wyłączony, Ręczny lub Auto dla obiegu grzewczego 1. Urządzenie odczytuje pozycję na liście trybów regulatora, wyszukuje jej tekst opcji i pokazuje Wyłączony, Ręczny lub Auto; zapisuje angielski tekst opcji. To, które tryby działają, zależy od regulatora (zobacz tabelę powyżej).
- **Termostat pokojowy** — aktualna i zadana temperatura pomieszczenia obiegu grzewczego 1 zgłaszana przez regulator. Zakres nastawy urządzenia to 0–30 °C. EMS-ESP przechowuje nastawę pomieszczenia w krokach co 0,5 °C; szablon wysyła wartość bez zmian.

### Stan kotła

- **Grzanie aktywne** — aktywne, gdy kocioł pracuje na ogrzewanie pomieszczeń.
- **Podgrzewanie ciepłej wody aktywne** — aktywne, gdy kocioł podgrzewa ciepłą wodę użytkową.

### Temperatury

- **Temperatura zasilania** — aktualna temperatura zasilania kotła z rozdzielczością 0,1 °C.
- **Docelowa temperatura zasilania** — temperatura zasilania, do której dąży kocioł (0–90 °C), ustawiana przez regulator. Urządzenie jest celowo tylko do odczytu: EMS-ESP mógłby zapisać tę wartość, ale zapisana temperatura zasilania nadpisałaby regulator pokojowy.
- **Temperatura zewnętrzna** — temperatura zewnętrzna zgłaszana przez kocioł, z rozdzielczością 0,1 °C.

### Palnik i ciśnienie w instalacji

- **Moc palnika** — aktualna moc palnika w procentach. Urządzenie odczytuje także ostatni kod błędu zapisany przez kocioł i pokazuje go jako komunikat informacyjny „Last error code (stored by the boiler): …”, na przykład `2E(207) 100.75.2000 65:00 (0 min)`. To kod, który kocioł zapisał ostatni, z datą i czasem trwania — niekoniecznie aktywna usterka; komunikat pozostaje także po usunięciu usterki. Gdy kodu błędu nie da się odczytać, urządzenie pokazuje ostrzeżenie, a moc palnika pozostaje dostępna.
- **Liczba startów palnika** — całkowita liczba startów palnika policzona przez kocioł.
- **Ciśnienie w instalacji** — ciśnienie wody w instalacji grzewczej w barach z rozdzielczością 0,1 bar.

### Ciepła woda użytkowa

- **Ciepła woda użytkowa** — aktualna i zadana temperatura ciepłej wody kotła. Zakres nastawy urządzenia to 10–70 °C, nastawa jest wysyłana w pełnych stopniach, a kocioł stosuje własne ograniczenia.

Szablon zapisuje nastawę ciepłej wody kotła (`dhw.seltemp`), a nie ustawienia ciepłej wody regulatora (`dhw.settemp`, `dhw.mode`). Dokumentacja EMS-ESP podaje, że ustawienia kotła zarządzane przez regulator są przez niego nadpisywane, więc regulator zarządzający ciepłą wodą może nadpisać nastawę ustawioną w TapHome. Nie zostało to jeszcze sprawdzone w rzeczywistej instalacji.

### Jak szablon komunikuje się z EMS-ESP

Każde urządzenie odczytuje swoje wartości jednym żądaniem HTTP GET na encję pod `/api/<device>/[hc1/|dhw/]<entity>` i bierze klucz `value`, `index` lub `bool` z odpowiedzi. Większość urządzeń odpytuje co 30 s; Ciśnienie w instalacji i Temperatura zewnętrzna co 60 s, a Liczba startów palnika co 5 minut. Moduł odczytuje `/api/system/info` co 60 s. Zapisy to żądania HTTP POST z treścią JSON i tokenem dostępu w nagłówku `Authorization: Bearer`.

EMS-ESP 3.8.3 i nowsze odpowiada `429 Too Many Requests` na żądanie GET, które nadejdzie wcześniej niż 50 ms po poprzednim wywołaniu API. Szablon dlatego czeka 60 ms przed każdym GET i przy 429 jeden raz powtarza żądanie po 200 ms. Inny klient, który odpytuje API EMS-ESP w tym samym czasie (na przykład drugi system automatyki domowej), nadal może sporadycznie wywołać powtórzenie.

> [!NOTE]
> **Dlaczego REST, a nie Modbus.** EMS-ESP oferuje także Modbus TCP, ale przesunięcia jego rejestrów zmieniły się między stabilnymi wersjami 3.8.0 i 3.8.6, więc szablon Modbus po aktualizacji oprogramowania bramki po cichu odczytywałby inne wartości. REST API adresuje wartości po nazwie — encja o zmienionej nazwie kończy się widocznym błędem urządzenia.

## Rozwiązywanie problemów

### Błąd urządzenia „no value from the gateway”

Komunikat „no value from the gateway — this controller or unit does not report it; delete this device” oznacza, że podłączony kocioł lub regulator nie wysyła tej encji. Sprawdź stronę Devices w EMS-ESP albo `http://<gateway-ip>/api/boiler/entities` i `http://<gateway-ip>/api/thermostat/entities`, a następnie usuń urządzenie po imporcie — pozostałe urządzenia działają dalej.

### Błąd urządzenia 404

`404` z komunikatem typu `no 'xyz' in thermostat` oznacza, że EMS-ESP nie zna encji pod tą ścieżką — regulator lub kocioł jej nie ma albo oprogramowanie używa innej nazwy. `unknown device` oznacza, że EMS-ESP nie wykrył na magistrali EMS kotła ani regulatora tego typu.

### Tryb obiegu grzewczego zgłasza inny tekst

Błąd „hc1.mode reports '…'” pojawia się, gdy EMS-ESP zgłasza tekst trybu inny niż `off`, `manual` lub `auto`. Albo język EMS-ESP nie jest ustawiony na English (ustaw go w Settings → Application), albo regulator używa innej listy trybów (na przykład RC35 lub regulator Junkers) — wtedy usuń urządzenie Tryb obiegu grzewczego.

### Wybór Wyłączony kończy się błędem zapisu

Regulatory rodziny RC300 (RC300, RC310, RC100, HMC310, Rego 2000 / 3000) nie mają trybu wyłączenia. EMS-ESP odrzuca wartość, której nie ma na liście regulatora, więc urządzenie pokazuje błąd zapisu (`hc1.mode write: HTTP …`). Z tymi regulatorami używaj trybu Ręczny lub Auto.

### Zapis kończy się błędem 401

Brak tokenu dostępu lub jest on nieprawidłowy. Skopiuj go ponownie z Settings → Security → Manage Users → ikona klucza przy użytkowniku z uprawnieniami administratora i wpisz go do zmiennej `AccessToken` modułu. Token jest wyprowadzany z nazwy użytkownika i hasła superużytkownika w Settings → Security → Security Settings.

### Błąd 429

Inny klient odpytuje API EMS-ESP w tej samej chwili. Szablon już rozkłada swoje żądania w czasie i powtarza je jeden raz; jeśli błąd się powtarza, zmniejsz częstotliwość odpytywania drugiego klienta.

### Błąd lub ostrzeżenie modułu

- „EMS-ESP reports °F” — wyłącz Fahrenheit w Settings → Application.
- „Template written for EMS-ESP 3.8.6, gateway reports …” — bramka działa na oprogramowaniu spoza serii 3.8. Zaktualizuj EMS-ESP w Settings → Version.

### Bramka niedostępna

1. Sprawdź diodę LED bramki: 1 niebieskie mignięcie podczas uruchamiania = magistrala EMS jeszcze nie jest podłączona (sprawdź kabel i ustawienie EMS Tx Mode), 2 czerwone mignięcia = sieć wciąż się łączy (sprawdź Settings → Network; Wi-Fi musi być 2,4 GHz WPA2), światło ciągłe = dane EMS napływają.
2. Otwórz `http://<gateway-ip>/api/system/info` w przeglądarce — jeśli odpowiada, bramka jest dostępna.
3. Jeśli adres IP się zmienił, znajdź bramkę przez nazwę mDNS `http://ems-esp.local`, a następnie ustaw w routerze rezerwację DHCP.
4. Używaj `http://` — API EMS-ESP nie obsługuje HTTPS z certyfikatami samopodpisanymi.

## Dostępne urządzenia 11

Te urządzenia pojawią się w TapHome po imporcie.

Bramka EMS-ESP Moduł

Zmienne niestandardowe

`AccessToken` (string) Token dostępu EMS-ESP użytkownika z uprawnieniami administratora, wysyłany jako nagłówek Bearer przy każdym zapisie (tryb obiegu grzewczego, nastawy pomieszczenia i ciepłej wody); odczyt działa bez niego, więc pusty token oznacza integrację tylko do odczytu

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.

Odczyt (moduł)

```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
```

Tryb obiegu grzewczego Przełącznik wielowartościowy Odczyt i zapis

Tryb pracy obiegu grzewczego 1 — Wyłączony, Ręczny lub Auto; regulatory rodziny RC300 oferują tylko Ręczny i Auto, BC400 / UI800 / CR120 także Wyłączony; wymaga języka EMS-ESP English

enum json\_path

Wartości / Stany: Off · Manual · Auto

Odczyt stanu przełącznika

```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
```

Zapis stanu przełącznika

```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
```

Termostat pokojowy Termostat Odczyt i zapis

Aktualna i zadana temperatura pomieszczenia obiegu grzewczego 1 z regulatora; nastawa 0–30 °C, przechowywana przez EMS-ESP w krokach co 0,5 °C

numeric Jednostka: °C

Odczyt temperatury

```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);
```

Odczyt temperatury zadanej

```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);
```

Zapis temperatury zadanej

```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
```

Grzanie aktywne Kontakt reed Tylko do odczytu

Aktywne, gdy kocioł pracuje na ogrzewanie pomieszczeń

boolean

Odczyt

```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);
```

Podgrzewanie ciepłej wody aktywne Kontakt reed Tylko do odczytu

Aktywne, gdy kocioł podgrzewa ciepłą wodę użytkową

boolean

Odczyt

```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);
```

Temperatura zasilania Czujnik temperatury Tylko do odczytu

numeric Jednostka: °C

Odczyt temperatury

```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);
```

Docelowa temperatura zasilania Zmienna Tylko do odczytu

Temperatura zasilania, do której dąży kocioł (0–90 °C), ustawiana przez regulator; tylko do odczytu, więc TapHome nigdy nie nadpisuje regulatora

numeric Jednostka: °C

Odczyt

```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);
```

Moc palnika Zmienna Tylko do odczytu

Aktualna moc palnika w procentach; pokazuje także ostatni kod błędu zapisany przez kocioł jako komunikat informacyjny — niekoniecznie aktywna usterka

numeric Jednostka: %

Odczyt

```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);
```

Odczyt (moduł)

```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
```

Ciśnienie w instalacji Zmienna Tylko do odczytu

Ciśnienie wody w instalacji grzewczej w barach

numeric Jednostka: bar

Odczyt

```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);
```

Liczba startów palnika Zmienna Tylko do odczytu

Całkowita liczba startów palnika policzona przez kocioł

numeric

Odczyt

```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);
```

Ciepła woda użytkowa Termostat Odczyt i zapis

Aktualna i zadana temperatura ciepłej wody kotła; nastawa jest wysyłana w pełnych stopniach, a kocioł stosuje własne ograniczenia

numeric Jednostka: °C

Odczyt temperatury

```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);
```

Odczyt temperatury zadanej

```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);
```

Zapis temperatury zadanej

```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
```

Temperatura zewnętrzna Czujnik temperatury Tylko do odczytu

Temperatura zewnętrzna zgłaszana przez kocioł

numeric Jednostka: °C

Odczyt temperatury

```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);
```

**Połączenie:** Packet Parser → HTTP • Hostname: `ems-esp.local`

Możliwe ulepszenia (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

## Parametry importu

Te wartości podajesz podczas importu pliku XML.

| Pytanie w aplikacji               | Domyślnie           |
|-----------------------------------|---------------------|
| Gateway IP Address                | Podaj przy imporcie |
| EMS-ESP Access Token (admin user) | Podaj przy imporcie |

## Źródła

- 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

## Powiązana dokumentacja

- [Integracja Packet Parser](https://taphome.com/pl/compatibility/packet-parser-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/pl/docs/integration/packet-parser/)
- [Funkcje Packet parser](https://taphome.com/pl/docs/script/packet-parser/)
- [Funkcje parsowania](https://taphome.com/pl/docs/script/parsing-functions/)

