]> git.basschouten.com Git - openhab-addons.git/blob
35411f75ddcfe8e44bbf7a0ced449c02bf4595e3
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2021 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
22 import org.eclipse.jdt.annotation.NonNullByDefault;
23 import org.openhab.binding.tplinksmarthome.internal.TPLinkSmartHomeBindingConstants.ColorScales;
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, 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),
51
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),
61
62     // Switch Thing Type UIDs
63     HS200("hs200", DeviceType.SWITCH),
64     HS210("hs210", DeviceType.SWITCH),
65
66     // Dimmer Thing Type UIDs
67     HS220("hs220", DeviceType.DIMMER),
68
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),
76
77     // Range Extender Thing Type UIDs
78     RE270K("re270", DeviceType.RANGE_EXTENDER),
79     RE370K("re370", DeviceType.RANGE_EXTENDER);
80
81     /**
82      * All supported Smart Home devices in a list.
83      */
84     public static final List<TPLinkSmartHomeThingType> SUPPORTED_THING_TYPES_LIST = Arrays
85             .asList(TPLinkSmartHomeThingType.values());
86
87     /**
88      * All {@link ThingTypeUID}s of all supported Smart Home devices.
89      */
90     public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = SUPPORTED_THING_TYPES_LIST.stream()
91             .map(TPLinkSmartHomeThingType::thingTypeUID).collect(Collectors.toSet());
92
93     /**
94      * A map of all {@link TPLinkSmartHomeThingType} mapped to {@link ThingTypeUID}.
95      */
96     public static final Map<ThingTypeUID, TPLinkSmartHomeThingType> THING_TYPE_MAP = SUPPORTED_THING_TYPES_LIST.stream()
97             .collect(Collectors.toMap(TPLinkSmartHomeThingType::thingTypeUID, Function.identity()));
98
99     private final ThingTypeUID thingTypeUID;
100     private final DeviceType type;
101     private final ColorScales colorScales;
102     private final int sockets;
103
104     TPLinkSmartHomeThingType(final String name, final DeviceType type) {
105         this(name, type, 0);
106     }
107
108     TPLinkSmartHomeThingType(final String name, final DeviceType type, final ColorScales colorScales) {
109         this(name, type, colorScales, 0);
110     }
111
112     TPLinkSmartHomeThingType(final String name, final DeviceType type, final int sockets) {
113         this(name, type, ColorScales.NOT_SUPPORTED, sockets);
114     }
115
116     TPLinkSmartHomeThingType(final String name, final DeviceType type, final ColorScales colorScales,
117             final int sockets) {
118         thingTypeUID = new ThingTypeUID(TPLinkSmartHomeBindingConstants.BINDING_ID, name);
119         this.type = type;
120         this.colorScales = colorScales;
121         this.sockets = sockets;
122     }
123
124     /**
125      * @return Returns the type of the device.
126      */
127     public DeviceType getDeviceType() {
128         return type;
129     }
130
131     /**
132      * @return The {@link ThingTypeUID} of this device.
133      */
134     public ThingTypeUID thingTypeUID() {
135         return thingTypeUID;
136     }
137
138     /**
139      * @return Returns the number of sockets. Only for Strip devices.
140      */
141     public int getSockets() {
142         return sockets;
143     }
144
145     /**
146      * @return Returns the color temperature color scales if supported or else returns null
147      */
148     public ColorScales getColorScales() {
149         return colorScales;
150     }
151
152     /**
153      * Returns true if the given {@link ThingTypeUID} matches the {@link ThingTypeUID} in this enum.
154      *
155      * @param otherThingTypeUID to check
156      * @return true if matches
157      */
158     public boolean is(final ThingTypeUID otherThingTypeUID) {
159         return thingTypeUID.equals(otherThingTypeUID);
160     }
161
162     /**
163      * Enum indicating the type of the device.
164      */
165     public enum DeviceType {
166         /**
167          * Light Bulb device.
168          */
169         BULB,
170         /**
171          * Dimmer device.
172          */
173         DIMMER,
174         /**
175          * Plug device.
176          */
177         PLUG,
178         /**
179          * Plug device with energy measurement support.
180          */
181         PLUG_WITH_ENERGY,
182         /**
183          * Wi-Fi range extender device with plug.
184          */
185         RANGE_EXTENDER,
186         /**
187          * Power strip device.
188          */
189         STRIP,
190         /**
191          * Switch device.
192          */
193         SWITCH
194     }
195 }