From f8bebe38c0c08806c1ee92d3a692095dd976de0e Mon Sep 17 00:00:00 2001 From: Admin Date: Wed, 12 Aug 2015 16:44:48 -0500 Subject: [PATCH] Update application from amazon-echo-bridge-compact to ha-bridge. Try to remove most code naming away from amazon. Fix package names being incorrect. Added Vera query functionality, needs some fine tuning. --- pom.xml | 88 +++---- .../HABridge/HABridge.java} | 38 +-- .../HABridge/JsonTransformer.java | 2 +- .../HABridge/api/Device.java | 2 +- .../HABridge/api/hue/DeviceResponse.java | 2 +- .../HABridge/api/hue/DeviceState.java | 2 +- .../HABridge/api/hue/HueApiResponse.java | 4 +- .../HABridge/dao/DeviceDescriptor.java | 2 +- .../HABridge/dao/DeviceRepository.java | 10 +- .../devicemanagmeent/DeviceResource.java | 37 ++- .../HABridge/hue/HueMulator.java | 13 +- .../HABridge/upnp/UpnpListener.java | 12 +- .../HABridge/upnp/UpnpSettingsResource.java | 30 ++- src/main/resources/application.properties | 3 - src/main/resources/public/index.html | 228 ++++++++++++++---- src/main/resources/public/scripts/app.js | 87 ++++++- src/test/java/demo/DemoApplicationTests.java | 2 +- 17 files changed, 398 insertions(+), 164 deletions(-) rename src/main/java/com/{bwssytems/HABridge/AmazonEchoBridge.java => bwssystems/HABridge/HABridge.java} (63%) rename src/main/java/com/{bwssytems => bwssystems}/HABridge/JsonTransformer.java (90%) rename src/main/java/com/{bwssytems => bwssystems}/HABridge/api/Device.java (95%) rename src/main/java/com/{bwssytems => bwssystems}/HABridge/api/hue/DeviceResponse.java (98%) rename src/main/java/com/{bwssytems => bwssystems}/HABridge/api/hue/DeviceState.java (97%) rename src/main/java/com/{bwssytems => bwssystems}/HABridge/api/hue/HueApiResponse.java (77%) rename src/main/java/com/{bwssytems => bwssystems}/HABridge/dao/DeviceDescriptor.java (96%) rename src/main/java/com/{bwssytems => bwssystems}/HABridge/dao/DeviceRepository.java (95%) rename src/main/java/com/{bwssytems => bwssystems}/HABridge/devicemanagmeent/DeviceResource.java (75%) rename src/main/java/com/{bwssytems => bwssystems}/HABridge/hue/HueMulator.java (96%) rename src/main/java/com/{bwssytems => bwssystems}/HABridge/upnp/UpnpListener.java (91%) rename src/main/java/com/{bwssytems => bwssystems}/HABridge/upnp/UpnpSettingsResource.java (69%) delete mode 100644 src/main/resources/application.properties diff --git a/pom.xml b/pom.xml index 44398da..f50e636 100644 --- a/pom.xml +++ b/pom.xml @@ -3,13 +3,13 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.bwssytems.HABridge - amazon-echo-bridge-compact - 0.2.1 + com.bwssystems.HABridge + ha-bridge + 0.3.0 jar - Amazon Echo Bridge Compact - Emulates a Philips Hue bridge to allow the Amazon Echo to hook up to other HA using lightweight frameworks + HA Bridge + Emulates a Philips Hue bridge to allow the Amazon Echo to hook up to other HA systems, i.e. Vera, using lightweight frameworks 1.8 @@ -49,43 +49,47 @@ 4.1.6 - + - - - org.apache.maven.plugins - maven-shade-plugin - 2.3 - - true - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - - - package - - shade - - - - - com.bwssytems.HABridge.AmazonEchoBridge - - - - - - - + + + org.apache.maven.plugins + maven-shade-plugin + 2.3 + + + package + + shade + + + true + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + META-INF/*.txt + META-INF/maven/** + META-INF/services/** + META-INF/DEPENDENCIES + about_files/** + *.properties + + + + + + com.bwssystems.HABridge.HABridge + + + + + + + diff --git a/src/main/java/com/bwssytems/HABridge/AmazonEchoBridge.java b/src/main/java/com/bwssystems/HABridge/HABridge.java similarity index 63% rename from src/main/java/com/bwssytems/HABridge/AmazonEchoBridge.java rename to src/main/java/com/bwssystems/HABridge/HABridge.java index 07f0b14..2d98606 100644 --- a/src/main/java/com/bwssytems/HABridge/AmazonEchoBridge.java +++ b/src/main/java/com/bwssystems/HABridge/HABridge.java @@ -1,4 +1,4 @@ -package com.bwssytems.HABridge; +package com.bwssystems.HABridge; import static spark.Spark.*; @@ -8,12 +8,13 @@ import java.net.UnknownHostException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.bwssytems.HABridge.devicemanagmeent.*; -import com.bwssytems.HABridge.hue.HueMulator; -import com.bwssytems.HABridge.upnp.UpnpListener; -import com.bwssytems.HABridge.upnp.UpnpSettingsResource; +import com.bwssystems.HABridge.devicemanagmeent.*; +import com.bwssystems.HABridge.hue.HueMulator; +import com.bwssystems.HABridge.upnp.UpnpListener; +import com.bwssystems.HABridge.upnp.UpnpSettingsResource; +import com.bwssystems.vera.VeraInfo; -public class AmazonEchoBridge { +public class HABridge { /* * This program is based on the work of armzilla from this github repository: @@ -31,15 +32,16 @@ public class AmazonEchoBridge { * */ public static void main(String[] args) { - Logger log = LoggerFactory.getLogger(AmazonEchoBridge.class); + Logger log = LoggerFactory.getLogger(HABridge.class); DeviceResource theResources; HueMulator theHueMulator; UpnpSettingsResource theSettingResponder; UpnpListener theUpnpListener; + VeraInfo theVera; InetAddress address; String addressString; - String upnpAddressString; - String serverPort; + BridgeSettings bridgeSettings; + //get ip address for upnp requests try { address = InetAddress.getLocalHost(); @@ -49,27 +51,33 @@ public class AmazonEchoBridge { return; } - upnpAddressString = System.getProperty("upnp.config.address", addressString); + bridgeSettings = new BridgeSettings(); + bridgeSettings.setUpnpConfigAddress(System.getProperty("upnp.config.address", addressString)); + bridgeSettings.setUpnpDeviceDb(System.getProperty("upnp.device.db", "data/device.db")); + bridgeSettings.setUpnpResponsePort(System.getProperty("upnp.response.port", "50000")); + bridgeSettings.setVeraAddress(System.getProperty("vera.address", "192.168.1.100")); // sparkjava config directive to set ip address for the web server to listen on // ipAddress("0.0.0.0"); // not used // sparkjava config directive to set port for the web server to listen on - serverPort = System.getProperty("server.port", "8080"); - port(Integer.valueOf(serverPort)); + bridgeSettings.setServerPort(System.getProperty("server.port", "8080")); + port(Integer.valueOf(bridgeSettings.getServerPort())); // sparkjava config directive to set html static file location for Jetty staticFileLocation("/public"); log.info("Starting setup...."); + theVera = new VeraInfo(bridgeSettings.getVeraAddress()); + theVera.getSdata(); // setup the class to handle the resource setup rest api - theResources = new DeviceResource(); + theResources = new DeviceResource(bridgeSettings); // setup the class to handle the hue emulator rest api theHueMulator = new HueMulator(theResources.getDeviceRepository()); // setup the class to handle the upnp response rest api - theSettingResponder = new UpnpSettingsResource(upnpAddressString); + theSettingResponder = new UpnpSettingsResource(bridgeSettings); // wait for the sparkjava initialization of the rest api classes to be complete awaitInitialization(); // start the upnp ssdp discovery listener - theUpnpListener = new UpnpListener(upnpAddressString, serverPort); + theUpnpListener = new UpnpListener(bridgeSettings); log.info("Done setup, application to run...."); theUpnpListener.startListening(); } diff --git a/src/main/java/com/bwssytems/HABridge/JsonTransformer.java b/src/main/java/com/bwssystems/HABridge/JsonTransformer.java similarity index 90% rename from src/main/java/com/bwssytems/HABridge/JsonTransformer.java rename to src/main/java/com/bwssystems/HABridge/JsonTransformer.java index c8b5782..540cd3e 100644 --- a/src/main/java/com/bwssytems/HABridge/JsonTransformer.java +++ b/src/main/java/com/bwssystems/HABridge/JsonTransformer.java @@ -1,4 +1,4 @@ -package com.bwssytems.HABridge; +package com.bwssystems.HABridge; import com.google.gson.Gson; import spark.ResponseTransformer; diff --git a/src/main/java/com/bwssytems/HABridge/api/Device.java b/src/main/java/com/bwssystems/HABridge/api/Device.java similarity index 95% rename from src/main/java/com/bwssytems/HABridge/api/Device.java rename to src/main/java/com/bwssystems/HABridge/api/Device.java index 06fd68c..f88d888 100644 --- a/src/main/java/com/bwssytems/HABridge/api/Device.java +++ b/src/main/java/com/bwssystems/HABridge/api/Device.java @@ -1,4 +1,4 @@ -package com.bwssytems.HABridge.api; +package com.bwssystems.HABridge.api; /** * Created by arm on 4/13/15. diff --git a/src/main/java/com/bwssytems/HABridge/api/hue/DeviceResponse.java b/src/main/java/com/bwssystems/HABridge/api/hue/DeviceResponse.java similarity index 98% rename from src/main/java/com/bwssytems/HABridge/api/hue/DeviceResponse.java rename to src/main/java/com/bwssystems/HABridge/api/hue/DeviceResponse.java index d92f232..66d14df 100644 --- a/src/main/java/com/bwssytems/HABridge/api/hue/DeviceResponse.java +++ b/src/main/java/com/bwssystems/HABridge/api/hue/DeviceResponse.java @@ -1,4 +1,4 @@ -package com.bwssytems.HABridge.api.hue; +package com.bwssystems.HABridge.api.hue; import java.util.HashMap; import java.util.LinkedList; diff --git a/src/main/java/com/bwssytems/HABridge/api/hue/DeviceState.java b/src/main/java/com/bwssystems/HABridge/api/hue/DeviceState.java similarity index 97% rename from src/main/java/com/bwssytems/HABridge/api/hue/DeviceState.java rename to src/main/java/com/bwssystems/HABridge/api/hue/DeviceState.java index 8779f43..7c065f7 100644 --- a/src/main/java/com/bwssytems/HABridge/api/hue/DeviceState.java +++ b/src/main/java/com/bwssystems/HABridge/api/hue/DeviceState.java @@ -1,4 +1,4 @@ -package com.bwssytems.HABridge.api.hue; +package com.bwssystems.HABridge.api.hue; import java.util.List; diff --git a/src/main/java/com/bwssytems/HABridge/api/hue/HueApiResponse.java b/src/main/java/com/bwssystems/HABridge/api/hue/HueApiResponse.java similarity index 77% rename from src/main/java/com/bwssytems/HABridge/api/hue/HueApiResponse.java rename to src/main/java/com/bwssystems/HABridge/api/hue/HueApiResponse.java index f89ba75..12d7bb9 100644 --- a/src/main/java/com/bwssytems/HABridge/api/hue/HueApiResponse.java +++ b/src/main/java/com/bwssystems/HABridge/api/hue/HueApiResponse.java @@ -1,8 +1,8 @@ -package com.bwssytems.HABridge.api.hue; +package com.bwssystems.HABridge.api.hue; import java.util.Map; -import com.bwssytems.HABridge.api.hue.DeviceResponse; +import com.bwssystems.HABridge.api.hue.DeviceResponse; /** * Created by arm on 4/14/15. diff --git a/src/main/java/com/bwssytems/HABridge/dao/DeviceDescriptor.java b/src/main/java/com/bwssystems/HABridge/dao/DeviceDescriptor.java similarity index 96% rename from src/main/java/com/bwssytems/HABridge/dao/DeviceDescriptor.java rename to src/main/java/com/bwssystems/HABridge/dao/DeviceDescriptor.java index b412da9..8fb182e 100644 --- a/src/main/java/com/bwssytems/HABridge/dao/DeviceDescriptor.java +++ b/src/main/java/com/bwssystems/HABridge/dao/DeviceDescriptor.java @@ -1,4 +1,4 @@ -package com.bwssytems.HABridge.dao; +package com.bwssystems.HABridge.dao; /* * Object to handle the device configuration */ diff --git a/src/main/java/com/bwssytems/HABridge/dao/DeviceRepository.java b/src/main/java/com/bwssystems/HABridge/dao/DeviceRepository.java similarity index 95% rename from src/main/java/com/bwssytems/HABridge/dao/DeviceRepository.java rename to src/main/java/com/bwssystems/HABridge/dao/DeviceRepository.java index 92ed0c4..524c4f7 100644 --- a/src/main/java/com/bwssytems/HABridge/dao/DeviceRepository.java +++ b/src/main/java/com/bwssystems/HABridge/dao/DeviceRepository.java @@ -1,4 +1,4 @@ -package com.bwssytems.HABridge.dao; +package com.bwssystems.HABridge.dao; import java.io.IOException; @@ -14,8 +14,8 @@ import java.util.Random; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.bwssytems.HABridge.JsonTransformer; -import com.bwssytems.HABridge.dao.DeviceDescriptor; +import com.bwssystems.HABridge.JsonTransformer; +import com.bwssystems.HABridge.dao.DeviceDescriptor; import com.google.gson.stream.JsonReader; import java.util.List; @@ -30,9 +30,9 @@ public class DeviceRepository { final Random random = new Random(); final Logger log = LoggerFactory.getLogger(DeviceRepository.class); - public DeviceRepository() { + public DeviceRepository(String deviceDb) { super(); - repositoryPath = Paths.get(System.getProperty("upnp.device.db", "data/device.db")); + repositoryPath = Paths.get(deviceDb); String jsonContent = repositoryReader(repositoryPath); devices = new HashMap(); if(jsonContent != null) diff --git a/src/main/java/com/bwssytems/HABridge/devicemanagmeent/DeviceResource.java b/src/main/java/com/bwssystems/HABridge/devicemanagmeent/DeviceResource.java similarity index 75% rename from src/main/java/com/bwssytems/HABridge/devicemanagmeent/DeviceResource.java rename to src/main/java/com/bwssystems/HABridge/devicemanagmeent/DeviceResource.java index 57cf770..dee49c2 100644 --- a/src/main/java/com/bwssytems/HABridge/devicemanagmeent/DeviceResource.java +++ b/src/main/java/com/bwssystems/HABridge/devicemanagmeent/DeviceResource.java @@ -1,8 +1,4 @@ -package com.bwssytems.HABridge.devicemanagmeent; - -import com.bwssytems.HABridge.JsonTransformer; -import com.bwssytems.HABridge.dao.DeviceDescriptor; -import com.bwssytems.HABridge.dao.DeviceRepository; +package com.bwssystems.HABridge.devicemanagmeent; import static spark.Spark.get; import static spark.Spark.post; @@ -14,6 +10,12 @@ import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.bwssystems.HABridge.BridgeSettings; +import com.bwssystems.HABridge.JsonTransformer; +import com.bwssystems.HABridge.dao.DeviceDescriptor; +import com.bwssystems.HABridge.dao.DeviceRepository; +import com.bwssystems.luupRequests.Sdata; +import com.bwssystems.vera.VeraInfo; import com.google.gson.Gson; /** @@ -24,11 +26,13 @@ public class DeviceResource { private static final Logger log = LoggerFactory.getLogger(DeviceResource.class); private DeviceRepository deviceRepository; + private VeraInfo veraInfo; - public DeviceResource() { + public DeviceResource(BridgeSettings theSettings) { super(); - deviceRepository = new DeviceRepository(); + deviceRepository = new DeviceRepository(theSettings.getUpnpDeviceDb()); + veraInfo = new VeraInfo(theSettings.getVeraAddress()); setupEndpoints(); } @@ -102,5 +106,24 @@ public class DeviceResource { deviceRepository.delete(deleted); return null; }, new JsonTransformer()); + + get (API_CONTEXT + "/vera/devices", "application/json", (request, response) -> { + log.debug("Get vera devices"); + Sdata sData = veraInfo.getSdata(); + if(sData == null){ + return null; + } + return sData.getDevices(); + }, new JsonTransformer()); + + get (API_CONTEXT + "/vera/scenes", "application/json", (request, response) -> { + log.debug("Get vera scenes"); + Sdata sData = veraInfo.getSdata(); + if(sData == null){ + return null; + } + return sData.getScenes(); + }, new JsonTransformer()); + } } diff --git a/src/main/java/com/bwssytems/HABridge/hue/HueMulator.java b/src/main/java/com/bwssystems/HABridge/hue/HueMulator.java similarity index 96% rename from src/main/java/com/bwssytems/HABridge/hue/HueMulator.java rename to src/main/java/com/bwssystems/HABridge/hue/HueMulator.java index 13661a5..4e8af30 100644 --- a/src/main/java/com/bwssytems/HABridge/hue/HueMulator.java +++ b/src/main/java/com/bwssystems/HABridge/hue/HueMulator.java @@ -1,11 +1,10 @@ -package com.bwssytems.HABridge.hue; - -import com.bwssytems.HABridge.api.hue.DeviceResponse; -import com.bwssytems.HABridge.api.hue.DeviceState; -import com.bwssytems.HABridge.api.hue.HueApiResponse; -import com.bwssytems.HABridge.dao.*; -import com.bwssytems.HABridge.JsonTransformer; +package com.bwssystems.HABridge.hue; +import com.bwssystems.HABridge.JsonTransformer; +import com.bwssystems.HABridge.api.hue.DeviceResponse; +import com.bwssystems.HABridge.api.hue.DeviceState; +import com.bwssystems.HABridge.api.hue.HueApiResponse; +import com.bwssystems.HABridge.dao.*; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/main/java/com/bwssytems/HABridge/upnp/UpnpListener.java b/src/main/java/com/bwssystems/HABridge/upnp/UpnpListener.java similarity index 91% rename from src/main/java/com/bwssytems/HABridge/upnp/UpnpListener.java rename to src/main/java/com/bwssystems/HABridge/upnp/UpnpListener.java index deb94c1..759e60c 100644 --- a/src/main/java/com/bwssytems/HABridge/upnp/UpnpListener.java +++ b/src/main/java/com/bwssystems/HABridge/upnp/UpnpListener.java @@ -1,8 +1,10 @@ -package com.bwssytems.HABridge.upnp; +package com.bwssystems.HABridge.upnp; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.bwssystems.HABridge.BridgeSettings; + import java.io.IOException; import java.net.*; @@ -21,11 +23,11 @@ public class UpnpListener { private String responseAddress; - public UpnpListener(String upnpAddress, String upnpServerPort) { + public UpnpListener(BridgeSettings theSettings) { super(); - upnpResponsePort = Integer.valueOf(System.getProperty("upnp.response.port", "50000")); - httpServerPort = Integer.valueOf(upnpServerPort); - responseAddress = upnpAddress; + upnpResponsePort = Integer.valueOf(theSettings.getUpnpResponsePort()); + httpServerPort = Integer.valueOf(theSettings.getServerPort()); + responseAddress = theSettings.getUpnpConfigAddress(); } public void startListening(){ diff --git a/src/main/java/com/bwssytems/HABridge/upnp/UpnpSettingsResource.java b/src/main/java/com/bwssystems/HABridge/upnp/UpnpSettingsResource.java similarity index 69% rename from src/main/java/com/bwssytems/HABridge/upnp/UpnpSettingsResource.java rename to src/main/java/com/bwssystems/HABridge/upnp/UpnpSettingsResource.java index 2842290..a7c49e4 100644 --- a/src/main/java/com/bwssytems/HABridge/upnp/UpnpSettingsResource.java +++ b/src/main/java/com/bwssystems/HABridge/upnp/UpnpSettingsResource.java @@ -1,8 +1,11 @@ -package com.bwssytems.HABridge.upnp; +package com.bwssystems.HABridge.upnp; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.bwssystems.HABridge.BridgeSettings; +import com.bwssystems.HABridge.JsonTransformer; + import static spark.Spark.get; /** @@ -17,12 +20,12 @@ public class UpnpSettingsResource { + "\n" + "1\n" + "0\n" + "\n" + "http://%s:%s/\n" + // hostname string "\n" + "urn:schemas-upnp-org:device:Basic:1\n" - + "Amazon-Echo-HA-Bridge (%s)\n" + + "HA-Bridge (%s)\n" + "Royal Philips Electronics\n" - + "http://www.bwssystems..com\n" - + "Hue Emulator for Amazon Echo bridge\n" + + "http://www.bwssystems.com\n" + + "Hue Emulator for HA bridge\n" + "Philips hue bridge 2012\n" + "929000226503\n" - + "http://www.bwssystems.com/amazon-echo-bridge-compact\n" + + "http://www.bwssystems.com/ha-bridge\n" + "01189998819991197253\n" + "uuid:88f6698f-2c83-4393-bd03-cd54a9f8595\n" + "\n" + "\n" + "(null)\n" + "(null)\n" @@ -35,29 +38,30 @@ public class UpnpSettingsResource { + "24\n" + "hue_logo_3.png\n" + "\n" + "\n" + "\n" + "\n"; - public UpnpSettingsResource(String upnpAddress) { + public UpnpSettingsResource(BridgeSettings theSettings) { super(); - setupListener(upnpAddress); + setupListener(theSettings); } - private void setupListener (String hostName) { + private void setupListener (BridgeSettings theSettings) { // http://ip_address:port/upnp/:id/setup.xml which returns the xml configuration for the location of the hue emulator get(UPNP_CONTEXT + "/:id/setup.xml", "application/xml", (request, response) -> { log.info("upnp device settings requested: " + request.params(":id") + " from " + request.ip()); String portNumber = Integer.toString(request.port()); - String filledTemplate = String.format(hueTemplate, hostName, portNumber, hostName); + String filledTemplate = String.format(hueTemplate, theSettings.getUpnpConfigAddress(), portNumber, theSettings.getUpnpConfigAddress()); log.debug("upnp device settings response: " + filledTemplate); response.status(201); return filledTemplate; } ); - get(UPNP_CONTEXT + "/configaddress", "application/xml", (request, response) -> { - log.info("upnp config address requested: from " + request.ip()); +// http://ip_address:port/upnp/settings which returns the bridge configuration settings + get(UPNP_CONTEXT + "/settings", "application/xml", (request, response) -> { + log.debug("bridge settings requested from " + request.ip()); response.status(201); - return hostName; - } ); + return theSettings; + }, new JsonTransformer()); } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index 05d4948..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,3 +0,0 @@ -upnp.response.port=50000 -server.port=8080 -upnp.config.address=192.168.4.136 \ No newline at end of file diff --git a/src/main/resources/public/index.html b/src/main/resources/public/index.html index 2005c61..3c69223 100644 --- a/src/main/resources/public/index.html +++ b/src/main/resources/public/index.html @@ -4,65 +4,112 @@ - Amazon Echo Bridge Configuration + HA Bridge Configuration - + + - - + + + - - + - + -
+
-
+ +

Bridge settings

-
+
-
-
- - -
- -
- - -
-
- -
- -
-
-
-
-
+
+
+ + +
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
SettingValue
upnp.config.address{{bridge.upnpconfigaddress}}
server.port{{bridge.serverport}}
upnp.devices.db{{bridge.upnpdevicedb}}
upnp.response.port{{bridge.upnpresponseport}}
vera.address{{bridge.veraaddress}}
+
+
-
- +
-
-

Add a new device

+ +
+
+

Vera Device List

+
+
    +
  • +

    You can select a Vera device and + generate the add device box selections automatically.

    + + + + + + + + + + + + + + + + + + +
    NameIdCategoryRoomActions
    {{veradevice.name}}{{veradevice.id}}{{veradevice.category}}{{veradevice.room}} + +
    +
  • +
+
+
+
+

Vera Scene List

+
+
    +
  • +

    You can select a Vera scene and + generate the add device box selections automatically.

    + + + + + + + + + + + + + + + + +
    NameIdRoomActions
    {{verascene.name}}{{verascene.id}}{{verascene.room}} + +
    +
  • +
+
+
+
+

Generate a new device

+
  • You can generate on/off URLs by filling in the Vera server URL, port, and @@ -115,10 +230,14 @@

    -
    +
    +
    @@ -135,12 +254,19 @@ placeholder="ID">
  • +
+
+
+
+

Add a new device

+
+
  • @@ -181,8 +307,8 @@
+
-
\ No newline at end of file diff --git a/src/main/resources/public/scripts/app.js b/src/main/resources/public/scripts/app.js index d0fe47b..1eae50a 100644 --- a/src/main/resources/public/scripts/app.js +++ b/src/main/resources/public/scripts/app.js @@ -1,7 +1,7 @@ -angular.module('amazonechobridge', []) +angular.module('habridge', []) .service('bridgeService', ["$http", function ($http) { var self = this; - this.state = {base: window.location.origin + "/api/devices", upnpbase: window.location.origin + "/upnp/configaddress", devices: [], error: ""}; + this.state = {base: window.location.origin + "/api/devices", upnpbase: window.location.origin + "/upnp/settings", devices: [], error: ""}; this.viewDevices = function () { this.state.error = ""; @@ -21,11 +21,51 @@ angular.module('amazonechobridge', []) ); }; - this.viewConfigAddress = function () { + this.viewBridgeSettings = function () { this.state.error = ""; return $http.get(this.state.upnpbase).then( function (response) { - self.state.upnpconfigaddress = response.data; + self.state.upnpconfigaddress = response.data.upnpconfigaddress; + self.state.serverport = response.data.serverport; + self.state.upnpdevicedb = response.data.upnpdevicedb; + self.state.upnpresponseport = response.data.upnpresponseport; + self.state.veraaddress = response.data.veraaddress; + }, + function (error) { + if (error.data) { + self.state.error = error.data.message; + } else { + self.state.error = "If you're not seeing any address, you may be running into problems with CORS. " + + "You can work around this by running a fresh launch of Chrome with the --disable-web-security flag."; + } + console.log(error); + } + ); + }; + + this.viewVeraDevices = function () { + this.state.error = ""; + return $http.get(this.state.base + "/vera/devices").then( + function (response) { + self.state.veradevices = response.data; + }, + function (error) { + if (error.data) { + self.state.error = error.data.message; + } else { + self.state.error = "If you're not seeing any address, you may be running into problems with CORS. " + + "You can work around this by running a fresh launch of Chrome with the --disable-web-security flag."; + } + console.log(error); + } + ); + }; + + this.viewVeraScenes = function () { + this.state.error = ""; + return $http.get(this.state.base + "/vera/scenes").then( + function (response) { + self.state.verascenes = response.data; }, function (error) { if (error.data) { @@ -105,7 +145,9 @@ angular.module('amazonechobridge', []) .controller('ViewingController', ["$scope", "bridgeService", function ($scope, bridgeService) { bridgeService.viewDevices(); - bridgeService.viewConfigAddress(); + bridgeService.viewBridgeSettings(); + bridgeService.viewVeraDevices(); + bridgeService.viewVeraScenes(); $scope.bridge = bridgeService.state; $scope.deleteDevice = function (device) { bridgeService.deleteDevice(device.id); @@ -123,12 +165,10 @@ angular.module('amazonechobridge', []) }]) .controller('AddingController', ["$scope", "bridgeService", function ($scope, bridgeService) { - - $scope.bridge = bridgeService.state; $scope.device = {id: "", name: "", type: "switch", onUrl: "", offUrl: ""}; $scope.vera = {base: "", port: "3480", id: ""}; bridgeService.device = $scope.device; - + $scope.buildUrls = function () { if ($scope.vera.base.indexOf("http") < 0) { $scope.vera.base = "http://" + $scope.vera.base; @@ -141,6 +181,36 @@ angular.module('amazonechobridge', []) + $scope.vera.id; }; + $scope.buildDeviceUrls = function (veradevice, veraaddr) { + if ($scope.vera.base.indexOf("http") < 0) { + $scope.vera.base = "http://" + veraaddr; + } + $scope.device.name = veradevice.name; + $scope.device.onUrl = $scope.vera.base + ":" + $scope.vera.port + + "/data_request?id=action&output_format=json&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=1&DeviceNum=" + + veradevice.id; + $scope.device.offUrl = $scope.vera.base + ":" + $scope.vera.port + + "/data_request?id=action&output_format=json&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=0&DeviceNum=" + + veradevice.id; + }; + + $scope.buildSceneUrls = function (verascene, veraaddr) { + if ($scope.vera.base.indexOf("http") < 0) { + $scope.vera.base = "http://" + veraaddr; + } + $scope.device.name = verascene.name; + $scope.device.onUrl = $scope.vera.base + ":" + $scope.vera.port + + "/data_request?id=action&output_format=json&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&action=RunScene&SceneNum=" + + verascene.id; + $scope.device.offUrl = $scope.vera.base + ":" + $scope.vera.port + + "/data_request?id=action&output_format=json&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&action=RunScene&SceneNum=" + + verascene.id; + }; + + $scope.setVeraAddress = function (anAddress) { + $scope.vera.base = "http://" + anAddress; + }; + $scope.testUrl = function (url) { window.open(url, "_blank"); }; @@ -157,6 +227,7 @@ angular.module('amazonechobridge', []) } ); } + }]) .controller('ErrorsController', ["$scope", "bridgeService", function ($scope, bridgeService) { diff --git a/src/test/java/demo/DemoApplicationTests.java b/src/test/java/demo/DemoApplicationTests.java index 52e7037..9170ac6 100644 --- a/src/test/java/demo/DemoApplicationTests.java +++ b/src/test/java/demo/DemoApplicationTests.java @@ -1,6 +1,6 @@ package demo; -import com.bwssytems.HABridge.AmazonEchoBridge; +import com.bwssystems.HABridge.HABridge; /* * Dummy test holder