From bbf5ee604a9b1df2d9f296d30deaadb69c42d036 Mon Sep 17 00:00:00 2001 From: Daniel Lando Date: Wed, 3 Apr 2024 13:46:54 +0200 Subject: [PATCH] feat: long range support zwave-js@12.5.0 (#3545) --- api/lib/ZwaveClient.ts | 62 +- package-lock.json | 891 ++------------------ package.json | 5 +- src/components/Confirm.vue | 96 ++- src/components/custom/NodePanel.vue | 28 +- src/components/custom/StatisticsArrows.vue | 2 +- src/components/nodes-table/ExpandedNode.vue | 34 +- src/components/nodes-table/index.vue | 24 +- src/components/nodes-table/nodes-table.js | 42 +- src/lib/items.js | 13 +- src/lib/utils.js | 24 +- src/modules/ManagedItems.js | 4 +- src/stores/base.js | 12 +- src/views/Settings.vue | 129 ++- src/views/SmartStart.vue | 245 ++++-- 15 files changed, 641 insertions(+), 970 deletions(-) diff --git a/api/lib/ZwaveClient.ts b/api/lib/ZwaveClient.ts index 728cb7a649f..261bd2ecee5 100644 --- a/api/lib/ZwaveClient.ts +++ b/api/lib/ZwaveClient.ts @@ -15,6 +15,7 @@ import { ValueMetadataString, ZWaveDataRate, ZWaveErrorCodes, + Protocols, } from '@zwave-js/core' import { isDocker } from '@zwave-js/shared' import { @@ -100,6 +101,7 @@ import { PartialZWaveOptions, InclusionUserCallbacks, InclusionState, + ProvisioningEntryStatus, } from 'zwave-js' import { getEnumMemberName, parseQRCodeString } from 'zwave-js/Utils' import { logsDir, nvmBackupsDir, storeDir } from '../config/app' @@ -555,6 +557,8 @@ export type ZUINode = { } defaultTransitionDuration?: string defaultVolume?: number + protocol?: Protocols + supportsLongRange?: boolean } export type NodeEvent = { @@ -573,6 +577,10 @@ export type ZwaveConfig = { S2_AccessControl: string S0_Legacy: string }> + securityKeysLongRange?: utils.DeepPartial<{ + S2_Authenticated: string + S2_AccessControl: string + }> serverEnabled?: boolean enableSoftReset?: boolean deviceConfigPriorityDir?: string @@ -2028,6 +2036,12 @@ class ZwaveClient extends TypedEventEmitter { throw new DriverNotReadyError() } + const zwaveNode = this.getNode(nodeId) + + if (zwaveNode.protocol === Protocols.ZWaveLongRange) { + return [] + } + const neighbors = await this._driver.controller.getNodeNeighbors(nodeId) this.logNode(nodeId, 'debug', `Neighbors: ${neighbors.join(', ')}`) @@ -2249,6 +2263,7 @@ class ZwaveClient extends TypedEventEmitter { } zwaveOptions.securityKeys = {} + zwaveOptions.securityKeysLongRange = {} // convert security keys to buffer for (const key in this.cfg.securityKeys) { @@ -2263,6 +2278,22 @@ class ZwaveClient extends TypedEventEmitter { } } + this.cfg.securityKeysLongRange = + this.cfg.securityKeysLongRange || {} + + // convert security keys to buffer + for (const key in this.cfg.securityKeysLongRange) { + if ( + availableKeys.includes(key) && + this.cfg.securityKeysLongRange[key].length === 32 + ) { + zwaveOptions.securityKeysLongRange[key] = Buffer.from( + this.cfg.securityKeysLongRange[key], + 'hex', + ) + } + } + try { // init driver here because if connect fails the driver is destroyed // this could throw so include in the try/catch @@ -4973,6 +5004,16 @@ class ZwaveClient extends TypedEventEmitter { throw Error('DSK is required') } + const isNew = !this.driver.controller.getProvisioningEntry(entry.dsk) + + // disable it so user can choose the protocol to use + if ( + isNew && + entry.supportedProtocols?.includes(Protocols.ZWaveLongRange) + ) { + entry.status = ProvisioningEntryStatus.Inactive + } + this.driver.controller.provisionSmartStartNode(entry) return entry @@ -5133,6 +5174,7 @@ class ZwaveClient extends TypedEventEmitter { node.ready = true if (node.isControllerNode) { + node.supportsLongRange = this.driver.controller.supportsLongRange this.updateControllerNodeProps(node).catch((error) => { this.logNode( zwaveNode, @@ -5182,7 +5224,11 @@ class ZwaveClient extends TypedEventEmitter { ) } - if (!zwaveNode.isControllerNode) { + // Long range nodes use a star topology, so they don't have return/priority routes + if ( + !zwaveNode.isControllerNode && + zwaveNode.protocol !== Protocols.ZWaveLongRange + ) { this.getPriorityRoute(zwaveNode.id).catch((error) => { this.logNode( zwaveNode, @@ -5947,6 +5993,7 @@ class ZwaveClient extends TypedEventEmitter { node.firmwareCapabilities = zwaveNode.getFirmwareUpdateCapabilitiesCached() + node.protocol = zwaveNode.protocol const storedNode = this.storeNodes[nodeId] if (storedNode) { @@ -6012,12 +6059,22 @@ class ZwaveClient extends TypedEventEmitter { } else { logger.info('RF region is not supported by controller') } + + // when RF region changes, check if long range is supported + if ( + this.driver.controller.supportsLongRange !== + node.supportsLongRange + ) { + node.supportsLongRange = + this.driver.controller.supportsLongRange + } } this.emitNodeUpdate(node, { powerlevel: node.powerlevel, measured0dBm: node.measured0dBm, RFRegion: node.RFRegion, + supportsLongRange: node.supportsLongRange, }) } @@ -6397,6 +6454,7 @@ class ZwaveClient extends TypedEventEmitter { | 'manufacturer' | 'productDescription' | 'productLabel' + | 'supportsLongRange' > > { const zuiNode = this.nodes.get(node.id) @@ -6433,6 +6491,8 @@ class ZwaveClient extends TypedEventEmitter { productLabel: zuiNode?.productLabel, deviceDatabaseUrl: node.deviceDatabaseUrl, keepAwake: node.keepAwake, + protocol: node.protocol, + supportsLongRange: zuiNode?.supportsLongRange, } } diff --git a/package-lock.json b/package-lock.json index 1d551ec0086..9901b200d36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@jamescoyle/vue-icon": "^0.1.2", "@kvaster/zwavejs-prom": "^0.0.2", "@mdi/js": "7.3.67", - "@zwave-js/server": "^1.33.0", + "@zwave-js/server": "^1.35.0-beta.1", "@zwave-js/winston-daily-rotate-file": "^4.5.6-1", "ansi_up": "^6.0.2", "archiver": "^6.0.1", @@ -58,7 +58,7 @@ "vuedraggable": "^2.24.3", "vuetify": "^2.7.1", "winston": "^3.11.0", - "zwave-js": "^12.4.4" + "zwave-js": "^12.5.0" }, "bin": { "zwave-js-ui": "server/bin/www.js" @@ -96,6 +96,7 @@ "conventional-changelog-cli": "^4.1.0", "docsify": "^4.13.1", "docsify-cli": "^4.4.4", + "esbuild": "^0.19.11", "esbuild-register": "^3.5.0", "eslint": "^8.51.0", "eslint-config-prettier": "^9.0.0", @@ -2101,265 +2102,10 @@ "node": ">=0.8.0" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.8.tgz", - "integrity": "sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz", - "integrity": "sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.8.tgz", - "integrity": "sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz", - "integrity": "sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz", - "integrity": "sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz", - "integrity": "sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz", - "integrity": "sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz", - "integrity": "sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz", - "integrity": "sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz", - "integrity": "sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz", - "integrity": "sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz", - "integrity": "sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz", - "integrity": "sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz", - "integrity": "sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz", - "integrity": "sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz", - "integrity": "sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", + "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", "cpu": [ "x64" ], @@ -2368,109 +2114,6 @@ "os": [ "linux" ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz", - "integrity": "sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz", - "integrity": "sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz", - "integrity": "sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz", - "integrity": "sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz", - "integrity": "sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz", - "integrity": "sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, "engines": { "node": ">=12" } @@ -4528,14 +4171,14 @@ } }, "node_modules/@zwave-js/cc": { - "version": "12.4.4", - "resolved": "https://registry.npmjs.org/@zwave-js/cc/-/cc-12.4.4.tgz", - "integrity": "sha512-En6AHPR518qih4VTsOd5BX7H0O8sXuIBQ2t1OC1bnKyY5bnsMrpQ1UixcvbHBQ6EoOuD1ahgV12EdzAwYCXmBg==", - "dependencies": { - "@zwave-js/core": "12.4.3", - "@zwave-js/host": "12.4.4", - "@zwave-js/serial": "12.4.4", - "@zwave-js/shared": "12.2.3", + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@zwave-js/cc/-/cc-12.5.0.tgz", + "integrity": "sha512-mUJBCJU/uC05AI0E/W4v4xudJVqpRZw6LCWsu0zlck0n5LVG2Pq6mKQgSAKqPtcFNsg9Lr05zA8oDPCSvowNYA==", + "dependencies": { + "@zwave-js/core": "12.5.0", + "@zwave-js/host": "12.5.0", + "@zwave-js/serial": "12.5.0", + "@zwave-js/shared": "12.5.0", "alcalzone-shared": "^4.0.8", "ansi-colors": "^4.1.3", "reflect-metadata": "^0.1.13" @@ -4548,12 +4191,12 @@ } }, "node_modules/@zwave-js/config": { - "version": "12.4.4", - "resolved": "https://registry.npmjs.org/@zwave-js/config/-/config-12.4.4.tgz", - "integrity": "sha512-Wwz6gTD26gL6eeMMMP5Wd1P/j1opf68b0TXcmEol7OcQKy07UZhVTp3jPCzO9IFhwJ5TbfYc58x5DNgh0TSdXw==", + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@zwave-js/config/-/config-12.5.0.tgz", + "integrity": "sha512-PTYkRRHxdGj3PYZ9Mjsb722Wo/+idLbNYugs2Ah2FzcfC6RVsLnuLCbR20R5gog9mTyqr8sVKI+skLDqgR1hGQ==", "dependencies": { - "@zwave-js/core": "12.4.3", - "@zwave-js/shared": "12.2.3", + "@zwave-js/core": "12.5.0", + "@zwave-js/shared": "12.5.0", "alcalzone-shared": "^4.0.8", "ansi-colors": "^4.1.3", "fs-extra": "^11.1.1", @@ -4570,12 +4213,12 @@ } }, "node_modules/@zwave-js/core": { - "version": "12.4.3", - "resolved": "https://registry.npmjs.org/@zwave-js/core/-/core-12.4.3.tgz", - "integrity": "sha512-LwnDEDbuNaXKE1VevyY7VV3GjCgIBrKdTQFXokFFkg8i0L7R/mHn9l6BfUkXKLkpTGVp6+iKSrTZvVAgQstKdw==", + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@zwave-js/core/-/core-12.5.0.tgz", + "integrity": "sha512-+7Ou0gA8ysds7nVOaqsN3PT4lJiY9q+WhV7nMybdrhWuAfYsdFyEfsjlZ319dvisOJ1d1xZ+yGGso4OQOohACw==", "dependencies": { "@alcalzone/jsonl-db": "^3.1.1", - "@zwave-js/shared": "12.2.3", + "@zwave-js/shared": "12.5.0", "alcalzone-shared": "^4.0.8", "ansi-colors": "^4.1.3", "dayjs": "^1.11.9", @@ -4603,13 +4246,13 @@ } }, "node_modules/@zwave-js/host": { - "version": "12.4.4", - "resolved": "https://registry.npmjs.org/@zwave-js/host/-/host-12.4.4.tgz", - "integrity": "sha512-o7zyBSNhwA7l61/X5ye/RuzNRtKYZRL3nDfYMeidSth61ra2ol5JTWn0JBNtnek/ypvK0nAqSqGpN9RhInSXCw==", + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@zwave-js/host/-/host-12.5.0.tgz", + "integrity": "sha512-W84LGHXYgfOZM/gYRVUH1RQpKVs9TCcQfTgoA5jx1eb9wcwzh60wN0Z7FRFGIfPk8Fi8kxdH6p6EquUHAGWYAQ==", "dependencies": { - "@zwave-js/config": "12.4.4", - "@zwave-js/core": "12.4.3", - "@zwave-js/shared": "12.2.3", + "@zwave-js/config": "12.5.0", + "@zwave-js/core": "12.5.0", + "@zwave-js/shared": "12.5.0", "alcalzone-shared": "^4.0.8" }, "engines": { @@ -4620,12 +4263,12 @@ } }, "node_modules/@zwave-js/nvmedit": { - "version": "12.4.4", - "resolved": "https://registry.npmjs.org/@zwave-js/nvmedit/-/nvmedit-12.4.4.tgz", - "integrity": "sha512-XILJH/rCVxXAjfI1WBsz05+ZFXTc5DKwRKDNpK2lITAfIRtB7LIsOx1DVJYC/3uSBFhZCr6vPCui5vELlX/GxQ==", + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@zwave-js/nvmedit/-/nvmedit-12.5.0.tgz", + "integrity": "sha512-b8qsbn20rpNPHuUtkD5tt9FmlCSFpGL2D87XuczppR9VjmldjeROMZifvq14zCX6wXOcT2NHo0YmSTx2cYlUIg==", "dependencies": { - "@zwave-js/core": "12.4.3", - "@zwave-js/shared": "12.2.3", + "@zwave-js/core": "12.5.0", + "@zwave-js/shared": "12.5.0", "alcalzone-shared": "^4.0.8", "fs-extra": "^11.1.1", "reflect-metadata": "^0.1.13", @@ -4719,14 +4362,14 @@ } }, "node_modules/@zwave-js/serial": { - "version": "12.4.4", - "resolved": "https://registry.npmjs.org/@zwave-js/serial/-/serial-12.4.4.tgz", - "integrity": "sha512-w3hlEQFdW/dF8+1Bzfm4tSms6Ou1T7eycr9zIxp+LuWcxWRNBVPD2QdGKgK2Jp9ymhBrOAAe6QwL74ocqLo9Kg==", + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@zwave-js/serial/-/serial-12.5.0.tgz", + "integrity": "sha512-isMMt2gvbTa6VIYJLGHi3vS1GZAITks9J1DCGnkSqGxeAYJM2RlSIKemvMPqr/asRLxAeSx7xN5iJftEUiyjBA==", "dependencies": { "@serialport/stream": "^12.0.0", - "@zwave-js/core": "12.4.3", - "@zwave-js/host": "12.4.4", - "@zwave-js/shared": "12.2.3", + "@zwave-js/core": "12.5.0", + "@zwave-js/host": "12.5.0", + "@zwave-js/shared": "12.5.0", "alcalzone-shared": "^4.0.8", "serialport": "^12.0.0", "winston": "^3.10.0" @@ -4739,9 +4382,9 @@ } }, "node_modules/@zwave-js/server": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/@zwave-js/server/-/server-1.33.0.tgz", - "integrity": "sha512-jHRpbeWcDVhTWidDTmln9x+lTveJ0H1cLJxl6dWIeWQ6YnB7YzRuHFDPhY+6ewAyUrc+Eq8tl+QnhjmVuevq+A==", + "version": "1.35.0-beta.1", + "resolved": "https://registry.npmjs.org/@zwave-js/server/-/server-1.35.0-beta.1.tgz", + "integrity": "sha512-XY0mrI6d3d+7lWIp8HPBsI14e++1qUK4Cr4RRxYBBLuqiftB6iK7jcMrRuL359jEBP5NnbpLhCQmmA2JmLoQew==", "dependencies": { "@homebridge/ciao": "^1.1.7", "minimist": "^1.2.8", @@ -4752,13 +4395,13 @@ "zwave-server": "dist/bin/server.js" }, "peerDependencies": { - "zwave-js": "^12.2.1" + "zwave-js": "^12.5.0-beta.1" } }, "node_modules/@zwave-js/shared": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@zwave-js/shared/-/shared-12.2.3.tgz", - "integrity": "sha512-UwUas5IZxaPywaTY8lQNBE/e5aEWddgHQGJ3yn6Se0O717SeboIlw+Xu3befPBANadCk7EFGiN2SX/DaQCyggQ==", + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@zwave-js/shared/-/shared-12.5.0.tgz", + "integrity": "sha512-OcqbzJsqUQtgDaHzUw/RKwIgfqraifDsEZITDn84w0zaMa0mjG8G7yF3M21Wl27qKFj3yU62w2IkcqCGvXZrwA==", "dependencies": { "alcalzone-shared": "^4.0.8", "fs-extra": "^11.1.1" @@ -4771,14 +4414,14 @@ } }, "node_modules/@zwave-js/testing": { - "version": "12.4.4", - "resolved": "https://registry.npmjs.org/@zwave-js/testing/-/testing-12.4.4.tgz", - "integrity": "sha512-GfmQWL5ydQXWADfR6WsUzIQTFXTC33MLne7aA+8rx0FQGDgO6UmBJI1XxUucsmecKrb8BtZnKULcvqUJ981D0w==", - "dependencies": { - "@zwave-js/core": "12.4.3", - "@zwave-js/host": "12.4.4", - "@zwave-js/serial": "12.4.4", - "@zwave-js/shared": "12.2.3", + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@zwave-js/testing/-/testing-12.5.0.tgz", + "integrity": "sha512-J+B1fijhJ5w0SOyZqoJc1O3xEWjMxQHdHhYMrlGFXQ7eUjo2DrswE+VT61SYkE1o9Y2BZjyefdu/ZSjFK8Mitw==", + "dependencies": { + "@zwave-js/core": "12.5.0", + "@zwave-js/host": "12.5.0", + "@zwave-js/serial": "12.5.0", + "@zwave-js/shared": "12.5.0", "alcalzone-shared": "^4.0.8", "ansi-colors": "^4.1.3" }, @@ -7922,12 +7565,11 @@ } }, "node_modules/esbuild": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.8.tgz", - "integrity": "sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", + "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", "dev": true, "hasInstallScript": true, - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -7935,28 +7577,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.19.8", - "@esbuild/android-arm64": "0.19.8", - "@esbuild/android-x64": "0.19.8", - "@esbuild/darwin-arm64": "0.19.8", - "@esbuild/darwin-x64": "0.19.8", - "@esbuild/freebsd-arm64": "0.19.8", - "@esbuild/freebsd-x64": "0.19.8", - "@esbuild/linux-arm": "0.19.8", - "@esbuild/linux-arm64": "0.19.8", - "@esbuild/linux-ia32": "0.19.8", - "@esbuild/linux-loong64": "0.19.8", - "@esbuild/linux-mips64el": "0.19.8", - "@esbuild/linux-ppc64": "0.19.8", - "@esbuild/linux-riscv64": "0.19.8", - "@esbuild/linux-s390x": "0.19.8", - "@esbuild/linux-x64": "0.19.8", - "@esbuild/netbsd-x64": "0.19.8", - "@esbuild/openbsd-x64": "0.19.8", - "@esbuild/sunos-x64": "0.19.8", - "@esbuild/win32-arm64": "0.19.8", - "@esbuild/win32-ia32": "0.19.8", - "@esbuild/win32-x64": "0.19.8" + "@esbuild/aix-ppc64": "0.19.11", + "@esbuild/android-arm": "0.19.11", + "@esbuild/android-arm64": "0.19.11", + "@esbuild/android-x64": "0.19.11", + "@esbuild/darwin-arm64": "0.19.11", + "@esbuild/darwin-x64": "0.19.11", + "@esbuild/freebsd-arm64": "0.19.11", + "@esbuild/freebsd-x64": "0.19.11", + "@esbuild/linux-arm": "0.19.11", + "@esbuild/linux-arm64": "0.19.11", + "@esbuild/linux-ia32": "0.19.11", + "@esbuild/linux-loong64": "0.19.11", + "@esbuild/linux-mips64el": "0.19.11", + "@esbuild/linux-ppc64": "0.19.11", + "@esbuild/linux-riscv64": "0.19.11", + "@esbuild/linux-s390x": "0.19.11", + "@esbuild/linux-x64": "0.19.11", + "@esbuild/netbsd-x64": "0.19.11", + "@esbuild/openbsd-x64": "0.19.11", + "@esbuild/sunos-x64": "0.19.11", + "@esbuild/win32-arm64": "0.19.11", + "@esbuild/win32-ia32": "0.19.11", + "@esbuild/win32-x64": "0.19.11" } }, "node_modules/esbuild-register": { @@ -9398,20 +9041,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -18449,246 +18078,6 @@ "workbox-window": "^7.0.0" } }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/vite/node_modules/@esbuild/linux-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", @@ -18705,102 +18094,6 @@ "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/vite/node_modules/esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", @@ -20045,20 +19338,20 @@ } }, "node_modules/zwave-js": { - "version": "12.4.4", - "resolved": "https://registry.npmjs.org/zwave-js/-/zwave-js-12.4.4.tgz", - "integrity": "sha512-lEyMJ7Kk4ZQ1PvZbqQndZ16tSQxOK2igJQlOKpmIiBUggmed+qZ/ngS/rdRDhaKazJss8rW4aHF2XGlIZ39WkQ==", + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/zwave-js/-/zwave-js-12.5.0.tgz", + "integrity": "sha512-ROPVb6oefRPucSj3GQzHS0Elxy1Xpp8M2oH1OMQxwtV5VFmI52PeouwXM2mAg2pLX3Und17eRhNukJYykBCfPw==", "dependencies": { "@alcalzone/jsonl-db": "^3.1.1", "@alcalzone/pak": "^0.10.1", - "@zwave-js/cc": "12.4.4", - "@zwave-js/config": "12.4.4", - "@zwave-js/core": "12.4.3", - "@zwave-js/host": "12.4.4", - "@zwave-js/nvmedit": "12.4.4", - "@zwave-js/serial": "12.4.4", - "@zwave-js/shared": "12.2.3", - "@zwave-js/testing": "12.4.4", + "@zwave-js/cc": "12.5.0", + "@zwave-js/config": "12.5.0", + "@zwave-js/core": "12.5.0", + "@zwave-js/host": "12.5.0", + "@zwave-js/nvmedit": "12.5.0", + "@zwave-js/serial": "12.5.0", + "@zwave-js/shared": "12.5.0", + "@zwave-js/testing": "12.5.0", "alcalzone-shared": "^4.0.8", "ansi-colors": "^4.1.3", "execa": "^5.1.1", diff --git a/package.json b/package.json index 16b47b76f75..b9c6fc36a04 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "@jamescoyle/vue-icon": "^0.1.2", "@kvaster/zwavejs-prom": "^0.0.2", "@mdi/js": "7.3.67", - "@zwave-js/server": "^1.33.0", + "@zwave-js/server": "^1.35.0-beta.1", "@zwave-js/winston-daily-rotate-file": "^4.5.6-1", "ansi_up": "^6.0.2", "archiver": "^6.0.1", @@ -109,7 +109,7 @@ "vuedraggable": "^2.24.3", "vuetify": "^2.7.1", "winston": "^3.11.0", - "zwave-js": "^12.4.4" + "zwave-js": "^12.5.0" }, "devDependencies": { "@actions/github": "^6.0.0", @@ -144,6 +144,7 @@ "conventional-changelog-cli": "^4.1.0", "docsify": "^4.13.1", "docsify-cli": "^4.4.4", + "esbuild": "^0.19.11", "esbuild-register": "^3.5.0", "eslint": "^8.51.0", "eslint-config-prettier": "^9.0.0", diff --git a/src/components/Confirm.vue b/src/components/Confirm.vue index 22e41a6b082..01fcc929b3d 100644 --- a/src/components/Confirm.vue +++ b/src/components/Confirm.vue @@ -33,7 +33,7 @@ > @@ -275,6 +275,64 @@ export default { } }, }, + inputs() { + const values = this.options.values || {} + const inputs = this.options.inputs || [] + + for (const input of inputs) { + const inited = !!this.inputProps[input.key] + const inputProp = this.inputProps[input.key] ?? { + show: false, + onChange: noop, + rules: [], + } + + this.inputProps = { + ...this.inputProps, + [input.key]: inputProp, + } + + // this must be re-evaluated every time `this.values` changes + if (typeof input.show === 'function') { + inputProp.show = input.show(this.values) + } else { + inputProp.show = true + } + + if (!inited) { + if (input.default !== undefined) { + // without this code block is bugged, don't simply assign + this.$set( + this.values, + input.key, + values[input.key] ?? input.default, + ) + } + + if (input.rules) { + inputProp.rules = input.rules.map((r) => + wrapFunc(r, this.values), + ) + } + + if ( + input.onChange && + typeof input.onChange === 'function' + ) { + inputProp.onChange = input.onChange.bind( + this, + this.values, + ) + } + } + } + + return ( + inputs?.filter( + (input) => !input.hidden && this.inputProps[input.key].show, + ) ?? [] + ) + }, }, methods: { noop, @@ -318,43 +376,9 @@ export default { this.dialog = true this.title = title this.message = message - - Object.assign(this.options, options) - - const values = options.values || {} this.inputProps = {} - if (options.inputs) { - for (const input of options.inputs) { - this.inputProps[input.key] = {} - if (input.default !== undefined) { - // without this code block is bugged, don't simply assign - this.$set( - this.values, - input.key, - values[input.key] ?? input.default, - ) - } - - if ( - input.onChange && - typeof input.onChange === 'function' - ) { - this.inputProps[input.key].onChange = - input.onChange.bind(this, this.values) - } else { - this.inputProps[input.key].onChange = noop - } - - if (input.rules) { - this.inputProps[input.key].rules = input.rules.map( - (r) => wrapFunc(r, this.values), - ) - } else { - this.inputProps[input.key].rules = [] - } - } - } + Object.assign(this.options, options) return new Promise((resolve, reject) => { this.resolve = resolve diff --git a/src/components/custom/NodePanel.vue b/src/components/custom/NodePanel.vue index c385d973741..698351c65ea 100644 --- a/src/components/custom/NodePanel.vue +++ b/src/components/custom/NodePanel.vue @@ -22,6 +22,12 @@ node.status }} + + Protocol + {{ + getProtocol(node) + }} + Code {{ @@ -52,7 +58,7 @@ node.loc }} - + Neighbors {{ @@ -104,7 +110,7 @@ --> -
+
Priority route route -
+
{{ s.title @@ -148,7 +154,7 @@

None

-
+
Return routes monitor_heart - + {{ - jsonToList(node.statistics) + node.statistics ? jsonToList(node.statistics) : '-----' }} diff --git a/src/components/nodes-table/ExpandedNode.vue b/src/components/nodes-table/ExpandedNode.vue index 368d3bf289c..49a3e635223 100644 --- a/src/components/nodes-table/ExpandedNode.vue +++ b/src/components/nodes-table/ExpandedNode.vue @@ -336,6 +336,7 @@ import { SetValueStatus, setValueWasUnsupervisedOrSucceeded, } from '@zwave-js/cc/safe' +import { Protocols } from '@zwave-js/core/safe' export default { props: { @@ -434,21 +435,6 @@ export default { icon: 'update', desc: 'Start/Stop a firmware update', }, - { - text: 'Rebuild Routes', - options: [ - { - name: 'Rebuild', - action: 'rebuildNodeRoutes', - args: { - confirm: - 'Rebuilding node routes causes a lot of traffic, can take minutes up to hours and you can expect degraded performance while it is going on', - }, - }, - ], - icon: 'healing', - desc: 'Discover and assign new routes from node to the controller and other nodes.', - }, { text: 'Refresh Values', options: [ @@ -485,6 +471,24 @@ export default { }, ] + if (this.node.protocol !== Protocols.ZWaveLongRange) { + nodeActions.splice(1, 0, { + text: 'Rebuild Routes', + options: [ + { + name: 'Rebuild', + action: 'rebuildNodeRoutes', + args: { + confirm: + 'Rebuilding node routes causes a lot of traffic, can take minutes up to hours and you can expect degraded performance while it is going on', + }, + }, + ], + icon: 'healing', + desc: 'Discover and assign new routes from node to the controller and other nodes.', + }) + } + const nodeAssociation = this.node.isControllerNode ? [] : [ diff --git a/src/components/nodes-table/index.vue b/src/components/nodes-table/index.vue index c90bdc87b28..826134d7354 100644 --- a/src/components/nodes-table/index.vue +++ b/src/components/nodes-table/index.vue @@ -199,6 +199,22 @@ />
+ + + @@ -168,15 +206,18 @@