TapHome

Shelly EM

Packet Parser → HTTP
Inviato da
Ultimo aggiornamento: 03. 2026
Shelly EM

Lo Shelly EM è un contatore di energia monofase con due canali di misurazione indipendenti e un’uscita relè da 2A per il controllo del contattore. Ogni canale si collega a un morsetto CT (trasformatore di corrente) esterno — disponibile nelle varianti da 50A e 120A — consentendo il monitoraggio non invasivo di due circuiti separati contemporaneamente. TapHome si integra con il dispositivo localmente tramite Wi-Fi usando l’API REST HTTP o MQTT. Non è richiesta alcuna connessione cloud.

Sono disponibili due template TapHome: un template HTTP che interroga gli endpoint REST del dispositivo, e un template MQTT che riceve i dati tramite broker MQTT. Entrambi espongono gli stessi tre dispositivi — due contatori di energia (uno per canale) e un interruttore contattore.

Configurazione

Template HTTP

Il template HTTP richiede solo l’indirizzo IP del dispositivo (o hostname mDNS). TapHome interroga tre endpoint ogni 15 secondi:

  • /emeter/0/ — dati energetici canale 1
  • /emeter/1/ — dati energetici canale 2
  • settings/relay/0 — stato relè e verifica programmazione

Lo script di lettura a livello modulo memorizza ogni risposta in una variabile personalizzata (emeterZero, emeterOne, status), così gli script dei singoli dispositivi possono elaborare i dati senza chiamate HTTP ridondanti.

Il template verifica anche lo stato della programmazione del relè da settings/relay/0. Se la programmazione interna è abilitata sul dispositivo Shelly, il template segnala un errore — disabilita la programmazione nell’interfaccia web Shelly per evitare conflitti con le automazioni TapHome.

Template MQTT

Il template MQTT richiede l’IP del broker, la porta e lo Shelly Device ID (formato: shellyem-XXXXXXXXXXXX, dove X = cifre esadecimali MAC). Il Device ID si trova nell’interfaccia web Shelly sotto Settings > Device Info.

Dopo aver abilitato MQTT sullo Shelly EM (Internet & Security > Advanced — MQTT), TapHome si sottoscrive ai topic shellies/shellyem-{deviceID}/ e riceve i dati tramite script listener.

Sui dispositivi Shelly Gen1, l’abilitazione di MQTT disabilita Shelly Cloud. Entrambi non possono funzionare contemporaneamente.

Funzionalità del dispositivo

Misurazione energia (per canale)

Ogni canale è esposto in TapHome come contatore di energia indipendente:

  • Potenza istantanea — potenza attiva in kW (convertita da W dividendo per 1000)
  • Energia cumulativa — energia totale consumata in kWh (HTTP: convertita da Wh; MQTT: usa il topic persistente total in Wh)

Il template HTTP legge i campi power e total dalla risposta JSON di /emeter/{i}/. Il template MQTT ascolta il topic emeter/{i}/energy (watt-minuti, diviso per 60.000 per kWh) e il topic emeter/{i}/total (watt-ore, persistente tra i riavvii).

Il topic MQTT energy si azzera al riavvio del dispositivo. Per il tracciamento persistente dell’energia, il template legge anche il topic total che sopravvive ai riavvii.

Ogni canale espone anche tre attributi di servizio:

AttributoUnitàDescrizione
TensioneVTensione di rete efficace
Energia restituitaWhEnergia totale immessa in rete — per impianti solari/misurazione bidirezionale
Potenza reattivaVARPotenza reattiva istantanea

Il template MQTT espone solo la tensione come attributo di servizio per canale. Potenza reattiva ed energia restituita sono disponibili solo nel template HTTP.

Interruttore contattore

L’uscita relè è esposta in TapHome come interruttore. Il relè è dimensionato per 2A / 230 VAC — è progettato esclusivamente per il controllo del contattore, non per la commutazione diretta dei carichi.

  • HTTP: legge ison da settings/relay/0 e controlla tramite /relay/0?turn=on o /relay/0?turn=off
  • MQTT: legge dal topic shellies/shellyem-{id}/relay/0 e pubblica on/off su shellies/shellyem-{id}/relay/0/command

Il relè è dimensionato per soli 2A. Per carichi che superano questo valore nominale, utilizza sempre un contattore esterno. Il collegamento diretto di carichi ad alta potenza danneggerà il relè.

Funzionalità aggiuntive

Lo Shelly EM fornisce anche fattore di potenza (0,00-1,00) e un flag di validità della misurazione per canale, configurazione dei canali (rapporto CT, limite di potenza massima), reset del contatore energetico, timer di spegnimento automatico sul relè e intensità del segnale Wi-Fi. Tramite MQTT sono disponibili anche topic aggiuntivi per potenza in tempo reale, potenza reattiva ed energia restituita per canale. Queste funzionalità possono essere aggiunte in un futuro aggiornamento del template.

Risoluzione dei problemi

Il dispositivo non risponde (HTTP)
  1. Verifica che lo Shelly EM sia connesso al Wi-Fi e abbia un indirizzo IP valido
  2. Apri http://{device-ip}/shelly nel browser — se risponde con un JSON contenente "type":"SHEM", il dispositivo è raggiungibile
  3. Controlla che TapHome CCU e Shelly EM siano nella stessa rete / VLAN
Nessun dato su un canale
  1. Verifica che il morsetto CT sia inserito nel jack da 3,5mm corretto (canale 0 o canale 1)
  2. Controlla che la corrente stia fluendo attraverso il conduttore monitorato — il morsetto CT deve circondare un singolo conduttore, non l’intero cavo
  3. Interroga manualmente /emeter/0/ e /emeter/1/ e conferma valori power diversi da zero
I messaggi MQTT non arrivano
  1. Conferma che MQTT è abilitato nell’interfaccia web Shelly (Internet & Security > Advanced — MQTT)
  2. Verifica che indirizzo e porta del broker siano corretti sia nel dispositivo Shelly che nelle impostazioni del modulo TapHome
  3. Controlla che la variabile deviceID corrisponda esattamente al Device ID Shelly (es. B929CC)
  4. Usa un client MQTT (es. MQTT Explorer) per sottoscriverti a shellies/# e verificare che il dispositivo pubblichi messaggi
Errore conflitto programmazione

Il template HTTP controlla il campo schedule in settings/relay/0. Se il dispositivo Shelly ha la programmazione interna abilitata, il template segnala un errore. Disabilita la programmazione nell’interfaccia web Shelly (Settings > Relay > Schedule) — usa le automazioni TapHome al suo posto.

I dispositivi Shelly Gen1 supportano solo 2 connessioni HTTP simultanee. Se TapHome e un altro sistema (es. Home Assistant) interrogano contemporaneamente lo stesso dispositivo, la comunicazione potrebbe diventare inaffidabile. Considera il passaggio al template MQTT per ambienti multi-sistema.

Come installare in TapHome

Prerequisiti

  • Dispositivo Shelly installato e acceso
  • Rete Wi-Fi locale (2,4 GHz)
  • TapHome CCU sulla stessa rete

Passaggio 1 — Collegare Shelly al Wi-Fi

Opzione A — App Shelly (consigliata):

  1. Scarica l’app Shelly (iOS / Android)
  2. Tocca +Add Device e segui la procedura guidata di associazione Bluetooth
  3. Inserisci le credenziali Wi-Fi quando richiesto

Opzione B — Modalità AP (senza app):

  1. Al primo avvio il dispositivo crea un hotspot: ShellyXXX-AABBCCDDEE
  2. Collega il tuo telefono/PC a questo hotspot
  3. Apri http://192.168.33.1Internet & SecurityWi-Fi Mode - Client
  4. Inserisci SSID e password → Save

Shelly supporta solo reti a 2,4 GHz. Le reti a 5 GHz non appariranno nella scansione.

Passaggio 2 — Trovare l’indirizzo IP

Dopo la connessione al Wi-Fi, trova l’indirizzo IP assegnato tramite uno di questi metodi:

  • App Shelly: Dettaglio dispositivo → Device info → Indirizzo IP
  • Interfaccia web Shelly: Connettiti all’AP del dispositivo prima della configurazione Wi-Fi — l’IP viene mostrato dopo il salvataggio
  • Tabella DHCP del router: Cerca un hostname come shelly1pm-AABBCCDDEE
  • mDNS: Esegui il ping di shelly<model>-<mac>.local (es. shelly1pm-AABBCCDDEE.local) dalla stessa rete

Assegna un IP statico (prenotazione DHCP) nel tuo router per il dispositivo Shelly per evitare che l’indirizzo cambi dopo un riavvio del router.

Passaggio 3 — Configurazione in TapHome

  1. In TapHome, aggiungi un nuovo modulo Packet Parser (HTTP)
  2. IP Address: inserisci l’IP dal passaggio 2 (es. 192.168.1.50)
  3. Port: 80 (predefinito, nessuna modifica necessaria)
  4. Importa il template — TapHome interrogherà periodicamente /status per leggere lo stato del dispositivo

L’autenticazione HTTP è disabilitata per impostazione predefinita sui dispositivi Shelly. Se hai abilitato la protezione con accesso, TapHome attualmente non supporta HTTP Basic Auth — mantieni l’autenticazione disabilitata per l’integrazione con TapHome.

Dispositivi disponibili

Shelly EM Modulo
Variabili personalizzate

Shelly EM

Lettura (modulo)
VAR response := SENDHTTPREQUEST("settings/relay/0");
IF response.IsSuccess
 status := response.Content;
 IF PARSEJSON(status, "schedule")
  ADDERROR("Internal scheduling on");
 END
ELSE
 ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
 RETURN(NaN);
END
response := SENDHTTPREQUEST("/emeter/0/");
IF response.IsSuccess
 emeterZero := response.Content;
ELSE
 ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
 RETURN(NaN);
END
response := SENDHTTPREQUEST("/emeter/1/");
IF response.IsSuccess
 emeterOne := response.Content;
ELSE
 ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
 RETURN(NaN);
END
Contatore elettrico — Canale 1 Contatore elettrico Solo lettura

Potenza istantanea (kW) ed energia cumulativa (kWh) dal morsetto CT sul canale 1

numeric Unità: kW / kWh json_path
Attributi di servizio
Tensione
Energia restituitaEnergia totale immessa in rete sul canale 1 — per impianti solari e di misurazione bidirezionale
Potenza reattiva

Contatore elettrico — Canale 1

Lettura consumo totale
RETURN(PARSEJSON(emeterZero, "total")/1000);
Lettura domanda
RETURN(PARSEJSON(emeterZero, "power")/1000);
Attributi di servizio
Voltage [V]
RETURN(PARSEJSON(emeterZero, "voltage"));
backward [Wh]
RETURN(PARSEJSON(emeterZero, "total_returned"));
reactive [W]
RETURN(PARSEJSON(emeterZero, "reactive"));
Contatore elettrico — Canale 2 Contatore elettrico Solo lettura

Potenza istantanea (kW) ed energia cumulativa (kWh) dal morsetto CT sul canale 2

numeric Unità: kW / kWh json_path
Attributi di servizio
Tensione
Energia restituitaEnergia totale immessa in rete sul canale 2 — per impianti solari e di misurazione bidirezionale
Potenza reattiva

Contatore elettrico — Canale 2

Lettura consumo totale
RETURN(PARSEJSON(emeterOne, "total")/1000);
Lettura domanda
RETURN(PARSEJSON(emeterOne, "power")/1000);
Attributi di servizio
Voltage [V]
RETURN(PARSEJSON(emeterOne, "voltage"));
backward [Wh]
RETURN(PARSEJSON(emeterOne, "total_returned"));
reactive [W]
RETURN(PARSEJSON(emeterOne, "reactive"));
Interruttore contattore Interruttore

Uscita relè 2A per controllo contattore — non dimensionato per commutazione diretta dei carichi

boolean
Valori / Stati: ON · OFF

Interruttore contattore

Lettura stato interruttore
RETURN(PARSEJSON(status, "ison"));
Scrittura stato interruttore
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/set/value=" + St);
VAR response := SENDHTTPREQUEST("/relay/0?turn="+ if(St = 1, "on","off"));
IF response.IsSuccess = false
 ADDERROR(response.StatusCode);
END
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/setValue", "GET", "value=" + St, "header1:value1", "header2:value2", ...);\r
# Or VAR request := HTTPREQUEST("/example/setValue");
# request.Method := "PUT";
# VAR response := SENDHTTPREQUEST(request);
#r
#
# Send TCP, UDP data:
# VAR data1 := "{\"name\":\"John\", \"age\":" + St + "}";
# SENDDATA(data1);
# VAR data2 := TOBYTES("{\"name\":\"John\", \"age\":" + St + "}", "iso-8859-1");
# SENDDATA(data2);
# You can process received TCP or UDP data in the Listener script
#
#
# Upload data to FTP:
# FTPUPLOAD("filePath", "somedata=" + St, "write"); # use "append" mode to append data to existing file
Connessione: Packet Parser → HTTP
Possibili miglioramenti (9)
  • Power Factor — Power factor (0.00–1.00) per channel, available in /emeter/{i} and /status response. Not available via MQTT.
  • Measurement Validity — Boolean flag indicating if the measurement is valid. Available per channel in /emeter/{i}.
  • Per-Channel Configuration — CT ratio (ctrafos: 50/120), max_power limit, appliance_type. Could be exposed as service actions.
  • Reset Energy Counters — Resets accumulated energy data for both channels. Available via HTTP GET and MQTT command topic.
  • Auto-off Timer — Auto-off timer in seconds on relay endpoint. Could be added as service action parameter.
  • WiFi Signal Strength — WiFi RSSI in dBm, available in /status response
  • MQTT Real-time Power — Instantaneous power via MQTT (W). MQTT template uses energy+total topics instead.
  • MQTT Reactive Power — Reactive power via MQTT (VAR). HTTP template has it as service attribute, MQTT template does not.
  • MQTT Energy Returned — Energy returned to grid via MQTT (Wh). HTTP template has it as service attribute (backward), MQTT template does not.

Fonti