import static org.openhab.binding.nanoleaf.internal.NanoleafBindingConstants.*;
-import java.math.BigDecimal;
-import java.math.RoundingMode;
import java.util.concurrent.ScheduledFuture;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.openhab.core.thing.binding.ThingHandler;
import org.openhab.core.types.Command;
import org.openhab.core.types.RefreshType;
+import org.openhab.core.util.ColorUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
logger.trace("Setting new color {} to panel {}", newPanelColor, getPanelID());
setPanelColor(newPanelColor);
// transform to RGB
- PercentType[] rgbPercent = newPanelColor.toRGB();
- logger.trace("Setting new rgbpercent {} {} {}", rgbPercent[0], rgbPercent[1], rgbPercent[2]);
- int red = rgbPercent[0].toBigDecimal().divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)
- .multiply(new BigDecimal(255)).intValue();
- int green = rgbPercent[1].toBigDecimal().divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)
- .multiply(new BigDecimal(255)).intValue();
- int blue = rgbPercent[2].toBigDecimal().divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)
- .multiply(new BigDecimal(255)).intValue();
- logger.trace("Setting new rgb {} {} {}", red, green, blue);
+ int[] rgb = ColorUtil.hsbToRgb(newPanelColor);
+ logger.trace("Setting new rgb {} {} {}", rgb[0], rgb[1], rgb[2]);
Bridge bridge = getBridge();
if (bridge != null) {
Effects effects = new Effects();
// Light Panels and Canvas use different stream commands
if (config.deviceType.equals(CONFIG_DEVICE_TYPE_LIGHTPANELS)
|| config.deviceType.equals(CONFIG_DEVICE_TYPE_CANVAS)) {
- logger.trace("Anim Data rgb {} {} {} {}", panelID, red, green, blue);
- write.setAnimData(String.format("1 %s 1 %d %d %d 0 10", panelID, red, green, blue));
+ logger.trace("Anim Data rgb {} {} {} {}", panelID, rgb[0], rgb[1], rgb[2]);
+ write.setAnimData(String.format("1 %s 1 %d %d %d 0 10", panelID, rgb[0], rgb[1], rgb[2]));
} else {
// this is only used in special streaming situations with canvas which is not yet supported
int quotient = Integer.divideUnsigned(panelID, 256);
int remainder = Integer.remainderUnsigned(panelID, 256);
write.setAnimData(
- String.format("0 1 %d %d %d %d %d 0 0 10", quotient, remainder, red, green, blue));
+ String.format("0 1 %d %d %d %d %d 0 0 10", quotient, remainder, rgb[0], rgb[1], rgb[2]));
}
write.setLoop(false);
effects.setWrite(write);