The following TP-Link Smart Devices are supported:
+### EP10 Kasa Smart Wi-Fi Plug Mini
+
+* Power On/Off
+* LED On/Off
+* Wi-Fi signal strength (RSSI)
+
+### EP40 Kasa Smart Wi-Fi Outdoor Plug
+
+* Power On/Off Group
+* Power On/Off 2 Outlets
+* LED On/Off
+* Wi-Fi signal strength (RSSI)
+
### HS100 Smart Wi-Fi Plug
* Power On/Off
### HS107 Smart Wi-Fi Plug, 2-Outlets
* Power On/Off Group
-* Power On/Off Outlets
+* Power On/Off 2 Outlets
* LED On/Off
* Wi-Fi signal strength (RSSI)
### HS300 Smart Wi-Fi Power Strip
* Power On/Off Group
-* Power On/Off Outlets
-* Energy readings Outlets
+* Power On/Off 6 Outlets
+* Energy readings 6 Outlets
* LED On/Off
* Wi-Fi signal strength (RSSI)
-### KB100 Kasa Smart Light Bulb
+### LB100 Smart Wi-Fi LED Bulb with Dimmable Light
* Power On/Off
* Adjust the brightness
Switching and Brightness is done using the `brightness` channel.
-### KB130 Kasa Multi-color Smart Light Bulb
+### LB110 Smart Wi-Fi LED Bulb with Dimmable Light
* Power On/Off
-* Fine-tune colors
-* Adjust light appearance from soft white (2500k) to daylight (9000k)
* Adjust the brightness
* Actual power usage
* Wi-Fi signal strength (RSSI)
-Switching, Brightness and Color is done using the `color` channel.
-
-### KP100 Kasa Wi-Fi Smart Plug - Slim Edition
-
-* Power On/Off
-* LED On/Off
-* Wi-Fi signal strength (RSSI)
-
-### KP105 Kasa Wi-Fi Smart Plug - Slim Edition
-
-* Power On/Off
-* LED On/Off
-* Wi-Fi signal strength (RSSI)
-
-### KP115 Kasa Wi-Fi Smart Plug with Energy Monitoring - Slim Edition
-
-* Power On/Off
-* Energy readings
-* LED On/Off
-* Wi-Fi signal strength (RSSI)
-
-### KP200 Smart Wi-Fi Power Outlet, 2-Sockets
-
-* Power On/Off Group
-* Power On/Off Outlets
-* LED On/Off
-* Wi-Fi signal strength (RSSI)
-
-### KP303 Smart Wi-Fi Power Outlet, 3-Sockets
-
-* Power On/Off Group
-* Power On/Off Outlets
-* LED On/Off
-* Wi-Fi signal strength (RSSI)
-
-### KP400 Smart Outdoor Plug
-
-* Power On/Off Group
-* Power On/Off Outlets
-* LED On/Off
-* Wi-Fi signal strength (RSSI)
+Switching and Brightness is done using the `brightness` channel.
-### LB100 Smart Wi-Fi LED Bulb with Dimmable Light
+### LB120 Smart Wi-Fi LED Bulb with Tunable White Light
* Power On/Off
+* Adjust light appearance from soft white (2700k) to daylight (6500k)
* Adjust the brightness
* Actual power usage
* Wi-Fi signal strength (RSSI)
Switching and Brightness is done using the `brightness` channel.
-### LB110 Smart Wi-Fi LED Bulb with Dimmable Light
+### LB130 Smart Wi-Fi LED Bulb with Color Changing Hue
* Power On/Off
+* Fine-tune colors
+* Adjust light appearance from soft white (2500k) to daylight (9000k)
* Adjust the brightness
* Actual power usage
* Wi-Fi signal strength (RSSI)
-Switching and Brightness is done using the `brightness` channel.
+Switching, Brightness and Color is done using the `color` channel.
-### LB120 Smart Wi-Fi LED Bulb with Tunable White Light
+### LB200 Smart Wi-Fi LED Bulb with Dimmable Light
* Power On/Off
-* Adjust light appearance from soft white (2700k) to daylight (6500k)
* Adjust the brightness
* Actual power usage
* Wi-Fi signal strength (RSSI)
Switching and Brightness is done using the `brightness` channel.
-### LB130 Smart Wi-Fi LED Bulb with Color Changing Hue
+### LB230 Smart Wi-Fi LED Bulb with Color Changing Hue
* Power On/Off
* Fine-tune colors
Switching, Brightness and Color is done using the `color` channel.
-### LB200 Smart Wi-Fi LED Bulb with Dimmable Light
+### KB100 Kasa Smart Light Bulb
* Power On/Off
* Adjust the brightness
Switching and Brightness is done using the `brightness` channel.
-### LB230 Smart Wi-Fi LED Bulb with Color Changing Hue
+### KB130 Kasa Multi-color Smart Light Bulb
* Power On/Off
* Fine-tune colors
Switching and Brightness is done using the `brightness` channel.
+### KL125 Kasa Smart Wi-Fi Bulb Multicolor
+
+* Power On/Off
+* Fine-tune colors
+* Adjust light appearance from soft white (2500k) to daylight (6500k)
+* Adjust the brightness
+* Actual power usage
+* Wi-Fi signal strength (RSSI)
+
+Switching, Brightness and Color is done using the `color` channel.
+
### KL130 Smart Wi-Fi LED Bulb with Color Changing Hue
* Power On/Off
Switching, Brightness and Color is done using the `color` channel.
+### KL135 Kasa Smart Wi-Fi Bulb Multicolor
+
+* Power On/Off
+* Fine-tune colors
+* Adjust light appearance from soft white (2500k) to daylight (6500k)
+* Adjust the brightness
+* Actual power usage
+* Wi-Fi signal strength (RSSI)
+
+Switching, Brightness and Color is done using the `color` channel.
+
+### KP100 Kasa Wi-Fi Smart Plug - Slim Edition
+
+* Power On/Off
+* LED On/Off
+* Wi-Fi signal strength (RSSI)
+
+### KP105 Kasa Wi-Fi Smart Plug - Slim Edition
+
+* Power On/Off
+* LED On/Off
+* Wi-Fi signal strength (RSSI)
+
+### KP115 Kasa Wi-Fi Smart Plug with Energy Monitoring - Slim Edition
+
+* Power On/Off
+* Energy readings
+* LED On/Off
+* Wi-Fi signal strength (RSSI)
+
+### KP200 Smart Wi-Fi Power Outlet, 2-Sockets
+
+* Power On/Off Group
+* Power On/Off 2 Outlets
+* LED On/Off
+* Wi-Fi signal strength (RSSI)
+
+### KP303 Smart Wi-Fi Power Outlet, 3-Sockets
+
+* Power On/Off Group
+* Power On/Off 3 Outlets
+* LED On/Off
+* Wi-Fi signal strength (RSSI)
+
+### KP400 Smart Outdoor Plug
+
+* Power On/Off Group
+* Power On/Off 2 Outlets
+* LED On/Off
+* Wi-Fi signal strength (RSSI)
+
### RE270K AC750 Wi-Fi Range Extender with Smart Plug
* Power On/Off (readonly)
All devices support some of the following channels:
-| Channel Type ID | Item Type | Description | Thing types supporting this channel |
-|---------------------|--------------------------|------------------------------------------------|----------------------------------------------------------------------------------------------------|
-| switch | Switch | Power the device on or off. | HS100, HS103, HS105, HS107, HS110, HS200, HS210, HS300, KP100, KP105, KP115, KP200, KP303, KP400, RE270K, RE370K |
-| brightness | Dimmer | Set the brightness of device or dimmer. | HS220, KB100, KL50, KL60, KL110, KL120, LB100, LB110, LB120, LB200 |
-| colorTemperature | Dimmer | Set the color temperature in percentage. | KB130, KL120, KL130, LB120, LB130, LB230 |
-| colorTemperatureAbs | Number | Set the color temperature in Kelvin. | KB130, KL120, KL130, LB120, LB130, LB230 |
-| color | Color | Set the color of the light. | KB130, KL130, LB130, LB230 |
-| power | Number:Power | Actual energy usage in Watt. | HS110, HS300, KLxxx, KP115, LBxxx, |
-| eneryUsage | Number:Energy | Energy Usage in kWh. | HS110, HS300, KP115 |
-| current | Number:ElectricCurrent | Actual current usage in Ampere. | HS110, HS300, KP115 |
-| voltage | Number:ElectricPotential | Actual voltage usage in Volt. | HS110, HS300, KP115 |
-| led | Switch | Switch the status LED on the device on or off. | HS100, HS103, HS105, HS107, HS110, HS200, HS210, HS220, HS300, KP100, KP105, KP115, KP303, KP200, KP400 |
-| rssi | Number:Power | Wi-Fi signal strength indicator in dBm. | All |
-
-The outlet devices (HS107, HS300, KP200, KP400) have group channels.
+| Channel Type ID | Item Type | Description | Thing types supporting this channel |
+|---------------------|--------------------------|------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------|
+| switch | Switch | Power the device on or off. | EP10, EP40, HS100, HS103, HS105, HS107, HS110, HS200, HS210, HS300, KP100, KP105, KP115, KP200, KP303, KP400, RE270K, RE370K |
+| brightness | Dimmer | Set the brightness of device or dimmer. | HS220, KB100, KL50, KL60, KL110, KL120, LB100, LB110, LB120, LB200 |
+| colorTemperature | Dimmer | Set the color temperature in percentage. | KB130, KL120, KL125, KL130, KL135, LB120, LB130, LB230 |
+| colorTemperatureAbs | Number | Set the color temperature in Kelvin. | KB130, KL120, KL125, KL130, KL135, LB120, LB130, LB230 |
+| color | Color | Set the color of the light. | KB130, KL125, KL130, KL135, LB130, LB230 |
+| power | Number:Power | Actual energy usage in Watt. | HS110, HS300, KLxxx, KP115, LBxxx, |
+| eneryUsage | Number:Energy | Energy Usage in kWh. | HS110, HS300, KP115 |
+| current | Number:ElectricCurrent | Actual current usage in Ampere. | HS110, HS300, KP115 |
+| voltage | Number:ElectricPotential | Actual voltage usage in Volt. | HS110, HS300, KP115 |
+| led | Switch | Switch the status LED on the device on or off. | EP10, EP40, HS100, HS103, HS105, HS107, HS110, HS200, HS210, HS220, HS300, KP100, KP105, KP115, KP303, KP200, KP400 |
+| rssi | Number:Power | Wi-Fi signal strength indicator in dBm. | All |
+
+The outlet devices (EP40, HS107, HS300, KP200, KP400) have group channels.
This means the channel is prefixed with the group id.
The following group ids are available:
@NonNullByDefault
public final class TPLinkSmartHomeBindingConstants {
+ public enum ColorScales {
+ NOT_SUPPORTED(0, 0),
+ K_2500_6500(2500, 6500),
+ K_2700_6500(2700, 6500),
+ K_2500_9000(2500, 9000);
+
+ private final int warm;
+ private final int cool;
+
+ ColorScales(final int warm, final int cool) {
+ this.warm = warm;
+ this.cool = cool;
+ }
+
+ public int getWarm() {
+ return warm;
+ }
+
+ public int getCool() {
+ return cool;
+ }
+ }
+
public static final String BINDING_ID = "tplinksmarthome";
// List of all switch channel ids
public static final String CHANNEL_COLOR = "color";
public static final String CHANNEL_COLOR_TEMPERATURE = "colorTemperature";
public static final String CHANNEL_COLOR_TEMPERATURE_ABS = "colorTemperatureAbs";
- public static final int COLOR_TEMPERATURE_1_MIN = 2700;
- public static final int COLOR_TEMPERATURE_1_MAX = 6500;
- public static final int COLOR_TEMPERATURE_2_MIN = 2500;
- public static final int COLOR_TEMPERATURE_2_MAX = 9000;
public static final Set<String> CHANNELS_BULB_SWITCH = Stream.of(CHANNEL_BRIGHTNESS, CHANNEL_COLOR,
CHANNEL_COLOR_TEMPERATURE, CHANNEL_COLOR_TEMPERATURE_ABS, CHANNEL_SWITCH).collect(Collectors.toSet());
*/
package org.openhab.binding.tplinksmarthome.internal;
-import static org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeBindingConstants.*;
-import static org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeThingType.*;
+import static org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeThingType.SUPPORTED_THING_TYPES;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
private @NonNullByDefault({}) TPLinkIpAddressService ipAddressService;
@Override
- public boolean supportsThingType(ThingTypeUID thingTypeUID) {
+ public boolean supportsThingType(final ThingTypeUID thingTypeUID) {
return SUPPORTED_THING_TYPES.contains(thingTypeUID);
}
@Nullable
@Override
- protected ThingHandler createHandler(Thing thing) {
+ protected ThingHandler createHandler(final Thing thing) {
final ThingTypeUID thingTypeUID = thing.getThingTypeUID();
final TPLinkSmartHomeThingType type = TPLinkSmartHomeThingType.THING_TYPE_MAP.get(thingTypeUID);
switch (type.getDeviceType()) {
case BULB:
- if (TPLinkSmartHomeThingType.isBulbDeviceWithTemperatureColor1(thingTypeUID)) {
- device = new BulbDevice(thingTypeUID, COLOR_TEMPERATURE_1_MIN, COLOR_TEMPERATURE_1_MAX);
- } else if (TPLinkSmartHomeThingType.isBulbDeviceWithTemperatureColor2(thingTypeUID)) {
- device = new BulbDevice(thingTypeUID, COLOR_TEMPERATURE_2_MIN, COLOR_TEMPERATURE_2_MAX);
- } else {
- device = new BulbDevice(thingTypeUID);
- }
+ device = new BulbDevice(type);
break;
case DIMMER:
device = new DimmerDevice();
break;
case PLUG:
- if (HS110.is(thingTypeUID) || KP115.is(thingTypeUID)) {
- device = new EnergySwitchDevice();
- } else {
- device = new SwitchDevice();
- }
+ device = new SwitchDevice();
+ break;
+ case PLUG_WITH_ENERGY:
+ device = new EnergySwitchDevice();
+ break;
+ case STRIP:
+ device = new PowerStripDevice(type);
break;
case SWITCH:
device = new SwitchDevice();
case RANGE_EXTENDER:
device = new RangeExtenderDevice();
break;
- case STRIP:
- device = new PowerStripDevice(type);
- break;
default:
return null;
}
}
@Reference
- protected void setTPLinkIpAddressCache(TPLinkIpAddressService ipAddressCache) {
+ protected void setTPLinkIpAddressCache(final TPLinkIpAddressService ipAddressCache) {
this.ipAddressService = ipAddressCache;
}
- protected void unsetTPLinkIpAddressCache(TPLinkIpAddressService ipAddressCache) {
+ protected void unsetTPLinkIpAddressCache(final TPLinkIpAddressService ipAddressCache) {
this.ipAddressService = null;
}
}
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeBindingConstants.ColorScales;
import org.openhab.core.thing.ThingTypeUID;
/**
// Bulb Thing Type UIDs
KB100("kb100", DeviceType.BULB),
- KB130("kb130", DeviceType.BULB),
+ KB130("kb130", DeviceType.BULB, ColorScales.K_2500_9000),
LB100("lb100", DeviceType.BULB),
LB110("lb110", DeviceType.BULB),
- LB120("lb120", DeviceType.BULB),
- LB130("lb130", DeviceType.BULB),
+ LB120("lb120", DeviceType.BULB, ColorScales.K_2700_6500),
+ LB130("lb130", DeviceType.BULB, ColorScales.K_2500_9000),
LB200("lb200", DeviceType.BULB),
- LB230("lb230", DeviceType.BULB),
+ LB230("lb230", DeviceType.BULB, ColorScales.K_2500_9000),
KL50("kl50", DeviceType.BULB),
KL60("kl60", DeviceType.BULB),
KL110("kl110", DeviceType.BULB),
- KL120("kl120", DeviceType.BULB),
- KL130("kl130", DeviceType.BULB),
+ KL120("kl120", DeviceType.BULB, ColorScales.K_2700_6500),
+ KL125("kl125", DeviceType.BULB, ColorScales.K_2500_6500),
+ KL130("kl130", DeviceType.BULB, ColorScales.K_2500_9000),
+ KL135("kl135", DeviceType.BULB, ColorScales.K_2500_6500),
// Plug Thing Type UIDs
+ EP10("ep10", DeviceType.PLUG),
HS100("hs100", DeviceType.PLUG),
HS103("hs103", DeviceType.PLUG),
HS105("hs105", DeviceType.PLUG),
- HS110("hs110", DeviceType.PLUG),
+ HS110("hs110", DeviceType.PLUG_WITH_ENERGY),
KP100("kp100", DeviceType.PLUG),
KP105("kp105", DeviceType.PLUG),
- KP115("kp115", DeviceType.PLUG),
+ KP115("kp115", DeviceType.PLUG_WITH_ENERGY),
// Switch Thing Type UIDs
HS200("hs200", DeviceType.SWITCH),
HS220("hs220", DeviceType.DIMMER),
// Power Strip Thing Type UIDs.
+ EP40("ep40", DeviceType.STRIP, 2),
HS107("hs107", DeviceType.STRIP, 2),
HS300("hs300", DeviceType.STRIP, 6),
KP200("kp200", DeviceType.STRIP, 2),
*/
public static final Map<ThingTypeUID, TPLinkSmartHomeThingType> THING_TYPE_MAP = SUPPORTED_THING_TYPES_LIST.stream()
.collect(Collectors.toMap(TPLinkSmartHomeThingType::thingTypeUID, Function.identity()));
- private static final List<TPLinkSmartHomeThingType> BULB_WITH_TEMPERATURE_COLOR_1 = Stream.of(LB120, KL120)
- .collect(Collectors.toList());
- private static final List<TPLinkSmartHomeThingType> BULB_WITH_TEMPERATURE_COLOR_2 = Stream
- .of(KB130, KL130, LB130, LB230).collect(Collectors.toList());
private final ThingTypeUID thingTypeUID;
private final DeviceType type;
+ private final ColorScales colorScales;
private final int sockets;
TPLinkSmartHomeThingType(final String name, final DeviceType type) {
this(name, type, 0);
}
- TPLinkSmartHomeThingType(final String name, final DeviceType type, int sockets) {
+ TPLinkSmartHomeThingType(final String name, final DeviceType type, final ColorScales colorScales) {
+ this(name, type, colorScales, 0);
+ }
+
+ TPLinkSmartHomeThingType(final String name, final DeviceType type, final int sockets) {
+ this(name, type, ColorScales.NOT_SUPPORTED, sockets);
+ }
+
+ TPLinkSmartHomeThingType(final String name, final DeviceType type, final ColorScales colorScales,
+ final int sockets) {
thingTypeUID = new ThingTypeUID(TPLinkSmartHomeBindingConstants.BINDING_ID, name);
this.type = type;
+ this.colorScales = colorScales;
this.sockets = sockets;
}
}
/**
- * Returns true if the given {@link ThingTypeUID} matches a device that is a bulb with color temperature ranges 1
- * (2700 to 6500k).
- *
- * @param thingTypeUID if the check
- * @return true if it's a bulb device with color temperature range 1
- */
- public static boolean isBulbDeviceWithTemperatureColor1(ThingTypeUID thingTypeUID) {
- return isDevice(thingTypeUID, BULB_WITH_TEMPERATURE_COLOR_1);
- }
-
- /**
- * Returns true if the given {@link ThingTypeUID} matches a device that is a bulb with color temperature ranges 2
- * (2500 to 9000k).
- *
- * @param thingTypeUID if the check
- * @return true if it's a bulb device with color temperature range 2
+ * @return Returns the color temperature color scales if supported or else returns null
*/
- public static boolean isBulbDeviceWithTemperatureColor2(ThingTypeUID thingTypeUID) {
- return isDevice(thingTypeUID, BULB_WITH_TEMPERATURE_COLOR_2);
- }
-
- private static boolean isDevice(ThingTypeUID thingTypeUID, List<TPLinkSmartHomeThingType> thingTypes) {
- return thingTypes.stream().anyMatch(t -> t.is(thingTypeUID));
+ public ColorScales getColorScales() {
+ return colorScales;
}
/**
* @param otherThingTypeUID to check
* @return true if matches
*/
- public boolean is(ThingTypeUID otherThingTypeUID) {
+ public boolean is(final ThingTypeUID otherThingTypeUID) {
return thingTypeUID.equals(otherThingTypeUID);
}
* Plug device.
*/
PLUG,
+ /**
+ * Plug device with energy measurement support.
+ */
+ PLUG_WITH_ENERGY,
/**
* Wi-Fi range extender device with plug.
*/
*/
package org.openhab.binding.tplinksmarthome.internal.device;
-import static org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeBindingConstants.*;
+import static org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeBindingConstants.CHANNELS_BULB_SWITCH;
+import static org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeBindingConstants.CHANNEL_BRIGHTNESS;
+import static org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeBindingConstants.CHANNEL_COLOR;
+import static org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeBindingConstants.CHANNEL_COLOR_TEMPERATURE;
+import static org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeBindingConstants.CHANNEL_COLOR_TEMPERATURE_ABS;
+import static org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeBindingConstants.CHANNEL_ENERGY_POWER;
+import static org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeBindingConstants.CHANNEL_SWITCH;
import java.io.IOException;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.tplinksmarthome.internal.Commands;
+import org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeThingType;
import org.openhab.binding.tplinksmarthome.internal.model.HasErrorResponse;
import org.openhab.binding.tplinksmarthome.internal.model.LightState;
import org.openhab.binding.tplinksmarthome.internal.model.TransitionLightStateResponse;
import org.openhab.core.library.types.OnOffType;
import org.openhab.core.library.types.PercentType;
import org.openhab.core.thing.ChannelUID;
-import org.openhab.core.thing.ThingTypeUID;
import org.openhab.core.types.Command;
import org.openhab.core.types.State;
import org.openhab.core.types.UnDefType;
private final int colorTempMax;
private final int colorTempRangeFactor;
- public BulbDevice(ThingTypeUID thingTypeUID) {
- this(thingTypeUID, 0, 0);
- }
-
- public BulbDevice(ThingTypeUID thingTypeUID, int colorTempMin, int colorTempMax) {
- this.colorTempMin = colorTempMin;
- this.colorTempMax = colorTempMax;
+ public BulbDevice(final TPLinkSmartHomeThingType type) {
+ this.colorTempMin = type.getColorScales().getWarm();
+ this.colorTempMax = type.getColorScales().getCool();
colorTempRangeFactor = (colorTempMax - colorTempMin) / 100;
}
}
@Override
- public boolean handleCommand(ChannelUID channelUid, Command command) throws IOException {
+ public boolean handleCommand(final ChannelUID channelUid, final Command command) throws IOException {
final String channelId = channelUid.getId();
final int transitionPeriod = configuration.transitionPeriod;
final HasErrorResponse response;
return response != null;
}
- private @Nullable HasErrorResponse handleOnOffType(String channelID, OnOffType onOff, int transitionPeriod)
- throws IOException {
+ private @Nullable HasErrorResponse handleOnOffType(final String channelID, final OnOffType onOff,
+ final int transitionPeriod) throws IOException {
if (CHANNELS_BULB_SWITCH.contains(channelID)) {
return commands.setTransitionLightStateResponse(
connection.sendCommand(commands.setLightState(onOff, transitionPeriod)));
return null;
}
- private @Nullable HasErrorResponse handleDecimalType(String channelID, DecimalType command, int transitionPeriod)
- throws IOException {
+ private @Nullable HasErrorResponse handleDecimalType(final String channelID, final DecimalType command,
+ final int transitionPeriod) throws IOException {
if (CHANNEL_COLOR.equals(channelID) || CHANNEL_BRIGHTNESS.equals(channelID)) {
return commands.setTransitionLightStateResponse(
connection.sendCommand(commands.setBrightness(command.intValue(), transitionPeriod)));
return null;
}
- private @Nullable TransitionLightStateResponse handleColorTemperature(int colorTemperature, int transitionPeriod)
- throws IOException {
+ private @Nullable TransitionLightStateResponse handleColorTemperature(final int colorTemperature,
+ final int transitionPeriod) throws IOException {
return commands.setTransitionLightStateResponse(
connection.sendCommand(commands.setColorTemperature(colorTemperature, transitionPeriod)));
}
@Nullable
- private HasErrorResponse handleHSBType(String channelID, HSBType command, int transitionPeriod) throws IOException {
+ private HasErrorResponse handleHSBType(final String channelID, final HSBType command, final int transitionPeriod)
+ throws IOException {
if (CHANNEL_COLOR.equals(channelID)) {
return commands.setTransitionLightStateResponse(
connection.sendCommand(commands.setColor(command, transitionPeriod)));
}
@Override
- public State updateChannel(ChannelUID channelUid, DeviceState deviceState) {
+ public State updateChannel(final ChannelUID channelUid, final DeviceState deviceState) {
final LightState lightState = deviceState.getSysinfo().getLightState();
final State state;
return state;
}
- private int convertPercentageToKelvin(int percentage) {
+ private int convertPercentageToKelvin(final int percentage) {
return guardColorTemperature(colorTempMin + colorTempRangeFactor * percentage);
}
- private int convertKelvinToPercentage(int colorTemperature) {
+ private int convertKelvinToPercentage(final int colorTemperature) {
return (guardColorTemperature(colorTemperature) - colorTempMin) / colorTempRangeFactor;
}
- private int guardColorTemperature(int colorTemperature) {
+ private int guardColorTemperature(final int colorTemperature) {
return Math.max(colorTempMin, Math.min(colorTempMax, colorTemperature));
}
}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<thing:thing-descriptions bindingId="tplinksmarthome"
+ 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="ep10">
+ <label>EP10</label>
+ <description>TP-Link EP10 Kasa Smart Wi-Fi Plug Mini</description>
+ <category>PowerOutlet</category>
+
+ <channels>
+ <channel id="switch" typeId="system.power"/>
+ <channel id="led" typeId="led"/>
+ <channel id="rssi" typeId="rssi"/>
+ </channels>
+
+ <representation-property>deviceId</representation-property>
+
+ <config-description-ref uri="thing-type:tplinksmarthome:device-plug"/>
+ </thing-type>
+</thing:thing-descriptions>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<thing:thing-descriptions bindingId="tplinksmarthome"
+ 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="ep40">
+ <label>EP40</label>
+ <description>TP-Link EP40 Kasa Smart Wi-Fi Outdoor Plug</description>
+ <category>PowerOutlet</category>
+
+ <channel-groups>
+ <channel-group id="groupSwitch" typeId="switch-group"/>
+ <channel-group id="outlet1" typeId="switch-outlet">
+ <label>Outlet 1</label>
+ </channel-group>
+ <channel-group id="outlet2" typeId="switch-outlet">
+ <label>Outlet 2</label>
+ </channel-group>
+ </channel-groups>
+
+ <representation-property>deviceId</representation-property>
+
+ <config-description-ref uri="thing-type:tplinksmarthome:device-plug"/>
+ </thing-type>
+</thing:thing-descriptions>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<thing:thing-descriptions bindingId="tplinksmarthome"
+ 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="kl125">
+ <label>KL125</label>
+ <description>TP-Link KL125 Kasa Smart Wi-Fi Bulb Multicolor</description>
+ <category>Lightbulb</category>
+
+ <channels>
+ <channel id="brightness" typeId="system.brightness"/>
+ <channel id="colorTemperature" typeId="system.color-temperature"/>
+ <channel id="colorTemperatureAbs" typeId="colorTemperatureAbs3"/>
+ <channel id="power" typeId="power"/>
+ <channel id="rssi" typeId="rssi"/>
+ </channels>
+
+ <representation-property>deviceId</representation-property>
+
+ <config-description-ref uri="thing-type:tplinksmarthome:device-bulb"/>
+ </thing-type>
+</thing:thing-descriptions>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<thing:thing-descriptions bindingId="tplinksmarthome"
+ 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="kl135">
+ <label>KL135</label>
+ <description>TP-Link KL135 Kasa Smart Wi-Fi Bulb Multicolor</description>
+ <category>Lightbulb</category>
+
+ <channels>
+ <channel id="brightness" typeId="system.brightness"/>
+ <channel id="colorTemperature" typeId="system.color-temperature"/>
+ <channel id="colorTemperatureAbs" typeId="colorTemperatureAbs3"/>
+ <channel id="power" typeId="power"/>
+ <channel id="rssi" typeId="rssi"/>
+ </channels>
+
+ <representation-property>deviceId</representation-property>
+
+ <config-description-ref uri="thing-type:tplinksmarthome:device-bulb"/>
+ </thing-type>
+</thing:thing-descriptions>
<state min="2500" max="9000" pattern="%d K"/>
</channel-type>
+ <channel-type id="colorTemperatureAbs3" advanced="true">
+ <item-type>Number</item-type>
+ <label>Color Temperature</label>
+ <description>This channel supports adjusting the color temperature from 2500K to 6500K.</description>
+ <category>ColorLight</category>
+ <state min="2500" max="6500" pattern="%d K"/>
+ </channel-type>
+
<!-- Energy Channel types -->
<channel-type id="power">
<item-type>Number:Power</item-type>
*/
package org.openhab.binding.tplinksmarthome.internal.device;
-import static org.junit.jupiter.api.Assertions.*;
-import static org.openhab.binding.tplinksmarthome.internal.ChannelUIDConstants.*;
-import static org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeBindingConstants.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.openhab.binding.tplinksmarthome.internal.ChannelUIDConstants.CHANNEL_UID_BRIGHTNESS;
+import static org.openhab.binding.tplinksmarthome.internal.ChannelUIDConstants.CHANNEL_UID_COLOR;
+import static org.openhab.binding.tplinksmarthome.internal.ChannelUIDConstants.CHANNEL_UID_COLOR_TEMPERATURE;
+import static org.openhab.binding.tplinksmarthome.internal.ChannelUIDConstants.CHANNEL_UID_COLOR_TEMPERATURE_ABS;
+import static org.openhab.binding.tplinksmarthome.internal.ChannelUIDConstants.CHANNEL_UID_ENERGY_POWER;
+import static org.openhab.binding.tplinksmarthome.internal.ChannelUIDConstants.CHANNEL_UID_OTHER;
+import static org.openhab.binding.tplinksmarthome.internal.ChannelUIDConstants.CHANNEL_UID_SWITCH;
import static org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeThingType.LB130;
import java.io.IOException;
private static final String DEVICE_OFF = "bulb_get_sysinfo_response_off";
public BulbDeviceTest() throws IOException {
- super(new BulbDevice(LB130.thingTypeUID(), COLOR_TEMPERATURE_2_MIN, COLOR_TEMPERATURE_2_MAX),
- "bulb_get_sysinfo_response_on");
+ super(new BulbDevice(LB130), "bulb_get_sysinfo_response_on");
}
@BeforeEach