From 09f33b31a940c72ecfd42586427f54b3567b097b Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Thu, 11 Sep 2025 20:53:58 +0200 Subject: [PATCH] fix: Fix `DatabaseEntry with ID 'X' does not exist` when adding device to delete group ID (#28583) --- lib/extension/bridge.ts | 1 + lib/zigbee.ts | 4 ++++ test/extensions/bridge.test.ts | 2 ++ 3 files changed, 7 insertions(+) diff --git a/lib/extension/bridge.ts b/lib/extension/bridge.ts index 21dc71431..a72cdf50e 100644 --- a/lib/extension/bridge.ts +++ b/lib/extension/bridge.ts @@ -638,6 +638,7 @@ export default class Bridge extends Extension { await entity.zh.removeFromNetwork(); } + this.zigbee.removeGroupFromLookup(entity.ID); settings.removeGroup(entity.ID); } diff --git a/lib/zigbee.ts b/lib/zigbee.ts index 180e1a499..ccd3cb602 100644 --- a/lib/zigbee.ts +++ b/lib/zigbee.ts @@ -432,4 +432,8 @@ export default class Zigbee { groupByID(id: number): Group | undefined { return this.resolveGroup(id); } + + removeGroupFromLookup(id: number): void { + this.groupLookup.delete(id); + } } diff --git a/test/extensions/bridge.test.ts b/test/extensions/bridge.test.ts index 9e0925bd0..a0863b6ad 100644 --- a/test/extensions/bridge.test.ts +++ b/test/extensions/bridge.test.ts @@ -2971,11 +2971,13 @@ describe("Extension: Bridge", () => { it("Should allow to remove group", async () => { const group = groups.group_1; + const removeGroupFromLookup = vi.spyOn(controller.zigbee, "removeGroupFromLookup"); mockMQTTPublishAsync.mockClear(); mockMQTTEvents.message("zigbee2mqtt/bridge/request/group/remove", "group_1"); await flushPromises(); expect(group.removeFromNetwork).toHaveBeenCalledTimes(1); expect(settings.getGroup("group_1")).toBeUndefined(); + expect(removeGroupFromLookup).toHaveBeenCalledWith(1); expect(mockMQTTPublishAsync).toHaveBeenCalledWith("zigbee2mqtt/bridge/groups", expect.any(String), expect.any(Object)); expect(mockMQTTPublishAsync).toHaveBeenCalledWith( "zigbee2mqtt/bridge/response/group/remove",