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