TapHome

EMS-ESP pompă de căldură (Bosch, Buderus, IVT)

Packet Parser → HTTP
Trimis de
Ultima actualizare: 10. 2026

Necesită gateway extern

BBQKees Electronics Gateway E32 V2 (EMS-ESP 3.8.6 firmware) — pagina produsului

Acest dispozitiv acceptă mDNS

În loc să folosiți o adresă IP, puteți accesa dispozitivul la:

ems-esp.local

Înlocuiți {MAC} cu adresa MAC a dispozitivului dvs. (majuscule, fără două puncte).

TapHome acceptă mDNS — folosirea unui nume de gazdă este mai fiabilă decât un IP static.

EMS-ESP pompă de căldură (Bosch, Buderus, IVT)

Șablonul EMS-ESP Heat Pump conectează TapHome la o pompă de căldură Bosch, Buderus sau IVT printr-un gateway EMS-ESP — un BBQKees Electronics Gateway E32 V2 care rulează firmware-ul open source EMS-ESP și se conectează la magistrala EMS a pompei de căldură. TapHome comunică cu gateway-ul prin API-ul său REST HTTP local (port 80, JSON); nu este nevoie de conexiune la cloud. În EMS-ESP pompa de căldură apare ca tip de dispozitiv boiler, iar regulatorul ei ca tip de dispozitiv thermostat.

Șablonul citește temperatura exterioară, de tur, de retur, a camerei și a apei calde, starea compresorului, puterea compresorului și contoarele de energie. Cu un token de acces setează și modul de funcționare al circuitului de încălzire 1 (inclusiv răcirea), consemnele pentru cameră și răcire și consemnul apei calde.

Șablon al comunității — încă netestat cu TapHome. Șablonul a fost generat în portalul TapHome și scris pentru EMS-ESP 3.8.6; nu a fost încă verificat pe o instalație reală. Îl găsiți în portalul TapHome: EMS-ESP Heat Pump — șablon al comunității (descărcați fișierul XML — fără autentificare — și importați-l ca modul nou).

Pompe de căldură și regulatoare compatibile

Două lucruri decid dacă o pompă de căldură funcționează cu acest șablon: EMS-ESP trebuie să suporte pompa de căldură, iar pompa de căldură și regulatorul ei trebuie să trimită valorile pe care șablonul le citește.

Pompe de căldură acoperite de șablon:

  • Bosch Compress 6000AW, Hybrid 3000-7000iAW
  • Buderus WLW166i, WLW176i, WLW196i, WSW196i
  • CS5800i, CS6800i
  • Enviline, SupraEco, Geo 5xx
  • IVT AirX și Geo cu regulator Rego 2000 sau Rego 3000 — raportate de utilizatorii EMS-ESP, nu figurează pe lista oficială a pompelor de căldură suportate de EMS-ESP

Gateway-ul funcționează cu variantele de magistrală EMS, EMS Plus (EMS+), EMS2 și Heatronic 3.

Ce valori trimite o anumită unitate nu este documentat pe modele. Pagina Devices din interfața web EMS-ESP afișează doar entitățile care au o valoare; o entitate care există în EMS-ESP, dar nu are valoare, este suportată de firmware, nu de unitatea conectată. Aceeași listă este disponibilă la http://<gateway-ip>/api/boiler/entities și http://<gateway-ip>/api/thermostat/entities.

Răcirea necesită un regulator care trimite hc1.hpoperatingmode. EMS-ESP înregistrează această entitate pentru familia RC300 (RC310, HMC310, Rego 2000 / 3000) și familia BC400; dacă un anumit regulator o trimite cu adevărat nu este documentat. UI800 o raportează la nivelul superior al termostatului (/api/thermostat/hpoperatingmode) în loc de circuitul de încălzire 1, așa că dispozitivul pentru modul de funcționare — și odată cu el răcirea — nu funcționează cu UI800.

Conexiunea hardware

Kitul BBQKees Gateway E32 V2 KIT conține gateway-ul, un cablu de service EMS de 150 cm, un cablu de 100 cm pentru bornele cu șurub EMS, un adaptor pentru portul de service EMS, o sursă de alimentare (12 V DC cu mufă sau 5 V USB-C, în funcție de lotul de producție) și un cablu JST ZH pentru senzori de temperatură DS18B20 proprii. Gateway-ul se conectează la pompa de căldură în unul din trei moduri:

Conexiune pe pompa de căldurăCabluAlimentare
Mufă de service EMS (3,5 mm)cablu de service EMS de 150 cmdin mufa de service
Mufă de service EMS (3,5 mm)cablu de service EMS de 150 cmsursă de alimentare externă
Bornele cu șurub ale magistralei EMScablu de 100 cm pentru bornele cu șurub EMSsursă de alimentare externă (12 V DC sau 5 V USB-C)

Mufa de service este o opțiune doar dacă pompa de căldură are una. Gateway-urile vândute din vara 2025 acceptă ambele tipuri de surse de alimentare. BBQKees EMS Gateway Wiki arată cum se conectează gateway-ul la un anumit cazan sau o anumită pompă de căldură.

  • Rețea: Ethernet (RJ45) sau Wi-Fi. EMS-ESP se conectează doar la rețele Wi-Fi de 2,4 GHz cu WPA2, nu la 5 GHz.
  • Firmware: EMS-ESP. Gateway E32 V2 (vândut din ianuarie 2024) are PSRAM și folosește varianta de firmware ESP32-16MB+. Firmware-ul se actualizează în interfața web EMS-ESP la Settings → Version.

Configurare

Prima configurare a EMS-ESP
  1. La prima pornire EMS-ESP deschide un punct de acces Wi-Fi ems-esp (parola WPA ems-esp-neo). Un gateway conectat prin Ethernet este accesibil la adresa IP pe care i-a atribuit-o routerul.
  2. Autentificați-vă cu utilizatorul implicit admin / admin și schimbați parola.
  3. La Settings → Network conectați gateway-ul la rețeaua casei (Wi-Fi sau Ethernet).
  4. În router rezervați o adresă IP fixă pentru gateway (rezervare DHCP) — șablonul adresează gateway-ul prin adresa lui IP.
Setările EMS-ESP care contează
  • Temperaturi în °C — lăsați dezactivată opțiunea „Convert temperature values to Fahrenheit” la Settings → Application. Modulul verifică acest lucru la fiecare 60 s și afișează o eroare când EMS-ESP raportează °F.
  • Boolean Format, Enum Format și Language nu contează. Șablonul citește cheile index și bool din detaliul entității EMS-ESP, care nu depind de aceste setări, și scrie textele în engleză ale opțiunilor, pe care EMS-ESP le acceptă în orice limbă.
  • Firmware 3.8 — modulul afișează un avertisment când gateway-ul raportează o versiune din afara seriei 3.8. Numele entităților folosite de șablon s-au schimbat în 3.7.0 (ww → dhw imbricat) și 3.7.2 (remoteseltemp → cooltemp); între 3.8.0 și 3.8.6 nu s-au schimbat.
Token de acces pentru scriere

Citirea nu necesită autentificare. Scrierea — modul de funcționare, consemnele pentru cameră, răcire și apa caldă — necesită tokenul de acces EMS-ESP al unui utilizator cu drepturi de administrator:

  1. Deschideți interfața web EMS-ESP → Settings → Security → Manage Users.
  2. Faceți clic pe pictograma cheie a unui utilizator cu drepturi de administrator și copiați tokenul. Tokenul nu are dată de expirare.
  3. La importul șablonului, lipiți tokenul în parametrul de import AccessToken.

Fără token integrarea este doar pentru citire și fiecare scriere se termină cu eroarea 401. Nu activați în schimb în EMS-ESP opțiunea „Bypass Access Token authorization on API calls” — aceasta face API-ul deschis, iar documentația EMS-ESP nu o recomandă.

Parametri de import
ParametruDescriere
IpAddressAdresa IP a gateway-ului EMS-ESP
AccessTokenTokenul de acces EMS-ESP al unui utilizator administrator — necesar doar pentru scriere; lăsați-l gol pentru o integrare doar pentru citire

Funcțiile dispozitivului

Circuitul de încălzire 1
  • Modul de funcționare al pompei de căldură — Oprit, Auto, Încălzire sau Răcire pentru circuitul de încălzire 1. În acest șablon este singura cale de a trece pompa de căldură pe răcire (vedeți limitele regulatoarelor mai sus).
  • Termostat de cameră — temperatura actuală și cea selectată a camerei pentru circuitul de încălzire 1, așa cum o raportează regulatorul. Intervalul consemnului este 0–30 °C în pași de 0,5 °C.
  • Temperatura de răcire — setarea temperaturii de răcire a circuitului de încălzire 1, citire și scriere de la −1 la 30 °C în pași de 0,5 °C.

Dispozitivul termostat de cameră este limitat la 0–30 °C. Temperatura de răcire este trimisă către EMS-ESP nemodificată, așa că păstrați-o între −1 și 30 °C.

Starea pompei de căldură
  • Activitatea compresorului — ce face compresorul în acest moment: Oprit, Încălzire, Răcire, Apă caldă, Piscină, Încălzire piscină, Dezghețare sau Alarmă compresor. Este o stare doar pentru citire; selectarea unei valori în TapHome nu are efect.
  • Compresor în funcțiune — indicator pornit/oprit, pornit cât timp compresorul funcționează.
Temperaturi
  • Temperatura exterioară, Temperatura de tur și Temperatura de retur, așa cum le raportează pompa de căldură, cu o rezoluție de 0,1 °C.
Energie
  • Contor de energie electrică — puterea este puterea electrică actuală a compresorului (EMS-ESP raportează W, TapHome afișează kW); consumul total este consumul total de energie electrică al pompei de căldură în kWh. Sursele nu spun dacă acest total include rezistența electrică suplimentară, așa că puterea integrată în timp nu trebuie să coincidă cu el.
  • Căldură livrată [kWh] (atribut de service al contorului) — energia termică totală livrată de pompa de căldură. Este energie termică, nu consum de electricitate.
Apă caldă menajeră
  • Apă caldă menajeră — temperatura actuală și cea selectată a apei calde a pompei de căldură. Intervalul consemnului dispozitivului este 35–70 °C, consemnul se trimite în grade întregi, iar pompa de căldură aplică propriile limite. Șablonul folosește valorile apei calde ale pompei de căldură, nu setările apei calde ale regulatorului (dhw.settemp, dhw.mode).
Cum comunică șablonul cu EMS-ESP

Fiecare dispozitiv își citește propriile valori cu o cerere HTTP GET pe entitate la /api/<device>/[hc1/|dhw/]<entity> și ia cheia value, index sau bool din răspuns. Dispozitivele interoghează la fiecare 30 s (temperatura exterioară și contorul la fiecare 60 s); modulul citește /api/system/info la fiecare 60 s. Scrierile sunt cereri HTTP POST cu un corp JSON și tokenul de acces în antetul Authorization: Bearer.

EMS-ESP 3.8.3 și mai nou răspunde 429 Too Many Requests la o cerere GET care sosește la mai puțin de 50 ms după apelul API anterior. Prin urmare, șablonul așteaptă 60 ms înainte de fiecare GET și, la 429, repetă cererea o dată după 200 ms. Un alt client care interoghează API-ul EMS-ESP în același timp (de exemplu, un al doilea sistem de automatizare a locuinței) poate totuși provoca ocazional o repetare.

De ce REST și nu Modbus. EMS-ESP oferă și Modbus TCP (din 3.7.0, doar pe plăcile cu PSRAM) și MQTT. Decalajele registrelor Modbus din EMS-ESP s-au schimbat între versiunile stabile 3.8.0 și 3.8.6, așa că un șablon Modbus ar citi pe nesimțite alte valori după o actualizare de firmware a gateway-ului. API-ul REST adresează valorile după nume — o entitate redenumită se termină cu o eroare vizibilă a dispozitivului.

Depanare

Eroare de dispozitiv „no value from the gateway”

Mesajul „no value from the gateway — this controller or unit does not report it; delete this device” înseamnă că pompa de căldură sau regulatorul conectat nu trimite această entitate. Verificați pagina Devices din EMS-ESP sau http://<gateway-ip>/api/boiler/entities și http://<gateway-ip>/api/thermostat/entities, apoi ștergeți dispozitivul după import — celelalte dispozitive continuă să funcționeze.

Eroare de dispozitiv 404

Un 404 cu un mesaj de tipul no 'xyz' in thermostat înseamnă că EMS-ESP nu cunoaște entitatea pe această cale — regulatorul nu o are (de exemplu hc1.hpoperatingmode pe un UI800) sau firmware-ul folosește alt nume. unknown device înseamnă că EMS-ESP nu a detectat pe magistrala EMS o pompă de căldură sau un regulator de acel tip.

Scrierea se termină cu eroarea 401

Tokenul de acces lipsește sau este greșit. Copiați-l din nou din Settings → Security → Manage Users → pictograma cheie a unui utilizator administrator și introduceți-l în variabila AccessToken a modulului. Tokenul este derivat din numele de utilizator și parola super utilizatorului din Settings → Security → Security Settings.

Eroarea 429

Un alt client interoghează API-ul EMS-ESP în același moment. Șablonul își distribuie deja cererile în timp și le repetă o dată; dacă eroarea se repetă, reduceți frecvența de interogare a celuilalt client.

Eroare sau avertisment al modulului
  • „EMS-ESP reports °F” — dezactivați Fahrenheit la Settings → Application.
  • „Template written for EMS-ESP 3.8.6, gateway reports …” — gateway-ul rulează un firmware din afara seriei 3.8. Actualizați EMS-ESP la Settings → Version.
Eroare a contorului legată de nrgtotal

O unitate fără măsurarea căldurii nu trimite nrgtotal. Contorul afișează atunci o eroare, iar atributul Căldură livrată rămâne gol; puterea și consumul total continuă să funcționeze.

Gateway-ul nu este accesibil
  1. Verificați LED-ul gateway-ului: 1 clipire albastră la pornire = magistrala EMS nu este încă conectată (verificați cablul și setarea EMS Tx Mode), 2 clipiri roșii = rețeaua încă se conectează (verificați Settings → Network; Wi-Fi trebuie să fie 2,4 GHz WPA2), lumină continuă = datele EMS sosesc.
  2. Deschideți http://<gateway-ip>/api/system/info într-un browser — dacă răspunde, gateway-ul este accesibil.
  3. Dacă adresa IP s-a schimbat, găsiți gateway-ul prin numele mDNS http://ems-esp.local, apoi setați o rezervare DHCP în router.
  4. Folosiți http:// — API-ul EMS-ESP nu suportă HTTPS cu certificate autosemnate.

Dispozitive disponibile

EMS-ESP pompă de căldură Modul
Variabile personalizate
AccessToken (string)Token de acces EMS-ESP al unui utilizator cu drepturi de administrator, trimis ca antet Bearer la fiecare scriere (mod de funcționare, consemne); citirea funcționează fără el, deci un token gol înseamnă o integrare doar pentru citire
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

Citire (modul)
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
Modul de funcționare al pompei de căldură Comutator cu mai multe valori

Modul de funcționare al circuitului de încălzire 1 — Oprit, Auto, Încălzire sau Răcire; singura cale de a trece pompa de căldură pe răcire, disponibilă doar cu regulatoarele care îl trimit (nu UI800)

enum numeric
Valori / Stări: Off · Auto · Heating · Cooling

Modul de funcționare al pompei de căldură

Citirea stării comutatorului
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
Scrierea stării comutatorului
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 de cameră Termostat

Temperatura actuală și cea selectată a camerei pentru circuitul de încălzire 1, de la regulatorul pompei de căldură; consemn 0–30 °C în pași de 0,5 °C

numeric Unitate: °C

Termostat de cameră

Citirea temperaturii
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));
Citire (modul)
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
Citirea temperaturii dorite
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));
Scrierea temperaturii dorite
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 de răcire Variabilă

Setarea temperaturii de răcire a circuitului de încălzire 1, reglabilă de la −1 la 30 °C în pași de 0,5 °C; disponibilă doar cu regulatoarele care o trimit

numeric Unitate: °C

Temperatura de răcire

Citire
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
Scriere
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
Activitatea compresorului Comutator cu mai multe valori Doar citire

Stare doar pentru citire a ceea ce face compresorul — Oprit, Încălzire, Răcire, Apă caldă, Piscină, Încălzire piscină, Dezghețare sau Alarmă compresor

enum numeric
Valori / Stări: Off · Heating · Cooling · Hot Water · Pool · Pool Heating · Defrost · Compressor Alarm

Activitatea compresorului

Citirea stării comutatorului
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
Compresor în funcțiune Contact reed Doar citire
boolean

Compresor în funcțiune

Citire
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 exterioară Senzor de temperatură Doar citire
numeric Unitate: °C

Temperatura exterioară

Citirea temperaturii
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 de tur Senzor de temperatură Doar citire
numeric Unitate: °C

Temperatura de tur

Citirea temperaturii
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 de retur Senzor de temperatură Doar citire
numeric Unitate: °C

Temperatura de retur

Citirea temperaturii
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
Contor de energie electrică Contor electric Doar citire

Puterea electrică actuală a compresorului (kW) și consumul total de energie electrică al pompei de căldură (kWh)

numeric Unitate: W / kWh
Atribute de service
Căldură livrată [kWh]Energia termică totală livrată de pompa de căldură — putere termică, nu consum de electricitate

Contor de energie electrică

Citirea consumului total
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));
Citirea cererii
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);
Citire (modul)
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
Atribute de service
Heat delivered [kWh]
IF NrgTotal = "" RETURN(NaN); END VAR v := PARSEJSON(NrgTotal, "$.value", true); IF ISNULL(v) RETURN(NaN); END RETURN(TODOUBLE(v));
Apă caldă menajeră Termostat

Temperatura actuală și cea selectată a apei calde a pompei de căldură; consemnul se trimite în grade întregi, iar pompa de căldură aplică propriile limite

numeric Unitate: °C

Apă caldă menajeră

Citirea temperaturii
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));
Citire (modul)
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
Citirea temperaturii dorite
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));
Scrierea temperaturii dorite
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
Conexiune: Packet Parser → HTTP • Nume gazdă: ems-esp.local
Îmbunătățiri posibile (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

Surse

Ați găsit o problemă la acest șablon de dispozitiv?

Spuneți-ne ce nu funcționează, ce lipsește sau cum ar trebui să se comporte șablonul. Feedbackul dvs. ne ajută să păstrăm catalogul corect.

Comunitate — neverificat

Doriți să folosiți acest șablon în TapHome Core?

Deschideți acest șablon în Customer Portal pentru a-l aplica într-una dintre locuințele dvs. sau pentru a propune o îmbunătățire și a o trimite înapoi în catalog.

Deschideți în portal