| products | List of all recognized products |
| scenes | List of all defined scenes |
| subnetMask | IP subnetmask of the Bridge |
-| vendor | Vendow name |
+| vendor | Vendor name |
| WLANSSID | Name of the wireless network (not suported any more) |
| WLANPassword | WLAN Authentication Password (not suported any more) |
import java.lang.reflect.Field;
-import org.apache.commons.lang.StringUtils;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.velux.internal.config.VeluxBridgeConfiguration;
logger.trace("VeluxBinding(constructor) called.");
if (logger.isTraceEnabled()) {
for (Field field : VeluxBridgeConfiguration.class.getFields()) {
- if (!StringUtils.capitalize(field.getName()).contentEquals(field.getName())) {
- logger.trace("VeluxBinding(): FYI: a potential configuration string is '{}'.", field.getName());
+ String fName = field.getName();
+ if ((fName.length() > 0) && Character.isUpperCase(fName.charAt(0))) {
+ logger.trace("VeluxBinding(): FYI: a potential configuration string is '{}'.", fName);
}
}
}
* <li>existingProducts ({@link VeluxExistingProducts}).
* </ul>
*/
- @NonNullByDefault
public class Channel {
public VeluxExistingProducts existingProducts = new VeluxExistingProducts();
}
* <li>{@link #gwStateDescription} containing the verbose gateway state.
* </ul>
*/
- @NonNullByDefault
public class Channel {
public boolean isRetrieved = false;
public StringType gwState = new StringType(VeluxBindingConstants.UNKNOWN);
* <li>firmwareVersion (human readable String).
* </ul>
*/
- @NonNullByDefault
public class Channel {
public boolean isRetrieved = false;
public StringType firmwareVersion = new StringType(VeluxBindingConstants.UNKNOWN);
* <li>enabledDHCP.
* </ul>
*/
- @NonNullByDefault
public class Channel {
public boolean isRetrieved = false;
public StringType openHABipAddress = new StringType(VeluxBindingConstants.UNKNOWN);
* <li>existingScenes ({@link VeluxExistingScenes}).
* </ul>
*/
- @NonNullByDefault
public class Channel {
public VeluxExistingScenes existingScenes = new VeluxExistingScenes();
}
* <li>wlanPassword.
* </ul>
*/
- @NonNullByDefault
public class Channel {
public boolean isRetrieved = false;
public StringType openHABwlanSSID = new StringType(VeluxBindingConstants.UNKNOWN);
* NOTE: the gateway software is extremely sensitive to this exact JSON structure.
* Any modifications (like omitting empty params) will lead to an gateway error.
*/
- @NonNullByDefault
private static class Request {
@SuppressWarnings("unused")
* }
* </pre>
*/
- @NonNullByDefault
private static class Response {
@SuppressWarnings("unused")
private String token = VeluxBindingConstants.UNKNOWN;
* {"action":"getFirmware","params":{}}
* </pre>
*/
- @NonNullByDefault
private static class Request {
@SuppressWarnings("unused")
* <P>
* Used within structure {@link JCgetFirmware} to describe the software of the Bridge.
*/
- @NonNullByDefault
private static class BCfirmwareVersion {
/*
* "version": "0.1.1.0.41.0"
* }
* </pre>
*/
- @NonNullByDefault
private static class Response {
@SuppressWarnings("unused")
private String token = VeluxBindingConstants.UNKNOWN;
* {"action":"get","params":{}}
* </pre>
*/
- @NonNullByDefault
private static class Request {
@SuppressWarnings("unused")
* {"ipAddress":"192.168.45.9","subnetMask":"255.255.255.0","defaultGateway":"192.168.45.129","dhcp":false}
* </pre>
*/
- @NonNullByDefault
private static class BCLANConfig {
private String ipAddress = VeluxBindingConstants.UNKNOWN;
private String subnetMask = VeluxBindingConstants.UNKNOWN;
* }
* </pre>
*/
- @NonNullByDefault
private static class Response {
@SuppressWarnings("unused")
private String token = VeluxBindingConstants.UNKNOWN;
* ]
* </PRE>
*/
- @NonNullByDefault
private class BCproduct {
private String name = VeluxBindingConstants.UNKNOWN;
@SuppressWarnings("unused")
* {"action":"get","params":{}}
* </pre>
*/
- @NonNullByDefault
private static class Request {
@SuppressWarnings("unused")
* }
* </pre>
*/
- @NonNullByDefault
private static class Response {
@SuppressWarnings("unused")
private String token = VeluxBindingConstants.UNKNOWN;
* "status": 0
* </PRE>
*/
- @NonNullByDefault
private static class BCproductState {
private int typeId;
private String name = VeluxBindingConstants.UNKNOWN;
* },
* </PRE>
*/
- @NonNullByDefault
private static class BCscene {
private String name = VeluxBindingConstants.UNKNOWN;
private int id;
* {"action":"get","params":{}}
* </pre>
*/
- @NonNullByDefault
private static class Request {
@SuppressWarnings("unused")
* }
* </PRE>
*/
- @NonNullByDefault
private static class Response {
@SuppressWarnings("unused")
private String token = VeluxBindingConstants.UNKNOWN;
* {"action":"wifi","params":{}}
* </pre>
*/
- @NonNullByDefault
private static class Request {
@SuppressWarnings("unused")
* {"password":"Esf56mxqFY","name":"VELUX_KLF_847C"}
* </PRE>
*/
- @NonNullByDefault
private static class BCWLANConfig {
private String password = VeluxBindingConstants.UNKNOWN;
* }
* </pre>
*/
- @NonNullByDefault
private static class Response {
@SuppressWarnings("unused")
private String token = VeluxBindingConstants.UNKNOWN;
/*
* Message Objects
*/
- @NonNullByDefault
private static class ParamsLogin {
@SuppressWarnings("unused")
private String password = VeluxBindingConstants.UNKNOWN;
* {"action":"login","params":{"password":"PASSWORD"}}
* </pre>
*/
- @NonNullByDefault
private static class Request {
@SuppressWarnings("unused")
* '{"token": "PHPnfLda71xfGlxoYEOTGQ==", "result": true, "deviceStatus": "IDLE", "data": {}, "errors": [] }'
* </pre>
*/
- @NonNullByDefault
private static class Response {
private String token = VeluxBindingConstants.UNKNOWN;
private boolean result;
* {"action":"logout","params":{}}
* </pre>
*/
- @NonNullByDefault
private static class Request {
@SuppressWarnings("unused")
* '{"token": "PHPnfLda71xfGlxoYEOTGQ==", "result": true, "deviceStatus": "IDLE", "data": {}, "errors": [] }'
* </pre>
*/
- @NonNullByDefault
private static class Response {
@SuppressWarnings("unused")
private String token = VeluxBindingConstants.UNKNOWN;
* NOTE: the gateway software is extremely sensitive to this exact JSON structure.
* Any modifications (like omitting empty params) will lead to an gateway error.
*/
- @NonNullByDefault
private static class Request {
@SuppressWarnings("unused")
* }
* </pre>
*/
- @NonNullByDefault
private static class Response {
@SuppressWarnings("unused")
private String token = VeluxBindingConstants.UNKNOWN;
/*
* Message Objects
*/
- @NonNullByDefault
private static class ParamsIdentifyProduct {
@SuppressWarnings("unused")
private int id;
* {"action":"identify","params":{"id":23,"time":254}}
* </pre>
*/
- @NonNullByDefault
private static class Request {
@SuppressWarnings("unused")
private String action;
* }
* </pre>
*/
- @NonNullByDefault
private static class Response {
@SuppressWarnings("unused")
private String token = VeluxBindingConstants.UNKNOWN;
* NOTE: the gateway software is extremely sensitive to this exact JSON structure.
* Any modifications (like omitting empty params) will lead to an gateway error.
*/
- @NonNullByDefault
private static class Request {
@SuppressWarnings("unused")
* }
* </pre>
*/
- @NonNullByDefault
private static class Response {
@SuppressWarnings("unused")
private String token = VeluxBindingConstants.UNKNOWN;
/*
* Message Objects
*/
- @NonNullByDefault
private static class ParamsRunScene {
@SuppressWarnings("unused")
private int id;
* {"action":"run","params":{"id":9}}
* </pre>
*/
- @NonNullByDefault
private static class Request {
@SuppressWarnings("unused")
private String action;
* }
* </pre>
*/
- @NonNullByDefault
private static class Response {
@SuppressWarnings("unused")
private String token = VeluxBindingConstants.UNKNOWN;
/*
* Message Objects
*/
- @NonNullByDefault
private static class ParamsRunScene {
@SuppressWarnings("unused")
private int id;
* {"action":"setSilentMode","params":{"id":9,"silent":false}}}
* </pre>
*/
- @NonNullByDefault
private static class Request {
@SuppressWarnings("unused")
private String action;
* }
* </pre>
*/
- @NonNullByDefault
private static class Response {
@SuppressWarnings("unused")
private String token = VeluxBindingConstants.UNKNOWN;
*/
package org.openhab.binding.velux.internal.bridge.json;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
import java.util.TreeSet;
-import org.apache.commons.io.IOUtils;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.openhab.binding.velux.internal.bridge.VeluxBridge;
import org.openhab.binding.velux.internal.bridge.VeluxBridgeInstance;
} else {
response = ioUnauthenticated(sapURL, getRequest, classOfResponse);
}
+ if (response == null) {
+ throw new IOException("Failed to create 'response' object");
+ }
communication.setResponse(response);
logger.trace("bridgeCommunicate(): communication result is {}, returning details.",
communication.isCommunicationSuccessful());
if (authentication.length() > 0) {
headerItems.setProperty("Authorization", String.format("Bearer %s", authentication));
}
- InputStream content = IOUtils.toInputStream(jsonRequest, StandardCharsets.UTF_8.name());
+ InputStream content = new ByteArrayInputStream(jsonRequest.getBytes(StandardCharsets.UTF_8));
String jsonResponse = HttpUtil.executeUrl("PUT", url, headerItems, content, "application/json",
this.bridgeInstance.veluxBridgeConfiguration().timeoutMsecs);
T response = gson.fromJson(jsonResponse, classOfResponse);
lastCommunicationInMSecs = lastSuccessfulCommunicationInMSecs = System.currentTimeMillis();
return response;
-
} catch (IOException ioe) {
logger.trace("io(): Exception occurred during I/O: {}.", ioe.getMessage());
// Error Retries with Exponential Backoff
logger.info("io(): Exception occurred on deserialization: {}, aborting.", jse.getMessage());
throw jse;
}
-
} while (retryCount++ < this.bridgeInstance.veluxBridgeConfiguration().retries);
throw new IOException(String.format("io(): socket I/O failed (%d times).",
this.bridgeInstance.veluxBridgeConfiguration().retries));
*/
public SlipEncoding(short command, byte[] data) {
logger.trace("SlipEncoding(constructor) for command 0x{} with data size {} called.",
- Integer.toHexString(new Short(command).intValue()), data.length);
+ Integer.toHexString(Short.valueOf(command).intValue()), data.length);
if (data.length > 250) {
logger.warn("SlipEncoding(constructor) called with data size {}: too big, aborting.", data.length);
encodingValid = false;
private void registerDeviceDiscoveryService(VeluxBridgeHandler bridgeHandler) {
logger.trace("registerDeviceDiscoveryService({}) called.", bridgeHandler);
- boolean createNew = (discoveryService == null);
- if (createNew) {
+ boolean createNew = false;
+ VeluxDiscoveryService discoveryService = this.discoveryService;
+ if (discoveryService == null) {
discoveryService = new VeluxDiscoveryService(localization);
+ createNew = true;
}
discoveryService.addBridge(bridgeHandler);
if (createNew) {
private synchronized void unregisterDeviceDiscoveryService(VeluxBridgeHandler bridgeHandler) {
logger.trace("unregisterDeviceDiscoveryService({}) called.", bridgeHandler);
+ VeluxDiscoveryService discoveryService = this.discoveryService;
if (discoveryService != null) {
discoveryService.removeBridge(bridgeHandler);
if (discoveryService.isEmpty()) {
- discoveryServiceRegistration.unregister();
+ ServiceRegistration<?> discoveryServiceRegistration = this.discoveryServiceRegistration;
+ if (discoveryServiceRegistration != null) {
+ discoveryServiceRegistration.unregister();
+ }
}
}
}
* <LI>{@link #wlanConfig} - Information about the gateway configuration.</LI>
* </UL>
*/
- @NonNullByDefault
public class BridgeParameters {
/** Information retrieved by {@link VeluxBridgeActuators#getProducts} */
public VeluxBridgeActuators actuators = new VeluxBridgeActuators();
* <LI>Method {@link toString} to return a String.</LI>
* </UL>
*/
- @NonNullByDefault
public static class CommandName {
private String name;
* <LI>Method {@link toString} to return a well-formatted String.</LI>
* </UL>
*/
- @NonNullByDefault
public static class CommandNumber {
private short commandNumber;
@Override
public String toString() {
- return "0x" + Integer.toHexString(new Short(commandNumber).intValue());
+ return "0x" + Integer.toHexString(Short.valueOf(commandNumber).intValue());
}
}
// Type definitions
- @NonNullByDefault
public static class ProductBridgeIndex {
// Public definition
// Type definitions
- @NonNullByDefault
private class ProductState {
private int state;
// Type definitions
- @NonNullByDefault
public static class SceneName {
private static final SceneName UNKNOWN = new SceneName(VeluxBindingConstants.UNKNOWN);
}
}
- @NonNullByDefault
public static class SceneBridgeIndex {
private static final SceneBridgeIndex UNKNOWN = new SceneBridgeIndex(0);
/**
* Class, which is needed to maintain a @NonNullByDefault for class {@link Localization}.
*/
- @NonNullByDefault
private class UnknownLocale implements LocaleProvider {
@Override
public Locale getLocale() {