Skip to content

Commit 5411cd6

Browse files
committed
Fix setLightParms() dispatch for Gen2 RGBW PM; fix brightness=0 not turning off
- setLightParms() was missing return after RGBW.Set, throwing for all callers; now dispatches: rgbw->RGBW.Set, inColor->RGB.Set, cctx2->CCT.Set, light->Light.Set - Add ct field to Shelly2RpcRequestParams for CCT.Set - Skip brightness=0 in Gen2 params; on=false handles turn-off (#18215) Signed-off-by: Markus Michels <markus7017@gmail.com>
1 parent 3c72f69 commit 5411cd6

2 files changed

Lines changed: 33 additions & 10 deletions

File tree

bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/api2/Shelly2ApiJsonDTO.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1108,6 +1108,7 @@ public static class Shelly2RpcRequestParams {
11081108

11091109
// Dimmer / Light
11101110
public Integer brightness;
1111+
public Integer ct; // color temperature in Kelvin (CCT.Set)
11111112
@SerializedName("toggle_after")
11121113
public Integer toggleAfter;
11131114
public Integer white;

bundles/org.openhab.binding.shelly/src/main/java/org/openhab/binding/shelly/internal/api2/Shelly2ApiRpc.java

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,12 +1031,24 @@ public void setLightParm(int lightIndex, String parm, String value) throws Shell
10311031

10321032
@Override
10331033
public void setLightParms(int lightIndex, Map<String, String> parameters) throws ShellyApiException {
1034+
ShellyDeviceProfile profile = getProfile();
10341035
Shelly2RpcRequestParams params = new Shelly2RpcRequestParams();
1035-
if (getProfile().isRGBW2) {
1036-
String brightness = parameters.get(SHELLY_COLOR_BRIGHTNESS);
1037-
if (brightness != null) {
1038-
params.brightness = Integer.parseInt(brightness);
1036+
params.id = lightIndex;
1037+
1038+
if (parameters.containsKey(SHELLY_LIGHT_TURN)) {
1039+
params.on = SHELLY_API_ON.equals(parameters.get(SHELLY_LIGHT_TURN));
1040+
}
1041+
// Gen2 firmware rejects brightness=0; on=false handles turn-off
1042+
String brightnessStr = parameters.get(SHELLY_COLOR_BRIGHTNESS);
1043+
if (brightnessStr != null) {
1044+
int b = Integer.parseInt(brightnessStr);
1045+
if (b > 0) {
1046+
params.brightness = b;
10391047
}
1048+
}
1049+
1050+
String rawProfile = getString(profile.device.profile);
1051+
if (SHELLY2_PROFILE_RGBW.equals(rawProfile)) {
10401052
String red = parameters.get(SHELLY_COLOR_RED);
10411053
String green = parameters.get(SHELLY_COLOR_GREEN);
10421054
String blue = parameters.get(SHELLY_COLOR_BLUE);
@@ -1047,14 +1059,24 @@ public void setLightParms(int lightIndex, Map<String, String> parameters) throws
10471059
if (white != null) {
10481060
params.white = Integer.parseInt(white);
10491061
}
1050-
if (parameters.containsKey(SHELLY_LIGHT_TURN)) {
1051-
params.on = SHELLY_API_ON.equals(parameters.get(SHELLY_LIGHT_TURN));
1052-
}
1053-
params.id = lightIndex;
1054-
10551062
apiRequest(SHELLYRPC_METHOD_RGBW_SET, params, String.class);
1063+
} else if (profile.inColor) {
1064+
String red = parameters.get(SHELLY_COLOR_RED);
1065+
String green = parameters.get(SHELLY_COLOR_GREEN);
1066+
String blue = parameters.get(SHELLY_COLOR_BLUE);
1067+
if (red != null && green != null && blue != null) {
1068+
params.rgb = new Integer[] { Integer.parseInt(red), Integer.parseInt(green), Integer.parseInt(blue) };
1069+
}
1070+
apiRequest(SHELLYRPC_METHOD_RGB_SET, params, String.class);
1071+
} else if (SHELLY2_PROFILE_CCTX2.equals(rawProfile)) {
1072+
String ct = parameters.get(SHELLY_COLOR_TEMP);
1073+
if (ct != null) {
1074+
params.ct = Integer.parseInt(ct);
1075+
}
1076+
apiRequest(SHELLYRPC_METHOD_CCT_SET, params, String.class);
1077+
} else {
1078+
apiRequest(SHELLYRPC_METHOD_LIGHT_SET, params, String.class);
10561079
}
1057-
throw new ShellyApiException("API call not implemented");
10581080
}
10591081

10601082
@Override

0 commit comments

Comments
 (0)