node-kobold-api v1.0.0
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 occurredrobots
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
booleanrobot.isCharging
booleanrobot.isDocked
booleanrobot.isScheduleEnabled
booleanrobot.dockHasBeenSeen
booleanrobot.charge
number - charge in percentrobot.canStart
boolean - robot is ready to start cleaningrobot.canStop
boolean - cleaning can be stoppedrobot.canPause
boolean - cleaning can be pausedrobot.canResume
boolean - cleaning can be resumedrobot.canGoToBase
boolean - robot can be sent to baserobot.eco
boolean - set to true to clean in eco moderobot.noGoLines
boolean - set to true to enable noGoLinesrobot.navigationMode
number - 1: normal, 2: extra care (new models only)robot.spotWidth
number - width for spot cleaning in cmrobot.spotHeight
number - height for spot cleaning in cmrobot.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 occurredstate
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'}};
-------------------------------------------------------
<a name="getSchedule"></a>
### 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:
```Javascript
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 occurredresult
string - 'ok' if scheduling got enabled
robot.disableSchedule(callback)
Disables scheduling.
callback
-function(error, result)
error
null if no error occurredresult
string - 'ok' if scheduling got disabled
robot.startCleaning(eco, navigationMode, noGoLines, callback)
Start cleaning.
eco
boolean - clean in eco modenavigationMode
number - 1: normal, 2: extra care (new models only)eco
boolean - clean with enabled nogo linescallback
-function(error, result)
error
null if no error occurredresult
string - 'ok' if cleaning could be started
robot.startSpotCleaning(eco, width, height, repeat, navigationMode, callback)
Start spot cleaning.
eco
boolean - clean in eco modewidth
number - spot width in cm (min 100cm)height
number - spot height in cm (min 100cm)repeat
boolean - clean spot two timesnavigationMode
number - 1: normal, 2: extra care (new models only)callback
-function(error, result)
error
null if no error occurredresult
string - 'ok' if spot cleaning could be started
robot.stopCleaning(callback)
Stop cleaning.
callback
-function(error, result)
error
null if no error occurredresult
string - 'ok' if cleaning could be stopped
robot.pauseCleaning(callback)
Pause cleaning.
callback
-function(error, result)
error
null if no error occurredresult
string - 'ok' if cleaning could be paused
robot.resumeCleaning(callback)
Resume cleaning.
callback
-function(error, result)
error
null if no error occurredresult
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 occurredmaps
Maps[] - array of maps
robot.getMapBoundaries(mapId, callback)
Returns the boundaries of a map
mapId
string - a Map id for which to get the boundariescallback
-function(error, schedule)
error
null if no error occurredboundaries
Boundary[] - array of boundaries
robot.setMapBoundaries(mapId, callback)
Sets boundaries for a map
mapId
string - a Map id for which to get the boundariesboundaries
Boundary[] - array of boundariescallback
-function(error, schedule)
error
null if no error occurredboundaries
Boundary[] - array of boundaries
robot.startCleaningBoundary(eco, extraCare, boundaryId, callback)
Start cleaning with boundaries
eco
boolean - clean in eco modeextraCare
boolean - clean in extra care (new models only)boundaryId
string - a boundary id (zone) to cleancallback
-function(error, result)
error
null if no error occurredresult
string - 'ok' if cleaning could be started
robot.sendToBase(callback)
Send robot to base.
callback
-function(error, result)
error
null if no error occurredresult
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 occurredresult
string - 'ok' if robot could be located
2 years ago