UNPKG

homebridge-xiaomi-roborock-vacuum

Version:

Xiaomi Vacuum Cleaner - 1st (Mi Robot), 2nd (Roborock S50 + S55), 3rd Generation (Roborock S6) and S5 Max - plugin for Homebridge.

62 lines 2.17 kB
"use strict"; const { EventEmitter } = require("events"); const { Devices } = require("../lib/discovery"); const connectToDevice = require("../lib/connectToDevice"); const IP = /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; function asFilter(filter) { if (typeof filter === "number") { filter = String(filter); } if (typeof filter === "string") { return (reg) => { // Assign management if this filter is filtering a device const mgmt = reg.management ? reg.management : reg; // Make sure to remove `miio:` prefix from ids when matching let id = String(reg.id); if (id.indexOf("miio:") === 0) { id = id.substring(5); } // Match id, address or model return id === filter || mgmt.address === filter || mgmt.model === filter; }; } else if (typeof filter === "function") { return filter; } else { return () => true; } } function asToplevelFilter(filter) { return (reg) => reg.type === "gateway" || filter(reg); } module.exports = function (options = {}) { const result = new EventEmitter(); if (typeof options.filter === "string" && options.filter.match(IP)) { // IP-address specified connectToDevice({ address: options.filter, withPlaceholder: true, token: options.token, }) .then((device) => result.emit("available", device)) .catch(() => result.emit("done")); } else { // const filter = asFilter(options.filter); const browser = new Devices({ cacheTime: options.cacheTime || 300, filter: options.filter ? asToplevelFilter(filter) : null, token: options.token, }); browser.on("available", (device) => { if (filter(device)) { result.emit("available", device); } }); browser.on("unavailable", (device) => result.emit("unavailable", device)); } return result; }; //# sourceMappingURL=device-finder.js.map