diff --git a/lib/extension/groups.ts b/lib/extension/groups.ts index bae82d972..c41ff0631 100644 --- a/lib/extension/groups.ts +++ b/lib/extension/groups.ts @@ -292,6 +292,7 @@ export default class Groups extends Extension { groupKey, deviceKey, skipDisableReporting, resolvedEntityEndpoint, } = parsed; const message = utils.parseJSON(data.message, data.message); + let changedGroups: Group[] = []; const responseData: KeyValue = {device: deviceKey}; if (groupKey) { @@ -320,6 +321,7 @@ export default class Groups extends Extension { logger.info(`Adding '${resolvedEntityDevice.name}' to '${resolvedEntityGroup.name}'`); await resolvedEntityEndpoint.addToGroup(resolvedEntityGroup.zh); settings.addDeviceToGroup(resolvedEntityGroup.ID.toString(), keys); + changedGroups.push(resolvedEntityGroup); /* istanbul ignore else */ if (settings.get().advanced.legacy_api) { @@ -333,6 +335,7 @@ export default class Groups extends Extension { logger.info(`Removing '${resolvedEntityDevice.name}' from '${resolvedEntityGroup.name}'`); await resolvedEntityEndpoint.removeFromGroup(resolvedEntityGroup.zh); settings.removeDeviceFromGroup(resolvedEntityGroup.ID.toString(), keys); + changedGroups.push(resolvedEntityGroup); /* istanbul ignore else */ if (settings.get().advanced.legacy_api) { @@ -344,6 +347,7 @@ export default class Groups extends Extension { } } else { // remove_all logger.info(`Removing '${resolvedEntityDevice.name}' from all groups`); + changedGroups = this.zigbee.groups().filter((g) => g.zh.members.includes(resolvedEntityEndpoint)); await resolvedEntityEndpoint.removeFromAllGroups(); for (const settingsGroup of settings.getGroups()) { settings.removeDeviceFromGroup(settingsGroup.ID.toString(), keys); @@ -372,8 +376,10 @@ export default class Groups extends Extension { if (error) { logger.error(error); } else { - this.eventBus.emitGroupMembersChanged({ - group: resolvedEntityGroup, action: type, endpoint: resolvedEntityEndpoint, skipDisableReporting}); + for (const group of changedGroups) { + this.eventBus.emitGroupMembersChanged({ + group, action: type, endpoint: resolvedEntityEndpoint, skipDisableReporting}); + } } } }