TapHome

EMS-ESP pompa ciepła (Bosch, Buderus, IVT)

Packet Parser → HTTP
Dodane przez
Ostatnia aktualizacja: 10. 2026

Wymaga zewnętrznej bramki

BBQKees Electronics Gateway E32 V2 (EMS-ESP 3.8.6 firmware) — strona produktu

To urządzenie obsługuje mDNS

Zamiast adresu IP możesz połączyć się z urządzeniem pod adresem:

ems-esp.local

Zastąp {MAC} adresem MAC urządzenia (wielkie litery, bez dwukropków).

TapHome obsługuje mDNS — użycie nazwy hosta jest bardziej niezawodne niż statyczny IP.

EMS-ESP pompa ciepła (Bosch, Buderus, IVT)

Szablon EMS-ESP Heat Pump łączy TapHome z pompą ciepła Bosch, Buderus lub IVT 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 pompy ciepł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 pompa ciepła występuje jako typ urządzenia boiler, a jej regulator jako typ urządzenia thermostat.

Szablon odczytuje temperaturę zewnętrzną, zasilania, powrotu, pomieszczenia i ciepłej wody, stan sprężarki, moc sprężarki i liczniki energii. Z tokenem dostępu ustawia także tryb pracy obiegu grzewczego 1 (w tym chłodzenie), nastawy temperatury pomieszczenia i chłodzenia oraz nastawę ciepłej wody.

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 Heat Pump — szablon społeczności (pobierz XML — bez logowania — i zaimportuj go jako nowy moduł).

Kompatybilne pompy ciepła i regulatory

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

Pompy ciepła objęte szablonem:

  • Bosch Compress 6000AW, Hybrid 3000-7000iAW
  • Buderus WLW166i, WLW176i, WLW196i, WSW196i
  • CS5800i, CS6800i
  • Enviline, SupraEco, Geo 5xx
  • IVT AirX i Geo z regulatorem Rego 2000 lub Rego 3000 — zgłoszone przez użytkowników EMS-ESP, nie ma ich na oficjalnej liście pomp ciepła obsługiwanych przez EMS-ESP

Bramka działa z wariantami magistrali EMS, EMS Plus (EMS+), EMS2 i Heatronic 3.

Które wartości wysyła dana jednostka, 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łączoną jednostkę. Ta sama lista jest dostępna pod http://<gateway-ip>/api/boiler/entities i http://<gateway-ip>/api/thermostat/entities.

Chłodzenie wymaga regulatora, który wysyła hc1.hpoperatingmode. EMS-ESP rejestruje tę encję dla rodziny RC300 (RC310, HMC310, Rego 2000 / 3000) i rodziny BC400; czy dany regulator rzeczywiście ją wysyła, nie jest udokumentowane. UI800 zgłasza ją na najwyższym poziomie termostatu (/api/thermostat/hpoperatingmode), a nie w obiegu grzewczym 1, dlatego urządzenie trybu pracy — a z nim chłodzenie — nie działa z UI800.

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 pompy ciepła na jeden z trzech sposobów:

Złącze w pompie ciepłaKabelZasilanie
Gniazdo serwisowe EMS (3,5 mm)kabel serwisowy EMS 150 cmz gniazda serwisowego
Gniazdo serwisowe EMS (3,5 mm)kabel serwisowy EMS 150 cmzasilacz zewnętrzny
Zaciski śrubowe magistrali EMSkabel 100 cm do zacisków śrubowych EMSzasilacz zewnętrzny (12 V DC lub 5 V USB-C)

Gniazdo serwisowe wchodzi w grę tylko wtedy, gdy pompa ciepła je ma. Bramki sprzedawane od lata 2025 przyjmują oba typy zasilaczy. BBQKees EMS Gateway Wiki pokazuje, jak podłączyć bramkę do konkretnego kotła lub pompy ciepł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.
  • Boolean Format, Enum Format i Language nie mają znaczenia. Szablon odczytuje klucze index i bool ze szczegółów encji EMS-ESP, które nie zależą od tych ustawień, i zapisuje angielskie teksty opcji, które EMS-ESP akceptuje w każdym języku.
  • Oprogramowanie 3.8 — moduł pokazuje ostrzeżenie, gdy bramka zgłasza wersję spoza serii 3.8. Nazwy encji używane przez szablon zmieniły się w wersji 3.7.0 (ww → zagnieżdżone dhw) i 3.7.2 (remoteseltemp → cooltemp); między 3.8.0 a 3.8.6 się nie zmieniły.
Token dostępu do zapisu

Odczyt nie wymaga uwierzytelniania. Zapis — tryb pracy, nastawy pomieszczenia, chłodzenia 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
ParametrOpis
IpAddressAdres IP bramki EMS-ESP
AccessTokenToken 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 pracy pompy ciepła — Wyłączony, Auto, Grzanie lub Chłodzenie dla obiegu grzewczego 1. W tym szablonie to jedyny sposób na przełączenie pompy ciepła na chłodzenie (zobacz ograniczenia regulatorów powyżej).
  • Termostat pokojowy — aktualna i zadana temperatura pomieszczenia obiegu grzewczego 1 zgłaszana przez regulator. Zakres nastawy to 0–30 °C w krokach co 0,5 °C.
  • Temperatura chłodzenia — nastawa temperatury chłodzenia obiegu grzewczego 1, odczyt i zapis od −1 do 30 °C w krokach co 0,5 °C.

Urządzenie termostatu pokojowego jest ograniczone do 0–30 °C. Temperatura chłodzenia jest wysyłana do EMS-ESP bez zmian, dlatego utrzymuj ją w zakresie od −1 do 30 °C.

Stan pompy ciepła
  • Praca sprężarki — co właśnie robi sprężarka: Wyłączona, Grzanie, Chłodzenie, Ciepła woda, Basen, Grzanie basenu, Odszranianie lub Alarm sprężarki. To stan tylko do odczytu; wybranie wartości w TapHome nie ma żadnego efektu.
  • Sprężarka pracuje — wskaźnik wł./wył., włączony, gdy sprężarka pracuje.
Temperatury
  • Temperatura zewnętrzna, Temperatura zasilania i Temperatura powrotu zgłaszane przez pompę ciepła, z rozdzielczością 0,1 °C.
Energia
  • Licznik energii elektrycznej — moc to aktualna moc elektryczna sprężarki (EMS-ESP zgłasza W, TapHome pokazuje kW); zużycie całkowite to całkowite zużycie energii elektrycznej pompy ciepła w kWh. Źródła nie podają, czy ta suma obejmuje elektryczną grzałkę wspomagającą, więc moc scałkowana w czasie nie musi się z nią zgadzać.
  • Dostarczone ciepło [kWh] (atrybut serwisowy licznika) — całkowita energia cieplna dostarczona przez pompę ciepła. To energia cieplna, a nie zużycie energii elektrycznej.
Ciepła woda użytkowa
  • Ciepła woda użytkowa — aktualna i zadana temperatura ciepłej wody pompy ciepła. Zakres nastawy urządzenia to 35–70 °C, nastawa jest wysyłana w pełnych stopniach, a pompa ciepła stosuje własne ograniczenia. Szablon używa wartości ciepłej wody pompy ciepła, a nie ustawień ciepłej wody regulatora (dhw.settemp, dhw.mode).
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. Urządzenia odpytują co 30 s (temperatura zewnętrzna i licznik energii co 60 s); 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.

Dlaczego REST, a nie Modbus. EMS-ESP oferuje także Modbus TCP (od wersji 3.7.0, tylko na płytkach z PSRAM) i MQTT. Przesunięcia rejestrów Modbus w EMS-ESP 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łączona pompa ciepła 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 jej nie ma (na przykład hc1.hpoperatingmode w UI800) albo oprogramowanie używa innej nazwy. unknown device oznacza, że EMS-ESP nie wykrył na magistrali EMS pompy ciepła ani regulatora tego typu.

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.
Błąd licznika dotyczący nrgtotal

Jednostka bez pomiaru ciepła nie wysyła nrgtotal. Licznik pokazuje wtedy błąd, a atrybut Dostarczone ciepło pozostaje pusty; moc i zużycie całkowite działają dalej.

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

EMS-ESP pompa ciepła 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 pracy, nastawy); 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.

EMS-ESP Heat Pump

Odczyt (moduł)
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/system/info");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/system/info");
END
IF r.IsSuccess
    SystemInfo := r.Content;
    IF PARSEJSON(SystemInfo, "$.settings.fahrenheit", true) = true
        ADDERROR(1, "EMS-ESP reports °F — switch Fahrenheit off in EMS-ESP Settings → Application");
    END
    IF !ISNULL(PARSEJSON(SystemInfo, "$.system.version", true))
        VAR ver := TOSTRING(PARSEJSON(SystemInfo, "$.system.version", true));
        IF INDEXOF(ver, "3.8.") != 0
            ADDWARNING(0, "Template written for EMS-ESP 3.8.6, gateway reports " + ver);
        END
    END
ELSE
    SystemInfo := "";
    ADDERROR(0, "system/info: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
END
Tryb pracy pompy ciepła Przełącznik wielowartościowy

Tryb pracy obiegu grzewczego 1 — Wyłączony, Auto, Grzanie lub Chłodzenie; jedyny sposób na przełączenie pompy ciepła na chłodzenie, dostępny tylko z regulatorami, które go wysyłają (nie UI800)

enum numeric
Wartości / Stany: Off · Auto · Heating · Cooling

Tryb pracy pompy ciepła

Odczyt stanu przełącznika
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/thermostat/hc1/hpoperatingmode");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/thermostat/hc1/hpoperatingmode");
END
IF r.IsSuccess
    VAR idx := PARSEJSON(r.Content, "$.index", true);
    IF ISNULL(idx)
        ADDERROR(0, "hpoperatingmode: no value from the gateway — this controller or unit does not report it; delete this device");
        RETURN(NaN);
    END
    RETURN(TODOUBLE(idx));
ELSE
    ADDERROR(0, "hpoperatingmode: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
    RETURN(NaN);
END
Zapis stanu przełącznika
VAR opttext := IF(Mu = 0, "off", IF(Mu = 1, "auto", IF(Mu = 2, "heating", "cooling")));
VAR body := "{\"value\":\"" + opttext + "\"}";
VAR r := SENDHTTPREQUEST("/api/thermostat/hc1/hpoperatingmode", "POST", body, "Content-Type: application/json", "Authorization: Bearer " + AccessToken);
IF r.IsSuccess = false
    IF r.StatusCode = 401
        ADDERROR(0, "hpoperatingmode: access token missing or wrong (EMS-ESP Settings → Security → Manage Users → key icon of an admin user)");
    ELSE
        ADDERROR(0, "hpoperatingmode write: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
    END
END
Termostat pokojowy Termostat

Aktualna i zadana temperatura pomieszczenia obiegu grzewczego 1 z regulatora pompy ciepła; nastawa 0–30 °C w krokach co 0,5 °C

numeric Jednostka: °C

Termostat pokojowy

Odczyt temperatury
IF CurrTempHc1 = ""
    RETURN(NaN);
END
VAR v := PARSEJSON(CurrTempHc1, "$.value", true);
IF ISNULL(v)
    ADDERROR(0, "currtemp: no value from the gateway — this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(TODOUBLE(v));
Odczyt (moduł)
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
    CurrTempHc1 := r.Content;
ELSE
    CurrTempHc1 := "";
    ADDERROR(0, "currtemp: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
END
SLEEP(60);
r := SENDHTTPREQUEST("/api/thermostat/hc1/seltemp");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/thermostat/hc1/seltemp");
END
IF r.IsSuccess
    SelTempHc1 := r.Content;
ELSE
    SelTempHc1 := "";
    ADDERROR(1, "seltemp: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
END
Odczyt temperatury zadanej
IF SelTempHc1 = ""
    RETURN(NaN);
END
VAR v := PARSEJSON(SelTempHc1, "$.value", true);
IF ISNULL(v)
    ADDERROR(1, "seltemp: no value from the gateway — this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(TODOUBLE(v));
Zapis temperatury zadanej
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(0, "seltemp: access token missing or wrong (EMS-ESP Settings → Security → Manage Users → key icon of an admin user)");
    ELSE
        ADDERROR(0, "seltemp write: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
    END
END
Temperatura chłodzenia Zmienna

Nastawa temperatury chłodzenia obiegu grzewczego 1, regulowana od −1 do 30 °C w krokach co 0,5 °C; dostępna tylko z regulatorami, które ją wysyłają

numeric Jednostka: °C

Temperatura chłodzenia

Odczyt
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/thermostat/hc1/cooltemp");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/thermostat/hc1/cooltemp");
END
IF r.IsSuccess
    VAR v := PARSEJSON(r.Content, "$.value", true);
    IF ISNULL(v)
        ADDERROR(0, "cooltemp: no value from the gateway — this controller or unit does not report it; delete this device");
        RETURN(NaN);
    END
    RETURN(TODOUBLE(v));
ELSE
    ADDERROR(0, "cooltemp: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
    RETURN(NaN);
END
Zapis
VAR body := "{\"value\":" + Va + "}";
VAR r := SENDHTTPREQUEST("/api/thermostat/hc1/cooltemp", "POST", body, "Content-Type: application/json", "Authorization: Bearer " + AccessToken);
IF r.IsSuccess = false
    IF r.StatusCode = 401
        ADDERROR(0, "cooltemp: access token missing or wrong (EMS-ESP Settings → Security → Manage Users → key icon of an admin user)");
    ELSE
        ADDERROR(0, "cooltemp write: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
    END
END
Praca sprężarki Przełącznik wielowartościowy Tylko do odczytu

Stan tylko do odczytu, co robi sprężarka — Wyłączona, Grzanie, Chłodzenie, Ciepła woda, Basen, Grzanie basenu, Odszranianie lub Alarm sprężarki

enum numeric
Wartości / Stany: Off · Heating · Cooling · Hot Water · Pool · Pool Heating · Defrost · Compressor Alarm

Praca sprężarki

Odczyt stanu przełącznika
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/hpactivity");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/hpactivity");
END
IF r.IsSuccess
    VAR idx := PARSEJSON(r.Content, "$.index", true);
    IF ISNULL(idx)
        ADDERROR(0, "hpactivity: no value from the gateway — this controller or unit does not report it; delete this device");
        RETURN(NaN);
    END
    RETURN(TODOUBLE(idx));
ELSE
    ADDERROR(0, "hpactivity: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
    RETURN(NaN);
END
Sprężarka pracuje Kontakt reed Tylko do odczytu
boolean

Sprężarka pracuje

Odczyt
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/hpcompon");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/hpcompon");
END
IF r.IsSuccess
    VAR b := PARSEJSON(r.Content, "$.bool", true);
    IF ISNULL(b)
        ADDERROR(0, "hpcompon: no value from the gateway — this controller or unit does not report it; delete this device");
        RETURN(NaN);
    END
    RETURN(b);
ELSE
    ADDERROR(0, "hpcompon: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
    RETURN(NaN);
END
Temperatura zewnętrzna Czujnik temperatury Tylko do odczytu
numeric Jednostka: °C

Temperatura zewnętrzna

Odczyt temperatury
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/outdoortemp");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/outdoortemp");
END
IF r.IsSuccess
    VAR v := PARSEJSON(r.Content, "$.value", true);
    IF ISNULL(v)
        ADDERROR(0, "outdoortemp: no value from the gateway — this controller or unit does not report it; delete this device");
        RETURN(NaN);
    END
    RETURN(TODOUBLE(v));
ELSE
    ADDERROR(0, "outdoortemp: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
    RETURN(NaN);
END
Temperatura zasilania Czujnik temperatury Tylko do odczytu
numeric Jednostka: °C

Temperatura zasilania

Odczyt temperatury
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/curflowtemp");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/curflowtemp");
END
IF r.IsSuccess
    VAR v := PARSEJSON(r.Content, "$.value", true);
    IF ISNULL(v)
        ADDERROR(0, "curflowtemp: no value from the gateway — this controller or unit does not report it; delete this device");
        RETURN(NaN);
    END
    RETURN(TODOUBLE(v));
ELSE
    ADDERROR(0, "curflowtemp: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
    RETURN(NaN);
END
Temperatura powrotu Czujnik temperatury Tylko do odczytu
numeric Jednostka: °C

Temperatura powrotu

Odczyt temperatury
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/rettemp");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/rettemp");
END
IF r.IsSuccess
    VAR v := PARSEJSON(r.Content, "$.value", true);
    IF ISNULL(v)
        ADDERROR(0, "rettemp: no value from the gateway — this controller or unit does not report it; delete this device");
        RETURN(NaN);
    END
    RETURN(TODOUBLE(v));
ELSE
    ADDERROR(0, "rettemp: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
    RETURN(NaN);
END
Licznik energii elektrycznej Licznik energii Tylko do odczytu

Aktualna moc elektryczna sprężarki (kW) i całkowite zużycie energii elektrycznej pompy ciepła (kWh)

numeric Jednostka: W / kWh
Atrybuty serwisowe
Dostarczone ciepło [kWh]Całkowita energia cieplna dostarczona przez pompę ciepła — moc cieplna, a nie zużycie energii elektrycznej

Licznik energii elektrycznej

Odczyt całkowitego zużycia
IF NrgConsTotal = ""
    RETURN(NaN);
END
VAR v := PARSEJSON(NrgConsTotal, "$.value", true);
IF ISNULL(v)
    ADDERROR(1, "nrgconstotal: no value from the gateway — this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(TODOUBLE(v));
Odczyt zapotrzebowania
IF HpCurrPower = ""
    RETURN(NaN);
END
VAR v := PARSEJSON(HpCurrPower, "$.value", true);
IF ISNULL(v)
    ADDERROR(0, "hpcurrpower: no value from the gateway — this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(TODOUBLE(v) / 1000);
Odczyt (moduł)
SLEEP(60);
VAR r := SENDHTTPREQUEST("/api/boiler/hpcurrpower");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/hpcurrpower");
END
IF r.IsSuccess
    HpCurrPower := r.Content;
ELSE
    HpCurrPower := "";
    ADDERROR(0, "hpcurrpower: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
END
SLEEP(60);
r := SENDHTTPREQUEST("/api/boiler/nrgconstotal");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/nrgconstotal");
END
IF r.IsSuccess
    NrgConsTotal := r.Content;
ELSE
    NrgConsTotal := "";
    ADDERROR(1, "nrgconstotal: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
END
SLEEP(60);
r := SENDHTTPREQUEST("/api/boiler/nrgtotal");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/nrgtotal");
END
IF r.IsSuccess
    NrgTotal := r.Content;
    IF ISNULL(PARSEJSON(NrgTotal, "$.value", true))
        ADDERROR(3, "nrgtotal: no value from the gateway — this unit does not report heat delivered; the attribute stays empty");
    END
ELSE
    NrgTotal := "";
    ADDERROR(2, "nrgtotal: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
END
Atrybuty serwisowe
Heat delivered [kWh]
IF NrgTotal = "" RETURN(NaN); END VAR v := PARSEJSON(NrgTotal, "$.value", true); IF ISNULL(v) RETURN(NaN); END RETURN(TODOUBLE(v));
Ciepła woda użytkowa Termostat

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

numeric Jednostka: °C

Ciepła woda użytkowa

Odczyt temperatury
IF DhwCurTemp = ""
    RETURN(NaN);
END
VAR v := PARSEJSON(DhwCurTemp, "$.value", true);
IF ISNULL(v)
    ADDERROR(0, "dhw/curtemp: no value from the gateway — this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(TODOUBLE(v));
Odczyt (moduł)
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
    DhwCurTemp := r.Content;
ELSE
    DhwCurTemp := "";
    ADDERROR(0, "dhw/curtemp: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
END
SLEEP(60);
r := SENDHTTPREQUEST("/api/boiler/dhw/seltemp");
IF r.StatusCode = 429
    SLEEP(200);
    r := SENDHTTPREQUEST("/api/boiler/dhw/seltemp");
END
IF r.IsSuccess
    DhwSelTemp := r.Content;
ELSE
    DhwSelTemp := "";
    ADDERROR(1, "dhw/seltemp: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
END
Odczyt temperatury zadanej
IF DhwSelTemp = ""
    RETURN(NaN);
END
VAR v := PARSEJSON(DhwSelTemp, "$.value", true);
IF ISNULL(v)
    ADDERROR(1, "dhw/seltemp: no value from the gateway — this controller or unit does not report it; delete this device");
    RETURN(NaN);
END
RETURN(TODOUBLE(v));
Zapis temperatury zadanej
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(0, "dhw/seltemp: access token missing or wrong (EMS-ESP Settings → Security → Manage Users → key icon of an admin user)");
    ELSE
        ADDERROR(0, "dhw/seltemp write: " + r.StatusCode + IF(ISNULL(PARSEJSON(r.Content, "$.message", true)), "", " — " + PARSEJSON(r.Content, "$.message", true)));
    END
END
Połączenie: Packet Parser → HTTP • Hostname: ems-esp.local
Możliwe ulepszenia (15)
  • Heat pump operating mode on UI800 (thermostat top level) — UI800 reports hpoperatingmode at the thermostat top level instead of under hc1, so the template's operating mode device (and with it cooling) does not work with UI800
  • 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
  • Heating circuit mode — Enum, writable: manual / auto on RC300, RC100, Rego 3000 and HMC310; off / manual / auto on BC400, UI800 and CR120
  • Heat pump cooling enabled — Boolean, writable — enables cooling on the heating circuit
  • Summer / winter switchover — winter / auto / summer, RC100 and RC300
  • Further heating circuit settings — Comfort / eco / manual setpoints, summer threshold, flow temperature limits, heating curve design temperature, offset, room influence and control mode (RC100 / RC300); 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 heat pump (boiler) DHW entities instead
  • 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 instead of Modbus register offsets

Źródła

Znalazłeś problem z tym szablonem urządzenia?

Napisz nam, co nie działa, czego brakuje lub jak powinien zachowywać się szablon. Twoja opinia pomaga nam utrzymać katalog dokładnym.

Społeczność — niezweryfikowane

Chcesz tego użyć w swoim TapHome Core?

Otwórz ten szablon w portalu klienta, aby zastosować go w swoim domu, lub zaproponuj modyfikację i wyślij ją z powrotem do katalogu.

Otwórz w portalu