UNPKG

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
// 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