From d78c7c536d8c21ed59adc1a4b17f68a1a74cde10 Mon Sep 17 00:00:00 2001 From: Admin Date: Tue, 30 May 2017 16:41:26 -0500 Subject: [PATCH] Updateing HAL handling --- .../HABridge/plugins/hal/HalDevice.java | 22 +- .../HABridge/plugins/hal/HalInfo.java | 15 +- src/main/resources/public/scripts/app.js | 136 +++++++----- .../resources/public/views/haldevice.html | 2 +- src/main/resources/public/views/system.html | 202 +++++++++++------- 5 files changed, 224 insertions(+), 153 deletions(-) diff --git a/src/main/java/com/bwssystems/HABridge/plugins/hal/HalDevice.java b/src/main/java/com/bwssystems/HABridge/plugins/hal/HalDevice.java index 2b38314..d01fad4 100644 --- a/src/main/java/com/bwssystems/HABridge/plugins/hal/HalDevice.java +++ b/src/main/java/com/bwssystems/HABridge/plugins/hal/HalDevice.java @@ -1,11 +1,11 @@ package com.bwssystems.HABridge.plugins.hal; +import com.bwssystems.HABridge.NamedIP; + public class HalDevice { private String haldevicetype; private String haldevicename; - private String haladdress; - private String halname; - private Boolean secure; + private NamedIP haladdress; private DeviceElements buttons; public String getHaldevicetype() { return haldevicetype; @@ -19,24 +19,12 @@ public class HalDevice { public void setHaldevicename(String haldevicename) { this.haldevicename = haldevicename; } - public String getHaladdress() { + public NamedIP getHaladdress() { return haladdress; } - public void setHaladdress(String haladdress) { + public void setHaladdress(NamedIP haladdress) { this.haladdress = haladdress; } - public String getHalname() { - return halname; - } - public void setHalname(String halname) { - this.halname = halname; - } - public Boolean getSecure() { - return secure; - } - public void setSecure(Boolean secure) { - this.secure = secure; - } public DeviceElements getButtons() { return buttons; } diff --git a/src/main/java/com/bwssystems/HABridge/plugins/hal/HalInfo.java b/src/main/java/com/bwssystems/HABridge/plugins/hal/HalInfo.java index abd02a5..19ff8fd 100644 --- a/src/main/java/com/bwssystems/HABridge/plugins/hal/HalInfo.java +++ b/src/main/java/com/bwssystems/HABridge/plugins/hal/HalInfo.java @@ -35,13 +35,13 @@ public class HalInfo { private static final String IRDATA_TYPE = "IrData"; private HTTPHandler httpClient; private NamedIP halAddress; - private String theToken; public HalInfo(NamedIP addressName, String aGivenToken) { super(); httpClient = new HTTPHandler(); halAddress = addressName; - theToken = aGivenToken; + if(halAddress.getPassword() == null || halAddress.getPassword().trim().isEmpty()) + halAddress.setPassword(aGivenToken); } public List getLights() { @@ -102,12 +102,12 @@ public class HalInfo { theUrl = "https://"; else theUrl = "http://"; - theUrl = theUrl + halAddress.getIp() + apiType + theToken; + theUrl = theUrl + halAddress.getIp() + apiType + halAddress.getPassword(); theData = httpClient.doHttpRequest(theUrl, null, null, null, null); if(theData != null) { log.debug("GET " + deviceType + " HalApiResponse - data: " + theData); theHalApiResponse = new Gson().fromJson(theData, DeviceElements.class); - if(theHalApiResponse.getDeviceElements() == null) { + if(theHalApiResponse == null || theHalApiResponse.getDeviceElements() == null) { StatusDescription theStatus = new Gson().fromJson(theData, StatusDescription.class); if(theStatus.getStatus() == null) { log.warn("Cannot get an devices for type " + deviceType + " for hal " + halAddress.getName() + " as response is not parsable."); @@ -125,9 +125,7 @@ public class HalInfo { HalDevice aNewHalDevice = new HalDevice(); aNewHalDevice.setHaldevicetype(deviceType); aNewHalDevice.setHaldevicename(theDevice.getDeviceName()); - aNewHalDevice.setHaladdress(halAddress.getIp()); - aNewHalDevice.setHalname(halAddress.getName()); - aNewHalDevice.setSecure(halAddress.getSecure()); + aNewHalDevice.setHaladdress(halAddress); deviceList.add(aNewHalDevice); } @@ -154,7 +152,7 @@ public class HalInfo { theUrl = "https://"; else theUrl = "http://"; - theUrl = theUrl + halAddress.getIp() + IRBUTTON_REQUEST + TextStringFormatter.forQuerySpaceUrl(theHalDevice.getHaldevicename()) + TOKEN_REQUEST + theToken; + theUrl = theUrl + halAddress.getIp() + IRBUTTON_REQUEST + TextStringFormatter.forQuerySpaceUrl(theHalDevice.getHaldevicename()) + TOKEN_REQUEST + halAddress.getPassword(); theData = httpClient.doHttpRequest(theUrl, null, null, null, null); if (theData != null) { log.debug("GET IrData for IR Device " + theHalDevice.getHaldevicename() + " HalApiResponse - data: " + theData); @@ -205,6 +203,5 @@ public class HalInfo { httpClient.closeHandler(); httpClient = null; halAddress = null; - theToken = null; } } diff --git a/src/main/resources/public/scripts/app.js b/src/main/resources/public/scripts/app.js index 12b5842..1f1a929 100644 --- a/src/main/resources/public/scripts/app.js +++ b/src/main/resources/public/scripts/app.js @@ -1317,11 +1317,11 @@ app.controller ('SystemController', function ($scope, $location, bridgeService, } } }; - $scope.addHaltoSettings = function (newhalname, newhalip) { + $scope.addHaltoSettings = function (newhalname, newhalip, newhalsecure, newhaltoken) { if($scope.bridge.settings.haladdress === undefined || $scope.bridge.settings.haladdress === null) { $scope.bridge.settings.haladdress = { devices: [] }; } - var newhal = {name: newhalname, ip: newhalip } + var newhal = {name: newhalname, ip: newhalip, secure: newhalsecure, password: newhaltoken } $scope.bridge.settings.haladdress.devices.push(newhal); $scope.newhalname = null; $scope.newhalip = null; @@ -2202,7 +2202,11 @@ app.controller('HalController', function ($scope, $location, bridgeService, ngDi var preOffCmd = ""; var nameCmd = ""; var aDeviceType; - var postCmd = "?Token=" + $scope.bridge.settings.haltoken; + var postCmd = "?Token="; + if(haldevice.haladdress.password === undefined || haldevice.haladdress.password === null || haldevice.haladdress.password.lenght === 0) + postCmd = postCmd + $scope.bridge.settings.haltoken; + else + postCmd = postCmd + haldevice.haladdress.password; if(haldevice.haldevicetype === "Group") { aDeviceType = "group"; preOnCmd = "/GroupService!GroupCmd=On"; @@ -2227,29 +2231,29 @@ app.controller('HalController', function ($scope, $location, bridgeService, ngDi nameCmd = "!DeviceName="; } if((dim_control.indexOf("byte") >= 0 || dim_control.indexOf("percent") >= 0 || dim_control.indexOf("math") >= 0) && aDeviceType === "switch") - dimpayload = "http://" + haldevice.haladdress + dimpayload = "http://" + haldevice.haladdress.ip + preDimCmd + dim_control + nameCmd + haldevice.haldevicename.replaceAll(" ", "%20") + postCmd; else - dimpayload = "http://" + haldevice.haladdress + dimpayload = "http://" + haldevice.haladdress.ip + preOnCmd + nameCmd + haldevice.haldevicename.replaceAll(" ", "%20") + postCmd; - onpayload = "http://" + haldevice.haladdress + onpayload = "http://" + haldevice.haladdress.ip + preOnCmd + nameCmd + haldevice.haldevicename.replaceAll(" ", "%20") + postCmd; - offpayload = "http://" + haldevice.haladdress + offpayload = "http://" + haldevice.haladdress.ip + preOffCmd + nameCmd + haldevice.haldevicename.replaceAll(" ", "%20") + postCmd; - bridgeService.buildUrls(onpayload, dimpayload, offpayload, false, haldevice.haldevicename + "-" + haldevice.halname, haldevice.haldevicename, haldevice.halname, aDeviceType, "halDevice", null, null); + bridgeService.buildUrls(onpayload, dimpayload, offpayload, false, haldevice.haldevicename + "-" + haldevice.haladdress.name, haldevice.haldevicename, haldevice.haladdress.name, aDeviceType, "halDevice", null, null); $scope.device = bridgeService.state.device; if (!buildonly) { bridgeService.editNewDevice($scope.device); @@ -2260,10 +2264,15 @@ app.controller('HalController', function ($scope, $location, bridgeService, ngDi $scope.buildButtonUrls = function (haldevice, onbutton, offbutton, buildonly) { var actionOn = angular.fromJson(onbutton); var actionOff = angular.fromJson(offbutton); - onpayload = "http://" + haldevice.haladdress + "/IrService!IrCmd=Set!IrDevice=" + haldevice.haldevicename.replaceAll(" ", "%20") + "!IrButton=" + actionOn.DeviceName.replaceAll(" ", "%20") + "?Token=" + $scope.bridge.settings.haltoken; - offpayload = "http://" + haldevice.haladdress + "/IrService!IrCmd=Set!IrDevice=" + haldevice.haldevicename.replaceAll(" ", "%20") + "!IrButton=" + actionOff.DeviceName.replaceAll(" ", "%20") + "?Token=" + $scope.bridge.settings.haltoken; + var postCmd = "?Token="; + if(haldevice.haladdress.password === undefined || haldevice.haladdress.password === null || haldevice.haladdress.password.lenght === 0) + postCmd = postCmd + $scope.bridge.settings.haltoken; + else + postCmd = postCmd + haldevice.haladdress.password; + onpayload = "http://" + haldevice.haladdress.ip + "/IrService!IrCmd=Set!IrDevice=" + haldevice.haldevicename.replaceAll(" ", "%20") + "!IrButton=" + actionOn.DeviceName.replaceAll(" ", "%20") + postCmd; + offpayload = "http://" + haldevice.haladdress.ip + "/IrService!IrCmd=Set!IrDevice=" + haldevice.haldevicename.replaceAll(" ", "%20") + "!IrButton=" + actionOff.DeviceName.replaceAll(" ", "%20") + postCmd; - bridgeService.buildUrls(onpayload, null, offpayload, false, haldevice.haldevicename + "-" + haldevice.halname + "-" + actionOn.DeviceName, haldevice.haldevicename, haldevice.halname, "button", "halButton", null, null); + bridgeService.buildUrls(onpayload, null, offpayload, false, haldevice.haldevicename + "-" + haldevice.haladdress.name + "-" + actionOn.DeviceName, haldevice.haldevicename, haldevice.haladdress.name, "button", "halButton", null, null); $scope.device = bridgeService.state.device; if (!buildonly) { bridgeService.editNewDevice($scope.device); @@ -2272,9 +2281,14 @@ app.controller('HalController', function ($scope, $location, bridgeService, ngDi }; $scope.buildHALHomeUrls = function (haldevice, buildonly) { - onpayload = "http://" + haldevice.haladdress + "/ModeService!ModeCmd=Set!ModeName=Home?Token=" + $scope.bridge.settings.haltoken; - offpayload = "http://" + haldevice.haladdress + "/ModeService!ModeCmd=Set!ModeName=Away?Token=" + $scope.bridge.settings.haltoken; - bridgeService.buildUrls(onpayload, null, offpayload, false, haldevice.haldevicename + "-" + haldevice.halname + "-HomeAway", haldevice.haldevicename, haldevice.halname, "home", "halHome", null, null); + var postCmd = "?Token="; + if(haldevice.haladdress.password === undefined || haldevice.haladdress.password === null || haldevice.haladdress.password.lenght === 0) + postCmd = postCmd + $scope.bridge.settings.haltoken; + else + postCmd = postCmd + haldevice.haladdress.password; + onpayload = "http://" + haldevice.haladdress.ip + "/ModeService!ModeCmd=Set!ModeName=Home" + postCmd; + offpayload = "http://" + haldevice.haladdress.ip + "/ModeService!ModeCmd=Set!ModeName=Away" + postCmd; + bridgeService.buildUrls(onpayload, null, offpayload, false, haldevice.haldevicename + "-" + haldevice.haladdress.name + "-HomeAway", haldevice.haldevicename, haldevice.haladdress.name, "home", "halHome", null, null); $scope.device = bridgeService.state.device; if (!buildonly) { bridgeService.editNewDevice($scope.device); @@ -2283,22 +2297,24 @@ app.controller('HalController', function ($scope, $location, bridgeService, ngDi }; $scope.buildHALHeatUrls = function (haldevice, buildonly) { - onpayload = "http://" + haldevice.haladdress + var postCmd = "?Token="; + if(haldevice.haladdress.password === undefined || haldevice.haladdress.password === null || haldevice.haladdress.password.lenght === 0) + postCmd = postCmd + $scope.bridge.settings.haltoken; + else + postCmd = postCmd + haldevice.haladdress.password; + onpayload = "http://" + haldevice.haladdress.ip + "/HVACService!HVACCmd=Set!HVACName=" + haldevice.haldevicename.replaceAll(" ", "%20") - + "!HVACMode=Heat?Token=" - + $scope.bridge.settings.haltoken; - dimpayload = "http://" + haldevice.haladdress + + "!HVACMode=Heat" + postCmd; + dimpayload = "http://" + haldevice.haladdress.ip + "/HVACService!HVACCmd=Set!HVACName=" + haldevice.haldevicename.replaceAll(" ", "%20") - + "!HVACMode=Heat!HeatSpValue=${intensity.percent}?Token=" - + $scope.bridge.settings.haltoken; - offpayload = "http://" + haldevice.haladdress + + "!HVACMode=Heat!HeatSpValue=${intensity.percent}" + postCmd; + offpayload = "http://" + haldevice.haladdress.ip + "/HVACService!HVACCmd=Set!HVACName=" + haldevice.haldevicename.replaceAll(" ", "%20") - + "!HVACMode=Off?Token=" - + $scope.bridge.settings.haltoken; - bridgeService.buildUrls(onpayload, dimpayload, offpayload, false, haldevice.haldevicename + "-" + haldevice.halname + "-SetHeat", haldevice.haldevicename + " Heat", haldevice.halname, "thermo", "halThermoSet", null, null); + + "!HVACMode=Off" + postCmd; + bridgeService.buildUrls(onpayload, dimpayload, offpayload, false, haldevice.haldevicename + "-" + haldevice.haladdress.name + "-SetHeat", haldevice.haldevicename + " Heat", haldevice.haladdress.name, "thermo", "halThermoSet", null, null); $scope.device = bridgeService.state.device; if (!buildonly) { bridgeService.editNewDevice($scope.device); @@ -2307,22 +2323,24 @@ app.controller('HalController', function ($scope, $location, bridgeService, ngDi }; $scope.buildHALCoolUrls = function (haldevice, buildonly) { - onpayload = "http://" + haldevice.haladdress + var postCmd = "?Token="; + if(haldevice.haladdress.password === undefined || haldevice.haladdress.password === null || haldevice.haladdress.password.lenght === 0) + postCmd = postCmd + $scope.bridge.settings.haltoken; + else + postCmd = postCmd + haldevice.haladdress.password; + onpayload = "http://" + haldevice.haladdress.ip + "/HVACService!HVACCmd=Set!HVACName=" + haldevice.haldevicename.replaceAll(" ", "%20") - + "!HVACMode=Cool?Token=" - + $scope.bridge.settings.haltoken; - dimpayload = "http://" + haldevice.haladdress + + "!HVACMode=Cool" + postCmd; + dimpayload = "http://" + haldevice.haladdress.ip + "/HVACService!HVACCmd=Set!HVACName=" + haldevice.haldevicename.replaceAll(" ", "%20") - + "!HVACMode=Cool!CoolSpValue=${intensity.percent}?Token=" - + $scope.bridge.settings.haltoken; - offpayload = "http://" + haldevice.haladdress + + "!HVACMode=Cool!CoolSpValue=${intensity.percent}" + postCmd; + offpayload = "http://" + haldevice.haladdress.ip + "/HVACService!HVACCmd=Set!HVACName=" + haldevice.haldevicename.replaceAll(" ", "%20") - + "!HVACMode=Off?Token=" - + $scope.bridge.settings.haltoken; - bridgeService.buildUrls(onpayload, dimpayload, offpayload, false, haldevice.haldevicename + "-" + haldevice.halname + "-SetCool", haldevice.haldevicename + " Cool", haldevice.halname, "thermo", "halThermoSet", null, null); + + "!HVACMode=Off" + postCmd; + bridgeService.buildUrls(onpayload, dimpayload, offpayload, false, haldevice.haldevicename + "-" + haldevice.haladdress.name + "-SetCool", haldevice.haldevicename + " Cool", haldevice.haladdress.name, "thermo", "halThermoSet", null, null); $scope.device = bridgeService.state.device; if (!buildonly) { bridgeService.editNewDevice($scope.device); @@ -2331,16 +2349,20 @@ app.controller('HalController', function ($scope, $location, bridgeService, ngDi }; $scope.buildHALAutoUrls = function (haldevice, buildonly) { - onpayload = "http://" + haldevice.haladdress + var postCmd = "?Token="; + if(haldevice.haladdress.password === undefined || haldevice.haladdress.password === null || haldevice.haladdress.password.lenght === 0) + postCmd = postCmd + $scope.bridge.settings.haltoken; + else + postCmd = postCmd + haldevice.haladdress.password; + onpayload = "http://" + haldevice.haladdress.ip + "/HVACService!HVACCmd=Set!HVACName=" + haldevice.haldevicename.replaceAll(" ", "%20") - + "!HVACMode=Auto?Token=" - + $scope.bridge.settings.haltoken; - offpayload = "http://" + haldevice.haladdress + + "!HVACMode=Auto" + postCmd; + offpayload = "http://" + haldevice.haladdress.ip + "/HVACService!HVACCmd=Set!HVACName=" + haldevice.haldevicename.replaceAll(" ", "%20") - + "!HVACMode=Off?Token=" - bridgeService.buildUrls(onpayload, null, offpayload, false, haldevice.haldevicename + "-" + haldevice.halname + "-SetAuto", haldevice.haldevicename + " Auto", haldevice.halname, "thermo", "halThermoSet", null, null); + + "!HVACMode=Off" + postCmd; + bridgeService.buildUrls(onpayload, null, offpayload, false, haldevice.haldevicename + "-" + haldevice.haladdress.name + "-SetAuto", haldevice.haldevicename + " Auto", haldevice.haladdress.name, "thermo", "halThermoSet", null, null); $scope.device = bridgeService.state.device; if (!buildonly) { bridgeService.editNewDevice($scope.device); @@ -2349,17 +2371,20 @@ app.controller('HalController', function ($scope, $location, bridgeService, ngDi }; $scope.buildHALOffUrls = function (haldevice, buildonly) { - onpayload = "http://" + haldevice.haladdress + var postCmd = "?Token="; + if(haldevice.haladdress.password === undefined || haldevice.haladdress.password === null || haldevice.haladdress.password.lenght === 0) + postCmd = postCmd + $scope.bridge.settings.haltoken; + else + postCmd = postCmd + haldevice.haladdress.password; + onpayload = "http://" + haldevice.haladdress.ip + "/HVACService!HVACCmd=Set!HVACName=" + haldevice.haldevicename.replaceAll(" ", "%20") - + "!HVACMode=Auto?Token=" - + $scope.bridge.settings.haltoken; - offpayload = "http://" + haldevice.haladdress + + "!HVACMode=Auto" + postCmd; + offpayload = "http://" + haldevice.haladdress.ip + "/HVACService!HVACCmd=Set!HVACName=" + haldevice.haldevicename.replaceAll(" ", "%20") - + "!HVACMode=Off?Token=" - $scope.device.offUrl = "http://" + haldevice.haladdress - bridgeService.buildUrls(onpayload, null, offpayload, false, haldevice.haldevicename + "-" + haldevice.halname + "-TurnOff", haldevice.haldevicename + " Thermostat", haldevice.halname, "thermo", "halThermoSet", null, null); + + "!HVACMode=Off" + postCmd; + bridgeService.buildUrls(onpayload, null, offpayload, false, haldevice.haldevicename + "-" + haldevice.haladdress.name + "-TurnOff", haldevice.haldevicename + " Thermostat", haldevice.haladdress.name, "thermo", "halThermoSet", null, null); $scope.device = bridgeService.state.device; if (!buildonly) { bridgeService.editNewDevice($scope.device); @@ -2368,17 +2393,20 @@ app.controller('HalController', function ($scope, $location, bridgeService, ngDi }; $scope.buildHALFanUrls = function (haldevice, buildonly) { - onpayload = "http://" + haldevice.haladdress + var postCmd = "?Token="; + if(haldevice.haladdress.password === undefined || haldevice.haladdress.password === null || haldevice.haladdress.password.lenght === 0) + postCmd = postCmd + $scope.bridge.settings.haltoken; + else + postCmd = postCmd + haldevice.haladdress.password; + onpayload = "http://" + haldevice.haladdress.ip + "/HVACService!HVACCmd=Set!HVACName=" + haldevice.haldevicename.replaceAll(" ", "%20") - + "!FanMode=On?Token=" - + $scope.bridge.settings.haltoken; - offpayload = "http://" + haldevice.haladdress + + "!FanMode=On" + postCmd; + offpayload = "http://" + haldevice.haladdress.ip + "/HVACService!HVACCmd=Set!HVACName=" + haldevice.haldevicename.replaceAll(" ", "%20") - + "!FanMode=Auto?Token=" - + $scope.bridge.settings.haltoken; - bridgeService.buildUrls(onpayload, null, offpayload, false, haldevice.haldevicename + "-" + haldevice.halname + "-SetFan", haldevice.haldevicename + " Fan", haldevice.halname, "thermo", "halThermoSet", null, null); + + "!FanMode=Auto" + postCmd; + bridgeService.buildUrls(onpayload, null, offpayload, false, haldevice.haldevicename + "-" + haldevice.haladdress.name + "-SetFan", haldevice.haldevicename + " Fan", haldevice.haladdress.name, "thermo", "halThermoSet", null, null); $scope.device = bridgeService.state.device; if (!buildonly) { bridgeService.editNewDevice($scope.device); diff --git a/src/main/resources/public/views/haldevice.html b/src/main/resources/public/views/haldevice.html index 7d365e2..ad0fbd6 100644 --- a/src/main/resources/public/views/haldevice.html +++ b/src/main/resources/public/views/haldevice.html @@ -76,7 +76,7 @@ ng-click="toggleSelection(haldevice.haldevicename)"> {{haldevice.haldevicename}} {{haldevice.haldevicetype}} - {{haldevice.halname}} + {{haldevice.haladdress.name}} + - - - - - + + + ng-click="addHarmonytoSettings(newharmonyname, newharmonyip, newharmonywebhook)">Add @@ -176,20 +186,24 @@ - {{hue.name}} - {{hue.ip}} - - - + + + + + + ng-click="addHuetoSettings(newhuename, newhueip)">Add @@ -201,34 +215,47 @@ Name IP + Token Use SSL Manage - {{hal.name}} - {{hal.ip}} - {{hal.secure}} + + + + - - + + ng-click="addHaltoSettings(newhalname, newhalip, newhalsecure, newhaltoken)">Add - HAL Token + HAL Token (please use token on individual HAL entry) @@ -247,26 +274,32 @@ - {{mqtt.name}} - {{mqtt.ip}} - {{mqtt.username}} - ******* - - + + + + - - - - - - - - - {{domoticz.name}} - {{domoticz.ip}} - {{domoticz.port}} - {{domoticz.username}} - ******* - + + + + + - - - - - - - - -