Coder Social home page Coder Social logo

sst's Introduction

Sufni Suspension Telemetry

dashboard

Sufni* Suspension Telemetry is a mountain bike suspension telemetry system that was born out of sheer curiosity. The data acquisition unit is built around the Raspberry Pi Pico W and uses affordable off-the-shelf components, so anybody with a bit of soldering skills can build it.

Contrary to most (all?) suspension telemetry systems, Sufni uses rotary encoders to measure movement. They are cheap, reasonably accurate, and can reach pretty high sample rates. An additional benefit is that on some frames they are easier to attach to rear shocks than linear sensors, because they can fit into much tigther spaces.

The DAQ uses a WiFi network to send recorded sessions to the backend server. When processing is done, data can be analyzed on the web user interface that provides plots useful for setting up the spring rate, damping and the bike's overall balance. GPX tracks can also be uploaded, and MP4 videos can be opened from the local machine. These are synchronized to the travel plot, so you can easily find how your suspension behaved on a certain part of the trail.

The user interface has two additional functionalities:

  • New bike setups can be created, and they can be associated with a DAQ unit based on the Pico's uniqe identifer.
  • Normalized (travel percentage, or a number between 0 and 1) data can also be imported from CSV files, so you can use the webapp without being tied to Sufni's hardware.

Please refer to the wiki for a quickstart guide, build instructions, and a full tour on the user interface, plots etc.

* The word "sufni" (pronounced SHOOF-nee) means tool shed in Hungarian, but also used as an adjective denoting something as DIY, garage hack, etc.

sst's People

Contributors

sghctoma avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sst's Issues

Load settings from a file

The following should be loaded from a file on the MicroSD card rather than being hardcoded:

  • SST server domain / IP
  • WiFi SSID and PSK
  • NTP server domain / IP
  • timezone (?)

Bluetooth session synchronization

Raspberry Pi Pico SDK v1.5 introduced Bluetooth support, so it might be a good idea to explore it as a possiblity to sync with mobile phones and/or cycling computers.

Deduplicate API endpoints

Some HTTP API endpoints are implemented in both gosst-http and server.py. The ones in server.py has to go. Additionaly, the GPX API should also be implemented in gosst-http.

Fix dupicate imports

.SST files are moved to the uploaded directory when all the uploads are done, so if the upload process is somehow interrupted, the successfull imported sessions will be imported again on the next upload.

Fix Wiki TODOs

Recent changes have to be reflected in the README:

  • DAQ hardware build instructions
  • DAQ firmware build instructions on Windows

Allow importing PSST files

The PutSession function in gosst-http accepts raw SST files. It should also accept PSST files, so client-side converter applications could easily be written.

Caddy HTTPS certificate

Hello,

Unfortunately I'm more skilled on the hardware side than software (which looks impressive!)

I'm trying to run it in Docker desktop, and managed to get a successful build, however when trying to go to localhost:443, I get an "Client sent an HTTP request to an HTTPS server." error, or when using https://localhost:443, I get a "This site can’t provide a secure connection" - it seems like the default caddyfile is not providing a self-signed certificate. Is there a quick fix, or should I just try to build it on a web platform?

Add BLE GoPro control

As a possible solution to the video sync issue caused by the 1 second resolution timestamp on both the camera and DAQ, the DAQ should have a functionality to start recording on a paired GoPro when a session is started.

This seems pretty straighforward using OpenGoPro BLE specification. Officially only Hero 9 and later are supported, but https://github.com/KonradIT/gopro-ble-py states that the protocol is the same for Hero 5+ (at least for the minimal functionality I need here).

Add initial setup / configuration UI

Almost the entire database is accessible through the gosst-http API, we just need to write a user interface that makes adding calibrations, linkages, setups, etc. possible without issuing HTTP request from the command line.

Allow loading a video recording

Loading action camera footage and synchronizing it to the travel plot crosshair would probably make identifying interesting sections of a trail easier than using the map. I don't want video uploading though, so this feature will only support video loading from local system.

Log unknown board IDs in gosst-tcp

If a board ID gosst-tcp received from a client is not in the database, it should be logged, so that it can easily be copied to the database. This would make initial setup easier.

Get rid of ZeroMQ

The only communication ZMQ is used for is gosst-http and gosst-tcp sendin integers (session ids) to the cache.py server. ZeroMQ is an overkill for this, makes us unnecessarily depend on CGO.

Telemetry Data

Is there a possibility of you sharing your same telemetry data?

Disable Bokeh tools on mobile

Enabled Bokeh tools prevent scrolling in mobile browsers, they need to be disabled. This was implemented in the Bokeh server side before, needs to be converted to Javascript.

Add sub-second accuracy to start timestamp

Right now I'm using the RTC's time, which has a 1 second resolution. This is not a major problem, but videos not being in perfect sync is very noticable. It would be nice if one does not have to use the x / z keys to adjust sync.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.