diff --git a/lib/extension/homeassistant.js b/lib/extension/homeassistant.js index de48ad67..77dcb3d4 100644 --- a/lib/extension/homeassistant.js +++ b/lib/extension/homeassistant.js @@ -2205,11 +2205,11 @@ class HomeAssistant extends Extension { onDeviceRenamed(device, homeAssisantRename) { logger.debug(`Refreshing Home Assistant discovery topic for '${device.ieeeAddr}'`); + const resolvedEntity = this.zigbee.resolveEntity(device); // Clear before rename so Home Assistant uses new friendly_name // https://github.com/Koenkk/zigbee2mqtt/issues/4096#issuecomment-674044916 if (homeAssisantRename) { - const resolvedEntity = this.zigbee.resolveEntity(device); for (const config of this.getConfigs(resolvedEntity)) { const topic = this.getDiscoveryTopic(config, device); this.mqtt.publish(topic, null, {retain: true, qos: 0}, this.discoveryTopic); diff --git a/test/homeassistant.test.js b/test/homeassistant.test.js index 490ced1a..1b370275 100644 --- a/test/homeassistant.test.js +++ b/test/homeassistant.test.js @@ -855,6 +855,31 @@ describe('HomeAssistant extension', () => { { retain: true, qos: 0 }, expect.any(Function), ); + + const payload = { + 'unit_of_measurement': '°C', + 'device_class': 'temperature', + 'value_template': '{{ value_json.temperature }}', + 'state_topic': 'zigbee2mqtt/weather_sensor_renamed', + 'json_attributes_topic': 'zigbee2mqtt/weather_sensor_renamed', + 'name': 'weather_sensor_renamed_temperature', + 'unique_id': '0x0017880104e45522_temperature_zigbee2mqtt', + 'device': { + 'identifiers': ['zigbee2mqtt_0x0017880104e45522'], + 'name': 'weather_sensor_renamed', + 'sw_version': this.version, + 'model': 'Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)', + 'manufacturer': 'Xiaomi', + }, + 'availability_topic': 'zigbee2mqtt/bridge/state', + }; + + expect(MQTT.publish).toHaveBeenCalledWith( + 'homeassistant/sensor/0x0017880104e45522/temperature/config', + stringify(payload), + { retain: true, qos: 0 }, + expect.any(Function), + ); }); it('Should discover update_available sensor when device supports it', async () => {