TapHome

Shelly Plus RGBW PM

Packet Parser → HTTP
Dodane przez
Ostatnia aktualizacja: 03. 2026
Shelly Plus RGBW PM

Shelly Plus RGBW PM to sterownik LED RGBW Wi-Fi Gen2+ z wbudowanym pomiarem mocy na każdym kanale wyjściowym. Napędza taśmy LED lub pojedyncze kanały LED przy 12/24 VDC z maksymalnie 4 x 4,5 A na kanał (łącznie 18 A). Urządzenie obsługuje trzy przełączalne profile — light (4 niezależne ściemniacze), rgb (3-kanałowy kolor) i rgbw (3-kanałowy kolor + biały) — każdy udostępnia różne urządzenia w TapHome. TapHome komunikuje się z urządzeniem lokalnie przez Wi-Fi za pomocą Gen2+ RPC API — połączenie z chmurą nie jest wymagane.

Szablon TapHome to szablon HTTP, który odpytuje endpointy RPC urządzenia. Jeden szablon obsługuje wszystkie trzy profile; TapHome wykrywa aktywny profil w czasie działania i aktywuje odpowiednie urządzenia.

Konfiguracja

Parametry importu

Szablon wymaga jedynie adresu IP urządzenia (domyślny placeholder 192.168.0.1). TapHome łączy się na porcie 80 i odpytuje wiele endpointów RPC dla stanu systemu i danych urządzenia.

Na poziomie modułu TapHome odpytuje /rpc/Sys.GetStatus, /rpc/Sys.GetConfig, /rpc/WiFi.GetStatus i /rpc/PlusRGBWPM.GetConfig w 3-sekundowym interwale. Odpowiedź Sys.GetConfig podaje aktualny profil (device.profile), który określa, które endpointy na poziomie urządzenia są aktywne.

Wybór profilu

Shelly Plus RGBW PM pracuje w jednym z trzech profili naraz. Profil można zmienić bezpośrednio z TapHome za pomocą akcji serwisowej Set Profile na module lub z interfejsu web Shelly.

ProfilUrządzenia w TapHomeZastosowanie
light4 niezależne ściemniacze (O1–O4)Jednokolorowe taśmy LED, 4 oddzielne strefy oświetlenia
rgb1 światło RGBTaśmy LED RGB (3-kanałowe mieszanie kolorów)
rgbw1 światło RGBWTaśmy LED RGBW (RGB + dedykowany kanał biały)

Po przełączeniu profilu urządzenie restartuje się, a TapHome automatycznie wykrywa nowy profil. Urządzenia należące do nieaktywnego profilu będą zgłaszać błąd (“Profile is not set to …”) — to jest oczekiwane i można to zignorować.

Funkcje urządzenia

Światło RGB (profil = rgb)

Gdy urządzenie jest ustawione na profil rgb, TapHome udostępnia jedno urządzenie światła HSB. Szablon odczytuje /rpc/RGB.GetStatus?id=0 dla stanu wł./wył., jasności (0–100%) i wartości kolorów RGB, a zapisuje przez /rpc/RGB.Set?id=0 do sterowania światłem.

Sterowanie kolorem używa HSB (Hue-Saturation-Brightness):

  • Hue (0–360 stopni) i Saturation (0,0–1,0) są konwertowane wewnętrznie między HSB i RGB
  • Brightness (0,0–1,0) jest mapowany na zakres Shelly 0–100%
  • Ustawienie jasności na 0 wyłącza światło; każda niezerowa jasność je włącza

Światło RGB udostępnia pięć atrybutów serwisowych:

AtrybutJednostkaOpis
TemperaturaCWewnętrzna temperatura urządzenia
Zużycie energiiWhSkumulowana energia dla wyjścia RGB
MocWChwilowy pobór mocy
NapięcieVNapięcie skuteczne
PrądAPobór prądu
Światło RGBW (profil = rgbw)

Gdy ustawiony jest profil rgbw, TapHome udostępnia jedno światło HSB z dodatkowym kanałem białym. Szablon odczytuje /rpc/RGBW.GetStatus?id=0 i zapisuje przez /rpc/RGBW.Set?id=0.

Profil RGBW dodaje kanał biały (0–255) sterowany przez CCT (skorelowana temperatura barwowa) przy stałych 4500 K:

  • Gdy kanał biały jest aktywny (white != 0), jasność jest wyprowadzana z poziomu bieli (liniowo 0–255 mapowane na 0,0–1,0)
  • Gdy kanał biały jest nieaktywny, jasność pochodzi ze standardowego pola brightness (0–100%)
  • Przełączenie na tryb temperatury barwowej w TapHome aktywuje kanał biały; przełączenie na tryb RGB go dezaktywuje

Światło RGBW udostępnia te same pięć atrybutów serwisowych co światło RGB (temperatura, energia, moc, napięcie, prąd), odczytywanych z odpowiedzi RGBW.GetStatus.

Ściemnialne wyjścia LED (profil = light)

Gdy ustawiony jest profil light, TapHome udostępnia 4 niezależne kanały ściemniaczy (O1–O4), z których każdy steruje jednym wyjściem LED. Każdy kanał odczytuje z /rpc/Light.GetStatus?id={0-3} i zapisuje przez /rpc/Light.Set?id={0-3}.

Jasność jest mapowana z zakresu TapHome 0,0–1,0 na zakres Shelly 0–100%. Ustawienie poziomu na 0 wyłącza wyjście; każdy niezerowy poziom włącza je i ustawia jasność.

Każdy kanał ściemniacza udostępnia sześć atrybutów serwisowych:

AtrybutJednostkaOpis
TemperaturaCWewnętrzna temperatura urządzenia
Zużycie energiiWhSkumulowana energia dla tego kanału
MocWChwilowy pobór mocy
NapięcieVNapięcie skuteczne
PrądAPobór prądu
FlagiWewnętrzne flagi statusu

Każdy kanał ściemniacza udostępnia również akcję serwisową Calibrate, która wysyła /rpc/Light.Calibrate?id={N} w celu kalibracji wyjścia dla podłączonego obciążenia LED.

Diagnostyka i akcje modułu

Moduł udostępnia pięć atrybutów serwisowych do diagnostyki urządzenia:

AtrybutOpis
WiFi SSIDNazwa połączonej sieci bezprzewodowej
Adres IPAdres IP urządzenia
Siła sygnału (dB)WiFi RSSI
Adres MACAdres sprzętowy urządzenia
ProfilAktualnie aktywny profil (light, rgb lub rgbw)

Na poziomie modułu dostępne są trzy akcje serwisowe:

AkcjaOpis
Aktualizacja firmwareUruchamia aktualizację OTA do stabilnego kanału firmware
RestartRestartuje urządzenie
Ustaw profilPrzełącza między profilami light, rgb i rgbw (urządzenie restartuje się)

Skrypt modułu sprawdza również dostępne aktualizacje firmware i oczekujące wymagania restartu, wyświetlając ostrzeżenia w TapHome, gdy zostanie wykryty którykolwiek z tych warunków.

Dodatkowe funkcje

Shelly Plus RGBW PM przez swoje RPC API udostępnia również stan wejścia fizycznego, konfigurację trybu nocnego z limitami jasności i harmonogramem, czas trwania przejścia dla zmian koloru/jasności oraz minimalną jasność przy włączeniu. Te funkcje mogą zostać dodane w przyszłej aktualizacji szablonu.

Rozwiązywanie problemów

Urządzenie nie odpowiada
  1. Sprawdź, czy Shelly jest podłączony do Wi-Fi i ma prawidłowy adres IP
  2. Spróbuj użyć nazwy hosta mDNS (shellyplusrgbwpm-AABBCCDDEE.local) zamiast adresu IP — IP mógł się zmienić po odnowieniu DHCP
  3. Otwórz http://{device-ip}/rpc/Shelly.GetDeviceInfo w przeglądarce — jeśli odpowiada JSON, urządzenie jest dostępne
  4. Sprawdź, czy TapHome CCU i Shelly są w tej samej sieci / VLAN
  5. Upewnij się, że HTTP Digest Authentication jest wyłączone w interfejsie web Shelly — TapHome nie obsługuje uwierzytelnionych żądań
Błąd profilu na urządzeniach

Jeśli urządzenie pokazuje “Profile is not set to rgb/rgbw/light” — to jest oczekiwane. Szablon zawiera urządzenia dla wszystkich trzech profili, ale działać będą tylko urządzenia odpowiadające aktualnie aktywnemu profilowi. Pozostałe urządzenia będą zgłaszać ten błąd i można je zignorować.

Aby przełączyć aktywny profil, użyj akcji serwisowej Set Profile na module lub zmień go w interfejsie web Shelly. Urządzenie zrestartuje się, a TapHome wykryje nowy profil w ciągu jednego cyklu odpytywania.

Kolory wyświetlają się nieprawidłowo w trybie RGB/RGBW
  1. Sprawdź, czy okablowanie taśmy LED odpowiada kolejności zacisków wyjściowych (R, G, B, W) — zamienione przewody dają nieprawidłowe kolory
  2. Szablon konwertuje wewnętrznie między przestrzeniami kolorów HSB i RGB. Jeśli kolory wyglądają na wyblakłe, sprawdź wartość nasycenia — niskie nasycenie daje odcienie pastelowe
  3. W trybie RGBW kanał biały i kanały RGB są sterowane niezależnie. Przy przełączaniu z białego na kolor lub odwrotnie TapHome wysyła odpowiednie polecenie do wyzerowania drugiego trybu
Wyjścia ściemniacza nie reagują w trybie light
  1. Potwierdź, że profil jest ustawiony na light — urządzenia ściemniaczy działają tylko w trybie light
  2. Sprawdź, czy każdy kanał ma podłączone obciążenie LED — kanały bez obciążenia mogą nie raportować prawidłowego stanu
  3. Spróbuj uruchomić akcję Calibrate na kanale — optymalizuje to krzywą ściemniania dla podłączonego obciążenia LED
  4. Urządzenia Gen2+ obsługują do 6 jednoczesnych połączeń HTTP — unikaj jednoczesnego odpytywania z wielu systemów
Pomiar mocy pokazuje zero
  1. Potwierdź, że obciążenie LED jest podłączone i kanał jest włączony
  2. Odpytaj ręcznie odpowiedni endpoint (/rpc/Light.GetStatus?id=0, /rpc/RGB.GetStatus?id=0 lub /rpc/RGBW.GetStatus?id=0) i zweryfikuj, że apower zwraca wartość różną od zera
  3. Obciążenia LED o bardzo niskiej mocy mogą raportować 0 W ze względu na rozdzielczość pomiaru — to jest normalne dla małych diod sygnalizacyjnych

Jak zainstalować w TapHome

Wymagania wstępne

  • Urządzenie Shelly zainstalowane i włączone
  • Lokalna sieć Wi-Fi (2,4 GHz)
  • TapHome CCU w tej samej sieci

Krok 1 — Podłącz Shelly do Wi-Fi

Opcja A — Aplikacja Shelly (zalecana):

  1. Pobierz aplikację Shelly (iOS / Android)
  2. Dotknij +Add Device i postępuj zgodnie z kreatorem parowania Bluetooth
  3. Wprowadź dane logowania Wi-Fi, gdy zostaniesz o to poproszony

Opcja B — Tryb AP (bez aplikacji):

  1. Przy pierwszym uruchomieniu urządzenie tworzy hotspot: ShellyXXX-AABBCCDDEE
  2. Połącz telefon/PC z tym hotspotem
  3. Otwórz http://192.168.33.1Internet & SecurityWi-Fi Mode - Client
  4. Wprowadź SSID i hasło → Save

Shelly obsługuje tylko sieci 2,4 GHz. Sieci 5 GHz nie pojawią się podczas skanowania.

Krok 2 — Znajdź adres IP

Po połączeniu z Wi-Fi znajdź przypisany adres IP za pomocą jednej z poniższych metod:

  • Aplikacja Shelly: Szczegóły urządzenia → Device info → Adres IP
  • Interfejs webowy Shelly: Połącz się z AP urządzenia przed konfiguracją Wi-Fi — IP zostanie wyświetlone po zapisaniu
  • Tabela DHCP routera: Szukaj nazwy hosta takiej jak shelly1pm-AABBCCDDEE
  • mDNS: Pinguj shelly<model>-<mac>.local (np. shelly1pm-AABBCCDDEE.local) z tej samej sieci

Przypisz urządzeniu Shelly statyczny IP (rezerwację DHCP) w routerze, aby adres nie zmieniał się po ponownym uruchomieniu routera.

Krok 3 — Konfiguracja w TapHome

  1. W TapHome dodaj nowy moduł Packet Parser (HTTP)
  2. IP Address: wprowadź IP z kroku 2 (np. 192.168.1.50)
  3. Port: 80 (domyślny, nie wymaga zmiany)
  4. Zaimportuj szablon — TapHome będzie okresowo odpytywać /status w celu odczytu stanu urządzenia

Uwierzytelnianie HTTP jest domyślnie wyłączone na urządzeniach Shelly. Jeśli włączyłeś ochronę logowaniem, TapHome obecnie nie obsługuje HTTP Basic Auth — pozostaw uwierzytelnianie wyłączone dla integracji z TapHome.

Dostępne urządzenia

Shelly Plus RGBW PM Moduł
Atrybuty serwisowe
WiFi
Adres IP
Siła sygnału
MAC
Profil
Akcje serwisowe
Aktualizacja firmware
Restart
Ustaw profil
Zmienne niestandardowe

Shelly Plus RGBW PM

Odczyt (moduł)
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
Atrybuty serwisowe
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");
Akcje serwisowe
${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
Parametry: 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
Światło RGB Światło HSB

Światło kolorowe HSB (profil rgb) ze sterowaniem jasnością, odcieniem, nasyceniem i pomiarem mocy na kanał

HSB
Atrybuty serwisowe
Temperatura
Zużycie energii
Moc
Napięcie
Prąd

Światło RGB

Odczyt (moduł)
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
Odczyt jasności
bool output := PARSEJSON(RGB.GetStatus, "$.output", true);
var brightness := PARSEJSON(RGB.GetStatus, "$.brightness", true);

if output
    return(brightness / 100);
else
    return(0);
end
Zapis jasności
SENDHTTPREQUEST("/rpc/RGB.Set?id=" + ID + "&on=" + if(St, "true", "false") + "&brightness=" + round(Hb*100.0));
Odczyt odcienia
VAR HSVColor := RGBTOHSV(R, G, B);
ROUND(HSVColor.Hue);
Zapis odcienia
VAR color := HSVTORGB(Hd, Sa, 1);
SENDHTTPREQUEST("/rpc/RGB.Set?id=" + ID + "&rgb=[" + color.RED + "," + color.GREEN + "," + color.BLUE + "]");
Odczyt nasycenia
VAR HSVColor := RGBTOHSV(R, G, B);
ROUND(HSVColor.Saturation * 100.0) / 100.0;
Zapis nasycenia
VAR color := HSVTORGB(Hd, Sa, 1);
SENDHTTPREQUEST("/rpc/RGB.Set?id=" + ID + "&rgb=[" + color.RED + "," + color.GREEN + "," + color.BLUE + "]");
Atrybuty serwisowe
${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)
Światło RGBW Światło HSB

Światło kolorowe+białe HSB (profil rgbw) z RGB, kanałem białym (CCT przy 4500K) i pomiarem mocy na kanał

HSB
Atrybuty serwisowe
Temperatura
Zużycie energii
Moc
Napięcie
Prąd

Światło RGBW

Odczyt (moduł)
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
Odczyt jasności
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
Zapis jasności
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
Odczyt odcienia
VAR HSVColor := RGBTOHSV(R, G, B);
ROUND(HSVColor.Hue);
Zapis odcienia
VAR color := HSVTORGB(Hd, Sa, 1);
SENDHTTPREQUEST("/rpc/RGBW.Set?id=" + ID + "&rgb=[" + color.RED + "," + color.GREEN + "," + color.BLUE + "]");
Odczyt nasycenia
VAR HSVColor := RGBTOHSV(R, G, B);
ROUND(HSVColor.Saturation * 100.0) / 100.0;
Zapis nasycenia
VAR color := HSVTORGB(Hd, Sa, 1);
SENDHTTPREQUEST("/rpc/RGBW.Set?id=" + ID + "&rgb=[" + color.RED + "," + color.GREEN + "," + color.BLUE + "]");
Odczyt temperatury barwowej
var white := PARSEJSON(RGBW.GetStatus, "$.white", true);
if white != 0 or !isnan(Ct)
	return(4500);
else
	return(NaN);
end
Zapis temperatury barwowej
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
Atrybuty serwisowe
${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)
Ściemnialne wyjście LED 2 Ściemniacz

Niezależny kanał ściemniacza 2 (profil light, id=1) ze sterowaniem jasnością, kalibracją i pomiarem mocy na kanał

numeric
Atrybuty serwisowe
Temperatura
Zużycie energii
Moc
Napięcie
Prąd
Flagi
Akcje serwisowe
Kalibracja

Ściemnialne wyjście LED 2

Odczyt (moduł)
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
Odczyt poziomu
bool output := PARSEJSON(Light.GetStatus, "$.output");
var brightness := PARSEJSON(Light.GetStatus, "$.brightness");

if output
    return(brightness / 100);
else
    return(0);
end
Zapis poziomu
SENDHTTPREQUEST("/rpc/Light.Set?id=" + ID + "&on=" + if(St, "true", "false") + "&brightness=" + round(Le*100.0));
Atrybuty serwisowe
${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)
Akcje serwisowe
${detail_deviceSettings_TemperatureSensor_categoryCalibration}
VAR response := SENDHTTPREQUEST("/rpc/Light.Calibrate?id=" + ID);
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Ściemnialne wyjście LED 1 Ściemniacz

Niezależny kanał ściemniacza 1 (profil light, id=0) ze sterowaniem jasnością, kalibracją i pomiarem mocy na kanał

numeric
Atrybuty serwisowe
Temperatura
Zużycie energii
Moc
Napięcie
Prąd
Flagi
Akcje serwisowe
Kalibracja

Ściemnialne wyjście LED 1

Odczyt (moduł)
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
Odczyt poziomu
bool output := PARSEJSON(Light.GetStatus, "$.output");
var brightness := PARSEJSON(Light.GetStatus, "$.brightness");

if output
    return(brightness / 100);
else
    return(0);
end
Zapis poziomu
SENDHTTPREQUEST("/rpc/Light.Set?id=" + ID + "&on=" + if(St, "true", "false") + "&brightness=" + round(Le*100.0));
Atrybuty serwisowe
${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)
Akcje serwisowe
${detail_deviceSettings_TemperatureSensor_categoryCalibration}
VAR response := SENDHTTPREQUEST("/rpc/Light.Calibrate?id=" + ID);
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Ściemnialne wyjście LED 3 Ściemniacz

Niezależny kanał ściemniacza 3 (profil light, id=2) ze sterowaniem jasnością, kalibracją i pomiarem mocy na kanał

numeric
Atrybuty serwisowe
Temperatura
Zużycie energii
Moc
Napięcie
Prąd
Flagi
Akcje serwisowe
Kalibracja

Ściemnialne wyjście LED 3

Odczyt (moduł)
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
Odczyt poziomu
bool output := PARSEJSON(Light.GetStatus, "$.output");
var brightness := PARSEJSON(Light.GetStatus, "$.brightness");

if output
    return(brightness / 100);
else
    return(0);
end
Zapis poziomu
SENDHTTPREQUEST("/rpc/Light.Set?id=" + ID + "&on=" + if(St, "true", "false") + "&brightness=" + round(Le*100.0));
Atrybuty serwisowe
${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)
Akcje serwisowe
${detail_deviceSettings_TemperatureSensor_categoryCalibration}
VAR response := SENDHTTPREQUEST("/rpc/Light.Calibrate?id=" + ID);
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Ściemnialne wyjście LED 4 Ściemniacz

Niezależny kanał ściemniacza 4 (profil light, id=3) ze sterowaniem jasnością, kalibracją i pomiarem mocy na kanał

numeric
Atrybuty serwisowe
Temperatura
Zużycie energii
Moc
Napięcie
Prąd
Flagi
Akcje serwisowe
Kalibracja

Ściemnialne wyjście LED 4

Odczyt (moduł)
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
Odczyt poziomu
bool output := PARSEJSON(Light.GetStatus, "$.output");
var brightness := PARSEJSON(Light.GetStatus, "$.brightness");

if output
    return(brightness / 100);
else
    return(0);
end
Zapis poziomu
SENDHTTPREQUEST("/rpc/Light.Set?id=" + ID + "&on=" + if(St, "true", "false") + "&brightness=" + round(Le*100.0));
Atrybuty serwisowe
${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)
Akcje serwisowe
${detail_deviceSettings_TemperatureSensor_categoryCalibration}
VAR response := SENDHTTPREQUEST("/rpc/Light.Calibrate?id=" + ID);
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Połączenie: Packet Parser → HTTP
Możliwe ulepszenia (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

Źródła