Force-Sensing Climbing Training
The objective of this project is to create a Web Bluetooth API client that can establish connections with various Force-Sensing Hangboards / Dynamometers / Plates / LED system boards used by climbers. Examples of such tools include the Griptonite Motherboard, Tindeq Progressor, PitchSix Force Board, Weiheng WH-C06, Entralpi, Climbro, or mySmartBoard
And LED system boards from Aurora Climbing like the Kilter Board, Tension Board, Grasshopper Board, Decoy Board, Touchstone Board and So iLL Board.
Learn more: Docs - Browser Support
This project is provided "as-is" without any express or implied warranties. By using this software, you assume all risks associated with its use, including but not limited to hardware damage, data loss, or any other issues that may arise. The developers and contributors are not responsible for any harm or loss incurred. Use this software at your own discretion and responsibility.
Chart - Flappy Bird - Kilter Board
This project can be found in the NPM package registry.
$ npm install @hangtime/grip-connect
Simply importing the utilities you need from @hangtime/grip-connect
.
<button id="motherboard" type="button">Connect Motherboard</button>
import { Motherboard, active, battery, connect, disconnect, firmware, notify, stream } from "@hangtime/grip-connect"
const motherboardButton = document.querySelector("#motherboard")
motherboardButton.addEventListener("click", () => {
connect(
Motherboard,
async () => {
// Listen for stream notifications
notify((data) => {
// { massTotal: "0", massMax: "0", massAverage: "0", massLeft: "0", massCenter: "0", massRight: "0" }
console.log(data)
})
// Reactive check if device is active
active(
(isActive) => {
console.log(isActive)
},
// Optionally using a weight threshold and duration
{ threshold: 2.5, duration: 1000 },
)
// Read info: battery + firmware
const batteryLevel = await battery(Motherboard)
console.log(batteryLevel)
const firmwareVersion = await firmware(Motherboard)
console.log(firmwareVersion)
// LEDs: "green", "red", "orange", or no argument to turn off
// await led(Motherboard, "red")
// await led(Motherboard)
// Start weight streaming (for a minute) remove parameter for a continues stream
await stream(Motherboard, 60000)
// Manualy tare the device when the stream is running
// await tare(5000)
// Manually call stop method if stream is continues
// await stop(Motherboard)
// Download data as CSV, JSON, or XML (default: CSV) format => timestamp, frame, battery, samples, masses
// download('json')
// Disconnect from device after we are done
disconnect(Motherboard)
},
(error) => {
// Optinal custom error handeling
console.error(error.message)
},
)
})
chrome://flags/#enable-experimental-web-platform-features
.Help wanted: Do you own any of the missing devices? Use Google Chrome's Bluetooth Internals
chrome://bluetooth-internals/#devices
and press Start Scan
to look for your device, click on Inspect
and share all
available services with us.
Motherboard | Progressor | WH-C06 | Entralpi | Kilter Board | Force Board | Climbro | mySmartBoard | |
---|---|---|---|---|---|---|---|---|
Battery | ✅ | ✅ | ||||||
Calibration | ✅ | |||||||
Connect | ✅ | ✅ | ✅ | ✅ | ✅ | |||
Disconnect | ✅ | ✅ | ✅ | ✅ | ✅ | |||
Download | ✅ | ✅ | ||||||
Firmware | ✅ | ✅ | ||||||
Hardware | ✅ | |||||||
isActive | ✅ | ✅ | ✅ | ✅ | ||||
isConnected | ✅ | ✅ | ✅ | ✅ | ✅ | |||
isDevice | ✅ | ✅ | ✅ | ✅ | ✅ | |||
Led | ✅ | ✅ | ||||||
Manufacturer | ✅ | |||||||
Notify | ✅ | ✅ | ✅ | ✅ | ||||
Read | ✅ | |||||||
Serial | ✅ | |||||||
Stop | ✅ | ✅ | ||||||
Stream | ✅ | ✅ | ||||||
Tare | ✅ | ✅ | ✅ | ✅ | ||||
Text | ✅ | |||||||
Write | ✅ | ✅ |
git clone https://github.com/Stevie-Ray/hangtime-grip-connect
cd hangtime-grip-connect
npm install
A special thank you to:
THIS SOFTWARE IS NOT OFFICIALLY SUPPORTED, SUPPLIED OR MAINTAINED BY THE DEVICE MANUFACTURER. BY USING THE SOFTWARE YOU ARE ACKNOWLEDGING THIS AND UNDERSTAND THAT USING THIS SOFTWARE WILL INVALIDATE THE MANUFACTURERS WARRANTY.
BSD 2-Clause © Stevie-Ray Hartog