From fd518dcdcf20199b747ec312e33f57a3b435ffbc Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Fri, 4 Feb 2022 21:09:21 -0500 Subject: [PATCH 1/9] Make zwave_js config panel inclusion state aware --- src/data/zwave_js.ts | 40 ++++++- .../zwave_js/zwave_js-config-dashboard.ts | 106 +++++++++++++----- src/translations/en.json | 6 +- 3 files changed, 122 insertions(+), 30 deletions(-) diff --git a/src/data/zwave_js.ts b/src/data/zwave_js.ts index 4940cd2d92a8..2f01642853c2 100644 --- a/src/data/zwave_js.ts +++ b/src/data/zwave_js.ts @@ -2,6 +2,19 @@ import { UnsubscribeFunc } from "home-assistant-js-websocket"; import { HomeAssistant } from "../types"; import { DeviceRegistryEntry } from "./device_registry"; +export enum InclusionState { + /** The controller isn't doing anything regarding inclusion. */ + Idle, + /** The controller is waiting for a node to be included. */ + Including, + /** The controller is waiting for a node to be excluded. */ + Excluding, + /** The controller is busy including or excluding a node. */ + Busy, + /** The controller listening for SmartStart nodes to announce themselves. */ + SmartStart, +} + export const enum InclusionStrategy { /** * Always uses Security S2 if supported, otherwise uses Security S0 for certain devices which don't work without encryption and uses no encryption otherwise. @@ -113,9 +126,26 @@ export interface ZWaveJSClient { } export interface ZWaveJSController { - home_id: string; - nodes: number[]; + home_id: number; + library_version: string; + type: number; + own_node_id: number; + is_secondary: boolean; + is_using_home_id_from_other_network: boolean; + is_sis_present: boolean; + was_real_primary: boolean; + is_static_update_controller: boolean; + is_slave: boolean; + serial_api_version: string; + manufacturer_id: number; + product_id: number; + product_type: number; + supported_function_types: number[]; + suc_node_id: number; + supports_timers: boolean; is_heal_network_active: boolean; + inclusion_state: InclusionState; + nodes: number[]; } export interface ZWaveJSNodeStatus { @@ -308,6 +338,12 @@ export const stopZwaveInclusion = (hass: HomeAssistant, entry_id: string) => entry_id, }); +export const stopZwaveExclusion = (hass: HomeAssistant, entry_id: string) => + hass.callWS({ + type: "zwave_js/stop_exclusion", + entry_id, + }); + export const zwaveGrantSecurityClasses = ( hass: HomeAssistant, entry_id: string, diff --git a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts index 82ef64d6b354..0b2c82506f40 100644 --- a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts +++ b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts @@ -19,7 +19,10 @@ import { fetchZwaveNetworkStatus, fetchZwaveNodeStatus, fetchZwaveProvisioningEntries, + InclusionState, setZwaveDataCollectionPreference, + stopZwaveExclusion, + stopZwaveInclusion, ZWaveJSNetwork, ZWaveJSNodeStatus, ZwaveJSProvisioningEntry, @@ -107,13 +110,48 @@ class ZWaveJSConfigDashboard extends LitElement { "ui.panel.config.zwave_js.dashboard.introduction" )} + ${this._network && + this._status === "connected" && + (this._network?.controller.inclusion_state === + InclusionState.Including || + this._network?.controller.inclusion_state === + InclusionState.Excluding) + ? html` + + ${this._network?.controller.inclusion_state === + InclusionState.Including + ? this.hass.localize( + "ui.panel.config.zwave_js.common.inclusion_in_progress" + ) + : this.hass.localize( + "ui.panel.config.zwave_js.common.exclusion_in_progress" + )} + + + + ` + : ""} ${this._network ? html`
- ${this._status === "connecting" + ${this._status === "disconnected" ? html`` @@ -127,7 +165,7 @@ class ZWaveJSConfigDashboard extends LitElement { > `}
- ${this._status !== "connecting" + ${this._status !== "disconnected" ? html`
${this.hass.localize( @@ -205,26 +243,26 @@ class ZWaveJSConfigDashboard extends LitElement { ${this._network.client.ws_server_url}
- - ${this.hass.localize( - "ui.panel.config.zwave_js.common.remove_node" - )} - + ${this._status === "connected" && + this._network?.controller.inclusion_state === + InclusionState.Idle + ? html` + + ${this.hass.localize( + "ui.panel.config.zwave_js.common.remove_node" + )} + + ` + : ""} ${this.hass.localize( "ui.panel.config.zwave_js.common.heal_network" )} - + ${this.hass.localize( "ui.panel.config.zwave_js.common.reconfigure_server" )} @@ -267,18 +305,22 @@ class ZWaveJSConfigDashboard extends LitElement { ` : ``} - - - + ${this._status === "connected" && + this._network?.controller.inclusion_state === InclusionState.Idle + ? html` + + + + ` + : ""} `; } @@ -412,6 +454,16 @@ class ZWaveJSConfigDashboard extends LitElement { }); } + private async _cancelInclusion() { + stopZwaveInclusion(this.hass!, this.configEntryId!); + await this._fetchData(); + } + + private async _cancelExclusion() { + stopZwaveExclusion(this.hass!, this.configEntryId!); + await this._fetchData(); + } + private _dataCollectionToggled(ev) { setZwaveDataCollectionPreference( this.hass!, diff --git a/src/translations/en.json b/src/translations/en.json index ba969edb2a5e..915df5992936 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -2923,7 +2923,11 @@ "add_node": "Add device", "remove_node": "Remove device", "reconfigure_server": "Re-configure Server", - "heal_network": "Heal Network" + "heal_network": "Heal Network", + "cancel_inclusion": "Cancel Inclusion", + "inclusion_in_progress": "Inclusion in progress", + "cancel_exclusion": "Cancel Exclusion", + "exclusion_in_progress": "Exclusion in progress" }, "dashboard": { "header": "Manage your Z-Wave Network", From 9968ccc0b2b8d1d8d8e00ecd07cdc02ab0a3b803 Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Mon, 14 Feb 2022 17:32:17 -0500 Subject: [PATCH 2/9] Update src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts Co-authored-by: Bram Kragten --- .../zwave_js/zwave_js-config-dashboard.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts index 0b2c82506f40..19b4af4a6a39 100644 --- a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts +++ b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts @@ -118,13 +118,10 @@ class ZWaveJSConfigDashboard extends LitElement { InclusionState.Excluding) ? html` - ${this._network?.controller.inclusion_state === + ${this.hass.localize( + `ui.panel.config.zwave_js.common.${this._network.controller.inclusion_state === InclusionState.Including - ? this.hass.localize( - "ui.panel.config.zwave_js.common.inclusion_in_progress" - ) - : this.hass.localize( - "ui.panel.config.zwave_js.common.exclusion_in_progress" + ? "inclusion" : "exclusion"}_in_progress` )} Date: Mon, 14 Feb 2022 17:32:27 -0500 Subject: [PATCH 3/9] Update src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts Co-authored-by: Bram Kragten --- .../zwave_js/zwave_js-config-dashboard.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts index 19b4af4a6a39..bc6335779f5f 100644 --- a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts +++ b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts @@ -125,13 +125,10 @@ class ZWaveJSConfigDashboard extends LitElement { )} Date: Mon, 14 Feb 2022 17:38:19 -0500 Subject: [PATCH 4/9] Fix type for _status --- .../integration-panels/zwave_js/zwave_js-config-dashboard.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts index bc6335779f5f..b4da088e8870 100644 --- a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts +++ b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts @@ -63,7 +63,7 @@ class ZWaveJSConfigDashboard extends LitElement { @state() private _provisioningEntries?: ZwaveJSProvisioningEntry[]; - @state() private _status = "unknown"; + @state() private _status = "connected" || "disconnected"; @state() private _icon = mdiCircle; From 57f25797638b4a2c7bab534a9e10663fbaa2495c Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Tue, 15 Feb 2022 23:21:06 -0500 Subject: [PATCH 5/9] Disable remove devices button instead of hiding --- .../zwave_js/zwave_js-config-dashboard.ts | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts index b4da088e8870..a802102c0ec8 100644 --- a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts +++ b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts @@ -119,17 +119,23 @@ class ZWaveJSConfigDashboard extends LitElement { ? html` ${this.hass.localize( - `ui.panel.config.zwave_js.common.${this._network.controller.inclusion_state === - InclusionState.Including - ? "inclusion" : "exclusion"}_in_progress` - )} + `ui.panel.config.zwave_js.common.${ + this._network.controller.inclusion_state === + InclusionState.Including + ? "inclusion" + : "exclusion" + }_in_progress` + )}
- ${this._status === "connected" && - this._network?.controller.inclusion_state === - InclusionState.Idle - ? html` - - ${this.hass.localize( - "ui.panel.config.zwave_js.common.remove_node" - )} - - ` - : ""} + + ${this.hass.localize( + "ui.panel.config.zwave_js.common.remove_node" + )} + Date: Tue, 15 Feb 2022 23:22:35 -0500 Subject: [PATCH 6/9] Disable add device button instead of hiding --- .../zwave_js/zwave_js-config-dashboard.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts index a802102c0ec8..6cb75948fa54 100644 --- a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts +++ b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts @@ -304,6 +304,19 @@ class ZWaveJSConfigDashboard extends LitElement { ` : ``} + + + ${this._status === "connected" && this._network?.controller.inclusion_state === InclusionState.Idle ? html` From b057605992371b5e55bd9e86fb863a704c2da741 Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Tue, 15 Feb 2022 23:24:01 -0500 Subject: [PATCH 7/9] remove dupe logic --- .../zwave_js/zwave_js-config-dashboard.ts | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts index 6cb75948fa54..0fe31ff1bada 100644 --- a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts +++ b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts @@ -317,22 +317,6 @@ class ZWaveJSConfigDashboard extends LitElement { > - ${this._status === "connected" && - this._network?.controller.inclusion_state === InclusionState.Idle - ? html` - - - - ` - : ""} `; } From 4d33f16686dc95d72c96ce338426702a0046d891 Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Tue, 15 Feb 2022 23:25:37 -0500 Subject: [PATCH 8/9] fix typign --- src/data/zwave_js.ts | 2 +- .../integration-panels/zwave_js/zwave_js-config-dashboard.ts | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/data/zwave_js.ts b/src/data/zwave_js.ts index 2f01642853c2..8a96aaad40a0 100644 --- a/src/data/zwave_js.ts +++ b/src/data/zwave_js.ts @@ -119,7 +119,7 @@ export interface ZWaveJSNetwork { } export interface ZWaveJSClient { - state: string; + state: "connected" | "disconnected"; ws_server_url: string; server_version: string; driver_version: string; diff --git a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts index 0fe31ff1bada..d3ea2babbff7 100644 --- a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts +++ b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts @@ -23,6 +23,7 @@ import { setZwaveDataCollectionPreference, stopZwaveExclusion, stopZwaveInclusion, + ZWaveJSClient, ZWaveJSNetwork, ZWaveJSNodeStatus, ZwaveJSProvisioningEntry, @@ -63,7 +64,7 @@ class ZWaveJSConfigDashboard extends LitElement { @state() private _provisioningEntries?: ZwaveJSProvisioningEntry[]; - @state() private _status = "connected" || "disconnected"; + @state() private _status?: ZWaveJSClient["state"]; @state() private _icon = mdiCircle; @@ -159,7 +160,7 @@ class ZWaveJSConfigDashboard extends LitElement { From c8ea9c0ba344caa76169f629a4c7e5186177e8ca Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Wed, 16 Feb 2022 20:18:01 -0500 Subject: [PATCH 9/9] Update strings per discussion --- .../zwave_js/zwave_js-config-dashboard.ts | 14 ++------------ src/translations/en.json | 6 ++---- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts index d3ea2babbff7..1b1521f32f9e 100644 --- a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts +++ b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts @@ -120,22 +120,12 @@ class ZWaveJSConfigDashboard extends LitElement { ? html` ${this.hass.localize( - `ui.panel.config.zwave_js.common.${ - this._network.controller.inclusion_state === - InclusionState.Including - ? "inclusion" - : "exclusion" - }_in_progress` + `ui.panel.config.zwave_js.common.in_progress_inclusion_exclusion` )}