merbanan / rtl_433

Program to decode radio transmissions from devices on the ISM bands (and other frequencies)
GNU General Public License v2.0
6.13k stars 1.32k forks source link

protocol 259 # ThermoPro TP829b Meat Thermometer 4 coated probes giving inaccurate temperatures #3048

Closed cmgrayb closed 1 month ago

cmgrayb commented 1 month ago

Running on Raspberry Pi 4B, Pi OS, brand new build rtl_433 version 23.11-160-gf0ba1538 branch master at 202408270014 inputs file rtl_tcp RTL-SDR

Also enabled: protocol 78 # Fine Offset Electronics, WH25, WH32, WH32B, WN32B, WH24, WH65B, HP1000, Misol WS2320 Temperature/Humidity/Pressure Sensor protocol 142 # Fine Offset Electronics/ECOWITT WH51, SwitchDoc Labs SM23 Soil Moisture Sensor

The above protocols are successfully finding and displaying correct values for the detected devices.

To keep troubleshooting simple, I set the device to Celsius.

For sensors with a probe attached, at 27C on screen, the output is 275.89999

For sensors with no probe attached, the numbers range from 306.5 to 355.89999. On screen, it shows dashes (---). The values appear to possibly be the last known values for those sensors.

With probe attached, it looks like the output is possibly off by a decimal point.

I attempted to pull the protocol data over the air using '-S unknown' but I cannot figure out which of the 101 files it generated in a short time span I should be looking at, most of them appear to say: Guessing modulation: Single pulse detected. Probably Frequency Shift Keying or just noise... I'm willing to pull the required data if someone can point me at documentation for how to narrow it down.

zuckschwerdt commented 1 month ago

With a current version of rtl_433 you can use -R 259:v to get the raw codes. That should enable us to verify the decoding.

cmgrayb commented 1 month ago

Thank you. Using -R 259:v, I see the following (and it is not as simple as off by a decimal I'm afraid):

rtl_433 version 23.11-160-gf0ba1538 branch master at 202408270014 inputs file rtl_tcp RTL-SDR

New defaults active, use "-Y classic -s 250k" if you need the old defaults

MQTT: Publishing MQTT data to 192.168.1.40 port 1883
MQTT: Publishing device info to MQTT topic "rtl_433/garage-pi4-1/devices[/type][/model][/subtype][/channel][/id]".
MQTT: Publishing events info to MQTT topic "rtl_433/garage-pi4-1/events".
MQTT: Publishing states info to MQTT topic "rtl_433/garage-pi4-1/states".
Found Rafael Micro R820T tuner
SDR: Using device 0: Realtek, RTL2838UHIDIR, SN: 00000001, "Generic RTL2832U OEM"
Exact sample rate is: 1000000.026491 Hz
[R82XX] PLL not locked!
Allocating 15 zero-copy buffers
Auto Level: Current noise level -20.5 dB, estimated noise -19.1 dB
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
Auto Level: Current noise level -18.4 dB, estimated noise -18.8 dB
thermopro_tp829b_decode: Packet too long: 716 bits
thermopro_tp829b_decode: Sync word not found
Auto Level: Current noise level -17.4 dB, estimated noise -17.9 dB
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
Auto Level: Current noise level -18.6 dB, estimated noise -18.2 dB
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
Auto Level: Current noise level -19.5 dB, estimated noise -19.0 dB
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
Auto Level: Current noise level -19.0 dB, estimated noise -18.7 dB
thermopro_tp829b_decode: Sync word not found
Auto Level: Current noise level -16.2 dB, estimated noise -16.5 dB
Auto Level: Current noise level -19.0 dB, estimated noise -19.0 dB
thermopro_tp829b_decode: Sync word not found
Auto Level: Current noise level -18.7 dB, estimated noise -19.6 dB
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
Auto Level: Current noise level -20.8 dB, estimated noise -21.1 dB
thermopro_tp829b_decode: Checksum error, calculated 78, expected d0
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Packet too long: 263 bits
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Packet too long: 264 bits
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
Auto Level: Current noise level -18.8 dB, estimated noise -19.3 dB
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
Auto Level: Current noise level -18.2 dB, estimated noise -17.6 dB
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Packet too long: 265 bits
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Packet too long: 317 bits
thermopro_tp829b_decode: Checksum error, calculated e1, expected ec
thermopro_tp829b_decode: Sync word not found
Auto Level: Current noise level -18.9 dB, estimated noise -19.2 dB
thermopro_tp829b_decode: Packet too long: 347 bits
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Packet too long: 264 bits
thermopro_tp829b_decode: Sync word not found
Auto Level: Current noise level -18.8 dB, estimated noise -18.8 dB
thermopro_tp829b_decode: Packet too long: 278 bits
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Checksum error, calculated 1d, expected 76
Auto Level: Current noise level -18.6 dB, estimated noise -18.8 dB
thermopro_tp829b_decode: Packet too long: 261 bits
thermopro_tp829b_decode: Checksum error, calculated 27, expected cb
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
pulse_slicer_pcm: ThermoPro TP829b Meat Thermometer 4 coated probes codes [{260}aaaaaaaaaaad55692a96ea2887c5f2f6efb77dba3ed2d2d2d2d20000000000000]
Auto Level: Current noise level -18.2 dB, estimated noise -18.5 dB
thermopro_tp829b_decode: Checksum error, calculated a9, expected d9
thermopro_tp829b_decode: Packet too long: 281 bits
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Packet too long: 262 bits
Auto Level: Current noise level -20.4 dB, estimated noise -20.7 dB
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Packet too long: 262 bits
thermopro_tp829b_decode: Checksum error, calculated 21, expected eb
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
Auto Level: Current noise level -18.5 dB, estimated noise -18.4 dB
thermopro_tp829b_decode: Packet too long: 264 bits
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Packet too long: 263 bits
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Packet too long: 264 bits
Auto Level: Current noise level -18.4 dB, estimated noise -18.7 dB
thermopro_tp829b_decode: Packet too long: 269 bits
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Packet too long: 262 bits
thermopro_tp829b_decode: Sync word not found
Auto Level: Current noise level -18.2 dB, estimated noise -18.3 dB
thermopro_tp829b_decode: Packet too long: 263 bits
thermopro_tp829b_decode: Checksum error, calculated dd, expected eb
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Sync word not found
thermopro_tp829b_decode: Packet too long: 262 bits
thermopro_tp829b_decode: Sync word not found

MQTT explorer shows the following for output: image

The device around the same time: IMG_1214

zuckschwerdt commented 1 month ago

The interesting outputs are the ones where you see a (possibly wrong) decode and a "codes" line. We need one or more of those to reproduce what is going on the decoder.

cmgrayb commented 1 month ago

It only gave me one of those. It doesn't seem to be very chatty in general.

pulse_slicer_pcm: ThermoPro TP829b Meat Thermometer 4 coated probes codes [{260}aaaaaaaaaaad55692a96ea2887c5f2f6efb77dba3ed2d2d2d2d20000000000000]
ProfBoc75 commented 1 month ago

Hi @cmgrayb I worked on this decoder and I guess the pulse width is not good. Currently is 102 us and you have some bits shifted in your sample because of 1 extra bit. Can you please try to pick up some cu8 captures with -S known -R 259, I need to check the good pulse duration and this explains the bad checksum too. You can also check with -A to get the figures.

cmgrayb commented 1 month ago

Happily. Here are the files that -S known -R259 generated. https://www.dropbox.com/scl/fo/h6q5tpfeaidpkmmt2yt06/APeXwYzbceT4CaiReop8zeE?rlkey=tdr046459nmav9169dfl2e25g&st=pjoir8fl&dl=0

ProfBoc75 commented 1 month ago

@cmgrayb : unfortunately your samples are not good (with noise and other device Fineoffset-WH51), can you remove your antenna from rtl dongle, and put the tp829b probe at 50 cm and please try again the -S known -R 259 or -S unknown.

You can drag and drop here your zip file into the comment.

Notice that the signal from tp829b is not easy to decode as the pulse width changed in the transmit, starting at 96us during the preamble, then 99us at sync word level 0x2d552dd4, then around 105us at the end of the message, so increasing along the signal. Into the decoder I put an average 102us but could be a problem has we have failed codes because of 1 extra bit.

cmgrayb commented 1 month ago

-S known did not create any files. Here is -S unknown. Files started and stopped in sync with the probe's power as expected. noattenna-R259-S_unknown.zip

zuckschwerdt commented 1 month ago

You have the center frequency right on the transmission frequency (915.0M) which might be a problem. Try to offset a little, e.g. -f 915.1M

cmgrayb commented 1 month ago

Retested with 914.9 and 915.1, neither of which saw the thermopro any longer. MQTT for the previous collections lists low/high as ~914.95-915.03, so I also tried 914.95 and 914.96, but no dice.

zuckschwerdt commented 1 month ago

Can you get samples with -S unknown on the offset frequency?

cmgrayb commented 1 month ago

Sure thing. Here are two frequencies: 914.96 and 914.99. noantenna-R259-f_914.96and-f_914.99.zip

zuckschwerdt commented 1 month ago

Looking at the samples in https://triq.org/pdv/ we can notice that the offset is not enough. The signal is centered on 915.00M with a deviation of 60-80 kHz, i.e. the two FSK freqs are at roughly 914.95M and 915.05M -- ideally you want to be 50 kHz outside of those, e.g. -f 915.1M. Then both freqs show a nice sine wave. Our frequency-estimator is based on instant phase angle which is hard to read near 0 Hz given the noise.

ProfBoc75 commented 1 month ago

@cmgrayb:

Thanks for the samples,

First remark, your signals are noisy, may be add a cable between the rtl dongle and the PC, 50 cm or 1 m USB extension cable (good quality with good shield and ferrite cores) to reduce the noise coming from the PC which creates rf interference.

I'm able to decode properly all your signals with this option:

rtl_433 -Y minmax -Y filter=30 *.cu8

image

cmgrayb commented 1 month ago

Ok, all great info, thank you both. I will put a shielded USB between the Pi and the SDR to see if that reduces the noise enough to get accurate readings and then adjust the offset from there as needed. Sorry to bother you over a hardware issue.