mirror of
https://github.com/Koenkk/zigbee2mqtt.git
synced 2026-06-21 20:51:46 +00:00
65 lines
1.8 KiB
TypeScript
65 lines
1.8 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()) {
|
|
if (member.definition) {
|
|
definitions.push(member.definition);
|
|
}
|
|
}
|
|
|
|
return definitions;
|
|
}
|
|
|
|
isDevice(): this is Device {
|
|
return false;
|
|
}
|
|
isGroup(): this is Group {
|
|
return true;
|
|
}
|
|
}
|