]> git.basschouten.com Git - openhab-addons.git/blob
c1f5fccce2f23b15366778b88db80d2b77852294
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2020 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
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
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.tplinksmarthome.internal;
14
15 import java.util.Arrays;
16 import java.util.List;
17 import java.util.Map;
18 import java.util.Set;
19 import java.util.function.Function;
20 import java.util.stream.Collectors;
21 import java.util.stream.Stream;
22
23 import org.eclipse.jdt.annotation.NonNullByDefault;
24 import org.openhab.core.thing.ThingTypeUID;
25
26 /**
27  * ThingType enum with all supported TP-Link Smart Home devices.
28  *
29  * @author Hilbrand Bouwkamp - Initial contribution
30  *
31  */
32 @NonNullByDefault
33 public enum TPLinkSmartHomeThingType {
34
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),
49
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),
57
58     // Switch Thing Type UIDs
59     HS200("hs200", DeviceType.SWITCH),
60     HS210("hs210", DeviceType.SWITCH),
61
62     // Dimmer Thing Type UIDs
63     HS220("hs220", DeviceType.DIMMER),
64
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),
71
72     // Range Extender Thing Type UIDs
73     RE270K("re270", DeviceType.RANGE_EXTENDER),
74     RE370K("re370", DeviceType.RANGE_EXTENDER);
75
76     /**
77      * All supported Smart Home devices in a list.
78      */
79     public static final List<TPLinkSmartHomeThingType> SUPPORTED_THING_TYPES_LIST = Arrays
80             .asList(TPLinkSmartHomeThingType.values());
81
82     /**
83      * All {@link ThingTypeUID}s of all supported Smart Home devices.
84      */
85     public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = SUPPORTED_THING_TYPES_LIST.stream()
86             .map(TPLinkSmartHomeThingType::thingTypeUID).collect(Collectors.toSet());
87
88     /**
89      * A map of all {@link TPLinkSmartHomeThingType} mapped to {@link ThingTypeUID}.
90      */
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());
97
98     private final ThingTypeUID thingTypeUID;
99     private final DeviceType type;
100     private final int sockets;
101
102     TPLinkSmartHomeThingType(final String name, final DeviceType type) {
103         this(name, type, 0);
104     }
105
106     TPLinkSmartHomeThingType(final String name, final DeviceType type, int sockets) {
107         thingTypeUID = new ThingTypeUID(TPLinkSmartHomeBindingConstants.BINDING_ID, name);
108         this.type = type;
109         this.sockets = sockets;
110     }
111
112     /**
113      * @return Returns the type of the device.
114      */
115     public DeviceType getDeviceType() {
116         return type;
117     }
118
119     /**
120      * @return The {@link ThingTypeUID} of this device.
121      */
122     public ThingTypeUID thingTypeUID() {
123         return thingTypeUID;
124     }
125
126     /**
127      * @return Returns the number of sockets. Only for Strip devices.
128      */
129     public int getSockets() {
130         return sockets;
131     }
132
133     /**
134      * Returns true if the given {@link ThingTypeUID} matches a device that is a bulb with color temperature ranges 1
135      * (2700 to 6500k).
136      *
137      * @param thingTypeUID if the check
138      * @return true if it's a bulb device with color temperature range 1
139      */
140     public static boolean isBulbDeviceWithTemperatureColor1(ThingTypeUID thingTypeUID) {
141         return isDevice(thingTypeUID, BULB_WITH_TEMPERATURE_COLOR_1);
142     }
143
144     /**
145      * Returns true if the given {@link ThingTypeUID} matches a device that is a bulb with color temperature ranges 2
146      * (2500 to 9000k).
147      *
148      * @param thingTypeUID if the check
149      * @return true if it's a bulb device with color temperature range 2
150      */
151     public static boolean isBulbDeviceWithTemperatureColor2(ThingTypeUID thingTypeUID) {
152         return isDevice(thingTypeUID, BULB_WITH_TEMPERATURE_COLOR_2);
153     }
154
155     private static boolean isDevice(ThingTypeUID thingTypeUID, List<TPLinkSmartHomeThingType> thingTypes) {
156         return thingTypes.stream().anyMatch(t -> t.is(thingTypeUID));
157     }
158
159     /**
160      * Returns true if the given {@link ThingTypeUID} matches the {@link ThingTypeUID} in this enum.
161      *
162      * @param otherThingTypeUID to check
163      * @return true if matches
164      */
165     public boolean is(ThingTypeUID otherThingTypeUID) {
166         return thingTypeUID.equals(otherThingTypeUID);
167     }
168
169     /**
170      * Enum indicating the type of the device.
171      */
172     public enum DeviceType {
173         /**
174          * Light Bulb device.
175          */
176         BULB,
177         /**
178          * Dimmer device.
179          */
180         DIMMER,
181         /**
182          * Plug device.
183          */
184         PLUG,
185         /**
186          * Wi-Fi range extender device with plug.
187          */
188         RANGE_EXTENDER,
189         /**
190          * Power strip device.
191          */
192         STRIP,
193         /**
194          * Switch device.
195          */
196         SWITCH
197     }
198 }