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

Tree @master (Download .tar.gz)

neato.js @masterraw · history · blame

const utils = require('../utils');
const actions = require('../utils/actions');
const location = require('../utils/location');
const ifttt = require('../utils/ifttt');
const neato = require('../utils/neato');

let registeredActions = {
    homeEmpty: null
};

function neato_action_wrapper(neato_action, options) {
    options = options || {};
    neato.getRobot().then(neato_action).then(function(message) {
        console.log("neato_action complete:", message);
        if (!options.silent) {
            ifttt({
                user_id: options.user_id,
                event: "notification",
                data: message
            });
        }
    }).catch(function(error) {
        console.error(error);
        if (!options.silent) {
            ifttt({
                user_id: options.user_id,
                event: "notification",
                data: error
            });
        }
    });
}

module.exports = {
    post: {
        "start": {
            "home-empty": function(req, res) {
                if (registeredActions.homeEmpty) {
                    ifttt({
                        user_id: req.body.user_id,
                        event: "notification",
                        data: "Cleaning already scheduled"
                    });
                } else {
                    if (!location.num_home().curr) {
                        // If no one is home already, clean immediately
                        neato_action_wrapper(neato.startCleaning);
                    } else {
                        // Otherwise, we will create a location action to start cleaning
                        registeredActions.homeEmpty = actions.register(function(invoke) {
                            if (!location.num_home().curr) {
                                invoke();
                            }
                        }, function() {
                            console.log("Start cleaning, everyone left the house...");
                            neato_action_wrapper(neato.startCleaning);
                            delete registeredActions.homeEmpty;
                            return true;
                        }, {
                            id: "Clean when no one is home",
                            type: "location"
                        });
                    }
                }
                res.send(utils.ok());
            },
            "": function(req, res) {
                neato_action_wrapper(neato.startCleaning, {
                    user_id: req.body.user_id
                });
                res.send(utils.ok());
            },
        },
        "pause": function(req, res) {
            neato_action_wrapper(neato.pauseCleaning, {
                user_id: req.body.user_id,
                silent: true
            });
            res.send(utils.ok());
        },
        "resume": function(req, res) {
            neato_action_wrapper(neato.resumeCleaning, {
                user_id: req.body.user_id,
                silent: true
            });
            res.send(utils.ok());
        }
    }
};