const botvac = require('node-botvac');
const neato = new botvac.Client();
neato.authorize(process.env.NEATO_EMAIL, process.env.NEATO_PASSWORD, false, function(error) {
if (error) {
console.error(error);
return;
}
console.log("Neato authentication successful");
});
/*
state.availableCommands: {
start: true,
stop: false,
pause: false,
resume: false,
goToBase: false
}
*/
function getRobot() {
return new Promise(function(resolve, reject) {
neato.getRobots(function(error, robots) {
if (error) {
reject(error);
} else {
console.log("There are", robots.length, "robots available");
if (robots.length) {
resolve(robots[0]);
} else {
reject("No robots available");
}
}
});
});
}
function startCleaning(robot) {
return new Promise(function(resolve, reject) {
robot.getState(function(error, state) {
if (error) {
reject(error);
} else if (state.availableCommands.start) {
robot.startCleaning(
false, // eco mode flag
1, // navigation mode (1: normal, 2: extracare)
true, // use no-go lines flag
function(error, result) {
if (error) {
reject(error);
} else {
console.log("result:", result);
resolve(`${robot.name} has started cleaning`);
}
}
);
} else {
reject(`${robot.name} cannot start cleaning`);
}
});
});
}
function pauseCleaning(robot) {
return new Promise(function(resolve, reject) {
robot.getState(function(error, state) {
if (error) {
reject(error);
} else if (state.availableCommands.pause) {
robot.pauseCleaning(
function(error, result) {
if (error) {
reject(error);
} else {
console.log("result:", result);
resolve(`${robot.name} is paused`);
}
}
);
} else {
reject(`${robot.name} cannot pause cleaning`);
}
});
});
}
function resumeCleaning(robot) {
return new Promise(function(resolve, reject) {
robot.getState(function(error, state) {
if (error) {
reject(error);
} else if (state.availableCommands.resume) {
robot.resumeCleaning(
function(error, result) {
if (error) {
reject(error);
} else {
console.log("result:", result);
resolve(`${robot.name} has resumed cleaning`);
}
}
);
} else {
reject(`${robot.name} cannot resume cleaning`);
}
});
});
}
module.exports = {
getRobot: getRobot,
startCleaning: startCleaning,
pauseCleaning: pauseCleaning,
resumeCleaning: resumeCleaning
};