diff --git a/bundles/org.openhab.binding.tplinksmarthome/README.md b/bundles/org.openhab.binding.tplinksmarthome/README.md index 6dfe23271cc..e1df96e2235 100644 --- a/bundles/org.openhab.binding.tplinksmarthome/README.md +++ b/bundles/org.openhab.binding.tplinksmarthome/README.md @@ -6,6 +6,19 @@ This binding adds support to control TP-Link Smart Home Devices from your local 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 @@ -27,7 +40,7 @@ The following TP-Link Smart Devices are supported: ### 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) @@ -68,68 +81,8 @@ Switching via openHAB activates the switch directly. ### HS300 Smart Wi-Fi Power Strip * Power On/Off Group -* Power On/Off Outlets -* Energy readings Outlets -* LED On/Off -* Wi-Fi signal strength (RSSI) - -### KB100 Kasa Smart Light Bulb - -* Power On/Off -* Adjust the brightness -* Actual power usage -* Wi-Fi signal strength (RSSI) - -Switching and Brightness is done using the `brightness` channel. - -### KB130 Kasa Multi-color Smart Light Bulb - -* 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 +* Power On/Off 6 Outlets +* Energy readings 6 Outlets * LED On/Off * Wi-Fi signal strength (RSSI) @@ -192,6 +145,26 @@ Switching and Brightness is done using the `brightness` channel. Switching, Brightness and Color is done using the `color` channel. +### KB100 Kasa Smart Light Bulb + +* Power On/Off +* Adjust the brightness +* Actual power usage +* Wi-Fi signal strength (RSSI) + +Switching and Brightness is done using the `brightness` channel. + +### KB130 Kasa Multi-color Smart Light Bulb + +* 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. + ### KL50 Kasa Filament Smart Bulb, Soft White * Power On/Off @@ -229,6 +202,17 @@ Switching and Brightness is done using the `brightness` channel. 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 @@ -240,6 +224,57 @@ Switching and Brightness is done using the `brightness` channel. 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) @@ -296,21 +331,21 @@ Either `deviceId` or `ipAddress` must be set. 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 | +| 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 (HS107, HS300, KP200, KP400) have group channels. +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: diff --git a/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/TPLinkSmartHomeBindingConstants.java b/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/TPLinkSmartHomeBindingConstants.java index b8e243a5a57..ba0126afccb 100644 --- a/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/TPLinkSmartHomeBindingConstants.java +++ b/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/TPLinkSmartHomeBindingConstants.java @@ -27,6 +27,29 @@ import org.eclipse.jdt.annotation.NonNullByDefault; @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 @@ -40,10 +63,6 @@ public final class TPLinkSmartHomeBindingConstants { 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 CHANNELS_BULB_SWITCH = Stream.of(CHANNEL_BRIGHTNESS, CHANNEL_COLOR, CHANNEL_COLOR_TEMPERATURE, CHANNEL_COLOR_TEMPERATURE_ABS, CHANNEL_SWITCH).collect(Collectors.toSet()); diff --git a/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/TPLinkSmartHomeHandlerFactory.java b/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/TPLinkSmartHomeHandlerFactory.java index f55409173de..3e71a709b7f 100644 --- a/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/TPLinkSmartHomeHandlerFactory.java +++ b/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/TPLinkSmartHomeHandlerFactory.java @@ -12,8 +12,7 @@ */ 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; @@ -46,13 +45,13 @@ public class TPLinkSmartHomeHandlerFactory extends BaseThingHandlerFactory { 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); @@ -63,23 +62,19 @@ public class TPLinkSmartHomeHandlerFactory extends BaseThingHandlerFactory { 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(); @@ -87,9 +82,6 @@ public class TPLinkSmartHomeHandlerFactory extends BaseThingHandlerFactory { case RANGE_EXTENDER: device = new RangeExtenderDevice(); break; - case STRIP: - device = new PowerStripDevice(type); - break; default: return null; } @@ -97,11 +89,11 @@ public class TPLinkSmartHomeHandlerFactory extends BaseThingHandlerFactory { } @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; } } diff --git a/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/TPLinkSmartHomeThingType.java b/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/TPLinkSmartHomeThingType.java index 93a09cb0c21..35411f75ddc 100644 --- a/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/TPLinkSmartHomeThingType.java +++ b/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/TPLinkSmartHomeThingType.java @@ -18,9 +18,9 @@ import java.util.Map; 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; /** @@ -34,27 +34,30 @@ public enum TPLinkSmartHomeThingType { // 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), @@ -64,6 +67,7 @@ public enum TPLinkSmartHomeThingType { 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), @@ -91,22 +95,29 @@ public enum TPLinkSmartHomeThingType { */ public static final Map THING_TYPE_MAP = SUPPORTED_THING_TYPES_LIST.stream() .collect(Collectors.toMap(TPLinkSmartHomeThingType::thingTypeUID, Function.identity())); - private static final List BULB_WITH_TEMPERATURE_COLOR_1 = Stream.of(LB120, KL120) - .collect(Collectors.toList()); - private static final List 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; } @@ -132,29 +143,10 @@ public enum TPLinkSmartHomeThingType { } /** - * 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 + * @return Returns the color temperature color scales if supported or else returns null */ - 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 - */ - public static boolean isBulbDeviceWithTemperatureColor2(ThingTypeUID thingTypeUID) { - return isDevice(thingTypeUID, BULB_WITH_TEMPERATURE_COLOR_2); - } - - private static boolean isDevice(ThingTypeUID thingTypeUID, List thingTypes) { - return thingTypes.stream().anyMatch(t -> t.is(thingTypeUID)); + public ColorScales getColorScales() { + return colorScales; } /** @@ -163,7 +155,7 @@ public enum TPLinkSmartHomeThingType { * @param otherThingTypeUID to check * @return true if matches */ - public boolean is(ThingTypeUID otherThingTypeUID) { + public boolean is(final ThingTypeUID otherThingTypeUID) { return thingTypeUID.equals(otherThingTypeUID); } @@ -183,6 +175,10 @@ public enum TPLinkSmartHomeThingType { * Plug device. */ PLUG, + /** + * Plug device with energy measurement support. + */ + PLUG_WITH_ENERGY, /** * Wi-Fi range extender device with plug. */ diff --git a/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/device/BulbDevice.java b/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/device/BulbDevice.java index d4ca5490aab..ab638a835ee 100644 --- a/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/device/BulbDevice.java +++ b/bundles/org.openhab.binding.tplinksmarthome/src/main/java/org/openhab/binding/tplinksmarthome/internal/device/BulbDevice.java @@ -12,13 +12,20 @@ */ 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; @@ -27,7 +34,6 @@ import org.openhab.core.library.types.HSBType; 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; @@ -46,13 +52,9 @@ public class BulbDevice extends SmartHomeDevice { 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; } @@ -62,7 +64,7 @@ public class BulbDevice extends SmartHomeDevice { } @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; @@ -80,8 +82,8 @@ public class BulbDevice extends SmartHomeDevice { 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))); @@ -89,8 +91,8 @@ public class BulbDevice extends SmartHomeDevice { 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))); @@ -102,14 +104,15 @@ public class BulbDevice extends SmartHomeDevice { 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))); @@ -118,7 +121,7 @@ public class BulbDevice extends SmartHomeDevice { } @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; @@ -148,15 +151,15 @@ public class BulbDevice extends SmartHomeDevice { 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)); } } diff --git a/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/EP10.xml b/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/EP10.xml new file mode 100644 index 00000000000..4f1484c3f67 --- /dev/null +++ b/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/EP10.xml @@ -0,0 +1,22 @@ + + + + + + TP-Link EP10 Kasa Smart Wi-Fi Plug Mini + PowerOutlet + + + + + + + + deviceId + + + + diff --git a/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/EP40.xml b/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/EP40.xml new file mode 100644 index 00000000000..bb5f1fc5a41 --- /dev/null +++ b/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/EP40.xml @@ -0,0 +1,26 @@ + + + + + + TP-Link EP40 Kasa Smart Wi-Fi Outdoor Plug + PowerOutlet + + + + + + + + + + + + deviceId + + + + diff --git a/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/KL125.xml b/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/KL125.xml new file mode 100644 index 00000000000..3583b6057f7 --- /dev/null +++ b/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/KL125.xml @@ -0,0 +1,24 @@ + + + + + + TP-Link KL125 Kasa Smart Wi-Fi Bulb Multicolor + Lightbulb + + + + + + + + + + deviceId + + + + diff --git a/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/KL135.xml b/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/KL135.xml new file mode 100644 index 00000000000..297014467b6 --- /dev/null +++ b/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/KL135.xml @@ -0,0 +1,24 @@ + + + + + + TP-Link KL135 Kasa Smart Wi-Fi Bulb Multicolor + Lightbulb + + + + + + + + + + deviceId + + + + diff --git a/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/channels.xml b/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/channels.xml index ba74f5f3bc7..e02a37e0435 100644 --- a/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/channels.xml +++ b/bundles/org.openhab.binding.tplinksmarthome/src/main/resources/OH-INF/thing/channels.xml @@ -36,6 +36,14 @@ + + Number + + This channel supports adjusting the color temperature from 2500K to 6500K. + ColorLight + + + Number:Power diff --git a/bundles/org.openhab.binding.tplinksmarthome/src/test/java/org/openhab/binding/tplinksmarthome/internal/device/BulbDeviceTest.java b/bundles/org.openhab.binding.tplinksmarthome/src/test/java/org/openhab/binding/tplinksmarthome/internal/device/BulbDeviceTest.java index dee98eaab7d..35d6bba45b2 100644 --- a/bundles/org.openhab.binding.tplinksmarthome/src/test/java/org/openhab/binding/tplinksmarthome/internal/device/BulbDeviceTest.java +++ b/bundles/org.openhab.binding.tplinksmarthome/src/test/java/org/openhab/binding/tplinksmarthome/internal/device/BulbDeviceTest.java @@ -12,9 +12,16 @@ */ 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; @@ -40,8 +47,7 @@ public class BulbDeviceTest extends DeviceTestBase { 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