From 5cb6691d9e9415c438c7895868f9b74cb3b9c13f Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 21 Feb 2022 13:37:50 +0100 Subject: [PATCH 1/4] Pending devices --- .../zwave/zwave-migration.ts | 39 ++++++++++++------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts b/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts index ee19b1aae674..f7e722f19965 100644 --- a/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts +++ b/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts @@ -5,9 +5,11 @@ import { UnsubscribeFunc } from "home-assistant-js-websocket"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators"; import { isComponentLoaded } from "../../../../../common/config/is_component_loaded"; +import { computeStateDomain } from "../../../../../common/entity/compute_state_domain"; import { computeStateName } from "../../../../../common/entity/compute_state_name"; import "../../../../../components/buttons/ha-call-api-button"; import "../../../../../components/buttons/ha-call-service-button"; +import "../../../../../components/ha-alert"; import "../../../../../components/ha-card"; import "../../../../../components/ha-circular-progress"; import "../../../../../components/ha-icon"; @@ -18,30 +20,28 @@ import { fetchDeviceRegistry, subscribeDeviceRegistry, } from "../../../../../data/device_registry"; -import { - migrateZwave, - ZWaveJsMigrationData, - fetchZwaveNetworkStatus as fetchZwaveJsNetworkStatus, - fetchZwaveNodeStatus, - getZwaveJsIdentifiersFromDevice, - subscribeZwaveNodeReady, -} from "../../../../../data/zwave_js"; import { fetchMigrationConfig, + fetchNetworkStatus, startZwaveJsConfigFlow, ZWaveMigrationConfig, ZWaveNetworkStatus, ZWAVE_NETWORK_STATE_STOPPED, - fetchNetworkStatus, } from "../../../../../data/zwave"; +import { + fetchZwaveNetworkStatus as fetchZwaveJsNetworkStatus, + fetchZwaveNodeStatus, + getZwaveJsIdentifiersFromDevice, + migrateZwave, + subscribeZwaveNodeReady, + ZWaveJsMigrationData, +} from "../../../../../data/zwave_js"; import { showConfigFlowDialog } from "../../../../../dialogs/config-flow/show-dialog-config-flow"; import { showAlertDialog } from "../../../../../dialogs/generic/show-dialog-box"; import "../../../../../layouts/hass-subpage"; import { haStyle } from "../../../../../resources/styles"; import type { HomeAssistant, Route } from "../../../../../types"; import "../../../ha-config-section"; -import { computeStateDomain } from "../../../../../common/entity/compute_state_domain"; -import "../../../../../components/ha-alert"; @customElement("zwave-migration") export class ZwaveMigration extends LitElement { @@ -445,10 +445,19 @@ export class ZwaveMigration extends LitElement { } ) ); - const deviceReg = await fetchDeviceRegistry(this.hass); - this._waitingOnDevices = deviceReg - .map((device) => getZwaveJsIdentifiersFromDevice(device)) - .filter(Boolean); + const deviceReg: DeviceRegistryEntry[] = await fetchDeviceRegistry( + this.hass + ); + this._waitingOnDevices = deviceReg.filter((device) => { + const identifiers = getZwaveJsIdentifiersFromDevice(device); + if ( + !identifiers || + Number(identifiers.home_id) !== networkStatus.controller.home_id + ) { + return false; + } + return nodesNotReady.some((node) => identifiers.node_id === node.node_id); + }); } private async _getMigrationData() { From f9ad28999caccbf104980e47d42b41eeb4912d05 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 21 Feb 2022 15:27:51 +0100 Subject: [PATCH 2/4] get device reg needs connection --- src/data/device_registry.ts | 10 +++++++--- .../integration-panels/zwave/zwave-migration.ts | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/data/device_registry.ts b/src/data/device_registry.ts index 64e29d3a207d..6fb72404aab0 100644 --- a/src/data/device_registry.ts +++ b/src/data/device_registry.ts @@ -1,4 +1,5 @@ import { Connection, createCollection } from "home-assistant-js-websocket"; +import { Store } from "home-assistant-js-websocket/dist/store"; import { computeStateName } from "../common/entity/compute_state_name"; import { caseInsensitiveStringCompare } from "../common/string/compare"; import { debounce } from "../common/util/debounce"; @@ -88,12 +89,15 @@ export const removeConfigEntryFromDevice = ( config_entry_id: configEntryId, }); -export const fetchDeviceRegistry = (conn) => - conn.sendMessagePromise({ +export const fetchDeviceRegistry = (conn: Connection) => + conn.sendMessagePromise({ type: "config/device_registry/list", }); -const subscribeDeviceRegistryUpdates = (conn, store) => +const subscribeDeviceRegistryUpdates = ( + conn: Connection, + store: Store +) => conn.subscribeEvents( debounce( () => diff --git a/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts b/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts index f7e722f19965..20226cc3f7b0 100644 --- a/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts +++ b/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts @@ -446,7 +446,7 @@ export class ZwaveMigration extends LitElement { ) ); const deviceReg: DeviceRegistryEntry[] = await fetchDeviceRegistry( - this.hass + this.hass.connection ); this._waitingOnDevices = deviceReg.filter((device) => { const identifiers = getZwaveJsIdentifiersFromDevice(device); From 208f65f99a59eb6039749be62f8cc48a73e90829 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 21 Feb 2022 15:29:02 +0100 Subject: [PATCH 3/4] sleeping state is also ok --- .../integrations/integration-panels/zwave/zwave-migration.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts b/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts index 20226cc3f7b0..a0d2312f4cb1 100644 --- a/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts +++ b/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts @@ -155,7 +155,7 @@ export class ZwaveMigration extends LitElement { .filter( (entityState) => computeStateDomain(entityState) === "zwave" && - entityState.state !== "ready" + !["ready", "sleeping"].includes(entityState.state) ) .map( (entityState) => From ed04680040857ed9c3458a55deb82b989bf2021f Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 21 Feb 2022 17:39:27 +0100 Subject: [PATCH 4/4] Add console statement --- .../integrations/integration-panels/zwave/zwave-migration.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts b/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts index a0d2312f4cb1..2272bd884e94 100644 --- a/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts +++ b/src/panels/config/integrations/integration-panels/zwave/zwave-migration.ts @@ -430,6 +430,10 @@ export class ZwaveMigration extends LitElement { const nodesNotReady = (await Promise.all(nodeStatePromisses)).filter( (node) => !node.ready ); + + // eslint-disable-next-line no-console + console.log("waiting for nodes to be ready", nodesNotReady); + this._getMigrationData(); if (nodesNotReady.length === 0) { this._waitingOnDevices = [];