diff --git a/org.openhab.binding.zigbee/src/main/java/org/openhab/binding/zigbee/handler/ZigBeeSerialPort.java b/org.openhab.binding.zigbee/src/main/java/org/openhab/binding/zigbee/handler/ZigBeeSerialPort.java index 02f9be189..db31b1fbd 100644 --- a/org.openhab.binding.zigbee/src/main/java/org/openhab/binding/zigbee/handler/ZigBeeSerialPort.java +++ b/org.openhab.binding.zigbee/src/main/java/org/openhab/binding/zigbee/handler/ZigBeeSerialPort.java @@ -12,7 +12,9 @@ import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; +import java.util.Set; import java.util.TooManyListenersException; +import java.util.concurrent.ConcurrentHashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -94,6 +96,8 @@ public class ZigBeeSerialPort implements ZigBeePort, SerialPortEventListener { */ private final Object bufferSynchronisationObject = new Object(); + private Set portOpenRuntimeExcepionMessages = ConcurrentHashMap.newKeySet(); + /** * Constructor setting port name and baud rate. * @@ -157,6 +161,7 @@ public boolean open(int baudRate, FlowControl flowControl) { serialPort.notifyOnDataAvailable(true); logger.debug("Serial port [{}] is initialized.", portName); + portOpenRuntimeExcepionMessages.clear(); } catch (NoSuchPortException e) { logger.error("Serial Error: Port {} does not exist.", portName); return false; @@ -169,6 +174,12 @@ public boolean open(int baudRate, FlowControl flowControl) { } catch (TooManyListenersException e) { logger.error("Serial Error: Too many listeners on Port {}.", portName); return false; + } catch (RuntimeException e) { + if (!portOpenRuntimeExcepionMessages.contains(e.getMessage())) { + portOpenRuntimeExcepionMessages.add(e.getMessage()); + logger.error("Serial Error: Device cannot be opened on Port {}. Caused by {}", portName, e.getMessage()); + } + return false; } try {