Files
zigbee2mqtt/lib/model/group.ts
T
dependabot[bot]andKoen Kanters fa67645e88 fix(ignore): bump vitest from 3.2.7 to 4.1.11 (#33098)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Koen Kanters <koenkanters94@gmail.com>
2026-09-18 21:11:32 +02:00

67 lines
1.9 KiB
TypeScript

import type * as zhc from "zigbee-herdsman-converters";
import * as settings from "../util/settings";
import {DEFAULT_BIND_GROUP_ID} from "../util/utils";
export default class Group {
public zh: zh.Group;
private resolveDevice: (ieeeAddr: string) => Device | undefined;
// biome-ignore lint/style/useNamingConvention: API
get ID(): number {
return this.zh.groupID;
}
get options(): GroupOptions {
// biome-ignore lint/style/noNonNullAssertion: Group always exists in settings
return {...settings.getGroup(this.ID)!};
}
get name(): string {
return this.options?.friendly_name || this.ID.toString();
}
constructor(group: zh.Group, resolveDevice: (ieeeAddr: string) => Device | undefined) {
this.zh = group;
this.resolveDevice = resolveDevice;
}
ensureInSettings(): void {
if (this.ID !== DEFAULT_BIND_GROUP_ID && !settings.getGroup(this.ID)) {
settings.addGroup(this.name, this.ID.toString());
}
}
hasMember(device: Device): boolean {
return !!device.zh.endpoints.find((e) => this.zh.members.includes(e));
}
*membersDevices(): Generator<Device> {
for (const member of this.zh.members) {
const resolvedDevice = this.resolveDevice(member.deviceIeeeAddress);
if (resolvedDevice) {
yield resolvedDevice;
}
}
}
membersDefinitions(): zhc.Definition[] {
const definitions: zhc.Definition[] = [];
for (const member of this.membersDevices()) {
/* v8 ignore start */
if (member.definition) {
/* v8 ignore stop */
definitions.push(member.definition);
}
}
return definitions;
}
isDevice(): this is Device {
return false;
}
isGroup(): this is Group {
return true;
}
}