Don't check zwave_js node firmware update capabilities (#13066)

This commit is contained in:
Raman Gupta 2022-07-03 16:45:19 -04:00 committed by GitHub
parent e8da573ba2
commit 77977f64a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 55 deletions

View File

@ -2,7 +2,6 @@ import { getConfigEntries } from "../../../../../../data/config_entries";
import { DeviceRegistryEntry } from "../../../../../../data/device_registry"; import { DeviceRegistryEntry } from "../../../../../../data/device_registry";
import { import {
fetchZwaveIsAnyFirmwareUpdateInProgress, fetchZwaveIsAnyFirmwareUpdateInProgress,
fetchZwaveNodeFirmwareUpdateCapabilities,
fetchZwaveNodeIsFirmwareUpdateInProgress, fetchZwaveNodeIsFirmwareUpdateInProgress,
fetchZwaveNodeStatus, fetchZwaveNodeStatus,
} from "../../../../../../data/zwave_js"; } from "../../../../../../data/zwave_js";
@ -87,20 +86,13 @@ export const getZwaveDeviceActions = async (
return actions; return actions;
} }
const [ const [isAnyFirmwareUpdateInProgress, isNodeFirmwareUpdateInProgress] =
firmwareUpdateCapabilities, await Promise.all([
isAnyFirmwareUpdateInProgress, fetchZwaveIsAnyFirmwareUpdateInProgress(hass, entryId),
isNodeFirmwareUpdateInProgress, fetchZwaveNodeIsFirmwareUpdateInProgress(hass, device.id),
] = await Promise.all([ ]);
fetchZwaveNodeFirmwareUpdateCapabilities(hass, device.id),
fetchZwaveIsAnyFirmwareUpdateInProgress(hass, entryId),
fetchZwaveNodeIsFirmwareUpdateInProgress(hass, device.id),
]);
if ( if (!isAnyFirmwareUpdateInProgress || isNodeFirmwareUpdateInProgress) {
firmwareUpdateCapabilities.firmware_upgradable &&
(!isAnyFirmwareUpdateInProgress || isNodeFirmwareUpdateInProgress)
) {
actions.push({ actions.push({
label: hass.localize( label: hass.localize(
"ui.panel.config.zwave_js.device_info.update_firmware" "ui.panel.config.zwave_js.device_info.update_firmware"
@ -117,7 +109,6 @@ export const getZwaveDeviceActions = async (
) { ) {
showZWaveJUpdateFirmwareNodeDialog(el, { showZWaveJUpdateFirmwareNodeDialog(el, {
device, device,
firmwareUpdateCapabilities,
}); });
} }
}, },

View File

@ -6,7 +6,6 @@ import "@material/mwc-linear-progress/mwc-linear-progress";
import { mdiCheckCircle, mdiCloseCircle, mdiFileUpload } from "@mdi/js"; import { mdiCheckCircle, mdiCloseCircle, mdiFileUpload } from "@mdi/js";
import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import memoizeOne from "memoize-one";
import { UnsubscribeFunc } from "home-assistant-js-websocket"; import { UnsubscribeFunc } from "home-assistant-js-websocket";
import { fireEvent } from "../../../../../common/dom/fire_event"; import { fireEvent } from "../../../../../common/dom/fire_event";
import { createCloseHeading } from "../../../../../components/ha-dialog"; import { createCloseHeading } from "../../../../../components/ha-dialog";
@ -26,7 +25,6 @@ import {
ZWaveJSNodeFirmwareUpdateFinishedMessage, ZWaveJSNodeFirmwareUpdateFinishedMessage,
ZWaveJSNodeFirmwareUpdateProgressMessage, ZWaveJSNodeFirmwareUpdateProgressMessage,
ZWaveJSNodeStatusUpdatedMessage, ZWaveJSNodeStatusUpdatedMessage,
ZWaveJSNodeFirmwareUpdateCapabilities,
ZWaveJSNodeStatus, ZWaveJSNodeStatus,
} from "../../../../../data/zwave_js"; } from "../../../../../data/zwave_js";
import { haStyleDialog } from "../../../../../resources/styles"; import { haStyleDialog } from "../../../../../resources/styles";
@ -66,12 +64,9 @@ class DialogZWaveJSUpdateFirmwareNode extends LitElement {
private _deviceName?: string; private _deviceName?: string;
private _firmwareUpdateCapabilities?: ZWaveJSNodeFirmwareUpdateCapabilities;
public showDialog(params: ZWaveJSUpdateFirmwareNodeDialogParams): void { public showDialog(params: ZWaveJSUpdateFirmwareNodeDialogParams): void {
this._deviceName = computeDeviceName(params.device, this.hass!); this._deviceName = computeDeviceName(params.device, this.hass!);
this.device = params.device; this.device = params.device;
this._firmwareUpdateCapabilities = params.firmwareUpdateCapabilities;
this._fetchData(); this._fetchData();
this._subscribeNodeStatus(); this._subscribeNodeStatus();
} }
@ -84,7 +79,6 @@ class DialogZWaveJSUpdateFirmwareNode extends LitElement {
this._updateFinishedMessage = this._updateFinishedMessage =
this._firmwareFile = this._firmwareFile =
this._nodeStatus = this._nodeStatus =
this._firmwareUpdateCapabilities =
undefined; undefined;
this._firmwareTarget = 0; this._firmwareTarget = 0;
this._uploading = this._updateInProgress = false; this._uploading = this._updateInProgress = false;
@ -92,34 +86,21 @@ class DialogZWaveJSUpdateFirmwareNode extends LitElement {
fireEvent(this, "dialog-closed", { dialog: this.localName }); fireEvent(this, "dialog-closed", { dialog: this.localName });
} }
private _schema = memoizeOne(
(
firmwareUpdateCapabilities: ZWaveJSNodeFirmwareUpdateCapabilities
): HaFormIntegerSchema => {
if (!firmwareUpdateCapabilities.firmware_upgradable) {
// We should never get here, this is to pass type checks
throw new Error();
}
return {
name: "firmware_target",
type: "integer",
valueMin: Math.min(...firmwareUpdateCapabilities.firmware_targets),
valueMax: Math.max(...firmwareUpdateCapabilities.firmware_targets),
};
}
);
protected render(): TemplateResult { protected render(): TemplateResult {
if ( if (
!this.device || !this.device ||
!this._nodeStatus || !this._nodeStatus ||
!this._firmwareUpdateCapabilities ||
!this._firmwareUpdateCapabilities.firmware_upgradable ||
this._updateInProgress === undefined this._updateInProgress === undefined
) { ) {
return html``; return html``;
} }
const schema: HaFormIntegerSchema = {
name: "firmware_target",
type: "integer",
valueMin: 0,
};
const beginFirmwareUpdateHTML = html`<ha-file-upload const beginFirmwareUpdateHTML = html`<ha-file-upload
.hass=${this.hass} .hass=${this.hass}
.uploading=${this._uploading} .uploading=${this._uploading}
@ -130,19 +111,17 @@ class DialogZWaveJSUpdateFirmwareNode extends LitElement {
)} )}
@file-picked=${this._uploadFile} @file-picked=${this._uploadFile}
></ha-file-upload> ></ha-file-upload>
${this._firmwareUpdateCapabilities.firmware_targets.length > 1 <p>
? html`<p> ${this.hass.localize(
${this.hass.localize( "ui.panel.config.zwave_js.update_firmware.firmware_target_intro"
"ui.panel.config.zwave_js.update_firmware.firmware_target_intro" )}
)} </p>
</p> <ha-form
<ha-form .hass=${this.hass}
.hass=${this.hass} .data=${{ firmware_target: this._firmwareTarget }}
.data=${{ firmware_target: this._firmwareTarget }} .schema=${[schema]}
.schema=${[this._schema(this._firmwareUpdateCapabilities)]} @value-changed=${this._firmwareTargetChanged}
@value-changed=${this._firmwareTargetChanged} ></ha-form>
></ha-form>`
: ""}
<mwc-button <mwc-button
slot="primaryAction" slot="primaryAction"
@click=${this._beginFirmwareUpdate} @click=${this._beginFirmwareUpdate}

View File

@ -1,10 +1,8 @@
import { fireEvent } from "../../../../../common/dom/fire_event"; import { fireEvent } from "../../../../../common/dom/fire_event";
import { DeviceRegistryEntry } from "../../../../../data/device_registry"; import { DeviceRegistryEntry } from "../../../../../data/device_registry";
import { ZWaveJSNodeFirmwareUpdateCapabilities } from "../../../../../data/zwave_js";
export interface ZWaveJSUpdateFirmwareNodeDialogParams { export interface ZWaveJSUpdateFirmwareNodeDialogParams {
device: DeviceRegistryEntry; device: DeviceRegistryEntry;
firmwareUpdateCapabilities: ZWaveJSNodeFirmwareUpdateCapabilities;
} }
export const loadUpdateFirmwareNodeDialog = () => export const loadUpdateFirmwareNodeDialog = () =>