Allows direct access to VanMoof Bikes Bluetooth-API in Javascript using the Web-Bluetooth-API.
- Retrieve Parameters (Battery, Distance, Settings, ...)
- Retrieve Firmware/Hardware/Software/Model/Serial Number
- Start Bike-Module
- Unlock Bike
- Set Region Settings
- Set Lightning Settings
- Set Power Level
- Set Units
- Show Firmware
- Reset Distance
- Pair Remote
- Error Logging
- Set Offroad Mode
- Update Firmware (not implemented)
- ...
- Electrified S/X 1 (2016/2017) - tested
- Smart S/X 1 (2018) - unsupported (work in progress)
- Electrified S/X 2 - untested (some parameters/functions missing)
- Electrified S/X 3 - unsupported (work in progress)
See full list.
- Chrome
- Mac: >56
- Linux: >56
- Windows: >70
- Edge: >79
- Firefox: unsupported
- Internet Explorer: unsupported
- Opera
- Mac: >43
- Linux: >43
- Windows: >57
- Safari: unsupported
- Android webview: unsupported
- Chrome for Android: >56
- Firefox for Android: unsupported
- Internet Explorer: unsupported
- Opera for Android: >43
- Safari on iOS: unsupported
- Samsung Internet: >6.0
Download pre build file from GitHub-Releases or add via NPM.
# Yarn
yarn add vanbike-lib
# NPM
npm i vanbike-lib# Development
yarn dev
# Production
yarn prodimport { VanBikeService, ElectrifiedSX1Profile, ModuleStateEntity, LockStateEntity } from 'vanbike-lib';
const bikeProfile = new ElectrifiedSX1Profile();
const vanBikeService = new VanBikeService(bikeProfile, 'ENCRYPTION-KEY');<script type="text/javascript" src="/dist/vanbike-lib.js"></script>const bikeProfile = new VanBikeLib.ElectrifiedSX1Profile();
const vanBikeService = new VanBikeLib.VanBikeService(bikeProfile, 'ENCRYPTION-KEY');
const ModuleStateEntity = VanBikeLib.ModuleStateEntity;
const LockStateEntity = VanBikeLib.LockStateEntity;For more examples see example folder.
// Event listener
vanBikeService.subscribe((parameters) => {
console.log(parameters);
});
// Connect
await vanBikeService.connect();
// Authenticate
await vanBikeService.authenticate();
// Turn on
const moduleState = new ModuleStateEntity();
moduleState.setState(moduleState.STATE_ON);
await vanBikeService.setModuleState(moduleState);
// Unlock
const lockState = new LockStateEntity();
lockState.setState(lockState.STATE_UNLOCKED);
await vanBikeService.setLockState(lockState);
// Disconnect
vanBikeService.disconnect();constructor(encryptionKey : string) : voidasync connect() : Promisedisconnect() : voidisConnected() : boolsubscribe(function callback) : Numberunsubscribe(handleIndex) : voidasync authenticate() : Promiseasync getParameters() : ParametersEntityasync getFirmwareRevision() : stringasync getHardwareRevision() : stringasync getSoftwareRevision() : stringasync getModelNumber() : stringasync getSerialNumber() : stringasync setModuleState(ModuleStateEntity moduleState) : Promiseasync setLockState(LockStateEntity lockState) : Promiseasync setLightningState(LightningStateEntity lightningState) : Promiseasync setPowerLevelState(PowerStateEntity powerState, RegionStateEntity regionState) : Promiseasync setUnitState(UnitStateEntity unitState) : Promiseasync showFirmware() : Promiseasync resetDistance() : Promiseasync pairRemote() : Promiseasync enableErrors() : Promiseasync disableErrors() : Promiseasync setOffroadMode() : Promise
Todo:
async startFirmwareUpdate(FirmwareEntity firmware) : Promiseasync stopFirmwareUpdate() : Promise
This project is not related to VanMoof. The guarantee expires with use.
The WebService calls the VanMoof API directly.
This is probably not possible in Browsers because of CORS-Policy.
Use a workaround with the Chrome-Plugin: Allow CORS: Access-Control-Allow-Origin.
Or use this service from NodeJS.
MIT