TapHome

EMS-ESP pompa di calore (Bosch, Buderus, IVT)

Packet Parser → HTTP
Inviato da
Ultimo aggiornamento: 10. 2026

Richiede gateway esterno

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

Questo dispositivo supporta mDNS

Invece di un indirizzo IP, puoi raggiungere il dispositivo a:

ems-esp.local

Sostituisci {MAC} con l'indirizzo MAC del dispositivo (maiuscolo, senza due punti).

TapHome supporta mDNS — usare un hostname è più affidabile di un IP statico.

EMS-ESP pompa di calore (Bosch, Buderus, IVT)

Il template EMS-ESP Heat Pump collega TapHome a una pompa di calore Bosch, Buderus o IVT tramite un gateway EMS-ESP — un BBQKees Electronics Gateway E32 V2 che esegue il firmware open source EMS-ESP e si collega al bus EMS della pompa di calore. TapHome comunica con il gateway tramite la sua API REST HTTP locale (porta 80, JSON); non serve alcuna connessione al cloud. In EMS-ESP la pompa di calore compare come tipo di dispositivo boiler e il suo regolatore come tipo di dispositivo thermostat.

Il template legge la temperatura esterna, di mandata, di ritorno, ambiente e dell’acqua calda, lo stato del compressore, la potenza del compressore e i contatori di energia. Con un token di accesso imposta anche la modalità operativa del circuito di riscaldamento 1 (raffrescamento incluso), i setpoint ambiente e di raffrescamento e il setpoint dell’acqua calda.

Template della community — non ancora testato con TapHome. Il template è stato generato nel portale TapHome e scritto per EMS-ESP 3.8.6; non è ancora stato verificato su un’installazione reale. Scaricalo dal portale TapHome: EMS-ESP Heat Pump — template della community (scarica l’XML — senza accesso — e importalo come nuovo modulo).

Pompe di calore e regolatori compatibili

Due cose decidono se una pompa di calore funziona con questo template: EMS-ESP deve supportare la pompa di calore, e la pompa di calore e il suo regolatore devono inviare i valori che il template legge.

Pompe di calore coperte dal template:

  • Bosch Compress 6000AW, Hybrid 3000-7000iAW
  • Buderus WLW166i, WLW176i, WLW196i, WSW196i
  • CS5800i, CS6800i
  • Enviline, SupraEco, Geo 5xx
  • IVT AirX e Geo con regolatore Rego 2000 o Rego 3000 — segnalate dagli utenti di EMS-ESP, non presenti nell’elenco ufficiale delle pompe di calore supportate da EMS-ESP

Il gateway funziona con le varianti di bus EMS, EMS Plus (EMS+), EMS2 e Heatronic 3.

Quali valori invia una determinata unità non è documentato per modello. La pagina Devices dell’interfaccia web di EMS-ESP mostra solo le entità che hanno un valore; un’entità che esiste in EMS-ESP ma non ha valore è supportata dal firmware, non dall’unità collegata. Lo stesso elenco è disponibile su http://<gateway-ip>/api/boiler/entities e http://<gateway-ip>/api/thermostat/entities.

Il raffrescamento richiede un regolatore che invii hc1.hpoperatingmode. EMS-ESP registra questa entità per la famiglia RC300 (RC310, HMC310, Rego 2000 / 3000) e per la famiglia BC400; se un regolatore specifico la invii davvero non è documentato. L’UI800 la riporta al livello superiore del termostato (/api/thermostat/hpoperatingmode) anziché sotto il circuito di riscaldamento 1, quindi il dispositivo della modalità operativa — e con esso il raffrescamento — non funziona con l’UI800.

Collegamento hardware

Il BBQKees Gateway E32 V2 KIT contiene il gateway, un cavo di servizio EMS da 150 cm, un cavo da 100 cm per i morsetti a vite EMS, un adattatore per la porta di servizio EMS, un alimentatore (12 V DC con jack o 5 V USB-C, a seconda del lotto di produzione) e un cavo JST ZH per sensori di temperatura DS18B20 propri. Il gateway si collega alla pompa di calore in uno di tre modi:

Collegamento sulla pompa di caloreCavoAlimentazione
Presa di servizio EMS (3,5 mm)cavo di servizio EMS da 150 cmdalla presa di servizio
Presa di servizio EMS (3,5 mm)cavo di servizio EMS da 150 cmalimentatore esterno
Morsetti a vite del bus EMScavo da 100 cm per morsetti a vite EMSalimentatore esterno (12 V DC o 5 V USB-C)

La presa di servizio è un’opzione solo se la pompa di calore ne ha una. I gateway venduti dall’estate 2025 accettano entrambi i tipi di alimentatore. La BBQKees EMS Gateway Wiki mostra come collegare il gateway a una caldaia o pompa di calore specifica.

  • Rete: Ethernet (RJ45) o Wi-Fi. EMS-ESP si collega solo a reti Wi-Fi a 2,4 GHz con WPA2, non a 5 GHz.
  • Firmware: EMS-ESP. Il Gateway E32 V2 (in vendita da gennaio 2024) ha la PSRAM e usa la variante di firmware ESP32-16MB+. Il firmware si aggiorna nell’interfaccia web di EMS-ESP in Settings → Version.

Configurazione

Prima configurazione di EMS-ESP
  1. Al primo avvio EMS-ESP apre un access point Wi-Fi ems-esp (password WPA ems-esp-neo). Un gateway collegato via Ethernet è raggiungibile all’indirizzo IP assegnatogli dal router.
  2. Accedi con l’utente predefinito admin / admin e cambia la password.
  3. In Settings → Network collega il gateway alla rete di casa (Wi-Fi o Ethernet).
  4. Nel router riserva un indirizzo IP fisso per il gateway (prenotazione DHCP) — il template indirizza il gateway tramite il suo indirizzo IP.
Impostazioni di EMS-ESP che contano
  • Temperature in °C — lascia disattivata l’opzione „Convert temperature values to Fahrenheit” in Settings → Application. Il modulo lo controlla ogni 60 s e mostra un errore quando EMS-ESP riporta °F.
  • Boolean Format, Enum Format e Language non contano. Il template legge le chiavi index e bool del dettaglio dell’entità EMS-ESP, che non dipendono da queste impostazioni, e scrive i testi inglesi delle opzioni, che EMS-ESP accetta in ogni lingua.
  • Firmware 3.8 — il modulo mostra un avviso quando il gateway riporta una versione al di fuori della serie 3.8. I nomi delle entità usati dal template sono cambiati nella 3.7.0 (ww → dhw annidato) e nella 3.7.2 (remoteseltemp → cooltemp); tra la 3.8.0 e la 3.8.6 non sono cambiati.
Token di accesso per le scritture

La lettura non richiede autenticazione. La scrittura — modalità operativa, setpoint ambiente, di raffrescamento e dell’acqua calda — richiede il token di accesso EMS-ESP di un utente con diritti di amministratore:

  1. Apri l’interfaccia web di EMS-ESP → Settings → Security → Manage Users.
  2. Fai clic sull’icona della chiave di un utente con diritti di amministratore e copia il token. Il token non ha data di scadenza.
  3. Incolla il token nel parametro di importazione AccessToken durante l’importazione del template.

Senza token l’integrazione è di sola lettura e ogni scrittura termina con l’errore 401. Non attivare invece „Bypass Access Token authorization on API calls” in EMS-ESP — rende l’API aperta e la documentazione di EMS-ESP lo sconsiglia.

Parametri di importazione
ParametroDescrizione
IpAddressIndirizzo IP del gateway EMS-ESP
AccessTokenToken di accesso EMS-ESP di un utente amministratore — necessario solo per le scritture; lascialo vuoto per un’integrazione di sola lettura

Funzionalità dei dispositivi

Circuito di riscaldamento 1
  • Modalità operativa della pompa di calore — Spento, Auto, Riscaldamento o Raffrescamento per il circuito di riscaldamento 1. In questo template è l’unico modo per passare la pompa di calore al raffrescamento (vedi i limiti dei regolatori sopra).
  • Termostato ambiente — temperatura ambiente attuale e impostata del circuito di riscaldamento 1 come riportata dal regolatore. L’intervallo del setpoint è 0–30 °C a passi di 0,5 °C.
  • Temperatura di raffrescamento — impostazione della temperatura di raffrescamento del circuito di riscaldamento 1, leggibile e scrivibile da −1 a 30 °C a passi di 0,5 °C.

Il dispositivo termostato ambiente è limitato a 0–30 °C. La temperatura di raffrescamento viene inviata a EMS-ESP senza modifiche, quindi mantienila tra −1 e 30 °C.

Stato della pompa di calore
  • Attività del compressore — cosa sta facendo il compressore: Spento, Riscaldamento, Raffrescamento, Acqua calda, Piscina, Riscaldamento piscina, Sbrinamento o Allarme compressore. È uno stato di sola lettura; selezionare un valore in TapHome non ha effetto.
  • Compressore in funzione — indicatore acceso/spento, acceso mentre il compressore è in funzione.
Temperature
  • Temperatura esterna, Temperatura di mandata e Temperatura di ritorno come riportate dalla pompa di calore, con una risoluzione di 0,1 °C.
Energia
  • Contatore elettrico — la potenza è la potenza elettrica attuale del compressore (EMS-ESP riporta W, TapHome mostra kW); il consumo totale è il consumo totale di energia elettrica della pompa di calore in kWh. Le fonti non dicono se questo totale comprende la resistenza elettrica integrativa, quindi la potenza integrata nel tempo può non coincidere con esso.
  • Calore fornito [kWh] (attributo di servizio del contatore elettrico) — energia termica totale fornita dalla pompa di calore. È energia termica, non consumo di elettricità.
Acqua calda sanitaria
  • Acqua calda sanitaria — temperatura dell’acqua calda attuale e impostata della pompa di calore. L’intervallo del setpoint del dispositivo è 35–70 °C, il setpoint viene inviato in gradi interi e la pompa di calore applica i propri limiti. Il template usa i valori dell’acqua calda della pompa di calore, non le impostazioni dell’acqua calda del regolatore (dhw.settemp, dhw.mode).
Come il template comunica con EMS-ESP

Ogni dispositivo legge i propri valori con una richiesta HTTP GET per entità su /api/<device>/[hc1/|dhw/]<entity> e prende la chiave value, index o bool della risposta. I dispositivi interrogano ogni 30 s (temperatura esterna e contatore elettrico ogni 60 s); il modulo legge /api/system/info ogni 60 s. Le scritture sono richieste HTTP POST con un corpo JSON e il token di accesso nell’intestazione Authorization: Bearer.

EMS-ESP 3.8.3 e versioni successive rispondono 429 Too Many Requests a una GET che arriva meno di 50 ms dopo la chiamata API precedente. Il template quindi attende 60 ms prima di ogni GET e, con 429, ripete la richiesta una volta dopo 200 ms. Un altro client che interroga l’API di EMS-ESP nello stesso momento (per esempio un secondo sistema di domotica) può comunque causare occasionalmente una ripetizione.

Perché REST e non Modbus. EMS-ESP offre anche Modbus TCP (dalla 3.7.0, solo su schede con PSRAM) e MQTT. Gli offset dei registri Modbus di EMS-ESP sono cambiati tra le versioni stabili 3.8.0 e 3.8.6, quindi un template Modbus leggerebbe silenziosamente altri valori dopo un aggiornamento del firmware del gateway. L’API REST indirizza i valori per nome — un’entità rinominata termina con un errore del dispositivo visibile.

Risoluzione dei problemi

Errore del dispositivo „no value from the gateway”

Il messaggio „no value from the gateway — this controller or unit does not report it; delete this device” significa che la pompa di calore o il regolatore collegati non inviano questa entità. Controlla la pagina Devices di EMS-ESP oppure http://<gateway-ip>/api/boiler/entities e http://<gateway-ip>/api/thermostat/entities, poi elimina il dispositivo dopo l’importazione — gli altri dispositivi continuano a funzionare.

Errore del dispositivo 404

Un 404 con un messaggio come no 'xyz' in thermostat significa che EMS-ESP non conosce l’entità su questo percorso — il regolatore non ce l’ha (per esempio hc1.hpoperatingmode su un UI800) oppure il firmware usa un altro nome. unknown device significa che EMS-ESP non ha rilevato sul bus EMS una pompa di calore o un regolatore di quel tipo.

La scrittura termina con l’errore 401

Il token di accesso manca o è errato. Copialo di nuovo da Settings → Security → Manage Users → icona della chiave di un utente amministratore e inseriscilo nella variabile AccessToken del modulo. Il token deriva dal nome utente e dalla password del super utente in Settings → Security → Security Settings.

Errore 429

Un altro client interroga l’API di EMS-ESP nello stesso istante. Il template distribuisce già nel tempo le proprie richieste e le ripete una volta; se l’errore si ripete, riduci la frequenza di interrogazione dell’altro client.

Errore o avviso del modulo
  • „EMS-ESP reports °F” — disattiva Fahrenheit in Settings → Application.
  • „Template written for EMS-ESP 3.8.6, gateway reports …” — il gateway esegue un firmware al di fuori della serie 3.8. Aggiorna EMS-ESP in Settings → Version.
Errore del contatore elettrico su nrgtotal

Un’unità senza misurazione del calore non invia nrgtotal. Il contatore elettrico mostra allora un errore e l’attributo Calore fornito resta vuoto; potenza e consumo totale continuano a funzionare.

Gateway non raggiungibile
  1. Controlla il LED del gateway: 1 lampeggio blu durante l’avvio = bus EMS non ancora collegato (controlla il cavo e l’impostazione EMS Tx Mode), 2 lampeggi rossi = la rete si sta ancora collegando (controlla Settings → Network; il Wi-Fi deve essere a 2,4 GHz WPA2), luce fissa = i dati EMS arrivano.
  2. Apri http://<gateway-ip>/api/system/info in un browser — se risponde, il gateway è raggiungibile.
  3. Se l’indirizzo IP è cambiato, trova il gateway tramite il nome mDNS http://ems-esp.local, poi imposta una prenotazione DHCP nel router.
  4. Usa http:// — l’API di EMS-ESP non supporta HTTPS con certificati autofirmati.

Dispositivi disponibili

EMS-ESP pompa di calore Modulo
Variabili personalizzate
AccessToken (string)Token di accesso EMS-ESP di un utente con diritti di amministratore, inviato come intestazione Bearer a ogni scrittura (modalità operativa, setpoint); la lettura funziona senza, quindi un token vuoto dà un'integrazione di sola lettura
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

Lettura (modulo)
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
Modalità operativa della pompa di calore Interruttore multivalore

Modalità operativa del circuito di riscaldamento 1 — Spento, Auto, Riscaldamento o Raffrescamento; l'unico modo per passare la pompa di calore al raffrescamento, disponibile solo con i regolatori che la inviano (non UI800)

enum numeric
Valori / Stati: Off · Auto · Heating · Cooling

Modalità operativa della pompa di calore

Lettura stato interruttore
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
Scrittura stato interruttore
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
Termostato ambiente Termostato

Temperatura ambiente attuale e impostata del circuito di riscaldamento 1 dal regolatore della pompa di calore; setpoint 0–30 °C a passi di 0,5 °C

numeric Unità: °C

Termostato ambiente

Lettura temperatura
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));
Lettura (modulo)
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
Lettura temperatura desiderata
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));
Scrittura temperatura desiderata
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 di raffrescamento Variabile

Impostazione della temperatura di raffrescamento del circuito di riscaldamento 1, regolabile da −1 a 30 °C a passi di 0,5 °C; disponibile solo con i regolatori che la inviano

numeric Unità: °C

Temperatura di raffrescamento

Lettura
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
Scrittura
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
Attività del compressore Interruttore multivalore Solo lettura

Stato di sola lettura di cosa sta facendo il compressore — Spento, Riscaldamento, Raffrescamento, Acqua calda, Piscina, Riscaldamento piscina, Sbrinamento o Allarme compressore

enum numeric
Valori / Stati: Off · Heating · Cooling · Hot Water · Pool · Pool Heating · Defrost · Compressor Alarm

Attività del compressore

Lettura stato interruttore
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
Compressore in funzione Contatto reed Solo lettura
boolean

Compressore in funzione

Lettura
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 esterna Sensore di temperatura Solo lettura
numeric Unità: °C

Temperatura esterna

Lettura temperatura
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 di mandata Sensore di temperatura Solo lettura
numeric Unità: °C

Temperatura di mandata

Lettura temperatura
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 di ritorno Sensore di temperatura Solo lettura
numeric Unità: °C

Temperatura di ritorno

Lettura temperatura
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
Contatore elettrico Contatore elettrico Solo lettura

Potenza elettrica attuale del compressore (kW) e consumo totale di energia elettrica della pompa di calore (kWh)

numeric Unità: W / kWh
Attributi di servizio
Calore fornito [kWh]Energia termica totale fornita dalla pompa di calore — resa termica, non consumo di elettricità

Contatore elettrico

Lettura consumo totale
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));
Lettura domanda
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);
Lettura (modulo)
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
Attributi di servizio
Heat delivered [kWh]
IF NrgTotal = "" RETURN(NaN); END VAR v := PARSEJSON(NrgTotal, "$.value", true); IF ISNULL(v) RETURN(NaN); END RETURN(TODOUBLE(v));
Acqua calda sanitaria Termostato

Temperatura dell'acqua calda attuale e impostata della pompa di calore; il setpoint viene inviato in gradi interi e la pompa di calore applica i propri limiti

numeric Unità: °C

Acqua calda sanitaria

Lettura temperatura
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));
Lettura (modulo)
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
Lettura temperatura desiderata
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));
Scrittura temperatura desiderata
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
Connessione: Packet Parser → HTTP • Hostname: ems-esp.local
Possibili miglioramenti (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

Fonti

Hai trovato un problema con questo template?

Dicci cosa non funziona, cosa manca o come dovrebbe comportarsi il template. Il tuo feedback ci aiuta a mantenere il catalogo accurato.

Community — non revisionato

Vuoi usarlo nel tuo TapHome Core?

Apri questo template nel Customer Portal per applicarlo a una delle tue case, o crea una proposta di modifica e inviala al catalogo.

Apri nel portale