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.

35 lines 1.67 kB
// Matterbridge plugin for Dyson robot vacuum and air treatment devices // Copyright © 2025 Alexander Thoukydides import { createHash } from 'crypto'; import { assertIsDefined } from './utils.js'; // Regular expressions to parse Wi-Fi setup SSIDs const SSID_360EYE_RE = /^(360EYE-)?(?<sn>[A-Z0-9]{3}-[A-Z]{2}-[A-Z0-9]{8,})/; const SSID_OTHER_RE = /^DYSON-(?<sn>[A-Z0-9]{3}-[A-Z]{2}-[A-Z0-9]{8,})-(?<type>[0-9]{3}[A-Z]?)$/; // Dyson 360 Eye uses a different Wi-Fi setup SSID format const TYPE_360EYE = 'N223'; // Dyson Pure Hot+Cool Link (HP02) SSIDs don't match the MQTT topic and username const TYPE_MAP = new Map([['455A', '455']]); // Convert Wi-Fi setup credentials to local MQTT credentials export function getDeviceConfigMqtt(config) { const { ssid, password: wifiPassword } = config; const { rootTopic, serialNumber } = parseSSID(ssid); const password = hashWifiPassword(wifiPassword); return { ...config, serialNumber, password, rootTopic }; } // Extract the MQTT topic and username from a Wi-Fi setup SSID function parseSSID(ssid) { const match = SSID_360EYE_RE.exec(ssid) ?? SSID_OTHER_RE.exec(ssid); if (!match) throw new Error(`Unable to parse Product SSID: ${ssid}`); const rootTopic = match.groups?.type ?? TYPE_360EYE; const sn = match.groups?.sn; assertIsDefined(sn); const serialNumber = TYPE_MAP.get(sn) ?? sn; return { rootTopic, serialNumber }; } // Convert a Wi-Fi password to the form required for MQTT function hashWifiPassword(password) { const sha512 = createHash('sha512').update(password).digest(); return sha512.toString('base64'); } //# sourceMappingURL=dyson-mqtt-config.js.map