diff --git a/pom.xml b/pom.xml index ee35e00..467016c 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.bwssystems.HABridge ha-bridge - 1.2.3d + 1.2.3e jar HA Bridge diff --git a/src/main/java/com/bwssystems/HABridge/BridgeSettings.java b/src/main/java/com/bwssystems/HABridge/BridgeSettings.java index 7ee6b46..41d0d8d 100644 --- a/src/main/java/com/bwssystems/HABridge/BridgeSettings.java +++ b/src/main/java/com/bwssystems/HABridge/BridgeSettings.java @@ -110,13 +110,13 @@ public class BridgeSettings { this.nestconfigured = isNestConfigured; } public Boolean isValidVera() { - if(this.veraaddress.contains(Configuration.DEFAULT_VERA_ADDRESS)) + if(this.veraaddress.contains(Configuration.DEFAULT_ADDRESS)) return false; return true; } public Boolean isValidHarmony() { List devicesList = this.harmonyaddress.getDevices(); - if(devicesList.get(0).getIp().contains(Configuration.DEFAULT_HARMONY_ADDRESS)) + if(devicesList.get(0).getIp().contains(Configuration.DEFAULT_ADDRESS)) return false; if(this.harmonypwd == null || this.harmonypwd == "") return false; diff --git a/src/main/java/com/bwssystems/HABridge/Configuration.java b/src/main/java/com/bwssystems/HABridge/Configuration.java index 11d43b8..504a9f6 100644 --- a/src/main/java/com/bwssystems/HABridge/Configuration.java +++ b/src/main/java/com/bwssystems/HABridge/Configuration.java @@ -4,8 +4,9 @@ public class Configuration { public final static String DEVICE_DB_DIRECTORY = "data/device.db"; public final static String UPNP_RESPONSE_PORT = "50000"; public final static String UPNP_RESPONSE_DEVICES = "30"; - public final static String DEFAULT_VERA_ADDRESS = "1.1.1.1"; - public final static String DEFAULT_HARMONY_ADDRESS = "1.1.1.1"; + public final static String DEFAULT_ADDRESS = "1.1.1.1"; + public final static String LOOP_BACK_ADDRESS = "127.0.0.1"; + public final static String LOOP_BACK_INTERFACE = "lo"; public final static String DEFAULT_HARMONY_ADDRESS_LIST = "{devices:[{name:default,ip:1.1.1.1}]}"; public final static String DEFAULT_USER = ""; public final static String DEFAULT_PWD = ""; diff --git a/src/main/java/com/bwssystems/HABridge/HABridge.java b/src/main/java/com/bwssystems/HABridge/HABridge.java index 119a011..23292be 100644 --- a/src/main/java/com/bwssystems/HABridge/HABridge.java +++ b/src/main/java/com/bwssystems/HABridge/HABridge.java @@ -3,8 +3,11 @@ package com.bwssystems.HABridge; import static spark.Spark.*; import java.net.InetAddress; -import java.net.UnknownHostException; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.Enumeration; +import org.apache.http.conn.util.InetAddressUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,36 +44,59 @@ public class HABridge { HueMulator theHueMulator; UpnpSettingsResource theSettingResponder; UpnpListener theUpnpListener; - InetAddress address; - String addressString; + InetAddress address = null; + String addressString = null; BridgeSettings bridgeSettings; Version theVersion; theVersion = new Version(); log.info("HA Bridge (v" + theVersion.getVersion() + ") starting setup...."); - //get ip address for upnp requests - try { - address = InetAddress.getLocalHost(); - addressString = address.getHostAddress(); - } catch (UnknownHostException e) { - log.error("Cannot get ip address of this host, Exiting with message: " + e.getMessage(), e); - return; - } bridgeSettings = new BridgeSettings(); bridgeSettings.setServerPort(System.getProperty("server.port", Configuration.DFAULT_WEB_PORT)); - bridgeSettings.setUpnpConfigAddress(System.getProperty("upnp.config.address", addressString)); + bridgeSettings.setUpnpConfigAddress(System.getProperty("upnp.config.address", Configuration.DEFAULT_ADDRESS)); + if(bridgeSettings.getUpnpConfigAddress().equalsIgnoreCase(Configuration.DEFAULT_ADDRESS)) { + try { + log.info("Getting an IP address for this host...."); + Enumeration ifs = NetworkInterface.getNetworkInterfaces(); + + while (ifs.hasMoreElements() && addressString == null) { + NetworkInterface xface = ifs.nextElement(); + Enumeration addrs = xface.getInetAddresses(); + String name = xface.getName(); + int IPsPerNic = 0; + + while (addrs.hasMoreElements() && IPsPerNic == 0) { + address = addrs.nextElement(); + if (InetAddressUtils.isIPv4Address(address.getHostAddress())) { + log.debug(name + " ... has IPV4 addr " + address); + if(!name.equalsIgnoreCase(Configuration.LOOP_BACK_INTERFACE)|| !address.getHostAddress().equalsIgnoreCase(Configuration.LOOP_BACK_ADDRESS)) { + IPsPerNic++; + addressString = address.getHostAddress(); + log.info("Adding " + addressString + " from interface " + name + " as our default upnp config address."); + } + } + } + } + } catch (SocketException e) { + log.error("Cannot get ip address of this host, Exiting with message: " + e.getMessage(), e); + return; + } + + bridgeSettings.setUpnpConfigAddress(addressString); + } + bridgeSettings.setUpnpDeviceDb(System.getProperty("upnp.device.db", Configuration.DEVICE_DB_DIRECTORY)); bridgeSettings.setUpnpResponsePort(System.getProperty("upnp.response.port", Configuration.UPNP_RESPONSE_PORT)); - bridgeSettings.setVeraAddress(System.getProperty("vera.address", Configuration.DEFAULT_VERA_ADDRESS)); + bridgeSettings.setVeraAddress(System.getProperty("vera.address", Configuration.DEFAULT_ADDRESS)); IpList theHarmonyList; try { theHarmonyList = new Gson().fromJson(System.getProperty("harmony.address", Configuration.DEFAULT_HARMONY_ADDRESS_LIST), IpList.class); } catch (Exception e) { try { - theHarmonyList = new Gson().fromJson("{devices:[{name:default,ip:" + System.getProperty("harmony.address", Configuration.DEFAULT_HARMONY_ADDRESS) + "}]}", IpList.class); + theHarmonyList = new Gson().fromJson("{devices:[{name:default,ip:" + System.getProperty("harmony.address", Configuration.DEFAULT_ADDRESS) + "}]}", IpList.class); } catch (Exception et) { log.error("Cannot parse harmony.address, Exiting with message: " + e.getMessage(), e); return;