import java.time.Duration;
import java.util.Set;
+import java.util.concurrent.CancellationException;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ScheduledExecutorService;
logger.trace("Sending a Group Read Request telegram for {}", datapoint.getDatapoint().getMainAddress());
processCommunicator.read(datapoint.getDatapoint());
} catch (KNXException e) {
+ // Note: KnxException does not cover KnxRuntimeException and subclasses KnxSecureException,
+ // KnxIllegArgumentException
if (datapoint.getRetries() < datapoint.getLimit()) {
readDatapoints.add(datapoint);
logger.debug("Could not read value for datapoint {}: {}. Going to retry.",
logger.warn("Giving up reading datapoint {}, the number of maximum retries ({}) is reached.",
datapoint.getDatapoint().getMainAddress(), datapoint.getLimit());
}
- } catch (InterruptedException e) {
+ } catch (InterruptedException | CancellationException e) {
logger.debug("Interrupted sending KNX read request");
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());
}
}
}