TapHome

Shelly RGBW2

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

Lo Shelly RGBW2 è un controller per strisce LED RGBW Wi-Fi con quattro uscite PWM (12/24 V DC). Supporta due modalità operative mutuamente esclusive — Color e White — ciascuna con il proprio template TapHome. TapHome comunica con il dispositivo via HTTP sulla rete locale; non è necessaria alcuna connessione cloud.

In modalità Color, le quattro uscite controllano una striscia LED RGBW come singola luce colorata con tonalità, saturazione, luminosità e un canale bianco (CCT) opzionale. In modalità White, le quattro uscite funzionano come dimmer indipendenti, ciascuno controllando una striscia LED bianca o zona separata.

La modalità operativa deve essere scelta nell’interfaccia web Shelly (o tramite API) prima di importare il template corrispondente. Ogni template valida la modalità corrente ad ogni polling e mostra un errore se il dispositivo è impostato sulla modalità sbagliata.

Configurazione

Entrambi i template si connettono via Wi-Fi. Durante l’importazione del template TapHome, inserire l’indirizzo IP del dispositivo (placeholder predefinito 192.168.0.1) e un tempo di transizione opzionale in millisecondi (predefinito 300).

Il parametro tempo di transizione controlla la velocità di dissolvenza della luce tra i livelli di luminosità. Si applica a tutti i comandi di scrittura (on/off, luminosità, cambi colore) e influenza la finestra di debounce — il template ignora i valori di polling per transitionTime + 500 ms dopo ogni scrittura per prevenire letture obsolete durante le transizioni.

Template modalità Color

Luce colorata

Il template espone la striscia RGBW come singola luce colorata HSB con due sotto-modalità:

  • Colore RGB — tonalità e saturazione controllano il colore della striscia. Il template converte tra i valori RGB dell’API Shelly (rosso, verde, blu 0-255) e il modello HSB di TapHome. La luminosità è controllata tramite il parametro gain (0-100).
  • Bianco (CCT) — quando viene impostata la temperatura di colore correlata, il template passa al controllo del canale bianco. L’intervallo CCT è 3000-6500 K. La luminosità è controllata tramite il parametro white (0-100).

Lo stato della luce viene letto dalla risposta /status (lights[0]) e controllato tramite l’endpoint /light/0. L’accensione invia turn=on con i valori correnti di colore o bianco; lo spegnimento invia turn=off. Tutti i comandi di scrittura includono il parametro tempo di transizione.

Misurazione potenza (Color)

Il template Color include un contatore energetico che legge da meters[0]:

  • Potenza istantaneameters[0].power in watt, convertita in kW
  • Consumo totalemeters[0].total in watt-minuti, convertito in kWh

Se la luce è accesa ma la potenza mostra zero, il template visualizza un avviso suggerendo di configurare il modello del dispositivo nelle impostazioni dell’app Shelly.

Template modalità White

Quattro dimmer indipendenti

Il template White espone quattro canali dimmer indipendenti, uno per uscita PWM:

CanaleUscitaEndpointIntervallo di polling
Ch1R (Red)/light/02,5 s
Ch2G (Green)/light/12,5 s
Ch3B (Blue)/light/22,5 s
Ch4W (White)/light/32,5 s

Ogni dimmer legge lights[N].ison e lights[N].brightness (0-100, normalizzato a 0-1) dalla risposta /status. I comandi di scrittura usano /light/N?turn=on|off&brightness=VALUE. Tutti i canali usano lo stesso tempo di transizione e logica di debounce.

Misurazione potenza (White)

Ogni canale ha il proprio contatore energetico, che legge da meters[0] a meters[3]. Il primo canale esegue il polling ogni 2,5 secondi; i canali 2-4 eseguono il polling a intervalli di 15 secondi. Ogni contatore fornisce potenza istantanea (W in kW) ed energia cumulativa (watt-minuti in kWh).

Diagnostica di servizio

Entrambi i template espongono 10 attributi di servizio per il monitoraggio del dispositivo:

  • Info rete — indirizzo IP, indirizzo MAC (formattato con due punti), intensità segnale Wi-Fi (dB)
  • Connettività — cloud abilitato/connesso, MQTT connesso
  • Info dispositivo — ora dispositivo, tempo di attività (formattato come giorni/ore/minuti), utilizzo RAM
  • Firmware — aggiornamento firmware disponibile

Azioni di servizio

Entrambi i template condividono tre azioni di servizio:

  • Abilita cloud — abilita o disabilita la connettività Shelly Cloud
  • Riavvio — avvia un riavvio del dispositivo
  • Imposta modalità — il template Color include “Set mode Color” (/settings?mode=color) e il template White include “Set mode White” (/settings?mode=white). Queste azioni cambiano la modalità operativa del dispositivo tramite API.
Funzionalità aggiuntive

Lo Shelly RGBW2 espone anche effetti luce (modalità Color, indice effetto 0-3), stato dell’ingresso fisico, temperatura interna, flag di surriscaldamento e impostazioni di protezione potenza nella sua API. Queste funzionalità potranno essere aggiunte in un futuro aggiornamento del template.

Risoluzione dei problemi

Il dispositivo non risponde
  1. Verificare che lo Shelly sia connesso al Wi-Fi e abbia un indirizzo IP valido
  2. Provare a usare l’hostname mDNS (shellyrgbw2-AABBCCDDEE.local) invece dell’indirizzo IP — l’IP potrebbe essere cambiato dopo un rinnovo DHCP
  3. Aprire http://{device-ip}/shelly nel browser — se risponde, il dispositivo è raggiungibile
  4. Verificare che TapHome CCU e Shelly siano sulla stessa rete / VLAN
Errore “Mode White/Color is not supported”

Questo errore significa che il dispositivo è impostato sulla modalità operativa sbagliata per il template importato. Per risolvere:

  1. Aprire l’interfaccia web Shelly su http://{device-ip}
  2. Cambiare la modalità operativa per corrispondere al template (Color o White)
  3. In alternativa, usare l’azione di servizio “Set mode Color” o “Set mode White” dall’altro template per cambiare modalità via API, poi reimportare il template corretto
La potenza mostra zero
  1. Confermare che i LED sono collegati alle uscite dello Shelly RGBW2
  2. Aprire l’app Shelly o l’interfaccia web e verificare che il modello del dispositivo sia configurato in Settings -> Device Model
  3. Verificare che la luce sia accesa — il contatore misura solo quando scorre corrente attraverso le uscite
  4. Interrogare /status manualmente e verificare che meters[0].power restituisca un valore diverso da zero
La luce colorata non cambia
  1. Verificare che il dispositivo sia in modalità Color (controllare la risposta /statusmode dovrebbe essere "color")
  2. Assicurarsi che la luce sia accesa prima di cambiare tonalità o saturazione
  3. Se sia gain che white sono diversi da zero, il template li azzera automaticamente e spegne la luce — questo previene un comportamento indefinito dove i canali RGB e bianco competono

I dispositivi Shelly Gen1 supportano solo 2 connessioni HTTP simultanee. Se TapHome e un altro sistema (es. Home Assistant) interrogano lo stesso dispositivo contemporaneamente, la comunicazione potrebbe diventare inaffidabile. Utilizzare un intervallo di polling di 10-30 secondi.

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 RGBW2 Color Modulo
Attributi di servizio
Indirizzo IP
Indirizzo MAC
Segnale WiFi
Cloud abilitato
Cloud connesso
MQTT connesso
Ora del dispositivo
Aggiornamento FW disponibile
Tempo di attività
RAM
Azioni di servizio
Abilita cloud
Riavvio
Imposta modalità Color
Variabili personalizzate
transitionTime (numeric) = TransitionTimeLight transition duration in milliseconds (import parameter, default 300ms)

Shelly RGBW2 Color

Lettura (modulo)
VAR now := NOW();

IF now.Ticks < debounceTimestamp
    RETURN(0);
END

VAR response := SENDHTTPREQUEST("/status");

IF response.IsSuccess
    jsonStatus := response.Content;
    
    if PARSEJSON(jsonStatus, "$.mode", 1) = "white"
    adderror("Mode White is not supported");
    end
ELSE
    jsonStatus := NULL;
END
Attributi di servizio
IP Address
VAR response := SENDHTTPREQUEST("/status");

IF response.IsSuccess
    jsonStatus := response.Content;
ELSE
    jsonStatus := NULL;
END

VAR address := PARSEJSON(jsonStatus, "$.wifi_sta.ip", 1);
IF (ISNULL(address), "-", address)
MAC Address
VAR value := PARSEJSON(jsonStatus, "$.mac", 1);
IF ISNULL(value)
    RETURN("-");
END;

STRING mac;
INT i := 0;
INT len := LENGTH(value);

WHILE i < len
    mac += GETAT(value, i);
    i += 1;
    
    IF MOD(i, 2) = 0 AND i < len
        mac += ":";
    END
LOOP

mac
WIFI signal
VAR signal := PARSEJSON(jsonStatus, "$.wifi_sta.rssi", 1);
IF (ISNULL(signal), "-", signal + "db");
Cloud enabled
VAR value := PARSEJSON(jsonStatus, "$.cloud.enabled", 1);
IF (ISNULL(value), "-", value)
Cloud connected
VAR value := PARSEJSON(jsonStatus, "$.cloud.connected", 1);
IF (ISNULL(value), "-", value)
MQTT connected
VAR value := PARSEJSON(jsonStatus, "$.mqtt.connected", 1);
IF (ISNULL(value), "-", value)
Device time
VAR value := PARSEJSON(jsonStatus, "$.time", 1);
IF (ISNULL(value), "-", value)
FW update available
VAR value := PARSEJSON(jsonStatus, "$.has_update");
IF (ISNULL(value), "-", value)
Uptime
VAR value := PARSEJSON(jsonStatus, "$.uptime", 1);
IF ISNULL(value)
    RETURN("-");
END

VAR days := FLOOR(value/86400, 1);
value := MOD(value, 86400);
VAR hours := FLOOR(value/3600, 1);
value := MOD(value, 3600);
VAR minutes := FLOOR(value/60, 1);

days + "day(s) " + hours + "h " + minutes + "m"
RAM
VAR ramFree := PARSEJSON(jsonStatus, "$.ram_free", 1);
VAR ramTotal := PARSEJSON(jsonStatus, "$.ram_total", 1);

IF ISNULL(ramFree) OR ISNULL(ramTotal)
    RETURN("-");
END

ramFree + " bytes free of " + ramTotal
Azioni di servizio
Enable cloud
Parametri: Enable (Enable / Disable)
VAR response := SENDHTTPREQUEST("/settings/cloud?enabled=" + enable);
VAR contentJson := response.Content;
VAR wasEnabled := PARSEJSON(contentJson, "enabled");

IF(wasEnabled, "Cloud enabled", "Cloud disabled");
Reboot
VAR response := SENDHTTPREQUEST("/reboot");
VAR contentJson := response.Content;
VAR wasRebooted := PARSEJSON(contentJson, "ok");

IF(wasRebooted, "Reboot successful", "Error");
Set mode Color
VAR response := SENDHTTPREQUEST("/settings?mode=color");
IF(response.isSuccess, "Color mode is set", "Error");
Contatore elettrico Contatore elettrico Solo lettura

Misurazione consumo energetico — potenza istantanea (kW) ed energia cumulativa (kWh)

numeric Unità: W / kWh

Contatore elettrico

Lettura consumo totale
IF LENGTH(jsonStatus) = 0
    RETURN(NaN);
END

VAR power := PARSEJSON(jsonStatus, "$.meters[0].power");
VAR total := PARSEJSON(jsonStatus, "$.meters[0].total");
BOOL isOn := PARSEJSON(jsonStatus, "$.lights[0].ison");

IF ISNULL(power) OR ISNULL(total) OR (ison AND power=0)
	ADDWARNING("To enable power monitoring, open device settings in Shelly app or web browser and configure device model in Settings->Device Model");
	
    RETURN(NaN);
END

total / 60000.0
Lettura domanda
IF LENGTH(jsonStatus) = 0
    RETURN(NaN);
END

VAR power := PARSEJSON(jsonStatus, "$.meters[0].power", 1);

IF ISNULL(power)
    RETURN(NaN);
END

power / 1000.0
Luce colorata Luce HSB

Luce colorata RGBW con controllo HSB — tonalità, saturazione, luminosità e canale bianco CCT opzionale (3000–6500 K)

hsb

Luce colorata

Lettura (modulo)
if PARSEJSON(jsonStatus, "$.lights[0].white", 1) > 0 and PARSEJSON(jsonStatus, "$.lights[0].gain", 1)
    SENDHTTPREQUEST("light/0?gain=0&white=0");
    SENDHTTPREQUEST("light/0?turn=off");
end
Lettura luminosità
VAR now := NOW();

IF now.Ticks < debounceTimestamp
    RETURN(Hb);
END

INT value;
IF !ISNAN(Ct)
    value := PARSEJSON(jsonStatus, "$.lights[0].white", 1);
ELSE
    value := PARSEJSON(jsonStatus, "$.lights[0].gain", 1);
END

IF ISNULL(value)
    RETURN(NaN);
END

BOOL isOn := PARSEJSON(jsonStatus, "$.lights[0].ison", 1);

IF ISNULL(isOn)
    RETURN(NaN);
END

IF(isOn, value/100.0, 0);
Scrittura luminosità
IF St > 0.5
    IF !ISNAN(Ct)
    SENDHTTPREQUEST("light/0?turn=on&transition=" + transitionTime + "&gain=0&white=" + ROUND(Hb*100.0));
    ELSE
    SENDHTTPREQUEST("light/0?turn=on&transition=" + transitionTime + "&white=0&gain=" + ROUND(Hb*100.0));
    END
ELSE
    SENDHTTPREQUEST("light/0?turn=off&transition=" + transitionTime);
END

VAR now := NOW();
debounceTimestamp := now.Ticks + transitionTime + 500;
Lettura tonalità
VAR now := NOW();

IF now.Ticks < debounceTimestamp
    RETURN(Hd);
END

INT r := PARSEJSON(jsonStatus, "$.lights[0].red", 1);
INT g := PARSEJSON(jsonStatus, "$.lights[0].green", 1);
INT b := PARSEJSON(jsonStatus, "$.lights[0].blue", 1);

VAR HSVColor := RGBTOHSV(r, g, b);
ROUND(HSVColor.Hue);
Scrittura tonalità
IF !ISNAN(Ct)
    RETURN(0);
END

VAR color := HSVTORGB(Hd, Sa, 1);

SENDHTTPREQUEST("light/0?mode=color&transition=" + transitionTime + "&gain=" + ROUND(Hb*100) + "&red=" + color.RED + "&green=" + color.GREEN + "&blue=" + color.BLUE + "&white=0");


VAR now := NOW();
debounceTimestamp := now.Ticks + transitionTime + 500;
Lettura saturazione
VAR now := NOW();

IF now.Ticks < debounceTimestamp
    RETURN(Sa);
END

INT r := PARSEJSON(jsonStatus, "$.lights[0].red", 1);
INT g := PARSEJSON(jsonStatus, "$.lights[0].green", 1);
INT b := PARSEJSON(jsonStatus, "$.lights[0].blue", 1);
 
VAR HSVColor := RGBTOHSV(r, g, b);
ROUND(HSVColor.Saturation * 100.0) / 100.0;
Scrittura saturazione
IF !ISNAN(Ct)
    RETURN(0);
END

VAR color := HSVTORGB(Hd, Sa, 1);

SENDHTTPREQUEST("light/0?mode=color&transition=" + transitionTime + "&gain=" + ROUND(Hb*100) + "&red=" + color.RED + "&green=" + color.GREEN + "&blue=" + color.BLUE + "&white=0");


VAR now := NOW();
debounceTimestamp := now.Ticks + transitionTime + 500;
Lettura temperatura colore
VAR now := NOW();

IF now.Ticks < debounceTimestamp
    RETURN(Ct);
END

INT value := PARSEJSON(jsonStatus, "$.lights[0].temp", 1);
IF PARSEJSON(jsonStatus, "$.lights[0].white", 1) = 0
    RETURN(NaN);
END
 
Ct
Scrittura temperatura colore
IF Ct = NaN
    RETURN(0);
END

VAR temp := MIN(Ct, 6500);
temp := MAX(temp, 3000);

SENDHTTPREQUEST("light/0?transition=" + transitionTime + "&white=" + ROUND(Hb*100) + "&gain=0");

VAR now := NOW();
debounceTimestamp := now.Ticks + transitionTime + 500;
Connessione: Packet Parser → HTTP
Possibili miglioramenti (7)
  • Light effect — Color mode: effect index (0=off, 1–3=predefined effects), settable via /light/0?effect=N
  • Input State — Physical input state (0/1), available in /status response
  • WiFi RSSI (numeric) — WiFi RSSI in dBm as numeric value — template reads it as string with 'db' suffix
  • Power protection — Max power setting in Watts, available in /settings; read + write possible via /settings?max_power=N
  • OTA firmware update — Trigger OTA firmware update via /ota?update=true
  • Internal device temperature — Internal temperature in C, available in /status response (Gen1 devices)
  • Overheated — Overtemperature flag, boolean, available in /status response

Fonti