127.0.0.1:8000 smart-home-server / master server / utils / neato.js
master

Tree @master (Download .tar.gz)

neato.js @masterraw · history · blame

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
};