zigbee-herdsman
Version:
An open source Zigbee gateway solution with node.js.
88 lines • 9.91 kB
TypeScript
import type { TClusterAttributes, TClusterCommandResponses, TClusterCommands, TClusterPayload, TClusters, TFoundation, TFoundationGenericPayload, TFoundationPayload, TPartialClusterAttributes } from "../zspec/zcl/definition/clusters-types";
import type { DataType, Direction, FrameType } from "../zspec/zcl/definition/enums";
export interface KeyValue {
[s: string]: any;
}
/**
* Send request policies:
* - 'bulk': Message must be sent together with other messages in the correct sequence.
* No immediate delivery required.
* - 'queue': Request shall be sent 'as-is' as soon as possible.
* Multiple identical requests shall be delivered multiple times.
* Not strict ordering required.
* - 'immediate': Request shall be sent immediately and not be kept for later retries (e.g. response message).
* - 'keep-payload': Request shall be sent as soon as possible.
* If immediate delivery fails, the exact same payload is only sent once, even if there were
* multiple requests.
* - 'keep-command': Request shall be sent as soon as possible.
* If immediate delivery fails, only the latest command for each command ID is kept for delivery.
* - 'keep-cmd-undiv': Request shall be sent as soon as possible.
* If immediate delivery fails, only the latest undivided set of commands is sent for each unique
* set of command IDs.
*/
export type SendPolicy = "bulk" | "queue" | "immediate" | "keep-payload" | "keep-command" | "keep-cmd-undiv";
export type DeviceType = "Coordinator" | "Router" | "EndDevice" | "Unknown" | "GreenPower";
export type EntityType = DeviceType | "Group";
export interface DatabaseEntry {
id: number;
type: EntityType;
[s: string]: any;
}
export interface GreenPowerDeviceJoinedPayload {
sourceID: number;
deviceID: number;
networkAddress: number;
securityKey?: Buffer;
}
export interface RawPayload {
ieeeAddress?: string;
networkAddress?: number;
groupId?: number;
dstEndpoint?: number;
/** defaults to `ZSpec.HA_ENDPOINT` */
srcEndpoint?: number;
/** defaults to false */
interPan?: boolean;
/** defaults to `ZSpec.HA_PROFILE_ID` */
profileId?: number;
/** Expected as `number` for ZDO */
clusterKey?: number | string;
/** Only used for ZDO */
zdoParams?: unknown[];
/** Only used for ZCL */
zcl?: {
frameType?: FrameType;
direction?: Direction;
disableDefaultResponse?: boolean;
manufacturerCode?: number;
tsn?: number;
commandKey: string;
/** TODO: zclFrame.ts `ZclPayload` should be refactor to this type */
payload?: Record<string, unknown> | Record<string, unknown>[];
};
/** defaults to false */
disableResponse?: boolean;
/** defaults to 10000 */
timeout?: number;
}
export interface TCustomCluster {
attributes: Record<string, unknown> | never;
commands: Record<string, Record<string, unknown | never>> | never;
commandResponses: Record<string, Record<string, unknown | never>> | never;
}
export type RawClusterAttribute = {
value: unknown;
type: DataType;
};
export type RawClusterAttributes = Record<number, RawClusterAttribute>;
export type ClusterOrRawAttributeKeys<Cl extends string | number, Custom extends TCustomCluster | undefined = undefined> = TClusterAttributes<Cl> extends never ? Custom extends TCustomCluster ? Custom["attributes"] extends never ? number[] : (keyof Custom["attributes"] | number)[] : number[] : Cl extends keyof TClusters ? Custom extends TCustomCluster ? Custom["attributes"] extends never ? (keyof TClusters[Cl]["attributes"] | number)[] : (keyof Custom["attributes"] | keyof TClusters[Cl]["attributes"] | number)[] : (keyof TClusters[Cl]["attributes"] | number)[] : Custom extends TCustomCluster ? Custom["attributes"] extends never ? number[] : (keyof Custom["attributes"] | number)[] : number[];
export type ClusterOrRawWriteAttributes<Cl extends string | number, Custom extends TCustomCluster | undefined = undefined> = TClusterAttributes<Cl> extends never ? Custom extends TCustomCluster ? Custom["attributes"] extends never ? RawClusterAttributes : Custom["attributes"] & RawClusterAttributes : RawClusterAttributes : Cl extends keyof TClusters ? (Custom extends TCustomCluster ? Custom["attributes"] extends never ? TClusterAttributes<Cl> : Custom["attributes"] & TClusterAttributes<Cl> : TClusterAttributes<Cl>) & RawClusterAttributes : Custom extends TCustomCluster ? Custom["attributes"] extends never ? RawClusterAttributes : Custom["attributes"] & RawClusterAttributes : RawClusterAttributes;
export type PartialClusterOrRawWriteAttributes<Cl extends string | number, Custom extends TCustomCluster | undefined = undefined> = TClusterAttributes<Cl> extends never ? Custom extends TCustomCluster ? Custom["attributes"] extends never ? RawClusterAttributes : Partial<Custom["attributes"]> & RawClusterAttributes : RawClusterAttributes : Cl extends keyof TClusters ? (Custom extends TCustomCluster ? Custom["attributes"] extends never ? TPartialClusterAttributes<Cl> : Partial<Custom["attributes"]> & TPartialClusterAttributes<Cl> : TPartialClusterAttributes<Cl>) & RawClusterAttributes : Custom extends TCustomCluster ? Custom["attributes"] extends never ? RawClusterAttributes : Partial<Custom["attributes"]> & RawClusterAttributes : RawClusterAttributes;
export type ClusterOrRawAttributes<Cl extends string | number, Custom extends TCustomCluster | undefined = undefined> = TClusterAttributes<Cl> extends never ? Custom extends TCustomCluster ? Custom["attributes"] extends never ? Record<number, unknown> : Custom["attributes"] & Record<number, unknown> : Record<number, unknown> : Cl extends keyof TClusters ? (Custom extends TCustomCluster ? Custom["attributes"] extends never ? TClusterAttributes<Cl> : Custom["attributes"] & TClusterAttributes<Cl> : TClusterAttributes<Cl>) & Record<number, unknown> : Custom extends TCustomCluster ? Custom["attributes"] extends never ? Record<number, unknown> : Custom["attributes"] & Record<number, unknown> : Record<number, unknown>;
export type PartialClusterOrRawAttributes<Cl extends string | number, Custom extends TCustomCluster | undefined = undefined> = TClusterAttributes<Cl> extends never ? Custom extends TCustomCluster ? Custom["attributes"] extends never ? Record<number, unknown> : Partial<Custom["attributes"]> & Record<number, unknown> : Record<number, unknown> : Cl extends keyof TClusters ? (Custom extends TCustomCluster ? Custom["attributes"] extends never ? TPartialClusterAttributes<Cl> : Partial<Custom["attributes"]> & TPartialClusterAttributes<Cl> : TPartialClusterAttributes<Cl>) & Record<number, unknown> : Custom extends TCustomCluster ? Custom["attributes"] extends never ? Record<number, unknown> : Partial<Custom["attributes"]> & Record<number, unknown> : Record<number, unknown>;
export type ClusterCommandKeys<Cl extends string | number, Custom extends TCustomCluster | undefined = undefined> = TClusterCommands<Cl> extends never ? Custom extends TCustomCluster ? Custom["commands"] extends never ? number[] : (keyof Custom["commands"] | number)[] : number[] : Cl extends keyof TClusters ? Custom extends TCustomCluster ? Custom["commands"] extends never ? (keyof TClusters[Cl]["commands"] | number)[] : (keyof Custom["commands"] | keyof TClusters[Cl]["commands"] | number)[] : (keyof TClusters[Cl]["commands"] | number)[] : Custom extends TCustomCluster ? Custom["commands"] extends never ? number[] : (keyof Custom["commands"] | number)[] : number[];
export type ClusterCommandResponseKeys<Cl extends string | number, Custom extends TCustomCluster | undefined = undefined> = TClusterCommandResponses<Cl> extends never ? Custom extends TCustomCluster ? Custom["commandResponses"] extends never ? number[] : (keyof Custom["commandResponses"] | number)[] : number[] : Cl extends keyof TClusters ? Custom extends TCustomCluster ? Custom["commandResponses"] extends never ? (keyof TClusters[Cl]["commandResponses"] | number)[] : (keyof Custom["commandResponses"] | keyof TClusters[Cl]["commandResponses"] | number)[] : (keyof TClusters[Cl]["commandResponses"] | number)[] : Custom extends TCustomCluster ? Custom["commandResponses"] extends never ? number[] : (keyof Custom["commandResponses"] | number)[] : number[];
export type TCustomClusterPayload<Custom extends TCustomCluster, Co extends string | number> = Custom["commands"] extends never ? Custom["commandResponses"] extends never ? never : Co extends keyof Custom["commandResponses"] ? Custom["commandResponses"][Co] : never : Co extends keyof Custom["commands"] ? Custom["commands"][Co] : Co extends keyof Custom["commandResponses"] ? Custom["commandResponses"][Co] : never;
export type ClusterOrRawPayload<Cl extends string | number, Co extends string | number, Custom extends TCustomCluster | undefined = undefined> = Cl extends number ? Record<string, unknown> : Co extends number ? Record<string, unknown> : TClusterPayload<Cl, Co> extends never ? Custom extends TCustomCluster ? TCustomClusterPayload<Custom, Co> extends never ? never : TCustomClusterPayload<Custom, Co> : never : Cl extends keyof TClusters ? Custom extends TCustomCluster ? TCustomClusterPayload<Custom, Co> extends never ? TClusterPayload<Cl, Co> : TCustomClusterPayload<Custom, Co> & TClusterPayload<Cl, Co> : TClusterPayload<Cl, Co> : Custom extends TCustomCluster ? TCustomClusterPayload<Custom, Co> extends never ? never : TCustomClusterPayload<Custom, Co> : never;
export type FoundationOrRawPayload<Co extends string | number> = Co extends number ? TFoundationGenericPayload : TFoundationPayload<Co> extends never ? never : Co extends keyof TFoundation ? TFoundationPayload<Co> : never;
//# sourceMappingURL=tstype.d.ts.map