2 * Copyright (c) 2010-2020 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;
21 import java.util.stream.Stream;
23 import org.eclipse.jdt.annotation.NonNullByDefault;
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),
38 LB100("lb100", DeviceType.BULB),
39 LB110("lb110", DeviceType.BULB),
40 LB120("lb120", DeviceType.BULB),
41 LB130("lb130", DeviceType.BULB),
42 LB200("lb200", DeviceType.BULB),
43 LB230("lb230", DeviceType.BULB),
44 KL50("kl50", DeviceType.BULB),
45 KL60("kl60", DeviceType.BULB),
46 KL110("kl110", DeviceType.BULB),
47 KL120("kl120", DeviceType.BULB),
48 KL130("kl130", DeviceType.BULB),
50 // Plug Thing Type UIDs
51 HS100("hs100", DeviceType.PLUG),
52 HS103("hs103", DeviceType.PLUG),
53 HS105("hs105", DeviceType.PLUG),
54 HS110("hs110", DeviceType.PLUG),
55 KP100("kp100", DeviceType.PLUG),
56 KP105("kp105", DeviceType.PLUG),
58 // Switch Thing Type UIDs
59 HS200("hs200", DeviceType.SWITCH),
60 HS210("hs210", DeviceType.SWITCH),
62 // Dimmer Thing Type UIDs
63 HS220("hs220", DeviceType.DIMMER),
65 // Power Strip Thing Type UIDs.
66 HS107("hs107", DeviceType.STRIP, 2),
67 HS300("hs300", DeviceType.STRIP, 6),
68 KP200("kp200", DeviceType.STRIP, 2),
69 KP303("kp303", DeviceType.STRIP, 3),
70 KP400("kp400", DeviceType.STRIP, 2),
72 // Range Extender Thing Type UIDs
73 RE270K("re270", DeviceType.RANGE_EXTENDER),
74 RE370K("re370", DeviceType.RANGE_EXTENDER);
77 * All supported Smart Home devices in a list.
79 public static final List<TPLinkSmartHomeThingType> SUPPORTED_THING_TYPES_LIST = Arrays
80 .asList(TPLinkSmartHomeThingType.values());
83 * All {@link ThingTypeUID}s of all supported Smart Home devices.
85 public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = SUPPORTED_THING_TYPES_LIST.stream()
86 .map(TPLinkSmartHomeThingType::thingTypeUID).collect(Collectors.toSet());
89 * A map of all {@link TPLinkSmartHomeThingType} mapped to {@link ThingTypeUID}.
91 public static final Map<ThingTypeUID, TPLinkSmartHomeThingType> THING_TYPE_MAP = SUPPORTED_THING_TYPES_LIST.stream()
92 .collect(Collectors.toMap(TPLinkSmartHomeThingType::thingTypeUID, Function.identity()));
93 private static final List<TPLinkSmartHomeThingType> BULB_WITH_TEMPERATURE_COLOR_1 = Stream.of(LB120, KL120)
94 .collect(Collectors.toList());
95 private static final List<TPLinkSmartHomeThingType> BULB_WITH_TEMPERATURE_COLOR_2 = Stream
96 .of(KB130, KL130, LB130, LB230).collect(Collectors.toList());
98 private final ThingTypeUID thingTypeUID;
99 private final DeviceType type;
100 private final int sockets;
102 TPLinkSmartHomeThingType(final String name, final DeviceType type) {
106 TPLinkSmartHomeThingType(final String name, final DeviceType type, int sockets) {
107 thingTypeUID = new ThingTypeUID(TPLinkSmartHomeBindingConstants.BINDING_ID, name);
109 this.sockets = sockets;
113 * @return Returns the type of the device.
115 public DeviceType getDeviceType() {
120 * @return The {@link ThingTypeUID} of this device.
122 public ThingTypeUID thingTypeUID() {
127 * @return Returns the number of sockets. Only for Strip devices.
129 public int getSockets() {
134 * Returns true if the given {@link ThingTypeUID} matches a device that is a bulb with color temperature ranges 1
137 * @param thingTypeUID if the check
138 * @return true if it's a bulb device with color temperature range 1
140 public static boolean isBulbDeviceWithTemperatureColor1(ThingTypeUID thingTypeUID) {
141 return isDevice(thingTypeUID, BULB_WITH_TEMPERATURE_COLOR_1);
145 * Returns true if the given {@link ThingTypeUID} matches a device that is a bulb with color temperature ranges 2
148 * @param thingTypeUID if the check
149 * @return true if it's a bulb device with color temperature range 2
151 public static boolean isBulbDeviceWithTemperatureColor2(ThingTypeUID thingTypeUID) {
152 return isDevice(thingTypeUID, BULB_WITH_TEMPERATURE_COLOR_2);
155 private static boolean isDevice(ThingTypeUID thingTypeUID, List<TPLinkSmartHomeThingType> thingTypes) {
156 return thingTypes.stream().anyMatch(t -> t.is(thingTypeUID));
160 * Returns true if the given {@link ThingTypeUID} matches the {@link ThingTypeUID} in this enum.
162 * @param otherThingTypeUID to check
163 * @return true if matches
165 public boolean is(ThingTypeUID otherThingTypeUID) {
166 return thingTypeUID.equals(otherThingTypeUID);
170 * Enum indicating the type of the device.
172 public enum DeviceType {
186 * Wi-Fi range extender device with plug.
190 * Power strip device.