]> git.basschouten.com Git - openhab-addons.git/blob
5d9084d398316e8daf79df2fa70c7b22562ba429
[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.velux.internal.bridge.slip;
14
15 import org.eclipse.jdt.annotation.NonNullByDefault;
16 import org.eclipse.jdt.annotation.Nullable;
17 import org.openhab.binding.velux.internal.bridge.VeluxBridgeInstance;
18 import org.openhab.binding.velux.internal.bridge.common.BridgeAPI;
19 import org.openhab.binding.velux.internal.bridge.common.GetDeviceStatus;
20 import org.openhab.binding.velux.internal.bridge.common.GetFirmware;
21 import org.openhab.binding.velux.internal.bridge.common.GetHouseStatus;
22 import org.openhab.binding.velux.internal.bridge.common.GetLANConfig;
23 import org.openhab.binding.velux.internal.bridge.common.GetProduct;
24 import org.openhab.binding.velux.internal.bridge.common.GetProductLimitation;
25 import org.openhab.binding.velux.internal.bridge.common.GetProducts;
26 import org.openhab.binding.velux.internal.bridge.common.GetScenes;
27 import org.openhab.binding.velux.internal.bridge.common.GetWLANConfig;
28 import org.openhab.binding.velux.internal.bridge.common.Login;
29 import org.openhab.binding.velux.internal.bridge.common.Logout;
30 import org.openhab.binding.velux.internal.bridge.common.RunProductCommand;
31 import org.openhab.binding.velux.internal.bridge.common.RunProductDiscovery;
32 import org.openhab.binding.velux.internal.bridge.common.RunProductIdentification;
33 import org.openhab.binding.velux.internal.bridge.common.RunProductSearch;
34 import org.openhab.binding.velux.internal.bridge.common.RunScene;
35 import org.openhab.binding.velux.internal.bridge.common.SetHouseStatusMonitor;
36 import org.openhab.binding.velux.internal.bridge.common.SetProductLimitation;
37 import org.openhab.binding.velux.internal.bridge.common.SetSceneVelocity;
38 import org.slf4j.Logger;
39 import org.slf4j.LoggerFactory;
40
41 /**
42  * SLIP-based 3rd Level I/O interface towards the <B>Velux</B> bridge.
43  * <P>
44  * It provides the one-and-only protocol specific 1st-level communication class.
45  * Additionally it provides all methods for different gateway interactions.
46  * <P>
47  * The following class access methods exist:
48  * <UL>
49  * <LI>{@link SlipBridgeAPI#getDeviceStatus} for retrieving the bridge state (i.e. IDLE, BUSY, a.s.o),</LI>
50  * <LI>{@link SlipBridgeAPI#getFirmware} for retrieving the firmware version of the bridge,</LI>
51  * <LI>{@link SlipBridgeAPI#getHouseStatus} for retrieving the information about device state changes recognized by the
52  * bridge,</LI>
53  * <LI>{@link SlipBridgeAPI#getLANConfig} for retrieving the complete LAN information of the bridge,</LI>
54  * <LI>{@link SlipBridgeAPI#getProduct} for retrieving the any information about a device behind the bridge,</LI>
55  * <LI>{@link SlipBridgeAPI#getProductLimitation} for retrieving the limitation information about a device behind the
56  * bridge,</LI>
57  * <LI>{@link SlipBridgeAPI#getProducts} for retrieving the any information for all devices behind the bridge,</LI>
58  * <LI>{@link SlipBridgeAPI#getScenes} for retrieving the any information for all scenes defined on the bridge,</LI>
59  * <LI>{@link SlipBridgeAPI#getWLANConfig} for retrieving the complete WLAN information of the bridge,</LI>
60  * <LI>{@link SlipBridgeAPI#login} for establishing a trusted connectivity by authentication,</LI>
61  * <LI>{@link SlipBridgeAPI#logout} for tearing down the trusted connectivity by deauthentication,</LI>
62  * <LI>{@link SlipBridgeAPI#runProductCommand} for manipulation of a device behind the bridge (i.e. instructing to
63  * modify a position),</LI>
64  * <LI>{@link SlipBridgeAPI#runProductDiscovery} for activation of learning mode of the bridge to discovery new
65  * products,</LI>
66  * <LI>{@link SlipBridgeAPI#runProductIdentification} for human-oriented identification a device behind the bridge (i.e.
67  * by winking or switching on-and-off),</LI>
68  * <LI>{@link SlipBridgeAPI#runProductSearch} for searching for lost products on the bridge,</LI>
69  * <LI>{@link SlipBridgeAPI#runScene} for manipulation of a set of devices behind the bridge which are tied together as
70  * scene,</LI>
71  * <LI>{@link SlipBridgeAPI#setHouseStatusMonitor} for activation or deactivation of the house monitoring mode to be
72  * informed about device state changes recognized by the bridge,</LI>
73  * <LI>{@link SlipBridgeAPI#setSceneVelocity} for changes the velocity of a scene defined on the bridge (i.e. silent or
74  * fast mode).</LI>
75  * </UL>
76  * <P>
77  * As most derived class of the several inheritance levels it defines an
78  * interfacing method which returns the SLIP-protocol-specific communication for gateway interaction.
79  *
80  * @author Guenther Schreiner - Initial contribution.
81  */
82 @NonNullByDefault
83 class SlipBridgeAPI implements BridgeAPI {
84     private final Logger logger = LoggerFactory.getLogger(SlipBridgeAPI.class);
85
86     private static final GetDeviceStatus GETDEVICESTATUS = new SCgetDeviceStatus();
87     private static final GetFirmware GETFIRMWARE = new SCgetFirmware();
88     private static final GetHouseStatus GETHOUSESTATUS = new SCgetHouseStatus();
89     private static final GetLANConfig GETLANCONFIG = new SCgetLANConfig();
90     private static final GetProduct GETPRODUCT = new SCgetProduct();
91     private static final GetProductLimitation GETPRODUCTLIMITATION = new SCgetLimitation();
92     private static final GetProducts GETPRODUCTS = new SCgetProducts();
93     private static final GetScenes GETSCENES = new SCgetScenes();
94     private static final GetWLANConfig GETWLANCONFIG = new SCgetWLANConfig();
95     private static final Login LOGIN = new SClogin();
96     private static final Logout LOGOUT = new SClogout();
97     private static final RunProductCommand RUNPRODUCTCOMMAND = new SCrunProductCommand();
98     private static final RunProductDiscovery RUNPRODUCTDISCOVERY = new SCrunProductDiscovery();
99     private static final RunProductIdentification RUNPRODUCTIDENTIFICATION = new SCrunProductIdentification();
100     private static final RunProductSearch RUNPRODUCTSEARCH = new SCrunProductSearch();
101     private static final RunScene RUNSCENE = new SCrunScene();
102     private static final SetHouseStatusMonitor SETHOUSESTATUSMONITOR = new SCsetHouseStatusMonitor();
103     private static final SetProductLimitation SETPRODUCTLIMITATION = new SCsetLimitation();
104     private static final SetSceneVelocity SETSCENEVELOCITY = new SCsetSceneVelocity();
105
106     /**
107      * Constructor.
108      * <P>
109      * Inherits the initialization of the binding-wide instance for dealing for common information and
110      * initializes the handler {@link SlipVeluxBridge#bridgeAPI}
111      * to pass the interface methods.
112      *
113      * @param bridgeInstance refers to the binding-wide instance for dealing for common informations.
114      */
115     SlipBridgeAPI(VeluxBridgeInstance bridgeInstance) {
116         logger.trace("SlipBridgeAPI(constructor) called.");
117     }
118
119     @Override
120     public GetDeviceStatus getDeviceStatus() {
121         return GETDEVICESTATUS;
122     }
123
124     @Override
125     public GetFirmware getFirmware() {
126         return GETFIRMWARE;
127     }
128
129     @Override
130     public @Nullable GetHouseStatus getHouseStatus() {
131         return GETHOUSESTATUS;
132     }
133
134     @Override
135     public GetLANConfig getLANConfig() {
136         return GETLANCONFIG;
137     }
138
139     @Override
140     public @Nullable GetProduct getProduct() {
141         return GETPRODUCT;
142     }
143
144     @Override
145     public @Nullable GetProductLimitation getProductLimitation() {
146         return GETPRODUCTLIMITATION;
147     }
148
149     @Override
150     public @Nullable SetProductLimitation setProductLimitation() {
151         return SETPRODUCTLIMITATION;
152     }
153
154     @Override
155     public GetProducts getProducts() {
156         return GETPRODUCTS;
157     }
158
159     @Override
160     public GetScenes getScenes() {
161         return GETSCENES;
162     }
163
164     @Override
165     public GetWLANConfig getWLANConfig() {
166         return GETWLANCONFIG;
167     }
168
169     @Override
170     public Login login() {
171         return LOGIN;
172     }
173
174     @Override
175     public Logout logout() {
176         return LOGOUT;
177     }
178
179     @Override
180     public @Nullable RunProductCommand runProductCommand() {
181         return RUNPRODUCTCOMMAND;
182     }
183
184     @Override
185     public RunProductDiscovery runProductDiscovery() {
186         return RUNPRODUCTDISCOVERY;
187     }
188
189     @Override
190     public RunProductIdentification runProductIdentification() {
191         return RUNPRODUCTIDENTIFICATION;
192     }
193
194     @Override
195     public RunProductSearch runProductSearch() {
196         return RUNPRODUCTSEARCH;
197     }
198
199     @Override
200     public RunScene runScene() {
201         return RUNSCENE;
202     }
203
204     @Override
205     public @Nullable SetHouseStatusMonitor setHouseStatusMonitor() {
206         return SETHOUSESTATUSMONITOR;
207     }
208
209     @Override
210     public SetSceneVelocity setSceneVelocity() {
211         return SETSCENEVELOCITY;
212     }
213 }