diff --git a/lib/extension/availability.ts b/lib/extension/availability.ts index 040a3b6c..0cf45e38 100644 --- a/lib/extension/availability.ts +++ b/lib/extension/availability.ts @@ -91,10 +91,13 @@ export default class Availability extends Extension { } override async start(): Promise { - this.eventBus.onEntityRenamed(this, (data) => - data.entity.isDevice() && - utils.isAvailabilityEnabledForDevice(data.entity, settings.get()) && - this.publishAvailability(data.entity, false, true)); + this.eventBus.onEntityRenamed(this, (data) => { + if (data.entity.isDevice() && utils.isAvailabilityEnabledForDevice(data.entity, settings.get())) { + this.mqtt.publish(`${data.from}/availability`, null, {retain: true, qos: 0}); + this.publishAvailability(data.entity, false, true); + } + }); + this.eventBus.onDeviceRemoved(this, (data) => clearTimeout(this.timers[data.ieeeAddr])); this.eventBus.onDeviceLeave(this, (data) => clearTimeout(this.timers[data.ieeeAddr])); this.eventBus.onDeviceAnnounce(this, (data) => this.retrieveState(data.device)); diff --git a/test/availability.test.js b/test/availability.test.js index 76211dd3..6afaa862 100644 --- a/test/availability.test.js +++ b/test/availability.test.js @@ -262,6 +262,8 @@ describe('Availability', () => { MQTT.events.message('zigbee2mqtt/bridge/request/device/rename', stringify({from: 'bulb_color', to: 'bulb_new_name'})); await flushPromises(); + expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/bulb_color/availability', + null, {retain: true, qos: 0}, expect.any(Function)); expect(MQTT.publish).toHaveBeenCalledWith('zigbee2mqtt/bulb_new_name/availability', 'online', {retain: true, qos: 0}, expect.any(Function)); await advancedTime(utils.hours(12));