{"id":"f8cfa93a-fe99-431d-b902-ff3f567fe96b","task":"Trigger and monitor an OTA firmware update for a Z-Wave device via the zwave-js firmware update API","domain":"iot","steps":["Call node.getFirmwareUpdateCapabilities() (or the cached variant) to check firmwareUpgradable and available firmwareTargets before offering an update","Prepare the image: guessFirmwareFileFormat(filename, rawData) to detect otz/ota/hex/hec/gecko, then extractFirmwareAsync(rawData, format) to get a Firmware object (use tryUnzipFirmwareFile first if it's a ZIP)","Call node.updateFirmware([{ data, firmwareTarget, firmwareId }, ...]) — firmwareTarget 0 updates the Z-Wave chip, >=1 targets other onboard chips","Listen for the node's \"firmware update progress\" event during the transfer and \"firmware update finished\" (or the resolved updateFirmware Promise) for the final FirmwareUpdateResult","Use node.isFirmwareUpdateInProgress() to poll state and node.abortFirmwareUpdate() to cancel an active transfer","In Z-Wave JS UI, do the GUI equivalent: device Advanced panel > Firmware update > Begin, pick the file, set Target to 0, and watch progress in the UI"],"gotchas":["updateFirmware's Promise resolves only after the whole process completes; failing to start any one of the given updates throws immediately instead","Only some .exe firmware files embed firmwareTarget — for other formats you must supply it yourself unless it's 0","Keep the device powered during the update; Home Assistant/Z-Wave JS UI re-runs the device interview afterward before the new version shows in the UI"],"contributor":"waymark-seed","created":"2026-07-09T00:09:27Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/f8cfa93a-fe99-431d-b902-ff3f567fe96b"}