matterbridge-dyson-robot
Version:
A Matterbridge plugin that connects Dyson robot vacuums and air treatment devices to the Matter smart home ecosystem via their local or cloud MQTT APIs.
52 lines • 2.26 kB
TypeScript
import { AnsiLogger } from 'matterbridge/logger';
import { Config } from './config-types.js';
import EventEmitter from 'events';
import { DysonMsg } from './dyson-types.js';
import { DysonMqttParserConfig, DysonMsgAny } from './dyson-mqtt-parse.js';
import { DysonMqttSubscribeConfig } from './dyson-mqtt-subscribe.js';
import { DysonMqttFiltered } from './dyson-mqtt-filter.js';
import { AsyncEventEmitter } from './async-eventemitter.js';
import { DeviceConfigMqtt } from './dyson-mqtt-client.js';
export interface DysonMqttConfig<T> {
topics: DysonMqttSubscribeConfig;
messages: DysonMqttParserConfig<T>;
}
export interface DysonMqttStatusBase {
reachable: boolean;
initialised: boolean;
}
export type DysonMqttStatus<T> = T & DysonMqttStatusBase;
export interface DysonMqttEventMapBase {
error: [unknown];
subscribed: [];
status: [];
}
export interface DysonMqttEventMap<T> extends DysonMqttEventMapBase {
message: [DysonMsgAny<T>];
}
export type PublishArgs<T, O extends string> = {
[K in keyof T]: T[K] extends DysonMsg ? (Omit<T[K], O | 'msg'> extends Record<string, never> ? [T[K]['msg']] : [T[K]['msg'], Omit<T[K], O | 'msg'>]) : never;
}[keyof T];
export interface DysonMqttLike extends EventEmitter {
waitUntilInitialised(): Promise<void>;
stop(): Promise<void>;
}
export declare abstract class DysonMqtt<T, S> extends AsyncEventEmitter<DysonMqttEventMap<T>> implements DysonMqttLike {
readonly log: AnsiLogger;
readonly config: Config;
readonly deviceConfig: DeviceConfigMqtt;
readonly mqttConfig: DysonMqttConfig<T>;
private mqtt;
private mqttConnection;
private mqttSubscribe;
private mqttFilter;
readonly status: DysonMqttStatus<S>;
constructor(log: AnsiLogger, config: Config, deviceConfig: DeviceConfigMqtt, mqttConfig: DysonMqttConfig<T>);
downTimerHandle: Map<string, NodeJS.Timeout>;
updateReachable(key: 'mqtt' | 'msg', reachable: boolean): void;
waitUntilInitialised(): Promise<void>;
stop(): Promise<void>;
publish(...[msg, params]: PublishArgs<T, 'time'>): Promise<void>;
logPayload(direction: 'publish' | 'receive', topic: string, payload: DysonMsg, filter?: DysonMqttFiltered): void;
}
//# sourceMappingURL=dyson-mqtt.d.ts.map