mirror of
https://github.com/bwssytems/ha-bridge.git
synced 2025-12-20 16:59:53 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0205633684 | ||
|
|
7b48590807 | ||
|
|
5f7cd70710 |
4
pom.xml
4
pom.xml
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<groupId>com.bwssystems.HABridge</groupId>
|
<groupId>com.bwssystems.HABridge</groupId>
|
||||||
<artifactId>ha-bridge</artifactId>
|
<artifactId>ha-bridge</artifactId>
|
||||||
<version>5.3.0RC3</version>
|
<version>5.3.0RC5</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>HA Bridge</name>
|
<name>HA Bridge</name>
|
||||||
@@ -269,4 +269,4 @@
|
|||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@@ -53,6 +53,16 @@ public class UpnpListener {
|
|||||||
+ HueConstants.API_VERSION + "\r\n" + "NTS: ssdp:alive\r\n" + "hue-bridgeid: %s\r\n" + "NT: uuid:"
|
+ HueConstants.API_VERSION + "\r\n" + "NTS: ssdp:alive\r\n" + "hue-bridgeid: %s\r\n" + "NT: uuid:"
|
||||||
+ HueConstants.UUID_PREFIX + "%s\r\n" + "USN: uuid:" + HueConstants.UUID_PREFIX + "%s\r\n\r\n";
|
+ HueConstants.UUID_PREFIX + "%s\r\n" + "USN: uuid:" + HueConstants.UUID_PREFIX + "%s\r\n\r\n";
|
||||||
|
|
||||||
|
private String notifyTemplate2 = "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/"
|
||||||
|
+ HueConstants.API_VERSION + "\r\n" + "NTS: ssdp:alive\r\n" + "hue-bridgeid: %s\r\n"
|
||||||
|
+ "NT: upnp:rootdevice\r\n" + "USN: uuid:" + HueConstants.UUID_PREFIX + "%s::upnp:rootdevice\r\n\r\n";
|
||||||
|
|
||||||
|
private String notifyTemplate3 = "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/"
|
||||||
|
+ HueConstants.API_VERSION + "\r\n" + "NTS: ssdp:alive\r\n" + "hue-bridgeid: %s\r\n"
|
||||||
|
+ "NT: urn:schemas-upnp-org:device:basic:1\r\n" + "USN: uuid:" + HueConstants.UUID_PREFIX + "%s\r\n\r\n";
|
||||||
|
|
||||||
public UpnpListener(BridgeSettingsDescriptor theSettings, BridgeControlDescriptor theControl,
|
public UpnpListener(BridgeSettingsDescriptor theSettings, BridgeControlDescriptor theControl,
|
||||||
UDPDatagramSender aUdpDatagramSender) throws IOException {
|
UDPDatagramSender aUdpDatagramSender) throws IOException {
|
||||||
super();
|
super();
|
||||||
@@ -242,21 +252,21 @@ public class UpnpListener {
|
|||||||
discoveryResponse = String.format(responseTemplateOriginal, Configuration.UPNP_MULTICAST_ADDRESS,
|
discoveryResponse = String.format(responseTemplateOriginal, Configuration.UPNP_MULTICAST_ADDRESS,
|
||||||
Configuration.UPNP_DISCOVERY_PORT, httpLocationAddress, httpServerPort, bridgeId, bridgeSNUUID);
|
Configuration.UPNP_DISCOVERY_PORT, httpLocationAddress, httpServerPort, bridgeId, bridgeSNUUID);
|
||||||
if (traceupnp) {
|
if (traceupnp) {
|
||||||
log.info("Traceupnp: send upnp discovery template Original with response address: " + httpLocationAddress + ":"
|
log.info("Traceupnp: send upnp discovery template Original with response address: "
|
||||||
+ httpServerPort + " to address: " + requester + ":" + sourcePort);
|
+ httpLocationAddress + ":" + httpServerPort + " to address: " + requester + ":" + sourcePort);
|
||||||
} else
|
}
|
||||||
log.debug("sendUpnpResponse to address: " + requester + ":" + sourcePort
|
log.debug("sendUpnpResponse to address: " + requester + ":" + sourcePort
|
||||||
+ " with discovery responseTemplateOriginal is <<<" + discoveryResponse + ">>>");
|
+ " with discovery responseTemplateOriginal is <<<" + discoveryResponse + ">>>");
|
||||||
sendUDPResponse(discoveryResponse.getBytes(), requester, sourcePort);
|
sendUDPResponse(discoveryResponse.getBytes(), requester, sourcePort);
|
||||||
} else {
|
} else {
|
||||||
discoveryResponse = String.format(responseTemplateOriginal, Configuration.UPNP_MULTICAST_ADDRESS,
|
discoveryResponse = String.format(responseTemplateOriginal, Configuration.UPNP_MULTICAST_ADDRESS,
|
||||||
Configuration.UPNP_DISCOVERY_PORT, httpLocationAddress, httpServerPort, bridgeId, bridgeSNUUID);
|
Configuration.UPNP_DISCOVERY_PORT, httpLocationAddress, httpServerPort, bridgeId, bridgeSNUUID);
|
||||||
if (traceupnp) {
|
if (traceupnp) {
|
||||||
log.info("Traceupnp: send upnp discovery template Original with response address: " + httpLocationAddress + ":"
|
log.info("Traceupnp: send upnp discovery template Original with response address: "
|
||||||
+ httpServerPort + " to address: " + requester + ":" + sourcePort);
|
+ httpLocationAddress + ":" + httpServerPort + " to address: " + requester + ":" + sourcePort);
|
||||||
} else
|
}
|
||||||
log.debug("sendUpnpResponse to address: " + requester + ":" + sourcePort
|
log.debug("sendUpnpResponse to address: " + requester + ":" + sourcePort
|
||||||
+ " with discovery responseTemplateOriginal is <<<" + discoveryResponse + ">>>");
|
+ " with discovery responseTemplateOriginal is <<<" + discoveryResponse + ">>>");
|
||||||
sendUDPResponse(discoveryResponse.getBytes(), requester, sourcePort);
|
sendUDPResponse(discoveryResponse.getBytes(), requester, sourcePort);
|
||||||
try {
|
try {
|
||||||
Thread.sleep(theUpnpSendDelay);
|
Thread.sleep(theUpnpSendDelay);
|
||||||
@@ -268,9 +278,9 @@ public class UpnpListener {
|
|||||||
if (traceupnp) {
|
if (traceupnp) {
|
||||||
log.info("Traceupnp: send upnp discovery template 1 with response address: " + httpLocationAddress + ":"
|
log.info("Traceupnp: send upnp discovery template 1 with response address: " + httpLocationAddress + ":"
|
||||||
+ httpServerPort + " to address: " + requester + ":" + sourcePort);
|
+ httpServerPort + " to address: " + requester + ":" + sourcePort);
|
||||||
} else
|
}
|
||||||
log.debug("sendUpnpResponse to address: " + requester + ":" + sourcePort
|
log.debug("sendUpnpResponse to address: " + requester + ":" + sourcePort
|
||||||
+ " with discovery responseTemplate1 is <<<" + discoveryResponse + ">>>");
|
+ " with discovery responseTemplate1 is <<<" + discoveryResponse + ">>>");
|
||||||
sendUDPResponse(discoveryResponse.getBytes(), requester, sourcePort);
|
sendUDPResponse(discoveryResponse.getBytes(), requester, sourcePort);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -284,9 +294,9 @@ public class UpnpListener {
|
|||||||
if (traceupnp) {
|
if (traceupnp) {
|
||||||
log.info("Traceupnp: send upnp discovery template 2 with response address: " + httpLocationAddress + ":"
|
log.info("Traceupnp: send upnp discovery template 2 with response address: " + httpLocationAddress + ":"
|
||||||
+ httpServerPort + " to address: " + requester + ":" + sourcePort);
|
+ httpServerPort + " to address: " + requester + ":" + sourcePort);
|
||||||
} else
|
}
|
||||||
log.debug("sendUpnpResponse to address: " + requester + ":" + sourcePort
|
log.debug("sendUpnpResponse to address: " + requester + ":" + sourcePort
|
||||||
+ " discovery responseTemplate2 is <<<" + discoveryResponse + ">>>");
|
+ " discovery responseTemplate2 is <<<" + discoveryResponse + ">>>");
|
||||||
sendUDPResponse(discoveryResponse.getBytes(), requester, sourcePort);
|
sendUDPResponse(discoveryResponse.getBytes(), requester, sourcePort);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -299,9 +309,9 @@ public class UpnpListener {
|
|||||||
if (traceupnp) {
|
if (traceupnp) {
|
||||||
log.info("Traceupnp: send upnp discovery template 3 with response address: " + httpLocationAddress + ":"
|
log.info("Traceupnp: send upnp discovery template 3 with response address: " + httpLocationAddress + ":"
|
||||||
+ httpServerPort + " to address: " + requester + ":" + sourcePort);
|
+ httpServerPort + " to address: " + requester + ":" + sourcePort);
|
||||||
} else
|
}
|
||||||
log.debug("sendUpnpResponse to address: " + requester + ":" + sourcePort
|
log.debug("sendUpnpResponse to address: " + requester + ":" + sourcePort
|
||||||
+ " discovery responseTemplate3 is <<<" + discoveryResponse + ">>>");
|
+ " discovery responseTemplate3 is <<<" + discoveryResponse + ">>>");
|
||||||
sendUDPResponse(discoveryResponse.getBytes(), requester, sourcePort);
|
sendUDPResponse(discoveryResponse.getBytes(), requester, sourcePort);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -316,17 +326,50 @@ public class UpnpListener {
|
|||||||
|
|
||||||
protected void sendUpnpNotify(InetAddress aSocketAddress) {
|
protected void sendUpnpNotify(InetAddress aSocketAddress) {
|
||||||
String notifyData = null;
|
String notifyData = null;
|
||||||
|
try {
|
||||||
|
Thread.sleep(theUpnpSendDelay);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
// noop
|
||||||
|
}
|
||||||
|
|
||||||
notifyData = String.format(notifyTemplate, Configuration.UPNP_MULTICAST_ADDRESS,
|
notifyData = String.format(notifyTemplate, Configuration.UPNP_MULTICAST_ADDRESS,
|
||||||
Configuration.UPNP_DISCOVERY_PORT, upnpConfigIP, httpServerPort, bridgeId, bridgeSNUUID, bridgeSNUUID);
|
Configuration.UPNP_DISCOVERY_PORT, upnpConfigIP, httpServerPort, bridgeId, bridgeSNUUID, bridgeSNUUID);
|
||||||
log.debug("sendUpnpNotify notifyTemplate is <<<" + notifyData + ">>>");
|
sendNotifyDatagram(notifyData, aSocketAddress, "notifyTemplate1");
|
||||||
|
|
||||||
|
try {
|
||||||
|
Thread.sleep(theUpnpSendDelay);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
// noop
|
||||||
|
}
|
||||||
|
|
||||||
|
notifyData = String.format(notifyTemplate2, Configuration.UPNP_MULTICAST_ADDRESS,
|
||||||
|
Configuration.UPNP_DISCOVERY_PORT, upnpConfigIP, httpServerPort, bridgeId, bridgeSNUUID);
|
||||||
|
sendNotifyDatagram(notifyData, aSocketAddress, "notifyTemplate2");
|
||||||
|
|
||||||
|
try {
|
||||||
|
Thread.sleep(theUpnpSendDelay);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
// noop
|
||||||
|
}
|
||||||
|
|
||||||
|
notifyData = String.format(notifyTemplate3, Configuration.UPNP_MULTICAST_ADDRESS,
|
||||||
|
Configuration.UPNP_DISCOVERY_PORT, upnpConfigIP, httpServerPort, bridgeId, bridgeSNUUID);
|
||||||
|
sendNotifyDatagram(notifyData, aSocketAddress, "notifyTemplate3");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendNotifyDatagram(String notifyData, InetAddress aSocketAddress, String templateNumber) {
|
||||||
|
if (traceupnp) {
|
||||||
|
log.info("Traceupnp: sendUpnpNotify {}", templateNumber);
|
||||||
|
}
|
||||||
|
log.debug("sendUpnpNotify {} is <<<{}>>>", templateNumber, notifyData);
|
||||||
DatagramPacket notifyPacket = new DatagramPacket(notifyData.getBytes(), notifyData.length(), aSocketAddress,
|
DatagramPacket notifyPacket = new DatagramPacket(notifyData.getBytes(), notifyData.length(), aSocketAddress,
|
||||||
Configuration.UPNP_DISCOVERY_PORT);
|
Configuration.UPNP_DISCOVERY_PORT);
|
||||||
try {
|
try {
|
||||||
upnpMulticastSocket.send(notifyPacket);
|
upnpMulticastSocket.send(notifyPacket);
|
||||||
} catch (IOException e1) {
|
} catch (IOException e1) {
|
||||||
log.warn("UpnpListener encountered an error sending upnp notify packet. IP: "
|
log.warn("UpnpListener encountered an error sending upnp {}. IP: {} with message: {}", templateNumber,
|
||||||
+ notifyPacket.getAddress().getHostAddress() + " with message: " + e1.getMessage());
|
notifyPacket.getAddress().getHostAddress(), e1.getMessage());
|
||||||
log.debug("UpnpListener send upnp notify exception: ", e1);
|
log.debug("UpnpListener send {} exception: ", templateNumber, e1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,24 @@
|
|||||||
<link href="css/strength-meter.min.css" rel="stylesheet">
|
<link href="css/strength-meter.min.css" rel="stylesheet">
|
||||||
<link href="css/colorpicker.min.css" rel="stylesheet">
|
<link href="css/colorpicker.min.css" rel="stylesheet">
|
||||||
|
|
||||||
<!--[if lt IE 9]>
|
<style id="compiled-css" type="text/css">
|
||||||
|
.goToTop
|
||||||
|
{
|
||||||
|
position: fixed;
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 100000;
|
||||||
|
cursor: pointer;
|
||||||
|
margin: 10px;
|
||||||
|
-moz-opacity: 0.60;
|
||||||
|
opacity: .60;
|
||||||
|
filter: alpha(opacity=60);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<!--[if lt IE 9]>
|
||||||
<script type="text/javascript" src="js/html5shiv.min.js"></script>
|
<script type="text/javascript" src="js/html5shiv.min.js"></script>
|
||||||
<script type="text/javascript" src="js/respond.min.js"></script>
|
<script type="text/javascript" src="js/respond.min.js"></script>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
@@ -75,8 +92,12 @@
|
|||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
<span class="goToTop">
|
||||||
|
<button type="button" class="btn btn-light"><i class="glyphicon glyphicon-chevron-up"></i> Back to Top</button>
|
||||||
|
</span>
|
||||||
|
<!-- <input type="button" class="goToTop" value="Back to Top" style="display:none;background-color:blue" /> -->
|
||||||
|
|
||||||
<script src="js/jquery-1.11.3.min.js"></script>
|
<script src="js/jquery-1.11.3.min.js"></script>
|
||||||
<script src="js/angular.min.js"></script>
|
<script src="js/angular.min.js"></script>
|
||||||
<script src="js/angular-route.min.js"></script>
|
<script src="js/angular-route.min.js"></script>
|
||||||
<script src="js/angular-sanitize.min.js"></script>
|
<script src="js/angular-sanitize.min.js"></script>
|
||||||
@@ -93,5 +114,35 @@
|
|||||||
<script src="js/ng-file-upload-shim.min.js"></script>
|
<script src="js/ng-file-upload-shim.min.js"></script>
|
||||||
<script src="js/ng-file-upload.min.js"></script>
|
<script src="js/ng-file-upload.min.js"></script>
|
||||||
<script src="scripts/app.js"></script>
|
<script src="scripts/app.js"></script>
|
||||||
</body>
|
<script type="text/javascript">
|
||||||
|
$(window).load(function(){
|
||||||
|
|
||||||
|
$(window).scroll(function () {
|
||||||
|
if ($(this).scrollTop() > 100) {
|
||||||
|
$('.goToTop').fadeIn();
|
||||||
|
} else {
|
||||||
|
$('.goToTop').fadeOut();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$('.goToTop').click(function () {
|
||||||
|
$("html, body").animate({ scrollTop: 0 }, 1000);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
// tell the embed parent frame the height of the content
|
||||||
|
if (window.parent && window.parent.parent){
|
||||||
|
window.parent.parent.postMessage(["resultsFrame", {
|
||||||
|
height: document.body.getBoundingClientRect().height,
|
||||||
|
slug: "fvdrw83s"
|
||||||
|
}], "*")
|
||||||
|
}
|
||||||
|
|
||||||
|
// always overwrite window.name, in case users try to set it manually
|
||||||
|
window.name = "result"
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
Reference in New Issue
Block a user