/hangtime-grip-connect

Tindeq Progressor, PitchSix Force Board, Griptonite Motherboard, Weiheng WH-C06, Entralpi, Climbro, mySmartBoard, KilterBoard: Web Bluetooth API Force-Sensing strength analysis for climbers

Primary LanguageTypeScriptOtherNOASSERTION

Grip Connect

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 / Plates used by climbers for strength measurement. Examples of such hangboards include the Motherboard, Climbro, SmartBoard, Entralpi or Tindeq Progressor

Try it out - Docs - Browser Support

Roadmap

Help wanted: Do you own any of these 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.

  • ✅ Griptonite Motherboard
    • ✅️ Connect with devices
    • ✅️ Read / Write / Notify using Bluetooth
    • ✅️ Output weight/force stream
  • ✅ Tindeq Progressor
    • ✅️ Connect with devices
    • ✅️ Read / Write / Notify using Bluetooth
    • ✅️ Output weight/force stream
  • ✅ Entralpi
    • ✅️ Connect with devices
    • ✅️ Read / Write / Notify using Bluetooth
    • ✅️️ Output weight/force stream
  • ➡️ Climbro
    • ➡️ Connect with devices
    • ➡️ Read / Write / Notify using Bluetooth
    • ➡️ Output weight/force stream
  • ➡️ SmartBoard
    • ➡️ Connect with devices
    • ➡️ Read / Write / Notify using Bluetooth
    • ➡️ Output weight/force stream

Development

git clone https://github.com/Stevie-Ray/hangtime-grip-connect
cd hangtime-grip-connect
npm install

Install

$ npm install @hangtime/grip-connect

Example usage (with a Motherboard)

Simply importing the utilities you need from @hangtime/grip-connect.

<button id="motherboard" type="button">Connect Motherboard</button>
import { Motherboard, battery, connect, disconnect, info, notify, stream } from "@hangtime/grip-connect"

const motherboardButton = document.querySelector("#motherboard")

motherboardButton.addEventListener("click", () => {
  connect(Motherboard, async () => {
    // Listen for stream notifications
    notify((data) => {
      // data: { massTotal: 0, massLeft: 0, massRight: 0, massCenter: 0 }
      console.log(data)
    })

    // Read battery + device info
    await battery(Motherboard)
    await info(Motherboard)

    // Start weight streaming (for a minute) remove parameter for a continues stream
    await stream(Motherboard, 60000)

    // Manually call stop method if stream is continues
    // await stop(Motherboard)

    // Disconnect from device after we are done
    disconnect(Motherboard)
  })
})

Credits

A special thank you to:

  • @CassimLadha for sharing insights on reading the Motherboards data.
  • @donaldharvey for a valuable example on connecting to the motherboard.
  • @ecstrema for providing an example on how to play games with the entralpi.

Disclamer

THIS SOFTWARE IS NOT OFFICIALY SUPPORTED, SUPPLIED OR MAINTAINED BY THE DEVICE MANUFACTURER. BY USING THE SOFTWARE YOU ARE ACKNOWLEDGEING THIS AND UNDERSTAND THAT USING THIS SOFTWARE WILL INVALIDATE THE MANUFACTURERS WARRANTY.

License

BSD 2-Clause © Stevie-Ray Hartog