TapHome

Shelly Plus 1PM

Packet Parser → MQTT
Inviato da
Ultimo aggiornamento: 04. 2026
Shelly Plus 1PM

Lo Shelly Plus 1PM è un compatto relè Wi-Fi Gen2+ con misurazione della potenza integrata. Si inserisce dietro un interruttore a parete standard e può controllare un circuito fino a 16 A (3500 W a 230 V AC) o 10 A (30 V DC). Questa è la variante MQTT del template TapHome — il dispositivo comunica tramite un broker MQTT anziché tramite polling HTTP diretto, utile in ambienti con più controller o quando il dispositivo si trova in una VLAN diversa.

Il template espone due dispositivi: un Contatore elettrico per il monitoraggio di potenza ed energia e un Interruttore per il controllo del relè. Tre attributi di servizio a livello di modulo mostrano temperatura interna, tensione e corrente.

Configurazione

MQTT Client ID

Ogni Shelly Plus 1PM ha un MQTT Client ID univoco nel formato shellyplus1pm-<DEVICEID>, dove <DEVICEID> è l’indirizzo MAC esadecimale a 12 caratteri (es. shellyplus1pm-AABBCCDDEE00).

Il Client ID si trova:

  • Nell’interfaccia web Shelly: SettingsMQTTClient ID
  • Tramite API: GET http://<device-ip>/rpc/MQTT.GetConfig → campo client_id
  • Sull’etichetta del dispositivo (indirizzo MAC)

Questo dispositivo supporta il discovery mDNS. È possibile utilizzare l’hostname shellyplus1pm-{MAC}.local anziché un indirizzo IP per verificare la connettività. Sostituire {MAC} con l’indirizzo MAC completo del dispositivo in formato esadecimale minuscolo (es. shellyplus1pm-aabbccddee00.local).

Abilitazione MQTT
  1. Aprire l’interfaccia web Shelly: http://<device-ip>/
  2. Navigare su SettingsMQTT
  3. Abilitare MQTT
  4. Impostare Server: <broker-ip>:<port> (es. 192.168.1.10:1883)
  5. Il Client ID è precompilato — lasciarlo invariato a meno che non ci sia un motivo specifico per modificarlo
  6. Cliccare Save e riavviare il dispositivo

Per verificare che MQTT funzioni, utilizzare un client MQTT (es. MQTT Explorer) e sottoscrivere shellyplus1pm-<DEVICEID>/#. Dovresti vedere i messaggi di stato dal dispositivo, incluso shellyplus1pm-<DEVICEID>/status/switch:0.

Configurazione del template

Dopo aver importato il template in TapHome:

  1. Aprire il Shelly Plus 1PM MQTT Module
  2. Impostare l’MQTT Broker IP e la Porta (predefinita 1883)
  3. Impostare la variabile plug1topic sul MQTT Client ID dello Shelly Plus 1PM (es. shellyplus1pm-AABBCCDDEE00)

Il modulo si sottoscrive a {plug1topic}/status/switch:0 e pubblica i comandi di controllo su {plug1topic}/command/switch:0.

Funzionalità del dispositivo

Misurazione della potenza

Il Contatore elettrico legge due valori dal messaggio di stato MQTT {plug1topic}/status/switch:0:

  • Potenza istantaneaapower in watt, convertita in kW dal template (divisione per 1000)
  • Energia cumulativaaenergy.total in wattora, convertita in kWh dal template (divisione per 1000)

Il contatore è di sola lettura — si aggiorna automaticamente ogni volta che il dispositivo pubblica un messaggio di stato sul broker MQTT.

Controllo relè

L’Interruttore controlla il relè:

  • Lettura stato — si sottoscrive a {plug1topic}/status/switch:0 e legge il campo booleano output
  • Scrittura stato — pubblica on o off su {plug1topic}/command/switch:0

Il relè supporta carichi fino a 3500 W / 16 A a 230 V AC.

Diagnostica

Tre attributi di servizio a livello di modulo vengono analizzati dallo stesso payload JSON status/switch:0:

AttributoUnitàDescrizione
Temperatura interna°CTemperatura interna del dispositivo — monitora lo stato termico del relè e del PCB
TensioneVTensione di alimentazione AC all’ingresso del relè
CorrenteACorrente di carico attraverso l’uscita del relè

Tutti e tre gli attributi mostrano “Unknown” fino all’arrivo del primo messaggio di stato MQTT (valore iniziale NaN).

Funzionalità aggiuntive

Lo Shelly Plus 1PM espone anche fattore di potenza, frequenza di rete, energia restituita (per misurazione bidirezionale), stato dell’ingresso fisico, comando toggle, timer di spegnimento automatico e un’azione di aggiornamento forzato dello stato tramite la sua API MQTT. Queste funzionalità potranno essere aggiunte in un futuro aggiornamento del template.

Risoluzione problemi

I messaggi MQTT non arrivano
  1. Verificare che MQTT sia abilitato nell’interfaccia web Shelly (SettingsMQTT)
  2. Controllare che l’indirizzo del broker e la porta siano corretti sia nelle impostazioni del dispositivo Shelly che del modulo TapHome
  3. Verificare che la variabile plug1topic corrisponda esattamente al MQTT Client ID dello Shelly (es. shellyplus1pm-AABBCCDDEE00)
  4. Utilizzare un client MQTT (es. MQTT Explorer) e sottoscrivere shellyplus1pm-# per verificare che il dispositivo pubblichi messaggi
La misurazione della potenza mostra zero
  1. Verificare che il carico sia collegato attraverso il relè Shelly (non bypassato)
  2. Controllare che il relè sia acceso — il contatore misura solo quando la corrente scorre attraverso il relè
  3. Sottoscrivere {plug1topic}/status/switch:0 con un client MQTT e verificare che apower restituisca un valore diverso da zero
Il relè non risponde ai comandi
  1. Verificare che TapHome possa raggiungere il broker MQTT (IP e porta corretti nelle impostazioni del modulo)
  2. Controllare che il valore di plug1topic corrisponda al MQTT Client ID del dispositivo
  3. Testare pubblicando on su {plug1topic}/command/switch:0 tramite un client MQTT — il relè dovrebbe accendersi
La diagnostica mostra “Unknown”
  1. Tutti e tre gli attributi (temperatura, tensione, corrente) mostrano “Unknown” fino all’arrivo del primo messaggio di stato
  2. Se i valori rimangono “Unknown” dopo l’avvio del dispositivo, verificare che la connessione MQTT sia attiva e che i messaggi di stato vengano pubblicati
  3. Riavviare il dispositivo Shelly per forzare una nuova pubblicazione dello stato

I dispositivi Shelly Gen2+ supportano MQTT con TLS opzionale. Se TLS non è configurato, la comunicazione tra dispositivo e broker MQTT non è crittografata (MQTT in chiaro, porta 1883). Per la comunicazione crittografata, abilitare TLS nelle impostazioni MQTT dello Shelly e utilizzare la porta 8883.

Come installare in TapHome

Prerequisiti

  • Dispositivo Shelly connesso al Wi-Fi (vedi la guida alla connessione HTTP se non ancora fatto)
  • Broker MQTT attivo sulla rete locale (es. Mosquitto, Home Assistant o il broker integrato di TapHome)
  • TapHome CCU sulla stessa rete del broker

Sui dispositivi Gen1, l’attivazione di MQTT disabilita Shelly Cloud. Entrambi non possono funzionare contemporaneamente. Sui dispositivi Gen2/Plus questa limitazione non si applica.

Passaggio 1 — Abilitare MQTT sul dispositivo Shelly

Dispositivi Gen1 (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Apri l’interfaccia web Shelly: http://<device-ip>/
  2. Vai su Internet & SecurityAdvanced — MQTT
  3. Abilita MQTT
  4. Imposta MQTT Server: <broker-ip>:<port> (es. 192.168.1.10:1883)
  5. Opzionalmente imposta MQTT User e MQTT Password se il broker richiede l’autenticazione
  6. Clicca su Save — il dispositivo si riavvierà e si connetterà al broker

Dispositivi Gen2 / Plus (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Apri l’interfaccia web Shelly: http://<device-ip>/
  2. Vai su SettingsMQTT
  3. Abilita MQTT
  4. Imposta Server: <broker-ip>:<port> (es. 192.168.1.10:1883)
  5. Il Client ID è precompilato con l’ID del dispositivo (es. shellyplus1pm-AABBCCDDEE) — lascialo così a meno che tu non abbia un motivo specifico per cambiarlo
  6. Clicca su Save e riavvia il dispositivo

Per verificare che MQTT funzioni, usa un client MQTT (es. MQTT Explorer) e sottoscrivi shellies/# (Gen1) o <device-id>/# (Gen2). Dovresti vedere i messaggi di stato dal dispositivo.

Passaggio 2 — Trovare il Device ID / MQTT Client ID

Alcuni template richiedono un parametro Device ID o MQTT Client ID. Questo è l’identificatore univoco utilizzato nei topic MQTT.

  • Gen1: si trova sull’etichetta come indirizzo MAC (es. AABBCCDDEE). Device ID = shelly<model>-<mac>, es. shelly1pm-AABBCCDDEE
  • Gen2/Plus: si trova nell’interfaccia web Shelly sotto SettingsDevice InfoDevice ID, oppure sull’etichetta del dispositivo

Passaggio 3 — Configurazione in TapHome

  1. In TapHome, aggiungi un nuovo modulo Packet Parser (MQTT)
  2. IP Address: inserisci l’IP del broker MQTT (es. 192.168.1.10)
  3. Port: 1883 (predefinito; usa 8883 per TLS)
  4. Device ID / MQTT Client ID: inserisci il valore dal passaggio 2 (se richiesto dal template)
  5. Importa il template — TapHome si sottoscriverà automaticamente ai topic del dispositivo

Dispositivi disponibili

Shelly Plus 1PM MQTT Module Modulo
Attributi di servizio
Temperatura internaTemperatura interna del dispositivo — monitora lo stato termico del relè e del PCB
TensioneTensione di alimentazione AC all'ingresso del relè
CorrenteCorrente di carico attraverso l'uscita del relè
Variabili personalizzate
plug1topic (string)MQTT Client ID dello Shelly Plus 1PM — formato 'shellyplus1pm-<deviceid>'. Si trova nell'interfaccia web del dispositivo: Settings → MQTT Settings → Client ID

Shelly Plus 1PM MQTT Module

Listener
IF(INDEXOF(plug1topic, "shellyplus1pm-deviceid") = 0)
    ADDERROR("Set correct 'plug1topic' value in module variables. Topic format is 'shellyplus1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> MQTT Settings -> Client ID.");
    RETURN(-1);
END

IF(RECEIVEDMSG.TOPIC = plug1topic + "/status/switch:0")
    internalTemp := PARSEJSON(RECEIVEDMSG.PAYLOAD, "temperature.tC");
    voltage := PARSEJSON(RECEIVEDMSG.PAYLOAD, "voltage");
    current := PARSEJSON(RECEIVEDMSG.PAYLOAD, "current");
    VAR errors := PARSEJSON(RECEIVEDMSG.PAYLOAD, "errors", TRUE);
    
    IF (!ISNULL(errors))
        VAR errCount := LENGTH(errors);
        VAR i := 0;
        VAR errorText := "";
        
        WHILE i < errCount
            IF LENGTH(errorText)
                errorText += ", ";
            END
            errorText := errorText + GETAT(errors, i);
            i += 1;
        LOOP
        
        IF LENGTH(errorText)
            ADDERROR(errorText);
        END
    END
END
Attributi di servizio
Internal temperature
IF(ISNAN(internalTemp), "Unknown", internalTemp + "°C");
Voltage
IF(ISNAN(voltage), "Unknown", voltage + "V");
Current
IF(ISNAN(current), "Unknown", current + "A");
Shelly Plus 1PM MQTT Power Contatore elettrico Solo lettura

Potenza istantanea (kW) ed energia cumulativa (kWh) dal payload di stato MQTT

numeric Unità: kW / kWh

Shelly Plus 1PM MQTT Power

Listener
IF(INDEXOF(plug1topic, "shellyplus1pm-deviceid") = 0)
    ADDERROR("Set correct 'plug1topic' value in module variables. Topic format is 'shellyplus1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> MQTT Settings -> Client ID.");
    RETURN(-1);
END

IF(RECEIVEDMSG.TOPIC = plug1topic + "/status/switch:0")
    Ed := PARSEJSON(RECEIVEDMSG.PAYLOAD, "apower") / 1000.0;
    To := PARSEJSON(RECEIVEDMSG.PAYLOAD, "aenergy.total") / 1000.0;
END
Shelly Plus 1PM MQTT Switch Interruttore

Controllo relè on/off tramite topic di comando MQTT

boolean
Valori / Stati: ON · OFF

Shelly Plus 1PM MQTT Switch

Scrittura stato interruttore
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH(plug1topic + "/command/switch:0", value);
Listener
IF(INDEXOF(plug1topic, "shellyplus1pm-deviceid") = 0)
    ADDERROR("Set correct 'plug1topic' value in module variables. Topic format is 'shellyplus1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> MQTT Settings -> Client ID.");
    RETURN(-1);
END

IF(RECEIVEDMSG.TOPIC = plug1topic + "/status/switch:0")
    St := PARSEJSON(RECEIVEDMSG.PAYLOAD, "output");
END
Connessione: Packet Parser → MQTT
Possibili miglioramenti (8)
  • Power Factor — Power factor value, available in switch:0 status JSON for metered devices
  • Network Frequency — AC network frequency in Hz, available in switch:0 status JSON
  • Returned Energy — Returned/exported energy in Wh, for bi-directional metering scenarios
  • Connection Status — LWT topic — true on connect, false on disconnect. Could detect offline device.
  • Toggle Command — Toggle relay state; template only supports on/off
  • Auto-off Timer — Turn ON with auto-off timer in seconds via 'on,N' command
  • Input State — Physical switch/button input state, available via Input.GetStatus RPC method over MQTT
  • Force Status Update — Request device to publish current status on all component topics

Fonti