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.
47 lines • 2.25 kB
JavaScript
// Matterbridge plugin for Dyson robot vacuum and air treatment devices
// Copyright © 2025 Alexander Thoukydides
import { DysonDevice360Eye, DysonDevice360Heurist, DysonDevice360VisNav } from './dyson-device-360.js';
import { DysonDeviceAirCool, DysonDeviceAirCoolDesk, DysonDeviceAirCoolE, DysonDeviceAirCoolK, DysonDeviceAirCoolLink, DysonDeviceAirCoolLinkDesk, DysonDeviceAirHotCool, DysonDeviceAirHotCoolE, DysonDeviceAirHotCoolK, DysonDeviceAirHotCoolLink, DysonDeviceAirHotCoolLinkA, DysonDeviceAirHumidifyCool, DysonDeviceAirHumidifyCoolE, DysonDeviceAirHumidifyCoolK, DysonDeviceAirBigQuiet } from './dyson-device-air.js';
import { logError } from './utils.js';
// List of constructors for Dyson devices
const DYSON_DEVICE_TYPES = [
// Dyson robot vacuum device types
DysonDevice360Eye,
DysonDevice360Heurist,
DysonDevice360VisNav,
// Dyson air treatment device types
DysonDeviceAirCool,
DysonDeviceAirCoolDesk,
DysonDeviceAirCoolE,
DysonDeviceAirCoolK,
DysonDeviceAirCoolLink,
DysonDeviceAirCoolLinkDesk,
DysonDeviceAirHotCool,
DysonDeviceAirHotCoolE,
DysonDeviceAirHotCoolK,
DysonDeviceAirHotCoolLink,
DysonDeviceAirHotCoolLinkA,
DysonDeviceAirHumidifyCool,
DysonDeviceAirHumidifyCoolE,
DysonDeviceAirHumidifyCoolK,
DysonDeviceAirBigQuiet
];
// Dyson device factory
export async function createDysonDevice(log, config, device) {
// Select the appropriate class for this device
const { rootTopic } = device;
const deviceClass = DYSON_DEVICE_TYPES.find((device) => device.model.type === rootTopic);
if (!deviceClass)
throw new Error(`Unknown Dyson device type: ${rootTopic}`);
// Create the MQTT client and wait for it to finish initialising
const mqtt = new deviceClass.mqttConstructor(log, config, device);
mqtt.on('error', err => { logError(log, 'MQTT Event', err); });
await mqtt.waitUntilInitialised();
// Create the Dyson device itself
return new deviceClass(log, config, device, mqtt);
}
// Test whether a specific model is supported
export function isSupportedModel(rootTopic) {
return DYSON_DEVICE_TYPES.some((device) => device.model.type === rootTopic);
}
//# sourceMappingURL=dyson-device.js.map