2 * Copyright (c) 2010-2022 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.tplinksmarthome.internal;
15 import java.util.Arrays;
16 import java.util.List;
19 import java.util.function.Function;
20 import java.util.stream.Collectors;
22 import org.eclipse.jdt.annotation.NonNullByDefault;
23 import org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeBindingConstants.ColorScales;
24 import org.openhab.core.thing.ThingTypeUID;
27 * ThingType enum with all supported TP-Link Smart Home devices.
29 * @author Hilbrand Bouwkamp - Initial contribution
33 public enum TPLinkSmartHomeThingType {
35 // Bulb Thing Type UIDs
36 KB100("kb100", DeviceType.BULB),
37 KB130("kb130", DeviceType.BULB, ColorScales.K_2500_9000),
38 LB100("lb100", DeviceType.BULB),
39 LB110("lb110", DeviceType.BULB),
40 LB120("lb120", DeviceType.BULB, ColorScales.K_2700_6500),
41 LB130("lb130", DeviceType.BULB, ColorScales.K_2500_9000),
42 LB200("lb200", DeviceType.BULB),
43 LB230("lb230", DeviceType.BULB, ColorScales.K_2500_9000),
44 KL50("kl50", DeviceType.BULB),
45 KL60("kl60", DeviceType.BULB),
46 KL110("kl110", DeviceType.BULB),
47 KL120("kl120", DeviceType.BULB, ColorScales.K_2700_6500),
48 KL125("kl125", DeviceType.BULB, ColorScales.K_2500_6500),
49 KL130("kl130", DeviceType.BULB, ColorScales.K_2500_9000),
50 KL135("kl135", DeviceType.BULB, ColorScales.K_2500_6500),
52 // Light String thing Type UIDs.
53 KL400("kl400", DeviceType.LIGHT_STRIP, ColorScales.K_2500_9000),
54 KL430("kl430", DeviceType.LIGHT_STRIP, ColorScales.K_2500_9000),
56 // Plug Thing Type UIDs
57 EP10("ep10", DeviceType.PLUG),
58 HS100("hs100", DeviceType.PLUG),
59 HS103("hs103", DeviceType.PLUG),
60 HS105("hs105", DeviceType.PLUG),
61 HS110("hs110", DeviceType.PLUG_WITH_ENERGY),
62 KP100("kp100", DeviceType.PLUG),
63 KP105("kp105", DeviceType.PLUG),
64 KP115("kp115", DeviceType.PLUG_WITH_ENERGY),
65 KP125("kp125", DeviceType.PLUG_WITH_ENERGY),
66 KP405("kp405", DeviceType.DIMMER),
68 // Switch Thing Type UIDs
69 HS200("hs200", DeviceType.SWITCH),
70 HS210("hs210", DeviceType.SWITCH),
72 // Dimmer Thing Type UIDs
73 ES20M("es20m", DeviceType.DIMMER),
74 HS220("hs220", DeviceType.DIMMER),
75 KS230("ks230", DeviceType.DIMMER),
77 // Power Strip Thing Type UIDs.
78 EP40("ep40", DeviceType.STRIP, 2),
79 HS107("hs107", DeviceType.STRIP, 2),
80 HS300("hs300", DeviceType.STRIP, 6),
81 KP200("kp200", DeviceType.STRIP, 2),
82 KP303("kp303", DeviceType.STRIP, 3),
83 KP400("kp400", DeviceType.STRIP, 2),
85 // Range Extender Thing Type UIDs
86 RE270K("re270", DeviceType.RANGE_EXTENDER),
87 RE370K("re370", DeviceType.RANGE_EXTENDER);
90 * All supported Smart Home devices in a list.
92 public static final List<TPLinkSmartHomeThingType> SUPPORTED_THING_TYPES_LIST = Arrays
93 .asList(TPLinkSmartHomeThingType.values());
96 * All {@link ThingTypeUID}s of all supported Smart Home devices.
98 public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = SUPPORTED_THING_TYPES_LIST.stream()
99 .map(TPLinkSmartHomeThingType::thingTypeUID).collect(Collectors.toSet());
102 * A map of all {@link TPLinkSmartHomeThingType} mapped to {@link ThingTypeUID}.
104 public static final Map<ThingTypeUID, TPLinkSmartHomeThingType> THING_TYPE_MAP = SUPPORTED_THING_TYPES_LIST.stream()
105 .collect(Collectors.toMap(TPLinkSmartHomeThingType::thingTypeUID, Function.identity()));
107 private final ThingTypeUID thingTypeUID;
108 private final DeviceType type;
109 private final ColorScales colorScales;
110 private final int sockets;
112 TPLinkSmartHomeThingType(final String name, final DeviceType type) {
116 TPLinkSmartHomeThingType(final String name, final DeviceType type, final ColorScales colorScales) {
117 this(name, type, colorScales, 0);
120 TPLinkSmartHomeThingType(final String name, final DeviceType type, final int sockets) {
121 this(name, type, ColorScales.NOT_SUPPORTED, sockets);
124 TPLinkSmartHomeThingType(final String name, final DeviceType type, final ColorScales colorScales,
126 thingTypeUID = new ThingTypeUID(TPLinkSmartHomeBindingConstants.BINDING_ID, name);
128 this.colorScales = colorScales;
129 this.sockets = sockets;
133 * @return Returns the type of the device.
135 public DeviceType getDeviceType() {
140 * @return The {@link ThingTypeUID} of this device.
142 public ThingTypeUID thingTypeUID() {
147 * @return Returns the number of sockets. Only for Strip devices.
149 public int getSockets() {
154 * @return Returns the color temperature color scales if supported or else returns null
156 public ColorScales getColorScales() {
161 * Returns true if the given {@link ThingTypeUID} matches the {@link ThingTypeUID} in this enum.
163 * @param otherThingTypeUID to check
164 * @return true if matches
166 public boolean is(final ThingTypeUID otherThingTypeUID) {
167 return thingTypeUID.equals(otherThingTypeUID);
171 * Enum indicating the type of the device.
173 public enum DeviceType {
183 * Light Strip device.
191 * Plug device with energy measurement support.
195 * Wi-Fi range extender device with plug.
199 * Power strip device.