diff --git a/addons/binding/org.openhab.binding.harmonyhub/.classpath b/addons/binding/org.openhab.binding.harmonyhub/.classpath
index b1f0a1d8aca8b..467a92d49143a 100644
--- a/addons/binding/org.openhab.binding.harmonyhub/.classpath
+++ b/addons/binding/org.openhab.binding.harmonyhub/.classpath
@@ -16,5 +16,6 @@
+
diff --git a/addons/binding/org.openhab.binding.harmonyhub/META-INF/MANIFEST.MF b/addons/binding/org.openhab.binding.harmonyhub/META-INF/MANIFEST.MF
index 034547bc237f0..48e388bc56337 100644
--- a/addons/binding/org.openhab.binding.harmonyhub/META-INF/MANIFEST.MF
+++ b/addons/binding/org.openhab.binding.harmonyhub/META-INF/MANIFEST.MF
@@ -3,19 +3,7 @@ Automatic-Module-Name: org.openhab.binding.harmonyhub
Bundle-ActivationPolicy: lazy
Bundle-ClassPath:
.,
- lib/harmony-java-client-1.2.2.jar,
- lib/jackson-annotations-2.8.0.jar,
- lib/jackson-core-2.8.7.jar,
- lib/jackson-databind-2.8.7.jar,
- lib/jxmpp-core-0.5.0.jar,
- lib/jxmpp-jid-0.5.0.jar,
- lib/jxmpp-util-cache-0.5.0.jar,
- lib/smack-core-4.2.0.jar,
- lib/smack-java7-4.2.0.jar,
- lib/smack-resolver-javax-4.2.0.jar,
- lib/smack-sasl-javax-4.2.0.jar,
- lib/smack-tcp-4.2.0.jar,
- lib/xpp3-1.1.4c.jar
+ lib/harmony-client-1.0-SNAPSHOT.jar
Bundle-ManifestVersion: 2
Bundle-Name: HarmonyHub Binding
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
@@ -26,10 +14,24 @@ Import-Package:
com.google.common.base,
com.google.common.collect,
com.google.common.io,
+ com.google.gson,
+ com.google.gson.annotations,
com.google.inject,
javax.inject,
org.apache.commons.lang,
org.eclipse.jdt.annotation;resolution:=optional,
+ org.eclipse.jetty.client,
+ org.eclipse.jetty.client.api,
+ org.eclipse.jetty.client.util,
+ org.eclipse.jetty.http,
+ org.eclipse.jetty.io,
+ org.eclipse.jetty.server.session,
+ org.eclipse.jetty.util.component,
+ org.eclipse.jetty.util.ssl,
+ org.eclipse.jetty.websocket.api,
+ org.eclipse.jetty.websocket.client,
+ org.eclipse.jetty.websocket.common,
+ org.eclipse.jetty.websocket.common.scopes,
org.eclipse.smarthome.config.core,
org.eclipse.smarthome.config.discovery,
org.eclipse.smarthome.core.cache,
diff --git a/addons/binding/org.openhab.binding.harmonyhub/build.properties b/addons/binding/org.openhab.binding.harmonyhub/build.properties
index 0ea904228e55e..4839fd90c5f71 100644
--- a/addons/binding/org.openhab.binding.harmonyhub/build.properties
+++ b/addons/binding/org.openhab.binding.harmonyhub/build.properties
@@ -4,18 +4,6 @@ bin.includes = META-INF/,\
.,\
OSGI-INF/,\
ESH-INF/,\
- lib/harmony-java-client-1.2.2.jar,\
- lib/jackson-annotations-2.8.0.jar,\
- lib/jackson-core-2.8.7.jar,\
- lib/jackson-databind-2.8.7.jar,\
- lib/jxmpp-core-0.5.0.jar,\
- lib/jxmpp-jid-0.5.0.jar,\
- lib/jxmpp-util-cache-0.5.0.jar,\
- lib/smack-core-4.2.0.jar,\
- lib/smack-java7-4.2.0.jar,\
- lib/smack-resolver-javax-4.2.0.jar,\
- lib/smack-sasl-javax-4.2.0.jar,\
- lib/smack-tcp-4.2.0.jar,\
- lib/xpp3-1.1.4c.jar,\
+ lib/harmony-client-1.0-SNAPSHOT.jar, \
about.html
diff --git a/addons/binding/org.openhab.binding.harmonyhub/lib/harmony-client-1.0-SNAPSHOT.jar b/addons/binding/org.openhab.binding.harmonyhub/lib/harmony-client-1.0-SNAPSHOT.jar
new file mode 100644
index 0000000000000..e03c148beb7d6
Binary files /dev/null and b/addons/binding/org.openhab.binding.harmonyhub/lib/harmony-client-1.0-SNAPSHOT.jar differ
diff --git a/addons/binding/org.openhab.binding.harmonyhub/lib/harmony-java-client-1.2.2.jar b/addons/binding/org.openhab.binding.harmonyhub/lib/harmony-java-client-1.2.2.jar
deleted file mode 100644
index 60fa27d86961a..0000000000000
Binary files a/addons/binding/org.openhab.binding.harmonyhub/lib/harmony-java-client-1.2.2.jar and /dev/null differ
diff --git a/addons/binding/org.openhab.binding.harmonyhub/lib/jackson-annotations-2.8.0.jar b/addons/binding/org.openhab.binding.harmonyhub/lib/jackson-annotations-2.8.0.jar
deleted file mode 100644
index d19b67b0f1108..0000000000000
Binary files a/addons/binding/org.openhab.binding.harmonyhub/lib/jackson-annotations-2.8.0.jar and /dev/null differ
diff --git a/addons/binding/org.openhab.binding.harmonyhub/lib/jackson-core-2.8.7.jar b/addons/binding/org.openhab.binding.harmonyhub/lib/jackson-core-2.8.7.jar
deleted file mode 100644
index 3ddd6a0e5f48f..0000000000000
Binary files a/addons/binding/org.openhab.binding.harmonyhub/lib/jackson-core-2.8.7.jar and /dev/null differ
diff --git a/addons/binding/org.openhab.binding.harmonyhub/lib/jackson-databind-2.8.7.jar b/addons/binding/org.openhab.binding.harmonyhub/lib/jackson-databind-2.8.7.jar
deleted file mode 100644
index 1d155d36ed954..0000000000000
Binary files a/addons/binding/org.openhab.binding.harmonyhub/lib/jackson-databind-2.8.7.jar and /dev/null differ
diff --git a/addons/binding/org.openhab.binding.harmonyhub/lib/jxmpp-core-0.5.0.jar b/addons/binding/org.openhab.binding.harmonyhub/lib/jxmpp-core-0.5.0.jar
deleted file mode 100644
index ce5f193a045b2..0000000000000
Binary files a/addons/binding/org.openhab.binding.harmonyhub/lib/jxmpp-core-0.5.0.jar and /dev/null differ
diff --git a/addons/binding/org.openhab.binding.harmonyhub/lib/jxmpp-jid-0.5.0.jar b/addons/binding/org.openhab.binding.harmonyhub/lib/jxmpp-jid-0.5.0.jar
deleted file mode 100644
index e65dee78d11e1..0000000000000
Binary files a/addons/binding/org.openhab.binding.harmonyhub/lib/jxmpp-jid-0.5.0.jar and /dev/null differ
diff --git a/addons/binding/org.openhab.binding.harmonyhub/lib/jxmpp-util-cache-0.5.0.jar b/addons/binding/org.openhab.binding.harmonyhub/lib/jxmpp-util-cache-0.5.0.jar
deleted file mode 100644
index 724629a9a1420..0000000000000
Binary files a/addons/binding/org.openhab.binding.harmonyhub/lib/jxmpp-util-cache-0.5.0.jar and /dev/null differ
diff --git a/addons/binding/org.openhab.binding.harmonyhub/lib/smack-core-4.2.0.jar b/addons/binding/org.openhab.binding.harmonyhub/lib/smack-core-4.2.0.jar
deleted file mode 100644
index 35e358846e377..0000000000000
Binary files a/addons/binding/org.openhab.binding.harmonyhub/lib/smack-core-4.2.0.jar and /dev/null differ
diff --git a/addons/binding/org.openhab.binding.harmonyhub/lib/smack-java7-4.2.0.jar b/addons/binding/org.openhab.binding.harmonyhub/lib/smack-java7-4.2.0.jar
deleted file mode 100644
index 3191e3d768891..0000000000000
Binary files a/addons/binding/org.openhab.binding.harmonyhub/lib/smack-java7-4.2.0.jar and /dev/null differ
diff --git a/addons/binding/org.openhab.binding.harmonyhub/lib/smack-resolver-javax-4.2.0.jar b/addons/binding/org.openhab.binding.harmonyhub/lib/smack-resolver-javax-4.2.0.jar
deleted file mode 100644
index a5c891661be40..0000000000000
Binary files a/addons/binding/org.openhab.binding.harmonyhub/lib/smack-resolver-javax-4.2.0.jar and /dev/null differ
diff --git a/addons/binding/org.openhab.binding.harmonyhub/lib/smack-sasl-javax-4.2.0.jar b/addons/binding/org.openhab.binding.harmonyhub/lib/smack-sasl-javax-4.2.0.jar
deleted file mode 100644
index 12fc0b4bfd714..0000000000000
Binary files a/addons/binding/org.openhab.binding.harmonyhub/lib/smack-sasl-javax-4.2.0.jar and /dev/null differ
diff --git a/addons/binding/org.openhab.binding.harmonyhub/lib/smack-tcp-4.2.0.jar b/addons/binding/org.openhab.binding.harmonyhub/lib/smack-tcp-4.2.0.jar
deleted file mode 100644
index aee63b37b911d..0000000000000
Binary files a/addons/binding/org.openhab.binding.harmonyhub/lib/smack-tcp-4.2.0.jar and /dev/null differ
diff --git a/addons/binding/org.openhab.binding.harmonyhub/lib/xpp3-1.1.4c.jar b/addons/binding/org.openhab.binding.harmonyhub/lib/xpp3-1.1.4c.jar
deleted file mode 100644
index 451ac82af4a30..0000000000000
Binary files a/addons/binding/org.openhab.binding.harmonyhub/lib/xpp3-1.1.4c.jar and /dev/null differ
diff --git a/addons/binding/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/discovery/HarmonyDeviceDiscoveryService.java b/addons/binding/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/discovery/HarmonyDeviceDiscoveryService.java
index e5b8f29749bd4..9d5707e956cc7 100644
--- a/addons/binding/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/discovery/HarmonyDeviceDiscoveryService.java
+++ b/addons/binding/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/discovery/HarmonyDeviceDiscoveryService.java
@@ -21,8 +21,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import net.whistlingfish.harmony.config.Device;
-import net.whistlingfish.harmony.config.HarmonyConfig;
+import com.digitaldan.harmony.config.Device;
+import com.digitaldan.harmony.config.HarmonyConfig;
/**
* The {@link HarmonyDeviceDiscoveryService} class discovers Harmony Devices connected to a Harmony Hub
diff --git a/addons/binding/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/handler/HarmonyDeviceHandler.java b/addons/binding/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/handler/HarmonyDeviceHandler.java
index e8f99a4058ca4..c4bf6b89bf391 100644
--- a/addons/binding/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/handler/HarmonyDeviceHandler.java
+++ b/addons/binding/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/handler/HarmonyDeviceHandler.java
@@ -43,10 +43,10 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import net.whistlingfish.harmony.config.ControlGroup;
-import net.whistlingfish.harmony.config.Device;
-import net.whistlingfish.harmony.config.Function;
-import net.whistlingfish.harmony.config.HarmonyConfig;
+import com.digitaldan.harmony.config.ControlGroup;
+import com.digitaldan.harmony.config.Device;
+import com.digitaldan.harmony.config.Function;
+import com.digitaldan.harmony.config.HarmonyConfig;
/**
* The {@link HarmonyDeviceHandler} is responsible for handling commands for Harmony Devices, which are
diff --git a/addons/binding/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/handler/HarmonyHubHandler.java b/addons/binding/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/handler/HarmonyHubHandler.java
index 3b18e359838a1..f723b6e1536cc 100644
--- a/addons/binding/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/handler/HarmonyHubHandler.java
+++ b/addons/binding/org.openhab.binding.harmonyhub/src/main/java/org/openhab/binding/harmonyhub/internal/handler/HarmonyHubHandler.java
@@ -18,11 +18,8 @@
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
-import java.util.function.Supplier;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -52,12 +49,11 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import net.whistlingfish.harmony.ActivityChangeListener;
-import net.whistlingfish.harmony.ActivityStatusListener;
-import net.whistlingfish.harmony.HarmonyClient;
-import net.whistlingfish.harmony.HarmonyHubListener;
-import net.whistlingfish.harmony.config.Activity;
-import net.whistlingfish.harmony.config.HarmonyConfig;
+import com.digitaldan.harmony.HarmonyClient;
+import com.digitaldan.harmony.HarmonyClientListener;
+import com.digitaldan.harmony.config.Activity;
+import com.digitaldan.harmony.config.Activity.Status;
+import com.digitaldan.harmony.config.HarmonyConfig;
/**
* The {@link HarmonyHubHandler} is responsible for handling commands for Harmony Hubs, which are
@@ -68,7 +64,7 @@
* @author Wouter Born - Add null annotations
*/
@NonNullByDefault
-public class HarmonyHubHandler extends BaseBridgeHandler implements HarmonyHubListener {
+public class HarmonyHubHandler extends BaseBridgeHandler {
private final Logger logger = LoggerFactory.getLogger(HarmonyHubHandler.class);
@@ -87,13 +83,15 @@ public class HarmonyHubHandler extends BaseBridgeHandler implements HarmonyHubLi
private final ExpiringCacheAsync<@Nullable HarmonyConfig> configCache = new ExpiringCacheAsync<>(CONFIG_CACHE_TIME);
private final HarmonyHubHandlerFactory factory;
- private @NonNullByDefault({}) ScheduledExecutorService buttonExecutor;
+ // private @NonNullByDefault({}) ScheduledExecutorService buttonExecutor;
private @NonNullByDefault({}) HarmonyHubConfig config;
private @Nullable HarmonyClient client;
private @Nullable ScheduledFuture> retryJob;
private @Nullable ScheduledFuture> heartBeatJob;
+ private @Nullable HarmonyClientListener harmonyClientListener;
+
private int heartBeatInterval;
public HarmonyHubHandler(Bridge bridge, HarmonyHubHandlerFactory factory) {
@@ -112,7 +110,9 @@ public void handleCommand(ChannelUID channelUID, Command command) {
}
if (command instanceof RefreshType) {
- updateState(localClient.getCurrentActivity());
+ localClient.getCurrentActivity().thenAccept(activity -> {
+ updateState(activity);
+ });
} else if (command instanceof StringType) {
try {
try {
@@ -139,7 +139,6 @@ public void handleCommand(ChannelUID channelUID, Command command) {
@Override
public void initialize() {
- buttonExecutor = Executors.newSingleThreadScheduledExecutor();
config = getConfigAs(HarmonyHubConfig.class);
cancelRetry();
updateStatus(ThingStatus.UNKNOWN);
@@ -148,7 +147,6 @@ public void initialize() {
@Override
public void dispose() {
- buttonExecutor.shutdownNow();
listeners.clear();
cancelRetry();
disconnectFromHub();
@@ -168,41 +166,12 @@ protected void updateStatus(ThingStatus status, ThingStatusDetail detail, @Nulla
public void channelLinked(ChannelUID channelUID) {
HarmonyClient localClient = client;
if (localClient != null) {
- updateState(channelUID, new StringType(localClient.getCurrentActivity().getLabel()));
+ localClient.getCurrentActivity().thenAccept((activity) -> {
+ updateState(channelUID, new StringType(activity.getLabel()));
+ });
}
}
- /**
- * HarmonyHubListener interface
- */
- @Override
- public void removeFrom(@Nullable HarmonyClient hc) {
- // we have been removed from listening
- }
-
- /**
- * HarmonyHubListener interface
- */
- @Override
- public void addTo(@Nullable HarmonyClient hc) {
- if (hc == null) {
- logger.warn("Cannot add listeners to HarmonyClient that is null");
- return;
- }
- hc.addListener(new ActivityChangeListener() {
- @Override
- public void activityStarted(@Nullable Activity activity) {
- updateState(activity);
- }
- });
- hc.addListener(new ActivityStatusListener() {
- @Override
- public void activityStatusChanged(@Nullable Activity activity, Activity.@Nullable Status status) {
- updateActivityStatus(activity, status);
- }
- });
- }
-
/**
* Starts the connection process
*/
@@ -229,27 +198,55 @@ private synchronized void connect() {
}
}
- HarmonyClient localClient = HarmonyClient.getInstance();
- localClient.addListener(this);
- client = localClient;
+ HarmonyClient localClient = new HarmonyClient();
+ harmonyClientListener = new HarmonyClientListener() {
+
+ @Override
+ public void hubDisconnected(@Nullable String reason) {
+ setOfflineAndReconnect(String.format("Could not connect: %s", reason));
+
+ }
+
+ @Override
+ public void hubConnected() {
+ client = localClient;
+ heartBeatJob = scheduler.scheduleWithFixedDelay(() -> {
+ try {
+ client.sendPing();
+ } catch (Exception e) {
+ logger.warn("heartbeat failed", e);
+ setOfflineAndReconnect("Hearbeat failed");
+ }
+ }, heartBeatInterval, heartBeatInterval, TimeUnit.SECONDS);
+ updateStatus(ThingStatus.ONLINE);
+ getConfigFuture()
+ .thenAcceptAsync(harmonyConfig -> updateCurrentActivityChannel(harmonyConfig), scheduler)
+ .exceptionally(e -> {
+ setOfflineAndReconnect("Getting config failed: " + e.getMessage());
+ return null;
+ });
+
+ }
+
+ @Override
+ public void activityStatusChanged(@Nullable Activity activity, @Nullable Status status) {
+ updateActivityStatus(activity, status);
+
+ }
+
+ @Override
+ public void activityStarted(@Nullable Activity activity) {
+ updateState(activity);
+
+ }
+ };
+
+ localClient.addListener(harmonyClientListener);
try {
logger.debug("Connecting: host {}", host);
localClient.connect(host);
- heartBeatJob = scheduler.scheduleWithFixedDelay(() -> {
- try {
- localClient.sendPing();
- } catch (Exception e) {
- logger.warn("heartbeat failed", e);
- setOfflineAndReconnect("Hearbeat failed");
- }
- }, heartBeatInterval, heartBeatInterval, TimeUnit.SECONDS);
- updateStatus(ThingStatus.ONLINE);
- getConfigFuture().thenAcceptAsync(harmonyConfig -> updateCurrentActivityChannel(harmonyConfig), scheduler)
- .exceptionally(e -> {
- setOfflineAndReconnect("Getting config failed: " + e.getMessage());
- return null;
- });
+
} catch (Exception e) {
logger.debug("Could not connect to HarmonyHub at {}", host, e);
setOfflineAndReconnect("Could not connect: " + e.getMessage());
@@ -264,7 +261,7 @@ private void disconnectFromHub() {
HarmonyClient localClient = client;
if (localClient != null) {
- localClient.removeListener(this);
+ localClient.removeListener(harmonyClientListener);
localClient.disconnect();
}
}
@@ -386,12 +383,8 @@ private void updateCurrentActivityChannel(@Nullable HarmonyConfig config) {
* @param button
*/
public void pressButton(int device, String button) {
- if (!buttonExecutor.isShutdown()) {
- buttonExecutor.execute(() -> {
- if (client != null) {
- client.pressButton(device, button);
- }
- });
+ if (client != null) {
+ client.pressButton(device, button);
}
}
@@ -402,33 +395,17 @@ public void pressButton(int device, String button) {
* @param button
*/
public void pressButton(String device, String button) {
- if (!buttonExecutor.isShutdown()) {
- buttonExecutor.execute(() -> {
- if (client != null) {
- client.pressButton(device, button);
- }
- });
+ if (client != null) {
+ client.pressButton(device, button);
}
}
public CompletableFuture<@Nullable HarmonyConfig> getConfigFuture() {
- Supplier<@Nullable HarmonyConfig> configSupplier = () -> {
- HarmonyClient localClient = client;
- if (localClient == null) {
- throw new IllegalStateException("Client is null");
- }
- try {
- logger.debug("Getting config from client");
- return localClient.getConfig();
- } catch (Exception e) {
- logger.debug("Could not get config from client", e);
- throw e;
- }
- };
-
- return configCache.getValue(() -> {
- return CompletableFuture.supplyAsync(configSupplier, scheduler);
- });
+ HarmonyClient localClient = client;
+ if (localClient == null) {
+ throw new IllegalStateException("Client is null");
+ }
+ return localClient.getConfig();
}
/**