From 477d5878ce3e0bca185ba55620dd18e113ccc191 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Sun, 16 Apr 2017 10:18:45 +0200 Subject: [PATCH 01/43] Add Node card --- panels/zwave/ha-panel-zwave.html | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index c52aad08a472..49a8e88a458d 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -91,6 +91,13 @@ +
+ +
+ Z-Wave Node controls. +
+
+
From c9e57e9a822c5d22f5dbe5c6b3541782edb6ed3d Mon Sep 17 00:00:00 2001 From: turbokongen Date: Sun, 16 Apr 2017 12:46:20 +0200 Subject: [PATCH 02/43] Add Node selection dropdown --- panels/zwave/ha-panel-zwave.html | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index 49a8e88a458d..ee27d6dae605 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -4,6 +4,9 @@ + + + @@ -24,6 +27,12 @@ .card-actions.warning ha-call-service-button { color: var(--google-red-500); } + + .device-picker { + @apply(--layout-horizontal); + @apply(--layout-center-center); + padding-bottom: 24px; + } @@ -96,6 +105,17 @@
Z-Wave Node controls.
+
+ + + + + +
@@ -119,6 +139,39 @@ type: Boolean, value: false, }, + + nodes: { + type: Array, + computed: 'computeNodes(hass)' + }, + + selectedNode: { + type: Number, + value: -1, + }, + }, + + computeNodes: function (hass) { + return Object.keys(hass.states) + .map(function (key) { return hass.states[key]; }) + .filter(function (ent) { + return (!ent.attributes.hidden && + (ent.entity_id).match('zwave[.]')); + }) + .sort(function (entityA, entityB) { + if (entityA.entity_id < entityB.entity_id) { + return -1; + } + if (entityA.entity_id > entityB.entity_id) { + return 1; + } + return 0; + }); + }, + + computeSelectCaption: function (stateObj) { + return ' (Node ID: ' + stateObj.attributes.node_id + ') ' + + window.hassUtil.computeStateName(stateObj); }, }); From 356174cf35a6fc93ba0331e2f3b4cbb403b2bd56 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Sun, 16 Apr 2017 21:37:20 +0200 Subject: [PATCH 03/43] Add refresh node service and auto visible options --- panels/zwave/ha-panel-zwave.html | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index ee27d6dae605..2cff6925109f 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -116,6 +116,18 @@ + +
+ @@ -148,6 +160,7 @@ selectedNode: { type: Number, value: -1, + observer: 'computeIsNodeSelected' }, }, @@ -171,7 +184,17 @@ computeSelectCaption: function (stateObj) { return ' (Node ID: ' + stateObj.attributes.node_id + ') ' + - window.hassUtil.computeStateName(stateObj); + window.hassUtil.computeStateName(stateObj) + ' (' + + stateObj.attributes.query_stage + ')'; + }, + + computeIsNodeSelected: function () { + return (!this.nodes || this.selectedNode == -1); }, + + computeNodeServiceData: function (selectedNode) { + console.log(JSON.stringify({node_id: this.nodes[selectedNode].attributes.node_id})); + return {node_id: this.nodes[selectedNode].attributes.node_id}; + } }); From b4beea5882c8117b56c56e5c8f2b3c765c476591 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Sun, 16 Apr 2017 21:49:12 +0200 Subject: [PATCH 04/43] Add replace node and replace failed node to node options --- panels/zwave/ha-panel-zwave.html | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index 2cff6925109f..fcaabc745f9a 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -53,11 +53,6 @@ domain='zwave' service='add_node_secure' >Add Node - Remove Failed Node Refresh Node + Remove Failed Node + Replace Failed Node From f7350f25ebd4f40e510288bcdbad834ba1813529 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Mon, 17 Apr 2017 18:37:10 +0200 Subject: [PATCH 05/43] Add node information --- panels/zwave/ha-panel-zwave.html | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index fcaabc745f9a..4a45bb6ea523 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -18,6 +18,11 @@ margin-top: 24px; } + .node-info { + margin-left: 16px; + text-transform: capitalize; + } + paper-card { display: block; margin: 0 auto; @@ -134,8 +139,16 @@ service-data=[[computeNodeServiceData(selectedNode)]] >Replace Failed Node - +
+ + + +
@@ -159,6 +172,11 @@ value: false, }, + selectedNodeAttrs: { + type: Array, + computed: 'computeSelectedNodeAttrs(nodes)' + }, + nodes: { type: Array, computed: 'computeNodes(hass)' @@ -189,6 +207,14 @@ }); }, + computeSelectedNodeAttrs: function (nodes) { + if (this.selectedNode === -1) return; + var att = [] + for(var i in (this.nodes[this.selectedNode].attributes)) { + att.push(i + ': ' + this.nodes[this.selectedNode].attributes[i]) }; + return att.sort(); + }, + computeSelectCaption: function (stateObj) { return ' (Node ID: ' + stateObj.attributes.node_id + ') ' + window.hassUtil.computeStateName(stateObj) + ' (' + @@ -196,6 +222,7 @@ }, computeIsNodeSelected: function () { + this.computeSelectedNodeAttrs(this.nodes); return (!this.nodes || this.selectedNode == -1); }, @@ -203,5 +230,6 @@ console.log(JSON.stringify({node_id: this.nodes[selectedNode].attributes.node_id})); return {node_id: this.nodes[selectedNode].attributes.node_id}; } + }); From b6c8ca0a5d79e10975e11828fb34aa6eac859a19 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Mon, 17 Apr 2017 20:23:27 +0200 Subject: [PATCH 06/43] Add node group configuration --- panels/zwave/ha-panel-zwave.html | 124 +++++++++++++++++++++++++++---- 1 file changed, 110 insertions(+), 14 deletions(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index 4a45bb6ea523..4e1b039a10b8 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -138,20 +138,74 @@ service='replace_failed_node' service-data=[[computeNodeServiceData(selectedNode)]] >Replace Failed Node + Print Node
- - - + +
+
From df461b15fa4cb7435cfb40764ae76e20d4efb328 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Tue, 18 Apr 2017 19:31:36 +0200 Subject: [PATCH 07/43] Add Wakeup and fix group associations --- panels/zwave/ha-panel-zwave.html | 102 +++++++++++++++++++++++-------- 1 file changed, 75 insertions(+), 27 deletions(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index 4e1b039a10b8..63b127f6b476 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -100,6 +100,7 @@ +
@@ -117,7 +118,6 @@
-
-
- + -
From bc285837a1cd88bb4c532807105a25eb8124ad5c Mon Sep 17 00:00:00 2001 From: turbokongen Date: Tue, 18 Apr 2017 21:09:04 +0200 Subject: [PATCH 08/43] Make Node info expandable --- panels/zwave/ha-panel-zwave.html | 56 +++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index 63b127f6b476..f81e703b5dd2 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -29,6 +29,10 @@ max-width: 600px; } + paper-button[toggles][active] { + background: gray; + } + .card-actions.warning ha-call-service-button { color: var(--google-red-500); } @@ -145,6 +149,20 @@ service-data=[[computeNodeServiceData(selectedNode)]] >Print Node +
+ + + Rename Node +
+
+ + + + + + + + +
+ Set Config Parameter + Print Config Parameter +
+
+
@@ -355,6 +392,22 @@ type: Number, }, + configParameterInput: { // TODO make api to get all config parameters and its values + type: Number, + observer: 'computePrintConfigParameterServiceData' + }, + + configParameterValueInput: { + type: Number, + observer: 'computeSetConfigParameterServiceData' + }, + + configParameterSizeInput: { + type: Number, + value: 2, + observer: 'computeSetConfigParameterServiceData' + }, + newNodeNameInput: { type: String, }, @@ -379,7 +432,6 @@ }, computeEntities: function (selectedNode) { - console.log('computeEntities'); if (!this.nodes || selectedNode === -1) return -1; var hass = this.hass; var nodeid = this.nodes[this.selectedNode].attributes.node_id; @@ -414,7 +466,7 @@ Object.entries(nodeAttrs).forEach(([key, value]) => { att.push(key + ': ' + value); }); - console.log(att); + console.log('Node attributes: ', att); return att.sort(); }, @@ -449,7 +501,7 @@ computeGetWakeupValue: function (selectedNode) { if (this.selectedNode === -1 || !this.nodes[selectedNode].attributes.wake_up_interval) return 'unknown'; - console.log(this.nodes[selectedNode].attributes.wake_up_interval); + console.log('Fetched Wakeup: ', this.nodes[selectedNode].attributes.wake_up_interval); return (this.nodes[selectedNode].attributes.wake_up_interval); }, @@ -458,14 +510,13 @@ !this.nodes[selectedNode].entity_id) return -1; var str = (this.nodes[selectedNode].entity_id); var name = str.replace('zwave.', ''); - console.log(name); + console.log('Node name: ', name); return name; }, computeAssocServiceData: function (type) { - console.log(this.selectedTargetNode); if (this.selectedTargetNode === -1) return -1; - console.log(JSON.stringify({ node_id: this.nodes[this.selectedNode].attributes.node_id, + console.log('Change association', JSON.stringify({ node_id: this.nodes[this.selectedNode].attributes.node_id, association: type, target_node_id: this.nodes[this.selectedTargetNode].attributes.node_id, group: this.groups[this.selectedGroup], @@ -478,24 +529,44 @@ }, computeWakeupServiceData: function (wakeupInput) { - console.log(JSON.stringify({ node_id: this.nodes[this.selectedNode].attributes.node_id, + console.log('Set wakeup', JSON.stringify({ node_id: this.nodes[this.selectedNode].attributes.node_id, value: wakeupInput })); return { node_id: this.nodes[this.selectedNode].attributes.node_id, value: wakeupInput }; }, computeNodeNameServiceData: function (newNodeNameInput) { - console.log(JSON.stringify({ node_id: this.nodes[this.selectedNode].attributes.node_id, + console.log('Rename node:', JSON.stringify({ node_id: this.nodes[this.selectedNode].attributes.node_id, name: newNodeNameInput })); return { node_id: this.nodes[this.selectedNode].attributes.node_id, name: newNodeNameInput }; }, computeRefreshEntityServiceData: function (selectedEntity) { - console.log(selectedEntity); if (selectedEntity === -1) return -1; - console.log(JSON.stringify({ entity_id: this.entities[selectedEntity].entity_id })); + console.log('Refresh enity:', JSON.stringify({ entity_id: this.entities[selectedEntity].entity_id })); return { entity_id: this.entities[selectedEntity].entity_id }; }, + + computeSetConfigParameterServiceData: function (configParameterInput) { + if (this.selectedNode === -1) return -1; + console.log('Set config', JSON.stringify({ node_id: this.nodes[this.selectedNode].attributes.node_id, + parameter: configParameterInput, + value: this.configParameterValueInput, + size: this.configParameterSizeInput })); + return { node_id: this.nodes[this.selectedNode].attributes.node_id, + parameter: this.configParameterInput, + value: this.configParameterValueInput, + size: this.configParameterSizeInput }; + }, + + + computePrintConfigParameterServiceData: function (configParameterInput) { + if (this.selectedNode === -1) return -1; + console.log('PrintConfig', JSON.stringify({ node_id: this.nodes[this.selectedNode].attributes.node_id, + parameter: configParameterInput })); + return { node_id: this.nodes[this.selectedNode].attributes.node_id, + parameter: configParameterInput }; + }, }); From cac2e042e87ae2afb5b45c2c5bcd3c6d625b0090 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Thu, 20 Apr 2017 20:40:02 +0200 Subject: [PATCH 12/43] styling --- panels/zwave/ha-panel-zwave.html | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index c280d7615af6..994e241989fe 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -204,7 +204,7 @@ - +
@@ -235,6 +235,7 @@
+
+
+
Date: Thu, 20 Apr 2017 21:54:55 +0200 Subject: [PATCH 13/43] indention --- panels/zwave/ha-panel-zwave.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index 994e241989fe..938e9dc620a4 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -118,9 +118,9 @@ - +
From c0a3395e989b762cb168b0b7d21eeffd18ec5738 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Thu, 20 Apr 2017 21:59:13 +0200 Subject: [PATCH 14/43] lint error --- panels/zwave/ha-panel-zwave.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index 938e9dc620a4..b0f709663474 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -572,6 +572,6 @@ parameter: configParameterInput })); return { node_id: this.nodes[this.selectedNode].attributes.node_id, parameter: configParameterInput }; - }, + } }); From 9a6b7b32110395e5582dd723156b0faa6e8c590d Mon Sep 17 00:00:00 2001 From: turbokongen Date: Thu, 20 Apr 2017 22:36:34 +0200 Subject: [PATCH 15/43] thank you @adgelbfish --- panels/zwave/ha-panel-zwave.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index b0f709663474..c646b3a28fe3 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -202,6 +202,7 @@ service-data=[[computeRefreshEntityServiceData(selectedEntity)]] >Refresh Entity
+ @@ -310,7 +311,6 @@ - From 4247b75c11154302f34fd9d3b57d1ad0ad3bc544 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Thu, 20 Apr 2017 23:36:15 +0200 Subject: [PATCH 16/43] Hide correctly --- panels/zwave/ha-panel-zwave.html | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index c646b3a28fe3..5889d53ccd2f 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -205,7 +205,7 @@ - + - + + + + From b71191b0bee8b1d2ba6a66f8d1f8f2e96cb45380 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Fri, 21 Apr 2017 08:10:09 +0200 Subject: [PATCH 17/43] Add Entity info --- panels/zwave/ha-panel-zwave.html | 42 +++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index 5889d53ccd2f..3e529004fc0b 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -202,6 +202,20 @@ service-data=[[computeRefreshEntityServiceData(selectedEntity)]] >Refresh Entity + @@ -342,6 +356,11 @@ computed: 'computeSelectedNodeAttrs(selectedNode)' }, + selectedEntityAttrs: { + type: Array, + computed: 'computeSelectedEntityAttrs(selectedEntity)' + }, + nodes: { type: Array, computed: 'computeNodes(hass)' @@ -356,6 +375,10 @@ type: Boolean, }, + entityInfoActive: { + type: Boolean, + }, + groups: { type: Array, value: [1, 2, 3, 4, 5, 6] // TODO Make API to get groups and members @@ -394,7 +417,8 @@ selectedEntity: { type: Number, value: -1, - observer: 'computeRefreshEntityServiceData' + observers: ['computeIsEntitySelected', + 'computeRefreshEntityServiceData'] }, wakeupInput: { @@ -479,6 +503,17 @@ return att.sort(); }, + computeSelectedEntityAttrs: function (selectedEntity) { + if (selectedEntity === -1) return 'No entity selected'; + var entityAttrs = this.entities[selectedEntity].attributes; + var att = []; + Object.entries(entityAttrs).forEach(([key, value]) => { + att.push(key + ': ' + value); + }); + console.log('Entity attributes: ', att); + return att.sort(); + }, + computeSelectCaption: function (stateObj) { return ' (Node ID: ' + stateObj.attributes.node_id + ') ' + window.hassUtil.computeStateName(stateObj) + ' (' + @@ -493,6 +528,11 @@ return (!this.nodes || this.selectedNode === -1); }, + computeIsEntitySelected: function (selectedEntity) { + console.log('Entity selected: ', (selectedEntity === -1), selectedEntity); + return (selectedEntity === -1); + }, + computeIsTargetNodeSelected: function (selectedTargetNode) { return (!this.nodes || selectedTargetNode === -1); }, From 7802c50ff1e9e1dc916e24411a85c2c12bd6f283 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Sun, 23 Apr 2017 14:15:30 +0200 Subject: [PATCH 18/43] Indents --- panels/zwave/ha-panel-zwave.html | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index 3e529004fc0b..92e0bf3f92b0 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -126,8 +126,8 @@ - + - - + + - + - + - -
+ + +
[[ozwLogs]]
+
+ +
+
+ @@ -519,6 +525,11 @@ newNodeNameInput: { type: String, }, + + ozwLogs: { + type: String, + value: '', + }, }, computeNodes: function (hass) { @@ -665,6 +676,14 @@ return false; }, + refreshLog: function () { + this.ozwLogs = 'Loading ozw log...'; + this.hass.callApi('GET', 'zwave/ozwlog') + .then(function (info) { + this.ozwLogs = info; + }.bind(this)); + }, + computeSelectCaption: function (stateObj) { return ' (Node ID: ' + stateObj.attributes.node_id + ') ' + window.hassUtil.computeStateName(stateObj) + ' (' + From b1d2b4028a8ebddd0f955035d86841ad959aef70 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Mon, 1 May 2017 09:33:52 +0200 Subject: [PATCH 24/43] missing style --- panels/zwave/ha-panel-zwave.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index 1d60876ae64d..bae4d1b3b06f 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -362,14 +362,14 @@ - +
[[ozwLogs]]
- +
From b04a209117d9458fea6d49dcaa1a8d0f5e2645f1 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Mon, 1 May 2017 09:52:10 +0200 Subject: [PATCH 25/43] Bug in other groupmembers --- panels/zwave/ha-panel-zwave.html | 45 ++++++++++++++++---------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index bae4d1b3b06f..e1418a2c47fa 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -435,7 +435,7 @@ otherGroupNodes: { type: Array, value: -1, - computed: 'computeSelectedNodeGroups(selectedNode)' + computed: 'computeOtherGroupNodes(selectedGroup)' }, instances: { @@ -609,7 +609,7 @@ configData.push({ key, value }); }); this.config = configData; - console.log(this.config); +// console.log(this.config); }.bind(this)); this.selectedConfigParameter = -1; this.selectedConfigParameterValue = -1; @@ -619,6 +619,7 @@ if (selectedGroup === -1) return -1; var associations = Object.values(this.groups[selectedGroup].value.associations); // console.log(associations); +// console.log(Object.values(this.groups[selectedGroup].value.associations)); if (0 in associations) return ['None']; return Object.values(this.groups[selectedGroup].value.associations); }, @@ -636,9 +637,9 @@ selectedConfigParameterChanged: function (selectedConfigParameter) { if (selectedConfigParameter === -1) return; - console.log('selectedConfigParameterChanged'); - console.log('parametervalue ', this.config[selectedConfigParameter].value.data_items, this.selectedConfigParameterValues); - console.log('parametertype ', this.config[selectedConfigParameter].value.type); +// console.log('selectedConfigParameterChanged'); +// console.log('parametervalue ', this.config[selectedConfigParameter].value.data_items, this.selectedConfigParameterValues); +// console.log('parametertype ', this.config[selectedConfigParameter].value.type); this.selectedConfigValue = -1; this.loadedConfigValue = -1; this.selectedConfigParameterValues = []; @@ -659,20 +660,20 @@ if (('List').includes(this.selectedConfigParameterType)) { this.selectedConfigParameterValues = this.config[selectedConfigParameter].value.data_items; } - console.log('selectedvalue', this.selectedConfigValue); - console.log('loadedvalue ', this.loadedConfigValue); - console.log(this.selectedConfigParameterValues); - console.log(this.selectedConfigParameterType); +// console.log('selectedvalue', this.selectedConfigValue); +// console.log('loadedvalue ', this.loadedConfigValue); +// console.log(this.selectedConfigParameterValues); +// console.log(this.selectedConfigParameterType); }, isConfigParameterSelected: function (selectedConfigParameter, type) { if (selectedConfigParameter === -1) return false; - console.log('isConfigParameterSelected'); - console.log('1', type, '=', this.config[selectedConfigParameter].value.type === type, this.selectedConfigParameterValues); +// console.log('isConfigParameterSelected'); +// console.log('1', type, '=', this.config[selectedConfigParameter].value.type === type, this.selectedConfigParameterValues); if (this.config[selectedConfigParameter].value.type === type) return true; - console.log('2', type, '=', type.includes(this.config[selectedConfigParameter].value.type), this.selectedConfigParameterValues); +// console.log('2', type, '=', type.includes(this.config[selectedConfigParameter].value.type), this.selectedConfigParameterValues); if (type.includes(this.config[selectedConfigParameter].value.type)) return true; - console.log('4 None', this.selectedConfigParameterValues); +// console.log('4 None', this.selectedConfigParameterValues); return false; }, @@ -699,8 +700,8 @@ }, computeSelectCaptionConfigParameter: function (stateObj) { - console.log('computecap: ', this.config); - console.log(stateObj.value.label); +// console.log('computecap: ', this.config); +// console.log(stateObj.value.label); return (stateObj.key + ': ' + stateObj.value.label); }, @@ -787,19 +788,19 @@ if (this.selectedNode === -1 || this.selectedConfigParameter === -1) return -1; var valueData = null; if (('Short Byte Int').includes(this.selectedConfigParameterType)) { - console.log('shortbyteint', this.selectedValue); +// console.log('shortbyteint', this.selectedValue); valueData = this.selectedConfigValue; } if (('Bool Button').includes(this.selectedConfigParameterType)) { - console.log('boolbutton', this.selectedConfigParameterValues[this.selectedConfigValue]); +// console.log('boolbutton', this.selectedConfigParameterValues[this.selectedConfigValue]); valueData = this.selectedConfigParameterValues[this.selectedConfigValue]; } if (this.selectedConfigParameterType === 'List') { - console.log('list', this.config[this.selectedConfigParameter].value.data_items[this.selectedConfigValue]); +// console.log('list', this.config[this.selectedConfigParameter].value.data_items[this.selectedConfigValue]); valueData = this.config[this.selectedConfigParameter].value.data_items[this.selectedConfigValue]; } - console.log('Set config', JSON.stringify({ node_id: this.nodes[this.selectedNode].attributes.node_id, - parameter: this.config[this.selectedConfigParameter].key, - value: valueData, - size: this.configParameterSizeInput })); +// console.log('Set config', JSON.stringify({ node_id: this.nodes[this.selectedNode].attributes.node_id, +// parameter: this.config[this.selectedConfigParameter].key, +// value: valueData, +// size: this.configParameterSizeInput })); return { node_id: this.nodes[this.selectedNode].attributes.node_id, parameter: this.config[this.selectedConfigParameter], value: valueData, From e02161f50b4aec218417e1daec5ba717be3089c1 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Tue, 2 May 2017 19:24:41 +0200 Subject: [PATCH 26/43] Fix set-configparameter --- panels/zwave/ha-panel-zwave.html | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index e1418a2c47fa..6ce0b9d8012f 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -356,7 +356,7 @@ hass='[[hass]]' domain='zwave' service='set_config_parameter' - service-data=[[computeSetConfigParameterServiceData(selectedConfigParameter)]] + service-data=[[computeSetConfigParameterServiceData(selectedConfigValue)]] >Set Config Parameter @@ -366,7 +366,7 @@
[[ozwLogs]]
- + Refresh
@@ -784,27 +784,29 @@ return { entity_id: this.entities[selectedEntity].entity_id }; }, - computeSetConfigParameterServiceData: function () { + computeSetConfigParameterServiceData: function (selectedConfigValue) { if (this.selectedNode === -1 || this.selectedConfigParameter === -1) return -1; +// console.log('computeSetConfigParameter'); var valueData = null; if (('Short Byte Int').includes(this.selectedConfigParameterType)) { -// console.log('shortbyteint', this.selectedValue); - valueData = this.selectedConfigValue; +// console.log('shortbyteint', selectedConfigValue); + valueData = selectedConfigValue; } if (('Bool Button').includes(this.selectedConfigParameterType)) { -// console.log('boolbutton', this.selectedConfigParameterValues[this.selectedConfigValue]); - valueData = this.selectedConfigParameterValues[this.selectedConfigValue]; +// console.log('boolbutton', this.selectedConfigParameterValues[selectedConfigValue]); + valueData = this.selectedConfigParameterValues[selectedConfigValue]; } if (this.selectedConfigParameterType === 'List') { -// console.log('list', this.config[this.selectedConfigParameter].value.data_items[this.selectedConfigValue]); - valueData = this.config[this.selectedConfigParameter].value.data_items[this.selectedConfigValue]; +// console.log('list', this.config[this.selectedConfigParameter].value.data_items[selectedConfigValue]); + valueData = selectedConfigValue; } // console.log('Set config', JSON.stringify({ node_id: this.nodes[this.selectedNode].attributes.node_id, // parameter: this.config[this.selectedConfigParameter].key, -// value: valueData, -// size: this.configParameterSizeInput })); +// value: valueData })); +// console.log({ node_id: this.nodes[this.selectedNode].attributes.node_id, +// parameter: this.config[this.selectedConfigParameter].key, +// value: valueData }); return { node_id: this.nodes[this.selectedNode].attributes.node_id, - parameter: this.config[this.selectedConfigParameter], - value: valueData, - size: this.configParameterSizeInput }; + parameter: this.config[this.selectedConfigParameter].key, + value: valueData }; }, }); From 1d0e54a9fe715b3c5477fa098f8573499622f9db Mon Sep 17 00:00:00 2001 From: turbokongen Date: Wed, 3 May 2017 20:31:03 +0200 Subject: [PATCH 27/43] Fix set-association --- panels/zwave/ha-panel-zwave.html | 186 ++++++++++++++----------------- 1 file changed, 81 insertions(+), 105 deletions(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index 6ce0b9d8012f..48e43fa63c41 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -218,7 +218,8 @@ - + + + + +
[[ozwLogs]]
- Refresh + Refresh
@@ -392,19 +379,24 @@ value: false, }, - selectedNodeAttrs: { + nodes: { type: Array, - computed: 'computeSelectedNodeAttrs(selectedNode)' + computed: 'computeNodes(hass)' }, - selectedEntityAttrs: { - type: Array, - computed: 'computeSelectedEntityAttrs(selectedEntity)' + selectedNode: { + type: Number, + value: -1, + observer: 'selectedNodeChanged' }, - nodes: { + selectedNodeAttrs: { type: Array, - computed: 'computeNodes(hass)' + computed: 'computeSelectedNodeAttrs(selectedNode)' + }, + + nodeInfoActive: { + type: Boolean, }, entities: { @@ -412,53 +404,48 @@ computed: 'computeEntities(selectedNode)', }, - nodeInfoActive: { + entityInfoActive: { type: Boolean, }, - entityInfoActive: { - type: Boolean, + selectedEntity: { + type: Number, + value: -1, + observers: ['computeIsEntitySelected', + 'computeRefreshEntityServiceData'] }, - groups: { + selectedEntityAttrs: { type: Array, - computed: 'computeSelectedNodeGroups(selectedNode)' + computed: 'computeSelectedEntityAttrs(selectedEntity)' }, - config: { + groups: { type: Array, - value: function () { - return []; - } }, - otherGroupNodes: { - type: Array, + selectedGroup: { + type: Number, value: -1, - computed: 'computeOtherGroupNodes(selectedGroup)' }, - instances: { + otherGroupNodes: { type: Array, - value: [0, 1, 2, 3, 4, 5, 6] // TODO Make API to get available instances - }, - - selectedNode: { - type: Number, value: -1, - observer: 'selectedNodeChanged' + computed: 'computeOtherGroupNodes(selectedGroup)' }, - selectedTargetNode: { - type: Number, - value: -1, - observer: 'computeAssocServiceData' + maxAssociations: { + type: String, + value: '', + computed: 'computeMaxAssociations(selectedGroup)' }, - selectedGroup: { - type: Number, - value: -1, - observer: 'computeAssocServiceData' + config: { + type: Array, + value: function () { + return []; + } }, selectedConfigParameter: { @@ -505,19 +492,6 @@ value: -1 }, - selectedInstance: { - type: Number, - value: 0, - observer: 'computeAssocServiceData' - }, - - selectedEntity: { - type: Number, - value: -1, - observers: ['computeIsEntitySelected', - 'computeRefreshEntityServiceData'] - }, - wakeupInput: { type: Number, }, @@ -589,16 +563,6 @@ return att.sort(); }, - computeSelectedNodeGroups: function (selectedNode) { - if (selectedNode === -1 || !this.nodes) return -1; - var groupData = []; - this.hass.callApi('GET', 'zwave/groups/' + this.nodes[selectedNode].attributes.node_id).then(function (groups) { - Object.entries(groups).forEach(([key, value]) => { - groupData.push({ key, value }); - }); - }); - return groupData; - }, selectedNodeChanged: function (selectedNode) { if (selectedNode === -1) return; @@ -611,17 +575,34 @@ this.config = configData; // console.log(this.config); }.bind(this)); + var groupData = []; + this.hass.callApi('GET', 'zwave/groups/' + this.nodes[selectedNode].attributes.node_id).then(function (groups) { + Object.entries(groups).forEach(([key, value]) => { + groupData.push({ key, value }); + }); + this.groups = groupData; + console.log(this.groups); + }.bind(this)); this.selectedConfigParameter = -1; this.selectedConfigParameterValue = -1; }, + computeMaxAssociations: function (selectedGroup) { + if (selectedGroup === -1) return -1; + var maxAssociations = this.groups[selectedGroup].value.max_associations; + console.log(maxAssociations); +// console.log(Object.values(this.groups[selectedGroup].value.associations)); + if (!maxAssociations) return ['None']; + return maxAssociations; + }, + computeOtherGroupNodes: function (selectedGroup) { if (selectedGroup === -1) return -1; var associations = Object.values(this.groups[selectedGroup].value.associations); -// console.log(associations); + console.log(associations); // console.log(Object.values(this.groups[selectedGroup].value.associations)); - if (0 in associations) return ['None']; - return Object.values(this.groups[selectedGroup].value.associations); + if (!associations.length) return ['None']; + return associations; }, computeSelectedEntityAttrs: function (selectedEntity) { @@ -720,10 +701,6 @@ return (selectedEntity === -1); }, - computeIsTargetNodeSelected: function (selectedTargetNode) { - return (!this.nodes || selectedTargetNode === -1); - }, - computeNodeServiceData: function (selectedNode) { return { node_id: this.nodes[selectedNode].attributes.node_id }; }, @@ -750,18 +727,17 @@ return name; }, - computeAssocServiceData: function (type) { - if (this.selectedTargetNode === -1 || this.selectedGroup === -1) return -1; -// console.log('Change association', JSON.stringify({ node_id: this.nodes[this.selectedNode].attributes.node_id, -// association: type, -// target_node_id: this.nodes[this.selectedTargetNode].attributes.node_id, -// group: this.groups[this.selectedGroup].key, -// instance: this.instances[this.selectedInstance] })); + computeAssocServiceData: function (selectedGroup, type) { + if (!this.groups === -1 || selectedGroup === -1 || this.selectedNode === -1) return -1; + console.log('type', type); + console.log('Change association', JSON.stringify({ node_id: this.nodes[this.selectedNode].attributes.node_id, + association: type, + target_node_id: this.nodes[this.selectedNode].attributes.node_id, + group: this.groups[selectedGroup].key })); return { node_id: this.nodes[this.selectedNode].attributes.node_id, association: type, - target_node_id: this.nodes[this.selectedTargetNode].attributes.node_id, - group: this.groups[this.selectedGroup], - instance: this.instances[this.selectedInstance] }; + target_node_id: this.nodes[this.selectedNode].attributes.node_id, + group: this.groups[selectedGroup] }; }, computeWakeupServiceData: function (wakeupInput) { From 8a358f5d28885690f0609a7578daa42eed387ce2 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Thu, 4 May 2017 09:00:31 +0200 Subject: [PATCH 28/43] Tweaks to associations --- panels/zwave/ha-panel-zwave.html | 38 ++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index 48e43fa63c41..273ad9e45928 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -240,6 +240,18 @@ +
+ [[configValueHelpText]] +
+ +
-
[[ozwLogs]]
+
+
[[ozwLogs]]
+
Refresh
+ @@ -481,6 +536,12 @@ value: -1 }, + configValueHelpText: { + type: String, + value: '', + computed: 'computeConfigValueHelp(selectedConfigParameter)' + }, + selectedConfigParameterType: { type: String, value: '' @@ -517,11 +578,38 @@ type: String, }, + userCodes: { + type: Array, + value: function () { + return []; + }, + }, + + userCodeMaxLen: { + type: Number, + value: 4 + }, + + hasNodeUserCodes: { + type: Boolean, + value: false + }, + + selectedUserCode: { + type: Number, + value: -1, + observer: 'selectedUserCodeChanged' + }, + + selectedUserCodeValue: { + type: Number, + value: -1 + }, + ozwLogs: { type: String, value: '', }, - }, computeNodes: function (hass) { @@ -585,6 +673,10 @@ selectedNodeChanged: function (selectedNode) { if (selectedNode === -1) return; // console.log('selectedNodeChanged', selectedNode); + this.selectedConfigParameter = -1; + this.selectedConfigParameterValue = -1; + this.selectedUserCode = -1; + this.selectedGroup = -1; var configData = []; this.hass.callApi('GET', 'zwave/config/' + this.nodes[selectedNode].attributes.node_id).then(function (configs) { Object.entries(configs).forEach(([key, value]) => { @@ -602,30 +694,41 @@ // console.log(this.groups); }.bind(this)); var userCodes = []; + this.hasNodeUserCodes = false; + this.notifyPath('hasNodeUserCodes'); this.hass.callApi('GET', 'zwave/usercodes/' + this.nodes[selectedNode].attributes.node_id).then(function (usercodes) { Object.entries(usercodes).forEach(([key, value]) => { userCodes.push({ key, value }); }); this.userCodes = userCodes; - console.log(this.userCodes); + this.hasNodeUserCodes = true; + this.notifyPath('hasNodeUserCodes'); +// console.log('fetched usercodes', this.userCodes); }.bind(this)); - this.selectedConfigParameter = -1; - this.selectedConfigParameterValue = -1; }, computeMaxAssociations: function (selectedGroup) { if (selectedGroup === -1) return -1; var maxAssociations = this.groups[selectedGroup].value.max_associations; - console.log(maxAssociations); +// console.log(maxAssociations); // console.log(Object.values(this.groups[selectedGroup].value.associations)); if (!maxAssociations) return ['None']; return maxAssociations; }, + computeConfigValueHelp: function (selectedConfigParameter) { + if (selectedConfigParameter === -1) return ''; + var helpText = this.config[selectedConfigParameter].value.help; +// console.log(helpText); +// console.log(Object.values(this.groups[selectedGroup].value.associations)); + if (!helpText) return ['No helptext available']; + return helpText; + }, + computeOtherGroupNodes: function (selectedGroup) { if (selectedGroup === -1) return -1; var associations = Object.values(this.groups[selectedGroup].value.associations); - console.log(associations); +// console.log(associations); // console.log(Object.values(this.groups[selectedGroup].value.associations)); if (!associations.length) return ['None']; return associations; @@ -647,6 +750,7 @@ // console.log('selectedConfigParameterChanged'); // console.log('parametervalue ', this.config[selectedConfigParameter].value.data_items, this.selectedConfigParameterValues); // console.log('parametertype ', this.config[selectedConfigParameter].value.type); +// console.log('parameterhelp ', this.config[selectedConfigParameter].value.help); this.selectedConfigValue = -1; this.loadedConfigValue = -1; this.selectedConfigParameterValues = []; @@ -654,6 +758,7 @@ this.configParameterMax = this.config[selectedConfigParameter].value.max; this.configParameterMin = this.config[selectedConfigParameter].value.min; this.loadedConfigValue = this.config[selectedConfigParameter].value.data; + this.configValueHelpText = this.config[selectedConfigParameter].value.help; if (('Short Byte Int').includes(this.selectedConfigParameterType)) { this.selectedConfigParameterNumValues = this.config[selectedConfigParameter].value.data_items; this.selectedConfigValue = this.loadedConfigValue; @@ -684,6 +789,22 @@ return false; }, + isUserCodeSelected: function (selectedUserCode) { + if (selectedUserCode === -1) return false; + return true; + }, + + selectedUserCodeChanged: function (selectedUserCode) { + if (selectedUserCode === -1) return; +// console.log('pre', this.userCodes[selectedUserCode].value.code); + var value = (parseInt((this.userCodes[selectedUserCode].value.code).trim())); + this.userCodeMaxLen = (this.userCodes[selectedUserCode].value.length); +// console.log('length ', this.userCodes[selectedUserCode].value.length); + if (isNaN(value)) this.selectedUserCodeValue = ''; + else this.selectedUserCodeValue = value; +// console.log('post', this.selectedUserCodeValue); + }, + refreshLog: function () { this.ozwLogs = 'Loading ozw log...'; this.hass.callApi('GET', 'zwave/ozwlog') @@ -712,6 +833,12 @@ return (stateObj.key + ': ' + stateObj.value.label); }, + computeSelectCaptionUserCodes: function (stateObj) { +// console.log('computecap: ', this.config); +// console.log(stateObj.value.label); + return (stateObj.key + ': ' + stateObj.value.label); + }, + computeIsNodeSelected: function () { // console.log('node', this.config); return (!this.nodes || this.selectedNode === -1); @@ -721,6 +848,10 @@ return (!this.nodes || selectedTargetNode === -1); }, + computeIsUserCodeSelected: function (selectedUserCode) { + return (!this.userCodes || selectedUserCode === -1); + }, + computeIsGroupSelected: function (selectedGroup) { // console.log(!selectedGroup === -1); return (!this.nodes || this.selectedNode === -1 || selectedGroup === -1); @@ -759,11 +890,11 @@ computeAssocServiceData: function (selectedGroup, type) { if (!this.groups === -1 || selectedGroup === -1 || this.selectedNode === -1) return -1; - console.log('type', type); - console.log('Change association', JSON.stringify({ node_id: this.nodes[this.selectedNode].attributes.node_id, - association: type, - target_node_id: this.nodes[this.selectedTargetNode].attributes.node_id, - group: this.groups[selectedGroup].key })); +// console.log('type', type); +// console.log('Change association', JSON.stringify({ node_id: this.nodes[this.selectedNode].attributes.node_id, +// association: type, +// target_node_id: this.nodes[this.selectedTargetNode].attributes.node_id, +// group: this.groups[selectedGroup].key })); return { node_id: this.nodes[this.selectedNode].attributes.node_id, association: type, target_node_id: this.nodes[this.selectedTargetNode].attributes.node_id, @@ -814,5 +945,26 @@ parameter: this.config[this.selectedConfigParameter].key, value: valueData }; }, + + computeUserCodeServiceData: function (selectedUserCodeValue, type) { + if (this.selectedNode === -1 || !selectedUserCodeValue) return -1; +// console.log('computeUserCodeServiceData'); + var serviceData = null; + var valueData = null; + if (type === 'Add') { +// console.log('add'); + valueData = selectedUserCodeValue; + serviceData = { node_id: this.nodes[this.selectedNode].attributes.node_id, + code_slot: this.selectedUserCode, + usercode: valueData }; + } + if (type === 'Delete') { +// console.log('delete'); + serviceData = { node_id: this.nodes[this.selectedNode].attributes.node_id, + code_slot: this.selectedUserCode }; + } +// console.log(serviceData); + return serviceData; + }, }); From 367ceceb16e572206f5e0a3039717182503a7752 Mon Sep 17 00:00:00 2001 From: turbokongen Date: Fri, 5 May 2017 21:17:56 +0200 Subject: [PATCH 30/43] Tweaks --- panels/zwave/ha-panel-zwave.html | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/panels/zwave/ha-panel-zwave.html b/panels/zwave/ha-panel-zwave.html index 9dff3a3ecfe6..67a87a2018a5 100644 --- a/panels/zwave/ha-panel-zwave.html +++ b/panels/zwave/ha-panel-zwave.html @@ -36,7 +36,7 @@ } paper-button[toggles][active] { - background: gray; + background: lightgray; } .card-actions.warning ha-call-service-button { @@ -210,7 +210,7 @@