From 7163a12384fc6b88157db9ae754370ae944f6ca8 Mon Sep 17 00:00:00 2001 From: Admin Date: Mon, 3 Oct 2016 15:07:09 -0500 Subject: [PATCH] Updating upnp responses to be more inline with what the hue hub does. To do so, added the mac address as the id in the bridge id an, serial number and uuid --- pom.xml | 2 +- .../HABridge/api/hue/HuePublicConfig.java | 1 + .../HABridge/upnp/UpnpListener.java | 31 +++++++++++++++++-- .../HABridge/upnp/UpnpSettingsResource.java | 8 +++-- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 8aee4b9..f9901a5 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.bwssystems.HABridge ha-bridge - 3.1.0e + 3.1.0i jar HA Bridge diff --git a/src/main/java/com/bwssystems/HABridge/api/hue/HuePublicConfig.java b/src/main/java/com/bwssystems/HABridge/api/hue/HuePublicConfig.java index ac1b1b6..c955cf7 100644 --- a/src/main/java/com/bwssystems/HABridge/api/hue/HuePublicConfig.java +++ b/src/main/java/com/bwssystems/HABridge/api/hue/HuePublicConfig.java @@ -83,6 +83,7 @@ public class HuePublicConfig // } // else // bridgeId = bridgeId + "0800"; + bridgeId = bridgeId.toLowerCase(); return bridgeId; } diff --git a/src/main/java/com/bwssystems/HABridge/upnp/UpnpListener.java b/src/main/java/com/bwssystems/HABridge/upnp/UpnpListener.java index 7052416..3ed7b79 100644 --- a/src/main/java/com/bwssystems/HABridge/upnp/UpnpListener.java +++ b/src/main/java/com/bwssystems/HABridge/upnp/UpnpListener.java @@ -6,7 +6,7 @@ import org.slf4j.LoggerFactory; import com.bwssystems.HABridge.BridgeControlDescriptor; import com.bwssystems.HABridge.BridgeSettingsDescriptor; import com.bwssystems.HABridge.Configuration; -// import com.bwssystems.HABridge.api.hue.HuePublicConfig; +import com.bwssystems.HABridge.api.hue.HuePublicConfig; import java.io.IOException; import java.net.*; @@ -24,6 +24,26 @@ public class UpnpListener { private boolean traceupnp; private BridgeControlDescriptor bridgeControl; private boolean discoveryTemplateLatest; + private String discoveryTemplate = "HTTP/1.1 200 OK\r\n" + + "CACHE-CONTROL: max-age=86400\r\n" + + "EXT:\r\n" + + "LOCATION: http://%s:%s/description.xml\r\n" + + "SERVER: Linux/3.14.0 UPnP/1.0 IpBridge/1.14.0\r\n" + + "ST: urn:schemas-upnp-org:device:basic:1\r\n" + + "USN: uuid:2f402f80-da50-11e1-9b23-%s\r\n\r\n"; +/* + private String discoveryTemplate = "NOTIFY * HTTP/1.1\r\n" + + "HOST: %s:%s\r\n" + + "CACHE-CONTROL: max-age=100\r\n" + + "LOCATION: http://%s:%s/description.xml\r\n" + + "SERVER: Linux/3.14.0 UPnP/1.0 IpBridge/1.14.0\r\n" + + "NTS: ssdp:alive\r\n" + + "hue-bridgeid: %s\r\n" + + "NT: uuid:2f402f80-da50-11e1-9b23-%s\r\n" + + "USN: uuid:2f402f80-da50-11e1-9b23-%s\r\n\r\n"; + discoveryResponse = String.format(discoveryTemplate, Configuration.UPNP_MULTICAST_ADDRESS, Configuration.UPNP_DISCOVERY_PORT, responseAddress, httpServerPort, bridgeIdMac, bridgeIdMac, bridgeIdMac); +*/ +/* private String discoveryTemplate = "HTTP/1.1 200 OK\r\n" + "CACHE-CONTROL: max-age=86400\r\n" + "EXT:\r\n" + @@ -31,6 +51,8 @@ public class UpnpListener { "SERVER: FreeRTOS/7.4.2 UPnP/1.0 IpBridge/1.10.0\r\n" + "ST: urn:schemas-upnp-org:device:basic:1\r\n" + "USN: uuid:2f402f80-da50-11e1-9b23-001788102201::urn:schemas-upnp-org:device:basic:1\r\n\r\n"; + discoveryResponse = String.format(discoveryTemplate, responseAddress, httpServerPort); +*/ /* private String discoveryTemplate = "HTTP/1.1 200 OK\r\n" + "CACHE-CONTROL: max-age=86400\r\n" + @@ -245,8 +267,11 @@ public class UpnpListener { protected void sendUpnpResponse(DatagramSocket socket, InetAddress requester, int sourcePort) throws IOException { String discoveryResponse = null; - if(discoveryTemplateLatest) - discoveryResponse = String.format(discoveryTemplate, responseAddress, httpServerPort); + String bridgeIdMac = null; + if(discoveryTemplateLatest) { + bridgeIdMac = HuePublicConfig.createConfig("temp", responseAddress).getBridgeid(); + discoveryResponse = String.format(discoveryTemplate, responseAddress, httpServerPort, bridgeIdMac); + } else discoveryResponse = String.format(discoveryTemplate091516, responseAddress, httpServerPort); if(traceupnp) { diff --git a/src/main/java/com/bwssystems/HABridge/upnp/UpnpSettingsResource.java b/src/main/java/com/bwssystems/HABridge/upnp/UpnpSettingsResource.java index fd705a3..789653c 100644 --- a/src/main/java/com/bwssystems/HABridge/upnp/UpnpSettingsResource.java +++ b/src/main/java/com/bwssystems/HABridge/upnp/UpnpSettingsResource.java @@ -4,6 +4,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.bwssystems.HABridge.BridgeSettingsDescriptor; +import com.bwssystems.HABridge.api.hue.HuePublicConfig; import static spark.Spark.get; @@ -31,8 +32,8 @@ public class UpnpSettingsResource { + "Philips hue bridge 2015\n" + "BSB002\n" + "http://www.meethue.com\n" - + "0017880ae670\n" - + "uuid:2f402f80-da50-11e1-9b23-001788102201\n" + + "%s\n" + + "uuid:2f402f80-da50-11e1-9b23-%s\n" + "\n" + "\n" + "(null)\n" @@ -77,7 +78,8 @@ public class UpnpSettingsResource { log.debug("upnp device settings requested: " + " from " + request.ip() + ":" + request.port()); String portNumber = Integer.toString(request.port()); String filledTemplate = null; - filledTemplate = String.format(hueTemplate, theSettings.getUpnpConfigAddress(), portNumber, theSettings.getUpnpConfigAddress()); + String bridgeIdMac = HuePublicConfig.createConfig("temp", theSettings.getUpnpConfigAddress()).getBridgeid(); + filledTemplate = String.format(hueTemplate, theSettings.getUpnpConfigAddress(), portNumber, theSettings.getUpnpConfigAddress(), bridgeIdMac, bridgeIdMac); if(theSettings.isTraceupnp()) log.info("Traceupnp: upnp device settings template filled with address: " + theSettings.getUpnpConfigAddress() + " and port: " + portNumber); else