Придбав собі таку метеорологічну станцію, для аналізу погоди, температури і вологості.
Для реалізацій функцій розумного дому я вирішив використовувати ті
датчики що вже є, тобто зовнішній сенсор від погодної станції.
Але як з'ясувати у якому форматі і на якій частоті передає данні цей сенсор до станції.
Розібравши сенсор я заміряв розмір антени : довжина 22мм, діаметр 4.5мм. За документацією на антени, знайшов що подібні працюють на частоті 433MHz.
Надалі побачив який кварцовий резонатор встановлено : це 13.533 MHz.
За попередніми підрахунками робоча частот має бути : Кварц 13.533 MHz * 32 = 433.056 MHz.
Використовуючи аналізатор RTL-SDR і розмістивши сенсор не далеко від антени RTL-SDR, я натискав клавішу "ТХ" на бездротовому сенсорі і зміг визначити робочу частоту сенсор це 434.002MHz, за потужним і синхронним за натисканням клавіші "ТХ" сигналом .
За результатами роботи з'ясував який формат підходить для даних:
Weather station |
Але як з'ясувати у якому форматі і на якій частоті передає данні цей сенсор до станції.
Розібравши сенсор я заміряв розмір антени : довжина 22мм, діаметр 4.5мм. За документацією на антени, знайшов що подібні працюють на частоті 433MHz.
Розміри антени передавача |
За попередніми підрахунками робоча частот має бути : Кварц 13.533 MHz * 32 = 433.056 MHz.
Аналізатор RTL-SDR
USB RTL-SDR v3.0 на базі чіпів RTL2838U та R820T2 |
Пошук частоти за допомогою RTL-SDR |
Декодування
Надалі використовуючи програму rtl_433 виконав аналіз передаваних даних з сенсора .rtl_433 -f 434.002M -R91 -vvv rtl_433 version 20.02 branch at 202002171252 inputs file rtl_tcp RTL-SDR Use -h for usage help and see https://triq.org/ for documentation. Trying conf file at "C:\ProgramData\rtl_433\rtl_433.conf"... Registered 1 out of 149 device decoding protocols Found 1 device(s) trying device 0: Realtek, RTL2838UHIDIR, SN: 00000001 Found Rafael Micro R820T tuner Using device 0: Generic RTL2832U OEM Exact sample rate is: 250000.000414 Hz [R82XX] PLL not locked! Sample rate set to 250000 S/s. Bit detection level set to 0 (Auto). Tuner gain set to Auto. Reading samples in async mode... Tuned to 434.002MHz. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ time : 2020-03-11 22:41:14 model : inFactory-TH ID : 95 Channel : 1 Temperature: 81.60 ┬░F Humidity : 29 % pulse_demod_ppm(): inFactory, FreeTec NC-3982-913 temperature humidity sensor bitbuffer:: Number of rows: 2 [00] { 4} 00 : 0000 [01] {40} 5f d0 6b 42 91 : 01011111 11010000 01101011 01000010 10010001 Pulse data: 46 pulses [ 0] Pulse: 179, Gap: 251, Period: 430 [ 1] Pulse: 254, Gap: 251, Period: 505 [ 2] Pulse: 251, Gap: 251, Period: 502 [ 3] Pulse: 255, Gap: 251, Period: 506 [ 4] Pulse: 144, Gap: 1971, Period: 2115 [ 5] Pulse: 142, Gap: 472, Period: 614 [ 6] Pulse: 146, Gap: 1014, Period: 1160 [ 7] Pulse: 145, Gap: 465, Period: 610 [ 8] Pulse: 146, Gap: 1038, Period: 1184 [ 9] Pulse: 142, Gap: 995, Period: 1137 [ 10] Pulse: 142, Gap: 1016, Period: 1158 [ 11] Pulse: 146, Gap: 1015, Period: 1161 [ 12] Pulse: 143, Gap: 1039, Period: 1182 [ 13] Pulse: 144, Gap: 992, Period: 1136 [ 14] Pulse: 146, Gap: 1015, Period: 1161 [ 15] Pulse: 143, Gap: 466, Period: 609 [ 16] Pulse: 145, Gap: 1037, Period: 1182 [ 17] Pulse: 146, Gap: 442, Period: 588 [ 18] Pulse: 145, Gap: 465, Period: 610 [ 19] Pulse: 146, Gap: 466, Period: 612 [ 20] Pulse: 143, Gap: 491, Period: 634 [ 21] Pulse: 142, Gap: 446, Period: 588 [ 22] Pulse: 141, Gap: 1018, Period: 1159 [ 23] Pulse: 142, Gap: 1015, Period: 1157 [ 24] Pulse: 146, Gap: 489, Period: 635 [ 25] Pulse: 144, Gap: 991, Period: 1135 [ 26] Pulse: 146, Gap: 467, Period: 613 [ 27] Pulse: 142, Gap: 1015, Period: 1157 [ 28] Pulse: 146, Gap: 1037, Period: 1183 [ 29] Pulse: 146, Gap: 443, Period: 589 [ 30] Pulse: 143, Gap: 1015, Period: 1158 [ 31] Pulse: 146, Gap: 464, Period: 610 [ 32] Pulse: 146, Gap: 489, Period: 635 [ 33] Pulse: 143, Gap: 445, Period: 588 [ 34] Pulse: 142, Gap: 467, Period: 609 [ 35] Pulse: 145, Gap: 1015, Period: 1160 [ 36] Pulse: 143, Gap: 492, Period: 635 [ 37] Pulse: 141, Gap: 993, Period: 1134 [ 38] Pulse: 146, Gap: 466, Period: 612 [ 39] Pulse: 144, Gap: 467, Period: 611 [ 40] Pulse: 142, Gap: 1040, Period: 1182 [ 41] Pulse: 143, Gap: 444, Period: 587 [ 42] Pulse: 143, Gap: 467, Period: 610 [ 43] Pulse: 143, Gap: 467, Period: 610 [ 44] Pulse: 143, Gap: 1024, Period: 1167 [ 45] Pulse: 156, Gap: 2551, Period: 2707
За результатами роботи з'ясував який формат підходить для даних:
pulse_demod_ppm(): inFactory, FreeTec NC-3982-913 temperature humidity sensorЗа кодом програми аналізую безпосередньо бінарний формат:
r_device infactory = { .name = "inFactory, FreeTec NC-3982-913 temperature humidity sensor", .modulation = OOK_PULSE_PPM, .short_width = 1850, .long_width = 4050, .gap_limit = 4000, // Maximum gap size before new row of bits [us] .reset_limit = 8500, // Maximum gap size before End Of Message [us]. .tolerance = 1000, };
inFactory Outdoor sensor transmits data temperature, humidity. Also NC-3982-913 from Pearl (for FWS-686 station). Transmissions also includes an id. The sensor transmits every 60 seconds 6 packets. 0000 1111 | 0011 0000 | 0101 1100 | 1110 0111 | 0110 0001 xxxx xxxx | cccc cccc | tttt tttt | tttt hhhh | hhhh ??nn - x: ID // changes on battery switch - c: Unknown Checksum (changes on every transmit if the other values are different) - h: Humidity // BCD-encoded, each nibble is one digit - t: Temperature // in °F as binary number with one decimal place + 90 °F offset - n: Channel // Channel number 1 - 3 Usage: # rtl_433 -f 434052000 -R 91 -F json:log.json Payload looks like this: [00] { 4} 00 : 0000 [01] {40} 0f 30 5c e7 61 : 00001111 00110000 01011100 11100111 01100001 First row is actually the preamble part. This is added to make the signal more unique.
Тепер спроба декодувати вручну сирі бінарні дані:
Сирі данні:00 : 0000 5f d0 6b 42 91 : 01011111 11010000 01101011 01000010 10010001Аналіз:
0000 4 bits of preamble is 0 0101 1111 | 1101 0000 | 0110 1011 | 0100 0010 | 1001 0001 xxxx xxxx | cccc cccc | tttt tttt | tttt hhhh | hhhh ??nn xxxx xxxx = 0x5F (95) = ID cccc cccc = 0xD0 (208) = Unknown Checksum tttt tttt tttt = 0x6B4 b[2]= 6B b[3]= 42 temp_raw = (b[2] << 4) | (b[3] >> 4 temp_raw = 0x6B4 float(0x6B4)=1716 temp_f = (float)temp_raw * 0.1 -90 1716*0.1=171.6-90=81.6 Temperature, F hhhh hhhh = bx0010 bx1001 = 0x29 = Humidity nn = bx01 = 01 = Channel ID: 95, Channel: 1,Temperature: 81.6F, Humidity: 29%
Так як є датчик розряду батареї на екрані станції, то можливо десь і передається ще рівень стану батареї сенсора.
Бездротовий сенсор посилає дані до метеорологічної станції з інтервалами до 1 хвилини по 6 спроб, можливо таким чином вирішується верифікація даних.
В цілому готово.
Наступне завдання прочитати данні що передаються бездротовим сенсором за допомогою мікроконтролера і плати CC1101 і переслати через MQTT до брокера.
У допомоги для роботи СС1101 , запустимо програму rtl_433 з виконав більш детального аналізу -A
rtl_433 -f 434.002M -R0 -vvv -A
rtl_433 version 20.02 branch at 202002171252 inputs file rtl_tcp RTL-SDR Use -h for usage help and see https://triq.org/ for documentation. Trying conf file at "C:\ProgramData\rtl_433\rtl_433.conf"... Registered 1 out of 149 device decoding protocols Found 1 device(s) trying device 0: Realtek, RTL2838UHIDIR, SN: 00000001 Found Rafael Micro R820T tuner Using device 0: Generic RTL2832U OEM Exact sample rate is: 250000.000414 Hz [R82XX] PLL not locked! Sample rate set to 250000 S/s. Bit detection level set to 0 (Auto). Tuner gain set to Auto. Reading samples in async mode... Tuned to 434.002MHz. Detected OOK package 2020-03-13 00:51:41 Pulse data: 46 pulses [ 0] Pulse: 257, Gap: 253, Period: 510 [ 1] Pulse: 250, Gap: 253, Period: 503 [ 2] Pulse: 251, Gap: 252, Period: 503 [ 3] Pulse: 252, Gap: 250, Period: 502 [ 4] Pulse: 148, Gap: 1972, Period: 2120 [ 5] Pulse: 138, Gap: 475, Period: 613 [ 6] Pulse: 143, Gap: 1015, Period: 1158 [ 7] Pulse: 146, Gap: 466, Period: 612 [ 8] Pulse: 143, Gap: 1038, Period: 1181 [ 9] Pulse: 144, Gap: 992, Period: 1136 [ 10] Pulse: 147, Gap: 1013, Period: 1160 [ 11] Pulse: 147, Gap: 1014, Period: 1161 [ 12] Pulse: 144, Gap: 1038, Period: 1182 [ 13] Pulse: 145, Gap: 442, Period: 587 [ 14] Pulse: 146, Gap: 1016, Period: 1162 [ 15] Pulse: 142, Gap: 466, Period: 608 [ 16] Pulse: 146, Gap: 1037, Period: 1183 [ 17] Pulse: 144, Gap: 443, Period: 587 [ 18] Pulse: 146, Gap: 464, Period: 610 [ 19] Pulse: 147, Gap: 464, Period: 611 [ 20] Pulse: 146, Gap: 1035, Period: 1181 [ 21] Pulse: 147, Gap: 443, Period: 590 [ 22] Pulse: 143, Gap: 1018, Period: 1161 [ 23] Pulse: 141, Gap: 468, Period: 609 [ 24] Pulse: 143, Gap: 1037, Period: 1180 [ 25] Pulse: 147, Gap: 991, Period: 1138 [ 26] Pulse: 145, Gap: 1016, Period: 1161 [ 27] Pulse: 143, Gap: 1016, Period: 1159 [ 28] Pulse: 146, Gap: 485, Period: 631 [ 29] Pulse: 147, Gap: 992, Period: 1139 [ 30] Pulse: 146, Gap: 464, Period: 610 [ 31] Pulse: 146, Gap: 464, Period: 610 [ 32] Pulse: 146, Gap: 486, Period: 632 [ 33] Pulse: 147, Gap: 442, Period: 589 [ 34] Pulse: 146, Gap: 1042, Period: 1188 [ 35] Pulse: 139, Gap: 443, Period: 582 [ 36] Pulse: 146, Gap: 486, Period: 632 [ 37] Pulse: 147, Gap: 993, Period: 1140 [ 38] Pulse: 142, Gap: 467, Period: 609 [ 39] Pulse: 143, Gap: 468, Period: 611 [ 40] Pulse: 143, Gap: 1038, Period: 1181 [ 41] Pulse: 144, Gap: 443, Period: 587 [ 42] Pulse: 146, Gap: 464, Period: 610 [ 43] Pulse: 147, Gap: 1015, Period: 1162 [ 44] Pulse: 143, Gap: 471, Period: 614 [ 45] Pulse: 156, Gap: 2571, Period: 2727 Analyzing pulses... Total count: 46, width: 156.60 ms (39151 S) Pulse width distribution: [ 0] count: 4, width: 1008 us [1000;1028] ( 252 S) [ 1] count: 42, width: 580 us [552;624] ( 145 S) Gap width distribution: [ 0] count: 4, width: 1008 us [1000;1012] ( 252 S) [ 1] count: 1, width: 7888 us [7888;7888] (1972 S) [ 2] count: 21, width: 1848 us [1768;1944] ( 462 S) [ 3] count: 19, width: 4072 us [3964;4168] (1018 S) Pulse period distribution: [ 0] count: 25, width: 2360 us [2008;2528] ( 590 S) [ 1] count: 1, width: 8480 us [8480;8480] (2120 S) [ 2] count: 19, width: 4652 us [4544;4752] (1163 S) Level estimates [high, low]: 15989, 23 RSSI: -0.1 dB SNR: 28.4 dB Noise: -28.5 dB Frequency offsets [F1, F2]: 18750, 0 (+71.5 kHz, +0.0 kHz)
За процедурою pulse_demod_ppm() визначено ти модуляції OOK_PULSE_PPM
Форма сигналу
За допомогою програми urh (Universal Radio Hacker), записав форми сигналу:6 послідовних пакетів від сенсору |
Один пакет. Згідно з попереднім аналізом мусить бути 46 імпульсів |
Більш детально початок пакету, мусить бути преамбула 0000 |
Спроба накласти синусоїдний сигнал |
Спроба декодувати за довжиною паузи (Gap) після короткого імпульсу (Pulse) (Pulse Position Modulation) |
Reference
Hochschule f ̈ur Technik und Wirtschaft des Saarlandes, Saarbr ̈uckenFakult ̈at f ̈ur IngenieurwissenschaftenBachelor ElektrotechnikTutor: Prof. Dr. Martin BuchholzBachelor ThesisImplementation of EnOcean protocol inmicrocontroller and CC1101 transceiverOOK modualtion:
On-off keying (OOK) denotes the simplest form of amplitude-shift keying (ASK) modulation that represents digital data as the presence or absence of a carrier wave.
OOK - On-Off Keying - Simple Binary Modulation – One Bit at a Time |
PPM (Pulse position modulation)
Pulse Position Modulation (PPM) is an analog modulating scheme in which the amplitude and width of the pulses are kept constant, while the position of each pulse, with reference to the position of a reference pulse varies according to the instantaneous sampled value of the message signal.
The transmitter has to send synchronizing pulses (or simply sync pulses) to keep the transmitter and receiver in synchronism. These sync pulses help maintain the position of the pulses. The following figures explain the Pulse Position Modulation.
Pulse Position Modulation |
triq.org
Допомога в аналізі сигналу: https://triq.org/pdv - I/Q Spectrogram & Pulsedata
Опис infactory |
>rtl_433 -R91 -A
Detected OOK package 2020-12-17 03:09:21 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ time : 2020-12-17 03:09:21 model : inFactory-TH ID : 25 Channel : 1 Battery OK: 1 Temperature: 31.60 F Humidity : 92 % Integrity : CRC Analyzing pulses... Total count: 46, width: 145.55 ms (36387 S) Pulse width distribution: [ 0] count: 4, width: 984 us [980;992] ( 246 S) [ 1] count: 42, width: 540 us [516;560] ( 135 S) Gap width distribution: [ 0] count: 4, width: 1032 us [1028;1040] ( 258 S) [ 1] count: 1, width: 7928 us [7928;7928] (1982 S) [ 2] count: 26, width: 1896 us [1828;1984] ( 474 S) [ 3] count: 14, width: 4104 us [4028;4180] (1026 S) Pulse period distribution: [ 0] count: 30, width: 2380 us [2016;2532] ( 595 S) [ 1] count: 1, width: 8472 us [8472;8472] (2118 S) [ 2] count: 14, width: 4644 us [4548;4724] (1161 S) Pulse timing distribution: [ 0] count: 8, width: 1008 us [980;1040] ( 252 S) [ 1] count: 42, width: 540 us [516;560] ( 135 S) [ 2] count: 1, width: 7928 us [7928;7928] (1982 S) [ 3] count: 26, width: 1896 us [1828;1984] ( 474 S) [ 4] count: 14, width: 4104 us [4028;4180] (1026 S) [ 5] count: 1, width: 10004 us [10004;10004] (2501 S) Level estimates [high, low]: 1000, 16 RSSI: -12.1 dB SNR: 18.0 dB Noise: -30.1 dB Frequency offsets [F1, F2]: 844, 0 (+3.2 kHz, +0.0 kHz) Guessing modulation: Pulse Width Modulation with multiple packets view at https://triq.org/pdv/#AAB013060103F0021C1EF8076810082714808080809255+AAB037060103F0021C1EF8076810082714939393949493939493949494939394939394939394949393939393939493939493939493939393949555 Attempting demodulation... short_width: 540, long_width: 984, reset_limit: 7932, sync_width: 0 Use a flex decoder with -X 'n=name,m=OOK_PWM,s=540,l=984,r=7932,g=1988,t=178,y=0' pulse_demod_pwm(): Analyzer Device bitbuffer:: Number of rows: 16 [00] { 5} 08 : 00001 [01] { 4} f0 : 1111 [02] { 1} 80 : 1 [03] { 3} e0 : 111 [04] { 2} c0 : 11 [05] { 1} 80 : 1 [06] { 1} 80 : 1 [07] { 3} e0 : 111 [08] { 3} e0 : 111 [09] { 3} e0 : 111 [10] { 1} 80 : 1 [11] { 7} fe : 1111111 [12] { 3} e0 : 111 [13] { 3} e0 : 111 [14] { 5} f8 : 11111 [15] { 1} 80 : 1
Результат аналізу хибний PWM 536:1044
Візуальний результат за посиланням https://triq.org/pdv/#AAB01.... але PWM |
Результат аналізу PPM 4100:1900 за заднім фронтом
Візуальний результат за посиланням https://triq.org/pdv/#AAB01.... але PPM |
Результат аналізу PPM 4100:1900 більш детальніше
Візуальний результат за посиланням https://triq.org/pdv/#AAB01.... але PPM zoomed |
Немає коментарів:
Дописати коментар