Socket
Book a DemoInstallSign in
Socket

node-kobold

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

node-kobold

Vorwerk Kobold API for VR200 and VR300

latest
Source
npmnpm
Version
0.2.0
Version published
Maintainers
1
Created
Source

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

Keywords

vorwerk

FAQs

Package last updated on 03 Oct 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts