node-poweredup/docs/quicksearch.html
Nathan Kellenicki eb6b20adbb
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
Version 5.0.0
2019-12-03 23:13:27 -08:00

32 lines
239 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":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Source: boostmovehub.js \"use strict\"; var __importDefault = (this &amp;&amp; this.__importDefault) || function (mod) { return (mod &amp;&amp; mod.__esModule) ? mod : { \"default\": mod }; }; 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 compare_versions_1 = __importDefault(require(\"compare-versions\")); 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 { constructor(device, autoSubscribe = true) { super(device, autoSubscribe); this._currentPort = 0x3b; this._voltagePort = 0x3c; this.type = Consts.HubType.BOOST_MOVE_HUB; this._ports = { \"A\": new port_1.Port(\"A\", 0), \"B\": new port_1.Port(\"B\", 1), \"C\": new port_1.Port(\"C\", 2), \"D\": new port_1.Port(\"D\", 3), \"TILT\": new port_1.Port(\"TILT\", 58) }; this.on(\"attach\", (port, type) =&gt; { this._combinePorts(port, type); }); debug(\"Discovered Boost Move Hub\"); } static IsBoostMoveHub(peripheral) { return (peripheral.advertisement &amp;&amp; peripheral.advertisement.serviceUuids &amp;&amp; peripheral.advertisement.serviceUuids.indexOf(Consts.BLEService.LPF2_HUB.replace(/-/g, \"\")) &gt;= 0 &amp;&amp; peripheral.advertisement.manufacturerData &amp;&amp; peripheral.advertisement.manufacturerData.length &gt; 3 &amp;&amp; peripheral.advertisement.manufacturerData[3] === Consts.BLEManufacturerData.BOOST_MOVE_HUB_ID); } 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 (!this._virtualPorts[portObj.id] &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.type === Consts.DeviceType.CONTROL_PLUS_LARGE_MOTOR || portObj.type === Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR) { portObj.busy = true; let data = null; if (this._virtualPorts[portObj.id]) { 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.type === Consts.DeviceType.CONTROL_PLUS_LARGE_MOTOR || portObj.type === Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR) { portObj.busy = true; let data = null; if (this._virtualPorts[portObj.id]) { 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 || portObj.type === Consts.DeviceType.CONTROL_PLUS_LARGE_MOTOR || portObj.type === Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR)) { throw new Error(\"Angle rotation is only available when using a Boost Tacho Motor, Boost Move Hub Motor, Control+ Medium Motor, or Control+ Large Motor\"); } if (!this._virtualPorts[portObj.id] &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 (this._virtualPorts[portObj.id]) { 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(); }; }); } /** * Tell motor to goto an absolute position * @method BoostMoveHub#setAbsolutePosition * @param {string} port * @param {number} pos The position of the motor to go to * @param {number | Array.&lt;number&gt;} [speed=100] A value between 1 - 100 should be set (Direction does not apply when going to absolute position) * @returns {Promise} Resolved upon successful completion of command (ie. once the motor is finished). */ setAbsolutePosition(port, pos, speed = 100) { const portObj = this._portLookup(port); if (!(portObj.type === Consts.DeviceType.CONTROL_PLUS_LARGE_MOTOR || portObj.type === Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR)) { throw new Error(\"Absolute positioning is only available when using a Control+ Medium Motor, or Control+ Large Motor\"); } portObj.cancelEventTimer(); return new Promise((resolve, reject) =&gt; { portObj.busy = true; let data = null; if (this._virtualPorts[portObj.id]) { data = Buffer.from([0x81, portObj.value, 0x11, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, this._mapSpeed(speed), 0x64, 0x7f, 0x03]); data.writeInt32LE(pos, 4); data.writeInt32LE(pos, 8); } else { // @ts-ignore: The type of speed is properly checked at the start data = Buffer.from([0x81, portObj.value, 0x11, 0x0d, 0x00, 0x00, 0x00, 0x00, this._mapSpeed(speed), 0x64, 0x7f, 0x03]); data.writeInt32LE(pos, 4); } this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); portObj.finished = () =&gt; { return resolve(); }; }); } /** * Reset the current motor position as absolute position zero * @method BoostMoveHub#resetAbsolutePosition * @param {string} port * @returns {Promise} Resolved upon successful completion of command (ie. once the motor is finished). */ resetAbsolutePosition(port) { const portObj = this._portLookup(port); if (!(portObj.type === Consts.DeviceType.CONTROL_PLUS_LARGE_MOTOR || portObj.type === Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR)) { throw new Error(\"Absolute positioning is only available when using a Control+ Medium Motor, or Control+ Large Motor\"); } return new Promise((resolve) =&gt; { const data = Buffer.from([0x81, portObj.value, 0x11, 0x51, 0x02, 0x00, 0x00, 0x00, 0x00]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); }); } /** * Fully (hard) stop the motor on a given port. * @method BoostMoveHub#brakeMotor * @param {string} port * @returns {Promise} Resolved upon successful completion of command. */ brakeMotor(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(); } }); } _checkFirmware(version) { if (compare_versions_1.default(\"2.0.00.0017\", version) === 1) { throw new Error(`Your Boost Move Hub's (${this.name}) firmware is out of date and unsupported by this library. Please update it via the official Powered Up app.`); } } } exports.BoostMoveHub = BoostMoveHub; //# sourceMappingURL=boostmovehub.js.map × Search results Close "},"hub.js.html":{"id":"hub.js.html","title":"Source: hub.js","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#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(device, autoSubscribe = true) { super(); this.autoSubscribe = true; this.useSpeedMap = true; this.type = Consts.HubType.UNKNOWN; this._ports = {}; this._virtualPorts = {}; this._name = \"\"; this._firmwareVersion = \"0.0.00.0000\"; this._hardwareVersion = \"0.0.00.0000\"; this._primaryMACAddress = \"00:00:00:00:00:00\"; this._batteryLevel = 100; this._voltage = 0; this._current = 0; this._rssi = -60; this._isConnecting = false; this._isConnected = false; this.autoSubscribe = !!autoSubscribe; this._bleDevice = device; device.on(\"disconnect\", () =&gt; { /** * Emits when the hub is disconnected. * @event Hub#disconnect */ this.emit(\"disconnect\"); }); } /** * @readonly * @property {string} name Name of the hub */ get name() { return this._bleDevice.name; } /** * @readonly * @property {string} firmwareVersion Firmware version of the hub */ get firmwareVersion() { return this._firmwareVersion; } /** * @readonly * @property {string} firmwareVersion Hardware version of the hub */ get hardwareVersion() { return this._hardwareVersion; } /** * @readonly * @property {string} primaryMACAddress Primary MAC address of the hub */ get primaryMACAddress() { return this._primaryMACAddress; } /** * @readonly * @property {string} uuid UUID of the hub */ get uuid() { return this._bleDevice.uuid; } /** * @readonly * @property {number} batteryLevel Battery level of the hub (Percentage between 0-100) */ get batteryLevel() { return this._batteryLevel; } /** * @readonly * @property {number} rssi Signal strength of the hub */ get rssi() { return this._rssi; } /** * @readonly * @property {number} voltage Voltage of the hub (Volts) */ get voltage() { return this._voltage; } /** * @readonly * @property {number} current Current usage of the hub (Milliamps) */ get current() { return this._current; } /** * Connect to the Hub. * @method Hub#connect * @returns {Promise} Resolved upon successful connect. */ connect() { return new Promise(async (connectResolve, connectReject) =&gt; { if (this._bleDevice.connecting) { return connectReject(\"Already connecting\"); } else if (this._bleDevice.connected) { return connectReject(\"Already connected\"); } this._isConnecting = true; await this._bleDevice.connect(); return connectResolve(); }); } /** * Disconnect the Hub. * @method Hub#disconnect * @returns {Promise} Resolved upon successful disconnect. */ async disconnect() { this._bleDevice.disconnect(); } /** * 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 !== undefined) { 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; } // protected _getCharacteristic (uuid: string) { // return this._characteristics[uuid.replace(/-/g, \"\")]; // } // protected _subscribeToCharacteristic (characteristic: Characteristic, callback: (data: Buffer) =&gt; void) { // characteristic.on(\"data\", (data: Buffer) =&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 */ if (this._virtualPorts[port.id]) { delete this._virtualPorts[port.id]; } 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]; } } for (const key of Object.keys(this._virtualPorts)) { if (this._virtualPorts[key].value === num) { return this._virtualPorts[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(portName) { const portNameUpper = portName.toUpperCase(); const port = this._ports[portNameUpper] || this._virtualPorts[portNameUpper]; if (!port) { throw new Error(`Port ${portNameUpper} does not exist on this Hub type`); } return port; } _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.CONTROL_PLUS_LARGE_MOTOR: return 0x02; case Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR: return 0x02; case Consts.DeviceType.CONTROL_PLUS_TILT: return 0x00; case Consts.DeviceType.CONTROL_PLUS_ACCELEROMETER: return 0x00; 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; //# sourceMappingURL=hub.js.map × Search results Close "},"lpf2hub.js.html":{"id":"lpf2hub.js.html","title":"Source: lpf2hub.js","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#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 port_1 = require(\"./port\"); const Consts = __importStar(require(\"./consts\")); const utils_1 = require(\"./utils\"); const Debug = require(\"debug\"); const debug = Debug(\"lpf2hub\"); const modeInfoDebug = Debug(\"lpf2hubmodeinfo\"); /** * @class LPF2Hub * @extends Hub */ class LPF2Hub extends hub_1.Hub { constructor() { super(...arguments); this._ledPort = 0x32; this._voltageMaxV = 9.6; this._voltageMaxRaw = 3893; this._currentMaxMA = 2444; this._currentMaxRaw = 4095; this._lastTiltX = 0; this._lastTiltY = 0; this._lastTiltZ = 0; this._messageBuffer = Buffer.alloc(0); } static decodeVersion(v) { const t = v.toString(16).padStart(8, \"0\"); return [t[0], t[1], t.substring(2, 4), t.substring(4)].join(\".\"); } static decodeMACAddress(v) { return Array.from(v).map((n) =&gt; utils_1.toHex(n, 2)).join(\":\"); } connect() { return new Promise(async (resolve, reject) =&gt; { await super.connect(); await this._bleDevice.discoverCharacteristicsForService(Consts.BLEService.LPF2_HUB); this._bleDevice.subscribeToCharacteristic(Consts.BLECharacteristic.LPF2_ALL, this._parseMessage.bind(this)); if (this._voltagePort !== undefined) { this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x41, this._voltagePort, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01])); // Activate voltage reports } if (this._currentPort !== undefined) { this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x41, this._currentPort, 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])); } await this.sleep(100); 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, 0x04, 0x05])); // Request hardware version this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x01, 0x05, 0x02])); // Activate RSSI updates this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x01, 0x06, 0x02])); // Activate battery level reports this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x01, 0x0d, 0x05])); // Request primary MAC address this.emit(\"connect\"); resolve(); }); } /** * Shutdown the Hub. * @method LPF2Hub#shutdown * @returns {Promise} Resolved upon successful disconnect. */ shutdown() { return new Promise((resolve, reject) =&gt; { this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x02, 0x01]), () =&gt; { 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, this._ledPort, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); if (typeof color === \"boolean\") { color = 0; } data = Buffer.from([0x81, this._ledPort, 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, this._ledPort, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); data = Buffer.from([0x81, this._ledPort, 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) { message = Buffer.concat([Buffer.alloc(2), message]); message[0] = message.length; debug(\"Sent Message (LPF2_ALL)\", message); this._bleDevice.writeToCharacteristic(uuid, message, callback); } _combinePorts(port, type) { if (!this._ports[port]) { return; } const portObj = this._portLookup(port); if (portObj) { Object.keys(this._ports).forEach((id) =&gt; { if (this._ports[id].type === type &amp;&amp; this._ports[id].value !== portObj.value &amp;&amp; !this._virtualPorts[`${portObj.value &lt; this._ports[id].value ? portObj.id : this._ports[id].id}${portObj.value &gt; this._ports[id].value ? portObj.id : this._ports[id].id}`]) { debug(\"Combining ports\", portObj.value &lt; this._ports[id].value ? portObj.id : id, portObj.value &gt; this._ports[id].value ? portObj.id : id); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x61, 0x01, portObj.value &lt; this._ports[id].value ? portObj.value : this._ports[id].value, portObj.value &gt; this._ports[id].value ? portObj.value : this._ports[id].value])); } }); } } _checkFirmware(version) { return; } _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); debug(\"Received Message (LPF2_ALL)\", message); switch (message[2]) { case 0x01: { this._parseDeviceInfo(message); break; } case 0x04: { this._parsePortMessage(message); break; } case 0x43: { this._parsePortInformationResponse(message); break; } case 0x44: { this._parseModeInformationResponse(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) { this._firmwareVersion = LPF2Hub.decodeVersion(data.readInt32LE(5)); this._checkFirmware(this._firmwareVersion); // Hardware version } else if (data[3] === 0x04) { this._hardwareVersion = LPF2Hub.decodeVersion(data.readInt32LE(5)); // RSSI update } else if (data[3] === 0x05) { const rssi = data.readInt8(5); if (rssi !== 0) { this._rssi = rssi; this.emit(\"rssiChange\", this._rssi); } // primary MAC Address } else if (data[3] === 0x0d) { this._primaryMACAddress = LPF2Hub.decodeMACAddress(data.slice(5)); // Battery level reports } else if (data[3] === 0x06) { this._batteryLevel = data[5]; } } _parsePortMessage(data) { let port = this._getPortForPortNumber(data[3]); const type = data[4] ? data.readUInt16LE(5) : 0; if (data[4] === 0x01 &amp;&amp; modeInfoDebug.enabled) { const typeName = Consts.DeviceTypeNames[data[5]] || \"unknown\"; modeInfoDebug(`Port ${utils_1.toHex(data[3])}, type ${utils_1.toHex(type, 4)} (${typeName})`); const hwVersion = LPF2Hub.decodeVersion(data.readInt32LE(7)); const swVersion = LPF2Hub.decodeVersion(data.readInt32LE(11)); modeInfoDebug(`Port ${utils_1.toHex(data[3])}, hardware version ${hwVersion}, software version ${swVersion}`); this._sendPortInformationRequest(data[3]); } if (!port) { if (data[4] === 0x02) { const portA = this._getPortForPortNumber(data[7]); const portB = this._getPortForPortNumber(data[8]); if (portA &amp;&amp; portB) { this._virtualPorts[`${portA.id}${portB.id}`] = new port_1.Port(`${portA.id}${portB.id}`, data[3]); port = this._getPortForPortNumber(data[3]); if (port) { port.connected = true; this._registerDeviceAttachment(port, type); } else { return; } } else { return; } } else { return; } } else { port.connected = (data[4] === 0x01 || data[4] === 0x02) ? true : false; this._registerDeviceAttachment(port, type); } } _sendPortInformationRequest(port) { this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x21, port, 0x01])); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x21, port, 0x02])); // Mode combinations } _parsePortInformationResponse(data) { const port = data[3]; if (data[4] === 2) { const modeCombinationMasks = []; for (let i = 5; i &lt; data.length; i += 2) { modeCombinationMasks.push(data.readUInt16LE(i)); } modeInfoDebug(`Port ${utils_1.toHex(port)}, mode combinations [${modeCombinationMasks.map((c) =&gt; utils_1.toBin(c, 0)).join(\", \")}]`); return; } const count = data[6]; const input = utils_1.toBin(data.readUInt16LE(7), count); const output = utils_1.toBin(data.readUInt16LE(9), count); modeInfoDebug(`Port ${utils_1.toHex(port)}, total modes ${count}, input modes ${input}, output modes ${output}`); for (let i = 0; i &lt; count; i++) { this._sendModeInformationRequest(port, i, 0x00); // Mode Name this._sendModeInformationRequest(port, i, 0x01); // RAW Range this._sendModeInformationRequest(port, i, 0x02); // PCT Range this._sendModeInformationRequest(port, i, 0x03); // SI Range this._sendModeInformationRequest(port, i, 0x04); // SI Symbol this._sendModeInformationRequest(port, i, 0x80); // Value Format } } _sendModeInformationRequest(port, mode, type) { this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x22, port, mode, type])); } _parseModeInformationResponse(data) { const port = utils_1.toHex(data[3]); const mode = data[4]; const type = data[5]; switch (type) { case 0x00: // Mode Name modeInfoDebug(`Port ${port}, mode ${mode}, name ${data.slice(6, data.length).toString()}`); break; case 0x01: // RAW Range modeInfoDebug(`Port ${port}, mode ${mode}, RAW min ${data.readFloatLE(6)}, max ${data.readFloatLE(10)}`); break; case 0x02: // PCT Range modeInfoDebug(`Port ${port}, mode ${mode}, PCT min ${data.readFloatLE(6)}, max ${data.readFloatLE(10)}`); break; case 0x03: // SI Range modeInfoDebug(`Port ${port}, mode ${mode}, SI min ${data.readFloatLE(6)}, max ${data.readFloatLE(10)}`); break; case 0x04: // SI Symbol modeInfoDebug(`Port ${port}, mode ${mode}, SI symbol ${data.slice(6, data.length).toString()}`); break; case 0x80: // Value Format const numValues = data[6]; const dataType = [\"8bit\", \"16bit\", \"32bit\", \"float\"][data[7]]; const totalFigures = data[8]; const decimals = data[9]; modeInfoDebug(`Port ${port}, mode ${mode}, Value ${numValues} x ${dataType}, Decimal format ${totalFigures}.${decimals}`); } } _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; } } } _parseSensorMessage(data) { if (data[3] === this._voltagePort) { const voltageRaw = data.readUInt16LE(4); this._voltage = voltageRaw * this._voltageMaxV / this._voltageMaxRaw; return; } else if (data[3] === this._currentPort) { const currentRaw = data.readUInt16LE(4); this._current = this._currentMaxMA * currentRaw / this._currentMaxRaw; return; } if ((data[3] === 0x3d &amp;&amp; this.type === Consts.HubType.CONTROL_PLUS_HUB)) { // Control+ CPU Temperature /** * Emits when a change is detected on a temperature sensor. Measured in degrees centigrade. * @event LPF2Hub#temp * @param {string} port For Control+ Hubs, port will be \"CPU\" as the sensor reports CPU temperature. * @param {number} temp */ this.emit(\"temp\", \"CPU\", ((data.readInt16LE(4) / 900) * 90).toFixed(2)); 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.readInt8(4); const tiltY = data.readInt8(5); 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 or Control+ Hub's in-built tilt sensor, the special port \"TILT\" is used. * @param {number} x * @param {number} y * @param {number} z (Only available when using a Control+ Hub) */ this.emit(\"tilt\", port.id, this._lastTiltX, this._lastTiltY, this._lastTiltZ); 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.CONTROL_PLUS_LARGE_MOTOR: { const rotation = data.readInt32LE(4); this.emit(\"rotate\", port.id, rotation); break; } case Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR: { const rotation = data.readInt32LE(4); this.emit(\"rotate\", port.id, rotation); break; } case Consts.DeviceType.CONTROL_PLUS_TILT: { const tiltZ = data.readInt16LE(4); const tiltY = data.readInt16LE(6); const tiltX = data.readInt16LE(8); this._lastTiltX = tiltX; this._lastTiltY = tiltY; this._lastTiltZ = tiltZ; this.emit(\"tilt\", \"TILT\", this._lastTiltX, this._lastTiltY, this._lastTiltZ); break; } case Consts.DeviceType.CONTROL_PLUS_GYRO: { const gyroX = Math.round(data.readInt16LE(4) * 7 / 400); const gyroY = Math.round(data.readInt16LE(6) * 7 / 400); const gyroZ = Math.round(data.readInt16LE(8) * 7 / 400); /** * Emits when gyroscope detects movement. Measured in DPS - degrees per second. * @event LPF2Hub#gyro * @param {string} port * @param {number} x * @param {number} y * @param {number} z */ this.emit(\"gyro\", \"GYRO\", gyroX, gyroY, gyroZ); break; } case Consts.DeviceType.CONTROL_PLUS_ACCELEROMETER: { const accelX = Math.round(data.readInt16LE(4) / 4.096); const accelY = Math.round(data.readInt16LE(6) / 4.096); const accelZ = Math.round(data.readInt16LE(8) / 4.096); /** * Emits when accelerometer detects movement. Measured in mG. * @event LPF2Hub#accel * @param {string} port * @param {number} x * @param {number} y * @param {number} z */ this.emit(\"accel\", \"ACCEL\", accelX, accelY, accelZ); break; } case Consts.DeviceType.BOOST_TILT: { const tiltX = data.readInt8(4); const tiltY = data.readInt8(5); this._lastTiltX = tiltX; this._lastTiltY = tiltY; this.emit(\"tilt\", port.id, this._lastTiltX, this._lastTiltY, this._lastTiltZ); 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; //# sourceMappingURL=lpf2hub.js.map × Search results Close "},"consts.js.html":{"id":"consts.js.html","title":"Source: consts.js","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#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 * @property {number} CONTROL_PLUS_HUB 6 */ 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[HubType[\"CONTROL_PLUS_HUB\"] = 6] = \"CONTROL_PLUS_HUB\"; })(HubType = exports.HubType || (exports.HubType = {})); // tslint:disable-next-line exports.HubTypeNames = HubType; /** * @typedef DeviceType * @property {number} UNKNOWN 0 * @property {number} BASIC_MOTOR 1 * @property {number} TRAIN_MOTOR 2 * @property {number} LED_LIGHTS 8 * @property {number} VOLTAGE 20 * @property {number} CURRENT 21 * @property {number} PIEZO_TONE 22 * @property {number} RGB_LIGHT 23 * @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} CONTROL_PLUS_LARGE_MOTOR 46 * @property {number} CONTROL_PLUS_XLARGE_MOTOR 47 * @property {number} POWERED_UP_REMOTE_BUTTON 55 * @property {number} RSSI 56 * @property {number} CONTROL_PLUS_ACCELEROMETER 58 * @property {number} CONTROL_PLUS_TILT 59 */ 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[\"VOLTAGE\"] = 20] = \"VOLTAGE\"; DeviceType[DeviceType[\"CURRENT\"] = 21] = \"CURRENT\"; DeviceType[DeviceType[\"PIEZO_TONE\"] = 22] = \"PIEZO_TONE\"; DeviceType[DeviceType[\"RGB_LIGHT\"] = 23] = \"RGB_LIGHT\"; 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[\"CONTROL_PLUS_LARGE_MOTOR\"] = 46] = \"CONTROL_PLUS_LARGE_MOTOR\"; DeviceType[DeviceType[\"CONTROL_PLUS_XLARGE_MOTOR\"] = 47] = \"CONTROL_PLUS_XLARGE_MOTOR\"; DeviceType[DeviceType[\"CONTROL_PLUS_GEST\"] = 54] = \"CONTROL_PLUS_GEST\"; DeviceType[DeviceType[\"POWERED_UP_REMOTE_BUTTON\"] = 55] = \"POWERED_UP_REMOTE_BUTTON\"; DeviceType[DeviceType[\"RSSI\"] = 56] = \"RSSI\"; DeviceType[DeviceType[\"CONTROL_PLUS_ACCELEROMETER\"] = 57] = \"CONTROL_PLUS_ACCELEROMETER\"; DeviceType[DeviceType[\"CONTROL_PLUS_GYRO\"] = 58] = \"CONTROL_PLUS_GYRO\"; DeviceType[DeviceType[\"CONTROL_PLUS_TILT\"] = 59] = \"CONTROL_PLUS_TILT\"; DeviceType[DeviceType[\"TEMPERATURE\"] = 60] = \"TEMPERATURE\"; })(DeviceType = exports.DeviceType || (exports.DeviceType = {})); // tslint:disable-next-line exports.DeviceTypeNames = 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 = {})); // tslint:disable-next-line exports.ColorNames = 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[\"DUPLO_TRAIN_HUB_ID\"] = 32] = \"DUPLO_TRAIN_HUB_ID\"; 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[\"CONTROL_PLUS_LARGE_HUB\"] = 128] = \"CONTROL_PLUS_LARGE_HUB\"; })(BLEManufacturerData = exports.BLEManufacturerData || (exports.BLEManufacturerData = {})); var BLEService; (function (BLEService) { BLEService[\"WEDO2_SMART_HUB\"] = \"00001523-1212-efde-1523-785feabcd123\"; BLEService[\"WEDO2_SMART_HUB_2\"] = \"00004f0e-1212-efde-1523-785feabcd123\"; BLEService[\"WEDO2_SMART_HUB_3\"] = \"2a19\"; BLEService[\"WEDO2_SMART_HUB_4\"] = \"180f\"; BLEService[\"WEDO2_SMART_HUB_5\"] = \"180a\"; 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_DISCONNECT\"] = \"0000152b-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 = {})); //# sourceMappingURL=consts.js.map × Search results Close "},"controlplushub.js.html":{"id":"controlplushub.js.html","title":"Source: controlplushub.js","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Source: controlplushub.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(\"ControlPlusHub\"); /** * The ControlPlusHub is emitted if the discovered device is a Control+ Hub. * @class ControlPlusHub * @extends LPF2Hub * @extends Hub */ class ControlPlusHub extends lpf2hub_1.LPF2Hub { constructor(device, autoSubscribe = true) { super(device, autoSubscribe); this._currentPort = 0x3b; this._currentMaxMA = 4175; this._voltagePort = 0x3c; this._voltageMaxRaw = 4095; this._voltageMaxV = 9.615; this.type = Consts.HubType.CONTROL_PLUS_HUB; this._ports = { \"A\": new port_1.Port(\"A\", 0), \"B\": new port_1.Port(\"B\", 1), \"C\": new port_1.Port(\"C\", 2), \"D\": new port_1.Port(\"D\", 3), \"ACCEL\": new port_1.Port(\"ACCEL\", 97), \"GYRO\": new port_1.Port(\"GYRO\", 98), \"TILT\": new port_1.Port(\"TILT\", 99) }; this.on(\"attach\", (port, type) =&gt; { this._combinePorts(port, type); }); debug(\"Discovered Control+ Hub\"); } static IsControlPlusHub(peripheral) { return (peripheral.advertisement &amp;&amp; peripheral.advertisement.serviceUuids &amp;&amp; peripheral.advertisement.serviceUuids.indexOf(Consts.BLEService.LPF2_HUB.replace(/-/g, \"\")) &gt;= 0 &amp;&amp; peripheral.advertisement.manufacturerData &amp;&amp; peripheral.advertisement.manufacturerData.length &gt; 3 &amp;&amp; peripheral.advertisement.manufacturerData[3] === Consts.BLEManufacturerData.CONTROL_PLUS_LARGE_HUB); } connect() { return new Promise(async (resolve, reject) =&gt; { debug(\"Connecting to Control+ Hub\"); await super.connect(); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, Buffer.from([0x41, 0x3d, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01])); // Temperature debug(\"Connect completed\"); return resolve(); }); } /** * Set the motor speed on a given port. * @method ControlPlusHub#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 (!this._virtualPorts[portObj.id] &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.type === Consts.DeviceType.CONTROL_PLUS_LARGE_MOTOR || portObj.type === Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR) { portObj.busy = true; let data = null; if (this._virtualPorts[portObj.id]) { 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 (this._virtualPorts[portObj.id]) { 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 ControlPlusHub#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 ControlPlusHub#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 || portObj.type === Consts.DeviceType.CONTROL_PLUS_LARGE_MOTOR || portObj.type === Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR)) { throw new Error(\"Angle rotation is only available when using a Boost Tacho Motor, Boost Move Hub Motor, Control+ Medium Motor, or Control+ Large Motor\"); } if (!this._virtualPorts[portObj.id] &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 (this._virtualPorts[portObj.id]) { 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(); }; }); } /** * Tell motor to goto an absolute position * @method ControlPlusHub#setAbsolutePosition * @param {string} port * @param {number} pos The position of the motor to go to * @param {number | Array.&lt;number&gt;} [speed=100] A value between 1 - 100 should be set (Direction does not apply when going to absolute position) * @returns {Promise} Resolved upon successful completion of command (ie. once the motor is finished). */ setAbsolutePosition(port, pos, speed = 100) { const portObj = this._portLookup(port); if (!(portObj.type === Consts.DeviceType.CONTROL_PLUS_LARGE_MOTOR || portObj.type === Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR)) { throw new Error(\"Absolute positioning is only available when using a Control+ Medium Motor, or Control+ Large Motor\"); } portObj.cancelEventTimer(); return new Promise((resolve, reject) =&gt; { portObj.busy = true; let data = null; if (this._virtualPorts[portObj.id]) { data = Buffer.from([0x81, portObj.value, 0x11, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, this._mapSpeed(speed), 0x64, 0x7f, 0x03]); data.writeInt32LE(pos, 4); data.writeInt32LE(pos, 8); } else { // @ts-ignore: The type of speed is properly checked at the start data = Buffer.from([0x81, portObj.value, 0x11, 0x0d, 0x00, 0x00, 0x00, 0x00, this._mapSpeed(speed), 0x64, 0x7f, 0x03]); data.writeInt32LE(pos, 4); } this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); portObj.finished = () =&gt; { return resolve(); }; }); } /** * Reset the current motor position as absolute position zero * @method ControlPlusHub#resetAbsolutePosition * @param {string} port * @returns {Promise} Resolved upon successful completion of command (ie. once the motor is finished). */ resetAbsolutePosition(port) { const portObj = this._portLookup(port); if (!(portObj.type === Consts.DeviceType.CONTROL_PLUS_LARGE_MOTOR || portObj.type === Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR)) { throw new Error(\"Absolute positioning is only available when using a Control+ Medium Motor, or Control+ Large Motor\"); } return new Promise((resolve) =&gt; { const data = Buffer.from([0x81, portObj.value, 0x11, 0x51, 0x02, 0x00, 0x00, 0x00, 0x00]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); }); } /** * Fully (hard) stop the motor on a given port. * @method ControlPlusHub#brakeMotor * @param {string} port * @returns {Promise} Resolved upon successful completion of command. */ brakeMotor(port) { return this.setMotorSpeed(port, 127); } /** * Set the light brightness on a given port. * @method ControlPlusHub#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.ControlPlusHub = ControlPlusHub; //# sourceMappingURL=controlplushub.js.map × Search results Close "},"duplotrainbase.js.html":{"id":"duplotrainbase.js.html","title":"Source: duplotrainbase.js","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#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 { constructor(device, autoSubscribe = true) { super(device, autoSubscribe); this._ledPort = 0x11; this._voltagePort = 0x14; this._voltageMaxV = 6.4; this._voltageMaxRaw = 3047; 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\"); } static IsDuploTrainBase(peripheral) { return (peripheral.advertisement &amp;&amp; peripheral.advertisement.serviceUuids &amp;&amp; peripheral.advertisement.serviceUuids.indexOf(Consts.BLEService.LPF2_HUB.replace(/-/g, \"\")) &gt;= 0 &amp;&amp; peripheral.advertisement.manufacturerData &amp;&amp; peripheral.advertisement.manufacturerData.length &gt; 3 &amp;&amp; peripheral.advertisement.manufacturerData[3] === Consts.BLEManufacturerData.DUPLO_TRAIN_HUB_ID); } connect() { return new Promise(async (resolve, reject) =&gt; { debug(\"Connecting to Duplo Train Base\"); await super.connect(); debug(\"Connect completed\"); 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#brakeMotor * @param {string} port * @returns {Promise} Resolved upon successful completion of command. */ brakeMotor(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; //# sourceMappingURL=duplotrainbase.js.map × Search results Close "},"poweredup-node.js.html":{"id":"poweredup-node.js.html","title":"Source: poweredup-node.js","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Source: poweredup-node.js \"use strict\"; Object.defineProperty(exports, \"__esModule\", { value: true }); const boostmovehub_1 = require(\"./boostmovehub\"); const controlplushub_1 = require(\"./controlplushub\"); const duplotrainbase_1 = require(\"./duplotrainbase\"); const nobledevice_1 = require(\"./nobledevice\"); const puphub_1 = require(\"./puphub\"); const pupremote_1 = require(\"./pupremote\"); const wedo2smarthub_1 = require(\"./wedo2smarthub\"); const events_1 = require(\"events\"); const Debug = require(\"debug\"); const debug = Debug(\"poweredup\"); const noble = require(\"@abandonware/noble\"); let ready = false; let wantScan = false; let discoveryEventAttached = false; const startScanning = () =&gt; { 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 */ async scan() { wantScan = true; if (!discoveryEventAttached) { noble.on(\"discover\", this._discoveryEventHandler); discoveryEventAttached = true; } if (ready) { debug(\"Scanning started\"); startScanning(); } return true; } /** * 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 list of Powered UP Hubs. * @method PoweredUP#getConnectedHubs * @returns {Hub[]} */ getConnectedHubs() { return Object.keys(this._connectedHubs).map((uuid) =&gt; this._connectedHubs[uuid]); } /** * Retrieve a Powered UP Hub by UUID. * @method PoweredUP#getConnectedHubByUUID * @param {string} uuid * @returns {Hub | null} */ getConnectedHubByUUID(uuid) { return this._connectedHubs[uuid]; } /** * Retrieve a Powered UP Hub by primary MAC address. * @method PoweredUP#getConnectedHubByPrimaryMACAddress * @param {string} address * @returns {Hub} */ getConnectedHubByPrimaryMACAddress(address) { return Object.keys(this._connectedHubs).map((uuid) =&gt; this._connectedHubs[uuid]).filter((hub) =&gt; hub.primaryMACAddress === address)[0]; } /** * Retrieve a list of Powered UP Hub by name. * @method PoweredUP#getConnectedHubsByName * @param {string} name * @returns {Hub[]} */ getConnectedHubsByName(name) { return Object.keys(this._connectedHubs).map((uuid) =&gt; this._connectedHubs[uuid]).filter((hub) =&gt; hub.name === name); } async _discoveryEventHandler(peripheral) { peripheral.removeAllListeners(); const device = new nobledevice_1.NobleDevice(peripheral); let hub; if (await wedo2smarthub_1.WeDo2SmartHub.IsWeDo2SmartHub(peripheral)) { hub = new wedo2smarthub_1.WeDo2SmartHub(device, this.autoSubscribe); } else if (await boostmovehub_1.BoostMoveHub.IsBoostMoveHub(peripheral)) { hub = new boostmovehub_1.BoostMoveHub(device, this.autoSubscribe); } else if (await puphub_1.PUPHub.IsPUPHub(peripheral)) { hub = new puphub_1.PUPHub(device, this.autoSubscribe); } else if (await pupremote_1.PUPRemote.IsPUPRemote(peripheral)) { hub = new pupremote_1.PUPRemote(device, this.autoSubscribe); } else if (await duplotrainbase_1.DuploTrainBase.IsDuploTrainBase(peripheral)) { hub = new duplotrainbase_1.DuploTrainBase(device, this.autoSubscribe); } else if (await controlplushub_1.ControlPlusHub.IsControlPlusHub(peripheral)) { hub = new controlplushub_1.ControlPlusHub(device, this.autoSubscribe); } else { return; } device.on(\"discoverComplete\", () =&gt; { 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 | ControlPlusHub | PUPHub | PUPRemote | DuploTrainBase} hub */ this.emit(\"discover\", hub); }); } } exports.PoweredUP = PoweredUP; //# sourceMappingURL=poweredup-node.js.map × Search results Close "},"puphub.js.html":{"id":"puphub.js.html","title":"Source: puphub.js","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Source: puphub.js \"use strict\"; var __importDefault = (this &amp;&amp; this.__importDefault) || function (mod) { return (mod &amp;&amp; mod.__esModule) ? mod : { \"default\": mod }; }; 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 compare_versions_1 = __importDefault(require(\"compare-versions\")); 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 { constructor(device, autoSubscribe = true) { super(device, autoSubscribe); this._currentPort = 0x3b; this._voltagePort = 0x3c; this.type = Consts.HubType.POWERED_UP_HUB; this._ports = { \"A\": new port_1.Port(\"A\", 0), \"B\": new port_1.Port(\"B\", 1) }; this.on(\"attach\", (port, type) =&gt; { this._combinePorts(port, type); }); debug(\"Discovered Powered UP Hub\"); } static IsPUPHub(peripheral) { return (peripheral.advertisement &amp;&amp; peripheral.advertisement.serviceUuids &amp;&amp; peripheral.advertisement.serviceUuids.indexOf(Consts.BLEService.LPF2_HUB.replace(/-/g, \"\")) &gt;= 0 &amp;&amp; peripheral.advertisement.manufacturerData &amp;&amp; peripheral.advertisement.manufacturerData.length &gt; 3 &amp;&amp; peripheral.advertisement.manufacturerData[3] === Consts.BLEManufacturerData.POWERED_UP_HUB_ID); } 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 (!this._virtualPorts[portObj.id] &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.type === Consts.DeviceType.CONTROL_PLUS_LARGE_MOTOR || portObj.type === Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR) { portObj.busy = true; let data = null; if (this._virtualPorts[portObj.id]) { 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 (this._virtualPorts[portObj.id]) { 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 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); }); } /** * Rotate a motor by a given angle. * @method PUPHub#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 || portObj.type === Consts.DeviceType.CONTROL_PLUS_LARGE_MOTOR || portObj.type === Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR)) { throw new Error(\"Angle rotation is only available when using a Boost Tacho Motor, Boost Move Hub Motor, Control+ Medium Motor, or Control+ Large Motor\"); } if (!this._virtualPorts[portObj.id] &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 (this._virtualPorts[portObj.id]) { 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(); }; }); } /** * Tell motor to goto an absolute position * @method PUPHub#setAbsolutePosition * @param {string} port * @param {number} pos The position of the motor to go to * @param {number | Array.&lt;number&gt;} [speed=100] A value between 1 - 100 should be set (Direction does not apply when going to absolute position) * @returns {Promise} Resolved upon successful completion of command (ie. once the motor is finished). */ setAbsolutePosition(port, pos, speed = 100) { const portObj = this._portLookup(port); if (!(portObj.type === Consts.DeviceType.CONTROL_PLUS_LARGE_MOTOR || portObj.type === Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR)) { throw new Error(\"Absolute positioning is only available when using a Control+ Medium Motor, or Control+ Large Motor\"); } portObj.cancelEventTimer(); return new Promise((resolve, reject) =&gt; { portObj.busy = true; let data = null; if (this._virtualPorts[portObj.id]) { data = Buffer.from([0x81, portObj.value, 0x11, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, this._mapSpeed(speed), 0x64, 0x7f, 0x03]); data.writeInt32LE(pos, 4); data.writeInt32LE(pos, 8); } else { // @ts-ignore: The type of speed is properly checked at the start data = Buffer.from([0x81, portObj.value, 0x11, 0x0d, 0x00, 0x00, 0x00, 0x00, this._mapSpeed(speed), 0x64, 0x7f, 0x03]); data.writeInt32LE(pos, 4); } this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); portObj.finished = () =&gt; { return resolve(); }; }); } /** * Reset the current motor position as absolute position zero * @method PUPHub#resetAbsolutePosition * @param {string} port * @returns {Promise} Resolved upon successful completion of command (ie. once the motor is finished). */ resetAbsolutePosition(port) { const portObj = this._portLookup(port); if (!(portObj.type === Consts.DeviceType.CONTROL_PLUS_LARGE_MOTOR || portObj.type === Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR)) { throw new Error(\"Absolute positioning is only available when using a Control+ Medium Motor, or Control+ Large Motor\"); } return new Promise((resolve) =&gt; { const data = Buffer.from([0x81, portObj.value, 0x11, 0x51, 0x02, 0x00, 0x00, 0x00, 0x00]); this._writeMessage(Consts.BLECharacteristic.LPF2_ALL, data); return resolve(); }); } /** * Fully (hard) stop the motor on a given port. * @method PUPHub#brakeMotor * @param {string} port * @returns {Promise} Resolved upon successful completion of command. */ brakeMotor(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(); } }); } _checkFirmware(version) { if (compare_versions_1.default(\"1.1.00.0004\", version) === 1) { throw new Error(`Your Powered Up Hub's (${this.name}) firmware is out of date and unsupported by this library. Please update it via the official Powered Up app.`); } } } exports.PUPHub = PUPHub; //# sourceMappingURL=puphub.js.map × Search results Close "},"pupremote.js.html":{"id":"pupremote.js.html","title":"Source: pupremote.js","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#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 { constructor(device, autoSubscribe = true) { super(device, autoSubscribe); this._ledPort = 0x34; this._voltagePort = 0x3b; this._voltageMaxV = 6.4; this._voltageMaxRaw = 3200; 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\"); } static IsPUPRemote(peripheral) { return (peripheral.advertisement &amp;&amp; peripheral.advertisement.serviceUuids &amp;&amp; peripheral.advertisement.serviceUuids.indexOf(Consts.BLEService.LPF2_HUB.replace(/-/g, \"\")) &gt;= 0 &amp;&amp; peripheral.advertisement.manufacturerData &amp;&amp; peripheral.advertisement.manufacturerData.length &gt; 3 &amp;&amp; peripheral.advertisement.manufacturerData[3] === Consts.BLEManufacturerData.POWERED_UP_REMOTE_ID); } connect() { return new Promise(async (resolve, reject) =&gt; { debug(\"Connecting to Powered UP Remote\"); await super.connect(); debug(\"Connect completed\"); return resolve(); }); } } exports.PUPRemote = PUPRemote; //# sourceMappingURL=pupremote.js.map × Search results Close "},"wedo2smarthub.js.html":{"id":"wedo2smarthub.js.html","title":"Source: wedo2smarthub.js","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#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 utils_1 = require(\"./utils\"); 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(device, autoSubscribe = true) { super(device, 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\"); } static IsWeDo2SmartHub(peripheral) { return (peripheral.advertisement &amp;&amp; peripheral.advertisement.serviceUuids &amp;&amp; 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(); await this._bleDevice.discoverCharacteristicsForService(Consts.BLEService.WEDO2_SMART_HUB); await this._bleDevice.discoverCharacteristicsForService(Consts.BLEService.WEDO2_SMART_HUB_2); if (!utils_1.isWebBluetooth) { await this._bleDevice.discoverCharacteristicsForService(Consts.BLEService.WEDO2_SMART_HUB_3); await this._bleDevice.discoverCharacteristicsForService(Consts.BLEService.WEDO2_SMART_HUB_4); await this._bleDevice.discoverCharacteristicsForService(Consts.BLEService.WEDO2_SMART_HUB_5); } else { await this._bleDevice.discoverCharacteristicsForService(\"battery_service\"); await this._bleDevice.discoverCharacteristicsForService(\"device_information\"); } this._activatePortDevice(0x03, 0x15, 0x00, 0x00); // Activate voltage reports this._activatePortDevice(0x04, 0x14, 0x00, 0x00); // Activate current reports debug(\"Connect completed\"); this.emit(\"connect\"); resolve(); this._bleDevice.subscribeToCharacteristic(Consts.BLECharacteristic.WEDO2_PORT_TYPE, this._parsePortMessage.bind(this)); this._bleDevice.subscribeToCharacteristic(Consts.BLECharacteristic.WEDO2_SENSOR_VALUE, this._parseSensorMessage.bind(this)); this._bleDevice.subscribeToCharacteristic(Consts.BLECharacteristic.WEDO2_BUTTON, this._parseSensorMessage.bind(this)); if (!utils_1.isWebBluetooth) { this._bleDevice.subscribeToCharacteristic(Consts.BLECharacteristic.WEDO2_BATTERY, this._parseBatteryMessage.bind(this)); this._bleDevice.readFromCharacteristic(Consts.BLECharacteristic.WEDO2_BATTERY, (err, data) =&gt; { if (data) { this._parseBatteryMessage(data); } }); } else { this._bleDevice.readFromCharacteristic(\"00002a19-0000-1000-8000-00805f9b34fb\", (err, data) =&gt; { if (data) { this._parseBatteryMessage(data); } }); this._bleDevice.subscribeToCharacteristic(\"00002a19-0000-1000-8000-00805f9b34fb\", this._parseHighCurrentAlert.bind(this)); } this._bleDevice.subscribeToCharacteristic(Consts.BLECharacteristic.WEDO2_HIGH_CURRENT_ALERT, this._parseHighCurrentAlert.bind(this)); if (!utils_1.isWebBluetooth) { this._bleDevice.readFromCharacteristic(Consts.BLECharacteristic.WEDO2_FIRMWARE_REVISION, (err, data) =&gt; { if (data) { this._parseFirmwareRevisionString(data); } }); } else { this._bleDevice.readFromCharacteristic(\"00002a26-0000-1000-8000-00805f9b34fb\", (err, data) =&gt; { if (data) { this._parseFirmwareRevisionString(data); } }); } }); } /** * 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 (typeof color === \"boolean\") { color = 0; } data = Buffer.from([0x06, 0x04, 0x01, color]); this._writeMessage(Consts.BLECharacteristic.WEDO2_MOTOR_VALUE_WRITE, data); return resolve(); }); } /** * Shutdown the Hub. * @method WeDo2SmartHub#shutdown * @returns {Promise} Resolved upon successful disconnect. */ shutdown() { return new Promise((resolve, reject) =&gt; { this._writeMessage(Consts.BLECharacteristic.WEDO2_DISCONNECT, Buffer.from([0x00]), () =&gt; { 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#brakeMotor * @param {string} port * @returns {Promise} Resolved upon successful completion of command. */ brakeMotor(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) { if (debug.enabled) { debug(`Sent Message (${this._getCharacteristicNameFromUUID(uuid)})`, message); } this._bleDevice.writeToCharacteristic(uuid, message, callback); } _getCharacteristicNameFromUUID(uuid) { const keys = Object.keys(Consts.BLECharacteristic); for (let i = 0; i &lt; keys.length; i++) { const key = keys[i]; if (Consts.BLECharacteristic[key] === uuid) { return key; } } return \"UNKNOWN\"; } _parseHighCurrentAlert(data) { debug(\"Received Message (WEDO2_HIGH_CURRENT_ALERT)\", data); } _parseBatteryMessage(data) { debug(\"Received Message (WEDO2_BATTERY)\", data); this._batteryLevel = data[0]; } _parseFirmwareRevisionString(data) { debug(\"Received Message (WEDO2_FIRMWARE_REVISION)\", data); this._firmwareVersion = data.toString(); } _parsePortMessage(data) { debug(\"Received Message (WEDO2_PORT_TYPE)\", data); const port = this._getPortForPortNumber(data[0]); if (!port) { return; } port.connected = data[1] === 1 ? true : false; this._registerDeviceAttachment(port, data[3]); } _parseSensorMessage(data) { debug(\"Received Message (WEDO2_SENSOR_VALUE)\", 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.readInt8(2); this._lastTiltY = data.readInt8(3); /** * 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); break; } case Consts.DeviceType.CONTROL_PLUS_LARGE_MOTOR: { const rotation = data.readInt32LE(2); this.emit(\"rotate\", port.id, rotation); break; } case Consts.DeviceType.CONTROL_PLUS_XLARGE_MOTOR: { const rotation = data.readInt32LE(2); this.emit(\"rotate\", port.id, rotation); break; } } } } } exports.WeDo2SmartHub = WeDo2SmartHub; //# sourceMappingURL=wedo2smarthub.js.map × Search results Close "},"global.html":{"id":"global.html","title":"Global","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#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 116 ButtonState Properties: Name Type Description PRESSED number 0 RELEASED number 1 UP number 2 DOWN number 3 STOP number 4 Source: consts.js, line 116 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 84 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 84 DeviceType Properties: Name Type Description UNKNOWN number 0 BASIC_MOTOR number 1 TRAIN_MOTOR number 2 LED_LIGHTS number 8 VOLTAGE number 20 CURRENT number 21 PIEZO_TONE number 22 RGB_LIGHT number 23 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 CONTROL_PLUS_LARGE_MOTOR number 46 CONTROL_PLUS_XLARGE_MOTOR number 47 POWERED_UP_REMOTE_BUTTON number 55 RSSI number 56 CONTROL_PLUS_ACCELEROMETER number 58 CONTROL_PLUS_TILT number 59 Source: consts.js, line 25 DeviceType Properties: Name Type Description UNKNOWN number 0 BASIC_MOTOR number 1 TRAIN_MOTOR number 2 LED_LIGHTS number 8 VOLTAGE number 20 CURRENT number 21 PIEZO_TONE number 22 RGB_LIGHT number 23 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 CONTROL_PLUS_LARGE_MOTOR number 46 CONTROL_PLUS_XLARGE_MOTOR number 47 POWERED_UP_REMOTE_BUTTON number 55 RSSI number 56 CONTROL_PLUS_ACCELEROMETER number 58 CONTROL_PLUS_TILT number 59 Source: consts.js, line 25 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 132 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 132 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 CONTROL_PLUS_HUB number 6 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 CONTROL_PLUS_HUB number 6 Source: consts.js, line 3 × Search results Close "},"classes.list.html":{"id":"classes.list.html","title":"Classes","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Classes Classes BoostMoveHub ControlPlusHub DuploTrainBase Hub LPF2Hub PoweredUP PUPHub PUPRemote WeDo2SmartHub Events accel Emits when accelerometer detects movement. Measured in mG. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:accel Source: lpf2hub.js, line 507 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 237 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 216 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 408 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 424 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 248 disconnect Emits when the hub is disconnected. Inherited From: Hub#event:disconnect Overrides: Hub#event:disconnect Source: hub.js, line 39 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 398 gyro Emits when gyroscope detects movement. Measured in DPS - degrees per second. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:gyro Source: lpf2hub.js, line 492 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 454 speed Emits on a speed change. Parameters: Name Type Description port string speed number Inherited From: LPF2Hub#event:speed Source: lpf2hub.js, line 554 temp Emits when a change is detected on a temperature sensor. Measured in degrees centigrade. Parameters: Name Type Description port string For Control+ Hubs, port will be \"CPU\" as the sensor reports CPU temperature. temp number Inherited From: LPF2Hub#event:temp Source: lpf2hub.js, line 378 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub or Control+ Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number z number (Only available when using a Control+ Hub) Inherited From: LPF2Hub#event:tilt Source: lpf2hub.js, line 441 accel Emits when accelerometer detects movement. Measured in mG. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:accel Source: lpf2hub.js, line 507 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 237 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 216 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 408 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 424 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 248 disconnect Emits when the hub is disconnected. Inherited From: Hub#event:disconnect Overrides: Hub#event:disconnect Source: hub.js, line 39 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 398 gyro Emits when gyroscope detects movement. Measured in DPS - degrees per second. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:gyro Source: lpf2hub.js, line 492 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 454 speed Emits on a speed change. Parameters: Name Type Description port string speed number Inherited From: LPF2Hub#event:speed Source: lpf2hub.js, line 554 temp Emits when a change is detected on a temperature sensor. Measured in degrees centigrade. Parameters: Name Type Description port string For Control+ Hubs, port will be \"CPU\" as the sensor reports CPU temperature. temp number Inherited From: LPF2Hub#event:temp Source: lpf2hub.js, line 378 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub or Control+ Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number z number (Only available when using a Control+ Hub) Inherited From: LPF2Hub#event:tilt Source: lpf2hub.js, line 441 accel Emits when accelerometer detects movement. Measured in mG. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:accel Source: lpf2hub.js, line 507 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 237 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 216 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 408 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 424 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 248 disconnect Emits when the hub is disconnected. Inherited From: Hub#event:disconnect Overrides: Hub#event:disconnect Source: hub.js, line 39 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 398 gyro Emits when gyroscope detects movement. Measured in DPS - degrees per second. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:gyro Source: lpf2hub.js, line 492 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 454 speed Emits on a speed change. Parameters: Name Type Description port string speed number Inherited From: LPF2Hub#event:speed Source: lpf2hub.js, line 554 temp Emits when a change is detected on a temperature sensor. Measured in degrees centigrade. Parameters: Name Type Description port string For Control+ Hubs, port will be \"CPU\" as the sensor reports CPU temperature. temp number Inherited From: LPF2Hub#event:temp Source: lpf2hub.js, line 378 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub or Control+ Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number z number (Only available when using a Control+ Hub) Inherited From: LPF2Hub#event:tilt Source: lpf2hub.js, line 441 attach Emits when a motor or sensor is attached to the Hub. Parameters: Name Type Description port string type DeviceType Source: hub.js, line 237 detach Emits when an attached motor or sensor is detached from the Hub. Parameters: Name Type Description port string Source: hub.js, line 248 disconnect Emits when the hub is disconnected. Source: hub.js, line 39 accel Emits when accelerometer detects movement. Measured in mG. Parameters: Name Type Description port string x number y number z number Source: lpf2hub.js, line 507 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 237 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Source: lpf2hub.js, line 216 color Emits when a color sensor is activated. Parameters: Name Type Description port string color Color Source: lpf2hub.js, line 408 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 424 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 248 disconnect Emits when the hub is disconnected. Inherited From: Hub#event:disconnect Source: hub.js, line 39 distance Emits when a distance sensor is activated. Parameters: Name Type Description port string distance number Distance, in millimeters. Source: lpf2hub.js, line 398 gyro Emits when gyroscope detects movement. Measured in DPS - degrees per second. Parameters: Name Type Description port string x number y number z number Source: lpf2hub.js, line 492 rotate Emits when a rotation sensor is activated. Parameters: Name Type Description port string rotation number Source: lpf2hub.js, line 454 speed Emits on a speed change. Parameters: Name Type Description port string speed number Source: lpf2hub.js, line 554 temp Emits when a change is detected on a temperature sensor. Measured in degrees centigrade. Parameters: Name Type Description port string For Control+ Hubs, port will be \"CPU\" as the sensor reports CPU temperature. temp number Source: lpf2hub.js, line 378 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub or Control+ Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number z number (Only available when using a Control+ Hub) Source: lpf2hub.js, line 441 discover Emits when a Powered UP Hub device is found. Parameters: Name Type Description hub WeDo2SmartHub | BoostMoveHub | ControlPlusHub | PUPHub | PUPRemote | DuploTrainBase Source: poweredup-node.js, line 144 accel Emits when accelerometer detects movement. Measured in mG. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:accel Source: lpf2hub.js, line 507 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 237 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 216 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 408 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 424 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 248 disconnect Emits when the hub is disconnected. Inherited From: Hub#event:disconnect Overrides: Hub#event:disconnect Source: hub.js, line 39 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 398 gyro Emits when gyroscope detects movement. Measured in DPS - degrees per second. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:gyro Source: lpf2hub.js, line 492 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 454 speed Emits on a speed change. Parameters: Name Type Description port string speed number Inherited From: LPF2Hub#event:speed Source: lpf2hub.js, line 554 temp Emits when a change is detected on a temperature sensor. Measured in degrees centigrade. Parameters: Name Type Description port string For Control+ Hubs, port will be \"CPU\" as the sensor reports CPU temperature. temp number Inherited From: LPF2Hub#event:temp Source: lpf2hub.js, line 378 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub or Control+ Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number z number (Only available when using a Control+ Hub) Inherited From: LPF2Hub#event:tilt Source: lpf2hub.js, line 441 accel Emits when accelerometer detects movement. Measured in mG. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:accel Source: lpf2hub.js, line 507 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 237 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 216 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 408 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 424 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 248 disconnect Emits when the hub is disconnected. Inherited From: Hub#event:disconnect Overrides: Hub#event:disconnect Source: hub.js, line 39 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 398 gyro Emits when gyroscope detects movement. Measured in DPS - degrees per second. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:gyro Source: lpf2hub.js, line 492 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 454 speed Emits on a speed change. Parameters: Name Type Description port string speed number Inherited From: LPF2Hub#event:speed Source: lpf2hub.js, line 554 temp Emits when a change is detected on a temperature sensor. Measured in degrees centigrade. Parameters: Name Type Description port string For Control+ Hubs, port will be \"CPU\" as the sensor reports CPU temperature. temp number Inherited From: LPF2Hub#event:temp Source: lpf2hub.js, line 378 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub or Control+ Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number z number (Only available when using a Control+ Hub) Inherited From: LPF2Hub#event:tilt Source: lpf2hub.js, line 441 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 237 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Source: wedo2smarthub.js, line 318 color Emits when a color sensor is activated. Parameters: Name Type Description port string color Color Source: wedo2smarthub.js, line 363 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 248 disconnect Emits when the hub is disconnected. Inherited From: Hub#event:disconnect Source: hub.js, line 39 distance Emits when a distance sensor is activated. Parameters: Name Type Description port string distance number Distance, in millimeters. Source: wedo2smarthub.js, line 352 rotate Emits when a rotation sensor is activated. Parameters: Name Type Description port string rotation number Source: wedo2smarthub.js, line 387 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string x number y number Source: wedo2smarthub.js, line 375 × Search results Close "},"index.html":{"id":"index.html","title":"Index","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global node-poweredup - A Javascript module to interface with LEGO Powered Up components. Introduction LEGO 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, LEGO Powered Up released in 2018, and LEGO Technic CONTROL+ released in 2019. It also includes the 2018 Duplo App-Controlled Train sets. This library allows communication and control of Powered Up devices and peripherals via Javascript, both from Node.js and from the browser using Web Bluetooth. Node.js Installation Node.js v8.0 required. npm install node-poweredup --save node-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. Compatibility While 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 Control+ Hub Availability WeDo 2.0 Tilt Sensor 45305 Sensor Yes Yes Yes Yes 45300 WeDo 2.0 Motion Sensor 45304 Sensor Yes Yes Yes Yes 45300 WeDo 2.0 Medium Motor 45303 Motor Yes Yes Yes Yes 45300 76112 Boost Color and Distance Sensor 88007 Sensor Partial Yes Yes Yes 17101 Boost Tacho Motor 88008 Motor/Sensor Partial Yes Yes Yes 17101 Powered Up Train Motor 88011 Motor Yes Yes Yes Yes 6019760198 Powered Up LED Lights 88005 Light Yes Yes Yes Yes 88005 Control+ Large Motor 22169 Motor/Sensor Partial No Yes Yes 4209942100 Control+ XLarge Motor 22172 Motor/Sensor Partial No Yes Yes 4209942100 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 Control+ Hub 22127 RGB LEDButtonTilt SensorAccelerometer 4209942100 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 and Control+ Motors do not support rotating the motor by angle. When used with the Boost Move Hub, the Control+ Motors do not currently accept commands. Documentation Full documentation is available here. Node.js Sample Usage const PoweredUP = require(\"node-poweredup\"); const poweredUP = new PoweredUP.PoweredUP(); poweredUP.on(\"discover\", async (hub) =&gt; { // Wait to discover a Hub console.log(`Discovered ${hub.name}!`); await hub.connect(); // Connect to the Hub console.log(\"Connected\"); await hub.sleep(3000); // Sleep for 3 seconds before starting while (true) { // Repeat indefinitely console.log(\"Running motor B at speed 75\"); hub.setMotorSpeed(\"B\", 75); // Start a motor attached to port B to run a 3/4 speed (75) indefinitely console.log(\"Running motor A at speed 100 for 2 seconds\"); 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 console.log(\"Running motor A at speed -50 for 1 seconds\"); 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 Hubs console.log(\"Scanning for Hubs...\"); More examples are available in the \"examples\" directory. Credits Thanks 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":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#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 19 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 85 &lt;readonly&gt; current Properties: Name Type Description current number Current usage of the hub (Milliamps) Inherited From: Hub#current Overrides: Hub#current Source: hub.js, line 106 &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 57 &lt;readonly&gt; hardwareVersion Properties: Name Type Description firmwareVersion string Hardware version of the hub Inherited From: Hub#hardwareVersion Overrides: Hub#hardwareVersion Source: hub.js, line 64 &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 50 &lt;readonly&gt; primaryMACAddress Properties: Name Type Description primaryMACAddress string Primary MAC address of the hub Inherited From: Hub#primaryMACAddress Overrides: Hub#primaryMACAddress Source: hub.js, line 71 &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 92 &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 78 &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 99 Methods brakeMotor(port) Fully (hard) stop the motor on a given port. Parameters: Name Type Description port string Source: boostmovehub.js, line 252 Returns: Resolved upon successful completion of command. Type Promise connect() Connect to the Hub. Inherited From: Hub#connect Overrides: Hub#connect Source: hub.js, line 109 Returns: Resolved upon successful connect. Type Promise disconnect() Disconnect the Hub. Inherited From: Hub#disconnect Overrides: Hub#disconnect Source: hub.js, line 127 Returns: Resolved upon successful disconnect. Type Promise getHubType() Get the hub type. Inherited From: Hub#getHubType Overrides: Hub#getHubType Source: hub.js, line 191 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 199 Returns: Type DeviceType 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 143 Returns: Resolved upon successful completion of command. Type Promise resetAbsolutePosition(port) Reset the current motor position as absolute position zero Parameters: Name Type Description port string Source: boostmovehub.js, line 234 Returns: Resolved upon successful completion of command (ie. once the motor is finished). Type Promise setAbsolutePosition(port, pos [, speed]) Tell motor to goto an absolute position Parameters: Name Type Argument Default Description port string pos number The position of the motor to go to speed number | Array.&lt;number&gt; &lt;optional&gt; 100 A value between 1 - 100 should be set (Direction does not apply when going to absolute position) Source: boostmovehub.js, line 200 Returns: Resolved upon successful completion of command (ie. once the motor is finished). 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 98 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 116 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 261 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 163 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 59 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 78 Returns: Resolved upon successful issuance of command. Type Promise shutdown() Shutdown the Hub. Inherited From: LPF2Hub#shutdown Source: lpf2hub.js, line 66 Returns: Resolved upon successful disconnect. 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 167 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 135 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 153 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 180 Returns: Resolved after the commands are finished. Type Promise Events accel Emits when accelerometer detects movement. Measured in mG. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:accel Source: lpf2hub.js, line 507 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 237 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 216 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 408 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 424 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 248 disconnect Emits when the hub is disconnected. Inherited From: Hub#event:disconnect Overrides: Hub#event:disconnect Source: hub.js, line 39 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 398 gyro Emits when gyroscope detects movement. Measured in DPS - degrees per second. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:gyro Source: lpf2hub.js, line 492 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 454 speed Emits on a speed change. Parameters: Name Type Description port string speed number Inherited From: LPF2Hub#event:speed Source: lpf2hub.js, line 554 temp Emits when a change is detected on a temperature sensor. Measured in degrees centigrade. Parameters: Name Type Description port string For Control+ Hubs, port will be \"CPU\" as the sensor reports CPU temperature. temp number Inherited From: LPF2Hub#event:temp Source: lpf2hub.js, line 378 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub or Control+ Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number z number (Only available when using a Control+ Hub) Inherited From: LPF2Hub#event:tilt Source: lpf2hub.js, line 441 × Search results Close "},"ControlPlusHub.html":{"id":"ControlPlusHub.html","title":"Class: ControlPlusHub","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Class: ControlPlusHub ControlPlusHub new ControlPlusHub() The ControlPlusHub is emitted if the discovered device is a Control+ Hub. Source: controlplushub.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 85 &lt;readonly&gt; current Properties: Name Type Description current number Current usage of the hub (Milliamps) Inherited From: Hub#current Overrides: Hub#current Source: hub.js, line 106 &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 57 &lt;readonly&gt; hardwareVersion Properties: Name Type Description firmwareVersion string Hardware version of the hub Inherited From: Hub#hardwareVersion Overrides: Hub#hardwareVersion Source: hub.js, line 64 &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 50 &lt;readonly&gt; primaryMACAddress Properties: Name Type Description primaryMACAddress string Primary MAC address of the hub Inherited From: Hub#primaryMACAddress Overrides: Hub#primaryMACAddress Source: hub.js, line 71 &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 92 &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 78 &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 99 Methods brakeMotor(port) Fully (hard) stop the motor on a given port. Parameters: Name Type Description port string Source: controlplushub.js, line 251 Returns: Resolved upon successful completion of command. Type Promise connect() Connect to the Hub. Inherited From: Hub#connect Overrides: Hub#connect Source: hub.js, line 109 Returns: Resolved upon successful connect. Type Promise disconnect() Disconnect the Hub. Inherited From: Hub#disconnect Overrides: Hub#disconnect Source: hub.js, line 127 Returns: Resolved upon successful disconnect. Type Promise getHubType() Get the hub type. Inherited From: Hub#getHubType Overrides: Hub#getHubType Source: hub.js, line 191 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 199 Returns: Type DeviceType 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: controlplushub.js, line 142 Returns: Resolved upon successful completion of command. Type Promise resetAbsolutePosition(port) Reset the current motor position as absolute position zero Parameters: Name Type Description port string Source: controlplushub.js, line 233 Returns: Resolved upon successful completion of command (ie. once the motor is finished). Type Promise setAbsolutePosition(port, pos [, speed]) Tell motor to goto an absolute position Parameters: Name Type Argument Default Description port string pos number The position of the motor to go to speed number | Array.&lt;number&gt; &lt;optional&gt; 100 A value between 1 - 100 should be set (Direction does not apply when going to absolute position) Source: controlplushub.js, line 199 Returns: Resolved upon successful completion of command (ie. once the motor is finished). 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 98 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 116 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: controlplushub.js, line 260 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: controlplushub.js, line 162 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: controlplushub.js, line 61 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 78 Returns: Resolved upon successful issuance of command. Type Promise shutdown() Shutdown the Hub. Inherited From: LPF2Hub#shutdown Source: lpf2hub.js, line 66 Returns: Resolved upon successful disconnect. 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 167 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 135 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 153 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 180 Returns: Resolved after the commands are finished. Type Promise Events accel Emits when accelerometer detects movement. Measured in mG. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:accel Source: lpf2hub.js, line 507 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 237 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 216 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 408 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 424 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 248 disconnect Emits when the hub is disconnected. Inherited From: Hub#event:disconnect Overrides: Hub#event:disconnect Source: hub.js, line 39 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 398 gyro Emits when gyroscope detects movement. Measured in DPS - degrees per second. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:gyro Source: lpf2hub.js, line 492 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 454 speed Emits on a speed change. Parameters: Name Type Description port string speed number Inherited From: LPF2Hub#event:speed Source: lpf2hub.js, line 554 temp Emits when a change is detected on a temperature sensor. Measured in degrees centigrade. Parameters: Name Type Description port string For Control+ Hubs, port will be \"CPU\" as the sensor reports CPU temperature. temp number Inherited From: LPF2Hub#event:temp Source: lpf2hub.js, line 378 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub or Control+ Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number z number (Only available when using a Control+ Hub) Inherited From: LPF2Hub#event:tilt Source: lpf2hub.js, line 441 × Search results Close "},"DuploTrainBase.html":{"id":"DuploTrainBase.html","title":"Class: DuploTrainBase","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#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 85 &lt;readonly&gt; current Properties: Name Type Description current number Current usage of the hub (Milliamps) Inherited From: Hub#current Overrides: Hub#current Source: hub.js, line 106 &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 57 &lt;readonly&gt; hardwareVersion Properties: Name Type Description firmwareVersion string Hardware version of the hub Inherited From: Hub#hardwareVersion Overrides: Hub#hardwareVersion Source: hub.js, line 64 &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 50 &lt;readonly&gt; primaryMACAddress Properties: Name Type Description primaryMACAddress string Primary MAC address of the hub Inherited From: Hub#primaryMACAddress Overrides: Hub#primaryMACAddress Source: hub.js, line 71 &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 92 &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 78 &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 99 Methods brakeMotor(port) Fully (hard) stop the motor on a given port. Parameters: Name Type Description port string Source: duplotrainbase.js, line 110 Returns: Resolved upon successful completion of command. Type Promise connect() Connect to the Hub. Inherited From: Hub#connect Overrides: Hub#connect Source: hub.js, line 109 Returns: Resolved upon successful connect. Type Promise disconnect() Disconnect the Hub. Inherited From: Hub#disconnect Overrides: Hub#disconnect Source: hub.js, line 127 Returns: Resolved upon successful disconnect. Type Promise getHubType() Get the hub type. Inherited From: Hub#getHubType Overrides: Hub#getHubType Source: hub.js, line 191 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 199 Returns: Type DeviceType playSound(sound) Play a built-in train sound. Parameters: Name Type Description sound DuploTrainBaseSound Source: duplotrainbase.js, line 119 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 90 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 98 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 116 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 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 78 Returns: Resolved upon successful issuance of command. Type Promise shutdown() Shutdown the Hub. Inherited From: LPF2Hub#shutdown Source: lpf2hub.js, line 66 Returns: Resolved upon successful disconnect. 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 167 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 135 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 153 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 180 Returns: Resolved after the commands are finished. Type Promise Events accel Emits when accelerometer detects movement. Measured in mG. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:accel Source: lpf2hub.js, line 507 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 237 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 216 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 408 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 424 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 248 disconnect Emits when the hub is disconnected. Inherited From: Hub#event:disconnect Overrides: Hub#event:disconnect Source: hub.js, line 39 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 398 gyro Emits when gyroscope detects movement. Measured in DPS - degrees per second. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:gyro Source: lpf2hub.js, line 492 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 454 speed Emits on a speed change. Parameters: Name Type Description port string speed number Inherited From: LPF2Hub#event:speed Source: lpf2hub.js, line 554 temp Emits when a change is detected on a temperature sensor. Measured in degrees centigrade. Parameters: Name Type Description port string For Control+ Hubs, port will be \"CPU\" as the sensor reports CPU temperature. temp number Inherited From: LPF2Hub#event:temp Source: lpf2hub.js, line 378 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub or Control+ Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number z number (Only available when using a Control+ Hub) Inherited From: LPF2Hub#event:tilt Source: lpf2hub.js, line 441 × Search results Close "},"Hub.html":{"id":"Hub.html","title":"Class: Hub","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#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 85 &lt;readonly&gt; current Properties: Name Type Description current number Current usage of the hub (Milliamps) Source: hub.js, line 106 &lt;readonly&gt; firmwareVersion Properties: Name Type Description firmwareVersion string Firmware version of the hub Source: hub.js, line 57 &lt;readonly&gt; hardwareVersion Properties: Name Type Description firmwareVersion string Hardware version of the hub Source: hub.js, line 64 &lt;readonly&gt; name Properties: Name Type Description name string Name of the hub Source: hub.js, line 50 &lt;readonly&gt; primaryMACAddress Properties: Name Type Description primaryMACAddress string Primary MAC address of the hub Source: hub.js, line 71 &lt;readonly&gt; rssi Properties: Name Type Description rssi number Signal strength of the hub Source: hub.js, line 92 &lt;readonly&gt; uuid Properties: Name Type Description uuid string UUID of the hub Source: hub.js, line 78 &lt;readonly&gt; voltage Properties: Name Type Description voltage number Voltage of the hub (Volts) Source: hub.js, line 99 Methods connect() Connect to the Hub. Source: hub.js, line 109 Returns: Resolved upon successful connect. Type Promise disconnect() Disconnect the Hub. Source: hub.js, line 127 Returns: Resolved upon successful disconnect. Type Promise getHubType() Get the hub type. Source: hub.js, line 191 Returns: Type HubType getPortDeviceType(port) Get the device type for a given port. Parameters: Name Type Description port string Source: hub.js, line 199 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 167 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 135 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 153 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 180 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 237 detach Emits when an attached motor or sensor is detached from the Hub. Parameters: Name Type Description port string Source: hub.js, line 248 disconnect Emits when the hub is disconnected. Source: hub.js, line 39 × Search results Close "},"LPF2Hub.html":{"id":"LPF2Hub.html","title":"Class: LPF2Hub","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Class: LPF2Hub LPF2Hub new LPF2Hub() Source: lpf2hub.js, line 17 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 85 &lt;readonly&gt; current Properties: Name Type Description current number Current usage of the hub (Milliamps) Inherited From: Hub#current Source: hub.js, line 106 &lt;readonly&gt; firmwareVersion Properties: Name Type Description firmwareVersion string Firmware version of the hub Inherited From: Hub#firmwareVersion Source: hub.js, line 57 &lt;readonly&gt; hardwareVersion Properties: Name Type Description firmwareVersion string Hardware version of the hub Inherited From: Hub#hardwareVersion Source: hub.js, line 64 &lt;readonly&gt; name Properties: Name Type Description name string Name of the hub Inherited From: Hub#name Source: hub.js, line 50 &lt;readonly&gt; primaryMACAddress Properties: Name Type Description primaryMACAddress string Primary MAC address of the hub Inherited From: Hub#primaryMACAddress Source: hub.js, line 71 &lt;readonly&gt; rssi Properties: Name Type Description rssi number Signal strength of the hub Inherited From: Hub#rssi Source: hub.js, line 92 &lt;readonly&gt; uuid Properties: Name Type Description uuid string UUID of the hub Inherited From: Hub#uuid Source: hub.js, line 78 &lt;readonly&gt; voltage Properties: Name Type Description voltage number Voltage of the hub (Volts) Inherited From: Hub#voltage Source: hub.js, line 99 Methods connect() Connect to the Hub. Inherited From: Hub#connect Overrides: Hub#connect Source: hub.js, line 109 Returns: Resolved upon successful connect. Type Promise disconnect() Disconnect the Hub. Inherited From: Hub#disconnect Source: hub.js, line 127 Returns: Resolved upon successful disconnect. Type Promise getHubType() Get the hub type. Inherited From: Hub#getHubType Source: hub.js, line 191 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 199 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 98 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 116 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 78 Returns: Resolved upon successful issuance of command. Type Promise shutdown() Shutdown the Hub. Source: lpf2hub.js, line 66 Returns: Resolved upon successful disconnect. 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 167 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 135 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 153 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 180 Returns: Resolved after the commands are finished. Type Promise Events accel Emits when accelerometer detects movement. Measured in mG. Parameters: Name Type Description port string x number y number z number Source: lpf2hub.js, line 507 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 237 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Source: lpf2hub.js, line 216 color Emits when a color sensor is activated. Parameters: Name Type Description port string color Color Source: lpf2hub.js, line 408 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 424 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 248 disconnect Emits when the hub is disconnected. Inherited From: Hub#event:disconnect Source: hub.js, line 39 distance Emits when a distance sensor is activated. Parameters: Name Type Description port string distance number Distance, in millimeters. Source: lpf2hub.js, line 398 gyro Emits when gyroscope detects movement. Measured in DPS - degrees per second. Parameters: Name Type Description port string x number y number z number Source: lpf2hub.js, line 492 rotate Emits when a rotation sensor is activated. Parameters: Name Type Description port string rotation number Source: lpf2hub.js, line 454 speed Emits on a speed change. Parameters: Name Type Description port string speed number Source: lpf2hub.js, line 554 temp Emits when a change is detected on a temperature sensor. Measured in degrees centigrade. Parameters: Name Type Description port string For Control+ Hubs, port will be \"CPU\" as the sensor reports CPU temperature. temp number Source: lpf2hub.js, line 378 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub or Control+ Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number z number (Only available when using a Control+ Hub) Source: lpf2hub.js, line 441 × Search results Close "},"PoweredUP.html":{"id":"PoweredUP.html","title":"Class: PoweredUP","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#event:distanceWeDo2SmartHub#event:rotateWeDo2SmartHub#event:tilt Global Global Class: PoweredUP PoweredUP new PoweredUP() Source: poweredup-node.js, line 32 Extends EventEmitter Methods getConnectedHubByPrimaryMACAddress(address) Retrieve a Powered UP Hub by primary MAC address. Parameters: Name Type Description address string Source: poweredup-node.js, line 88 Returns: Type Hub getConnectedHubByUUID(uuid) Retrieve a Powered UP Hub by UUID. Parameters: Name Type Description uuid string Source: poweredup-node.js, line 79 Returns: Type Hub | null getConnectedHubs() Retrieve a list of Powered UP Hubs. Source: poweredup-node.js, line 71 Returns: Type Array.&lt;Hub&gt; getConnectedHubsByName(name) Retrieve a list of Powered UP Hub by name. Parameters: Name Type Description name string Source: poweredup-node.js, line 97 Returns: Type Array.&lt;Hub&gt; scan() Begin scanning for Powered UP Hub devices. Source: poweredup-node.js, line 43 stop() Stop scanning for Powered UP Hub devices. Source: poweredup-node.js, line 59 Events discover Emits when a Powered UP Hub device is found. Parameters: Name Type Description hub WeDo2SmartHub | BoostMoveHub | ControlPlusHub | PUPHub | PUPRemote | DuploTrainBase Source: poweredup-node.js, line 144 × Search results Close "},"PUPHub.html":{"id":"PUPHub.html","title":"Class: PUPHub","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#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 19 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 85 &lt;readonly&gt; current Properties: Name Type Description current number Current usage of the hub (Milliamps) Inherited From: Hub#current Overrides: Hub#current Source: hub.js, line 106 &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 57 &lt;readonly&gt; hardwareVersion Properties: Name Type Description firmwareVersion string Hardware version of the hub Inherited From: Hub#hardwareVersion Overrides: Hub#hardwareVersion Source: hub.js, line 64 &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 50 &lt;readonly&gt; primaryMACAddress Properties: Name Type Description primaryMACAddress string Primary MAC address of the hub Inherited From: Hub#primaryMACAddress Overrides: Hub#primaryMACAddress Source: hub.js, line 71 &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 92 &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 78 &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 99 Methods brakeMotor(port) Fully (hard) stop the motor on a given port. Parameters: Name Type Description port string Source: puphub.js, line 246 Returns: Resolved upon successful completion of command. Type Promise connect() Connect to the Hub. Inherited From: Hub#connect Overrides: Hub#connect Source: hub.js, line 109 Returns: Resolved upon successful connect. Type Promise disconnect() Disconnect the Hub. Inherited From: Hub#disconnect Overrides: Hub#disconnect Source: hub.js, line 127 Returns: Resolved upon successful disconnect. Type Promise getHubType() Get the hub type. Inherited From: Hub#getHubType Overrides: Hub#getHubType Source: hub.js, line 191 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 199 Returns: Type DeviceType 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 137 Returns: Resolved upon successful completion of command. Type Promise resetAbsolutePosition(port) Reset the current motor position as absolute position zero Parameters: Name Type Description port string Source: puphub.js, line 228 Returns: Resolved upon successful completion of command (ie. once the motor is finished). Type Promise setAbsolutePosition(port, pos [, speed]) Tell motor to goto an absolute position Parameters: Name Type Argument Default Description port string pos number The position of the motor to go to speed number | Array.&lt;number&gt; &lt;optional&gt; 100 A value between 1 - 100 should be set (Direction does not apply when going to absolute position) Source: puphub.js, line 194 Returns: Resolved upon successful completion of command (ie. once the motor is finished). 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 98 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 116 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 255 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: puphub.js, line 157 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: puphub.js, line 56 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 78 Returns: Resolved upon successful issuance of command. Type Promise shutdown() Shutdown the Hub. Inherited From: LPF2Hub#shutdown Source: lpf2hub.js, line 66 Returns: Resolved upon successful disconnect. 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 167 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 135 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 153 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 180 Returns: Resolved after the commands are finished. Type Promise Events accel Emits when accelerometer detects movement. Measured in mG. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:accel Source: lpf2hub.js, line 507 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 237 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 216 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 408 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 424 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 248 disconnect Emits when the hub is disconnected. Inherited From: Hub#event:disconnect Overrides: Hub#event:disconnect Source: hub.js, line 39 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 398 gyro Emits when gyroscope detects movement. Measured in DPS - degrees per second. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:gyro Source: lpf2hub.js, line 492 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 454 speed Emits on a speed change. Parameters: Name Type Description port string speed number Inherited From: LPF2Hub#event:speed Source: lpf2hub.js, line 554 temp Emits when a change is detected on a temperature sensor. Measured in degrees centigrade. Parameters: Name Type Description port string For Control+ Hubs, port will be \"CPU\" as the sensor reports CPU temperature. temp number Inherited From: LPF2Hub#event:temp Source: lpf2hub.js, line 378 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub or Control+ Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number z number (Only available when using a Control+ Hub) Inherited From: LPF2Hub#event:tilt Source: lpf2hub.js, line 441 × Search results Close "},"PUPRemote.html":{"id":"PUPRemote.html","title":"Class: PUPRemote","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#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 85 &lt;readonly&gt; current Properties: Name Type Description current number Current usage of the hub (Milliamps) Inherited From: Hub#current Overrides: Hub#current Source: hub.js, line 106 &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 57 &lt;readonly&gt; hardwareVersion Properties: Name Type Description firmwareVersion string Hardware version of the hub Inherited From: Hub#hardwareVersion Overrides: Hub#hardwareVersion Source: hub.js, line 64 &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 50 &lt;readonly&gt; primaryMACAddress Properties: Name Type Description primaryMACAddress string Primary MAC address of the hub Inherited From: Hub#primaryMACAddress Overrides: Hub#primaryMACAddress Source: hub.js, line 71 &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 92 &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 78 &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 99 Methods connect() Connect to the Hub. Inherited From: Hub#connect Overrides: Hub#connect Source: hub.js, line 109 Returns: Resolved upon successful connect. Type Promise disconnect() Disconnect the Hub. Inherited From: Hub#disconnect Overrides: Hub#disconnect Source: hub.js, line 127 Returns: Resolved upon successful disconnect. Type Promise getHubType() Get the hub type. Inherited From: Hub#getHubType Overrides: Hub#getHubType Source: hub.js, line 191 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 199 Returns: Type DeviceType 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 98 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 116 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 78 Returns: Resolved upon successful issuance of command. Type Promise shutdown() Shutdown the Hub. Inherited From: LPF2Hub#shutdown Source: lpf2hub.js, line 66 Returns: Resolved upon successful disconnect. 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 167 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 135 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 153 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 180 Returns: Resolved after the commands are finished. Type Promise Events accel Emits when accelerometer detects movement. Measured in mG. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:accel Source: lpf2hub.js, line 507 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 237 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Inherited From: LPF2Hub#event:button Source: lpf2hub.js, line 216 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 408 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 424 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 248 disconnect Emits when the hub is disconnected. Inherited From: Hub#event:disconnect Overrides: Hub#event:disconnect Source: hub.js, line 39 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 398 gyro Emits when gyroscope detects movement. Measured in DPS - degrees per second. Parameters: Name Type Description port string x number y number z number Inherited From: LPF2Hub#event:gyro Source: lpf2hub.js, line 492 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 454 speed Emits on a speed change. Parameters: Name Type Description port string speed number Inherited From: LPF2Hub#event:speed Source: lpf2hub.js, line 554 temp Emits when a change is detected on a temperature sensor. Measured in degrees centigrade. Parameters: Name Type Description port string For Control+ Hubs, port will be \"CPU\" as the sensor reports CPU temperature. temp number Inherited From: LPF2Hub#event:temp Source: lpf2hub.js, line 378 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string If the event is fired from the Move Hub or Control+ Hub's in-built tilt sensor, the special port \"TILT\" is used. x number y number z number (Only available when using a Control+ Hub) Inherited From: LPF2Hub#event:tilt Source: lpf2hub.js, line 441 × Search results Close "},"WeDo2SmartHub.html":{"id":"WeDo2SmartHub.html","title":"Class: WeDo2SmartHub","body":" node-poweredup Classes BoostMoveHubControlPlusHubDuploTrainBaseHubLPF2HubPoweredUPPUPHubPUPRemoteWeDo2SmartHub Events BoostMoveHub#event:accelBoostMoveHub#event:attachBoostMoveHub#event:buttonBoostMoveHub#event:colorBoostMoveHub#event:colorAndDistanceBoostMoveHub#event:detachBoostMoveHub#event:disconnectBoostMoveHub#event:distanceBoostMoveHub#event:gyroBoostMoveHub#event:rotateBoostMoveHub#event:speedBoostMoveHub#event:tempBoostMoveHub#event:tiltControlPlusHub#event:accelControlPlusHub#event:attachControlPlusHub#event:buttonControlPlusHub#event:colorControlPlusHub#event:colorAndDistanceControlPlusHub#event:detachControlPlusHub#event:disconnectControlPlusHub#event:distanceControlPlusHub#event:gyroControlPlusHub#event:rotateControlPlusHub#event:speedControlPlusHub#event:tempControlPlusHub#event:tiltDuploTrainBase#event:accelDuploTrainBase#event:attachDuploTrainBase#event:buttonDuploTrainBase#event:colorDuploTrainBase#event:colorAndDistanceDuploTrainBase#event:detachDuploTrainBase#event:disconnectDuploTrainBase#event:distanceDuploTrainBase#event:gyroDuploTrainBase#event:rotateDuploTrainBase#event:speedDuploTrainBase#event:tempDuploTrainBase#event:tiltHub#event:attachHub#event:detachHub#event:disconnectLPF2Hub#event:accelLPF2Hub#event:attachLPF2Hub#event:buttonLPF2Hub#event:colorLPF2Hub#event:colorAndDistanceLPF2Hub#event:detachLPF2Hub#event:disconnectLPF2Hub#event:distanceLPF2Hub#event:gyroLPF2Hub#event:rotateLPF2Hub#event:speedLPF2Hub#event:tempLPF2Hub#event:tiltPoweredUP#event:discoverPUPHub#event:accelPUPHub#event:attachPUPHub#event:buttonPUPHub#event:colorPUPHub#event:colorAndDistancePUPHub#event:detachPUPHub#event:disconnectPUPHub#event:distancePUPHub#event:gyroPUPHub#event:rotatePUPHub#event:speedPUPHub#event:tempPUPHub#event:tiltPUPRemote#event:accelPUPRemote#event:attachPUPRemote#event:buttonPUPRemote#event:colorPUPRemote#event:colorAndDistancePUPRemote#event:detachPUPRemote#event:disconnectPUPRemote#event:distancePUPRemote#event:gyroPUPRemote#event:rotatePUPRemote#event:speedPUPRemote#event:tempPUPRemote#event:tiltWeDo2SmartHub#event:attachWeDo2SmartHub#event:buttonWeDo2SmartHub#event:colorWeDo2SmartHub#event:detachWeDo2SmartHub#event:disconnectWeDo2SmartHub#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 16 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 85 &lt;readonly&gt; current Properties: Name Type Description current number Current usage of the hub (Milliamps) Inherited From: Hub#current Source: hub.js, line 106 &lt;readonly&gt; firmwareVersion Properties: Name Type Description firmwareVersion string Firmware version of the hub Inherited From: Hub#firmwareVersion Source: hub.js, line 57 &lt;readonly&gt; hardwareVersion Properties: Name Type Description firmwareVersion string Hardware version of the hub Inherited From: Hub#hardwareVersion Source: hub.js, line 64 &lt;readonly&gt; name Properties: Name Type Description name string Name of the hub Inherited From: Hub#name Source: hub.js, line 50 &lt;readonly&gt; primaryMACAddress Properties: Name Type Description primaryMACAddress string Primary MAC address of the hub Inherited From: Hub#primaryMACAddress Source: hub.js, line 71 &lt;readonly&gt; rssi Properties: Name Type Description rssi number Signal strength of the hub Inherited From: Hub#rssi Source: hub.js, line 92 &lt;readonly&gt; uuid Properties: Name Type Description uuid string UUID of the hub Inherited From: Hub#uuid Source: hub.js, line 78 &lt;readonly&gt; voltage Properties: Name Type Description voltage number Voltage of the hub (Volts) Inherited From: Hub#voltage Source: hub.js, line 99 Methods brakeMotor(port) Fully (hard) stop the motor on a given port. Parameters: Name Type Description port string Source: wedo2smarthub.js, line 214 Returns: Resolved upon successful completion of command. Type Promise connect() Connect to the Hub. Inherited From: Hub#connect Overrides: Hub#connect Source: hub.js, line 109 Returns: Resolved upon successful connect. Type Promise disconnect() Disconnect the Hub. Inherited From: Hub#disconnect Source: hub.js, line 127 Returns: Resolved upon successful disconnect. Type Promise getHubType() Get the hub type. Inherited From: Hub#getHubType Source: hub.js, line 191 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 199 Returns: Type DeviceType 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 223 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 194 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 113 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 143 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 239 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 160 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 94 Returns: Resolved upon successful issuance of command. Type Promise shutdown() Shutdown the Hub. Source: wedo2smarthub.js, line 131 Returns: Resolved upon successful disconnect. 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 167 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 135 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 153 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 180 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 237 button Emits when a button is pressed. Parameters: Name Type Description button string state ButtonState Source: wedo2smarthub.js, line 318 color Emits when a color sensor is activated. Parameters: Name Type Description port string color Color Source: wedo2smarthub.js, line 363 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 248 disconnect Emits when the hub is disconnected. Inherited From: Hub#event:disconnect Source: hub.js, line 39 distance Emits when a distance sensor is activated. Parameters: Name Type Description port string distance number Distance, in millimeters. Source: wedo2smarthub.js, line 352 rotate Emits when a rotation sensor is activated. Parameters: Name Type Description port string rotation number Source: wedo2smarthub.js, line 387 tilt Emits when a tilt sensor is activated. Parameters: Name Type Description port string x number y number Source: wedo2smarthub.js, line 375 × 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>