diff --git a/src/data/zwave_js.ts b/src/data/zwave_js.ts index 6f397b87fc..a99244541d 100644 --- a/src/data/zwave_js.ts +++ b/src/data/zwave_js.ts @@ -674,6 +674,15 @@ export const fetchZwaveNodeIsFirmwareUpdateInProgress = ( device_id, }); +export const fetchZwaveIsAnyFirmwareUpdateInProgress = ( + hass: HomeAssistant, + entry_id: string +): Promise => + hass.callWS({ + type: "zwave_js/get_any_firmware_update_progress", + entry_id, + }); + export const fetchZwaveNodeFirmwareUpdateCapabilities = ( hass: HomeAssistant, device_id: string diff --git a/src/panels/config/devices/device-detail/integration-elements/zwave_js/device-actions.ts b/src/panels/config/devices/device-detail/integration-elements/zwave_js/device-actions.ts index 6ee8c30dc5..d0843bc2ac 100644 --- a/src/panels/config/devices/device-detail/integration-elements/zwave_js/device-actions.ts +++ b/src/panels/config/devices/device-detail/integration-elements/zwave_js/device-actions.ts @@ -1,7 +1,9 @@ import { getConfigEntries } from "../../../../../../data/config_entries"; import { DeviceRegistryEntry } from "../../../../../../data/device_registry"; import { + fetchZwaveIsAnyFirmwareUpdateInProgress, fetchZwaveNodeFirmwareUpdateCapabilities, + fetchZwaveNodeIsFirmwareUpdateInProgress, fetchZwaveNodeStatus, } from "../../../../../../data/zwave_js"; import { showConfirmationDialog } from "../../../../../../dialogs/generic/show-dialog-box"; @@ -85,10 +87,20 @@ export const getZwaveDeviceActions = async ( return actions; } - const firmwareUpdateCapabilities = - await fetchZwaveNodeFirmwareUpdateCapabilities(hass, device.id); + const [ + firmwareUpdateCapabilities, + isAnyFirmwareUpdateInProgress, + isNodeFirmwareUpdateInProgress, + ] = await Promise.all([ + fetchZwaveNodeFirmwareUpdateCapabilities(hass, device.id), + fetchZwaveIsAnyFirmwareUpdateInProgress(hass, entryId), + fetchZwaveNodeIsFirmwareUpdateInProgress(hass, device.id), + ]); - if (firmwareUpdateCapabilities.firmware_upgradable) { + if ( + firmwareUpdateCapabilities.firmware_upgradable && + (!isAnyFirmwareUpdateInProgress || isNodeFirmwareUpdateInProgress) + ) { actions.push({ label: hass.localize( "ui.panel.config.zwave_js.device_info.update_firmware"