///
import type { Device as ZHDevice, Endpoint as ZHEndpoint, Group as ZHGroup } from 'zigbee-herdsman/dist/controller/model';
import type { ZclHeader as ZHZclHeader } from 'zigbee-herdsman/dist/zcl';
import * as exposes from './exposes';
export interface Logger {
info: (message: string) => void;
warn: (message: string) => void;
error: (message: string) => void;
debug: (message: string) => void;
}
export type Range = [number, number];
export interface KeyValue {
[s: string]: unknown;
}
export interface KeyValueString {
[s: string]: string;
}
export interface KeyValueNumberString {
[s: number]: string;
}
export interface KeyValueAny {
[s: string]: any;
}
export type Publish = (payload: KeyValue) => void;
export type OnEventType = 'start' | 'stop' | 'message' | 'deviceJoined' | 'deviceInterview' | 'deviceAnnounce' | 'deviceNetworkAddressChanged' | 'deviceOptionsChanged';
export type Access = 0b001 | 0b010 | 0b100 | 0b011 | 0b101 | 0b111;
export type Expose = exposes.Numeric | exposes.Binary | exposes.Enum | exposes.Composite | exposes.List | exposes.Light | exposes.Switch | exposes.Lock | exposes.Cover | exposes.Climate | exposes.Text;
export type Option = exposes.Numeric | exposes.Binary | exposes.Composite | exposes.Enum | exposes.List | exposes.Text;
export interface Fingerprint {
modelID?: string;
manufacturerName?: string;
type?: 'EndDevice' | 'Router';
manufacturerID?: number;
applicationVersion?: number;
powerSource?: 'Battery' | 'Mains (single phase)';
softwareBuildID?: string;
ieeeAddr?: RegExp;
endpoints?: {
ID?: number;
profileID?: number;
deviceID?: number;
inputClusters?: number[];
outputClusters?: number[];
}[];
}
export type WhiteLabel = {
vendor: string;
model: string;
description: string;
fingerprint: Fingerprint[];
} | {
vendor: string;
model: string;
description?: string;
};
export interface OtaUpdateAvailableResult {
available: boolean;
currentFileVersion: number;
otaFileVersion: number;
}
export interface DefinitionMeta {
separateWhite?: boolean;
multiEndpoint?: boolean;
multiEndpointEnforce?: {
[s: string]: number;
};
publishDuplicateTransaction?: boolean;
tuyaDatapoints?: Tuya.MetaTuyaDataPoints;
disableDefaultResponse?: boolean | ((entity: Zh.Endpoint) => boolean);
pinCodeCount?: number;
coverInverted?: boolean;
timeout?: number;
multiEndpointSkip?: string[];
tuyaSendCommand?: 'sendData' | 'dataRequest';
coverStateFromTilt?: boolean;
thermostat?: {
weeklyScheduleMaxTransitions?: number;
weeklyScheduleSupportedModes?: number[];
weeklyScheduleFirstDayDpId?: number;
weeklyScheduleConversion?: string;
dontMapPIHeatingDemand?: boolean;
};
battery?: {
voltageToPercentage?: string | {
min: number;
max: number;
};
dontDividePercentage?: boolean;
};
applyRedFix?: boolean;
turnsOffAtBrightness1?: boolean;
tuyaThermostatPreset?: {
[s: number]: string;
};
tuyaThermostatSystemMode?: {
[s: number]: string;
};
tuyaThermostatPresetToSystemMode?: {
[s: number]: string;
};
supportsEnhancedHue?: boolean | ((entity: Zh.Endpoint) => boolean);
disableActionGroup?: boolean;
supportsHueAndSaturation?: boolean;
}
export type Configure = (device: Zh.Device, coordinatorEndpoint: Zh.Endpoint, logger: Logger) => Promise;
export type OnEvent = (type: OnEventType, data: OnEventData, device: Zh.Device, settings: KeyValue, state: KeyValue) => Promise;
export interface Extend {
fromZigbee: Fz.Converter[];
toZigbee: Tz.Converter[];
exposes: Expose[];
configure?: Configure;
meta?: DefinitionMeta;
}
export interface OnEventData {
endpoint?: Zh.Endpoint;
meta?: {
zclTransactionSequenceNumber?: number;
};
cluster?: string;
type?: string;
data?: KeyValueAny;
}
export type Definition = {
model: string;
vendor: string;
description: string;
whiteLabel?: WhiteLabel[];
endpoint?: (device: Zh.Device) => {
[s: string]: number;
};
configure?: Configure;
options?: Option[];
meta?: DefinitionMeta;
onEvent?: OnEvent;
ota?: {
isUpdateAvailable: (device: Zh.Device, logger: Logger, requestPayload: Ota.ImageInfo) => Promise;
updateToLatest: (device: Zh.Device, logger: Logger, onProgress: Ota.OnProgress) => Promise;
};
} & ({
zigbeeModel: string[];
} | {
fingerprint: Fingerprint[];
}) & ({
extend: Extend;
} | {
fromZigbee: Fz.Converter[];
toZigbee: Tz.Converter[];
exposes: (Expose[] | ((device: Zh.Device, options: KeyValue) => Expose[]));
});
export declare namespace Fz {
interface Message {
data: any;
endpoint: Zh.Endpoint;
device: Zh.Device;
meta: {
zclTransactionSequenceNumber: number;
};
groupID: number;
type: string;
cluster: string;
linkquality: number;
}
interface Meta {
state: KeyValue;
logger: Logger;
device: Zh.Device;
}
interface Converter {
cluster: string | number;
type: string[] | string;
options?: Option[] | ((definition: Definition) => Option[]);
convert: (model: Definition, msg: Message, publish: Publish, options: KeyValue, meta: Fz.Meta) => KeyValueAny | void | Promise;
}
}
export declare namespace Tz {
interface Meta {
logger: Logger;
message: KeyValue;
device: Zh.Device;
mapped: Definition;
options: KeyValue;
state: KeyValue;
endpoint_name: string;
}
interface Converter {
key: string[];
options?: Option[] | ((definition: Definition) => Option[]);
convertSet?: (entity: Zh.Endpoint | Zh.Group, key: string, value: unknown, meta: Tz.Meta) => Promise<{
state?: KeyValue;
readAfterWriteTime?: number;
} | void>;
convertGet?: (entity: Zh.Endpoint | Zh.Group, key: string, meta: Tz.Meta) => Promise;
}
}
export declare namespace Zh {
type Endpoint = ZHEndpoint;
type Device = ZHDevice;
type Group = ZHGroup;
type ZclHeader = ZHZclHeader;
}
export declare namespace Tuya {
interface DpValue {
dp: number;
datatype: number;
data: Buffer | number[];
}
interface ValueConverterSingle {
to?: (value: unknown, meta?: Tz.Meta) => unknown;
from?: (value: unknown, meta?: Fz.Meta, options?: KeyValue, publish?: Publish) => number | string | boolean | KeyValue | null;
}
interface ValueConverterMulti {
to?: (value: unknown, meta?: Tz.Meta) => unknown;
from?: (value: unknown, meta?: Fz.Meta, options?: KeyValue, publish?: Publish) => KeyValue;
}
interface MetaTuyaDataPointsMeta {
skip?: (meta: Tz.Meta) => boolean;
optimistic?: boolean;
}
type MetaTuyaDataPointsSingle = [number, string, Tuya.ValueConverterSingle, MetaTuyaDataPointsMeta?];
type MetaTuyaDataPoints = MetaTuyaDataPointsSingle[];
}
export declare namespace Extend {
interface options_switch {
disablePowerOnBehavior?: boolean;
toZigbee?: Tz.Converter[];
fromZigbee?: Fz.Converter[];
exposes?: Expose[];
}
interface options_light_onoff_brightness {
disablePowerOnBehavior?: boolean;
toZigbee?: Tz.Converter[];
fromZigbee?: Fz.Converter[];
exposes?: Expose[];
disableEffect?: boolean;
disableMoveStep?: boolean;
disableTransition?: boolean;
noConfigure?: boolean;
}
interface options_light_onoff_brightness_colortemp {
disablePowerOnBehavior?: boolean;
toZigbee?: Tz.Converter[];
fromZigbee?: Fz.Converter[];
exposes?: Expose[];
disableEffect?: boolean;
disableMoveStep?: boolean;
disableTransition?: boolean;
noConfigure?: boolean;
disableColorTempStartup?: boolean;
colorTempRange?: Range;
}
interface options_light_onoff_brightness_color {
disablePowerOnBehavior?: boolean;
toZigbee?: Tz.Converter[];
fromZigbee?: Fz.Converter[];
exposes?: Expose[];
disableEffect?: boolean;
disableMoveStep?: boolean;
disableTransition?: boolean;
noConfigure?: boolean;
disableColorTempStartup?: boolean;
colorTempRange?: Range;
preferHueAndSaturation?: boolean;
supportsHueAndSaturation?: boolean;
}
interface options_light_onoff_brightness_colortemp_color {
disablePowerOnBehavior?: boolean;
toZigbee?: Tz.Converter[];
fromZigbee?: Fz.Converter[];
exposes?: Expose[];
disableEffect?: boolean;
disableMoveStep?: boolean;
disableTransition?: boolean;
noConfigure?: boolean;
disableColorTempStartup?: boolean;
colorTempRange?: Range;
preferHueAndSaturation?: boolean;
supportsHueAndSaturation?: boolean;
}
}
export declare namespace Ota {
type OnProgress = (progress: number, remaining: number) => void;
interface Version {
imageType: number;
manufacturerCode: number;
fileVersion: number;
}
interface ImageHeader {
otaUpgradeFileIdentifier: Buffer;
otaHeaderVersion: number;
otaHeaderLength: number;
otaHeaderFieldControl: number;
manufacturerCode: number;
imageType: number;
fileVersion: number;
zigbeeStackVersion: number;
otaHeaderString: string;
totalImageSize: number;
securityCredentialVersion?: number;
upgradeFileDestination?: Buffer;
minimumHardwareVersion?: number;
maximumHardwareVersion?: number;
}
interface ImageElement {
tagID: number;
length: number;
data: Buffer;
}
interface Image {
header: ImageHeader;
elements: ImageElement[];
raw: Buffer;
}
interface ImageInfo {
imageType: number;
fileVersion: number;
manufacturerCode: number;
}
interface ImageMeta {
fileVersion: number;
fileSize?: number;
url: string;
sha256?: string;
force?: boolean;
sha512?: string;
hardwareVersionMin?: number;
hardwareVersionMax?: number;
}
type GetImageMeta = (current: ImageInfo, logger: Logger, device: Zh.Device) => Promise;
}
export declare namespace Reporting {
interface Override {
min?: number;
max?: number;
change?: number | [number, number];
}
}
//# sourceMappingURL=types.d.ts.map