matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
184 lines (183 loc) • 9.19 kB
JavaScript
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 = {
[]: 'Idle',
[]: 'Cleaning',
[]: 'Mapping',
};
export const RvcCleanMode = {
[]: 'Mop & Vacuum: Default',
[]: 'Mop & Vacuum: Quick',
[]: 'Mop & Vacuum: Max',
[]: 'Mop & Vacuum: Min',
[]: 'Mop & Vacuum: Quiet',
[]: 'Mop & Vacuum: Custom',
[]: 'Mop: Default',
[]: 'Mop: Max',
[]: 'Mop: Min',
[]: 'Mop: Quick',
[]: 'Mop: DeepClean',
[]: 'Vacuum: Default',
[]: 'Vacuum: Max',
[]: 'Vacuum: Quiet',
[]: 'Vacuum: Quick',
[]: 'Go Vacation',
};
export const CleanSetting = {
[]: { suctionPower: VacuumSuctionPower.Balanced, waterFlow: MopWaterFlow.Medium, distance_off: 0, mopRoute: MopRoute.Standard },
[]: { suctionPower: VacuumSuctionPower.Balanced, waterFlow: MopWaterFlow.Medium, distance_off: 0, mopRoute: MopRoute.Fast },
[]: { suctionPower: VacuumSuctionPower.Max, waterFlow: MopWaterFlow.Medium, distance_off: 0, mopRoute: MopRoute.Standard },
[]: { suctionPower: VacuumSuctionPower.Balanced, waterFlow: MopWaterFlow.Low, distance_off: 0, mopRoute: MopRoute.Standard },
[]: { suctionPower: VacuumSuctionPower.Quiet, waterFlow: MopWaterFlow.Medium, distance_off: 0, mopRoute: MopRoute.Standard },
[]: { suctionPower: VacuumSuctionPower.Custom, waterFlow: MopWaterFlow.Custom, distance_off: 0, mopRoute: MopRoute.Custom },
[]: { suctionPower: VacuumSuctionPower.Off, waterFlow: MopWaterFlow.Medium, distance_off: 0, mopRoute: MopRoute.Standard },
[]: { suctionPower: VacuumSuctionPower.Off, waterFlow: MopWaterFlow.High, distance_off: 0, mopRoute: MopRoute.Standard },
[]: { suctionPower: VacuumSuctionPower.Off, waterFlow: MopWaterFlow.Low, distance_off: 0, mopRoute: MopRoute.Standard },
[]: { suctionPower: VacuumSuctionPower.Off, waterFlow: MopWaterFlow.Medium, distance_off: 0, mopRoute: MopRoute.Fast },
[]: { suctionPower: VacuumSuctionPower.Off, waterFlow: MopWaterFlow.Medium, distance_off: 0, mopRoute: MopRoute.Deep },
[]: { suctionPower: VacuumSuctionPower.Balanced, waterFlow: MopWaterFlow.Off, distance_off: 0, mopRoute: MopRoute.Standard },
[]: { suctionPower: VacuumSuctionPower.Max, waterFlow: MopWaterFlow.Off, distance_off: 0, mopRoute: MopRoute.Standard },
[]: { suctionPower: VacuumSuctionPower.Quiet, waterFlow: MopWaterFlow.Off, distance_off: 0, mopRoute: MopRoute.Standard },
[]: { 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;
}
};