From e3fa0bfb65efca62d3b535e4d1d3c091efa42426 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Fri, 12 Jul 2024 12:15:33 +0200 Subject: [PATCH] fix: Ignore cache when re-interviewing device (#23328) * fix: Ignore cache when re-interviewing device * updates --- lib/extension/bridge.ts | 8 +++++--- lib/model/device.ts | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/extension/bridge.ts b/lib/extension/bridge.ts index caee3da2..87f8cdff 100644 --- a/lib/extension/bridge.ts +++ b/lib/extension/bridge.ts @@ -534,14 +534,16 @@ export default class Bridge extends Extension { logger.info(`Interviewing '${device.name}'`); try { - await device.zh.interview(); + await device.zh.interview(true); logger.info(`Successfully interviewed '${device.name}'`); } catch (error) { throw new Error(`interview of '${device.name}' (${device.ieeeAddr}) failed: ${error}`, {cause: error}); } - // publish devices so that the front-end has up-to-date info. - await this.publishDevices(); + // A re-interview can for example result in a different modelId, therefore reconsider the definition. + await device.resolveDefinition(true); + this.eventBus.emitDevicesChanged(); + this.eventBus.emitExposesChanged({device}); return utils.getResponse(message, {id: message.id}, null); } diff --git a/lib/model/device.ts b/lib/model/device.ts index dca52f8c..a533c5dc 100644 --- a/lib/model/device.ts +++ b/lib/model/device.ts @@ -42,8 +42,8 @@ export default class Device { } } - async resolveDefinition(): Promise { - if (!this.zh.interviewing && (!this.definition || this._definitionModelID !== this.zh.modelID)) { + async resolveDefinition(ignoreCache = false): Promise { + if (!this.zh.interviewing && (!this.definition || this._definitionModelID !== this.zh.modelID || ignoreCache)) { this.definition = await zhc.findByDevice(this.zh, true); this._definitionModelID = this.zh.modelID; }