From fff30d17d66c55c826e40ab6f24a45aaf895ac81 Mon Sep 17 00:00:00 2001 From: Admin Date: Wed, 17 Feb 2016 16:41:34 -0600 Subject: [PATCH] Finished updating settings editor and reinit control. Starting number slider for input. --- pom.xml | 2 +- .../bwssystems/HABridge/SystemControl.java | 4 +- .../bwssystems/HABridge/dao/ErrorMessage.java | 18 + .../devicemanagmeent/DeviceResource.java | 47 ++- .../bwssystems/HABridge/hue/HueMulator.java | 2 +- .../java/com/bwssystems/vera/VeraHome.java | 27 +- .../java/com/bwssystems/vera/VeraInfo.java | 21 +- src/main/resources/public/css/slider.css | 75 ++++ src/main/resources/public/index.html | 2 + src/main/resources/public/js/slider.js | 329 ++++++++++++++++++ src/main/resources/public/scripts/app.js | 162 ++++----- .../resources/public/views/configuration.html | 19 +- src/main/resources/public/views/system.html | 14 - 13 files changed, 569 insertions(+), 153 deletions(-) create mode 100644 src/main/java/com/bwssystems/HABridge/dao/ErrorMessage.java create mode 100644 src/main/resources/public/css/slider.css create mode 100644 src/main/resources/public/js/slider.js diff --git a/pom.xml b/pom.xml index 5207462..dc541b0 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.bwssystems.HABridge ha-bridge - 1.3.8f + 1.3.8g jar HA Bridge diff --git a/src/main/java/com/bwssystems/HABridge/SystemControl.java b/src/main/java/com/bwssystems/HABridge/SystemControl.java index 2a43171..1140b6f 100644 --- a/src/main/java/com/bwssystems/HABridge/SystemControl.java +++ b/src/main/java/com/bwssystems/HABridge/SystemControl.java @@ -58,7 +58,7 @@ public class SystemControl { }); // http://ip_address:port/system/settings which returns the bridge configuration settings put(SYSTEM_CONTEXT + "/settings", "application/json", (request, response) -> { - log.info("save bridge settings requested from " + request.ip() + " with body: " + request.body()); + log.debug("save bridge settings requested from " + request.ip() + " with body: " + request.body()); BridgeSettingsDescriptor newBridgeSettings = new Gson().fromJson(request.body(), BridgeSettingsDescriptor.class); bridgeSettings.save(newBridgeSettings); response.status(200); @@ -174,7 +174,7 @@ public class SystemControl { socket.close(); } catch (IOException e) { - log.warn("Error pinging listener.", e); + log.warn("Error pinging listener. " + e.getMessage()); } } diff --git a/src/main/java/com/bwssystems/HABridge/dao/ErrorMessage.java b/src/main/java/com/bwssystems/HABridge/dao/ErrorMessage.java new file mode 100644 index 0000000..a1b2f22 --- /dev/null +++ b/src/main/java/com/bwssystems/HABridge/dao/ErrorMessage.java @@ -0,0 +1,18 @@ +package com.bwssystems.HABridge.dao; + +public class ErrorMessage { + private String message; + + public ErrorMessage(String message) { + super(); + this.message = message; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/src/main/java/com/bwssystems/HABridge/devicemanagmeent/DeviceResource.java b/src/main/java/com/bwssystems/HABridge/devicemanagmeent/DeviceResource.java index 77c8cb6..bd08962 100644 --- a/src/main/java/com/bwssystems/HABridge/devicemanagmeent/DeviceResource.java +++ b/src/main/java/com/bwssystems/HABridge/devicemanagmeent/DeviceResource.java @@ -20,8 +20,11 @@ import com.bwssystems.HABridge.JsonTransformer; import com.bwssystems.HABridge.dao.BackupFilename; import com.bwssystems.HABridge.dao.DeviceDescriptor; import com.bwssystems.HABridge.dao.DeviceRepository; +import com.bwssystems.HABridge.dao.ErrorMessage; import com.bwssystems.NestBridge.NestHome; import com.bwssystems.harmony.HarmonyHome; +import com.bwssystems.luupRequests.Device; +import com.bwssystems.luupRequests.Scene; import com.bwssystems.vera.VeraHome; import com.google.gson.Gson; @@ -88,7 +91,7 @@ public class DeviceResource { if (devices[i].getContentType() == null || devices[i].getHttpVerb() == null || !supportedVerbs.contains(devices[i].getHttpVerb().toLowerCase())) { response.status(HttpStatus.SC_BAD_REQUEST); log.debug("Bad http verb in create a Device(s): " + request.body()); - return devices; + return new ErrorMessage("Bad http verb in create a Device(s): " + request.body() + " "); } } } @@ -118,6 +121,7 @@ public class DeviceResource { if(deviceEntry == null){ log.debug("Could not save an edited Device Id: " + request.params(":id")); response.status(HttpStatus.SC_BAD_REQUEST); + return new ErrorMessage("Could not save an edited Device Id: " + request.params(":id") + " "); } else { @@ -157,8 +161,10 @@ public class DeviceResource { get (API_CONTEXT + "/:id", "application/json", (request, response) -> { log.debug("Get a device"); DeviceDescriptor descriptor = deviceRepository.findOne(request.params(":id")); - if(descriptor == null) + if(descriptor == null) { response.status(HttpStatus.SC_NOT_FOUND); + return new ErrorMessage("Could not find, id: " + request.params(":id") + " "); + } else response.status(HttpStatus.SC_OK); return descriptor; @@ -168,8 +174,10 @@ public class DeviceResource { String anId = request.params(":id"); log.debug("Delete a device: " + anId); DeviceDescriptor deleted = deviceRepository.findOne(anId); - if(deleted == null) + if(deleted == null) { response.status(HttpStatus.SC_NOT_FOUND); + return new ErrorMessage("Could not delete, id: " + anId + " not found. "); + } else { deviceRepository.delete(deleted); @@ -182,28 +190,39 @@ public class DeviceResource { log.debug("Get vera devices"); if(veraHome == null){ response.status(HttpStatus.SC_NOT_FOUND); - return null; + return new ErrorMessage("A Vera is not available."); } - - response.status(HttpStatus.SC_OK); - return veraHome.getDevices(); + List theDevices = veraHome.getDevices(); + if(theDevices == null) { + response.status(HttpStatus.SC_SERVICE_UNAVAILABLE); + return new ErrorMessage("A Vera request failed to get devices. Check your Vera IP addresses."); + } + else + response.status(HttpStatus.SC_OK); + return theDevices; }, new JsonTransformer()); get (API_CONTEXT + "/vera/scenes", "application/json", (request, response) -> { log.debug("Get vera scenes"); if(veraHome == null){ response.status(HttpStatus.SC_NOT_FOUND); - return null; + return new ErrorMessage("A Vera is not available."); } - response.status(HttpStatus.SC_OK); - return veraHome.getScenes(); + List theScenes = veraHome.getScenes(); + if(theScenes == null) { + response.status(HttpStatus.SC_SERVICE_UNAVAILABLE); + return new ErrorMessage("A Vera is not available and failed to get scenes. Check your Vera IP addresses."); + } + else + response.status(HttpStatus.SC_OK); + return theScenes; }, new JsonTransformer()); get (API_CONTEXT + "/harmony/activities", "application/json", (request, response) -> { log.debug("Get harmony activities"); if(myHarmonyHome == null) { response.status(HttpStatus.SC_NOT_FOUND); - return null; + return new ErrorMessage("A Harmony is not available."); } response.status(HttpStatus.SC_OK); return myHarmonyHome.getActivities(); @@ -213,7 +232,7 @@ public class DeviceResource { log.debug("Get harmony current activity"); if(myHarmonyHome == null) { response.status(HttpStatus.SC_NOT_FOUND); - return null; + return new ErrorMessage("A Harmony is not available."); } response.status(HttpStatus.SC_OK); return myHarmonyHome.getCurrentActivities(); @@ -223,7 +242,7 @@ public class DeviceResource { log.debug("Get harmony devices"); if(myHarmonyHome == null) { response.status(HttpStatus.SC_NOT_FOUND); - return null; + return new ErrorMessage("A Harmony is not available."); } response.status(HttpStatus.SC_OK); return myHarmonyHome.getDevices(); @@ -233,7 +252,7 @@ public class DeviceResource { log.debug("Get nest items"); if(nestHome == null) { response.status(HttpStatus.SC_NOT_FOUND); - return null; + return new ErrorMessage("A Nest is not available."); } response.status(HttpStatus.SC_OK); return nestHome.getItems(); diff --git a/src/main/java/com/bwssystems/HABridge/hue/HueMulator.java b/src/main/java/com/bwssystems/HABridge/hue/HueMulator.java index 08a3f18..08d5cad 100644 --- a/src/main/java/com/bwssystems/HABridge/hue/HueMulator.java +++ b/src/main/java/com/bwssystems/HABridge/hue/HueMulator.java @@ -245,7 +245,7 @@ public class HueMulator { DeviceDescriptor device = repository.findOne(lightId); if (device == null) { response.status(HttpStatus.SC_NOT_FOUND); - return null; + return "[{\"error\":{\"type\": 3, \"address\": \"/lights/" + lightId + ",\"description\": \"Object not found\"}}]"; } else { log.debug("found device named: " + device.getName()); } diff --git a/src/main/java/com/bwssystems/vera/VeraHome.java b/src/main/java/com/bwssystems/vera/VeraHome.java index 39d8078..96c57fb 100644 --- a/src/main/java/com/bwssystems/vera/VeraHome.java +++ b/src/main/java/com/bwssystems/vera/VeraHome.java @@ -13,6 +13,7 @@ import com.bwssystems.HABridge.BridgeSettingsDescriptor; import com.bwssystems.HABridge.NamedIP; import com.bwssystems.luupRequests.Device; import com.bwssystems.luupRequests.Scene; +import com.bwssystems.luupRequests.Sdata; public class VeraHome { private static final Logger log = LoggerFactory.getLogger(VeraHome.class); @@ -35,9 +36,16 @@ public class VeraHome { ArrayList deviceList = new ArrayList(); while(keys.hasNext()) { String key = keys.next(); - Iterator devices = veras.get(key).getSdata().getDevices().iterator(); - while(devices.hasNext()) { - deviceList.add(devices.next()); + Sdata theSdata = veras.get(key).getSdata(); + if(theSdata != null) { + Iterator devices = theSdata.getDevices().iterator(); + while(devices.hasNext()) { + deviceList.add(devices.next()); + } + } + else { + deviceList = null; + break; } } return deviceList; @@ -48,9 +56,16 @@ public class VeraHome { ArrayList sceneList = new ArrayList(); while(keys.hasNext()) { String key = keys.next(); - Iterator scenes = veras.get(key).getSdata().getScenes().iterator(); - while(scenes.hasNext()) { - sceneList.add(scenes.next()); + Sdata theSdata = veras.get(key).getSdata(); + if(theSdata != null) { + Iterator scenes = theSdata.getScenes().iterator(); + while(scenes.hasNext()) { + sceneList.add(scenes.next()); + } + } + else { + sceneList = null; + break; } } return sceneList; diff --git a/src/main/java/com/bwssystems/vera/VeraInfo.java b/src/main/java/com/bwssystems/vera/VeraInfo.java index a371e12..9f89084 100644 --- a/src/main/java/com/bwssystems/vera/VeraInfo.java +++ b/src/main/java/com/bwssystems/vera/VeraInfo.java @@ -37,16 +37,19 @@ public class VeraInfo { } public Sdata getSdata() { + Sdata theSdata = null; if(!validVera) - return new Sdata(); + return theSdata; String theUrl = "http://" + veraAddress.getIp() + SDATA_REQUEST; String theData; theData = doHttpGETRequest(theUrl); - Sdata theSdata = new Gson().fromJson(theData, Sdata.class); - log.debug("GET sdata - full: " + theSdata.getFull() + ", version: " + theSdata.getVersion()); - denormalizeSdata(theSdata); + if(theData != null) { + theSdata = new Gson().fromJson(theData, Sdata.class); + log.debug("GET sdata - full: " + theSdata.getFull() + ", version: " + theSdata.getVersion()); + denormalizeSdata(theSdata); + } return theSdata; } @@ -91,19 +94,19 @@ public class VeraInfo { // This function executes the url against the vera protected String doHttpGETRequest(String url) { + String theContent = null; log.debug("calling GET on URL: " + url); HttpGet httpGet = new HttpGet(url); try { HttpResponse response = httpClient.execute(httpGet); - String theContent = EntityUtils.toString(response.getEntity()); //read content for data - EntityUtils.consume(response.getEntity()); //close out inputstream ignore content log.debug("GET on URL responded: " + response.getStatusLine().getStatusCode()); if(response.getStatusLine().getStatusCode() == 200){ - return theContent; + theContent = EntityUtils.toString(response.getEntity()); //read content for data + EntityUtils.consume(response.getEntity()); //close out inputstream ignore content } } catch (IOException e) { - log.error("Error calling out to HA gateway", e); + log.error("doHttpGETRequest: Error calling out to HA gateway: " + e.getMessage()); } - return null; + return theContent; } } diff --git a/src/main/resources/public/css/slider.css b/src/main/resources/public/css/slider.css new file mode 100644 index 0000000..efb28ad --- /dev/null +++ b/src/main/resources/public/css/slider.css @@ -0,0 +1,75 @@ +/* line 2, slider.scss */ +slider, [slider] { + display: inline-block; + position: relative; + height: 7px; + width: 100%; + margin: 25px 5px 25px 5px; + vertical-align: middle; +} +/* line 10, slider.scss */ +slider div, [slider] div { + white-space: nowrap; + position: absolute; +} +/* line 14, slider.scss */ +slider div.bar, [slider] div.bar { + width: 100%; + height: 100%; + border-radius: 7px; + background: #444; + overflow: hidden; +} +/* line 21, slider.scss */ +slider div.bar .selection, [slider] div.bar .selection { + width: 0%; + height: 100%; + background: #13b6ff; +} +/* line 28, slider.scss */ +slider div.handle, [slider] div.handle { + cursor: pointer; + width: 20px; + height: 20px; + top: -8px; + background-color: #fff; + border: 1px solid #000; + z-index: 2; + border-radius: 100%; +} +/* line 38, slider.scss */ +slider div.handle:after, [slider] div.handle:after { + content: ''; + background-color: #777; + width: 8px; + height: 8px; + position: absolute; + top: 6px; + left: 6px; + border-radius: 100%; +} +/* line 48, slider.scss */ +slider div.handle:after:hover, [slider] div.handle:after:hover { + background-color: #000; +} +/* line 53, slider.scss */ +slider div.handle.active:after, [slider] div.handle.active:after { + background-color: #f00; +} +/* line 58, slider.scss */ +slider div.bubble, [slider] div.bubble { + display: none; + cursor: default; + top: -22px; + padding: 1px 3px 1px 3px; + font-size: 0.7em; + font-family: sans-serif; +} +/* line 66, slider.scss */ +slider div.bubble.active, [slider] div.bubble.active { + display: inline-block; +} +/* line 70, slider.scss */ +slider div.bubble.limit, [slider] div.bubble.limit { + color: #777; +} diff --git a/src/main/resources/public/index.html b/src/main/resources/public/index.html index c624a84..44db56a 100644 --- a/src/main/resources/public/index.html +++ b/src/main/resources/public/index.html @@ -8,6 +8,7 @@ +