UNPKG

matterbridge-roborock-vacuum-plugin

Version:
184 lines (183 loc) 9.19 kB
import { debugStringify } from 'matterbridge/logger'; import { BehaviorRoborock } from '../../BehaviorDeviceGeneric.js'; export class DefaultBehavior extends BehaviorRoborock { } export var VacuumSuctionPower; (function (VacuumSuctionPower) { VacuumSuctionPower[VacuumSuctionPower["Quiet"] = 101] = "Quiet"; VacuumSuctionPower[VacuumSuctionPower["Balanced"] = 102] = "Balanced"; VacuumSuctionPower[VacuumSuctionPower["Turbo"] = 103] = "Turbo"; VacuumSuctionPower[VacuumSuctionPower["Max"] = 104] = "Max"; VacuumSuctionPower[VacuumSuctionPower["Off"] = 105] = "Off"; VacuumSuctionPower[VacuumSuctionPower["Custom"] = 106] = "Custom"; VacuumSuctionPower[VacuumSuctionPower["MaxPlus"] = 108] = "MaxPlus"; })(VacuumSuctionPower || (VacuumSuctionPower = {})); export var MopWaterFlow; (function (MopWaterFlow) { MopWaterFlow[MopWaterFlow["Off"] = 200] = "Off"; MopWaterFlow[MopWaterFlow["Low"] = 201] = "Low"; MopWaterFlow[MopWaterFlow["Medium"] = 202] = "Medium"; MopWaterFlow[MopWaterFlow["High"] = 203] = "High"; MopWaterFlow[MopWaterFlow["Custom"] = 204] = "Custom"; MopWaterFlow[MopWaterFlow["CustomizeWithDistanceOff"] = 207] = "CustomizeWithDistanceOff"; })(MopWaterFlow || (MopWaterFlow = {})); export var MopRoute; (function (MopRoute) { MopRoute[MopRoute["Standard"] = 300] = "Standard"; MopRoute[MopRoute["Deep"] = 301] = "Deep"; MopRoute[MopRoute["Custom"] = 302] = "Custom"; MopRoute[MopRoute["DeepPlus"] = 303] = "DeepPlus"; MopRoute[MopRoute["Fast"] = 304] = "Fast"; })(MopRoute || (MopRoute = {})); export const RvcRunMode = { [1]: 'Idle', [2]: 'Cleaning', [3]: 'Mapping', }; export const RvcCleanMode = { [5]: 'Mop & Vacuum: Default', [6]: 'Mop & Vacuum: Quick', [7]: 'Mop & Vacuum: Max', [8]: 'Mop & Vacuum: Min', [9]: 'Mop & Vacuum: Quiet', [10]: 'Mop & Vacuum: Custom', [31]: 'Mop: Default', [32]: 'Mop: Max', [33]: 'Mop: Min', [34]: 'Mop: Quick', [35]: 'Mop: DeepClean', [66]: 'Vacuum: Default', [67]: 'Vacuum: Max', [68]: 'Vacuum: Quiet', [69]: 'Vacuum: Quick', [99]: 'Go Vacation', }; export const CleanSetting = { [5]: { suctionPower: VacuumSuctionPower.Balanced, waterFlow: MopWaterFlow.Medium, distance_off: 0, mopRoute: MopRoute.Standard }, [6]: { suctionPower: VacuumSuctionPower.Balanced, waterFlow: MopWaterFlow.Medium, distance_off: 0, mopRoute: MopRoute.Fast }, [7]: { suctionPower: VacuumSuctionPower.Max, waterFlow: MopWaterFlow.Medium, distance_off: 0, mopRoute: MopRoute.Standard }, [8]: { suctionPower: VacuumSuctionPower.Balanced, waterFlow: MopWaterFlow.Low, distance_off: 0, mopRoute: MopRoute.Standard }, [9]: { suctionPower: VacuumSuctionPower.Quiet, waterFlow: MopWaterFlow.Medium, distance_off: 0, mopRoute: MopRoute.Standard }, [10]: { suctionPower: VacuumSuctionPower.Custom, waterFlow: MopWaterFlow.Custom, distance_off: 0, mopRoute: MopRoute.Custom }, [31]: { suctionPower: VacuumSuctionPower.Off, waterFlow: MopWaterFlow.Medium, distance_off: 0, mopRoute: MopRoute.Standard }, [32]: { suctionPower: VacuumSuctionPower.Off, waterFlow: MopWaterFlow.High, distance_off: 0, mopRoute: MopRoute.Standard }, [33]: { suctionPower: VacuumSuctionPower.Off, waterFlow: MopWaterFlow.Low, distance_off: 0, mopRoute: MopRoute.Standard }, [34]: { suctionPower: VacuumSuctionPower.Off, waterFlow: MopWaterFlow.Medium, distance_off: 0, mopRoute: MopRoute.Fast }, [35]: { suctionPower: VacuumSuctionPower.Off, waterFlow: MopWaterFlow.Medium, distance_off: 0, mopRoute: MopRoute.Deep }, [66]: { suctionPower: VacuumSuctionPower.Balanced, waterFlow: MopWaterFlow.Off, distance_off: 0, mopRoute: MopRoute.Standard }, [67]: { suctionPower: VacuumSuctionPower.Max, waterFlow: MopWaterFlow.Off, distance_off: 0, mopRoute: MopRoute.Standard }, [68]: { suctionPower: VacuumSuctionPower.Quiet, waterFlow: MopWaterFlow.Off, distance_off: 0, mopRoute: MopRoute.Standard }, [69]: { suctionPower: VacuumSuctionPower.Balanced, waterFlow: MopWaterFlow.Off, distance_off: 0, mopRoute: MopRoute.Fast }, }; export function setDefaultCommandHandler(duid, handler, logger, roborockService, cleanModeSettings) { handler.setCommandHandler('changeToMode', async (newMode) => { const activity = RvcRunMode[newMode] || RvcCleanMode[newMode]; switch (activity) { case 'Cleaning': { logger.notice('DefaultBehavior-ChangeRunMode to: ', activity); await roborockService.startClean(duid); break; } case 'Go Vacation': { logger.notice('DefaultBehavior-GoHome'); await roborockService.stopAndGoHome(duid); break; } case 'Mop & Vacuum: Custom': { const setting = CleanSetting[newMode]; logger.notice(`DefaultBehavior-ChangeCleanMode to: ${activity}, setting: ${debugStringify(setting)}`); await roborockService.changeCleanMode(duid, setting); break; } case 'Mop & Vacuum: Default': case 'Mop: Default': case 'Vacuum: Default': { const setting = cleanModeSettings ? (getSettingFromCleanMode(activity, cleanModeSettings) ?? CleanSetting[newMode]) : CleanSetting[newMode]; logger.notice(`DefaultBehavior-ChangeCleanMode to: ${activity}, setting: ${debugStringify(setting ?? {})}`); if (setting) { await roborockService.changeCleanMode(duid, setting); } break; } case 'Mop & Vacuum: Quick': case 'Mop & Vacuum: Max': case 'Mop & Vacuum: Min': case 'Mop & Vacuum: Quiet': case 'Mop: Max': case 'Mop: Min': case 'Mop: Quick': case 'Mop: DeepClean': case 'Vacuum: Max': case 'Vacuum: Min': case 'Vacuum: Quiet': case 'Vacuum: Quick': { const setting = CleanSetting[newMode]; logger.notice(`DefaultBehavior-ChangeCleanMode to: ${activity}, setting: ${debugStringify(setting ?? {})}`); if (setting) { await roborockService.changeCleanMode(duid, setting); } break; } default: logger.notice('DefaultBehavior-changeToMode-Unknown: ', newMode); break; } }); handler.setCommandHandler('selectAreas', async (newAreas) => { logger.notice(`DefaultBehavior-selectAreas: ${newAreas}`); roborockService.setSelectedAreas(duid, newAreas ?? []); }); handler.setCommandHandler('pause', async () => { logger.notice('DefaultBehavior-Pause'); await roborockService.pauseClean(duid); }); handler.setCommandHandler('resume', async () => { logger.notice('DefaultBehavior-Resume'); await roborockService.resumeClean(duid); }); handler.setCommandHandler('goHome', async () => { logger.notice('DefaultBehavior-GoHome'); await roborockService.stopAndGoHome(duid); }); handler.setCommandHandler('playSoundToLocate', async () => { logger.notice('DefaultBehavior-playSoundToLocate'); await roborockService.playSoundToLocate(duid); }); } export const getSettingFromCleanMode = (activity, cleanModeSettings) => { switch (activity) { case 'Mop: Default': { const mopSetting = cleanModeSettings?.mopping; const waterFlow = MopWaterFlow[mopSetting?.waterFlowMode] ?? MopWaterFlow.Medium; const distance_off = waterFlow == MopWaterFlow.CustomizeWithDistanceOff ? 210 - 5 * (mopSetting?.distanceOff ?? 25) : 0; return { suctionPower: VacuumSuctionPower.Off, waterFlow, distance_off, mopRoute: MopRoute[mopSetting?.mopRouteMode] ?? MopRoute.Standard, }; } case 'Vacuum: Default': { const vacuumSetting = cleanModeSettings?.vacuuming; return { suctionPower: VacuumSuctionPower[vacuumSetting?.fanMode] ?? VacuumSuctionPower.Balanced, waterFlow: MopWaterFlow.Off, distance_off: 0, mopRoute: MopRoute[vacuumSetting?.mopRouteMode] ?? MopRoute.Standard, }; } case 'Mop & Vacuum: Default': { const vacmopSetting = cleanModeSettings?.vacmop; const waterFlow = MopWaterFlow[vacmopSetting?.waterFlowMode] ?? MopWaterFlow.Medium; const distance_off = waterFlow == MopWaterFlow.CustomizeWithDistanceOff ? 210 - 5 * (vacmopSetting?.distanceOff ?? 25) : 0; return { suctionPower: VacuumSuctionPower[vacmopSetting?.fanMode] ?? VacuumSuctionPower.Balanced, waterFlow, distance_off, mopRoute: MopRoute[vacmopSetting?.mopRouteMode] ?? MopRoute.Standard, }; } default: return undefined; } };