Skip to content

Commit

Permalink
[nanoleaf] Handle and provide QuantityType for color-temperature-abs …
Browse files Browse the repository at this point in the history
…channel (openhab#14026)

* [nanoleaf] handle and provide QuantityType for color-temperature-abs channel

see openhab/openhab-core#3129

Signed-off-by: Cody Cutrer <[email protected]>
  • Loading branch information
ccutrer authored Dec 21, 2022
1 parent df8e0bb commit 672b60b
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 18 deletions.
28 changes: 14 additions & 14 deletions bundles/org.openhab.binding.nanoleaf/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,19 +139,19 @@ This discovers all connected panels with their IDs.

The controller bridge has the following channels:

| Channel | Item Type | Description | Read Only |
|---------------------|-----------|-----------------------------------------------------------------------------------------------------------|-----------|
| color | Color | Color, power and brightness of all light panels | No |
| colorTemperature | Dimmer | Color temperature (in percent) of all light panels | No |
| colorTemperatureAbs | Number | Color temperature (in Kelvin, 1200 to 6500) of all light panels | No |
| colorMode | String | Color mode of the light panels | Yes |
| effect | String | Selected effect of the light panels | No |
| layout | Image | Shows the layout of your panels with IDs. | Yes |
| rhythmState | Switch | Connection state of the rhythm module | Yes |
| rhythmActive | Switch | Activity state of the rhythm module | Yes |
| rhythmMode | Number | Sound source for the rhythm module. 0=Microphone, 1=Aux cable | No |
| state | Image | Shows the current state of your panels with colors. | Yes |
| swipe | Trigger | [Canvas / Shapes Only] Detects Swipes over the panel.LEFT, RIGHT, UP, DOWN events are supported. | Yes |
| Channel | Item Type | Description | Read Only |
|---------------------|--------------------|-----------------------------------------------------------------------------------------------------------|-----------|
| color | Color | Color, power and brightness of all light panels | No |
| colorTemperature | Dimmer | Color temperature (in percent) of all light panels | No |
| colorTemperatureAbs | Number:Temperature | Color temperature (in Kelvin, 1200 to 6500) of all light panels | No |
| colorMode | String | Color mode of the light panels | Yes |
| effect | String | Selected effect of the light panels | No |
| layout | Image | Shows the layout of your panels with IDs. | Yes |
| rhythmState | Switch | Connection state of the rhythm module | Yes |
| rhythmActive | Switch | Activity state of the rhythm module | Yes |
| rhythmMode | Number | Sound source for the rhythm module. 0=Microphone, 1=Aux cable | No |
| state | Image | Shows the current state of your panels with colors. | Yes |
| swipe | Trigger | [Canvas / Shapes Only] Detects Swipes over the panel.LEFT, RIGHT, UP, DOWN events are supported. | Yes |

A lightpanel thing has the following channels:

Expand Down Expand Up @@ -235,7 +235,7 @@ Dimmer NanoleafBrightness "Brightness [%.0f]" { channel="nanoleaf:controller:MyL
String NanoleafHue "Hue [%s]"
String NanoleafSaturation "Saturation [%s]"
Dimmer NanoleafColorTemp "Color temperature [%.0f]" { channel="nanoleaf:controller:MyLightPanels:colorTemperature" }
Number NanoleafColorTempAbs "Color temperature [%.000f]" { channel="nanoleaf:controller:MyLightPanels:colorTemperatureAbs" }
Number:Temperature NanoleafColorTempAbs "Color temperature [%d K]" { channel="nanoleaf:controller:MyLightPanels:colorTemperatureAbs" }
String NanoleafColorMode "Color mode [%s]" { channel="nanoleaf:controller:MyLightPanels:colorMode" }
String NanoleafEffect "Effect" { channel="nanoleaf:controller:MyLightPanels:effect" }
Switch NanoleafRhythmState "Rhythm connected [MAP(nanoleaf.map):%s]" { channel="nanoleaf:controller:MyLightPanels:rhythmState" }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,10 @@
import org.openhab.core.library.types.IncreaseDecreaseType;
import org.openhab.core.library.types.OnOffType;
import org.openhab.core.library.types.PercentType;
import org.openhab.core.library.types.QuantityType;
import org.openhab.core.library.types.RawType;
import org.openhab.core.library.types.StringType;
import org.openhab.core.library.unit.Units;
import org.openhab.core.thing.Bridge;
import org.openhab.core.thing.ChannelUID;
import org.openhab.core.thing.Thing;
Expand Down Expand Up @@ -641,7 +643,7 @@ private void updateFromControllerInfo() throws NanoleafException {
int hue;
int saturation;
if (colorTemperature != null) {
updateState(CHANNEL_COLOR_TEMPERATURE_ABS, new DecimalType(colorTemperature.getValue()));
updateState(CHANNEL_COLOR_TEMPERATURE_ABS, new QuantityType(colorTemperature.getValue(), Units.KELVIN));
Integer min = colorTemperature.getMin();
hue = min == null ? 0 : min;
Integer max = colorTemperature.getMax();
Expand Down Expand Up @@ -899,15 +901,25 @@ private void sendStateCommand(String channel, Command command) throws NanoleafEx
}
break;
case CHANNEL_COLOR_TEMPERATURE_ABS:
// Color temperature (absolute)
int colorTempKelvin;

IntegerState state = new Ct();
if (command instanceof DecimalType) {
// Color temperature (absolute)
IntegerState state = new Ct();
state.setValue(((DecimalType) command).intValue());
stateObject.setState(state);
} else if (command instanceof QuantityType) {
QuantityType<?> tempKelvin = ((QuantityType) command).toInvertibleUnit(Units.KELVIN);
if (tempKelvin == null) {
logger.warn("Cannot convert color temperature {} to Kelvin.", command);
return;
}
state.setValue(tempKelvin.intValue());
} else {
logger.warn("Unhandled command type: {}", command.getClass().getName());
return;
}

stateObject.setState(state);
break;
default:
logger.warn("Unhandled command type: {}", command.getClass().getName());
Expand Down

0 comments on commit 672b60b

Please sign in to comment.