Now there are different tire pressure gauges for Android, it would be ideal if Race Chrono could pair with them and display tire temperature / pressure in the race chrono and even log.
Here is two of them:
http://www.steel-mate.com/TPMS8886/en/https://my-fobo.com/Product/FOBOTIRE
Comments
Does anyone know what kind of data these put out?
From reading the fobo web page, it seems they need to be "registered" in their app or something. But I wonder if they are using some kind of special protocol, or are they just streaming serial data?
For 100 bucks, it is a little over my threshold for getting one for fun to mess around with....
Long story short, they didn't seem to keen on sharing....but maybe you might have better luck since you are RaceChrono....and I am just a loony toon..:)
Google shows that others have reverse engineered the communication of similar devices:
https://github.com/ricallinson/tpms
https://raspberrypi.stackexchange.com/questions/76959/how-to-decode-tpms-sensor-data-through-rpi3-bluetooth
https://forum.arduino.cc/index.php?topic=384147.0
GATT, GAP, DIS, PRXR, etc. etc.... https://www.bluetooth.com/specifications/gatt
I'll let you know after I get the set. Reverse engineering them shouldn't be much work.
Reviving an old thread - so info stays in one place.
Any updates on BT TPMS support? Sensors are now easily sub $100 and would be a great addition to RC.
https://my-fobo.com/Product/FM2410
The previous poster had inquired about what you need in order to get it working and you said the hardware and API. Is that still the case?
I've requested the API (not holding my breath) and if I can get it then I would buy the hardware.
If I could get you the API is that something that is easy to add to racechrono?
The module isn't necessarily the smallest (uses CR1632's). So on that front maybe you're looking for something smaller? Or an internal sensor?
Those are 7.6g pretty light but no idea really if that will make a difference.
I'll be changing to slicks early this season and rebalancing anyways so not a huge concern.
Wanna buy some and reverse engineer them :p
I used an Arduino Nano, a HC-06 Bluetooth Transmitter/Receiver and a small dispaly.
I'm able to connect to Racechrono and synchronize with GPS data.
I can share some session if you like.
https://imgur.com/YGCbwgB
Also if temperatures are enough, there's always RejsaRubber: https://github.com/MagnusThome/RejsaRubberTrac
@aol I'd really like pressures as well. What's the name of the app? In the app store there are lots of apps by Nordic semiconductor
Any chance you have some materials that you could share which would indicate the first steps to doing this using the app?
Thanks,
- Reverse engineering Bluetooth LE
- Reverse engineering IoT
This is pretty elaborate with Wireshark step and all:
http://nilhcem.com/iot/reverse-engineering-simple-bluetooth-devices
@aol Thank you!!!! That link is exactly the sort of thing I was hoping for!
Also, RejsaRubber looks great! Im going to check distances on my bike for placement and plan on doing that. It's more about the fun of collecting data for me then anything else. But I love it.
Can't wait to start reverse engineering the sensors!
@aol good point! I'll definitely keep the process incase I do a Bluetooth bulb etc at some point for other projects. It's a great write up!
This would be a truly great feature, has there been any further progress?
So some great news on my end, I was able to complete my experiment (with my BLU Internal TPMS sensors) and get the results I needed to generate graphs and compare to equations that another person made for their BLU External sensors in 2018 that I found on an RV forum (thor forums). I've got a few questions / things to consider. I’ll list those first and then go into showing my data and setup.
Note:
I used the internal BLU TPMS sensors as mentioned above.
They output as Bluetooth Beacons and provide:
Major: XXXXX (5 digit decimal value – id of the sensor)
Minor: XXXXX (5 digit decimal value – pressure / temp data)
UUID for my first one was B54ADC00-67F9-11D9-9669-0800200C9A66 which requires one formula, however, apparently the other guy had some sensors with another UUID and a different formula for temperature (multiplied by 4). My equation ended up being a bit different from his for temp but I think mine is correct as it’s got the same intercept as his and is just x-40 whereas his was something along the lines of 54/10 (but he was working in F).
Remaining questions / discussion topics
1) Is it common for Bluetooth beacons to have a main mac address but to then broadcast using seemly randomly generated ones?
a. My Main one seems to be “14:99:E2:0A:A9:29” but the broadcasts always come from “98:84:XX:0A:74:66” – XX being the value that increases with each broadcast.
2) Comment – using the android btsnoop.log file was a pain and useless for the beacon. First off, the data is not actually in the .log file. It’s in the bug report you need to generate and then unzip and it’s in a .cfa file. It works great for devices like Bluetooth headsets and controllable lights and was fun to play around with for that. But not for beacons like this – the data was just not picked up. Instead Nrfconnect works perfectly for this. I used two android devices, one for nrfconnect and the other for official app display.
3) Final comment – I only tested one of my two sensors so far. If this is added to Racechrono as a feature I’ll probably buy some more for my spare sets of rims. If I get another UUID I’ll do another set of tests.
FORMULAS
Note: SensorValue is the UINT16 (Little endian) value from the minor string as explained later.
Temperature: (for UUID: B54ADC00-67F9-11D9-9669-0800200C9A66)
degC: T = SensorValue – 40
degF: T = ((SensorValue - 40) * 9/5)+32
Pressure: (Think for all UUID)
PSI = 100/276 * SensorValue
Test Setup:
https://ibb.co/FXLC48N
Used motorcycle rear tire slick
Tire warmer
Wheel balancer
Variable speed buffer WITH spongy thick application of underground electrical tape. NOT normal tape. It softens the “catch”. IMPORTANT and DANGEROUS
External temperature gun (not actually useful)
Motion Pro Digital Pressure gauge (just for comparison / releasing pressure for next test)
Fan – for accelerating temperature drop
Android Phone for using nrfConnect
Android Tablet for monitoring official app
Steps:
1) Hooked everything up and heated the tire to 95C with the tire warmer and then filled the tire to approximately 40psi.
2) Got tablet / phone ready for logging. I also did the logs for the internal bug report / log file but as mentioned before they were useless. The useful items were nrf connect for phone and official app on tablet
3) Removed cover
4) Hit “Scan” on nrf connect with a -65 db filter and then gently applied the variable speed buffer to get a low speed out of the tire. I had to use the maximum setting with the small size of shaft to get the tire to spin enough to activate the sensor. (activates with motion only) - CAREFUL this can "jump" the tire and toss your setup to the floor. ie: Dangerous
5) Had helper watch screen on official app call out the app registering the change. Recorded time, app temp (Deg C) and pressure (psi), slowed tire and verified pressure with motion pro and external temp with temp gun.
6) Opened the nrf connect app log and screenshoted the values with the built in timestamp.
7) Waited approx. 5 minutes between tests
8) Let out 3-5ish psi and redid testing until low temp value hit just above room temp and pressure was low.
After testing:
Took “minor” values (5 decimal digits) and converted to HEX. First Byte is Temp and second Byte is Pressure.
Ex: 23401 decimal translates to 5B69 in HEX. 5B is Temp and 69 is Pressure. Then putting the individual hex bytes into an online calculator I converted using “UINT16 – little endian) to get the value to enter into the equations above.
Graphs
Here are my graphs with the overlaid excel generated y=mx+b formulas. The one for PSI is what it gave me but I’m going to use the 100/276 for slope (m) rather than the 0.3625 it shows.
https://ibb.co/zH8GgQS
https://ibb.co/8sp42Yh
Quick Data snap showing UUID, Major and Minor.
https://ibb.co/5j1JPrV
AOL:
Is it possible to enable RaceChrono custom section to allow you to enter the sensor “Major” decimal value to id a sensor and enter the equations for temp and pressure for addition as a custom value for overlay?
Some sort of functionality would be great to be able to quickly swap out a front or rear tire separately and just activate the appropriate sensor that are on the car at a time. For example, I have 3 sets of rims. 1x rain set and 2x normal slicks (motorcycle). I generally replace the rear separately from the front. So if I put sensors in all my tires, it would be great to be able to quickly toggle which of the 3 fronts I have on and which of the 3 rears I have on. They all obviously have different Major ID numbers but should all have the capability of entering their own custom formula (in case UUID is different).
Anyways, I’ll shoot you an email after this post so you can respond with any data requests or questions that you have on this.
Once you figure out your use case like that it might be easier to demonstrate what changes we need to make in RaceChrono.
I'm hoping to avoid using any additional devices on the bike as I'm trying to "slim" it down. Having used the custom OBD feature in the app I figure it would be an easy addition as it seems very similar. Receive incoming "major id" to identify the sensor, log the "minor id" and convert to hex and then apply the equations and store the value. All that being said... I have only dabbled in coding so I really have no idea at all about how much effort it would be to include such a feature in Racechrono / how many people might actually want this feature.
All that being said I'm interested in exploring this Arduino-based BLE "bridge" for interest. I doubt I'll have time to build / work on something for that before next fall / winter. Have too many new parts to put on the bike and a new paintjob to do.
1) Do you want these sensors to be natively supported in RaceChrono, or something else?
2) Which product is it? It's quite difficult to support these Chinese products, as you can never tell what the product really is. And if you think you can tell from the pictures, you may end up receiving something that actually looks different.
I already got set of these: https://www.amazon.de/gp/product/B08PFSM637/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1
3) You mention your test rig. Is it for testing the pressures and temperatures? Or do you need it in order to connect at all?
Thanks for the reply. Here are my answers:
1) I was hoping that there would be some sort of option in racechrono to add DIY sensors such as this like the custom PID option which I already use. I imagine I would just make duplicate profiles in order to have my "rain set" activated vs the "slick set" etc. Maybe there already is and I just don't know? Was really hoping that Racechrono could intercept the data without additional devices and apply the equations that are already integrated (ex: bytesToUintLe) and output the psi / temp.
2) These are U.S.A. products by https://techbyblu.com/. That being said, they may be built in China like lots of domestic companies. I don't know. It appears that whatever tech they use is Apple though based on the Beacon info. So I imagine it's a good quality product. I would not recommend this for Chinese products.
3) The test rig was just to increase starting temperature and starting pressure and then spinning the wheel (rather than hand) to have the beacon activate. In between each test I deflated the PSI and let the temperature cool a couple of degrees to get the change in data so I could find an equation to get the proper fit.
It is only necessary for reverse engineering it. The beacon transmits data once the wheel is spinning. So in normal operation it just starts broadcasting data as soon as you start moving and stop transmitting once you stop. It broadcasts every 10-15 seconds or so. You don't need the official app to see the data.