mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-01-10 07:02:02 +01:00
[shelly] Add support for Shelly Plus RGBW PM (#17692)
* [shelly] Add support for Shelly Plus RGBW PM Signed-off-by: Jan N. Klug <github@klug.nrw>
This commit is contained in:
parent
10b3f0ae6c
commit
a32ac52ab7
@ -81,7 +81,7 @@ See section [Discovery](#discovery) for details.
|
||||
### Generation 2 Plus series
|
||||
|
||||
| thing-type | Model | Vendor ID |
|
||||
| -------------------- | -------------------------------------------------------- | ---------------------------- |
|
||||
|----------------------|----------------------------------------------------------|------------------------------|
|
||||
| shellyplus1 | Shelly Plus 1 with 1x relay | SNSW-001X16EU, S3SW-001X16EU |
|
||||
| shellyplus1pm | Shelly Plus 1PM with 1x relay + power meter | SNSW-001P16EU, S3SW-001P16EU |
|
||||
| shellyplus2pm-relay | Shelly Plus 2PM with 2x relay + power meter, relay mode | SNSW-002P16EU, SNSW-102P16EU |
|
||||
@ -97,6 +97,7 @@ See section [Discovery](#discovery) for details.
|
||||
| shellyhtg3 | Shelly Plus HT Gen 3 with temperature + humidity sensor | S3SN-0U12A |
|
||||
| shellyplussmoke | Shelly Plus Smoke sensor | SNSN-0031Z |
|
||||
| shellypluswdus | Shelly Plus Wall Dimmer US | SNDM-0013US |
|
||||
| shellyplusrgbwpm | Shelly Plus RGBW PM | SNDC-0D4P10WW |
|
||||
| shellywalldisplay | Shelly Plus Wall Display | SAWD-0A1XX10EU1 |
|
||||
| shellyblugw | SHelly BLU Gateway | SNGW-BT01 |
|
||||
|
||||
|
@ -82,6 +82,7 @@ public class ShellyBindingConstants {
|
||||
THING_TYPE_SHELLYPLUSPLUGS, //
|
||||
THING_TYPE_SHELLYPLUSPLUGUS, //
|
||||
THING_TYPE_SHELLYPLUSDIMMERUS, //
|
||||
THING_TYPE_SHELLYPLUSRGBWPM, //
|
||||
|
||||
// Shelly Wall Display
|
||||
THING_TYPE_SHELLYPLUSWALLDISPLAY, //
|
||||
|
@ -126,7 +126,8 @@ public class ShellyHandlerFactory extends BaseThingHandlerFactory {
|
||||
|| thingType.equals(THING_TYPE_SHELLYRGBW2_COLOR_STR)
|
||||
|| thingType.equals(THING_TYPE_SHELLYRGBW2_WHITE_STR)
|
||||
|| thingType.equals(THING_TYPE_SHELLYRGBW2_WHITE_STR) || thingType.equals(THING_TYPE_SHELLYDUORGBW_STR)
|
||||
|| thingType.equals(THING_TYPE_SHELLYVINTAGE_STR)) {
|
||||
|| thingType.equals(THING_TYPE_SHELLYVINTAGE_STR)
|
||||
|| thingType.equals(THING_TYPE_SHELLYPLUSRGBWPM_STR)) {
|
||||
logger.debug("{}: Create new thing of type {} using ShellyLightHandler", thing.getLabel(),
|
||||
thingTypeUID.toString());
|
||||
handler = new ShellyLightHandler(thing, messages, bindingConfig, thingTable, coapServer, httpClient);
|
||||
|
@ -208,7 +208,8 @@ public class ShellyDeviceProfile {
|
||||
isBulb = thingType.equals(THING_TYPE_SHELLYBULB_STR);
|
||||
isDuo = thingType.equals(THING_TYPE_SHELLYDUO_STR) || thingType.equals(THING_TYPE_SHELLYVINTAGE_STR)
|
||||
|| thingType.equals(THING_TYPE_SHELLYDUORGBW_STR);
|
||||
isRGBW2 = thingType.startsWith(THING_TYPE_SHELLYRGBW2_PREFIX);
|
||||
isRGBW2 = thingType.startsWith(THING_TYPE_SHELLYRGBW2_PREFIX)
|
||||
|| thingType.equals(THING_TYPE_SHELLYPLUSRGBWPM_STR);
|
||||
isLight = isBulb || isDuo || isRGBW2;
|
||||
if (isLight) {
|
||||
minTemp = isBulb ? MIN_COLOR_TEMP_BULB : MIN_COLOR_TEMP_DUO;
|
||||
|
@ -20,6 +20,7 @@ import static org.openhab.binding.shelly.internal.util.ShellyUtils.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Random;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
@ -67,6 +68,7 @@ import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2DeviceS
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2DeviceStatus.Shelly2DeviceStatusResult.Shelly2DeviceStatusPower;
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2DeviceStatus.Shelly2DeviceStatusResult.Shelly2DeviceStatusSmoke;
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2DeviceStatus.Shelly2DeviceStatusResult.Shelly2DeviceStatusTempId;
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2DeviceStatus.Shelly2DeviceStatusResult.Shelly2RGBWStatus;
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2DeviceStatus.Shelly2InputStatus;
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2RelayStatus;
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2RpcBaseMessage;
|
||||
@ -196,6 +198,7 @@ public class Shelly2ApiClient extends ShellyHttpClient {
|
||||
updated |= updateEmStatus(status, result.em11, channelUpdate);
|
||||
updated |= updateRollerStatus(status, result.cover0, channelUpdate);
|
||||
updated |= updateDimmerStatus(status, result.light0, channelUpdate);
|
||||
updated |= updateRGBWStatus(status, result.rgbw0, channelUpdate);
|
||||
if (channelUpdate) {
|
||||
updated |= ShellyComponents.updateMeters(getThing(), status);
|
||||
}
|
||||
@ -587,6 +590,21 @@ public class Shelly2ApiClient extends ShellyHttpClient {
|
||||
}
|
||||
}
|
||||
|
||||
protected void fillRgbwSettings(ShellyDeviceProfile profile, Shelly2GetConfigResult dc) {
|
||||
if (!profile.isRGBW2 || dc.rgbw0 == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<ShellySettingsRgbwLight> lights = profile.settings.lights;
|
||||
if (lights != null) {
|
||||
ShellySettingsRgbwLight ls = lights.get(0);
|
||||
ls.autoOn = dc.rgbw0.autoOnDelay;
|
||||
ls.autoOff = dc.rgbw0.autoOffDelay;
|
||||
ls.name = dc.rgbw0.name;
|
||||
lights.set(0, ls);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean updateDimmerStatus(ShellySettingsStatus status, @Nullable Shelly2DeviceStatusLight value,
|
||||
boolean channelUpdate) throws ShellyApiException {
|
||||
ShellyDeviceProfile profile = getProfile();
|
||||
@ -605,6 +623,27 @@ public class Shelly2ApiClient extends ShellyHttpClient {
|
||||
return channelUpdate ? ShellyComponents.updateDimmers(getThing(), status) : false;
|
||||
}
|
||||
|
||||
private boolean updateRGBWStatus(ShellySettingsStatus status, @Nullable Shelly2RGBWStatus value,
|
||||
boolean channelUpdate) throws ShellyApiException {
|
||||
ShellyDeviceProfile profile = getProfile();
|
||||
if (!profile.isRGBW2 || value == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ShellySettingsLight ds = status.lights.get(0);
|
||||
ds.brightness = Objects.requireNonNullElse(value.brightness, ds.brightness).intValue();
|
||||
if (value.rgb != null) {
|
||||
ds.red = value.rgb[0];
|
||||
ds.green = value.rgb[1];
|
||||
ds.blue = value.rgb[2];
|
||||
}
|
||||
ds.white = Objects.requireNonNullElse(value.white, ds.white);
|
||||
ds.ison = value.output;
|
||||
|
||||
status.lights.set(0, ds);
|
||||
return channelUpdate ? ShellyComponents.updateRGBW(getThing(), status) : false;
|
||||
}
|
||||
|
||||
protected @Nullable Integer getDuration(@Nullable Double timerStartedAt, @Nullable Double timerDuration) {
|
||||
if (timerStartedAt == null || timerDuration == null) {
|
||||
return null;
|
||||
|
@ -54,6 +54,8 @@ public class Shelly2ApiJsonDTO {
|
||||
public static final String SHELLYRPC_METHOD_LIGHT_STATUS = "Light.GetStatus";
|
||||
public static final String SHELLYRPC_METHOD_LIGHT_SET = "Light.Set";
|
||||
public static final String SHELLYRPC_METHOD_LIGHT_SETCONFIG = "Light.SetConfig";
|
||||
public static final String SHELLYRPC_METHOD_RGBW_STATUS = "RGBW.GetStatus";
|
||||
public static final String SHELLYRPC_METHOD_RGBW_SET = "RGBW.Set";
|
||||
public static final String SHELLYRPC_METHOD_LED_SETCONFIG = "WD_UI.SetConfig";
|
||||
public static final String SHELLYRPC_METHOD_WIFIGETCONG = "Wifi.GetConfig";
|
||||
public static final String SHELLYRPC_METHOD_WIFISETCONG = "Wifi.SetConfig";
|
||||
@ -499,6 +501,9 @@ public class Shelly2ApiJsonDTO {
|
||||
@SerializedName("light:0")
|
||||
public Shelly2GetConfigLight light0;
|
||||
|
||||
@SerializedName("rgbw:0")
|
||||
public Shelly2GetConfigLight rgbw0;
|
||||
|
||||
@SerializedName("smoke:0")
|
||||
public Shelly2ConfigSmoke smoke0;
|
||||
}
|
||||
@ -723,6 +728,20 @@ public class Shelly2ApiJsonDTO {
|
||||
public Boolean mute;
|
||||
}
|
||||
|
||||
public static class Shelly2RGBWStatus {
|
||||
public Integer id;
|
||||
public String source;
|
||||
public Boolean output;
|
||||
public Integer[] rgb;
|
||||
public Double brightness;
|
||||
public Integer white;
|
||||
public Shelly2DeviceStatusTemp temperature;
|
||||
public Shelly2Energy aenergy;
|
||||
public Double apower;
|
||||
public Double voltage;
|
||||
public Double current;
|
||||
}
|
||||
|
||||
public Shelly2DeviceStatusBle ble;
|
||||
public Shelly2DeviceStatusCloud cloud;
|
||||
public Shelly2DeviceStatusMqqt mqtt;
|
||||
@ -740,6 +759,9 @@ public class Shelly2ApiJsonDTO {
|
||||
@SerializedName("input:100")
|
||||
public Shelly2InputStatus input100; // Digital Input from Add-On
|
||||
|
||||
@SerializedName("rgbw:0")
|
||||
public Shelly2RGBWStatus rgbw0;
|
||||
|
||||
@SerializedName("switch:0")
|
||||
public Shelly2RelayStatus switch0;
|
||||
@SerializedName("switch:1")
|
||||
@ -965,6 +987,8 @@ public class Shelly2ApiJsonDTO {
|
||||
public Integer brightness;
|
||||
@SerializedName("toggle_after")
|
||||
public Integer toggleAfter;
|
||||
public Integer white;
|
||||
public Integer[] rgb;
|
||||
|
||||
// Shelly.SetAuth
|
||||
public String user;
|
||||
|
@ -68,6 +68,7 @@ import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2DeviceC
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2DeviceSettings;
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2DeviceStatus.Shelly2DeviceStatusLight;
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2DeviceStatus.Shelly2DeviceStatusResult;
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2DeviceStatus.Shelly2DeviceStatusResult.Shelly2RGBWStatus;
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2DeviceStatus.Shelly2DeviceStatusSys.Shelly2DeviceStatusSysAvlUpdate;
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2NotifyEvent;
|
||||
import org.openhab.binding.shelly.internal.api2.Shelly2ApiJsonDTO.Shelly2RpcBaseMessage;
|
||||
@ -306,6 +307,14 @@ public class Shelly2ApiRpc extends Shelly2ApiClient implements ShellyApiInterfac
|
||||
fillDimmerSettings(profile, dc);
|
||||
}
|
||||
profile.status.lights = profile.isBulb ? new ArrayList<>() : null;
|
||||
if (profile.isRGBW2) {
|
||||
ArrayList<ShellySettingsRgbwLight> rgbwLights = new ArrayList<>();
|
||||
rgbwLights.add(new ShellySettingsRgbwLight());
|
||||
profile.settings.lights = rgbwLights;
|
||||
profile.status.lights = new ArrayList<>();
|
||||
profile.status.lights.add(new ShellySettingsLight());
|
||||
fillRgbwSettings(profile, dc);
|
||||
}
|
||||
profile.status.thermostats = profile.isTRV ? new ArrayList<>() : null;
|
||||
|
||||
if (profile.hasBattery) {
|
||||
@ -920,6 +929,26 @@ public class Shelly2ApiRpc extends Shelly2ApiClient implements ShellyApiInterfac
|
||||
|
||||
@Override
|
||||
public ShellyStatusLight getLightStatus() throws ShellyApiException {
|
||||
ShellyDeviceProfile profile = getProfile();
|
||||
if (profile.isRGBW2) {
|
||||
Shelly2RGBWStatus ls = apiRequest(
|
||||
new Shelly2RpcRequest().withMethod(SHELLYRPC_METHOD_RGBW_STATUS).withId(0),
|
||||
Shelly2RGBWStatus.class);
|
||||
ShellyStatusLightChannel lightChannel = new ShellyStatusLightChannel();
|
||||
lightChannel.red = ls.rgb[0];
|
||||
lightChannel.green = ls.rgb[1];
|
||||
lightChannel.blue = ls.rgb[2];
|
||||
lightChannel.white = ls.white;
|
||||
lightChannel.brightness = ls.brightness.intValue();
|
||||
|
||||
ShellyStatusLight status = new ShellyStatusLight();
|
||||
status.lights = new ArrayList<>();
|
||||
status.lights.add(lightChannel);
|
||||
status.ison = ls.output;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
throw new ShellyApiException("API call not implemented");
|
||||
}
|
||||
|
||||
@ -1122,6 +1151,29 @@ public class Shelly2ApiRpc extends Shelly2ApiClient implements ShellyApiInterfac
|
||||
|
||||
@Override
|
||||
public void setLightParms(int lightIndex, Map<String, String> parameters) throws ShellyApiException {
|
||||
Shelly2RpcRequestParams params = new Shelly2RpcRequestParams();
|
||||
if (getProfile().isRGBW2) {
|
||||
String brightness = parameters.get(SHELLY_COLOR_BRIGHTNESS);
|
||||
if (brightness != null) {
|
||||
params.brightness = Integer.parseInt(brightness);
|
||||
}
|
||||
String red = parameters.get(SHELLY_COLOR_RED);
|
||||
String green = parameters.get(SHELLY_COLOR_GREEN);
|
||||
String blue = parameters.get(SHELLY_COLOR_BLUE);
|
||||
if (red != null && green != null && blue != null) {
|
||||
params.rgb = new Integer[] { Integer.parseInt(red), Integer.parseInt(green), Integer.parseInt(blue) };
|
||||
}
|
||||
String white = parameters.get(SHELLY_COLOR_WHITE);
|
||||
if (white != null) {
|
||||
params.white = Integer.parseInt(white);
|
||||
}
|
||||
if (parameters.containsKey(SHELLY_LIGHT_TURN)) {
|
||||
params.on = SHELLY_API_ON.equals(parameters.get(SHELLY_LIGHT_TURN));
|
||||
}
|
||||
params.id = lightIndex;
|
||||
|
||||
apiRequest(SHELLYRPC_METHOD_RGBW_SET, params, String.class);
|
||||
}
|
||||
throw new ShellyApiException("API call not implemented");
|
||||
}
|
||||
|
||||
|
@ -89,6 +89,7 @@ public class ShellyThingCreator {
|
||||
public static final String SHELLYDT_PLUSDIMMER10V = "SNDM-00100WW";
|
||||
public static final String SHELLYDT_PLUSDIMMER0110VG3 = "S3DM-0010WW";
|
||||
public static final String SHELLYDT_PLUSWALLDISPLAY = "SAWD-0A1XX10EU1";
|
||||
public static final String SHELLYDT_PLUSRGBWPM = "SNDC-0D4P10WW";
|
||||
|
||||
// Shelly Pro Series
|
||||
public static final String SHELLYDT_PRO1 = "SPSW-001XE16EU";
|
||||
@ -189,6 +190,7 @@ public class ShellyThingCreator {
|
||||
public static final String THING_TYPE_SHELLYPLUSDIMMERUS_STR = "shellypluswdus";
|
||||
public static final String THING_TYPE_SHELLYPLUSDIMMER10V_STR = "shellyplus10v";
|
||||
public static final String THING_TYPE_SHELLYPLUSDIMMER0110VG3_STR = "shelly0110dimg3";
|
||||
public static final String THING_TYPE_SHELLYPLUSRGBWPM_STR = "shellyplusrgbwpm";
|
||||
|
||||
// Shelly Wall Display
|
||||
public static final String THING_TYPE_SHELLYPLUSWALLDISPLAY_STR = "shellywalldisplay";
|
||||
@ -305,6 +307,8 @@ public class ShellyThingCreator {
|
||||
THING_TYPE_SHELLYPLUSDIMMERUS_STR);
|
||||
public static final ThingTypeUID THING_TYPE_SHELLYPLUSDIMMER10V = new ThingTypeUID(BINDING_ID,
|
||||
THING_TYPE_SHELLYPLUSDIMMER10V_STR);
|
||||
public static final ThingTypeUID THING_TYPE_SHELLYPLUSRGBWPM = new ThingTypeUID(BINDING_ID,
|
||||
THING_TYPE_SHELLYPLUSRGBWPM_STR);
|
||||
|
||||
// Shelly Wall Display
|
||||
public static final ThingTypeUID THING_TYPE_SHELLYPLUSWALLDISPLAY = new ThingTypeUID(BINDING_ID,
|
||||
@ -398,6 +402,7 @@ public class ShellyThingCreator {
|
||||
THING_TYPE_MAPPING.put(SHELLYDT_PLUSDIMMERUS, THING_TYPE_SHELLYPLUSDIMMERUS_STR);
|
||||
THING_TYPE_MAPPING.put(SHELLYDT_PLUSDIMMER10V, THING_TYPE_SHELLYPLUSDIMMER10V_STR);
|
||||
THING_TYPE_MAPPING.put(SHELLYDT_PLUSDIMMER0110VG3, THING_TYPE_SHELLYPLUSDIMMER10V_STR);
|
||||
THING_TYPE_MAPPING.put(SHELLYDT_PLUSRGBWPM, THING_TYPE_SHELLYPLUSRGBWPM_STR);
|
||||
|
||||
// Plus Mini Series
|
||||
THING_TYPE_MAPPING.put(SHELLYDT_MINI1, THING_TYPE_SHELLY1MINI_STR);
|
||||
@ -487,6 +492,7 @@ public class ShellyThingCreator {
|
||||
THING_TYPE_MAPPING.put(THING_TYPE_SHELLYPLUSDIMMERUS_STR, THING_TYPE_SHELLYPLUSDIMMERUS_STR);
|
||||
THING_TYPE_MAPPING.put(THING_TYPE_SHELLYPLUSDIMMER10V_STR, THING_TYPE_SHELLYPLUSDIMMER10V_STR);
|
||||
THING_TYPE_MAPPING.put(THING_TYPE_SHELLYPLUSDIMMER0110VG3_STR, THING_TYPE_SHELLYPLUSDIMMER10V_STR);
|
||||
THING_TYPE_MAPPING.put(THING_TYPE_SHELLYPLUSRGBWPM_STR, THING_TYPE_SHELLYPLUSRGBWPM_STR);
|
||||
|
||||
THING_TYPE_MAPPING.put(THING_TYPE_SHELLYPLUSWALLDISPLAY_STR, THING_TYPE_SHELLYPLUSWALLDISPLAY_STR);
|
||||
|
||||
|
@ -569,6 +569,27 @@ public class ShellyComponents {
|
||||
return updated;
|
||||
}
|
||||
|
||||
public static boolean updateRGBW(ShellyThingInterface thingHandler, ShellySettingsStatus orgStatus)
|
||||
throws ShellyApiException {
|
||||
boolean updated = false;
|
||||
ShellyDeviceProfile profile = thingHandler.getProfile();
|
||||
if (profile.isRGBW2) {
|
||||
if (!thingHandler.areChannelsCreated()) {
|
||||
return false;
|
||||
}
|
||||
ShellySettingsLight light = orgStatus.lights.get(0);
|
||||
ShellyColorUtils col = new ShellyColorUtils();
|
||||
col.setRGBW(light.red, light.green, light.blue, light.white);
|
||||
updated |= thingHandler.updateChannel(CHANNEL_GROUP_COLOR_CONTROL, CHANNEL_COLOR_RED, col.percentRed);
|
||||
updated |= thingHandler.updateChannel(CHANNEL_GROUP_COLOR_CONTROL, CHANNEL_COLOR_GREEN, col.percentGreen);
|
||||
updated |= thingHandler.updateChannel(CHANNEL_GROUP_COLOR_CONTROL, CHANNEL_COLOR_BLUE, col.percentBlue);
|
||||
updated |= thingHandler.updateChannel(CHANNEL_GROUP_COLOR_CONTROL, CHANNEL_COLOR_WHITE, col.percentWhite);
|
||||
updated |= thingHandler.updateChannel(CHANNEL_GROUP_COLOR_CONTROL, CHANNEL_COLOR_PICKER, col.toHSB());
|
||||
|
||||
}
|
||||
return updated;
|
||||
}
|
||||
|
||||
public static boolean updateDimmers(ShellyThingInterface thingHandler, ShellySettingsStatus orgStatus)
|
||||
throws ShellyApiException {
|
||||
boolean updated = false;
|
||||
|
@ -353,7 +353,7 @@ public class ShellyLightHandler extends ShellyBaseHandler {
|
||||
postEvent(ALARM_TYPE_OVERPOWER, false);
|
||||
}
|
||||
|
||||
if (profile.inColor) {
|
||||
if (profile.inColor || (profile.isGen2 && profile.isRGBW2)) {
|
||||
logger.trace("{}: update color settings", thingName);
|
||||
col.setRGBW(getInteger(light.red), getInteger(light.green), getInteger(light.blue),
|
||||
getInteger(light.white));
|
||||
@ -376,7 +376,7 @@ public class ShellyLightHandler extends ShellyBaseHandler {
|
||||
updated |= updateChannel(colorGroup, CHANNEL_COLOR_PICKER, col.toHSB());
|
||||
}
|
||||
|
||||
if (!profile.inColor || profile.isBulb) {
|
||||
if ((!profile.inColor && !profile.isGen2) || profile.isBulb) {
|
||||
String whiteGroup = buildWhiteGroupName(profile, channelId);
|
||||
col.setBrightness(getInteger(light.brightness));
|
||||
updated |= updateChannel(whiteGroup, CHANNEL_BRIGHTNESS + "$Switch", col.power);
|
||||
@ -458,7 +458,7 @@ public class ShellyLightHandler extends ShellyBaseHandler {
|
||||
if (autoOn && (newCol.brightness >= 0)) {
|
||||
parms.put(SHELLY_LIGHT_TURN, profile.inColor || newCol.brightness > 0 ? SHELLY_API_ON : SHELLY_API_OFF);
|
||||
}
|
||||
if (profile.inColor) {
|
||||
if (profile.inColor || (profile.isGen2 && profile.isRGBW2)) {
|
||||
if (oldCol.red != newCol.red || oldCol.green != newCol.green || oldCol.blue != newCol.blue
|
||||
|| oldCol.white != newCol.white) {
|
||||
logger.debug("{}: Setting RGBW to {}/{}/{}/{}", thingName, newCol.red, newCol.green, newCol.blue,
|
||||
|
@ -431,14 +431,14 @@ public class ShellyChannelDefinitions {
|
||||
List<ShellySettingsRgbwLight> lights = profile.settings.lights;
|
||||
if (lights != null) {
|
||||
ShellySettingsRgbwLight light = lights.get(idx);
|
||||
String whiteGroup = profile.isRGBW2 ? group : CHANNEL_GROUP_WHITE_CONTROL;
|
||||
String whiteGroup = profile.isRGBW2 && !profile.isGen2 ? group : CHANNEL_GROUP_WHITE_CONTROL;
|
||||
// Create power channel in color mode and brightness channel in white mode
|
||||
addChannel(thing, add, profile.inColor, group, CHANNEL_LIGHT_POWER);
|
||||
addChannel(thing, add, light.autoOn != null, group, CHANNEL_TIMER_AUTOON);
|
||||
addChannel(thing, add, light.autoOff != null, group, CHANNEL_TIMER_AUTOOFF);
|
||||
addChannel(thing, add, status.hasTimer != null, group, CHANNEL_TIMER_ACTIVE);
|
||||
addChannel(thing, add, light.brightness != null, whiteGroup, CHANNEL_BRIGHTNESS);
|
||||
addChannel(thing, add, light.temp != null, whiteGroup, CHANNEL_COLOR_TEMP);
|
||||
addChannel(thing, add, status.brightness != null, whiteGroup, CHANNEL_BRIGHTNESS);
|
||||
addChannel(thing, add, status.temp != null, whiteGroup, CHANNEL_COLOR_TEMP);
|
||||
}
|
||||
|
||||
return add;
|
||||
|
@ -88,7 +88,7 @@ thing-type.shelly.shellygas.description = Shelly Gas (Gas Sensor - Gas Leak Dete
|
||||
thing-type.shelly.shellytrv.description = Shelly TRV (Radiator value, battery powered)
|
||||
thing-type.shelly.shellyix3.description = Shelly ix3 (Activation Device with 3 inputs)
|
||||
thing-type.shelly.shellypludht.description = Shelly Plus HT - Temperature and Humidity Sensor
|
||||
|
||||
thing-type.shelly.shellyplusrgbw.description = Shelly Plus RGBW PM - LED Controller with Power Meter
|
||||
# Plus Devices
|
||||
thing-type.shelly.shellyplus1.description = Shelly Plus 1 (Single Relay Switch)
|
||||
thing-type.shelly.shellyplus1pm.description = Shelly Plus 1PM - Single Relay Switch with Power Meter
|
||||
@ -102,6 +102,7 @@ thing-type.shelly.shellyplushtg3.description = Shelly Plus HT Gen 3 - Humidity a
|
||||
thing-type.shelly.shellyplussmoke.description = Shelly Plus Smoke - Smoke Detector with Alarm
|
||||
thing-type.shelly.shellypluswdus.description = Shelly Wall Dimmer US Device
|
||||
thing-type.shelly.shellyplus10v.description = Shelly Plus Dimmer 10V
|
||||
thing-type.shelly.shellyplusrgbwpm-color.description = Shelly Plus RGBW PM - RGBW Dimmer with Power Meter
|
||||
|
||||
# Plus Mini Devices
|
||||
thing-type.shelly.shelly1mini.description = Shelly Plus Mini 1 - Single Relay Switch
|
||||
@ -188,12 +189,16 @@ channel-group-type.shelly.duoControl.label = Light Control
|
||||
channel-group-type.shelly.duoControl.description = Control your light
|
||||
channel-group-type.shelly.rgbw2ColorControl.label = LED Strip Control (RGBW)
|
||||
channel-group-type.shelly.rgbw2ColorControl.description = Control your LED stripes in color mode
|
||||
channel-group-type.shelly.rgbwpmColorControl.label = LED Strip Control (RGBW)
|
||||
channel-group-type.shelly.rgbwpmColorControl.description = Control your LED stripes
|
||||
channel-group-type.shelly.rgbw2WhiteControl.label = LED Strip Control (White)
|
||||
channel-group-type.shelly.rgbw2WhiteControl.description = Control your LED stripes in white mode
|
||||
channel-group-type.shelly.colorSettingsBulb.label = Colors
|
||||
channel-group-type.shelly.colorSettingsBulb.description = Light colors
|
||||
channel-group-type.shelly.colorSettingsRGBW2.label = Colors
|
||||
channel-group-type.shelly.colorSettingsRGBW2.description = Light colors
|
||||
channel-group-type.shelly.colorSettingsRGBWpm.label = Colors
|
||||
channel-group-type.shelly.colorSettingsRGBWpm.description = Light colors
|
||||
channel-group-type.shelly.whiteSettings.label = White settings
|
||||
channel-group-type.shelly.whiteSettings.description = Adjust colors when device is in white mode
|
||||
channel-group-type.shelly.whiteSettingsSimple.label = White settings
|
||||
|
@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<thing:thing-descriptions bindingId="shelly"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||
|
||||
<thing-type id="shellyplusrgbwpm">
|
||||
<label>Shelly Plus RGBW</label>
|
||||
<description>@text/thing-type.shelly.shellyplusrgbw.description</description>
|
||||
<category>ColorLight</category>
|
||||
<channel-groups>
|
||||
<channel-group id="control" typeId="rgbwpmColorControl"/>
|
||||
<channel-group id="color" typeId="colorSettingsRGBWpm"/>
|
||||
<channel-group id="meter" typeId="meter"/>
|
||||
<channel-group id="device" typeId="deviceStatus"/>
|
||||
</channel-groups>
|
||||
|
||||
<representation-property>serviceName</representation-property>
|
||||
<config-description-ref uri="thing-type:shelly:rgbw2"/>
|
||||
</thing-type>
|
||||
|
||||
<channel-group-type id="rgbwpmColorControl">
|
||||
<label>@text/channel-group-type.shelly.rgbwpmColorControl.label</label>
|
||||
<description>@text/channel-group-type.shelly.rgbwpmColorControl.description</description>
|
||||
</channel-group-type>
|
||||
|
||||
<channel-group-type id="colorSettingsRGBWpm">
|
||||
<label>@text/channel-group-type.shelly.colorSettingsRGBWpm.label</label>
|
||||
<description>@text/channel-group-type.shelly.colorSettingsRGBWpm.description</description>
|
||||
<channels>
|
||||
<channel id="hsb" typeId="system.color"/>
|
||||
<channel id="full" typeId="colorFull"/>
|
||||
<channel id="red" typeId="colorRed"/>
|
||||
<channel id="green" typeId="colorGreen"/>
|
||||
<channel id="blue" typeId="colorBlue"/>
|
||||
<channel id="white" typeId="colorWhite"/>
|
||||
</channels>
|
||||
</channel-group-type>
|
||||
|
||||
</thing:thing-descriptions>
|
Loading…
Reference in New Issue
Block a user