diff --git a/lib/extension/homeassistant.js b/lib/extension/homeassistant.js index 956c405f7..e6ccb7d27 100644 --- a/lib/extension/homeassistant.js +++ b/lib/extension/homeassistant.js @@ -1424,6 +1424,16 @@ class HomeAssistant extends BaseExtension { await this.mqtt.publish(`${data.entity.name}/${key}`, value, {}); } + + /** + * Publish a value for update_available (if not there yet) to prevent Home Assistant generating warnings of + * this value not being available. + */ + if (data.entity.device && data.entity.mapped && data.entity.mapped.hasOwnProperty('ota') && + !data.payload.hasOwnProperty('update_available')) { + logger.debug(`Mocking update_available value for Home Assistant`); + this.publishEntityState(data.entity.device.ieeeAddr, {update_available: false}); + } } onDeviceRenamed(device) { diff --git a/test/homeassistant.test.js b/test/homeassistant.test.js index 29116ae23..7f625cb2e 100644 --- a/test/homeassistant.test.js +++ b/test/homeassistant.test.js @@ -564,13 +564,13 @@ describe('HomeAssistant extension', () => { await flushPromises(); expect(MQTT.publish).toHaveBeenCalledWith( 'zigbee2mqtt/bulb', - '{"state":"ON","brightness":50,"color_temp":370,"linkquality":99}', + '{"state":"ON","brightness":50,"color_temp":370,"linkquality":99,"update_available":false}', { retain: true, qos: 0 }, expect.any(Function) ); expect(MQTT.publish).toHaveBeenCalledWith( 'zigbee2mqtt/remote', - '{"brightness":255}', + '{"brightness":255,"update_available":false}', { retain: true, qos: 0 }, expect.any(Function) );