npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

node-kobold-api

v1.0.0

Published

Vorwerk Kobold API for VR300

Downloads

3

Readme

node-kobold-api

A node module for Vorwerk Kobold VR300 without dependencies

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

Installation

The package is available on npm

npm install -g node-kobold-api

Usage Example

const kobold = require('node-kobold-api');

const client = new kobold.Client('***token***');

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.getRobots()

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.isBinFull boolean
  • 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()
  • robot.getSchedule()
  • robot.enableSchedule()
  • robot.disableSchedule()
  • robot.startCleaning()
  • robot.startSpotCleaning()
  • robot.stopCleaning()
  • robot.pauseCleaning()
  • robot.resumeCleaning()
  • robot.getPersistentMaps()
  • robot.getMapBoundaries()
  • robot.setMapBoundaries()
  • robot.startCleaningBoundary()
  • robot.sendToBase()
  • robot.findMe()

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:
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: 'BotVacConnected', firmware: '2.0.0'}};

robot.getSchedule([detailed], [callback])

Returns the scheduling state of the robot.

  • detailed - boolean boolean, to return the full schedule object, not only it status
  • callback - function(error, schedule)
    • error null if no error occurred
    • schedule depend on detailed
      • boolean (when detailed is undefined or false) true if scheduling is enabled
      • object (when detailed is true) full schedule description object
        • example:
var schedule = {
   type:1,
   enabled:true,
   events:[
       {
           day:1,
           startTime:"08:30"
       },
       {
           day:2,
           startTime:"08:30"
       },
       {
           day:3,
           startTime:"08:30"
       },
       {
           day:4,
           startTime:"08:30"
       },
       {
           day:5,
           startTime:"08:30"
       },
       {
           day:6,
           startTime:"11:30"
       },
       {
           day:0,
           startTime:"11:30"
       }
   ]
}

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 models only)
  • eco 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 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.getPersistentMaps([callback])

Returns the persistent maps of the robot

  • callback - function(error, schedule)
    • error null if no error occurred
    • maps Maps[] - array of maps

robot.getMapBoundaries(mapId, [callback])

Returns the boundaries of a map

  • mapId string - a Map id for which to get the boundaries
  • callback - function(error, schedule)
    • error null if no error occurred
    • boundaries Boundary[] - array of boundaries

robot.setMapBoundaries(mapId, [callback])

Sets boundaries for a map

  • mapId string - a Map id for which to get the boundaries
  • boundaries Boundary[] - array of boundaries
  • callback - function(error, schedule)
    • error null if no error occurred
    • boundaries Boundary[] - array of boundaries

robot.startCleaningBoundary([eco], [extraCare], [boundaryId], [callback])

Start cleaning with boundaries

  • eco boolean - clean in eco mode
  • extraCare boolean - clean in extra care (new models only)
  • boundaryId string - a boundary id (zone) to clean
  • callback - function(error, result)
    • error null if no error occurred
    • result string - 'ok' if cleaning could be started

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

robot.findMe([callback])

Locate the robot by emitting a sound and light

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