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.

315 lines 7.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.speedmodes = void 0; const SPEEDMODES = { gen1: [ // 0% = Off / Aus { miLevel: -1, name: "Off", }, // 0-25% = "Quiet / Leise" { miLevel: 38, name: "Quiet", }, // 26-50% = "Balanced / Standard" { miLevel: 60, name: "Balanced", }, // 51-75% = "Turbo / Stark" { miLevel: 77, name: "Turbo", }, // 76-100% = "Full Speed / Max Speed / Max" { miLevel: 90, name: "Max", }, ], gen2: [ // 0% = Off / Aus { miLevel: -1, name: "Off", }, // 1-20% = "Mop / Mopping / Nur wischen" { miLevel: 105, name: "Mop", }, // 21-40% = "Quiet / Leise" { miLevel: 38, name: "Quiet", }, // 41-60% = "Balanced / Standard" { miLevel: 60, name: "Balanced", }, // 61-80% = "Turbo / Stark" { miLevel: 75, name: "Turbo", }, // 81-100% = "Full Speed / Max Speed / Max" { miLevel: 100, name: "Max", }, ], "gen2-no_mop": [ // 0% = Off / Aus { miLevel: -1, name: "Off", }, // 0-25% = "Quiet / Leise" { miLevel: 38, name: "Quiet", }, // 26-50% = "Balanced / Standard" { miLevel: 60, name: "Balanced", }, // 51-75% = "Turbo / Stark" { miLevel: 75, name: "Turbo", }, // 76-100% = "Full Speed / Max Speed / Max" { miLevel: 100, name: "Max", }, ], "xiaowa-e202-02": [ // 0% = Off / Aus { miLevel: -1, name: "Off", }, // 0-20% = "Gentle" { miLevel: 41, name: "Gentle", }, // 20-40% = "Silent" { miLevel: 50, name: "Silent", }, // 40-60% = "Balanced / Standard" { miLevel: 68, name: "Balanced", }, // 60-80% = "Turbo / Stark" { miLevel: 79, name: "Turbo", }, // 80-100% = "Full Speed / Max Speed / Max" { miLevel: 100, name: "Max", }, ], gen3: [ // 0% = Off / Aus { miLevel: -1, name: "Off", }, // 1-25% = "Quiet / Leise" { miLevel: 101, name: "Quiet", }, // 26-50% = "Balanced / Standard" { miLevel: 102, name: "Balanced", }, // 51-75% = "Turbo / Stark" { miLevel: 103, name: "Turbo", }, // 76-100% = "Full Speed / Max Speed / Max" { miLevel: 104, name: "Max", }, ], // S5-Max (https://github.com/homebridge-xiaomi-roborock-vacuum/homebridge-xiaomi-roborock-vacuum/issues/79#issuecomment-576246934) gen4: [ // 0% = Off / Aus { miLevel: -1, name: "Off", }, // 1-20% = "Soft" { miLevel: 105, name: "Soft", }, // 21-40% = "Quiet / Leise" { miLevel: 101, name: "Quiet", }, // 41-60% = "Balanced / Standard" { miLevel: 102, name: "Balanced", }, // 61-80% = "Turbo / Stark" { miLevel: 103, name: "Turbo", }, // 81-100% = "Full Speed / Max Speed / Max" { miLevel: 104, name: "Max", }, ], // S5-Max + Custom (https://github.com/homebridge-xiaomi-roborock-vacuum/homebridge-xiaomi-roborock-vacuum/issues/110) "gen4+custom": [ // 0% = Off / Aus { miLevel: -1, name: "Off", }, // 1-16% = "Soft" { miLevel: 105, name: "Soft", }, // 17-32% = "Quiet / Leise" { miLevel: 101, name: "Quiet", }, // 33-48% = "Balanced / Standard" { miLevel: 102, name: "Balanced", }, // 49-64% = "Turbo / Stark" { miLevel: 103, name: "Turbo", }, // 65-80% = "Full Speed / Max Speed / Max" { miLevel: 104, name: "Max", }, // 81-100% = "Custom" { miLevel: 106, name: "Custom", }, ], // S7 MaxV gen5: [ // Off { miLevel: -1, name: "Off", }, // 0-16% = "Quiet" { miLevel: 101, name: "Quiet", }, // 17-32% = "Balanced" { miLevel: 102, name: "Balanced", }, // 33-49% = "Turbo" { miLevel: 103, name: "Turbo", }, // 50-66% = "Max" { miLevel: 104, name: "Max", }, // 67-82% = "Max+" { miLevel: 108, name: "Max+", }, // 83-100% = "Custom" { miLevel: 106, name: "Custom", }, ], // From https://github.com/rytilahti/python-miio/blob/20f915c9589fed55544a5417abe3fd3d9e12d08d/miio/viomivacuum.py#L16-L20 viomi: [ // 0% = Off / Aus { miLevel: -1, name: "Off", }, // 25% = Silent { miLevel: 0, name: "Silent", }, // 50% = Standard { miLevel: 1, name: "Standard", }, // 75% = Medium { miLevel: 2, name: "Medium", }, // 100% = Turbo { miLevel: 3, name: "Turbo", }, ], }; /** * Loops through all the speedmodes and assigns the `homekitTopLevel` with proportional steps. * * i.e.: * - If 5 possible states => 0%, 25%, 50%, 75% and 100% * - If 6 possible states => 0%, 20%, 40%, 60%, 80% and 100% * - If 7 possible states => 0%, 16%, 32%, 48%, 64%, 80% and 96% * * @returns object The SPEEDMODES + the addition of the `homekitTopLevel` property to each entry */ function autoAssignHomekitTopLevel() { const generations = Object.keys(SPEEDMODES); return generations.reduce((acc, gen) => { const speedmodes = SPEEDMODES[gen].map((mode, index, modes) => { const step = Math.floor(100 / (modes.length - 1)); return Object.assign({}, { // if it's the last element, max it out to 100% homekitTopLevel: index === modes.length - 1 ? 100 : index * step, }, mode // set later should we want to overwrite this logic in the SPEEDMODES definition ); }); return Object.assign({}, acc, { [gen]: speedmodes, }); }, {}); } exports.speedmodes = autoAssignHomekitTopLevel(); //# sourceMappingURL=speedmodes.js.map