node-kobold

    0.2.0 • Public • Published

    node-kobold

    A node module for Vorwerk Kobold VR200 and VR300.

    Based on Pmant's node-botvac, thanks to tomrosenback's PHP Port, kangguru's and naofireblade's work on the undocumented Neato / Vorwerk API.

    Installation

    npm install node-kobold

    Usage Example (old auth using password)

    var kobold = require('node-kobold');
     
    var client = new kobold.Client();
    //authorize
    client.authorize('email', 'password', false, function (error) {
        if (error) {
            console.log(error);
            return;
        }
        //get your robots
        client.getRobots(function (error, robots) {
            if (error) {
                console.log(error);
                return;
            }
            if (robots.length) {
                //do something        
                robots[0].getState(function (error, result) {
                   console.log(result);
                });
            }
        });
    });

    Usage OAuth2 (for i.e. MyKobold app)

    var kobold = require('node-kobold');
     
    var client = new kobold.Client();
    //authorize
    client.setToken(token);
     
    //get your robots
    client.getRobots(function (error, robots) {
        if (error) {
            console.log(error);
            return;
        }
        if (robots.length) {
            //do something        
            robots[0].getState(function (error, result) {
                console.log(result);
            });
        }
    });

    Getting a token

    You can get a token using the following two curl commands:

    # This will trigger the email sending 
    curl -X "POST" "https://mykobold.eu.auth0.com/passwordless/start" \
         -H 'Content-Type: application/json' \
         -d $'{
      "send": "code",
      "email": "ENTER_YOUR_EMAIL_HERE",
      "client_id": "KY4YbVAvtgB7lp8vIbWQ7zLk3hssZlhR",
      "connection": "email"
    }'

    ==== wait for the email to be received ====

    # this will generate a token using the numbers you received via email 
    # replace the value of otp 123456 with the value you received from the email 
    curl -X "POST" "https://mykobold.eu.auth0.com/oauth/token" \
         -H 'Content-Type: application/json' \
         -d $'{
      "prompt": "login",
      "grant_type": "http://auth0.com/oauth/grant-type/passwordless/otp",
      "scope": "openid email profile read:current_user",
      "locale": "en",
      "otp": "123456",
      "source": "vorwerk_auth0",
      "platform": "ios",
      "audience": "https://mykobold.eu.auth0.com/userinfo",
      "username": "ENTER_YOUR_EMAIL_HERE",
      "client_id": "KY4YbVAvtgB7lp8vIbWQ7zLk3hssZlhR",
      "realm": "email",
      "country_code": "DE"
    }'

    From the output, you want to copy the id_token value.

    Client API


    client.authorize(email, password, force, callback)

    Login at the Vorwerk api.

    • email - your Vorwerk email
    • password - your Vorwerk passwort
    • force - force login if already authorized
    • callback - function(error)
      • error null if no error occurred

    client.setToken(token)

    Set a token that you already gathered via the oauth workflow

    • token - the OAuth token you acquired

    client.getRobots(callback)

    Returns an array containing your registered robots.

    • callback - function(error, robots)
      • error null if no error occurred
      • robots array - your robots

    Robot Properties

    • robot.name - nickname of this robot (cannot be changed)

    These properties will be updated every time robot.getState() is called:

    • robot.isCharging boolean
    • robot.isDocked boolean
    • robot.isScheduleEnabled boolean
    • robot.dockHasBeenSeen boolean
    • robot.charge number - charge in percent
    • robot.canStart boolean - robot is ready to start cleaning
    • robot.canStop boolean - cleaning can be stopped
    • robot.canPause boolean - cleaning can be paused
    • robot.canResume boolean - cleaning can be resumed
    • robot.canGoToBase boolean - robot can be sent to base
    • robot.eco boolean - set to true to clean in eco mode
    • robot.noGoLines boolean - set to true to enable noGoLines
    • robot.navigationMode number - 1: normal, 2: extra care (new models only)
    • robot.spotWidth number - width for spot cleaning in cm
    • robot.spotHeight number - height for spot cleaning in cm
    • robot.spotRepeat boolean - set to true to clean spot two times

    Robot API


    robot.getState([callback])

    Returns the state object of the robot. Also updates all robot properties.

    • callback - function(error, state)
      • error null if no error occurred
      • state object
        • example:

    VR200

    var state = {
      version: 1,
      reqId: '1',
      result: 'ok',
      error: 'ui_alert_invalid',
      data: {},
      state: 1,
      action: 0,
      cleaning: {
        category: 2,
        mode: 1,
        modifier: 1,
        spotWidth: 0,
        spotHeight: 0
      },
      details: {
        isCharging: false,
        isDocked: true,
        isScheduleEnabled: false,
        dockHasBeenSeen: false,
        charge: 98
      },
      availableCommands: {
        start: true,
        stop: false,
        pause: false,
        resume: false,
        goToBase: false
      },
      availableServices: {
        houseCleaning: 'basic-1',
        spotCleaning: 'basic-1',
        manualCleaning: 'basic-1',
        easyConnect: 'basic-1',
        schedule: 'basic-1'
      },
      meta: {
        modelName: 'VR200',
        firmware: '2.1.3'
      }
    };

    VR300

    var state = {
      version: 1,
      reqId: '1',
      result: 'ok',
      data: {},
      error: null,
      alert: null,
      state: 1,
      action: 0,
      cleaning: {
        category: 4,
        mode: 1,
        modifier: 1,
        navigationMode: 1,
        mapId: '',
        spotWidth: 0,
        spotHeight: 0
      },
      details: {
        isCharging: false,
        isDocked: true,
        isScheduleEnabled: false,
        dockHasBeenSeen: false,
        charge: 99
      },
      availableCommands: {
        start: true,
        stop: false,
        pause: false,
        resume: false,
        goToBase: false
      },
      availableServices: {
        findMe: 'basic-1',
        generalInfo: 'basic-1',
        houseCleaning: 'basic-3',
        IECTest: 'advanced-1',
        logCopy: 'basic-1',
        manualCleaning: 'basic-1',
        maps: 'advanced-1',
        preferences: 'basic-1',
        schedule: 'basic-1',
        softwareUpdate: 'basic-1',
        spotCleaning: 'basic-1',
        wifi: 'basic-1'
      },
      meta: {
        modelName: 'VR220',
        firmware: '4.2.4-162'
      }
    };

    robot.getSchedule([callback])

    Returns the scheduling state of the robot.

    • callback - function(error, schedule)
      • error null if no error occurred
      • schedule boolean - true if scheduling is enabled

    robot.enableSchedule([callback])

    Enables scheduling.

    • callback - function(error, result)
      • error null if no error occurred
      • result string - 'ok' if scheduling got enabled

    robot.disableSchedule([callback])

    Disables scheduling.

    • callback - function(error, result)
      • error null if no error occurred
      • result string - 'ok' if scheduling got disabled

    robot.startCleaning([eco], [navigationMode], [noGoLines], [callback])

    Start cleaning.

    • eco boolean - clean in eco mode
    • navigationMode number - 1: normal, 2: extra care (new neato models only)
    • noGoLines boolean - clean with enabled nogo lines
    • callback - function(error, result)
      • error null if no error occurred
      • result string - 'ok' if cleaning could be started

    robot.startSpotCleaning([eco], [width], [height], [repeat], [navigationMode], [callback])

    Start spot cleaning.

    • eco boolean - clean in eco mode
    • width number - spot width in cm (min 100cm)
    • height number - spot height in cm (min 100cm)
    • repeat boolean - clean spot two times
    • navigationMode number - 1: normal, 2: extra care (new neato models only)
    • callback - function(error, result)
      • error null if no error occurred
      • result string - 'ok' if spot cleaning could be started

    robot.stopCleaning([callback])

    Stop cleaning.

    • callback - function(error, result)
      • error null if no error occurred
      • result string - 'ok' if cleaning could be stopped

    robot.pauseCleaning([callback])

    Pause cleaning.

    • callback - function(error, result)
      • error null if no error occurred
      • result string - 'ok' if cleaning could be paused

    robot.resumeCleaning([callback])

    Resume cleaning.

    • callback - function(error, result)
      • error null if no error occurred
      • result string - 'ok' if cleaning could be resumed

    robot.sendToBase([callback])

    Send robot to base.

    • callback - function(error, result)
      • error null if no error occurred
      • result string - 'ok' if robot could be sent to base

    Changelog

    0.1.0

    • (nicoh88) initial release

    0.1.2

    • (nicoh88) update for npmjs

    0.1.3

    • (nicoh88) NoGo Lines and options sync
    • (nicoh88) Syncing cleaning options from last runupdate for npmjs

    0.2.0

    • (carlambroselli) Add oauth2 option

    Install

    npm i node-kobold

    DownloadsWeekly Downloads

    28

    Version

    0.2.0

    License

    MIT

    Unpacked Size

    31.1 kB

    Total Files

    8

    Last publish

    Collaborators

    • nicoh88