diff --git a/bundles/org.openhab.binding.unifi/README.md b/bundles/org.openhab.binding.unifi/README.md index a7241943012d0..07ae96ffe0992 100644 --- a/bundles/org.openhab.binding.unifi/README.md +++ b/bundles/org.openhab.binding.unifi/README.md @@ -28,14 +28,15 @@ It requires a network accessible instance of the [Ubiquiti Networks Controller S The following table describes the Bridge configuration parameters: -| Parameter | Description | Config | Default | -| ------------------------ | --------------------------------------------------------------------------- |--------- | ------- | -| host | Hostname of IP address of the UniFi Controller | Required | - | -| port | Port of the UniFi Controller. For UniFi OS, the default port is usually 443 | Required | - | -| unifios | If the UniFi Controller is running on UniFi OS | Required | false | -| username | The username to access the UniFi Controller | Required | - | -| password | The password to access the UniFi Controller | Required | - | -| refresh | Refresh interval in seconds | Optional | 10 | +| Parameter | Description | Config | Default | +|----------------|-----------------------------------------------------------------------------|--------- |---------| +| host | Hostname of IP address of the UniFi Controller | Required | - | +| port | Port of the UniFi Controller. For UniFi OS, the default port is usually 443 | Required | - | +| unifios | If the UniFi Controller is running on UniFi OS | Required | false | +| username | The username to access the UniFi Controller | Required | - | +| password | The password to access the UniFi Controller | Required | - | +| refresh | Refresh interval in seconds | Optional | 10 | +| timeoutSeconds | Request timeout in seconds. Increase if you experience TimeoutExceptions | Optional | 5 | ## Thing Configuration diff --git a/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/UniFiControllerThingConfig.java b/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/UniFiControllerThingConfig.java index a556e6b719bc9..5c26df2500f05 100644 --- a/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/UniFiControllerThingConfig.java +++ b/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/UniFiControllerThingConfig.java @@ -35,6 +35,8 @@ public class UniFiControllerThingConfig { private int refresh = 10; + private int timeoutSeconds = 5; + private boolean unifios = false; public String getHost() { @@ -82,6 +84,22 @@ private void setRefresh(final int refresh) { this.refresh = refresh; } + public int getTimeoutSeconds() { + return timeoutSeconds; + } + + public void setTimeoutSeconds(int timeoutSeconds) { + this.timeoutSeconds = timeoutSeconds; + } + + public boolean isUnifios() { + return unifios; + } + + public void setUnifios(boolean unifios) { + this.unifios = unifios; + } + public boolean isUniFiOS() { return unifios; } @@ -98,6 +116,7 @@ public boolean isValid() { @Override public String toString() { return "UniFiControllerConfig{host = " + host + ", port = " + port + ", username = " + username - + ", password = *****, refresh = " + refresh + ", unifios = " + unifios + "}"; + + ", password = *****, refresh = " + refresh + ", timeout = " + timeoutSeconds + ", unifios = " + + unifios + "}"; } } diff --git a/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/api/UniFiController.java b/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/api/UniFiController.java index 501d5e807c1bb..0864f64c7e882 100644 --- a/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/api/UniFiController.java +++ b/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/api/UniFiController.java @@ -70,19 +70,21 @@ public class UniFiController { private final String username; private final String password; private final boolean unifios; + private final int timeoutSeconds; private final Gson gson; private final Gson poeGson; private String csrfToken; public UniFiController(final HttpClient httpClient, final String host, final int port, final String username, - final String password, final boolean unifios) { + final String password, final boolean unifios, int timeoutSeconds) { this.httpClient = httpClient; this.host = host; this.port = port; this.username = username; this.password = password; this.unifios = unifios; + this.timeoutSeconds = timeoutSeconds; this.csrfToken = ""; final UniFiSiteInstanceCreator siteInstanceCreator = new UniFiSiteInstanceCreator(cache); final UniFiWlanInstanceCreator wlanInstanceCreator = new UniFiWlanInstanceCreator(cache); @@ -271,7 +273,8 @@ public void revokeVouchers(final UniFiSite site, final List vouche private UniFiControllerRequest newRequest(final Class responseType, final HttpMethod method, final Gson gson) { - return new UniFiControllerRequest<>(responseType, gson, httpClient, method, host, port, csrfToken, unifios); + return new UniFiControllerRequest<>(responseType, gson, httpClient, method, host, port, csrfToken, unifios, + timeoutSeconds); } private @Nullable T executeRequest(final UniFiControllerRequest request) throws UniFiException { diff --git a/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/api/UniFiControllerRequest.java b/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/api/UniFiControllerRequest.java index b7e27f76939b5..1e31feea2f939 100644 --- a/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/api/UniFiControllerRequest.java +++ b/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/api/UniFiControllerRequest.java @@ -64,8 +64,6 @@ class UniFiControllerRequest { private static final String CONTENT_TYPE_APPLICATION_JSON_UTF_8 = MimeTypes.Type.APPLICATION_JSON_UTF_8.asString(); - private static final long TIMEOUT_SECONDS = 5; - private static final String PROPERTY_DATA = "data"; private final Logger logger = LoggerFactory.getLogger(UniFiControllerRequest.class); @@ -79,6 +77,7 @@ class UniFiControllerRequest { private final int port; private final boolean unifios; + private final int timeoutSeconds; private final HttpMethod method; @@ -95,7 +94,8 @@ class UniFiControllerRequest { // Public API public UniFiControllerRequest(final Class resultType, final Gson gson, final HttpClient httpClient, - final HttpMethod method, final String host, final int port, final String csrfToken, final boolean unifios) { + final HttpMethod method, final String host, final int port, final String csrfToken, final boolean unifios, + int timeoutSeconds) { this.resultType = resultType; this.gson = gson; this.httpClient = httpClient; @@ -104,6 +104,7 @@ public UniFiControllerRequest(final Class resultType, final Gson gson, final this.port = port; this.csrfToken = csrfToken; this.unifios = unifios; + this.timeoutSeconds = timeoutSeconds; } public void setAPIPath(final String relativePath) { @@ -189,7 +190,7 @@ private Response getContentResponse(final InputStreamResponseListener listener) Response response; try { request.send(listener); - response = listener.get(TIMEOUT_SECONDS, TimeUnit.SECONDS); + response = listener.get(timeoutSeconds, TimeUnit.SECONDS); } catch (TimeoutException | InterruptedException e) { throw new UniFiCommunicationException(e); } catch (final ExecutionException e) { @@ -237,7 +238,7 @@ public String getCsrfToken() { private Request newRequest() { final HttpURI uri = new HttpURI(HttpScheme.HTTPS.asString(), host, port, path); - final Request request = httpClient.newRequest(uri.toString()).timeout(TIMEOUT_SECONDS, TimeUnit.SECONDS) + final Request request = httpClient.newRequest(uri.toString()).timeout(timeoutSeconds, TimeUnit.SECONDS) .method(method); for (final Entry entry : queryParameters.entrySet()) { request.param(entry.getKey(), entry.getValue()); diff --git a/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/handler/UniFiControllerThingHandler.java b/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/handler/UniFiControllerThingHandler.java index 46de404416736..1b5f74eff1ffe 100644 --- a/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/handler/UniFiControllerThingHandler.java +++ b/bundles/org.openhab.binding.unifi/src/main/java/org/openhab/binding/unifi/internal/handler/UniFiControllerThingHandler.java @@ -88,7 +88,7 @@ public void initialize() { config = getConfigAs(UniFiControllerThingConfig.class); logger.debug("Initializing the UniFi Controller Handler with config = {}", config); final UniFiController uc = new UniFiController(httpClient, config.getHost(), config.getPort(), - config.getUsername(), config.getPassword(), config.isUniFiOS()); + config.getUsername(), config.getPassword(), config.isUniFiOS(), config.getTimeoutSeconds()); controller = uc; updateStatus(UNKNOWN);