node-poweredup/docs/quicksearch.html

32 lines
142 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<html>
<head>
</head>
<body style="background: transparent;">
<script src="scripts/docstrap.lib.js"></script>
<script src="scripts/lunr.min.js"></script>
<script src="scripts/fulltext-search.js"></script>
<script type="text/x-docstrap-searchdb">
{"boostmovehub.js.html":{"id":"boostmovehub.js.html","title":"Source: boostmovehub.js","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Source: boostmovehub.js \"use strict\"; var __importStar = (this &amp;&amp; this.__importStar) || function (mod) { if (mod &amp;&amp; mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result[\"default\"] = mod; return result; }; Object.defineProperty(exports, \"__esModule\", { value: true }); const lpf2hub_1 = require(\"./lpf2hub\"); const port_1 = require(\"./port\"); const Consts = __importStar(require(\"./consts\")); const Debug = require(\"debug\"); const debug = Debug(\"boostmovehub\"); /** * The BoostMoveHub is emitted if the discovered device is a Boost Move Hub. * @class BoostMoveHub * @extends LPF2Hub * @extends Hub */ class BoostMoveHub extends lpf2hub_1.LPF2Hub { // We set JSDoc to ignore these events as a Boost Move Hub will never emit them. /** * @event BoostMoveHub#speed * @ignore */ static IsBoostMoveHub(peripheral) { return (peripheral.advertisement.serviceUuids.indexOf(Consts.BLEService.LPF2_HUB.replace(/-/g, \"\")) &gt;= 0 &amp;&amp; peripheral.advertisement.manufacturerData[3] === Consts.BLEManufacturerData.BOOST_MOVE_HUB_ID); } constructor(peripheral, autoSubscribe = true) { super(peripheral, autoSubscribe); this.type = Consts.HubType.BOOST_MOVE_HUB; this._ports = { \"A\": new port_1.Port(\"A\", 55), \"B\": new port_1.Port(\"B\", 56), \"AB\": new port_1.Port(\"AB\", 57), \"TILT\": new port_1.Port(\"TILT\", 58), \"C\": new port_1.Port(\"C\", 1), \"D\": new port_1.Port(\"D\", 2) }; debug(\"Discovered Boost Move Hub\"); } connect() { return new Promise(async (resolve, reject) =&gt; { debug(\"Connecting to Boost Move Hub\"); await super.connect(); debug(\"Connect completed\"); return resolve(); }); } /** * Set the motor speed on a given port. * @method BoostMoveHub#setMotorSpeed * @param {string} port * @param {number | Array.&lt;number&gt;} speed For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. If you are specifying port AB to control both motors, you can optionally supply a tuple of speeds. * @param {number} [time] How long to activate the motor for (in milliseconds). Leave empty to turn the motor on indefinitely. * @returns {Promise} Resolved upon successful completion of command. If time is specified, this is once the motor is finished. */ setMotorSpeed(port, speed, time) { const portObj = this._portLookup(port); if (portObj.id !== \"AB\" &amp;&amp; speed instanceof Array) { throw new Error(`Port ${portObj.id} can only accept a single speed`); } let cancelEventTimer = true; if (typeof time === \"boolean\") { if (time === true) { cancelEventTimer = false; } time = undefined; } if (cancelEventTimer) { portObj.cancelEventTimer(); } return new Promise((resolve, reject) =&gt; { if (time &amp;&amp; typeof time === \"number\") { if (portObj.type === Consts.DeviceType.BOOST_TACHO_MOTOR || portObj.type === Consts.DeviceType.BOOST_MOVE_HUB_MOTOR) { portObj.busy = true; let data = null; if (portObj.id === \"AB\") { data = Buffer.from([0x81, portObj.value, 0x11, 0x0a, 0x00, 0x00, this._mapSpeed(speed instanceof Array ? speed[0] : speed), this._mapSpeed(speed instanceof Array ? speed[1] : speed), 0x64, 0x7f, 0x03]); } else { // @ts-ignore: The type of speed is properly checked at the start data = Buffer.from([0x81, portObj.value, 0x11, 0x09, 0x00, 0x00, this._mapSpeed(speed), 0x64, 0x7f, 0x03]); } data.writeUInt16LE(time &gt; 65535 ? 65535 : time, 4); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); portObj.finished = () =&gt; { return resolve(); }; } else { // @ts-ignore: The type of speed is properly checked at the start const data = Buffer.from([0x81, portObj.value, 0x11, 0x51, 0x00, this._mapSpeed(speed)]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); const timeout = global.setTimeout(() =&gt; { const data = Buffer.from([0x81, portObj.value, 0x11, 0x51, 0x00, 0x00]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); // @ts-ignore: The type of time is properly checked at the start }, time); portObj.setEventTimer(timeout); } } else { if (portObj.type === Consts.DeviceType.BOOST_TACHO_MOTOR || portObj.type === Consts.DeviceType.BOOST_MOVE_HUB_MOTOR) { portObj.busy = true; let data = null; if (portObj.id === \"AB\") { data = Buffer.from([0x81, portObj.value, 0x11, 0x02, this._mapSpeed(speed instanceof Array ? speed[0] : speed), this._mapSpeed(speed instanceof Array ? speed[1] : speed), 0x64, 0x7f, 0x03]); } else { // @ts-ignore: The type of speed is properly checked at the start data = Buffer.from([0x81, portObj.value, 0x11, 0x01, this._mapSpeed(speed), 0x64, 0x7f, 0x03]); } this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); portObj.finished = () =&gt; { return resolve(); }; } else { // @ts-ignore: The type of speed is properly checked at the start const data = Buffer.from([0x81, portObj.value, 0x11, 0x51, 0x00, this._mapSpeed(speed)]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); } } }); } /** * Ramp the motor speed on a given port. * @method BoostMoveHub#rampMotorSpeed * @param {string} port * @param {number} fromSpeed For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. * @param {number} toSpeed For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. * @param {number} time How long the ramp should last (in milliseconds). * @returns {Promise} Resolved upon successful completion of command. */ rampMotorSpeed(port, fromSpeed, toSpeed, time) { const portObj = this._portLookup(port); portObj.cancelEventTimer(); return new Promise((resolve, reject) =&gt; { this._calculateRamp(fromSpeed, toSpeed, time, portObj) .on(\"changeSpeed\", (speed) =&gt; { this.setMotorSpeed(port, speed, true); }) .on(\"finished\", resolve); }); } /** * Rotate a motor by a given angle. * @method BoostMoveHub#setMotorAngle * @param {string} port * @param {number} angle How much the motor should be rotated (in degrees). * @param {number | Array.&lt;number&gt;} [speed=100] For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. If you are specifying port AB to control both motors, you can optionally supply a tuple of speeds. * @returns {Promise} Resolved upon successful completion of command (ie. once the motor is finished). */ setMotorAngle(port, angle, speed = 100) { const portObj = this._portLookup(port); if (!(portObj.type === Consts.DeviceType.BOOST_TACHO_MOTOR || portObj.type === Consts.DeviceType.BOOST_MOVE_HUB_MOTOR)) { throw new Error(\"Angle rotation is only available when using a Boost Tacho Motor or Boost Move Hub Motor\"); } if (portObj.id !== \"AB\" &amp;&amp; speed instanceof Array) { throw new Error(`Port ${portObj.id} can only accept a single speed`); } portObj.cancelEventTimer(); return new Promise((resolve, reject) =&gt; { portObj.busy = true; let data = null; if (portObj.id === \"AB\") { data = Buffer.from([0x81, portObj.value, 0x11, 0x0c, 0x00, 0x00, 0x00, 0x00, this._mapSpeed(speed instanceof Array ? speed[0] : speed), this._mapSpeed(speed instanceof Array ? speed[1] : speed), 0x64, 0x7f, 0x03]); } else { // @ts-ignore: The type of speed is properly checked at the start data = Buffer.from([0x81, portObj.value, 0x11, 0x0b, 0x00, 0x00, 0x00, 0x00, this._mapSpeed(speed), 0x64, 0x7f, 0x03]); } data.writeUInt32LE(angle, 4); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); portObj.finished = () =&gt; { return resolve(); }; }); } /** * Fully (hard) stop the motor on a given port. * @method BoostMoveHub#hardStopMotor * @param {string} port * @returns {Promise} Resolved upon successful completion of command. */ hardStopMotor(port) { return this.setMotorSpeed(port, 127); } /** * Set the light brightness on a given port. * @method BoostMoveHub#setLightBrightness * @param {string} port * @param {number} brightness Brightness value between 0-100 (0 is off) * @param {number} [time] How long to turn the light on (in milliseconds). Leave empty to turn the light on indefinitely. * @returns {Promise} Resolved upon successful completion of command. If time is specified, this is once the light is turned off. */ setLightBrightness(port, brightness, time) { const portObj = this._portLookup(port); portObj.cancelEventTimer(); return new Promise((resolve, reject) =&gt; { const data = Buffer.from([0x81, portObj.value, 0x11, 0x51, 0x00, brightness]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); if (time) { const timeout = global.setTimeout(() =&gt; { const data = Buffer.from([0x81, portObj.value, 0x11, 0x51, 0x00, 0x00]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); }, time); portObj.setEventTimer(timeout); } else { return resolve(); } }); } } exports.BoostMoveHub = BoostMoveHub; × Search results Close "},"hub.js.html":{"id":"hub.js.html","title":"Source: hub.js","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Source: hub.js \"use strict\"; var __importStar = (this &amp;&amp; this.__importStar) || function (mod) { if (mod &amp;&amp; mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result[\"default\"] = mod; return result; }; Object.defineProperty(exports, \"__esModule\", { value: true }); const events_1 = require(\"events\"); const Consts = __importStar(require(\"./consts\")); const Debug = require(\"debug\"); const debug = Debug(\"hub\"); /** * @class Hub * @extends EventEmitter */ class Hub extends events_1.EventEmitter { constructor(peripheral, autoSubscribe = true) { super(); this.autoSubscribe = true; this.useSpeedMap = true; this.type = Consts.HubType.UNKNOWN; this._ports = {}; this._characteristics = {}; this._firmwareInfo = { major: 0, minor: 0, bugFix: 0, build: 0 }; this._batteryLevel = 100; this._voltage = 0; this._current = 0; this._rssi = -100; this.autoSubscribe = !!autoSubscribe; this._peripheral = peripheral; this._uuid = peripheral.uuid; this._name = peripheral.advertisement.localName; } /** * @readonly * @property {string} name Name of the hub */ get name() { return this._name; } /** * @readonly * @property {string} firmwareVersion Firmware version of the hub */ get firmwareVersion() { return `${this._firmwareInfo.major}.${this._firmwareInfo.minor}.${this._lpad(this._firmwareInfo.bugFix.toString(), 2)}.${this._lpad(this._firmwareInfo.build.toString(), 4)}`; } /** * @readonly * @property {string} uuid UUID of the hub */ get uuid() { return this._uuid; } /** * @readonly * @property {number} rssi Signal strength of the hub */ get rssi() { return this._rssi; } /** * @readonly * @property {number} batteryLevel Battery level of the hub (Percentage between 0-100) */ get batteryLevel() { return this._batteryLevel; } /** * @readonly * @property {number} voltage Voltage of the hub (Volts) */ get voltage() { return this._voltage; } // /** // * @readonly // * @property {number} current Current usage of the hub (Amps) // */ // public get current () { // return this._current; // } /** * Connect to the Hub. * @method Hub#connect * @returns {Promise} Resolved upon successful connect. */ connect() { return new Promise((connectResolve, connectReject) =&gt; { const self = this; this._peripheral.connect((err) =&gt; { this._rssi = this._peripheral.rssi; const rssiUpdateInterval = setInterval(() =&gt; { this._peripheral.updateRssi((err, rssi) =&gt; { if (!err) { if (this._rssi !== rssi) { this._rssi = rssi; } } }); }, 2000); self._peripheral.on(\"disconnect\", () =&gt; { clearInterval(rssiUpdateInterval); this.emit(\"disconnect\"); }); self._peripheral.discoverServices([], (err, services) =&gt; { if (err) { this.emit(\"error\", err); return; } debug(\"Service/characteristic discovery started\"); const servicePromises = []; services.forEach((service) =&gt; { servicePromises.push(new Promise((resolve, reject) =&gt; { service.discoverCharacteristics([], (err, characteristics) =&gt; { characteristics.forEach((characteristic) =&gt; { this._characteristics[characteristic.uuid] = characteristic; }); return resolve(); }); })); }); Promise.all(servicePromises).then(() =&gt; { debug(\"Service/characteristic discovery finished\"); this.emit(\"connect\"); return connectResolve(); }); }); }); }); } /** * Disconnect the Hub. * @method Hub#disconnect * @returns {Promise} Resolved upon successful disconnect. */ disconnect() { return new Promise((resolve, reject) =&gt; { this._peripheral.disconnect(() =&gt; { return resolve(); }); }); } /** * Subscribe to sensor notifications on a given port. * @method Hub#subscribe * @param {string} port * @param {number} [mode] The sensor mode to activate. If no mode is provided, the default for that sensor will be chosen. * @returns {Promise} Resolved upon successful issuance of command. */ subscribe(port, mode) { return new Promise((resolve, reject) =&gt; { let newMode = this._getModeForDeviceType(this._portLookup(port).type); if (mode) { newMode = mode; } this._activatePortDevice(this._portLookup(port).value, this._portLookup(port).type, newMode, 0x00, () =&gt; { return resolve(); }); }); } /** * Unsubscribe to sensor notifications on a given port. * @method Hub#unsubscribe * @param {string} port * @returns {Promise} Resolved upon successful issuance of command. */ unsubscribe(port) { return new Promise((resolve, reject) =&gt; { const mode = this._getModeForDeviceType(this._portLookup(port).type); this._deactivatePortDevice(this._portLookup(port).value, this._portLookup(port).type, mode, 0x00, () =&gt; { return resolve(); }); }); } /** * Sleep a given amount of time. * * This is a helper method to make it easier to add delays into a chain of commands. * @method Hub#sleep * @param {number} delay How long to sleep (in milliseconds). * @returns {Promise} Resolved after the delay is finished. */ sleep(delay) { return new Promise((resolve) =&gt; { global.setTimeout(resolve, delay); }); } /** * Wait until a given list of concurrently running commands are complete. * * This is a helper method to make it easier to wait for concurrent commands to complete. * @method Hub#wait * @param {Array&lt;Promise&lt;any&gt;&gt;} commands Array of executing commands. * @returns {Promise} Resolved after the commands are finished. */ wait(commands) { return Promise.all(commands); } /** * Get the hub type. * @method Hub#getHubType * @returns {HubType} */ getHubType() { return this.type; } /** * Get the device type for a given port. * @method Hub#getPortDeviceType * @param {string} port * @returns {DeviceType} */ getPortDeviceType(port) { return this._portLookup(port).type; } _getCharacteristic(uuid) { return this._characteristics[uuid.replace(/-/g, \"\")]; } _subscribeToCharacteristic(characteristic, callback) { characteristic.on(\"data\", (data) =&gt; { return callback(data); }); characteristic.subscribe((err) =&gt; { if (err) { this.emit(\"error\", err); } }); } _activatePortDevice(port, type, mode, format, callback) { if (callback) { callback(); } } _deactivatePortDevice(port, type, mode, format, callback) { if (callback) { callback(); } } _registerDeviceAttachment(port, type) { if (port.connected) { port.type = type; if (this.autoSubscribe) { this._activatePortDevice(port.value, type, this._getModeForDeviceType(type), 0x00); /** * Emits when a motor or sensor is attached to the Hub. * @event Hub#attach * @param {string} port * @param {DeviceType} type */ this.emit(\"attach\", port.id, type); } } else { port.type = Consts.DeviceType.UNKNOWN; debug(`Port ${port.id} disconnected`); /** * Emits when an attached motor or sensor is detached from the Hub. * @event Hub#detach * @param {string} port */ this.emit(\"detach\", port.id); } } _getPortForPortNumber(num) { for (const key of Object.keys(this._ports)) { if (this._ports[key].value === num) { return this._ports[key]; } } return false; } _mapSpeed(speed) { if (!this.useSpeedMap) { return speed; } if (speed === 127) { return 127; // Hard stop } if (speed &gt; 100) { speed = 100; } else if (speed &lt; -100) { speed = -100; } return speed; } _calculateRamp(fromSpeed, toSpeed, time, port) { const emitter = new events_1.EventEmitter(); const steps = Math.abs(toSpeed - fromSpeed); let delay = time / steps; let increment = 1; if (delay &lt; 50 &amp;&amp; steps &gt; 0) { increment = 50 / delay; delay = 50; } if (fromSpeed &gt; toSpeed) { increment = -increment; } let i = 0; const interval = setInterval(() =&gt; { let speed = Math.round(fromSpeed + (++i * increment)); if (toSpeed &gt; fromSpeed &amp;&amp; speed &gt; toSpeed) { speed = toSpeed; } else if (fromSpeed &gt; toSpeed &amp;&amp; speed &lt; toSpeed) { speed = toSpeed; } emitter.emit(\"changeSpeed\", speed); if (speed === toSpeed) { clearInterval(interval); emitter.emit(\"finished\"); } }, delay); port.setEventTimer(interval); return emitter; } _portLookup(port) { if (!this._ports[port.toUpperCase()]) { throw new Error(`Port ${port.toUpperCase()} does not exist on this Hub type`); } return this._ports[port]; } _lpad(str, length) { while (str.length &lt; length) { str = \"0\" + str; } return str; } _getModeForDeviceType(type) { switch (type) { case Consts.DeviceType.BASIC_MOTOR: return 0x02; case Consts.DeviceType.TRAIN_MOTOR: return 0x02; case Consts.DeviceType.BOOST_TACHO_MOTOR: return 0x02; case Consts.DeviceType.BOOST_MOVE_HUB_MOTOR: return 0x02; case Consts.DeviceType.BOOST_DISTANCE: return (this.type === Consts.HubType.WEDO2_SMART_HUB ? 0x00 : 0x08); case Consts.DeviceType.BOOST_TILT: return 0x04; default: return 0x00; } } } exports.Hub = Hub; × Search results Close "},"lpf2hub.js.html":{"id":"lpf2hub.js.html","title":"Source: lpf2hub.js","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Source: lpf2hub.js \"use strict\"; var __importStar = (this &amp;&amp; this.__importStar) || function (mod) { if (mod &amp;&amp; mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result[\"default\"] = mod; return result; }; Object.defineProperty(exports, \"__esModule\", { value: true }); const hub_1 = require(\"./hub\"); const Consts = __importStar(require(\"./consts\")); const Debug = require(\"debug\"); const debug = Debug(\"lpf2hub\"); /** * @class LPF2Hub * @extends Hub */ class LPF2Hub extends hub_1.Hub { constructor() { super(...arguments); this._lastTiltX = 0; this._lastTiltY = 0; this._messageBuffer = Buffer.alloc(0); } connect() { return new Promise(async (resolve, reject) =&gt; { await super.connect(); const characteristic = this._getCharacteristic(Consts.BLECharacteristic.LPF2_ALL); this._subscribeToCharacteristic(characteristic, this._parseMessage.bind(this)); setTimeout(() =&gt; { this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x01, 0x02, 0x02])); // Activate button reports this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x01, 0x03, 0x05])); // Request firmware version this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x01, 0x06, 0x02])); // Activate battery level reports this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x41, 0x3c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01])); // Activate voltage reports this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x41, 0x3b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01])); // Activate current reports if (this.type === Consts.HubType.DUPLO_TRAIN_HUB) { this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x41, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01])); } }, 1000); return resolve(); }); } /** * Set the name of the Hub. * @method LPF2Hub#setName * @param {string} name New name of the hub (14 characters or less, ASCII only). * @returns {Promise} Resolved upon successful issuance of command. */ setName(name) { if (name.length &gt; 14) { throw new Error(\"Name must be 14 characters or less\"); } return new Promise((resolve, reject) =&gt; { let data = Buffer.from([0x01, 0x01, 0x01]); data = Buffer.concat([data, Buffer.from(name, \"ascii\")]); // Send this twice, as sometimes the first time doesn't take this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); this._name = name; return resolve(); }); } /** * Set the color of the LED on the Hub via a color value. * @method LPF2Hub#setLEDColor * @param {Color} color * @returns {Promise} Resolved upon successful issuance of command. */ setLEDColor(color) { return new Promise((resolve, reject) =&gt; { let data = Buffer.from([0x41, 0x32, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); if (color === false) { color = 0; } data = Buffer.from([0x81, 0x32, 0x11, 0x51, 0x00, color]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); }); } /** * Set the color of the LED on the Hub via RGB values. * @method LPF2Hub#setLEDRGB * @param {number} red * @param {number} green * @param {number} blue * @returns {Promise} Resolved upon successful issuance of command. */ setLEDRGB(red, green, blue) { return new Promise((resolve, reject) =&gt; { let data = Buffer.from([0x41, 0x32, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); data = Buffer.from([0x81, 0x32, 0x11, 0x51, 0x01, red, green, blue]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); }); } sendRaw(message) { return new Promise((resolve, reject) =&gt; { this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, message, () =&gt; { return resolve(); }); }); } _activatePortDevice(port, type, mode, format, callback) { this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x41, port, mode, 0x01, 0x00, 0x00, 0x00, 0x01]), callback); } _deactivatePortDevice(port, type, mode, format, callback) { this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x41, port, mode, 0x01, 0x00, 0x00, 0x00, 0x00]), callback); } _writeMessage(uuid, message, callback) { const characteristic = this._getCharacteristic(uuid); if (characteristic) { message = Buffer.concat([Buffer.alloc(2), message]); message[0] = message.length; characteristic.write(message, false, callback); } } _parseMessage(data) { if (data) { this._messageBuffer = Buffer.concat([this._messageBuffer, data]); } if (this._messageBuffer.length &lt;= 0) { return; } const len = this._messageBuffer[0]; if (len &gt;= this._messageBuffer.length) { const message = this._messageBuffer.slice(0, len); this._messageBuffer = this._messageBuffer.slice(len); switch (message[2]) { case 0x01: { this._parseDeviceInfo(message); break; } case 0x04: { this._parsePortMessage(message); break; } case 0x45: { this._parseSensorMessage(message); break; } case 0x82: { this._parsePortAction(message); break; } } if (this._messageBuffer.length &gt; 0) { this._parseMessage(); } } } _parseDeviceInfo(data) { // Button press reports if (data[3] === 0x02) { if (data[5] === 1) { /** * Emits when a button is pressed. * @event LPF2Hub#button * @param {string} button * @param {ButtonState} state */ this.emit(\"button\", \"GREEN\", Consts.ButtonState.PRESSED); return; } else if (data[5] === 0) { this.emit(\"button\", \"GREEN\", Consts.ButtonState.RELEASED); return; } // Firmware version } else if (data[3] === 0x03) { const build = data.readUInt16LE(5); const bugFix = data.readUInt8(7); const major = data.readUInt8(8) &gt;&gt;&gt; 4; const minor = data.readUInt8(8) &amp; 0xf; this._firmwareInfo = { major, minor, bugFix, build }; // Battery level reports } else if (data[3] === 0x06) { this._batteryLevel = data[5]; } } _parsePortMessage(data) { const port = this._getPortForPortNumber(data[3]); if (!port) { return; } port.connected = (data[4] === 1 || data[4] === 2) ? true : false; this._registerDeviceAttachment(port, data[5]); } _parsePortAction(data) { const port = this._getPortForPortNumber(data[3]); if (!port) { return; } if (data[4] === 0x0a) { port.busy = false; if (port.finished) { port.finished(); port.finished = null; } } } _padMessage(data, len) { if (data.length &lt; len) { data = Buffer.concat([data, Buffer.alloc(len - data.length)]); } return data; } _parseSensorMessage(data) { if ((data[3] === 0x3b &amp;&amp; this.type === Consts.HubType.POWERED_UP_REMOTE)) { // Voltage (PUP Remote) data = this._padMessage(data, 6); const voltage = data.readUInt16LE(4) / 500; this._voltage = voltage; return; } else if (data[3] === 0x3c &amp;&amp; this.type === Consts.HubType.POWERED_UP_REMOTE) { // Current (PUP Remote) data = this._padMessage(data, 6); const current = data.readUInt16LE(4); this._current = current; return; } else if (data[3] === 0x3c &amp;&amp; this.type !== Consts.HubType.POWERED_UP_REMOTE) { // Voltage (Non-PUP Remote) data = this._padMessage(data, 6); const voltage = data.readUInt16LE(4) / 400; this._voltage = voltage; return; } else if (data[3] === 0x3b &amp;&amp; this.type !== Consts.HubType.POWERED_UP_REMOTE) { // Current (Non-PUP Remote) data = this._padMessage(data, 6); const current = data.readUInt16LE(4) / 1000; this._current = current; return; } const port = this._getPortForPortNumber(data[3]); if (!port) { return; } if (port &amp;&amp; port.connected) { switch (port.type) { case Consts.DeviceType.WEDO2_DISTANCE: { let distance = data[4]; if (data[5] === 1) { distance = data[4] + 255; } /** * Emits when a distance sensor is activated. * @event LPF2Hub#distance * @param {string} port * @param {number} distance Distance, in millimeters. */ this.emit(\"distance\", port.id, distance * 10); break; } case Consts.DeviceType.BOOST_DISTANCE: { /** * Emits when a color sensor is activated. * @event LPF2Hub#color * @param {string} port * @param {Color} color */ if (data[4] &lt;= 10) { this.emit(\"color\", port.id, data[4]); } let distance = data[5]; const partial = data[7]; if (partial &gt; 0) { distance += 1.0 / partial; } distance = Math.floor(distance * 25.4) - 20; this.emit(\"distance\", port.id, distance); /** * A combined color and distance event, emits when the sensor is activated. * @event LPF2Hub#colorAndDistance * @param {string} port * @param {Color} color * @param {number} distance Distance, in millimeters. */ if (data[4] &lt;= 10) { this.emit(\"colorAndDistance\", port.id, data[4], distance); } break; } case Consts.DeviceType.WEDO2_TILT: { const tiltX = data[4] &gt; 160 ? data[4] - 255 : data[4] - (data[4] * 2); const tiltY = data[5] &gt; 160 ? 255 - data[5] : data[5] - (data[5] * 2); this._lastTiltX = tiltX; this._lastTiltY = tiltY; /** * Emits when a tilt sensor is activated. * @event LPF2Hub#tilt * @param {string} port If the event is fired from the Move Hub's in-built tilt sensor, the special port \"TILT\" is used. * @param {number} x * @param {number} y */ this.emit(\"tilt\", port.id, this._lastTiltX, this._lastTiltY); break; } case Consts.DeviceType.BOOST_TACHO_MOTOR: { const rotation = data.readInt32LE(4); /** * Emits when a rotation sensor is activated. * @event LPF2Hub#rotate * @param {string} port * @param {number} rotation */ this.emit(\"rotate\", port.id, rotation); break; } case Consts.DeviceType.BOOST_MOVE_HUB_MOTOR: { const rotation = data.readInt32LE(4); this.emit(\"rotate\", port.id, rotation); break; } case Consts.DeviceType.BOOST_TILT: { const tiltX = data[4] &gt; 160 ? data[4] - 255 : data[4]; const tiltY = data[5] &gt; 160 ? 255 - data[5] : data[5] - (data[5] * 2); this.emit(\"tilt\", port.id, tiltX, tiltY); break; } case Consts.DeviceType.POWERED_UP_REMOTE_BUTTON: { switch (data[4]) { case 0x01: { this.emit(\"button\", port.id, Consts.ButtonState.UP); break; } case 0xff: { this.emit(\"button\", port.id, Consts.ButtonState.DOWN); break; } case 0x7f: { this.emit(\"button\", port.id, Consts.ButtonState.STOP); break; } case 0x00: { this.emit(\"button\", port.id, Consts.ButtonState.RELEASED); break; } } break; } case Consts.DeviceType.DUPLO_TRAIN_BASE_COLOR: { if (data[4] &lt;= 10) { this.emit(\"color\", port.id, data[4]); } break; } case Consts.DeviceType.DUPLO_TRAIN_BASE_SPEEDOMETER: { /** * Emits on a speed change. * @event LPF2Hub#speed * @param {string} port * @param {number} speed */ const speed = data.readInt16LE(4); this.emit(\"speed\", port.id, speed); break; } } } } } exports.LPF2Hub = LPF2Hub; × Search results Close "},"consts.js.html":{"id":"consts.js.html","title":"Source: consts.js","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Source: consts.js \"use strict\"; Object.defineProperty(exports, \"__esModule\", { value: true }); /** * @typedef HubType * @property {number} UNKNOWN 0 * @property {number} WEDO2_SMART_HUB 1 * @property {number} BOOST_MOVE_HUB 2 * @property {number} POWERED_UP_HUB 3 * @property {number} POWERED_UP_REMOTE 4 * @property {number} DUPLO_TRAIN_HUB 5 */ var HubType; (function (HubType) { HubType[HubType[\"UNKNOWN\"] = 0] = \"UNKNOWN\"; HubType[HubType[\"WEDO2_SMART_HUB\"] = 1] = \"WEDO2_SMART_HUB\"; HubType[HubType[\"BOOST_MOVE_HUB\"] = 2] = \"BOOST_MOVE_HUB\"; HubType[HubType[\"POWERED_UP_HUB\"] = 3] = \"POWERED_UP_HUB\"; HubType[HubType[\"POWERED_UP_REMOTE\"] = 4] = \"POWERED_UP_REMOTE\"; HubType[HubType[\"DUPLO_TRAIN_HUB\"] = 5] = \"DUPLO_TRAIN_HUB\"; })(HubType = exports.HubType || (exports.HubType = {})); /** * @typedef DeviceType * @property {number} UNKNOWN 0 * @property {number} BASIC_MOTOR 1 * @property {number} TRAIN_MOTOR 2 * @property {number} LED_LIGHTS 8 * @property {number} BOOST_LED 22 * @property {number} WEDO2_TILT 34 * @property {number} WEDO2_DISTANCE 35 * @property {number} BOOST_DISTANCE 37 * @property {number} BOOST_TACHO_MOTOR 38 * @property {number} BOOST_MOVE_HUB_MOTOR 39 * @property {number} BOOST_TILT 40 * @property {number} DUPLO_TRAIN_BASE_MOTOR 41 * @property {number} DUPLO_TRAIN_BASE_SPEAKER 42 * @property {number} DUPLO_TRAIN_BASE_COLOR 43 * @property {number} DUPLO_TRAIN_BASE_SPEEDOMETER 44 * @property {number} POWERED_UP_REMOTE_BUTTON 55 */ var DeviceType; (function (DeviceType) { DeviceType[DeviceType[\"UNKNOWN\"] = 0] = \"UNKNOWN\"; DeviceType[DeviceType[\"BASIC_MOTOR\"] = 1] = \"BASIC_MOTOR\"; DeviceType[DeviceType[\"TRAIN_MOTOR\"] = 2] = \"TRAIN_MOTOR\"; DeviceType[DeviceType[\"LED_LIGHTS\"] = 8] = \"LED_LIGHTS\"; DeviceType[DeviceType[\"BOOST_LED\"] = 22] = \"BOOST_LED\"; DeviceType[DeviceType[\"WEDO2_TILT\"] = 34] = \"WEDO2_TILT\"; DeviceType[DeviceType[\"WEDO2_DISTANCE\"] = 35] = \"WEDO2_DISTANCE\"; DeviceType[DeviceType[\"BOOST_DISTANCE\"] = 37] = \"BOOST_DISTANCE\"; DeviceType[DeviceType[\"BOOST_TACHO_MOTOR\"] = 38] = \"BOOST_TACHO_MOTOR\"; DeviceType[DeviceType[\"BOOST_MOVE_HUB_MOTOR\"] = 39] = \"BOOST_MOVE_HUB_MOTOR\"; DeviceType[DeviceType[\"BOOST_TILT\"] = 40] = \"BOOST_TILT\"; DeviceType[DeviceType[\"DUPLO_TRAIN_BASE_MOTOR\"] = 41] = \"DUPLO_TRAIN_BASE_MOTOR\"; DeviceType[DeviceType[\"DUPLO_TRAIN_BASE_SPEAKER\"] = 42] = \"DUPLO_TRAIN_BASE_SPEAKER\"; DeviceType[DeviceType[\"DUPLO_TRAIN_BASE_COLOR\"] = 43] = \"DUPLO_TRAIN_BASE_COLOR\"; DeviceType[DeviceType[\"DUPLO_TRAIN_BASE_SPEEDOMETER\"] = 44] = \"DUPLO_TRAIN_BASE_SPEEDOMETER\"; DeviceType[DeviceType[\"POWERED_UP_REMOTE_BUTTON\"] = 55] = \"POWERED_UP_REMOTE_BUTTON\"; })(DeviceType = exports.DeviceType || (exports.DeviceType = {})); /** * @typedef Color * @property {number} BLACK 0 * @property {number} PINK 1 * @property {number} PURPLE 2 * @property {number} BLUE 3 * @property {number} LIGHT_BLUE 4 * @property {number} CYAN 5 * @property {number} GREEN 6 * @property {number} YELLOW 7 * @property {number} ORANGE 8 * @property {number} RED 9 * @property {number} WHITE 10 * @property {number} NONE 255 */ var Color; (function (Color) { Color[Color[\"BLACK\"] = 0] = \"BLACK\"; Color[Color[\"PINK\"] = 1] = \"PINK\"; Color[Color[\"PURPLE\"] = 2] = \"PURPLE\"; Color[Color[\"BLUE\"] = 3] = \"BLUE\"; Color[Color[\"LIGHT_BLUE\"] = 4] = \"LIGHT_BLUE\"; Color[Color[\"CYAN\"] = 5] = \"CYAN\"; Color[Color[\"GREEN\"] = 6] = \"GREEN\"; Color[Color[\"YELLOW\"] = 7] = \"YELLOW\"; Color[Color[\"ORANGE\"] = 8] = \"ORANGE\"; Color[Color[\"RED\"] = 9] = \"RED\"; Color[Color[\"WHITE\"] = 10] = \"WHITE\"; Color[Color[\"NONE\"] = 255] = \"NONE\"; })(Color = exports.Color || (exports.Color = {})); /** * @typedef ButtonState * @property {number} PRESSED 0 * @property {number} RELEASED 1 * @property {number} UP 2 * @property {number} DOWN 3 * @property {number} STOP 4 */ var ButtonState; (function (ButtonState) { ButtonState[ButtonState[\"PRESSED\"] = 0] = \"PRESSED\"; ButtonState[ButtonState[\"RELEASED\"] = 1] = \"RELEASED\"; ButtonState[ButtonState[\"UP\"] = 2] = \"UP\"; ButtonState[ButtonState[\"DOWN\"] = 3] = \"DOWN\"; ButtonState[ButtonState[\"STOP\"] = 4] = \"STOP\"; })(ButtonState = exports.ButtonState || (exports.ButtonState = {})); /** * @typedef DuploTrainBaseSound * @property {number} BRAKE 3 * @property {number} STATION_DEPARTURE 5 * @property {number} WATER_REFILL 7 * @property {number} HORN 9 * @property {number} STEAM 10 */ var DuploTrainBaseSound; (function (DuploTrainBaseSound) { DuploTrainBaseSound[DuploTrainBaseSound[\"BRAKE\"] = 3] = \"BRAKE\"; DuploTrainBaseSound[DuploTrainBaseSound[\"STATION_DEPARTURE\"] = 5] = \"STATION_DEPARTURE\"; DuploTrainBaseSound[DuploTrainBaseSound[\"WATER_REFILL\"] = 7] = \"WATER_REFILL\"; DuploTrainBaseSound[DuploTrainBaseSound[\"HORN\"] = 9] = \"HORN\"; DuploTrainBaseSound[DuploTrainBaseSound[\"STEAM\"] = 10] = \"STEAM\"; })(DuploTrainBaseSound = exports.DuploTrainBaseSound || (exports.DuploTrainBaseSound = {})); var BLEManufacturerData; (function (BLEManufacturerData) { BLEManufacturerData[BLEManufacturerData[\"BOOST_MOVE_HUB_ID\"] = 64] = \"BOOST_MOVE_HUB_ID\"; BLEManufacturerData[BLEManufacturerData[\"POWERED_UP_HUB_ID\"] = 65] = \"POWERED_UP_HUB_ID\"; BLEManufacturerData[BLEManufacturerData[\"POWERED_UP_REMOTE_ID\"] = 66] = \"POWERED_UP_REMOTE_ID\"; BLEManufacturerData[BLEManufacturerData[\"DUPLO_TRAIN_HUB_ID\"] = 32] = \"DUPLO_TRAIN_HUB_ID\"; })(BLEManufacturerData = exports.BLEManufacturerData || (exports.BLEManufacturerData = {})); var BLEService; (function (BLEService) { BLEService[\"WEDO2_SMART_HUB\"] = \"00001523-1212-efde-1523-785feabcd123\"; BLEService[\"LPF2_HUB\"] = \"00001623-1212-efde-1623-785feabcd123\"; })(BLEService = exports.BLEService || (exports.BLEService = {})); var BLECharacteristic; (function (BLECharacteristic) { BLECharacteristic[\"WEDO2_BATTERY\"] = \"2a19\"; BLECharacteristic[\"WEDO2_FIRMWARE_REVISION\"] = \"2a26\"; BLECharacteristic[\"WEDO2_BUTTON\"] = \"00001526-1212-efde-1523-785feabcd123\"; BLECharacteristic[\"WEDO2_PORT_TYPE\"] = \"00001527-1212-efde-1523-785feabcd123\"; BLECharacteristic[\"WEDO2_LOW_VOLTAGE_ALERT\"] = \"00001528-1212-efde-1523-785feabcd123\"; BLECharacteristic[\"WEDO2_HIGH_CURRENT_ALERT\"] = \"00001529-1212-efde-1523-785feabcd123\"; BLECharacteristic[\"WEDO2_LOW_SIGNAL_ALERT\"] = \"0000152a-1212-efde-1523-785feabcd123\"; BLECharacteristic[\"WEDO2_SENSOR_VALUE\"] = \"00001560-1212-efde-1523-785feabcd123\"; BLECharacteristic[\"WEDO2_VALUE_FORMAT\"] = \"00001561-1212-efde-1523-785feabcd123\"; BLECharacteristic[\"WEDO2_PORT_TYPE_WRITE\"] = \"00001563-1212-efde-1523-785feabcd123\"; BLECharacteristic[\"WEDO2_MOTOR_VALUE_WRITE\"] = \"00001565-1212-efde-1523-785feabcd123\"; BLECharacteristic[\"WEDO2_NAME_ID\"] = \"00001524-1212-efde-1523-785feabcd123\"; BLECharacteristic[\"LPF2_ALL\"] = \"00001624-1212-efde-1623-785feabcd123\"; })(BLECharacteristic = exports.BLECharacteristic || (exports.BLECharacteristic = {})); × Search results Close "},"duplotrainbase.js.html":{"id":"duplotrainbase.js.html","title":"Source: duplotrainbase.js","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Source: duplotrainbase.js \"use strict\"; var __importStar = (this &amp;&amp; this.__importStar) || function (mod) { if (mod &amp;&amp; mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result[\"default\"] = mod; return result; }; Object.defineProperty(exports, \"__esModule\", { value: true }); const lpf2hub_1 = require(\"./lpf2hub\"); const port_1 = require(\"./port\"); const Consts = __importStar(require(\"./consts\")); const Debug = require(\"debug\"); const debug = Debug(\"duploTrainBase\"); /** * The DuploTrainBase is emitted if the discovered device is a Duplo Train Base. * @class DuploTrainBase * @extends LPF2Hub * @extends Hub */ class DuploTrainBase extends lpf2hub_1.LPF2Hub { // We set JSDoc to ignore these events as a Duplo Train Base will never emit them. /** * @event DuploTrainBase#distance * @ignore */ /** * @event DuploTrainBase#colorAndDistance * @ignore */ /** * @event DuploTrainBase#tilt * @ignore */ /** * @event DuploTrainBase#rotate * @ignore */ /** * @event DuploTrainBase#button * @ignore */ /** * @event DuploTrainBase#attach * @ignore */ /** * @event DuploTrainBase#detach * @ignore */ static IsDuploTrainBase(peripheral) { return (peripheral.advertisement.serviceUuids.indexOf(Consts.BLEService.LPF2_HUB.replace(/-/g, \"\")) &gt;= 0 &amp;&amp; peripheral.advertisement.manufacturerData[3] === Consts.BLEManufacturerData.DUPLO_TRAIN_HUB_ID); } constructor(peripheral, autoSubscribe = true) { super(peripheral, autoSubscribe); this.type = Consts.HubType.DUPLO_TRAIN_HUB; this._ports = { \"MOTOR\": new port_1.Port(\"MOTOR\", 0), \"COLOR\": new port_1.Port(\"COLOR\", 18), \"SPEEDOMETER\": new port_1.Port(\"SPEEDOMETER\", 19) }; debug(\"Discovered Duplo Train Base\"); } connect() { return new Promise(async (resolve, reject) =&gt; { debug(\"Connecting to Duplo Train Base\"); await super.connect(); debug(\"Connect completed\"); return resolve(); }); } /** * Set the color of the LED on the train via a color value. * @method DuploTrainBase#setLEDColor * @param {Color} color * @returns {Promise} Resolved upon successful issuance of command. */ setLEDColor(color) { return new Promise((resolve, reject) =&gt; { if (color === false) { color = 0; } const data = Buffer.from([0x81, 0x11, 0x11, 0x51, 0x00, color]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); }); } /** * Set the motor speed on a given port. * @method DuploTrainBase#setMotorSpeed * @param {string} port * @param {number | Array.&lt;number&gt;} speed For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. If you are specifying port AB to control both motors, you can optionally supply a tuple of speeds. * @param {number} [time] How long to activate the motor for (in milliseconds). Leave empty to turn the motor on indefinitely. * @returns {Promise} Resolved upon successful completion of command. If time is specified, this is once the motor is finished. */ setMotorSpeed(port, speed, time) { const portObj = this._portLookup(port); let cancelEventTimer = true; if (typeof time === \"boolean\") { if (time === true) { cancelEventTimer = false; } time = undefined; } if (cancelEventTimer) { portObj.cancelEventTimer(); } return new Promise((resolve, reject) =&gt; { if (time &amp;&amp; typeof time === \"number\") { const data = Buffer.from([0x81, portObj.value, 0x11, 0x51, 0x00, this._mapSpeed(speed)]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); const timeout = global.setTimeout(() =&gt; { const data = Buffer.from([0x81, portObj.value, 0x11, 0x51, 0x00, 0x00]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); }, time); portObj.setEventTimer(timeout); } else { const data = Buffer.from([0x81, portObj.value, 0x11, 0x51, 0x00, this._mapSpeed(speed)]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); } }); } /** * Ramp the motor speed on a given port. * @method DuploTrainBase#rampMotorSpeed * @param {string} port * @param {number} fromSpeed For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. * @param {number} toSpeed For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. * @param {number} time How long the ramp should last (in milliseconds). * @returns {Promise} Resolved upon successful completion of command. */ rampMotorSpeed(port, fromSpeed, toSpeed, time) { const portObj = this._portLookup(port); portObj.cancelEventTimer(); return new Promise((resolve, reject) =&gt; { this._calculateRamp(fromSpeed, toSpeed, time, portObj) .on(\"changeSpeed\", (speed) =&gt; { this.setMotorSpeed(port, speed, true); }) .on(\"finished\", resolve); }); } /** * Fully (hard) stop the motor on a given port. * @method DuploTrainBase#hardStopMotor * @param {string} port * @returns {Promise} Resolved upon successful completion of command. */ hardStopMotor(port) { return this.setMotorSpeed(port, 127); } /** * Play a built-in train sound. * @method DuploTrainBase#playSound * @param {DuploTrainBaseSound} sound * @returns {Promise} Resolved upon successful issuance of command. */ playSound(sound) { return new Promise((resolve, reject) =&gt; { const data = Buffer.from([0x81, 0x01, 0x11, 0x51, 0x01, sound]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); }); } } exports.DuploTrainBase = DuploTrainBase; × Search results Close "},"poweredup.js.html":{"id":"poweredup.js.html","title":"Source: poweredup.js","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Source: poweredup.js \"use strict\"; var __importStar = (this &amp;&amp; this.__importStar) || function (mod) { if (mod &amp;&amp; mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result[\"default\"] = mod; return result; }; Object.defineProperty(exports, \"__esModule\", { value: true }); const boostmovehub_1 = require(\"./boostmovehub\"); const duplotrainbase_1 = require(\"./duplotrainbase\"); const puphub_1 = require(\"./puphub\"); const pupremote_1 = require(\"./pupremote\"); const wedo2smarthub_1 = require(\"./wedo2smarthub\"); const utils_1 = require(\"./utils\"); const Consts = __importStar(require(\"./consts\")); const events_1 = require(\"events\"); const Debug = require(\"debug\"); const debug = Debug(\"PoweredUP\"); const noble = require(\"noble-mac\"); let ready = false; let wantScan = false; let discoveryEventAttached = false; const startScanning = () =&gt; { if (utils_1.isBrowserContext) { noble.startScanning([Consts.BLEService.WEDO2_SMART_HUB, Consts.BLEService.LPF2_HUB]); } else { noble.startScanning(); } }; noble.on(\"stateChange\", (state) =&gt; { ready = (state === \"poweredOn\"); if (ready) { if (wantScan) { debug(\"Scanning started\"); startScanning(); } } else { noble.stopScanning(); } }); /** * @class PoweredUP * @extends EventEmitter */ class PoweredUP extends events_1.EventEmitter { constructor() { super(); this.autoSubscribe = true; this._connectedHubs = {}; this._discoveryEventHandler = this._discoveryEventHandler.bind(this); } /** * Begin scanning for Powered UP Hub devices. * @method PoweredUP#scan */ scan() { wantScan = true; if (!discoveryEventAttached) { noble.on(\"discover\", this._discoveryEventHandler); discoveryEventAttached = true; } if (ready) { debug(\"Scanning started\"); startScanning(); } } /** * Stop scanning for Powered UP Hub devices. * @method PoweredUP#stop */ stop() { wantScan = false; if (discoveryEventAttached) { noble.removeListener(\"discover\", this._discoveryEventHandler); discoveryEventAttached = false; } noble.stopScanning(); } /** * Retrieve a Powered UP Hub by UUID. * @method PoweredUP#getConnectedHubByUUID * @param {string} uuid * @returns {Hub | null} */ getConnectedHubByUUID(uuid) { return this._connectedHubs[uuid]; } /** * Retrieve a list of Powered UP Hubs. * @method PoweredUP#getConnectedHubs * @returns {Hub[]} */ getConnectedHubs() { return Object.keys(this._connectedHubs).map((uuid) =&gt; this._connectedHubs[uuid]); } async _discoveryEventHandler(peripheral) { let hub; if (await wedo2smarthub_1.WeDo2SmartHub.IsWeDo2SmartHub(peripheral)) { hub = new wedo2smarthub_1.WeDo2SmartHub(peripheral, this.autoSubscribe); } else if (await boostmovehub_1.BoostMoveHub.IsBoostMoveHub(peripheral)) { hub = new boostmovehub_1.BoostMoveHub(peripheral, this.autoSubscribe); } else if (await puphub_1.PUPHub.IsPUPHub(peripheral)) { hub = new puphub_1.PUPHub(peripheral, this.autoSubscribe); } else if (await pupremote_1.PUPRemote.IsPUPRemote(peripheral)) { hub = new pupremote_1.PUPRemote(peripheral, this.autoSubscribe); } else if (await duplotrainbase_1.DuploTrainBase.IsDuploTrainBase(peripheral)) { hub = new duplotrainbase_1.DuploTrainBase(peripheral, this.autoSubscribe); } else { return; } peripheral.removeAllListeners(); noble.stopScanning(); if (!utils_1.isBrowserContext) { startScanning(); } hub.on(\"connect\", () =&gt; { debug(`Hub ${hub.uuid} connected`); this._connectedHubs[hub.uuid] = hub; }); hub.on(\"disconnect\", () =&gt; { debug(`Hub ${hub.uuid} disconnected`); delete this._connectedHubs[hub.uuid]; if (wantScan) { startScanning(); } }); debug(`Hub ${hub.uuid} discovered`); /** * Emits when a Powered UP Hub device is found. * @event PoweredUP#discover * @param {WeDo2SmartHub | BoostMoveHub | PUPHub | PUPRemote | DuploTrainBase} hub */ this.emit(\"discover\", hub); } } exports.PoweredUP = PoweredUP; × Search results Close "},"puphub.js.html":{"id":"puphub.js.html","title":"Source: puphub.js","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Source: puphub.js \"use strict\"; var __importStar = (this &amp;&amp; this.__importStar) || function (mod) { if (mod &amp;&amp; mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result[\"default\"] = mod; return result; }; Object.defineProperty(exports, \"__esModule\", { value: true }); const lpf2hub_1 = require(\"./lpf2hub\"); const port_1 = require(\"./port\"); const Consts = __importStar(require(\"./consts\")); const Debug = require(\"debug\"); const debug = Debug(\"puphub\"); /** * The PUPHub is emitted if the discovered device is a Powered UP Hub. * @class PUPHub * @extends LPF2Hub * @extends Hub */ class PUPHub extends lpf2hub_1.LPF2Hub { // We set JSDoc to ignore these events as a Powered UP Remote will never emit them. /** * @event PUPHub#rotate * @ignore */ /** * @event PUPHub#speed * @ignore */ static IsPUPHub(peripheral) { return (peripheral.advertisement.serviceUuids.indexOf(Consts.BLEService.LPF2_HUB.replace(/-/g, \"\")) &gt;= 0 &amp;&amp; peripheral.advertisement.manufacturerData[3] === Consts.BLEManufacturerData.POWERED_UP_HUB_ID); } constructor(peripheral, autoSubscribe = true) { super(peripheral, autoSubscribe); this.type = Consts.HubType.POWERED_UP_HUB; this._ports = { \"A\": new port_1.Port(\"A\", 0), \"B\": new port_1.Port(\"B\", 1), \"AB\": new port_1.Port(\"AB\", 57) }; debug(\"Discovered Powered UP Hub\"); } connect() { return new Promise(async (resolve, reject) =&gt; { debug(\"Connecting to Powered UP Hub\"); await super.connect(); debug(\"Connect completed\"); return resolve(); }); } /** * Set the motor speed on a given port. * @method PUPHub#setMotorSpeed * @param {string} port * @param {number | Array.&lt;number&gt;} speed For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. If you are specifying port AB to control both motors, you can optionally supply a tuple of speeds. * @param {number} [time] How long to activate the motor for (in milliseconds). Leave empty to turn the motor on indefinitely. * @returns {Promise} Resolved upon successful completion of command. If time is specified, this is once the motor is finished. */ setMotorSpeed(port, speed, time) { const portObj = this._portLookup(port); if (portObj.id !== \"AB\" &amp;&amp; speed instanceof Array) { throw new Error(`Port ${portObj.id} can only accept a single speed`); } if (portObj.id === \"AB\") { const portObjA = this._portLookup(\"A\"); const portObjB = this._portLookup(\"B\"); if (portObjA.type !== portObjB.type) { throw new Error(`Port ${portObj.id} requires both motors be of the same type`); } } let cancelEventTimer = true; if (typeof time === \"boolean\") { if (time === true) { cancelEventTimer = false; } time = undefined; } if (cancelEventTimer) { portObj.cancelEventTimer(); } return new Promise((resolve, reject) =&gt; { if (time &amp;&amp; typeof time === \"number\") { let data = null; if (portObj.id === \"AB\") { data = Buffer.from([0x81, portObj.value, 0x11, 0x02, this._mapSpeed(speed instanceof Array ? speed[0] : speed), this._mapSpeed(speed instanceof Array ? speed[1] : speed)]); } else { // @ts-ignore: The type of speed is properly checked at the start data = Buffer.from([0x81, portObj.value, 0x11, 0x60, 0x00, this._mapSpeed(speed), 0x00, 0x00]); } this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); const timeout = global.setTimeout(() =&gt; { let data = null; if (portObj.id === \"AB\") { data = Buffer.from([0x81, portObj.value, 0x11, 0x02, 0x00, 0x00]); } else { data = Buffer.from([0x81, portObj.value, 0x11, 0x60, 0x00, 0x00, 0x00, 0x00]); } this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); }, time); portObj.setEventTimer(timeout); } else { let data = null; if (portObj.id === \"AB\") { data = Buffer.from([0x81, portObj.value, 0x11, 0x02, this._mapSpeed(speed instanceof Array ? speed[0] : speed), this._mapSpeed(speed instanceof Array ? speed[1] : speed)]); } else { // @ts-ignore: The type of speed is properly checked at the start data = Buffer.from([0x81, portObj.value, 0x11, 0x60, 0x00, this._mapSpeed(speed), 0x00, 0x00]); } this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); } }); } /** * Ramp the motor speed on a given port. * @method PUPHub#rampMotorSpeed * @param {string} port * @param {number} fromSpeed For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. * @param {number} toSpeed For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. * @param {number} time How long the ramp should last (in milliseconds). * @returns {Promise} Resolved upon successful completion of command. */ rampMotorSpeed(port, fromSpeed, toSpeed, time) { const portObj = this._portLookup(port); portObj.cancelEventTimer(); return new Promise((resolve, reject) =&gt; { this._calculateRamp(fromSpeed, toSpeed, time, portObj) .on(\"changeSpeed\", (speed) =&gt; { this.setMotorSpeed(port, speed, true); }) .on(\"finished\", resolve); }); } /** * Fully (hard) stop the motor on a given port. * @method PUPHub#hardStopMotor * @param {string} port * @returns {Promise} Resolved upon successful completion of command. */ hardStopMotor(port) { return this.setMotorSpeed(port, 127); } /** * Set the light brightness on a given port. * @method PUPHub#setLightBrightness * @param {string} port * @param {number} brightness Brightness value between 0-100 (0 is off) * @param {number} [time] How long to turn the light on (in milliseconds). Leave empty to turn the light on indefinitely. * @returns {Promise} Resolved upon successful completion of command. If time is specified, this is once the light is turned off. */ setLightBrightness(port, brightness, time) { const portObj = this._portLookup(port); portObj.cancelEventTimer(); return new Promise((resolve, reject) =&gt; { const data = Buffer.from([0x81, portObj.value, 0x11, 0x51, 0x00, brightness]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); if (time) { const timeout = global.setTimeout(() =&gt; { const data = Buffer.from([0x81, portObj.value, 0x11, 0x51, 0x00, 0x00]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); }, time); portObj.setEventTimer(timeout); } else { return resolve(); } }); } } exports.PUPHub = PUPHub; × Search results Close "},"pupremote.js.html":{"id":"pupremote.js.html","title":"Source: pupremote.js","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Source: pupremote.js \"use strict\"; var __importStar = (this &amp;&amp; this.__importStar) || function (mod) { if (mod &amp;&amp; mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result[\"default\"] = mod; return result; }; Object.defineProperty(exports, \"__esModule\", { value: true }); const lpf2hub_1 = require(\"./lpf2hub\"); const port_1 = require(\"./port\"); const Consts = __importStar(require(\"./consts\")); const Debug = require(\"debug\"); const debug = Debug(\"pupremote\"); /** * The PUPRemote is emitted if the discovered device is a Powered UP Remote. * @class PUPRemote * @extends LPF2Hub * @extends Hub */ class PUPRemote extends lpf2hub_1.LPF2Hub { // We set JSDoc to ignore these events as a Powered UP Remote will never emit them. /** * @event PUPRemote#distance * @ignore */ /** * @event PUPRemote#color * @ignore */ /** * @event PUPRemote#tilt * @ignore */ /** * @event PUPRemote#rotate * @ignore */ /** * @event PUPRemote#speed * @ignore */ /** * @event PUPRemote#attach * @ignore */ /** * @event PUPRemote#detach * @ignore */ static IsPUPRemote(peripheral) { return (peripheral.advertisement.serviceUuids.indexOf(Consts.BLEService.LPF2_HUB.replace(/-/g, \"\")) &gt;= 0 &amp;&amp; peripheral.advertisement.manufacturerData[3] === Consts.BLEManufacturerData.POWERED_UP_REMOTE_ID); } constructor(peripheral, autoSubscribe = true) { super(peripheral, autoSubscribe); this.type = Consts.HubType.POWERED_UP_REMOTE; this._ports = { \"LEFT\": new port_1.Port(\"LEFT\", 0), \"RIGHT\": new port_1.Port(\"RIGHT\", 1) }; debug(\"Discovered Powered UP Remote\"); } connect() { return new Promise(async (resolve, reject) =&gt; { debug(\"Connecting to Powered UP Remote\"); await super.connect(); debug(\"Connect completed\"); return resolve(); }); } /** * Set the color of the LED on the Remote via a color value. * @method PUPRemote#setLEDColor * @param {Color} color * @returns {Promise} Resolved upon successful issuance of command. */ setLEDColor(color) { return new Promise((resolve, reject) =&gt; { let data = Buffer.from([0x41, 0x34, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); if (color === false) { color = 0; } data = Buffer.from([0x81, 0x34, 0x11, 0x51, 0x00, color]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); }); } /** * Set the color of the LED on the Hub via RGB values. * @method PUPRemote#setLEDRGB * @param {number} red * @param {number} green * @param {number} blue * @returns {Promise} Resolved upon successful issuance of command. */ setLEDRGB(red, green, blue) { return new Promise((resolve, reject) =&gt; { let data = Buffer.from([0x41, 0x34, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); data = Buffer.from([0x81, 0x34, 0x11, 0x51, 0x01, red, green, blue]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); }); } } exports.PUPRemote = PUPRemote; × Search results Close "},"wedo2smarthub.js.html":{"id":"wedo2smarthub.js.html","title":"Source: wedo2smarthub.js","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Source: wedo2smarthub.js \"use strict\"; var __importStar = (this &amp;&amp; this.__importStar) || function (mod) { if (mod &amp;&amp; mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result[\"default\"] = mod; return result; }; Object.defineProperty(exports, \"__esModule\", { value: true }); const hub_1 = require(\"./hub\"); const port_1 = require(\"./port\"); const Consts = __importStar(require(\"./consts\")); const Debug = require(\"debug\"); const debug = Debug(\"wedo2smarthub\"); /** * The WeDo2SmartHub is emitted if the discovered device is a WeDo 2.0 Smart Hub. * @class WeDo2SmartHub * @extends Hub */ class WeDo2SmartHub extends hub_1.Hub { constructor(peripheral, autoSubscribe = true) { super(peripheral, autoSubscribe); this._lastTiltX = 0; this._lastTiltY = 0; this.type = Consts.HubType.WEDO2_SMART_HUB; this._ports = { \"A\": new port_1.Port(\"A\", 1), \"B\": new port_1.Port(\"B\", 2) }; debug(\"Discovered WeDo 2.0 Smart Hub\"); } // We set JSDoc to ignore these events as a WeDo 2.0 Smart Hub will never emit them. /** * @event WeDo2SmartHub#speed * @ignore */ static IsWeDo2SmartHub(peripheral) { return (peripheral.advertisement.serviceUuids.indexOf(Consts.BLEService.WEDO2_SMART_HUB.replace(/-/g, \"\")) &gt;= 0); } connect() { return new Promise(async (resolve, reject) =&gt; { debug(\"Connecting to WeDo 2.0 Smart Hub\"); await super.connect(); this._subscribeToCharacteristic(this._getCharacteristic(Consts.BLECharacteristic.WEDO2_PORT_TYPE), this._parsePortMessage.bind(this)); this._subscribeToCharacteristic(this._getCharacteristic(Consts.BLECharacteristic.WEDO2_SENSOR_VALUE), this._parseSensorMessage.bind(this)); this._subscribeToCharacteristic(this._getCharacteristic(Consts.BLECharacteristic.WEDO2_BUTTON), this._parseSensorMessage.bind(this)); this._subscribeToCharacteristic(this._getCharacteristic(Consts.BLECharacteristic.WEDO2_BATTERY), this._parseBatteryMessage.bind(this)); this._subscribeToCharacteristic(this._getCharacteristic(Consts.BLECharacteristic.WEDO2_HIGH_CURRENT_ALERT), this._parseHighCurrentAlert.bind(this)); this._getCharacteristic(Consts.BLECharacteristic.WEDO2_BATTERY).read((err, data) =&gt; { this._parseBatteryMessage(data); }); this._getCharacteristic(Consts.BLECharacteristic.WEDO2_FIRMWARE_REVISION).read((err, data) =&gt; { this._parseFirmwareRevisionString(data); }); setTimeout(() =&gt; { this._activatePortDevice(0x03, 0x15, 0x00, 0x00); // Activate voltage reports this._activatePortDevice(0x04, 0x14, 0x00, 0x00); // Activate current reports }, 1000); debug(\"Connect completed\"); return resolve(); }); } /** * Set the name of the Hub. * @method WeDo2SmartHub#setName * @param {string} name New name of the hub (14 characters or less, ASCII only). * @returns {Promise} Resolved upon successful issuance of command. */ setName(name) { if (name.length &gt; 14) { throw new Error(\"Name must be 14 characters or less\"); } return new Promise((resolve, reject) =&gt; { const data = Buffer.from(name, \"ascii\"); // Send this twice, as sometimes the first time doesn't take this._writeMessage(Consts.BLECharacteristic.WEDO2_NAME_ID, data); this._writeMessage(Consts.BLECharacteristic.WEDO2_NAME_ID, data); this._name = name; return resolve(); }); } /** * Set the color of the LED on the Hub via a color value. * @method WeDo2SmartHub#setLEDColor * @param {Color} color * @returns {Promise} Resolved upon successful issuance of command. */ setLEDColor(color) { return new Promise((resolve, reject) =&gt; { let data = Buffer.from([0x06, 0x17, 0x01, 0x01]); this._writeMessage(Consts.BLECharacteristic.WEDO2_PORT_TYPE_WRITE, data); if (color === false) { color = 0; } data = Buffer.from([0x06, 0x04, 0x01, color]); this._writeMessage(Consts.BLECharacteristic.WEDO2_MOTOR_VALUE_WRITE, data); return resolve(); }); } /** * Set the color of the LED on the Hub via RGB values. * @method WeDo2SmartHub#setLEDRGB * @param {number} red * @param {number} green * @param {number} blue * @returns {Promise} Resolved upon successful issuance of command. */ setLEDRGB(red, green, blue) { return new Promise((resolve, reject) =&gt; { let data = Buffer.from([0x06, 0x17, 0x01, 0x02]); this._writeMessage(Consts.BLECharacteristic.WEDO2_PORT_TYPE_WRITE, data); data = Buffer.from([0x06, 0x04, 0x03, red, green, blue]); this._writeMessage(Consts.BLECharacteristic.WEDO2_MOTOR_VALUE_WRITE, data); return resolve(); }); } /** * Set the motor speed on a given port. * @method WeDo2SmartHub#setMotorSpeed * @param {string} port * @param {number} speed For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. * @param {number} [time] How long to activate the motor for (in milliseconds). Leave empty to turn the motor on indefinitely. * @returns {Promise} Resolved upon successful completion of command. If time is specified, this is once the motor is finished. */ setMotorSpeed(port, speed, time) { const portObj = this._portLookup(port); let cancelEventTimer = true; if (typeof time === \"boolean\") { if (time === true) { cancelEventTimer = false; } time = undefined; } if (cancelEventTimer) { portObj.cancelEventTimer(); } return new Promise((resolve, reject) =&gt; { this._writeMessage(Consts.BLECharacteristic.WEDO2_MOTOR_VALUE_WRITE, Buffer.from([portObj.value, 0x01, 0x02, this._mapSpeed(speed)])); if (time &amp;&amp; typeof time === \"number\") { const timeout = global.setTimeout(() =&gt; { this._writeMessage(Consts.BLECharacteristic.WEDO2_MOTOR_VALUE_WRITE, Buffer.from([portObj.value, 0x01, 0x02, 0x00])); return resolve(); }, time); portObj.setEventTimer(timeout); } else { return resolve(); } }); } /** * Ramp the motor speed on a given port. * @method WeDo2SmartHub#rampMotorSpeed * @param {string} port * @param {number} fromSpeed For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. * @param {number} toSpeed For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. * @param {number} time How long the ramp should last (in milliseconds). * @returns {Promise} Resolved upon successful completion of command. */ rampMotorSpeed(port, fromSpeed, toSpeed, time) { const portObj = this._portLookup(port); portObj.cancelEventTimer(); return new Promise((resolve, reject) =&gt; { this._calculateRamp(fromSpeed, toSpeed, time, portObj) .on(\"changeSpeed\", (speed) =&gt; { this.setMotorSpeed(port, speed, true); }) .on(\"finished\", resolve); }); } /** * Fully (hard) stop the motor on a given port. * @method WeDo2SmartHub#hardStopMotor * @param {string} port * @returns {Promise} Resolved upon successful completion of command. */ hardStopMotor(port) { return this.setMotorSpeed(port, 127); } /** * Play a tone on the Hub's in-built buzzer * @method WeDo2SmartHub#playTone * @param {number} frequency * @param {number} time How long the tone should play for (in milliseconds). * @returns {Promise} Resolved upon successful completion of command (ie. once the tone has finished playing). */ playTone(frequency, time) { return new Promise((resolve, reject) =&gt; { const data = Buffer.from([0x05, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00]); data.writeUInt16LE(frequency, 3); data.writeUInt16LE(time, 5); this._writeMessage(Consts.BLECharacteristic.WEDO2_MOTOR_VALUE_WRITE, data); global.setTimeout(resolve, time); }); } /** * Set the light brightness on a given port. * @method WeDo2SmartHub#setLightBrightness * @param {string} port * @param {number} brightness Brightness value between 0-100 (0 is off) * @param {number} [time] How long to turn the light on (in milliseconds). Leave empty to turn the light on indefinitely. * @returns {Promise} Resolved upon successful completion of command. If time is specified, this is once the light is turned off. */ setLightBrightness(port, brightness, time) { const portObj = this._portLookup(port); portObj.cancelEventTimer(); return new Promise((resolve, reject) =&gt; { const data = Buffer.from([portObj.value, 0x01, 0x02, brightness]); this._writeMessage(Consts.BLECharacteristic.WEDO2_MOTOR_VALUE_WRITE, data); if (time) { const timeout = global.setTimeout(() =&gt; { const data = Buffer.from([portObj.value, 0x01, 0x02, 0x00]); this._writeMessage(Consts.BLECharacteristic.WEDO2_MOTOR_VALUE_WRITE, data); return resolve(); }, time); portObj.setEventTimer(timeout); } else { return resolve(); } }); } sendRaw(message, characteristic = Consts.BLECharacteristic.WEDO2_MOTOR_VALUE_WRITE) { return new Promise((resolve, reject) =&gt; { this._writeMessage(characteristic, message, () =&gt; { return resolve(); }); }); } _activatePortDevice(port, type, mode, format, callback) { this._writeMessage(Consts.BLECharacteristic.WEDO2_PORT_TYPE_WRITE, Buffer.from([0x01, 0x02, port, type, mode, 0x01, 0x00, 0x00, 0x00, format, 0x01]), callback); } _deactivatePortDevice(port, type, mode, format, callback) { this._writeMessage(Consts.BLECharacteristic.WEDO2_PORT_TYPE_WRITE, Buffer.from([0x01, 0x02, port, type, mode, 0x01, 0x00, 0x00, 0x00, format, 0x00]), callback); } _writeMessage(uuid, message, callback) { const characteristic = this._getCharacteristic(uuid); if (characteristic) { characteristic.write(message, false, callback); } } _parseHighCurrentAlert(data) { // console.log(data); } _parseBatteryMessage(data) { this._batteryLevel = data[0]; } _parseFirmwareRevisionString(data) { const parts = data.toString().split(\".\"); this._firmwareInfo = { major: parseInt(parts[0], 10), minor: parseInt(parts[1], 10), bugFix: parseInt(parts[2], 10), build: parseInt(parts[3], 10) }; } _parsePortMessage(data) { const port = this._getPortForPortNumber(data[0]); if (!port) { return; } port.connected = data[1] === 1 ? true : false; this._registerDeviceAttachment(port, data[3]); } _parseSensorMessage(data) { if (data[0] === 0x01) { /** * Emits when a button is pressed. * @event WeDo2SmartHub#button * @param {string} button * @param {ButtonState} state */ this.emit(\"button\", \"GREEN\", Consts.ButtonState.PRESSED); return; } else if (data[0] === 0x00) { this.emit(\"button\", \"GREEN\", Consts.ButtonState.RELEASED); return; } // Voltage if (data[1] === 0x03) { const voltage = data.readInt16LE(2); this._voltage = voltage / 40; // Current } else if (data[1] === 0x04) { const current = data.readInt16LE(2); this._current = current / 1000; } const port = this._getPortForPortNumber(data[1]); if (!port) { return; } if (port &amp;&amp; port.connected) { switch (port.type) { case Consts.DeviceType.WEDO2_DISTANCE: { let distance = data[2]; if (data[3] === 1) { distance = data[2] + 255; } /** * Emits when a distance sensor is activated. * @event WeDo2SmartHub#distance * @param {string} port * @param {number} distance Distance, in millimeters. */ this.emit(\"distance\", port.id, distance * 10); break; } case Consts.DeviceType.BOOST_DISTANCE: { const distance = data[2]; /** * Emits when a color sensor is activated. * @event WeDo2SmartHub#color * @param {string} port * @param {Color} color */ this.emit(\"color\", port.id, distance); break; } case Consts.DeviceType.WEDO2_TILT: { this._lastTiltX = data[2]; if (this._lastTiltX &gt; 100) { this._lastTiltX = -(255 - this._lastTiltX); } this._lastTiltY = data[3]; if (this._lastTiltY &gt; 100) { this._lastTiltY = -(255 - this._lastTiltY); } /** * Emits when a tilt sensor is activated. * @event WeDo2SmartHub#tilt * @param {string} port * @param {number} x * @param {number} y */ this.emit(\"tilt\", port.id, this._lastTiltX, this._lastTiltY); break; } case Consts.DeviceType.BOOST_TACHO_MOTOR: { const rotation = data.readInt32LE(2); /** * Emits when a rotation sensor is activated. * @event WeDo2SmartHub#rotate * @param {string} port * @param {number} rotation */ this.emit(\"rotate\", port.id, rotation); } } } } } exports.WeDo2SmartHub = WeDo2SmartHub; × Search results Close "},"global.html":{"id":"global.html","title":"Global","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Global Type Definitions ButtonState Properties: Name Type Description PRESSED number 0 RELEASED number 1 UP number 2 DOWN number 3 STOP number 4 Source: consts.js, line 89 ButtonState Properties: Name Type Description PRESSED number 0 RELEASED number 1 UP number 2 DOWN number 3 STOP number 4 Source: consts.js, line 89 Color Properties: Name Type Description BLACK number 0 PINK number 1 PURPLE number 2 BLUE number 3 LIGHT_BLUE number 4 CYAN number 5 GREEN number 6 YELLOW number 7 ORANGE number 8 RED number 9 WHITE number 10 NONE number 255 Source: consts.js, line 59 Color Properties: Name Type Description BLACK number 0 PINK number 1 PURPLE number 2 BLUE number 3 LIGHT_BLUE number 4 CYAN number 5 GREEN number 6 YELLOW number 7 ORANGE number 8 RED number 9 WHITE number 10 NONE number 255 Source: consts.js, line 59 DeviceType Properties: Name Type Description UNKNOWN number 0 BASIC_MOTOR number 1 TRAIN_MOTOR number 2 LED_LIGHTS number 8 BOOST_LED number 22 WEDO2_TILT number 34 WEDO2_DISTANCE number 35 BOOST_DISTANCE number 37 BOOST_TACHO_MOTOR number 38 BOOST_MOVE_HUB_MOTOR number 39 BOOST_TILT number 40 DUPLO_TRAIN_BASE_MOTOR number 41 DUPLO_TRAIN_BASE_SPEAKER number 42 DUPLO_TRAIN_BASE_COLOR number 43 DUPLO_TRAIN_BASE_SPEEDOMETER number 44 POWERED_UP_REMOTE_BUTTON number 55 Source: consts.js, line 21 DeviceType Properties: Name Type Description UNKNOWN number 0 BASIC_MOTOR number 1 TRAIN_MOTOR number 2 LED_LIGHTS number 8 BOOST_LED number 22 WEDO2_TILT number 34 WEDO2_DISTANCE number 35 BOOST_DISTANCE number 37 BOOST_TACHO_MOTOR number 38 BOOST_MOVE_HUB_MOTOR number 39 BOOST_TILT number 40 DUPLO_TRAIN_BASE_MOTOR number 41 DUPLO_TRAIN_BASE_SPEAKER number 42 DUPLO_TRAIN_BASE_COLOR number 43 DUPLO_TRAIN_BASE_SPEEDOMETER number 44 POWERED_UP_REMOTE_BUTTON number 55 Source: consts.js, line 21 DuploTrainBaseSound Properties: Name Type Description BRAKE number 3 STATION_DEPARTURE number 5 WATER_REFILL number 7 HORN number 9 STEAM number 10 Source: consts.js, line 105 DuploTrainBaseSound Properties: Name Type Description BRAKE number 3 STATION_DEPARTURE number 5 WATER_REFILL number 7 HORN number 9 STEAM number 10 Source: consts.js, line 105 HubType Properties: Name Type Description UNKNOWN number 0 WEDO2_SMART_HUB number 1 BOOST_MOVE_HUB number 2 POWERED_UP_HUB number 3 POWERED_UP_REMOTE number 4 DUPLO_TRAIN_HUB number 5 Source: consts.js, line 3 HubType Properties: Name Type Description UNKNOWN number 0 WEDO2_SMART_HUB number 1 BOOST_MOVE_HUB number 2 POWERED_UP_HUB number 3 POWERED_UP_REMOTE number 4 DUPLO_TRAIN_HUB number 5 Source: consts.js, line 3 × Search results Close "},"classes.list.html":{"id":"classes.list.html","title":"Classes","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Classes Classes BoostMoveHub DuploTrainBase Hub LPF2Hub PoweredUP PUPHub PUPRemote WeDo2SmartHub Events attach Emits when a motor or sensor is attached to the Hub. Parameters: Name Type Description port string type DeviceType Inherited From: Hub#event:attach Overrides: Hub#event:attach Source: hub.js, line 247 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 157 color Emits when a color sensor is activated. Parameters: Name Type Description port string color Color Inherited From: LPF2Hub#event:color Source: lpf2hub.js, line 257 colorAndDistance A combined color and distance event, emits when the sensor is activated. Parameters: Name Type Description port string color Color distance number Distance, in millimeters. Inherited From: LPF2Hub#event:colorAndDistance Source: lpf2hub.js, line 273 detach Emits when an attached motor or sensor is detached from the Hub. Parameters: Name Type Description port string Inherited From: Hub#event:detach Overrides: Hub#event:detach Source: hub.js, line 259 distance Emits when a distance sensor is activated. Parameters: Name Type Description port string distance number Distance, in millimeters. Inherited From: LPF2Hub#event:distance Source: lpf2hub.js, line 247 rotate Emits when a rotation sensor is activated. Parameters: Name Type Description port string rotation number Inherited From: LPF2Hub#event:rotate Source: lpf2hub.js, line 302 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number Inherited From: LPF2Hub#event:tilt Source: lpf2hub.js, line 290 color Emits when a color sensor is activated. Parameters: Name Type Description port string color Color Inherited From: LPF2Hub#event:color Source: lpf2hub.js, line 257 speed Emits on a speed change. Parameters: Name Type Description port string speed number Inherited From: LPF2Hub#event:speed Source: lpf2hub.js, line 350 attach Emits when a motor or sensor is attached to the Hub. Parameters: Name Type Description port string type DeviceType Source: hub.js, line 247 detach Emits when an attached motor or sensor is detached from the Hub. Parameters: Name Type Description port string Source: hub.js, line 259 attach Emits when a motor or sensor is attached to the Hub. Parameters: Name Type Description port string type DeviceType Inherited From: Hub#event:attach Source: hub.js, line 247 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Source: lpf2hub.js, line 157 color Emits when a color sensor is activated. Parameters: Name Type Description port string color Color Source: lpf2hub.js, line 257 colorAndDistance A combined color and distance event, emits when the sensor is activated. Parameters: Name Type Description port string color Color distance number Distance, in millimeters. Source: lpf2hub.js, line 273 detach Emits when an attached motor or sensor is detached from the Hub. Parameters: Name Type Description port string Inherited From: Hub#event:detach Source: hub.js, line 259 distance Emits when a distance sensor is activated. Parameters: Name Type Description port string distance number Distance, in millimeters. Source: lpf2hub.js, line 247 rotate Emits when a rotation sensor is activated. Parameters: Name Type Description port string rotation number Source: lpf2hub.js, line 302 speed Emits on a speed change. Parameters: Name Type Description port string speed number Source: lpf2hub.js, line 350 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number Source: lpf2hub.js, line 290 discover Emits when a Powered UP Hub device is found. Parameters: Name Type Description hub WeDo2SmartHub | BoostMoveHub | PUPHub | PUPRemote | DuploTrainBase Source: poweredup.js, line 136 attach Emits when a motor or sensor is attached to the Hub. Parameters: Name Type Description port string type DeviceType Inherited From: Hub#event:attach Overrides: Hub#event:attach Source: hub.js, line 247 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 157 color Emits when a color sensor is activated. Parameters: Name Type Description port string color Color Inherited From: LPF2Hub#event:color Source: lpf2hub.js, line 257 colorAndDistance A combined color and distance event, emits when the sensor is activated. Parameters: Name Type Description port string color Color distance number Distance, in millimeters. Inherited From: LPF2Hub#event:colorAndDistance Source: lpf2hub.js, line 273 detach Emits when an attached motor or sensor is detached from the Hub. Parameters: Name Type Description port string Inherited From: Hub#event:detach Overrides: Hub#event:detach Source: hub.js, line 259 distance Emits when a distance sensor is activated. Parameters: Name Type Description port string distance number Distance, in millimeters. Inherited From: LPF2Hub#event:distance Source: lpf2hub.js, line 247 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number Inherited From: LPF2Hub#event:tilt Source: lpf2hub.js, line 290 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 157 colorAndDistance A combined color and distance event, emits when the sensor is activated. Parameters: Name Type Description port string color Color distance number Distance, in millimeters. Inherited From: LPF2Hub#event:colorAndDistance Source: lpf2hub.js, line 273 attach Emits when a motor or sensor is attached to the Hub. Parameters: Name Type Description port string type DeviceType Inherited From: Hub#event:attach Source: hub.js, line 247 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Source: wedo2smarthub.js, line 262 color Emits when a color sensor is activated. Parameters: Name Type Description port string color Color Source: wedo2smarthub.js, line 307 detach Emits when an attached motor or sensor is detached from the Hub. Parameters: Name Type Description port string Inherited From: Hub#event:detach Source: hub.js, line 259 distance Emits when a distance sensor is activated. Parameters: Name Type Description port string distance number Distance, in millimeters. Source: wedo2smarthub.js, line 296 rotate Emits when a rotation sensor is activated. Parameters: Name Type Description port string rotation number Source: wedo2smarthub.js, line 337 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string x number y number Source: wedo2smarthub.js, line 325 × Search results Close "},"index.html":{"id":"index.html","title":"Index","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global node-poweredup - A Node.js module to interface with LEGO Powered UP components.IntroductionLEGO Powered UP is the successor to Power Functions, the system for adding electronics to LEGO models. Powered UP is a collection of ranges - starting with LEGO WeDo 2.0 released in 2016, LEGO Boost released in 2017, and LEGO Powered UP released in 2018. It also includes the 2018 Duplo App-Controlled Train sets. Powered UP has a few improvements over Power Functions: The use of Bluetooth Low Energy makes it easy to control from a computer, and even write code for. The ability to use sensors to react to events happening in the real world opens up a whole new world of possibilities. As Powered UP hubs and remotes pair with each other, the system allows for a near unlimited number of independently controlled models in the same room. Power Functions was limited to 8 due to the use of infra-red for communication. InstallationNode.js v8.0 required. npm install node-poweredup --savenode-poweredup uses the Noble BLE library by Sandeep Mistry. On macOS everything should function out of the box. On Linux and Windows there are certain dependencies which may need installed first. Note: node-poweredup has been tested on macOS 10.13 and Debian/Raspbian on the Raspberry Pi 3 Model B. CompatibilityWhile most Powered UP components and Hubs are compatible with each other, there are exceptions. For example, there is limited backwards compatibility between newer components and the WeDo 2.0 Smart Hub. However WeDo 2.0 components are fully forwards compatible with newer Hubs. Device Name Product Code Type WeDo 2.0 Smart Hub Boost Move Hub Powered UP Hub Availability WeDo 2.0 Tilt Sensor 45305 Sensor Yes Yes Yes 45300 WeDo 2.0 Motion Sensor 45304 Sensor Yes Yes Yes 45300 WeDo 2.0 Medium Motor 45303 Motor Yes Yes Yes 45300 76112 Boost Color and Distance Sensor 88007 Sensor Partial Yes Yes 17101 Boost Tacho Motor 88008 Motor/Sensor Partial Yes Partial 17101 Powered UP Train Motor 88011 Motor Yes Yes Yes 6019760198 Powered UP LED Lights 88005 Light Yes Yes Yes 88005 In addition, the Hubs themselves have certain built-in features which this library exposes. Hub Name Product Code Built-In Features Availability WeDo 2.0 Smart hub 45301 RGB LEDPiezo BuzzerButton 45300 Boost Move Hub 88006 RGB LEDTilt Sensor2x Tacho MotorsButton 17101 Powered UP Hub 88009 RGB LEDButton 601976019876112 Powered UP Remote 88010 RGB LEDLeft and Right Control ButtonsButton 6019760198 Duplo Train Base 28743 RGB LED/HeadlightsSpeakerSpeedometerMotorColor and Distance SensorButton 1087410875 Known Issues and Limitations The Boost Color and Distance sensor only works in color mode with the WeDo 2.0 Smart Hub. When used with the WeDo 2.0 Smart Hub, the Boost Tacho Motor does not support rotating the motor by angle. When used with the Powered UP Hub, the Boost Tacho Motor does not support rotating the motor by angle. It also does not support rotation detection. Plugging two Boost Tacho Motors into the Powered UP Hub will crash the Hub (This requires a firmware update from LEGO to fix). DocumentationFull documentation is available here. Sample Usageconst PoweredUP = require(\"node-poweredup\"); const poweredUP = new PoweredUP.PoweredUP(); poweredUP.on(\"discover\", async (hub) =&gt; { // Wait to discover a Hub await hub.connect(); // Connect to the Hub await hub.sleep(3000); // Sleep for 3 seconds before starting while (true) { // Repeat indefinitely hub.setMotorSpeed(\"B\", 75); // Start a motor attached to port B to run a 3/4 speed (75) indefinitely await hub.setMotorSpeed(\"A\", 100, 2000); // Run a motor attached to port A for 2 seconds at maximum speed (100) then stop await hub.sleep(1000); // Do nothing for 1 second await hub.setMotorSpeed(\"A\", -50, 1000); // Run a motor attached to port A for 1 second at 1/2 speed in reverse (-50) then stop await hub.sleep(1000); // Do nothing for 1 second } }); poweredUP.scan(); // Start scanning for HubsMore examples are available in the \"examples\" directory. CreditsThanks go to Jorge Pereira (@JorgePe), Sebastian Raff (@hobbyquaker), Valentin Heun (@vheun), Johan Korten (@jakorten), and Andrey Pokhilko (@undera) for their various works, contributions, and assistance on figuring out the LEGO Boost, WeDo 2.0, and Powered UP protocols. × Search results Close "},"BoostMoveHub.html":{"id":"BoostMoveHub.html","title":"Class: BoostMoveHub","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Class: BoostMoveHub BoostMoveHub new BoostMoveHub() The BoostMoveHub is emitted if the discovered device is a Boost Move Hub. Source: boostmovehub.js, line 15 Extends LPF2Hub Hub Members &lt;readonly&gt; batteryLevel Properties: Name Type Description batteryLevel number Battery level of the hub (Percentage between 0-100) Inherited From: Hub#batteryLevel Overrides: Hub#batteryLevel Source: hub.js, line 68 &lt;readonly&gt; firmwareVersion Properties: Name Type Description firmwareVersion string Firmware version of the hub Inherited From: Hub#firmwareVersion Overrides: Hub#firmwareVersion Source: hub.js, line 47 &lt;readonly&gt; name Properties: Name Type Description name string Name of the hub Inherited From: Hub#name Overrides: Hub#name Source: hub.js, line 40 &lt;readonly&gt; rssi Properties: Name Type Description rssi number Signal strength of the hub Inherited From: Hub#rssi Overrides: Hub#rssi Source: hub.js, line 61 &lt;readonly&gt; uuid Properties: Name Type Description uuid string UUID of the hub Inherited From: Hub#uuid Overrides: Hub#uuid Source: hub.js, line 54 &lt;readonly&gt; voltage Properties: Name Type Description voltage number Voltage of the hub (Volts) Inherited From: Hub#voltage Overrides: Hub#voltage Source: hub.js, line 75 Methods connect() Connect to the Hub. Inherited From: Hub#connect Overrides: Hub#connect Source: hub.js, line 85 Returns: Resolved upon successful connect. Type Promise disconnect() Disconnect the Hub. Inherited From: Hub#disconnect Overrides: Hub#disconnect Source: hub.js, line 134 Returns: Resolved upon successful disconnect. Type Promise getHubType() Get the hub type. Inherited From: Hub#getHubType Overrides: Hub#getHubType Source: hub.js, line 202 Returns: Type HubType getPortDeviceType(port) Get the device type for a given port. Parameters: Name Type Description port string Inherited From: Hub#getPortDeviceType Overrides: Hub#getPortDeviceType Source: hub.js, line 210 Returns: Type DeviceType hardStopMotor(port) Fully (hard) stop the motor on a given port. Parameters: Name Type Description port string Source: boostmovehub.js, line 183 Returns: Resolved upon successful completion of command. Type Promise rampMotorSpeed(port, fromSpeed, toSpeed, time) Ramp the motor speed on a given port. Parameters: Name Type Description port string fromSpeed number For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. toSpeed number For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. time number How long the ramp should last (in milliseconds). Source: boostmovehub.js, line 129 Returns: Resolved upon successful completion of command. Type Promise setLEDColor(color) Set the color of the LED on the Hub via a color value. Parameters: Name Type Description color Color Inherited From: LPF2Hub#setLEDColor Source: lpf2hub.js, line 63 Returns: Resolved upon successful issuance of command. Type Promise setLEDRGB(red, green, blue) Set the color of the LED on the Hub via RGB values. Parameters: Name Type Description red number green number blue number Inherited From: LPF2Hub#setLEDRGB Source: lpf2hub.js, line 81 Returns: Resolved upon successful issuance of command. Type Promise setLightBrightness(port, brightness [, time]) Set the light brightness on a given port. Parameters: Name Type Argument Description port string brightness number Brightness value between 0-100 (0 is off) time number &lt;optional&gt; How long to turn the light on (in milliseconds). Leave empty to turn the light on indefinitely. Source: boostmovehub.js, line 192 Returns: Resolved upon successful completion of command. If time is specified, this is once the light is turned off. Type Promise setMotorAngle(port, angle [, speed]) Rotate a motor by a given angle. Parameters: Name Type Argument Default Description port string angle number How much the motor should be rotated (in degrees). speed number | Array.&lt;number&gt; &lt;optional&gt; 100 For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. If you are specifying port AB to control both motors, you can optionally supply a tuple of speeds. Source: boostmovehub.js, line 149 Returns: Resolved upon successful completion of command (ie. once the motor is finished). Type Promise setMotorSpeed(port, speed [, time]) Set the motor speed on a given port. Parameters: Name Type Argument Description port string speed number | Array.&lt;number&gt; For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. If you are specifying port AB to control both motors, you can optionally supply a tuple of speeds. time number &lt;optional&gt; How long to activate the motor for (in milliseconds). Leave empty to turn the motor on indefinitely. Source: boostmovehub.js, line 51 Returns: Resolved upon successful completion of command. If time is specified, this is once the motor is finished. Type Promise setName(name) Set the name of the Hub. Parameters: Name Type Description name string New name of the hub (14 characters or less, ASCII only). Inherited From: LPF2Hub#setName Source: lpf2hub.js, line 43 Returns: Resolved upon successful issuance of command. Type Promise sleep(delay) Sleep a given amount of time. This is a helper method to make it easier to add delays into a chain of commands. Parameters: Name Type Description delay number How long to sleep (in milliseconds). Inherited From: Hub#sleep Overrides: Hub#sleep Source: hub.js, line 178 Returns: Resolved after the delay is finished. Type Promise subscribe(port [, mode]) Subscribe to sensor notifications on a given port. Parameters: Name Type Argument Description port string mode number &lt;optional&gt; The sensor mode to activate. If no mode is provided, the default for that sensor will be chosen. Inherited From: Hub#subscribe Overrides: Hub#subscribe Source: hub.js, line 146 Returns: Resolved upon successful issuance of command. Type Promise unsubscribe(port) Unsubscribe to sensor notifications on a given port. Parameters: Name Type Description port string Inherited From: Hub#unsubscribe Overrides: Hub#unsubscribe Source: hub.js, line 164 Returns: Resolved upon successful issuance of command. Type Promise wait(commands) Wait until a given list of concurrently running commands are complete. This is a helper method to make it easier to wait for concurrent commands to complete. Parameters: Name Type Description commands Array.&lt;Promise.&lt;any&gt;&gt; Array of executing commands. Inherited From: Hub#wait Overrides: Hub#wait Source: hub.js, line 191 Returns: Resolved after the commands are finished. Type Promise Events attach Emits when a motor or sensor is attached to the Hub. Parameters: Name Type Description port string type DeviceType Inherited From: Hub#event:attach Overrides: Hub#event:attach Source: hub.js, line 247 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 157 color Emits when a color sensor is activated. Parameters: Name Type Description port string color Color Inherited From: LPF2Hub#event:color Source: lpf2hub.js, line 257 colorAndDistance A combined color and distance event, emits when the sensor is activated. Parameters: Name Type Description port string color Color distance number Distance, in millimeters. Inherited From: LPF2Hub#event:colorAndDistance Source: lpf2hub.js, line 273 detach Emits when an attached motor or sensor is detached from the Hub. Parameters: Name Type Description port string Inherited From: Hub#event:detach Overrides: Hub#event:detach Source: hub.js, line 259 distance Emits when a distance sensor is activated. Parameters: Name Type Description port string distance number Distance, in millimeters. Inherited From: LPF2Hub#event:distance Source: lpf2hub.js, line 247 rotate Emits when a rotation sensor is activated. Parameters: Name Type Description port string rotation number Inherited From: LPF2Hub#event:rotate Source: lpf2hub.js, line 302 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number Inherited From: LPF2Hub#event:tilt Source: lpf2hub.js, line 290 × Search results Close "},"DuploTrainBase.html":{"id":"DuploTrainBase.html","title":"Class: DuploTrainBase","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Class: DuploTrainBase DuploTrainBase new DuploTrainBase() The DuploTrainBase is emitted if the discovered device is a Duplo Train Base. Source: duplotrainbase.js, line 15 Extends LPF2Hub Hub Members &lt;readonly&gt; batteryLevel Properties: Name Type Description batteryLevel number Battery level of the hub (Percentage between 0-100) Inherited From: Hub#batteryLevel Overrides: Hub#batteryLevel Source: hub.js, line 68 &lt;readonly&gt; firmwareVersion Properties: Name Type Description firmwareVersion string Firmware version of the hub Inherited From: Hub#firmwareVersion Overrides: Hub#firmwareVersion Source: hub.js, line 47 &lt;readonly&gt; name Properties: Name Type Description name string Name of the hub Inherited From: Hub#name Overrides: Hub#name Source: hub.js, line 40 &lt;readonly&gt; rssi Properties: Name Type Description rssi number Signal strength of the hub Inherited From: Hub#rssi Overrides: Hub#rssi Source: hub.js, line 61 &lt;readonly&gt; uuid Properties: Name Type Description uuid string UUID of the hub Inherited From: Hub#uuid Overrides: Hub#uuid Source: hub.js, line 54 &lt;readonly&gt; voltage Properties: Name Type Description voltage number Voltage of the hub (Volts) Inherited From: Hub#voltage Overrides: Hub#voltage Source: hub.js, line 75 Methods connect() Connect to the Hub. Inherited From: Hub#connect Overrides: Hub#connect Source: hub.js, line 85 Returns: Resolved upon successful connect. Type Promise disconnect() Disconnect the Hub. Inherited From: Hub#disconnect Overrides: Hub#disconnect Source: hub.js, line 134 Returns: Resolved upon successful disconnect. Type Promise getHubType() Get the hub type. Inherited From: Hub#getHubType Overrides: Hub#getHubType Source: hub.js, line 202 Returns: Type HubType getPortDeviceType(port) Get the device type for a given port. Parameters: Name Type Description port string Inherited From: Hub#getPortDeviceType Overrides: Hub#getPortDeviceType Source: hub.js, line 210 Returns: Type DeviceType hardStopMotor(port) Fully (hard) stop the motor on a given port. Parameters: Name Type Description port string Source: duplotrainbase.js, line 146 Returns: Resolved upon successful completion of command. Type Promise playSound(sound) Play a built-in train sound. Parameters: Name Type Description sound DuploTrainBaseSound Source: duplotrainbase.js, line 155 Returns: Resolved upon successful issuance of command. Type Promise rampMotorSpeed(port, fromSpeed, toSpeed, time) Ramp the motor speed on a given port. Parameters: Name Type Description port string fromSpeed number For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. toSpeed number For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. time number How long the ramp should last (in milliseconds). Source: duplotrainbase.js, line 126 Returns: Resolved upon successful completion of command. Type Promise setLEDColor(color) Set the color of the LED on the train via a color value. Parameters: Name Type Description color Color Overrides: LPF2Hub#setLEDColor Source: duplotrainbase.js, line 72 Returns: Resolved upon successful issuance of command. Type Promise setLEDRGB(red, green, blue) Set the color of the LED on the Hub via RGB values. Parameters: Name Type Description red number green number blue number Inherited From: LPF2Hub#setLEDRGB Source: lpf2hub.js, line 81 Returns: Resolved upon successful issuance of command. Type Promise setMotorSpeed(port, speed [, time]) Set the motor speed on a given port. Parameters: Name Type Argument Description port string speed number | Array.&lt;number&gt; For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. If you are specifying port AB to control both motors, you can optionally supply a tuple of speeds. time number &lt;optional&gt; How long to activate the motor for (in milliseconds). Leave empty to turn the motor on indefinitely. Source: duplotrainbase.js, line 88 Returns: Resolved upon successful completion of command. If time is specified, this is once the motor is finished. Type Promise setName(name) Set the name of the Hub. Parameters: Name Type Description name string New name of the hub (14 characters or less, ASCII only). Inherited From: LPF2Hub#setName Source: lpf2hub.js, line 43 Returns: Resolved upon successful issuance of command. Type Promise sleep(delay) Sleep a given amount of time. This is a helper method to make it easier to add delays into a chain of commands. Parameters: Name Type Description delay number How long to sleep (in milliseconds). Inherited From: Hub#sleep Overrides: Hub#sleep Source: hub.js, line 178 Returns: Resolved after the delay is finished. Type Promise subscribe(port [, mode]) Subscribe to sensor notifications on a given port. Parameters: Name Type Argument Description port string mode number &lt;optional&gt; The sensor mode to activate. If no mode is provided, the default for that sensor will be chosen. Inherited From: Hub#subscribe Overrides: Hub#subscribe Source: hub.js, line 146 Returns: Resolved upon successful issuance of command. Type Promise unsubscribe(port) Unsubscribe to sensor notifications on a given port. Parameters: Name Type Description port string Inherited From: Hub#unsubscribe Overrides: Hub#unsubscribe Source: hub.js, line 164 Returns: Resolved upon successful issuance of command. Type Promise wait(commands) Wait until a given list of concurrently running commands are complete. This is a helper method to make it easier to wait for concurrent commands to complete. Parameters: Name Type Description commands Array.&lt;Promise.&lt;any&gt;&gt; Array of executing commands. Inherited From: Hub#wait Overrides: Hub#wait Source: hub.js, line 191 Returns: Resolved after the commands are finished. Type Promise Events color Emits when a color sensor is activated. Parameters: Name Type Description port string color Color Inherited From: LPF2Hub#event:color Source: lpf2hub.js, line 257 speed Emits on a speed change. Parameters: Name Type Description port string speed number Inherited From: LPF2Hub#event:speed Source: lpf2hub.js, line 350 × Search results Close "},"Hub.html":{"id":"Hub.html","title":"Class: Hub","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Class: Hub Hub new Hub() Source: hub.js, line 14 Extends EventEmitter Members &lt;readonly&gt; batteryLevel Properties: Name Type Description batteryLevel number Battery level of the hub (Percentage between 0-100) Source: hub.js, line 68 &lt;readonly&gt; firmwareVersion Properties: Name Type Description firmwareVersion string Firmware version of the hub Source: hub.js, line 47 &lt;readonly&gt; name Properties: Name Type Description name string Name of the hub Source: hub.js, line 40 &lt;readonly&gt; rssi Properties: Name Type Description rssi number Signal strength of the hub Source: hub.js, line 61 &lt;readonly&gt; uuid Properties: Name Type Description uuid string UUID of the hub Source: hub.js, line 54 &lt;readonly&gt; voltage Properties: Name Type Description voltage number Voltage of the hub (Volts) Source: hub.js, line 75 Methods connect() Connect to the Hub. Source: hub.js, line 85 Returns: Resolved upon successful connect. Type Promise disconnect() Disconnect the Hub. Source: hub.js, line 134 Returns: Resolved upon successful disconnect. Type Promise getHubType() Get the hub type. Source: hub.js, line 202 Returns: Type HubType getPortDeviceType(port) Get the device type for a given port. Parameters: Name Type Description port string Source: hub.js, line 210 Returns: Type DeviceType sleep(delay) Sleep a given amount of time. This is a helper method to make it easier to add delays into a chain of commands. Parameters: Name Type Description delay number How long to sleep (in milliseconds). Source: hub.js, line 178 Returns: Resolved after the delay is finished. Type Promise subscribe(port [, mode]) Subscribe to sensor notifications on a given port. Parameters: Name Type Argument Description port string mode number &lt;optional&gt; The sensor mode to activate. If no mode is provided, the default for that sensor will be chosen. Source: hub.js, line 146 Returns: Resolved upon successful issuance of command. Type Promise unsubscribe(port) Unsubscribe to sensor notifications on a given port. Parameters: Name Type Description port string Source: hub.js, line 164 Returns: Resolved upon successful issuance of command. Type Promise wait(commands) Wait until a given list of concurrently running commands are complete. This is a helper method to make it easier to wait for concurrent commands to complete. Parameters: Name Type Description commands Array.&lt;Promise.&lt;any&gt;&gt; Array of executing commands. Source: hub.js, line 191 Returns: Resolved after the commands are finished. Type Promise Events attach Emits when a motor or sensor is attached to the Hub. Parameters: Name Type Description port string type DeviceType Source: hub.js, line 247 detach Emits when an attached motor or sensor is detached from the Hub. Parameters: Name Type Description port string Source: hub.js, line 259 × Search results Close "},"LPF2Hub.html":{"id":"LPF2Hub.html","title":"Class: LPF2Hub","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Class: LPF2Hub LPF2Hub new LPF2Hub() Source: lpf2hub.js, line 14 Extends Hub Members &lt;readonly&gt; batteryLevel Properties: Name Type Description batteryLevel number Battery level of the hub (Percentage between 0-100) Inherited From: Hub#batteryLevel Source: hub.js, line 68 &lt;readonly&gt; firmwareVersion Properties: Name Type Description firmwareVersion string Firmware version of the hub Inherited From: Hub#firmwareVersion Source: hub.js, line 47 &lt;readonly&gt; name Properties: Name Type Description name string Name of the hub Inherited From: Hub#name Source: hub.js, line 40 &lt;readonly&gt; rssi Properties: Name Type Description rssi number Signal strength of the hub Inherited From: Hub#rssi Source: hub.js, line 61 &lt;readonly&gt; uuid Properties: Name Type Description uuid string UUID of the hub Inherited From: Hub#uuid Source: hub.js, line 54 &lt;readonly&gt; voltage Properties: Name Type Description voltage number Voltage of the hub (Volts) Inherited From: Hub#voltage Source: hub.js, line 75 Methods connect() Connect to the Hub. Inherited From: Hub#connect Overrides: Hub#connect Source: hub.js, line 85 Returns: Resolved upon successful connect. Type Promise disconnect() Disconnect the Hub. Inherited From: Hub#disconnect Source: hub.js, line 134 Returns: Resolved upon successful disconnect. Type Promise getHubType() Get the hub type. Inherited From: Hub#getHubType Source: hub.js, line 202 Returns: Type HubType getPortDeviceType(port) Get the device type for a given port. Parameters: Name Type Description port string Inherited From: Hub#getPortDeviceType Source: hub.js, line 210 Returns: Type DeviceType setLEDColor(color) Set the color of the LED on the Hub via a color value. Parameters: Name Type Description color Color Source: lpf2hub.js, line 63 Returns: Resolved upon successful issuance of command. Type Promise setLEDRGB(red, green, blue) Set the color of the LED on the Hub via RGB values. Parameters: Name Type Description red number green number blue number Source: lpf2hub.js, line 81 Returns: Resolved upon successful issuance of command. Type Promise setName(name) Set the name of the Hub. Parameters: Name Type Description name string New name of the hub (14 characters or less, ASCII only). Source: lpf2hub.js, line 43 Returns: Resolved upon successful issuance of command. Type Promise sleep(delay) Sleep a given amount of time. This is a helper method to make it easier to add delays into a chain of commands. Parameters: Name Type Description delay number How long to sleep (in milliseconds). Inherited From: Hub#sleep Source: hub.js, line 178 Returns: Resolved after the delay is finished. Type Promise subscribe(port [, mode]) Subscribe to sensor notifications on a given port. Parameters: Name Type Argument Description port string mode number &lt;optional&gt; The sensor mode to activate. If no mode is provided, the default for that sensor will be chosen. Inherited From: Hub#subscribe Source: hub.js, line 146 Returns: Resolved upon successful issuance of command. Type Promise unsubscribe(port) Unsubscribe to sensor notifications on a given port. Parameters: Name Type Description port string Inherited From: Hub#unsubscribe Source: hub.js, line 164 Returns: Resolved upon successful issuance of command. Type Promise wait(commands) Wait until a given list of concurrently running commands are complete. This is a helper method to make it easier to wait for concurrent commands to complete. Parameters: Name Type Description commands Array.&lt;Promise.&lt;any&gt;&gt; Array of executing commands. Inherited From: Hub#wait Source: hub.js, line 191 Returns: Resolved after the commands are finished. Type Promise Events attach Emits when a motor or sensor is attached to the Hub. Parameters: Name Type Description port string type DeviceType Inherited From: Hub#event:attach Source: hub.js, line 247 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Source: lpf2hub.js, line 157 color Emits when a color sensor is activated. Parameters: Name Type Description port string color Color Source: lpf2hub.js, line 257 colorAndDistance A combined color and distance event, emits when the sensor is activated. Parameters: Name Type Description port string color Color distance number Distance, in millimeters. Source: lpf2hub.js, line 273 detach Emits when an attached motor or sensor is detached from the Hub. Parameters: Name Type Description port string Inherited From: Hub#event:detach Source: hub.js, line 259 distance Emits when a distance sensor is activated. Parameters: Name Type Description port string distance number Distance, in millimeters. Source: lpf2hub.js, line 247 rotate Emits when a rotation sensor is activated. Parameters: Name Type Description port string rotation number Source: lpf2hub.js, line 302 speed Emits on a speed change. Parameters: Name Type Description port string speed number Source: lpf2hub.js, line 350 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number Source: lpf2hub.js, line 290 × Search results Close "},"PoweredUP.html":{"id":"PoweredUP.html","title":"Class: PoweredUP","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Class: PoweredUP PoweredUP new PoweredUP() Source: poweredup.js, line 44 Extends EventEmitter Methods getConnectedHubByUUID(uuid) Retrieve a Powered UP Hub by UUID. Parameters: Name Type Description uuid string Source: poweredup.js, line 82 Returns: Type Hub | null getConnectedHubs() Retrieve a list of Powered UP Hubs. Source: poweredup.js, line 91 Returns: Type Array.&lt;Hub&gt; scan() Begin scanning for Powered UP Hub devices. Source: poweredup.js, line 55 stop() Stop scanning for Powered UP Hub devices. Source: poweredup.js, line 70 Events discover Emits when a Powered UP Hub device is found. Parameters: Name Type Description hub WeDo2SmartHub | BoostMoveHub | PUPHub | PUPRemote | DuploTrainBase Source: poweredup.js, line 136 × Search results Close "},"PUPHub.html":{"id":"PUPHub.html","title":"Class: PUPHub","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Class: PUPHub PUPHub new PUPHub() The PUPHub is emitted if the discovered device is a Powered UP Hub. Source: puphub.js, line 15 Extends LPF2Hub Hub Members &lt;readonly&gt; batteryLevel Properties: Name Type Description batteryLevel number Battery level of the hub (Percentage between 0-100) Inherited From: Hub#batteryLevel Overrides: Hub#batteryLevel Source: hub.js, line 68 &lt;readonly&gt; firmwareVersion Properties: Name Type Description firmwareVersion string Firmware version of the hub Inherited From: Hub#firmwareVersion Overrides: Hub#firmwareVersion Source: hub.js, line 47 &lt;readonly&gt; name Properties: Name Type Description name string Name of the hub Inherited From: Hub#name Overrides: Hub#name Source: hub.js, line 40 &lt;readonly&gt; rssi Properties: Name Type Description rssi number Signal strength of the hub Inherited From: Hub#rssi Overrides: Hub#rssi Source: hub.js, line 61 &lt;readonly&gt; uuid Properties: Name Type Description uuid string UUID of the hub Inherited From: Hub#uuid Overrides: Hub#uuid Source: hub.js, line 54 &lt;readonly&gt; voltage Properties: Name Type Description voltage number Voltage of the hub (Volts) Inherited From: Hub#voltage Overrides: Hub#voltage Source: hub.js, line 75 Methods connect() Connect to the Hub. Inherited From: Hub#connect Overrides: Hub#connect Source: hub.js, line 85 Returns: Resolved upon successful connect. Type Promise disconnect() Disconnect the Hub. Inherited From: Hub#disconnect Overrides: Hub#disconnect Source: hub.js, line 134 Returns: Resolved upon successful disconnect. Type Promise getHubType() Get the hub type. Inherited From: Hub#getHubType Overrides: Hub#getHubType Source: hub.js, line 202 Returns: Type HubType getPortDeviceType(port) Get the device type for a given port. Parameters: Name Type Description port string Inherited From: Hub#getPortDeviceType Overrides: Hub#getPortDeviceType Source: hub.js, line 210 Returns: Type DeviceType hardStopMotor(port) Fully (hard) stop the motor on a given port. Parameters: Name Type Description port string Source: puphub.js, line 140 Returns: Resolved upon successful completion of command. Type Promise rampMotorSpeed(port, fromSpeed, toSpeed, time) Ramp the motor speed on a given port. Parameters: Name Type Description port string fromSpeed number For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. toSpeed number For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. time number How long the ramp should last (in milliseconds). Source: puphub.js, line 120 Returns: Resolved upon successful completion of command. Type Promise setLEDColor(color) Set the color of the LED on the Hub via a color value. Parameters: Name Type Description color Color Inherited From: LPF2Hub#setLEDColor Source: lpf2hub.js, line 63 Returns: Resolved upon successful issuance of command. Type Promise setLEDRGB(red, green, blue) Set the color of the LED on the Hub via RGB values. Parameters: Name Type Description red number green number blue number Inherited From: LPF2Hub#setLEDRGB Source: lpf2hub.js, line 81 Returns: Resolved upon successful issuance of command. Type Promise setLightBrightness(port, brightness [, time]) Set the light brightness on a given port. Parameters: Name Type Argument Description port string brightness number Brightness value between 0-100 (0 is off) time number &lt;optional&gt; How long to turn the light on (in milliseconds). Leave empty to turn the light on indefinitely. Source: puphub.js, line 149 Returns: Resolved upon successful completion of command. If time is specified, this is once the light is turned off. Type Promise setMotorSpeed(port, speed [, time]) Set the motor speed on a given port. Parameters: Name Type Argument Description port string speed number | Array.&lt;number&gt; For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. If you are specifying port AB to control both motors, you can optionally supply a tuple of speeds. time number &lt;optional&gt; How long to activate the motor for (in milliseconds). Leave empty to turn the motor on indefinitely. Source: puphub.js, line 52 Returns: Resolved upon successful completion of command. If time is specified, this is once the motor is finished. Type Promise setName(name) Set the name of the Hub. Parameters: Name Type Description name string New name of the hub (14 characters or less, ASCII only). Inherited From: LPF2Hub#setName Source: lpf2hub.js, line 43 Returns: Resolved upon successful issuance of command. Type Promise sleep(delay) Sleep a given amount of time. This is a helper method to make it easier to add delays into a chain of commands. Parameters: Name Type Description delay number How long to sleep (in milliseconds). Inherited From: Hub#sleep Overrides: Hub#sleep Source: hub.js, line 178 Returns: Resolved after the delay is finished. Type Promise subscribe(port [, mode]) Subscribe to sensor notifications on a given port. Parameters: Name Type Argument Description port string mode number &lt;optional&gt; The sensor mode to activate. If no mode is provided, the default for that sensor will be chosen. Inherited From: Hub#subscribe Overrides: Hub#subscribe Source: hub.js, line 146 Returns: Resolved upon successful issuance of command. Type Promise unsubscribe(port) Unsubscribe to sensor notifications on a given port. Parameters: Name Type Description port string Inherited From: Hub#unsubscribe Overrides: Hub#unsubscribe Source: hub.js, line 164 Returns: Resolved upon successful issuance of command. Type Promise wait(commands) Wait until a given list of concurrently running commands are complete. This is a helper method to make it easier to wait for concurrent commands to complete. Parameters: Name Type Description commands Array.&lt;Promise.&lt;any&gt;&gt; Array of executing commands. Inherited From: Hub#wait Overrides: Hub#wait Source: hub.js, line 191 Returns: Resolved after the commands are finished. Type Promise Events attach Emits when a motor or sensor is attached to the Hub. Parameters: Name Type Description port string type DeviceType Inherited From: Hub#event:attach Overrides: Hub#event:attach Source: hub.js, line 247 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 157 color Emits when a color sensor is activated. Parameters: Name Type Description port string color Color Inherited From: LPF2Hub#event:color Source: lpf2hub.js, line 257 colorAndDistance A combined color and distance event, emits when the sensor is activated. Parameters: Name Type Description port string color Color distance number Distance, in millimeters. Inherited From: LPF2Hub#event:colorAndDistance Source: lpf2hub.js, line 273 detach Emits when an attached motor or sensor is detached from the Hub. Parameters: Name Type Description port string Inherited From: Hub#event:detach Overrides: Hub#event:detach Source: hub.js, line 259 distance Emits when a distance sensor is activated. Parameters: Name Type Description port string distance number Distance, in millimeters. Inherited From: LPF2Hub#event:distance Source: lpf2hub.js, line 247 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number Inherited From: LPF2Hub#event:tilt Source: lpf2hub.js, line 290 × Search results Close "},"PUPRemote.html":{"id":"PUPRemote.html","title":"Class: PUPRemote","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Class: PUPRemote PUPRemote new PUPRemote() The PUPRemote is emitted if the discovered device is a Powered UP Remote. Source: pupremote.js, line 15 Extends LPF2Hub Hub Members &lt;readonly&gt; batteryLevel Properties: Name Type Description batteryLevel number Battery level of the hub (Percentage between 0-100) Inherited From: Hub#batteryLevel Overrides: Hub#batteryLevel Source: hub.js, line 68 &lt;readonly&gt; firmwareVersion Properties: Name Type Description firmwareVersion string Firmware version of the hub Inherited From: Hub#firmwareVersion Overrides: Hub#firmwareVersion Source: hub.js, line 47 &lt;readonly&gt; name Properties: Name Type Description name string Name of the hub Inherited From: Hub#name Overrides: Hub#name Source: hub.js, line 40 &lt;readonly&gt; rssi Properties: Name Type Description rssi number Signal strength of the hub Inherited From: Hub#rssi Overrides: Hub#rssi Source: hub.js, line 61 &lt;readonly&gt; uuid Properties: Name Type Description uuid string UUID of the hub Inherited From: Hub#uuid Overrides: Hub#uuid Source: hub.js, line 54 &lt;readonly&gt; voltage Properties: Name Type Description voltage number Voltage of the hub (Volts) Inherited From: Hub#voltage Overrides: Hub#voltage Source: hub.js, line 75 Methods connect() Connect to the Hub. Inherited From: Hub#connect Overrides: Hub#connect Source: hub.js, line 85 Returns: Resolved upon successful connect. Type Promise disconnect() Disconnect the Hub. Inherited From: Hub#disconnect Overrides: Hub#disconnect Source: hub.js, line 134 Returns: Resolved upon successful disconnect. Type Promise getHubType() Get the hub type. Inherited From: Hub#getHubType Overrides: Hub#getHubType Source: hub.js, line 202 Returns: Type HubType getPortDeviceType(port) Get the device type for a given port. Parameters: Name Type Description port string Inherited From: Hub#getPortDeviceType Overrides: Hub#getPortDeviceType Source: hub.js, line 210 Returns: Type DeviceType setLEDColor(color) Set the color of the LED on the Remote via a color value. Parameters: Name Type Description color Color Overrides: LPF2Hub#setLEDColor Source: pupremote.js, line 71 Returns: Resolved upon successful issuance of command. Type Promise setLEDRGB(red, green, blue) Set the color of the LED on the Hub via RGB values. Parameters: Name Type Description red number green number blue number Overrides: LPF2Hub#setLEDRGB Source: pupremote.js, line 89 Returns: Resolved upon successful issuance of command. Type Promise setName(name) Set the name of the Hub. Parameters: Name Type Description name string New name of the hub (14 characters or less, ASCII only). Inherited From: LPF2Hub#setName Source: lpf2hub.js, line 43 Returns: Resolved upon successful issuance of command. Type Promise sleep(delay) Sleep a given amount of time. This is a helper method to make it easier to add delays into a chain of commands. Parameters: Name Type Description delay number How long to sleep (in milliseconds). Inherited From: Hub#sleep Overrides: Hub#sleep Source: hub.js, line 178 Returns: Resolved after the delay is finished. Type Promise subscribe(port [, mode]) Subscribe to sensor notifications on a given port. Parameters: Name Type Argument Description port string mode number &lt;optional&gt; The sensor mode to activate. If no mode is provided, the default for that sensor will be chosen. Inherited From: Hub#subscribe Overrides: Hub#subscribe Source: hub.js, line 146 Returns: Resolved upon successful issuance of command. Type Promise unsubscribe(port) Unsubscribe to sensor notifications on a given port. Parameters: Name Type Description port string Inherited From: Hub#unsubscribe Overrides: Hub#unsubscribe Source: hub.js, line 164 Returns: Resolved upon successful issuance of command. Type Promise wait(commands) Wait until a given list of concurrently running commands are complete. This is a helper method to make it easier to wait for concurrent commands to complete. Parameters: Name Type Description commands Array.&lt;Promise.&lt;any&gt;&gt; Array of executing commands. Inherited From: Hub#wait Overrides: Hub#wait Source: hub.js, line 191 Returns: Resolved after the commands are finished. Type Promise Events button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 157 colorAndDistance A combined color and distance event, emits when the sensor is activated. Parameters: Name Type Description port string color Color distance number Distance, in millimeters. Inherited From: LPF2Hub#event:colorAndDistance Source: lpf2hub.js, line 273 × Search results Close "},"WeDo2SmartHub.html":{"id":"WeDo2SmartHub.html","title":"Class: WeDo2SmartHub","body":" DocStrap Classes BoostMoveHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:distanceBoostMoveHub#event:rotateBoostMoveHub#event:tiltDuploTrainBase#event:colorDuploTrainBase#event:speedHub#event:attachHub#event:detachLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:distanceLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:distancePUPHub#event:tiltPUPRemote#event:buttonPUPRemote#event:colorAndDistanceWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Class: WeDo2SmartHub WeDo2SmartHub new WeDo2SmartHub() The WeDo2SmartHub is emitted if the discovered device is a WeDo 2.0 Smart Hub. Source: wedo2smarthub.js, line 15 Extends Hub Members &lt;readonly&gt; batteryLevel Properties: Name Type Description batteryLevel number Battery level of the hub (Percentage between 0-100) Inherited From: Hub#batteryLevel Source: hub.js, line 68 &lt;readonly&gt; firmwareVersion Properties: Name Type Description firmwareVersion string Firmware version of the hub Inherited From: Hub#firmwareVersion Source: hub.js, line 47 &lt;readonly&gt; name Properties: Name Type Description name string Name of the hub Inherited From: Hub#name Source: hub.js, line 40 &lt;readonly&gt; rssi Properties: Name Type Description rssi number Signal strength of the hub Inherited From: Hub#rssi Source: hub.js, line 61 &lt;readonly&gt; uuid Properties: Name Type Description uuid string UUID of the hub Inherited From: Hub#uuid Source: hub.js, line 54 &lt;readonly&gt; voltage Properties: Name Type Description voltage number Voltage of the hub (Volts) Inherited From: Hub#voltage Source: hub.js, line 75 Methods connect() Connect to the Hub. Inherited From: Hub#connect Overrides: Hub#connect Source: hub.js, line 85 Returns: Resolved upon successful connect. Type Promise disconnect() Disconnect the Hub. Inherited From: Hub#disconnect Source: hub.js, line 134 Returns: Resolved upon successful disconnect. Type Promise getHubType() Get the hub type. Inherited From: Hub#getHubType Source: hub.js, line 202 Returns: Type HubType getPortDeviceType(port) Get the device type for a given port. Parameters: Name Type Description port string Inherited From: Hub#getPortDeviceType Source: hub.js, line 210 Returns: Type DeviceType hardStopMotor(port) Fully (hard) stop the motor on a given port. Parameters: Name Type Description port string Source: wedo2smarthub.js, line 171 Returns: Resolved upon successful completion of command. Type Promise playTone(frequency, time) Play a tone on the Hub's in-built buzzer Parameters: Name Type Description frequency number time number How long the tone should play for (in milliseconds). Source: wedo2smarthub.js, line 180 Returns: Resolved upon successful completion of command (ie. once the tone has finished playing). Type Promise rampMotorSpeed(port, fromSpeed, toSpeed, time) Ramp the motor speed on a given port. Parameters: Name Type Description port string fromSpeed number For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. toSpeed number For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. time number How long the ramp should last (in milliseconds). Source: wedo2smarthub.js, line 151 Returns: Resolved upon successful completion of command. Type Promise setLEDColor(color) Set the color of the LED on the Hub via a color value. Parameters: Name Type Description color Color Source: wedo2smarthub.js, line 82 Returns: Resolved upon successful issuance of command. Type Promise setLEDRGB(red, green, blue) Set the color of the LED on the Hub via RGB values. Parameters: Name Type Description red number green number blue number Source: wedo2smarthub.js, line 100 Returns: Resolved upon successful issuance of command. Type Promise setLightBrightness(port, brightness [, time]) Set the light brightness on a given port. Parameters: Name Type Argument Description port string brightness number Brightness value between 0-100 (0 is off) time number &lt;optional&gt; How long to turn the light on (in milliseconds). Leave empty to turn the light on indefinitely. Source: wedo2smarthub.js, line 196 Returns: Resolved upon successful completion of command. If time is specified, this is once the light is turned off. Type Promise setMotorSpeed(port, speed [, time]) Set the motor speed on a given port. Parameters: Name Type Argument Description port string speed number For forward, a value between 1 - 100 should be set. For reverse, a value between -1 to -100. Stop is 0. time number &lt;optional&gt; How long to activate the motor for (in milliseconds). Leave empty to turn the motor on indefinitely. Source: wedo2smarthub.js, line 117 Returns: Resolved upon successful completion of command. If time is specified, this is once the motor is finished. Type Promise setName(name) Set the name of the Hub. Parameters: Name Type Description name string New name of the hub (14 characters or less, ASCII only). Source: wedo2smarthub.js, line 63 Returns: Resolved upon successful issuance of command. Type Promise sleep(delay) Sleep a given amount of time. This is a helper method to make it easier to add delays into a chain of commands. Parameters: Name Type Description delay number How long to sleep (in milliseconds). Inherited From: Hub#sleep Source: hub.js, line 178 Returns: Resolved after the delay is finished. Type Promise subscribe(port [, mode]) Subscribe to sensor notifications on a given port. Parameters: Name Type Argument Description port string mode number &lt;optional&gt; The sensor mode to activate. If no mode is provided, the default for that sensor will be chosen. Inherited From: Hub#subscribe Source: hub.js, line 146 Returns: Resolved upon successful issuance of command. Type Promise unsubscribe(port) Unsubscribe to sensor notifications on a given port. Parameters: Name Type Description port string Inherited From: Hub#unsubscribe Source: hub.js, line 164 Returns: Resolved upon successful issuance of command. Type Promise wait(commands) Wait until a given list of concurrently running commands are complete. This is a helper method to make it easier to wait for concurrent commands to complete. Parameters: Name Type Description commands Array.&lt;Promise.&lt;any&gt;&gt; Array of executing commands. Inherited From: Hub#wait Source: hub.js, line 191 Returns: Resolved after the commands are finished. Type Promise Events attach Emits when a motor or sensor is attached to the Hub. Parameters: Name Type Description port string type DeviceType Inherited From: Hub#event:attach Source: hub.js, line 247 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Source: wedo2smarthub.js, line 262 color Emits when a color sensor is activated. Parameters: Name Type Description port string color Color Source: wedo2smarthub.js, line 307 detach Emits when an attached motor or sensor is detached from the Hub. Parameters: Name Type Description port string Inherited From: Hub#event:detach Source: hub.js, line 259 distance Emits when a distance sensor is activated. Parameters: Name Type Description port string distance number Distance, in millimeters. Source: wedo2smarthub.js, line 296 rotate Emits when a rotation sensor is activated. Parameters: Name Type Description port string rotation number Source: wedo2smarthub.js, line 337 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string x number y number Source: wedo2smarthub.js, line 325 × Search results Close "}}
</script>
<script type="text/javascript">
$(document).ready(function() {
Searcher.init();
});
$(window).on("message", function(msg) {
var msgData = msg.originalEvent.data;
if (msgData.msgid != "docstrap.quicksearch.start") {
return;
}
var results = Searcher.search(msgData.searchTerms);
window.parent.postMessage({"results": results, "msgid": "docstrap.quicksearch.done"}, "*");
});
</script>
</body>
</html>