-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Analyzing Shenzhen EGQ TPMS Samples #2556
Comments
Hi @js-3972 , The length of the capture is not an issue, it depends on the rf conditions, are you isolate, or living in big city, for the last, you may capture a lot of rf signals. Can you try with rtl_433 -R 123 , since the 3 last from your cu8 files sounds to be properly decoded with this decoder disabled by default. Check if it's ok with -R 123. Also , what are the values and the unit on the console ? If you capture again, for each cu8 file, put the information you have, with the unit (C / F , PSI / Bar / Kpa .. ) |
Hi @ProfBoc75 , The device that's being recognized is the Abarth-124Spider, not the Jansite TPMS, so I ran "-R 156" instead. I have attached a few cu8 files that were generated. As you can see, the rtl software displays a value of 31 c and 48 kpa, but the device's console displays 15 psi and 26 c. Attached are all of the cu8 files generated with the previous values. |
Hi @js-3972 , Thanks for the sample and the temp / pressure information. The data message is not the same format as the Abarth-124Spider but it's similar until the checksum the reason why it's decoded as Abarth-124Spider, but the conversion of the temp & pressure sounds to be different. First the Shenzhen message is longer, after the checksum we have a fix 0x40 then a CRC-16/CCITT-FALSE, in little-endian. Here the bitbench So, to confirm that, capture again other values. After few captures that will confirm my hypothesis, we can update the abarth device to take into account this model. |
Hi @zuckschwerdt , need your help please. I'm ready to create a new PR to 'Add support for Shenzhen EGQ Q85 and improve Abarth 124 Spider'. How I can create a new PR with this current issue & without conflict with the other PR ? Notice, that I don't yet git push my update, still on my laptop for the moment, waiting your git instruction / help. Thanks |
You need to start a new branch from master for the PR. |
Done, Thx. |
@ProfBoc75 Thanks for the timely response, I'm glad you were able to decode the signal. I am particularly interested in how you were able to properly decode the bits. For example, in bitbench, you had the string "aaaa9aa9596a69569aa95665aa6a599a9a96559569aaa695a55a90" for the Shenzhen sensor. Where did this string come from? Maybe I missed it, but was this particular message included in one of the signals I provided? I am just as much interested in the process you took to decode the signal as I am in decoding the signal itself, so if you could provide some more insight that would be greatly appreciated. Thanks. |
@js-3972 , yes, the string come from the signal you provided in the .cu8 files. 90% of the job was already done by the abarth-124Spider device driver, since your signal was decoded but the temp and pressure were wrong. So, look at the bottom of tpms_abarth124.c file and you have the modulation information:
Then into the same file, we have the preamble = 0xaaaaa9 , inverted data, Manchester encoded data and data layout So it's enough to start a flex decoder and replay the cu8 files , keep only the abarth 124Spider enabled by -R 156 and :v for verbose the code , like this :
Notice that the flex decoder is useless, since we have the same result with the verbose option... Then enough for me to build the bitbench information from all sources :
Thanks to the builtin Manchester decoder in bitbench, then you have the hexa bytes (in bitbench on Manchester line, click on Show to see them).
With the help of this nice online crc calculator web site , I was able to find that the 2 last bytes are CRC16 CCITT-FALSE but little-endian formatted , it means that the first byte is the lower value and the last byte is the higher value, which is the reverse of classic format. Then, I added the data layout information :
From there, we have the decimal value for Pressure and Temp, and you can find easily the conversion.
After, it's coding this into the existing device driver for Abarth 124 Spider. The both sensors don't send the same message, one is around 195 bits (72 bits after Manchester decoded), and yours is around 353 bits (96 bits after Manchester decoded). "Around", because it's RF, some times it's longer or shorter (radio interference). But it's useful to define a type and have the good conversion. Thanks to rtl_433_test, we have older cu8 capture files from the Abarth 124 Spider to be able to replay and compare the both signals. This help me to control that the new version of the device driver from my PR is working for both sensors. Hope this help to understand how to decode a signal. |
@ProfBoc75 Thank you for the analysis. It seems like having the Abarth-124Spider as a baseline helped a lot with the decoding process. Let's say we had a device signal that was not already decoded. Is the process more of a "brute force" method when decoding the signal, or is there also an intuitive method to do so? I know you have to build a flex decoder and replicate some of the steps you did above, but what happens if you don't already have a decoder to base it off of? |
@js-3972 : Well, in the Wiki part of rtl_433 you have plenty information. From scratch:
To sum up, it takes a lot of steps to get there, and sometimes you just can't get there. Some requests have been open for months or even years. Experience, knowledge and luck are key : Try, Fail, Try again, Fail better .... , Try again, Success ! |
I see there is a PR #2558. Is there anything in this issue that is not captured in the source code improvements in the PR? If not, I would prefer to close the issue, on the general concept of progress being issue->PR->code-present-in-master. |
PR still open, and no response to feedback |
I have this TPMS from Amazon that can be found at https://www.amazon.com/dp/B0BK8SHDRZ?psc=1&ref=ppx_yo2ov_dt_b_product_details
When I run rtl_433, it recognizes the sensor as the Abarth-124Spider, however, none of the values (pressure, temperature, etc.) appear to be matching what the sensor is displaying.
I have ran "rtl_433 -S all" to grab samples of some of the received frames. I have attached some of the cu8 files I captured below but I'm unsure if the data I have captured is even valid. For example, I'm confused at to why the modulation scheme varies between the files even though they were taken with the same device or why some packets are longer than others. It would be much appreciated if someone couId provide some guidance on what the next steps are with the data I have captured.
ShenzenEGQ.zip
The text was updated successfully, but these errors were encountered: