}
}
+ boolean off = false;
if (jsonState.state != null) {
onOffValue.update(onOffValue.parseCommand(new StringType(jsonState.state)));
+ off = onOffValue.getChannelState().equals(OnOffType.OFF);
if (brightnessValue.getChannelState() instanceof UnDefType) {
- brightnessValue.update(brightnessValue.parseCommand((OnOffType) onOffValue.getChannelState()));
+ brightnessValue.update(off ? PercentType.ZERO : PercentType.HUNDRED);
}
if (colorValue.getChannelState() instanceof UnDefType) {
- colorValue.update(colorValue.parseCommand((OnOffType) onOffValue.getChannelState()));
+ colorValue.update(off ? HSBType.BLACK : HSBType.WHITE);
}
}
+ PercentType brightness;
+ if (off) {
+ brightness = PercentType.ZERO;
+ } else if (brightnessValue.getChannelState() instanceof PercentType percentValue) {
+ brightness = percentValue;
+ } else {
+ brightness = PercentType.HUNDRED;
+ }
+
if (jsonState.brightness != null) {
- brightnessValue.update(
- brightnessValue.parseCommand(new DecimalType(Objects.requireNonNull(jsonState.brightness))));
+ if (!off) {
+ brightness = (PercentType) brightnessValue
+ .parseMessage(new DecimalType(Objects.requireNonNull(jsonState.brightness)));
+ }
+ brightnessValue.update(brightness);
if (colorValue.getChannelState() instanceof HSBType) {
HSBType color = (HSBType) colorValue.getChannelState();
- colorValue.update(new HSBType(color.getHue(), color.getSaturation(),
- (PercentType) brightnessValue.getChannelState()));
+ colorValue.update(new HSBType(color.getHue(), color.getSaturation(), brightness));
} else {
- colorValue.update(new HSBType(DecimalType.ZERO, PercentType.ZERO,
- (PercentType) brightnessValue.getChannelState()));
+ colorValue.update(new HSBType(DecimalType.ZERO, PercentType.ZERO, brightness));
}
}
}
if (jsonState.color != null) {
- PercentType brightness = brightnessValue.getChannelState() instanceof PercentType
- ? (PercentType) brightnessValue.getChannelState()
- : PercentType.HUNDRED;
// This corresponds to "deprecated" color mode handling, since we're not checking which color
// mode is currently active.
// HS is highest priority, then XY, then RGB
assertState(component, Light.BRIGHTNESS_CHANNEL_ID,
new PercentType(new BigDecimal(128 * 100).divide(new BigDecimal(255), MathContext.DECIMAL128)));
+ publishMessage("zigbee2mqtt/light/state", "{ \"state\": \"OFF\", \"brightness\": 128 }");
+ assertState(component, Light.BRIGHTNESS_CHANNEL_ID, PercentType.ZERO);
+
sendCommand(component, Light.BRIGHTNESS_CHANNEL_ID, PercentType.HUNDRED);
assertPublished("zigbee2mqtt/light/set/state", "{\"state\":\"ON\",\"brightness\":255}");