ember-zli
Version:
Interact with EmberZNet-based adapters using zigbee-herdsman 'ember' driver
126 lines (125 loc) • 4.89 kB
TypeScript
import type { EmberKeyData, EmberVersion } from "zigbee-herdsman/dist/adapter/ember/types.js";
import type { SerialPort } from "zigbee-herdsman/dist/adapter/serialPort.js";
import type { Eui64 } from "zigbee-herdsman/dist/zspec/tstypes.js";
import type { BAUDRATES } from "./consts.js";
import type { CpcSystemCommandId } from "./enums.js";
export type Mutable<T> = {
-readonly [P in keyof T]: T[P] extends ReadonlyArray<infer U> ? Mutable<U>[] : Mutable<T[P]>;
};
export type CheckboxChoices<Value> = {
value: Value;
name?: string;
checkedName?: string;
description?: string;
short?: string;
disabled?: boolean | string;
checked?: boolean;
type?: never;
}[];
export type SelectChoices<Value> = {
value: Value;
name?: string;
description?: string;
short?: string;
disabled?: boolean | string;
type?: never;
}[];
export type AdapterModel = "Aeotec Zi-Stick (ZGA008)" | "EasyIOT ZB-GW04 v1.1" | "EasyIOT ZB-GW04 v1.2" | "Inswift ZBM-MG24" | "Nabu Casa SkyConnect" | "Nabu Casa Yellow" | "Nabu Casa ZBT-2" | "SMLight SLZB06-M" | "SMLight SLZB06mg24" | "SMLight SLZB06mg26" | "SMLight SLZB07" | "SMLight SLZB07mg24" | "Sonoff ZBDongle-E" | "Sonoff Dongle-LMG21" | "Sonoff Dongle-M" | "Sonoff Dongle-PMG24" | "SparkFun MGM240p" | "TubeZB MGM24" | "TubeZB BM24" | "ROUTER - Aeotec Zi-Stick (ZGA008)" | "ROUTER - EasyIOT ZB-GW04 v1.1" | "ROUTER - EasyIOT ZB-GW04 v1.2" | "ROUTER - Inswift ZBM-MG24" | "ROUTER - Nabu Casa SkyConnect" | "ROUTER - Nabu Casa Yellow" | "ROUTER - Nabu Casa ZBT-2" | "ROUTER - SMLight SLZB06-M" | "ROUTER - SMLight SLZB06mg24" | "ROUTER - SMLight SLZB06mg26" | "ROUTER - SMLight SLZB07" | "ROUTER - SMLight SLZB07mg24" | "ROUTER - Sonoff ZBDongle-E" | "ROUTER - Sonoff Dongle-LMG21" | "ROUTER - Sonoff Dongle-M" | "ROUTER - Sonoff Dongle-PMG24" | "ROUTER - SparkFun MGM240p" | "ROUTER - TubeZB MGM24" | "ROUTER - TubeZB BM24";
export type PortType = "serial" | "tcp";
export type BaudRate = (typeof BAUDRATES)[number];
export type PortConf = {
baudRate: number;
path: string;
rtscts: boolean;
xon: boolean;
xoff: boolean;
metadata?: Awaited<ReturnType<typeof SerialPort.list>>[number];
};
export type EmberFullVersion = {
ezsp: number;
revision: string;
} & EmberVersion;
export type ConfigValue = {
[key: string]: string;
};
export type FirmwareVariant = "official" | "darkxst" | "nerivec" | "nerivec_pre_release" | "nvm3_32768_clear" | "nvm3_40960_clear" | "app_clear";
export type FirmwareVersion = `${number}.${number}.${number}.${number}`;
export type FirmwareVersionShort = `${number}.${number}.${number}`;
export type FirmwareFilename = `${string}.gbl`;
export type FirmwareURL = `https://${string}/${FirmwareFilename}`;
export type FirmwareFileMetadata = {
metadata_version: number;
sdk_version: FirmwareVersionShort;
fw_type: "zigbee_ncp" | "zigbee_router" | "openthread_rcp" | "gecko-bootloader";
fw_variant: "hw_flow" | "sw_flow" | "no_flow";
baudrate: number;
ezsp_version?: FirmwareVersion;
ot_version?: FirmwareVersion;
cpc_version?: FirmwareVersion;
fw_version?: FirmwareVersionShort;
};
export type FirmwareLinks = Record<FirmwareVariant, Partial<Record<AdapterModel, FirmwareURL>>>;
export type TokensInfo = {
nvm3Key: string;
size: number;
arraySize: number;
data: string[];
}[];
/**
* Use for a link key backup.
*
* Each entry notes the EUI64 of the device it is paired to and the key data.
* This key may be hashed and not the actual link key currently in use.
*/
export type LinkKeyBackupData = {
deviceEui64: Eui64;
key: EmberKeyData;
outgoingFrameCounter: number;
incomingFrameCounter: number;
};
export type CpcSystemCommand = {
/** Identifier of the command. uint8_t */
commandId: CpcSystemCommandId;
/** Command sequence number. uint8_t */
seq: number;
/** Length of the payload in bytes. uint16_t */
length: number;
/** Command payload. uint8_t[PAYLOAD_LENGTH_MAX] */
payload: Buffer;
};
export type GithubReleaseAssetJson = {
url: string;
id: number;
node_id: string;
name: string;
label: null;
uploader: Record<string, unknown>;
content_type: string;
state: string;
size: number;
download_count: number;
created_at: string;
updated_at: string;
browser_download_url: string;
};
export type GithubReleaseJson = {
url: string;
assets_url: string;
upload_url: string;
html_url: string;
id: number;
author: Record<string, unknown>;
node_id: string;
tag_name: string;
target_commitish: string;
name: string;
draft: boolean;
prerelease: boolean;
created_at: string;
published_at: string;
assets: GithubReleaseAssetJson[];
tarball_url: string;
zipball_url: string;
body: string;
reactions: Record<string, unknown>;
};