TapHome

Shelly Plus RGBW PM

Packet Parser → HTTP
Inviato da
Ultimo aggiornamento: 03. 2026
Shelly Plus RGBW PM

Lo Shelly Plus RGBW PM è un controller LED RGBW Wi-Fi Gen2+ con misurazione della potenza integrata su ogni canale di uscita. Pilota strisce LED o singoli canali LED a 12/24 VDC con un massimo di 4 x 4,5 A per canale (18 A totali). Il dispositivo supporta tre profili commutabili — light (4 dimmer indipendenti), rgb (colore a 3 canali) e rgbw (colore a 3 canali + bianco) — ciascuno espone dispositivi diversi in TapHome. TapHome comunica con il dispositivo localmente via Wi-Fi utilizzando l’API RPC Gen2+ — non è necessaria alcuna connessione cloud.

Il template TapHome è un template HTTP che interroga gli endpoint RPC del dispositivo. Un singolo template gestisce tutti e tre i profili; TapHome rileva il profilo attivo a runtime e attiva i dispositivi corrispondenti.

Configurazione

Parametri di importazione

Il template richiede solo l’indirizzo IP del dispositivo (placeholder predefinito 192.168.0.1). TapHome si connette alla porta 80 e interroga più endpoint RPC per lo stato del sistema e i dati del dispositivo.

A livello di modulo, TapHome interroga /rpc/Sys.GetStatus, /rpc/Sys.GetConfig, /rpc/WiFi.GetStatus e /rpc/PlusRGBWPM.GetConfig con intervallo di 3 secondi. La risposta Sys.GetConfig fornisce il profilo corrente (device.profile) che determina quali endpoint a livello di dispositivo sono attivi.

Selezione del profilo

Lo Shelly Plus RGBW PM opera in uno dei tre profili alla volta. È possibile cambiare il profilo direttamente da TapHome utilizzando l’azione di servizio Set Profile sul modulo, o dall’interfaccia web Shelly.

ProfiloDispositivi in TapHomeCaso d’uso
light4 dimmer indipendenti (O1–O4)Strisce LED monocolore, 4 zone di illuminazione separate
rgb1 luce RGBStrisce LED RGB (miscelazione colori a 3 canali)
rgbw1 luce RGBWStrisce LED RGBW (RGB + canale bianco dedicato)

Dopo il cambio del profilo, il dispositivo si riavvia e TapHome rileva automaticamente il nuovo profilo. I dispositivi appartenenti al profilo inattivo segnaleranno un errore (“Profile is not set to …”) — questo è previsto e può essere ignorato.

Funzionalità del dispositivo

Luce RGB (profilo = rgb)

Quando il dispositivo è impostato sul profilo rgb, TapHome espone un singolo dispositivo luce HSB. Il template legge /rpc/RGB.GetStatus?id=0 per lo stato on/off, luminosità (0–100%) e valori colore RGB, e scrive tramite /rpc/RGB.Set?id=0 per controllare la luce.

Il controllo colore utilizza HSB (Hue-Saturation-Brightness):

  • Hue (0–360 gradi) e Saturation (0,0–1,0) vengono convertiti internamente tra HSB e RGB
  • Brightness (0,0–1,0) viene mappato sul range 0–100% dello Shelly
  • Impostare la luminosità a 0 spegne la luce; qualsiasi luminosità diversa da zero la accende

La luce RGB espone cinque attributi di servizio:

AttributoUnitàDescrizione
TemperaturaCTemperatura interna del dispositivo
Consumo energeticoWhEnergia cumulativa per l’uscita RGB
PotenzaWAssorbimento di potenza istantaneo
TensioneVTensione efficace
CorrenteAAssorbimento di corrente
Luce RGBW (profilo = rgbw)

Quando è impostato il profilo rgbw, TapHome espone una singola luce HSB con un canale bianco aggiuntivo. Il template legge /rpc/RGBW.GetStatus?id=0 e scrive tramite /rpc/RGBW.Set?id=0.

Il profilo RGBW aggiunge un canale bianco (0–255) controllato tramite CCT (temperatura di colore correlata) a 4500 K fissi:

  • Quando il canale bianco è attivo (white != 0), la luminosità viene derivata dal livello di bianco (lineare 0–255 mappato su 0,0–1,0)
  • Quando il canale bianco è inattivo, la luminosità proviene dal campo brightness standard (0–100%)
  • Passare alla modalità temperatura colore in TapHome attiva il canale bianco; passare alla modalità RGB lo disattiva

La luce RGBW espone gli stessi cinque attributi di servizio della luce RGB (temperatura, energia, potenza, tensione, corrente), letti dalla risposta RGBW.GetStatus.

Uscite LED dimmerabili (profilo = light)

Quando è impostato il profilo light, TapHome espone 4 canali dimmer indipendenti (O1–O4), ciascuno controlla un’uscita LED. Ogni canale legge da /rpc/Light.GetStatus?id={0-3} e scrive tramite /rpc/Light.Set?id={0-3}.

La luminosità viene mappata dal range TapHome 0,0–1,0 al range Shelly 0–100%. Impostare il livello a 0 spegne l’uscita; qualsiasi livello diverso da zero la accende e imposta la luminosità.

Ogni canale dimmer espone sei attributi di servizio:

AttributoUnitàDescrizione
TemperaturaCTemperatura interna del dispositivo
Consumo energeticoWhEnergia cumulativa per questo canale
PotenzaWAssorbimento di potenza istantaneo
TensioneVTensione efficace
CorrenteAAssorbimento di corrente
FlagFlag di stato interni

Ogni canale dimmer espone anche un’azione di servizio Calibrate che invia /rpc/Light.Calibrate?id={N} per calibrare l’uscita per il carico LED collegato.

Diagnostica e azioni del modulo

Il modulo espone cinque attributi di servizio per la diagnostica del dispositivo:

AttributoDescrizione
WiFi SSIDNome della rete wireless connessa
Indirizzo IPIndirizzo IP del dispositivo
Intensità segnale (dB)WiFi RSSI
Indirizzo MACIndirizzo hardware del dispositivo
ProfiloProfilo attualmente attivo (light, rgb o rgbw)

A livello di modulo sono disponibili tre azioni di servizio:

AzioneDescrizione
Aggiornamento firmwareAvvia l’aggiornamento OTA al canale firmware stabile
RiavvioRiavvia il dispositivo
Imposta profiloCommuta tra i profili light, rgb e rgbw (il dispositivo si riavvia)

Lo script del modulo controlla anche la disponibilità di aggiornamenti firmware e requisiti di riavvio in sospeso, visualizzando avvisi in TapHome quando viene rilevata una di queste condizioni.

Funzionalità aggiuntive

Lo Shelly Plus RGBW PM tramite la sua API RPC espone anche lo stato dell’ingresso fisico, la configurazione della modalità notturna con limiti di luminosità e pianificazione, la durata di transizione per le modifiche di colore/luminosità e la luminosità minima all’accensione. 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 (shellyplusrgbwpm-AABBCCDDEE.local) invece dell’indirizzo IP — l’IP potrebbe essere cambiato dopo un rinnovo DHCP
  3. Aprire http://{device-ip}/rpc/Shelly.GetDeviceInfo nel browser — se risponde con un JSON, il dispositivo è raggiungibile
  4. Verificare che TapHome CCU e Shelly siano sulla stessa rete / VLAN
  5. Assicurarsi che l’HTTP Digest Authentication sia disabilitata nell’interfaccia web Shelly — TapHome non supporta richieste autenticate
Errore di profilo sui dispositivi

Se un dispositivo mostra “Profile is not set to rgb/rgbw/light” — questo è previsto. Il template contiene dispositivi per tutti e tre i profili, ma solo i dispositivi corrispondenti al profilo attualmente attivo funzioneranno. Gli altri dispositivi segnaleranno questo errore e possono essere ignorati.

Per cambiare il profilo attivo, utilizzare l’azione di servizio Set Profile sul modulo o modificarlo nell’interfaccia web Shelly. Il dispositivo si riavvierà e TapHome rileverà il nuovo profilo entro un ciclo di polling.

I colori appaiono errati in modalità RGB/RGBW
  1. Verificare che il cablaggio della striscia LED corrisponda all’ordine dei morsetti di uscita (R, G, B, W) — fili invertiti producono colori errati
  2. Il template converte internamente tra gli spazi colore HSB e RGB. Se i colori appaiono sbiaditi, controllare il valore di saturazione — bassa saturazione produce toni pastello
  3. In modalità RGBW, il canale bianco e i canali RGB sono controllati indipendentemente. Quando si passa da bianco a colore o viceversa, TapHome invia il comando appropriato per azzerare l’altra modalità
Le uscite dimmer non rispondono in modalità light
  1. Confermare che il profilo è impostato su light — i dispositivi dimmer funzionano solo in modalità light
  2. Verificare che ogni canale abbia un carico LED collegato — canali senza carico potrebbero non riportare lo stato corretto
  3. Provare ad eseguire l’azione Calibrate sul canale — questo ottimizza la curva di dimmeraggio per il carico LED collegato
  4. I dispositivi Gen2+ supportano fino a 6 connessioni HTTP simultanee — evitare il polling simultaneo da più sistemi
La misurazione potenza mostra zero
  1. Confermare che il carico LED è collegato e il canale è acceso
  2. Interrogare manualmente l’endpoint appropriato (/rpc/Light.GetStatus?id=0, /rpc/RGB.GetStatus?id=0 o /rpc/RGBW.GetStatus?id=0) e verificare che apower restituisca un valore diverso da zero
  3. Carichi LED a potenza molto bassa possono riportare 0 W a causa della risoluzione di misurazione — questo è normale per piccoli LED indicatori

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 Plus RGBW PM Modulo
Attributi di servizio
WiFi
Indirizzo IP
Potenza del segnale
MAC
Profilo
Azioni di servizio
Aggiornamento firmware
Riavvio
Imposta profilo
Variabili personalizzate

Shelly Plus RGBW PM

Lettura (modulo)
VAR response := SENDHTTPREQUEST("/rpc/Sys.GetStatus");
IF response.IsSuccess
    Sys.GetStatus := response.Content;
END

response := SENDHTTPREQUEST("/rpc/Sys.GetConfig");
IF response.IsSuccess
    Sys.GetConfig := response.Content;
END

response := SENDHTTPREQUEST("/rpc/WiFi.GetStatus");
IF response.IsSuccess
    WiFi.GetStatus := response.Content;
END

response := SENDHTTPREQUEST("/rpc/PlusRGBWPM.GetConfig");
IF response.IsSuccess
    PlusRGBWPM.GetConfig := response.Content;
END

if ! ISNULL(parsejson(Sys.GetStatus, "available_updates.stable", true))
    addwarning("New firmware update is available");
end

if parsejson(Sys.GetStatus, "restart_required", true)
    addwarning("Restart required");
end
Attributi di servizio
Wifi
PARSEJSON(WiFi.GetStatus, "ssid")
${ipAddress}
PARSEJSON(WiFi.GetStatus, "sta_ip")
${xml_signal_strength} [dB]
PARSEJSON(WiFi.GetStatus, "rssi")
MAC
PARSEJSON(Sys.GetStatus, "mac")
Profile
PARSEJSON(Sys.GetConfig, "$.device.profile");
Azioni di servizio
${xml_update_fw}
VAR response := SENDHTTPREQUEST("/rpc/Shelly.Update?stage=\"stable\"");
IF response.IsSuccess
    return("OK");
else
    return("Error");
END

${restart}
VAR response := SENDHTTPREQUEST("/rpc/Shelly.Reboot");
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Set Profile
Parametri: Profile
VAR response := SENDHTTPREQUEST("/rpc/Shelly.SetProfile?name=\"" + 
switch(prof,
0, "light",
1, "rgb",
2, "rgbw",
"")
+ "\"");
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Luce RGB Luce HSB

Luce colore HSB (profilo rgb) con controllo luminosità, tonalità, saturazione e misurazione potenza per canale

HSB
Attributi di servizio
Temperatura
Consumo energetico
Potenza
Tensione
Corrente

Luce RGB

Lettura (modulo)
if PARSEJSON(Sys.GetConfig, "$.device.profile") != "rgb"
	adderror("Profile is not set to rgb (" + PARSEJSON(Sys.GetConfig, "$.device.profile") + ")");
end

VAR response := SENDHTTPREQUEST("/rpc/RGB.GetStatus?id=" + ID);
IF response.IsSuccess
    RGB.GetStatus := response.Content;
	R := PARSEJSON(RGB.GetStatus, "$.rgb[0]", true);
	G := PARSEJSON(RGB.GetStatus, "$.rgb[1]", true);
	B := PARSEJSON(RGB.GetStatus, "$.rgb[2]", true);    
END

response := SENDHTTPREQUEST("/rpc/RGB.GetConfig?id=" + ID);
IF response.IsSuccess
    RGB.GetConfig := response.Content;
END

if ! ISNULL(parsejson(RGB.GetStatus, "errors", true))
    adderror("Error: " + parsejson(RGB.GetStatus, "errors"));
end
Lettura luminosità
bool output := PARSEJSON(RGB.GetStatus, "$.output", true);
var brightness := PARSEJSON(RGB.GetStatus, "$.brightness", true);

if output
    return(brightness / 100);
else
    return(0);
end
Scrittura luminosità
SENDHTTPREQUEST("/rpc/RGB.Set?id=" + ID + "&on=" + if(St, "true", "false") + "&brightness=" + round(Hb*100.0));
Lettura tonalità
VAR HSVColor := RGBTOHSV(R, G, B);
ROUND(HSVColor.Hue);
Scrittura tonalità
VAR color := HSVTORGB(Hd, Sa, 1);
SENDHTTPREQUEST("/rpc/RGB.Set?id=" + ID + "&rgb=[" + color.RED + "," + color.GREEN + "," + color.BLUE + "]");
Lettura saturazione
VAR HSVColor := RGBTOHSV(R, G, B);
ROUND(HSVColor.Saturation * 100.0) / 100.0;
Scrittura saturazione
VAR color := HSVTORGB(Hd, Sa, 1);
SENDHTTPREQUEST("/rpc/RGB.Set?id=" + ID + "&rgb=[" + color.RED + "," + color.GREEN + "," + color.BLUE + "]");
Attributi di servizio
${device_variable_realtemperature} [°C]
parsejson(RGB.GetStatus, "$.temperature.tC", true)
${device_variable_electricityconsumption} [Wh]
parsejson(RGB.GetStatus, "$.aenergy.total", true)
${device_variable_electricitydemand} [W]
parsejson(RGB.GetStatus, "$.apower", true)
${valueLogType_ElectricVoltage} [V]
parsejson(RGB.GetStatus, "$.voltage", true)
${valueLogType_ElectricCurrent} [A]
parsejson(RGB.GetStatus, "$.current", true)
Luce RGBW Luce HSB

Luce colore+bianco HSB (profilo rgbw) con RGB, canale bianco (CCT a 4500K) e misurazione potenza per canale

HSB
Attributi di servizio
Temperatura
Consumo energetico
Potenza
Tensione
Corrente

Luce RGBW

Lettura (modulo)
if PARSEJSON(Sys.GetConfig, "$.device.profile") != "rgbw"
	adderror("Profile is not set to rgbw (" + PARSEJSON(Sys.GetConfig, "$.device.profile") + ")");
end

VAR response := SENDHTTPREQUEST("/rpc/RGBW.GetStatus?id=" + ID);
IF response.IsSuccess
    RGBW.GetStatus := response.Content;
	R := PARSEJSON(RGBW.GetStatus, "$.rgb[0]", true);
	G := PARSEJSON(RGBW.GetStatus, "$.rgb[1]", true);
	B := PARSEJSON(RGBW.GetStatus, "$.rgb[2]", true);    
END

response := SENDHTTPREQUEST("/rpc/RGBW.GetConfig?id=" + ID);
IF response.IsSuccess
    RGBW.GetConfig := response.Content;
END

if ! ISNULL(parsejson(RGBW.GetStatus, "errors", true))
    adderror("Error: " + parsejson(RGBW.GetStatus, "errors"));
end
Lettura luminosità
bool output := PARSEJSON(RGBW.GetStatus, "$.output", true);
var brightness := PARSEJSON(RGBW.GetStatus, "$.brightness", true);
var white := PARSEJSON(RGBW.GetStatus, "$.white", true);

if output
	if white != 0
		return(linear(white, 0, 0, 255, 1));
	else
    	return(brightness / 100);
    end
else
    return(0);
end
Scrittura luminosità
if isnan(Ct)
	SENDHTTPREQUEST("/rpc/RGBW.Set?id=" + ID + "&on=" + if(St, "true", "false") + "&white=0&brightness=" + round(Hb*100.0));
else
	SENDHTTPREQUEST("/rpc/RGBW.Set?id=" + ID + "&on=" + if(St, "true", "false") + "&brightness=0&white=" + round(linear(Hb, 0, 0, 1, 255)));
end
Lettura tonalità
VAR HSVColor := RGBTOHSV(R, G, B);
ROUND(HSVColor.Hue);
Scrittura tonalità
VAR color := HSVTORGB(Hd, Sa, 1);
SENDHTTPREQUEST("/rpc/RGBW.Set?id=" + ID + "&rgb=[" + color.RED + "," + color.GREEN + "," + color.BLUE + "]");
Lettura saturazione
VAR HSVColor := RGBTOHSV(R, G, B);
ROUND(HSVColor.Saturation * 100.0) / 100.0;
Scrittura saturazione
VAR color := HSVTORGB(Hd, Sa, 1);
SENDHTTPREQUEST("/rpc/RGBW.Set?id=" + ID + "&rgb=[" + color.RED + "," + color.GREEN + "," + color.BLUE + "]");
Lettura temperatura colore
var white := PARSEJSON(RGBW.GetStatus, "$.white", true);
if white != 0 or !isnan(Ct)
	return(4500);
else
	return(NaN);
end
Scrittura temperatura colore
IF !isnan(Ct)
	SENDHTTPREQUEST("/rpc/RGBW.Set?id=" + ID + "&on=" + if(St, "true", "false") + "&brightness=0&white=" + round(linear(Hb, 0, 0, 1, 255)));
end
Attributi di servizio
${device_variable_realtemperature} [°C]
parsejson(RGBW.GetStatus, "$.temperature.tC", true)
${device_variable_electricityconsumption} [Wh]
parsejson(RGBW.GetStatus, "$.aenergy.total", true)
${device_variable_electricitydemand} [W]
parsejson(RGBW.GetStatus, "$.apower", true)
${valueLogType_ElectricVoltage} [V]
parsejson(RGBW.GetStatus, "$.voltage", true)
${valueLogType_ElectricCurrent} [A]
parsejson(RGBW.GetStatus, "$.current", true)
Uscita LED dimmerabile 2 Dimmer

Canale dimmer indipendente 2 (profilo light, id=1) con controllo luminosità, calibrazione e misurazione potenza per canale

numeric
Attributi di servizio
Temperatura
Consumo energetico
Potenza
Tensione
Corrente
Flag
Azioni di servizio
Calibrazione

Uscita LED dimmerabile 2

Lettura (modulo)
if PARSEJSON(Sys.GetConfig, "$.device.profile") != "light"
	adderror("Profile is not set to light (" + PARSEJSON(Sys.GetConfig, "$.device.profile") + ")");
end

VAR response := SENDHTTPREQUEST("/rpc/Light.GetStatus?id=" + ID);
IF response.IsSuccess
    Light.GetStatus := response.Content;
END

response := SENDHTTPREQUEST("/rpc/Light.GetConfig?id=" + ID);
IF response.IsSuccess
    Light.GetConfig := response.Content;
END

if ! ISNULL(parsejson(Light.GetStatus, "errors", true))
    adderror("Error: " + parsejson(Light.GetStatus, "errors"));
end
Lettura livello
bool output := PARSEJSON(Light.GetStatus, "$.output");
var brightness := PARSEJSON(Light.GetStatus, "$.brightness");

if output
    return(brightness / 100);
else
    return(0);
end
Scrittura livello
SENDHTTPREQUEST("/rpc/Light.Set?id=" + ID + "&on=" + if(St, "true", "false") + "&brightness=" + round(Le*100.0));
Attributi di servizio
${device_variable_realtemperature} [°C]
parsejson(Light.GetStatus, "$.temperature.tC", true)
${device_variable_electricityconsumption} [Wh]
parsejson(Light.GetStatus, "$.aenergy.total", true)
${device_variable_electricitydemand} [W]
parsejson(Light.GetStatus, "$.apower", true)
${valueLogType_ElectricVoltage} [V]
parsejson(Light.GetStatus, "$.voltage", true)
${valueLogType_ElectricCurrent} [A]
parsejson(Light.GetStatus, "$.current", true)
Flags
parsejson(Light.GetStatus, "$.flags", true)
Azioni di servizio
${detail_deviceSettings_TemperatureSensor_categoryCalibration}
VAR response := SENDHTTPREQUEST("/rpc/Light.Calibrate?id=" + ID);
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Uscita LED dimmerabile 1 Dimmer

Canale dimmer indipendente 1 (profilo light, id=0) con controllo luminosità, calibrazione e misurazione potenza per canale

numeric
Attributi di servizio
Temperatura
Consumo energetico
Potenza
Tensione
Corrente
Flag
Azioni di servizio
Calibrazione

Uscita LED dimmerabile 1

Lettura (modulo)
if PARSEJSON(Sys.GetConfig, "$.device.profile") != "light"
	adderror("Profile is not set to light (" + PARSEJSON(Sys.GetConfig, "$.device.profile") + ")");
end

VAR response := SENDHTTPREQUEST("/rpc/Light.GetStatus?id=" + ID);
IF response.IsSuccess
    Light.GetStatus := response.Content;
END

response := SENDHTTPREQUEST("/rpc/Light.GetConfig?id=" + ID);
IF response.IsSuccess
    Light.GetConfig := response.Content;
END

if ! ISNULL(parsejson(Light.GetStatus, "errors", true))
    adderror("Error: " + parsejson(Light.GetStatus, "errors"));
end
Lettura livello
bool output := PARSEJSON(Light.GetStatus, "$.output");
var brightness := PARSEJSON(Light.GetStatus, "$.brightness");

if output
    return(brightness / 100);
else
    return(0);
end
Scrittura livello
SENDHTTPREQUEST("/rpc/Light.Set?id=" + ID + "&on=" + if(St, "true", "false") + "&brightness=" + round(Le*100.0));
Attributi di servizio
${device_variable_realtemperature} [°C]
parsejson(Light.GetStatus, "$.temperature.tC", true)
${device_variable_electricityconsumption} [Wh]
parsejson(Light.GetStatus, "$.aenergy.total", true)
${device_variable_electricitydemand} [W]
parsejson(Light.GetStatus, "$.apower", true)
${valueLogType_ElectricVoltage} [V]
parsejson(Light.GetStatus, "$.voltage", true)
${valueLogType_ElectricCurrent} [A]
parsejson(Light.GetStatus, "$.current", true)
Flags
parsejson(Light.GetStatus, "$.flags", true)
Azioni di servizio
${detail_deviceSettings_TemperatureSensor_categoryCalibration}
VAR response := SENDHTTPREQUEST("/rpc/Light.Calibrate?id=" + ID);
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Uscita LED dimmerabile 3 Dimmer

Canale dimmer indipendente 3 (profilo light, id=2) con controllo luminosità, calibrazione e misurazione potenza per canale

numeric
Attributi di servizio
Temperatura
Consumo energetico
Potenza
Tensione
Corrente
Flag
Azioni di servizio
Calibrazione

Uscita LED dimmerabile 3

Lettura (modulo)
if PARSEJSON(Sys.GetConfig, "$.device.profile") != "light"
	adderror("Profile is not set to light (" + PARSEJSON(Sys.GetConfig, "$.device.profile") + ")");
end

VAR response := SENDHTTPREQUEST("/rpc/Light.GetStatus?id=" + ID);
IF response.IsSuccess
    Light.GetStatus := response.Content;
END

response := SENDHTTPREQUEST("/rpc/Light.GetConfig?id=" + ID);
IF response.IsSuccess
    Light.GetConfig := response.Content;
END

if ! ISNULL(parsejson(Light.GetStatus, "errors", true))
    adderror("Error: " + parsejson(Light.GetStatus, "errors"));
end
Lettura livello
bool output := PARSEJSON(Light.GetStatus, "$.output");
var brightness := PARSEJSON(Light.GetStatus, "$.brightness");

if output
    return(brightness / 100);
else
    return(0);
end
Scrittura livello
SENDHTTPREQUEST("/rpc/Light.Set?id=" + ID + "&on=" + if(St, "true", "false") + "&brightness=" + round(Le*100.0));
Attributi di servizio
${device_variable_realtemperature} [°C]
parsejson(Light.GetStatus, "$.temperature.tC", true)
${device_variable_electricityconsumption} [Wh]
parsejson(Light.GetStatus, "$.aenergy.total", true)
${device_variable_electricitydemand} [W]
parsejson(Light.GetStatus, "$.apower", true)
${valueLogType_ElectricVoltage} [V]
parsejson(Light.GetStatus, "$.voltage", true)
${valueLogType_ElectricCurrent} [A]
parsejson(Light.GetStatus, "$.current", true)
Flags
parsejson(Light.GetStatus, "$.flags", true)
Azioni di servizio
${detail_deviceSettings_TemperatureSensor_categoryCalibration}
VAR response := SENDHTTPREQUEST("/rpc/Light.Calibrate?id=" + ID);
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Uscita LED dimmerabile 4 Dimmer

Canale dimmer indipendente 4 (profilo light, id=3) con controllo luminosità, calibrazione e misurazione potenza per canale

numeric
Attributi di servizio
Temperatura
Consumo energetico
Potenza
Tensione
Corrente
Flag
Azioni di servizio
Calibrazione

Uscita LED dimmerabile 4

Lettura (modulo)
if PARSEJSON(Sys.GetConfig, "$.device.profile") != "light"
	adderror("Profile is not set to light (" + PARSEJSON(Sys.GetConfig, "$.device.profile") + ")");
end

VAR response := SENDHTTPREQUEST("/rpc/Light.GetStatus?id=" + ID);
IF response.IsSuccess
    Light.GetStatus := response.Content;
END

response := SENDHTTPREQUEST("/rpc/Light.GetConfig?id=" + ID);
IF response.IsSuccess
    Light.GetConfig := response.Content;
END

if ! ISNULL(parsejson(Light.GetStatus, "errors", true))
    adderror("Error: " + parsejson(Light.GetStatus, "errors"));
end
Lettura livello
bool output := PARSEJSON(Light.GetStatus, "$.output");
var brightness := PARSEJSON(Light.GetStatus, "$.brightness");

if output
    return(brightness / 100);
else
    return(0);
end
Scrittura livello
SENDHTTPREQUEST("/rpc/Light.Set?id=" + ID + "&on=" + if(St, "true", "false") + "&brightness=" + round(Le*100.0));
Attributi di servizio
${device_variable_realtemperature} [°C]
parsejson(Light.GetStatus, "$.temperature.tC", true)
${device_variable_electricityconsumption} [Wh]
parsejson(Light.GetStatus, "$.aenergy.total", true)
${device_variable_electricitydemand} [W]
parsejson(Light.GetStatus, "$.apower", true)
${valueLogType_ElectricVoltage} [V]
parsejson(Light.GetStatus, "$.voltage", true)
${valueLogType_ElectricCurrent} [A]
parsejson(Light.GetStatus, "$.current", true)
Flags
parsejson(Light.GetStatus, "$.flags", true)
Azioni di servizio
${detail_deviceSettings_TemperatureSensor_categoryCalibration}
VAR response := SENDHTTPREQUEST("/rpc/Light.Calibrate?id=" + ID);
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Connessione: Packet Parser → HTTP
Possibili miglioramenti (13)
  • Input State — Physical switch/button input state, available via /rpc/Input.GetStatus?id=0
  • WiFi SSID — Already exposed as module-level service attribute, not as standalone device
  • WiFi Signal Strength — Already exposed as module-level service attribute, not as standalone device
  • IP Address — Already exposed as module-level service attribute, not as standalone device
  • MAC Address — Already exposed as module-level service attribute, not as standalone device
  • Uptime — Seconds since last reboot, available in Sys.GetStatus response
  • RAM Usage — Total and free RAM in bytes, available in Sys.GetStatus response
  • Device Time — Current device time in HH:MM format, available in Sys.GetStatus response
  • Firmware Update — Already implemented as module-level service action
  • Reboot — Already implemented as module-level service action
  • Night Mode — Night mode configuration with brightness limits and schedule, available in component GetConfig
  • Transition Duration — Color/brightness transition time in ms, available as parameter in RGB.Set and RGBW.Set
  • Minimum Brightness on Toggle — Minimum brightness percentage when toggling on, available in Light component config

Fonti