Skip to content

Commit

Permalink
[nikobus] open connection on refresh even if no modules exist (#9603)
Browse files Browse the repository at this point in the history
* open connection on refresh even if no modules exist

Signed-off-by: Wouter Denayer <[email protected]>

* ran mvn spotless:apply

Signed-off-by: Wouter Denayer <[email protected]>

* removed unnecessary file

Signed-off-by: Wouter Denayer <[email protected]>

* returning when the connection is offline since following code won't work
either.

Signed-off-by: Wouter Denayer <[email protected]>

Co-authored-by: Wouter Denayer <[email protected]>
  • Loading branch information
gitwouter and Wouter Denayer authored Jan 4, 2021
1 parent 9ff37fb commit 1f3b0e2
Showing 1 changed file with 19 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@
import org.slf4j.LoggerFactory;

/**
* The {@link NikobusPcLinkHandler} is responsible for handling commands, which are
* sent or received from the PC-Link Nikobus component.
* The {@link NikobusPcLinkHandler} is responsible for handling commands, which
* are sent or received from the PC-Link Nikobus component.
*
* @author Boris Krivonog - Initial contribution
*/
Expand Down Expand Up @@ -329,6 +329,21 @@ private void refresh() {
List<Thing> things = getThing().getThings().stream()
.filter(thing -> thing.getHandler() instanceof NikobusModuleHandler).collect(Collectors.toList());

// if there are command listeners (buttons) then we need an open connection even if no modules exist
if (!commandListeners.isEmpty()) {
NikobusConnection connection = this.connection;
if (connection == null) {
return;
}
try {
connectIfNeeded(connection);
} catch (IOException e) {
connection.close();
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage());
return;
}
}

if (things.isEmpty()) {
logger.debug("Nothing to refresh");
return;
Expand All @@ -349,8 +364,8 @@ private synchronized void connectIfNeeded(NikobusConnection connection) throws I
if (!connection.isConnected()) {
connection.connect();

// Send connection sequence, mimicking the Nikobus software. If this is not send, PC-Link
// sometimes does not forward button presses via serial interface.
// Send connection sequence, mimicking the Nikobus software. If this is not
// sent, PC-Link sometimes does not forward button presses via serial interface.
Stream.of(new String[] { "++++", "ATH0", "ATZ", "$10110000B8CF9D", "#L0", "#E0", "#L0", "#E1" })
.map(NikobusCommand::new).forEach(this::sendCommand);

Expand Down

0 comments on commit 1f3b0e2

Please sign in to comment.