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.
123 lines • 5.28 kB
TypeScript
import { DeviceTypeDefinition, MatterbridgeEndpoint } from 'matterbridge';
import { AnsiLogger } from 'matterbridge/logger';
import { Config, EntityName } from './config-types.js';
import { EndpointBase, EndpointOptionsBase } from './endpoint-base.js';
import { AtLeastOne, ClusterId } from 'matterbridge/matter';
import { AirQuality, ConcentrationMeasurement, FanControl, ResourceMonitoring, Thermostat } from 'matterbridge/matter/clusters';
import { FanControlOptions, FilterMonitoringOptions } from './endpoint-air-purifier.js';
import { Changed } from './decorator-changed.js';
import { MaybePromise } from 'matterbridge/matter';
export type EndpointOptionsAirSensors = {
[K in keyof UpdateAirSensors as undefined extends UpdateAirSensors[K] ? K : never]-?: boolean;
};
export interface EndpointOptionsAir extends EndpointOptionsBase {
validatedNames: EntityName[];
fanControl: FanControlOptions;
hepaFilter?: FilterMonitoringOptions;
carbonFilter?: FilterMonitoringOptions;
sensors: EndpointOptionsAirSensors;
}
export type HandlerAir<T> = (newValue: T, oldValue: T) => MaybePromise;
export type HandlerAirMap<T extends Record<string, unknown>> = {
[K in keyof T & string]: HandlerAir<T[K]>;
};
export interface HandlersAirFan {
onOff: HandlerAir<boolean>;
airflowDirection: HandlerAir<FanControl.AirflowDirection>;
fanMode: HandlerAir<FanControl.FanMode>;
percentSetting: HandlerAir<number>;
rockSetting: HandlerAir<AirFanRockSetting>;
speedSetting: HandlerAir<number>;
windSetting: HandlerAir<AirWindSetting>;
}
export interface HandlersAirThermostat {
occupiedHeatingSetpoint: HandlerAir<number>;
systemMode: HandlerAir<Thermostat.SystemMode>;
}
export interface AirFanRockSetting {
rockLeftRight?: boolean;
rockUpDown?: boolean;
rockRound?: boolean;
}
export interface AirWindSetting {
sleepWind?: boolean;
naturalWind?: boolean;
}
export interface UpdateAirFan {
onOff: boolean;
airflowDirection?: FanControl.AirflowDirection;
fanMode: FanControl.FanMode;
percentSetting: number | null;
rockSetting?: AirFanRockSetting;
speedSetting: number | null;
windSetting?: AirWindSetting;
percentCurrent: number;
speedCurrent: number;
}
export interface UpdateAirThermostatRunningState {
cool?: false;
coolStage2?: false;
heat: boolean;
heatStage2?: boolean;
fan: boolean;
fanStage2?: boolean;
fanStage3?: boolean;
}
export interface UpdateAirThermostat {
occupiedHeatingSetpoint: number;
systemMode: Thermostat.SystemMode;
localTemperature: number | null;
piHeatingDemand: number;
thermostatRunningState: UpdateAirThermostatRunningState;
}
export interface UpdateAirFilterMonitoringSingle {
condition: number;
changeIndication: ResourceMonitoring.ChangeIndication;
inPlaceIndicator: boolean;
}
export interface UpdateAirFilterMonitoring {
hepa?: UpdateAirFilterMonitoringSingle;
carbon?: UpdateAirFilterMonitoringSingle;
}
export interface UpdateAirSensors {
airQuality: AirQuality.AirQualityEnum;
temperature: number | null;
humidity: number | null;
voc?: ConcentrationMeasurement.LevelValue;
co2?: number | null;
nox?: ConcentrationMeasurement.LevelValue;
hcho?: number | null;
pm25?: number | null;
pm10?: number | null;
}
export declare class EndpointsAir {
readonly log: AnsiLogger;
readonly config: Config;
readonly options: EndpointOptionsAir;
bridged: EndpointBase[];
purifier?: MatterbridgeEndpoint;
thermostat?: MatterbridgeEndpoint;
airQuality: MatterbridgeEndpoint[];
temperature: MatterbridgeEndpoint[];
humidity: MatterbridgeEndpoint[];
changed: Changed;
lastWrite: Map<string, unknown>;
constructor(log: AnsiLogger, config: Config, options: EndpointOptionsAir);
createAirPurifierEndpoint(composed?: boolean): MatterbridgeEndpoint | undefined;
createHumiditySensorEndpoint(parent?: MatterbridgeEndpoint): MatterbridgeEndpoint | undefined;
createTemperatureSensorEndpoint(parent?: MatterbridgeEndpoint): MatterbridgeEndpoint | undefined;
createThermostatEndpoint(parent?: MatterbridgeEndpoint): MatterbridgeEndpoint | undefined;
createAirQualitySensorEndpoint(parent?: MatterbridgeEndpoint): MatterbridgeEndpoint | undefined;
createDevice(endpointName: EntityName, definition: AtLeastOne<DeviceTypeDefinition>, parent?: MatterbridgeEndpoint): MatterbridgeEndpoint | undefined;
get bridgedNodeEndpoints(): EndpointBase[];
setFanControlHandlers(handlers: HandlersAirFan): Promise<void>;
setThermostatHandlers(handlers: HandlersAirThermostat): Promise<void>;
subscribeAttributes<T extends Record<keyof T, unknown>>(endpoint: MatterbridgeEndpoint, clusterId: ClusterId, name: string, handlers: HandlerAirMap<T>, keys?: (keyof T & string)[]): Promise<void>;
updateReachable(reachable: boolean): Promise<void>;
updateFanControl(fan: UpdateAirFan): Promise<void>;
updateThermostat(thermostat: UpdateAirThermostat): Promise<void>;
updateFilterMonitoring(filters: UpdateAirFilterMonitoring): Promise<void>;
updateSensors(measurements: UpdateAirSensors): Promise<void>;
updateNextStatus(): void;
}
//# sourceMappingURL=endpoint-air.d.ts.map