*/
package org.openhab.binding.velux.internal.handler;
+import java.io.IOException;
+import java.net.InetAddress;
import java.time.Duration;
import java.time.Instant;
import java.util.Collection;
private VeluxBridgeConfiguration veluxBridgeConfiguration = new VeluxBridgeConfiguration();
private Duration offlineDelay = Duration.ofMinutes(5);
+ private int initializeRetriesDone = 0;
/*
* ************************
offlineDelay = Duration.ofMillis(
((long) Math.pow(2, veluxBridgeConfiguration.retries + 1) - 1) * veluxBridgeConfiguration.refreshMSecs);
+ initializeRetriesDone = 0;
+
scheduler.execute(() -> {
disposing = false;
initializeSchedulerJob();
logger.trace("initializeSchedulerJob(): adopt new bridge configuration parameters.");
bridgeParamsUpdated();
+ if ((thing.getStatus() == ThingStatus.OFFLINE)
+ && (thing.getStatusInfo().getStatusDetail() == ThingStatusDetail.COMMUNICATION_ERROR)) {
+ if (initializeRetriesDone <= veluxBridgeConfiguration.retries) {
+ initializeRetriesDone++;
+ scheduler.schedule(() -> initializeSchedulerJob(),
+ ((long) Math.pow(2, initializeRetriesDone) * veluxBridgeConfiguration.timeoutMsecs),
+ TimeUnit.MILLISECONDS);
+ }
+ return;
+ }
+
long mSecs = veluxBridgeConfiguration.refreshMSecs;
logger.trace("initializeSchedulerJob(): scheduling refresh at {} milliseconds.", mSecs);
refreshSchedulerJob = scheduler.scheduleWithFixedDelay(() -> {
logger.trace("bridgeParamsUpdated() done.");
return;
}
-
+ try {
+ InetAddress bridgeAddress = InetAddress.getByName(veluxBridgeConfiguration.ipAddress);
+ if (!bridgeAddress.isReachable(veluxBridgeConfiguration.timeoutMsecs)) {
+ throw new IOException();
+ }
+ } catch (IOException e) {
+ logger.debug("bridgeParamsUpdated(): Bridge ip address not reachable.");
+ updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR);
+ return;
+ }
logger.trace("bridgeParamsUpdated(): Trying to authenticate towards bridge.");
if (!thisBridge.bridgeLogin()) {