From a2136723415d9d9da6c8e33161fb8ce904c269cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Rennfanz?= Date: Sat, 9 Dec 2017 21:17:05 +0100 Subject: [PATCH] Add web part of plug-in for HomeWizard SmartPlug support --- src/main/resources/public/scripts/app.js | 196 +++++++++++++++++- .../resources/public/views/configuration.html | 1 + .../public/views/domoticzdevice.html | 1 + .../resources/public/views/editdevice.html | 1 + .../resources/public/views/fibarodevice.html | 1 + .../resources/public/views/fibaroscene.html | 1 + .../resources/public/views/haldevice.html | 1 + .../public/views/harmonyactivity.html | 1 + .../resources/public/views/harmonydevice.html | 1 + .../resources/public/views/hassdevice.html | 1 + .../public/views/homewizarddevice.html | 127 ++++++++++++ .../resources/public/views/huedevice.html | 1 + .../resources/public/views/lifxdevice.html | 1 + src/main/resources/public/views/logs.html | 1 + .../resources/public/views/mqttpublish.html | 1 + .../resources/public/views/nestactions.html | 1 + .../resources/public/views/somfydevice.html | 1 + src/main/resources/public/views/system.html | 48 +++++ .../resources/public/views/veradevice.html | 1 + .../resources/public/views/verascene.html | 1 + 20 files changed, 382 insertions(+), 6 deletions(-) create mode 100644 src/main/resources/public/views/homewizarddevice.html diff --git a/src/main/resources/public/scripts/app.js b/src/main/resources/public/scripts/app.js index 0b8ae5d..f29c6d1 100644 --- a/src/main/resources/public/scripts/app.js +++ b/src/main/resources/public/scripts/app.js @@ -62,7 +62,11 @@ app.config (function ($locationProvider, $routeProvider) { }).when ('/hassdevices', { templateUrl: 'views/hassdevice.html', controller: 'HassController', - requiresAuthentication: true + requiresAuthentication: true + }).when ('/homewizarddevices', { + templateUrl: 'views/homewizarddevice.html', + controller: 'HomeWizardController', + requiresAuthentication: true }).when ('/domoticzdevices', { templateUrl: 'views/domoticzdevice.html', controller: 'DomoticzController', @@ -143,7 +147,7 @@ app.service ('bridgeService', function ($rootScope, $http, $base64, $location, n this.state = {base: "./api/devices", bridgelocation: ".", systemsbase: "./system", huebase: "./api", configs: [], backups: [], devices: [], device: {}, mapandid: [], type: "", settings: [], myToastMsg: [], logMsgs: [], loggerInfo: [], mapTypes: [], olddevicename: "", logShowAll: false, isInControl: false, showVera: false, showFibaro: false, showHarmony: false, showNest: false, showHue: false, showHal: false, showMqtt: false, showHass: false, - showDomoticz: false, showSomfy: false, showLifx: false, habridgeversion: {}, viewDevId: "", queueDevId: "", securityInfo: {}, filterDevicesByIpAddress: null, + showHomeWizard: false, showDomoticz: false, showSomfy: false, showLifx: false, habridgeversion: {}, viewDevId: "", queueDevId: "", securityInfo: {}, filterDevicesByIpAddress: null, filterDevicesOnlyFiltered: false, filterDeviceType: null}; this.displayWarn = function(errorTitle, error) { @@ -504,11 +508,16 @@ app.service ('bridgeService', function ($rootScope, $http, $base64, $location, n return; } - this.updateShowHass = function () { - this.state.showHass = self.state.settings.hassconfigured; + this.updateShowHomeWizard = function () { + this.state.showHomeWizard = self.state.settings.homewizardconfigured; return; } + this.updateShowHass = function () { + this.state.showHass = self.state.settings.hassconfigured; + return; + } + this.updateShowDomoticz = function () { this.state.showDomoticz = self.state.settings.domoticzconfigured; return; @@ -536,6 +545,7 @@ app.service ('bridgeService', function ($rootScope, $http, $base64, $location, n self.updateShowHal(); self.updateShowMqtt(); self.updateShowHass(); + self.updateShowHomeWizard(); self.updateShowDomoticz(); self.updateShowSomfy(); self.updateShowLifx(); @@ -781,6 +791,22 @@ app.service ('bridgeService', function ($rootScope, $http, $base64, $location, n ); }; + this.viewHomeWizardDevices = function () { + if (!this.state.showHomeWizard) + return; + return $http.get(this.state.base + "/homewizard/devices").then( + function (response) { + self.state.homewizarddevices = response.data; + }, + function (error) { + if (error.status === 401) + $rootScope.$broadcast('securityReinit', 'done'); + else + self.displayWarn("Get HomeWizard Devices Error: ", error); + } + ); + }; + this.viewDomoticzDevices = function () { if (!this.state.showDomoticz) return; @@ -1468,6 +1494,24 @@ app.controller ('SystemController', function ($scope, $location, bridgeService, } } }; + $scope.addHomeWizardtoSettings = function (newhomewizardname, newhomewizardip, newhomewizardusername, newhomewizardpassword) { + if($scope.bridge.settings.homewizardaddress === undefined || $scope.bridge.settings.homewizardaddress === null) { + $scope.bridge.settings.homewizardaddress = { devices: [] }; + } + var newhomewizard = { name: newhomewizardname, ip: newhomewizardip, username: newhomewizardusername, password: newhomewizardpassword } + $scope.bridge.settings.homewizardaddress.devices.push(newhomewizard); + $scope.newhomewizardname = null; + $scope.newhomewizardip = null; + $scope.newhomewizardusername = null; + $scope.newhomewizardpassword = null; + }; + $scope.removeHomeWizardtoSettings = function (homewizardname, homewizardip) { + for(var i = $scope.bridge.settings.homewizardaddress.devices.length - 1; i >= 0; i--) { + if($scope.bridge.settings.homewizardaddress.devices[i].name === homewizardname && $scope.bridge.settings.homewizardaddress.devices[i].ip === homewizardip) { + $scope.bridge.settings.homewizardaddress.devices.splice(i, 1); + } + } + }; $scope.addDomoticztoSettings = function (newdomoticzname, newdomoticzip, newdomoticzport, newdomoticzusername, newdomoticzpassword) { if($scope.bridge.settings.domoticzaddress === undefined || $scope.bridge.settings.domoticzaddress === null) { $scope.bridge.settings.domoticzaddress = { devices: [] }; @@ -2782,7 +2826,7 @@ app.controller('HassController', function ($scope, $location, bridgeService, ngD $scope.device = bridgeService.state.device; }; - $scope.buildDeviceUrls = function (hassdevice, dim_control, buildonly) { + $scope.buildDeviceUrls = function (hassdevice, buildonly) { onpayload = "{\"entityId\":\"" + hassdevice.deviceState.entity_id + "\",\"hassName\":\"" + hassdevice.hassname + "\",\"state\":\"on\"}"; if((dim_control.indexOf("byte") >= 0 || dim_control.indexOf("percent") >= 0 || dim_control.indexOf("math") >= 0)) dimpayload = "{\"entityId\":\"" + hassdevice.deviceState.entity_id + "\",\"hassName\":\"" + hassdevice.hassname + "\",\"state\":\"on\",\"bri\":\"" + dim_control + "\"}"; @@ -2798,7 +2842,7 @@ app.controller('HassController', function ($scope, $location, bridgeService, ngD } }; - $scope.bulkAddDevices = function(dim_control) { + $scope.bulkAddDevices = function() { var devicesList = []; $scope.clearDevice(); for(var i = 0; i < $scope.bulk.devices.length; i++) { @@ -2894,6 +2938,132 @@ app.controller('HassController', function ($scope, $location, bridgeService, ngD }; }); +app.controller('HomeWizardController', function ($scope, $location, bridgeService, ngDialog) { + $scope.bridge = bridgeService.state; + $scope.device = bridgeService.state.device; + $scope.device_dim_control = ""; + $scope.bulk = { devices: [] }; + $scope.selectAll = false; + bridgeService.viewHomeWizardDevices(); + $scope.imgButtonsUrl = "glyphicon glyphicon-plus"; + $scope.buttonsVisible = false; + + $scope.clearDevice = function () { + bridgeService.clearDevice(); + $scope.device = bridgeService.state.device; + }; + + $scope.buildDeviceUrls = function (homewizarddevice, buildonly) { + + dimpayload = "{\"deviceid\":\"" + homewizarddevice.id + "\",\"action\":\"on\"}"; + onpayload = "{\"deviceid\":\"" + homewizarddevice.id + "\",\"action\":\"on\"}"; + offpayload = "{\"deviceid\":\"" + homewizarddevice.id + "\",\"action\":\"off\"}"; + + bridgeService.buildUrls(onpayload, dimpayload, offpayload, null, true, homewizarddevice.id ,homewizarddevice.name, homewizarddevice.gateway, null, "homewizardDevice", null, null); + $scope.device = bridgeService.state.device; + + if (!buildonly) { + bridgeService.editNewDevice($scope.device); + $location.path('/editdevice'); + } + }; + + $scope.bulkAddDevices = function() { + var devicesList = []; + $scope.clearDevice(); + for(var i = 0; i < $scope.bulk.devices.length; i++) { + for(var x = 0; x < bridgeService.state.homewizarddevices.length; x++) { + if(bridgeService.state.homewizarddevices[x].id === $scope.bulk.devices[i]) { + $scope.buildDeviceUrls(bridgeService.state.homewizarddevices[x],true); + devicesList[i] = { + name: $scope.device.name, + mapId: $scope.device.mapId, + mapType: $scope.device.mapType, + deviceType: $scope.device.deviceType, + targetDevice: $scope.device.targetDevice, + onUrl: $scope.device.onUrl, + dimUrl: $scope.device.dimUrl, + offUrl: $scope.device.offUrl, + colorUrl: $scope.device.colorUrl, + headers: $scope.device.headers, + httpVerb: $scope.device.httpVerb, + contentType: $scope.device.contentType, + contentBody: $scope.device.contentBody, + contentBodyDim: $scope.device.contentBodyDim, + contentBodyOff: $scope.device.contentBodyOff + }; + $scope.clearDevice(); + } + } + } + bridgeService.bulkAddDevice(devicesList).then( + function () { + $scope.clearDevice(); + bridgeService.viewDevices(); + bridgeService.viewHalDevices(); + }, + function (error) { + bridgeService.displayWarn("Error adding HomeWizard devices in bulk.", error) + } + ); + $scope.bulk = { devices: [] }; + $scope.selectAll = false; + }; + + $scope.toggleSelection = function toggleSelection(deviceId) { + var idx = $scope.bulk.devices.indexOf(deviceId); + + // is currently selected + if (idx > -1) { + $scope.bulk.devices.splice(idx, 1); + if($scope.bulk.devices.length === 0 && $scope.selectAll) + $scope.selectAll = false; + } + + // is newly selected + else { + $scope.bulk.devices.push(deviceId); + $scope.selectAll = true; + } + }; + + $scope.toggleSelectAll = function toggleSelectAll() { + if($scope.selectAll) { + $scope.selectAll = false; + $scope.bulk = { devices: [] }; + } + else { + $scope.selectAll = true; + for(var x = 0; x < bridgeService.state.homewizarddevices.length; x++) { + if($scope.bulk.devices.indexOf(bridgeService.state.homewizarddevices[x]) < 0) + $scope.bulk.devices.push(bridgeService.state.homewizarddevices[x].devicename); + } + } + }; + + $scope.toggleButtons = function () { + $scope.buttonsVisible = !$scope.buttonsVisible; + if($scope.buttonsVisible) + $scope.imgButtonsUrl = "glyphicon glyphicon-minus"; + else + $scope.imgButtonsUrl = "glyphicon glyphicon-plus"; + }; + + $scope.deleteDevice = function (device) { + $scope.bridge.device = device; + ngDialog.open({ + template: 'deleteDialog', + controller: 'DeleteDialogCtrl', + className: 'ngdialog-theme-default' + }); + }; + + $scope.editDevice = function (device) { + bridgeService.editDevice(device); + $location.path('/editdevice'); + }; +}); + app.controller('DomoticzController', function ($scope, $location, bridgeService, ngDialog) { $scope.bridge = bridgeService.state; $scope.device = bridgeService.state.device; @@ -3705,6 +3875,20 @@ app.filter('configuredSomfyDevices', function (bridgeService) { } }); +app.filter('configuredHomeWizardDevices', function (bridgeService) { + return function(input) { + var out = []; + if(input === undefined || input === null || input.length === undefined) + return out; + for (var i = 0; i < input.length; i++) { + if(bridgeService.deviceContainsType(input[i], "homewizardDevice")){ + out.push(input[i]); + } + } + return out; + } +}); + app.filter('filterDevicesByRequester', function () { return function(input,search,mustContain,deviceType) { var out = []; diff --git a/src/main/resources/public/views/configuration.html b/src/main/resources/public/views/configuration.html index eebbbdd..96b73a6 100644 --- a/src/main/resources/public/views/configuration.html +++ b/src/main/resources/public/views/configuration.html @@ -23,6 +23,7 @@ href="#!/haldevices">HAL Devices
  • MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Somfy Devices
  • LIFX Devices
  • diff --git a/src/main/resources/public/views/domoticzdevice.html b/src/main/resources/public/views/domoticzdevice.html index 0d32594..4dfb914 100644 --- a/src/main/resources/public/views/domoticzdevice.html +++ b/src/main/resources/public/views/domoticzdevice.html @@ -21,6 +21,7 @@ Devices
  • MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Somfy Devices
  • LIFX Devices
  • diff --git a/src/main/resources/public/views/editdevice.html b/src/main/resources/public/views/editdevice.html index 457806c..a28e5bc 100644 --- a/src/main/resources/public/views/editdevice.html +++ b/src/main/resources/public/views/editdevice.html @@ -23,6 +23,7 @@ href="#!/mqttmessages">MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Somfy Devices
  • LIFX Devices
  • diff --git a/src/main/resources/public/views/fibarodevice.html b/src/main/resources/public/views/fibarodevice.html index 95e428c..eefe91d 100644 --- a/src/main/resources/public/views/fibarodevice.html +++ b/src/main/resources/public/views/fibarodevice.html @@ -17,6 +17,7 @@ href="#!/haldevices">HAL Devices
  • MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Somfy Devices
  • LIFX Devices
  • diff --git a/src/main/resources/public/views/fibaroscene.html b/src/main/resources/public/views/fibaroscene.html index c5c35fa..f23e9f5 100644 --- a/src/main/resources/public/views/fibaroscene.html +++ b/src/main/resources/public/views/fibaroscene.html @@ -17,6 +17,7 @@ href="#!/haldevices">HAL Devices
  • MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Somfy Devices
  • LIFX Devices
  • diff --git a/src/main/resources/public/views/haldevice.html b/src/main/resources/public/views/haldevice.html index 37f6bc7..88baa9f 100644 --- a/src/main/resources/public/views/haldevice.html +++ b/src/main/resources/public/views/haldevice.html @@ -20,6 +20,7 @@ Devices
  • MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Somfy Devices
  • LIFX Devices
  • diff --git a/src/main/resources/public/views/harmonyactivity.html b/src/main/resources/public/views/harmonyactivity.html index 3b63c91..093b4db 100644 --- a/src/main/resources/public/views/harmonyactivity.html +++ b/src/main/resources/public/views/harmonyactivity.html @@ -21,6 +21,7 @@ href="#!/haldevices">HAL Devices
  • MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Somfy Devices
  • LIFX Devices
  • diff --git a/src/main/resources/public/views/harmonydevice.html b/src/main/resources/public/views/harmonydevice.html index a62adf0..9cd2f5b 100644 --- a/src/main/resources/public/views/harmonydevice.html +++ b/src/main/resources/public/views/harmonydevice.html @@ -21,6 +21,7 @@ href="#!/haldevices">HAL Devices
  • MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Somfy Devices
  • LIFX Devices
  • diff --git a/src/main/resources/public/views/hassdevice.html b/src/main/resources/public/views/hassdevice.html index 71d7525..66e81ec 100644 --- a/src/main/resources/public/views/hassdevice.html +++ b/src/main/resources/public/views/hassdevice.html @@ -19,6 +19,7 @@ href="#!/huedevices">Hue Devices
  • HAL Devices
  • +
  • HomeWizard Devices
  • MQTT Messages
  • Domoticz Devices
  • diff --git a/src/main/resources/public/views/homewizarddevice.html b/src/main/resources/public/views/homewizarddevice.html new file mode 100644 index 0000000..40c8727 --- /dev/null +++ b/src/main/resources/public/views/homewizarddevice.html @@ -0,0 +1,127 @@ + + +
    +
    +

    HomeWizard Device List + ({{bridge.homewizarddevices.length}})

    +
    +
    +

    For any HomeWizard Device, use the build action buttons + to generate the item addition information into the ha-bridge device + and this will put you into the edit screen. Then + you can modify the name to anything you want that will be the keyword + for the Echo or Google Home. Also, you can go back to any helper tab and click a build + action button to add another item for a multi-command. After you are + done in the edit tab, click the 'Add Bridge Device' to finish that selection + setup. The 'Already Configured HomeWizard Devices' list below will show + what is already setup for your HomeWizard Gateway.

    +

    Use the check boxes by the names to use the bulk addition + feature. Select your items, then click + bulk add below. Your items will be added with the name of the device from the HomeWizard Cloud.

    +
    + + + + + + + + + + + + + + + + + + +
    Row NameIdTypeBuild Actions
    {{$index+1}} + {{homewizarddevice.name}}{{homewizarddevice.id}}{{homewizarddevice.typeName}} + + +
    +
    + +
    + +
    +
    +

    + Already Configured HomeWizard Devices +

    +
    +
    + + + + + + + + + + + + + + + + + + +
    RowNameHomeWizard GatewayMap IdActions
    {{$index+1}}{{device.name}}{{device.targetDevice}}{{device.mapId}} +

    + + +

    +
    +
    +
    +
    + diff --git a/src/main/resources/public/views/huedevice.html b/src/main/resources/public/views/huedevice.html index 6855894..b02f0e0 100644 --- a/src/main/resources/public/views/huedevice.html +++ b/src/main/resources/public/views/huedevice.html @@ -21,6 +21,7 @@ href="#!/haldevices">HAL Devices
  • MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Somfy Devices
  • LIFX Devices
  • diff --git a/src/main/resources/public/views/lifxdevice.html b/src/main/resources/public/views/lifxdevice.html index c220e3b..4f8bdf6 100644 --- a/src/main/resources/public/views/lifxdevice.html +++ b/src/main/resources/public/views/lifxdevice.html @@ -13,6 +13,7 @@
  • HAL Devices
  • MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Somfy Devices
  • diff --git a/src/main/resources/public/views/logs.html b/src/main/resources/public/views/logs.html index fca1aee..f31d666 100644 --- a/src/main/resources/public/views/logs.html +++ b/src/main/resources/public/views/logs.html @@ -21,6 +21,7 @@ href="#!/haldevices">HAL Devices
  • MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Somfy Devices
  • LIFX Devices
  • diff --git a/src/main/resources/public/views/mqttpublish.html b/src/main/resources/public/views/mqttpublish.html index 940b211..593a4af 100644 --- a/src/main/resources/public/views/mqttpublish.html +++ b/src/main/resources/public/views/mqttpublish.html @@ -13,6 +13,7 @@
  • HAL Devices
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Somfy Devices
  • LIFX Devices
  • diff --git a/src/main/resources/public/views/nestactions.html b/src/main/resources/public/views/nestactions.html index 34875b9..1563e47 100644 --- a/src/main/resources/public/views/nestactions.html +++ b/src/main/resources/public/views/nestactions.html @@ -21,6 +21,7 @@ href="#!/haldevices">HAL Devices
  • MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Somfy Devices
  • LIFX Devices
  • diff --git a/src/main/resources/public/views/somfydevice.html b/src/main/resources/public/views/somfydevice.html index 8bd5000..5f5dd19 100644 --- a/src/main/resources/public/views/somfydevice.html +++ b/src/main/resources/public/views/somfydevice.html @@ -17,6 +17,7 @@ href="#!/haldevices">HAL Devices
  • MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Add/Edit
  • diff --git a/src/main/resources/public/views/system.html b/src/main/resources/public/views/system.html index 603c4c7..8e08304 100644 --- a/src/main/resources/public/views/system.html +++ b/src/main/resources/public/views/system.html @@ -22,6 +22,7 @@ href="#!/haldevices">HAL Devices
  • MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Somfy Devices
  • LIFX Devices
  • @@ -417,6 +418,53 @@ + + HomeWizard Gateways + + + + + + + + + + + + + + + + + + + + + + + + +
    NameIPUsernamePasswordManage
    + Domoticz Names and IP Addresses HAL Devices
  • MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Somfy Devices
  • LIFX Devices
  • diff --git a/src/main/resources/public/views/verascene.html b/src/main/resources/public/views/verascene.html index 0357754..c793a89 100644 --- a/src/main/resources/public/views/verascene.html +++ b/src/main/resources/public/views/verascene.html @@ -17,6 +17,7 @@ href="#!/haldevices">HAL Devices
  • MQTT Messages
  • HomeAssistant Devices
  • +
  • HomeWizard Devices
  • Domoticz Devices
  • Somfy Devices
  • LIFX Devices