2 * Copyright (c) 2010-2021 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 // Plug Thing Type UIDs
53 EP10("ep10", DeviceType.PLUG),
54 HS100("hs100", DeviceType.PLUG),
55 HS103("hs103", DeviceType.PLUG),
56 HS105("hs105", DeviceType.PLUG),
57 HS110("hs110", DeviceType.PLUG_WITH_ENERGY),
58 KP100("kp100", DeviceType.PLUG),
59 KP105("kp105", DeviceType.PLUG),
60 KP115("kp115", DeviceType.PLUG_WITH_ENERGY),
62 // Switch Thing Type UIDs
63 HS200("hs200", DeviceType.SWITCH),
64 HS210("hs210", DeviceType.SWITCH),
66 // Dimmer Thing Type UIDs
67 HS220("hs220", DeviceType.DIMMER),
69 // Power Strip Thing Type UIDs.
70 EP40("ep40", DeviceType.STRIP, 2),
71 HS107("hs107", DeviceType.STRIP, 2),
72 HS300("hs300", DeviceType.STRIP, 6),
73 KP200("kp200", DeviceType.STRIP, 2),
74 KP303("kp303", DeviceType.STRIP, 3),
75 KP400("kp400", DeviceType.STRIP, 2),
77 // Range Extender Thing Type UIDs
78 RE270K("re270", DeviceType.RANGE_EXTENDER),
79 RE370K("re370", DeviceType.RANGE_EXTENDER);
82 * All supported Smart Home devices in a list.
84 public static final List<TPLinkSmartHomeThingType> SUPPORTED_THING_TYPES_LIST = Arrays
85 .asList(TPLinkSmartHomeThingType.values());
88 * All {@link ThingTypeUID}s of all supported Smart Home devices.
90 public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = SUPPORTED_THING_TYPES_LIST.stream()
91 .map(TPLinkSmartHomeThingType::thingTypeUID).collect(Collectors.toSet());
94 * A map of all {@link TPLinkSmartHomeThingType} mapped to {@link ThingTypeUID}.
96 public static final Map<ThingTypeUID, TPLinkSmartHomeThingType> THING_TYPE_MAP = SUPPORTED_THING_TYPES_LIST.stream()
97 .collect(Collectors.toMap(TPLinkSmartHomeThingType::thingTypeUID, Function.identity()));
99 private final ThingTypeUID thingTypeUID;
100 private final DeviceType type;
101 private final ColorScales colorScales;
102 private final int sockets;
104 TPLinkSmartHomeThingType(final String name, final DeviceType type) {
108 TPLinkSmartHomeThingType(final String name, final DeviceType type, final ColorScales colorScales) {
109 this(name, type, colorScales, 0);
112 TPLinkSmartHomeThingType(final String name, final DeviceType type, final int sockets) {
113 this(name, type, ColorScales.NOT_SUPPORTED, sockets);
116 TPLinkSmartHomeThingType(final String name, final DeviceType type, final ColorScales colorScales,
118 thingTypeUID = new ThingTypeUID(TPLinkSmartHomeBindingConstants.BINDING_ID, name);
120 this.colorScales = colorScales;
121 this.sockets = sockets;
125 * @return Returns the type of the device.
127 public DeviceType getDeviceType() {
132 * @return The {@link ThingTypeUID} of this device.
134 public ThingTypeUID thingTypeUID() {
139 * @return Returns the number of sockets. Only for Strip devices.
141 public int getSockets() {
146 * @return Returns the color temperature color scales if supported or else returns null
148 public ColorScales getColorScales() {
153 * Returns true if the given {@link ThingTypeUID} matches the {@link ThingTypeUID} in this enum.
155 * @param otherThingTypeUID to check
156 * @return true if matches
158 public boolean is(final ThingTypeUID otherThingTypeUID) {
159 return thingTypeUID.equals(otherThingTypeUID);
163 * Enum indicating the type of the device.
165 public enum DeviceType {
179 * Plug device with energy measurement support.
183 * Wi-Fi range extender device with plug.
187 * Power strip device.