Help needed hacking a BLE TPMS #7633
Replies: 1 comment
-
Posted at 2020-12-05 by @allObjects Is the bind really creating a connection or just take note of the device id in a registration and then taking into account only advertisements of the registered device id? That is the way to get away from having to connect and still get data, assuming the data is in the advertisement. TPMS has version bluetooth 4 and 5. Your's look like they are 4. But that's just from the outside look. Interesting pub at https://www.amarinfotech.com/differences-comparisons-bluetooth-5-vs-4-2.html (print attached as .pdf) Attachments: Posted at 2020-12-05 by ChristianW Hey, @allObjects thanks for your response. Since the devices were quite cheap and on the market for a while I guess it's all old-fashioned BLE 4. My guess was also that a connection actually might have been avoided by the creators since it means complexity and drawing more battery power. But my question is this: PS: I just found the same item on aliexpress and they explicitly say it's BLE 4 - look: https://www.aliexpress.com/item/33041131063.html Attachments: Posted at 2020-12-05 by ChristianW Update: Maybe it is the same protocol, maybe similar. So it most probably is about the Posted at 2020-12-05 by ChristianW OK. Another update.
This is the output from a few sensors (*ba52 sits on a "real" tire, the others are just blown into to wake them up):
Now everything needs to be wrapped up, put into a working solution including low pressure / battery indication (sound, LED), missing signal detection, pairing etc... Posted at 2020-12-05 by @allObjects @christianw, thanks, you just made my day! - you really push it to the limit with:
Posted at 2020-12-05 by user80943 @allObjects what do you mean by push it to the limit? Posted at 2020-12-07 by @gfwilliams That's great! Sorry I was a bit late to this, but yes, it makes sense that the relevant data would be in manufacturerData. Those look amazingly neat - I'd love to see something working on a Pixl.js or Bangle.js. The code you have there looks spot on - all I'd say is you can always use
For anyone else interested in this you seem to be able to just search for "v11 tpms" and find them on eBay around £30. If you're doing this for a bike you could maybe even detect which sensor is which using signal strength (I guess the rear wheel would be lower strength than the front :). Posted at 2020-12-07 by user80943 Thanks @gfwilliams for the Actually I'd be planning it for the Pixl.js, but Bangle.js would also be great - maybe both. Posted at 2020-12-08 by ChristianW FYI @gfwilliams - I just posted a pimped up version on Pixl.js here
Posted at 2020-12-09 by @gfwilliams Nice - thanks! Posted at 2021-04-05 by user126998 @christianw, thanks a LOT. I have the exact same device and have been struggling with which bytes to decode. Posted at 2021-05-18 by ChristianW Short update: Maybe it's because I use them in a unusually high pressure range of 6 to 8 Bar. Posted at 2021-05-20 by @gfwilliams Just a thought, but sometimes bluetooth devices advertise quickly (high power state) when they are first turned on, and only go to a lower power state when they've been 'paired'. I guess you could try pairing one with their official app and see if it lasts any longer? |
Beta Was this translation helpful? Give feedback.
-
Posted at 2020-12-04 by ChristianW
Disclaimer: I have played around with Espruino some while ago and my JS and BLE knowledge may have gotten a bit rusty - so sorry for any stupid questions in advance.
I got a Chinese TPMS (tire pressure monitoring system) consisting of 4 coincell powered BLE enabled oversized valve caps and an iOS / Android App.
The sensors support pressures over 10 Bar, but the App doesn't allow warning thresholds beyond 6,4 and since I want to monitor my bike tires I am stuck here.
Espruino to the rescue! (so I thought) - so I started hacking.
I can see the Sensors appearing in the iOS LightBlue app from time to time. Name "TPMSn-xxxxx" with n being 1..4 and xxxxxx being the hex suffix of the device ID.
Each device reports 1 service, but any connection attempt times out.
So I got out my old Nordic development board with the Espruino port loaded and finally used this:
to log this:
From time to time devices appear. But this is it.
When I actually try to connect a device using this code:
I guess the device avoids connections to save power.
Or at least makes connections as brief as possible.
So my questions:
Attachments:
Beta Was this translation helpful? Give feedback.
All reactions