[knx] Handle exceptions during initial read (#12520)
fixes #7239 Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
This commit is contained in:
parent
972149fb3f
commit
7e35341f23
|
@ -14,6 +14,7 @@ package org.openhab.binding.knx.internal.client;
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.CancellationException;
|
||||||
import java.util.concurrent.CopyOnWriteArraySet;
|
import java.util.concurrent.CopyOnWriteArraySet;
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
@ -291,6 +292,8 @@ public abstract class AbstractKNXClient implements NetworkLinkListener, KNXClien
|
||||||
logger.trace("Sending a Group Read Request telegram for {}", datapoint.getDatapoint().getMainAddress());
|
logger.trace("Sending a Group Read Request telegram for {}", datapoint.getDatapoint().getMainAddress());
|
||||||
processCommunicator.read(datapoint.getDatapoint());
|
processCommunicator.read(datapoint.getDatapoint());
|
||||||
} catch (KNXException e) {
|
} catch (KNXException e) {
|
||||||
|
// Note: KnxException does not cover KnxRuntimeException and subclasses KnxSecureException,
|
||||||
|
// KnxIllegArgumentException
|
||||||
if (datapoint.getRetries() < datapoint.getLimit()) {
|
if (datapoint.getRetries() < datapoint.getLimit()) {
|
||||||
readDatapoints.add(datapoint);
|
readDatapoints.add(datapoint);
|
||||||
logger.debug("Could not read value for datapoint {}: {}. Going to retry.",
|
logger.debug("Could not read value for datapoint {}: {}. Going to retry.",
|
||||||
|
@ -299,9 +302,15 @@ public abstract class AbstractKNXClient implements NetworkLinkListener, KNXClien
|
||||||
logger.warn("Giving up reading datapoint {}, the number of maximum retries ({}) is reached.",
|
logger.warn("Giving up reading datapoint {}, the number of maximum retries ({}) is reached.",
|
||||||
datapoint.getDatapoint().getMainAddress(), datapoint.getLimit());
|
datapoint.getDatapoint().getMainAddress(), datapoint.getLimit());
|
||||||
}
|
}
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException | CancellationException e) {
|
||||||
logger.debug("Interrupted sending KNX read request");
|
logger.debug("Interrupted sending KNX read request");
|
||||||
return;
|
return;
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Any other exception: Fail gracefully, i.e. notify user and continue reading next DP.
|
||||||
|
// Not catching this would end the scheduled read for all DPs in case of an error.
|
||||||
|
// Severity is warning as this is likely caused by a configuration error.
|
||||||
|
logger.warn("Error reading datapoint {}: {}", datapoint.getDatapoint().getMainAddress(),
|
||||||
|
e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue