Pull to refresh

Comments 15

UFO just landed and posted this here
Да, полностью одинаковые. Там очень похоже на CRC.
CRC там может быть просто арифметическая сумма всех байтов в посылке. А температура — в десятых долях Фаренгейта. Как раз недавно разбирался с подобной.
Так ведь нет, в том-то и дело. CRC несколько хитрее. И температура практически в кодах АЦП.
у вас какой-то странный порядок бит в таблице, подозреваю что при разборе пакета полубайты перемешиваются. Например, если поменять местами полубайты в первой посылке:
1001 0110 0101 1011 1000 0110 1000 0010 0001 1111 Key:0 Ch:2 H:40%, T:25.2 C
на
1001 0110 0101 0110 1000 1011 0010 1000 0001 1111

то получим:
0010 1000 = 40, это влажность. Дальше
0110 1000 1011 = 1675 — температура. Переводим по формуле
(1675-320)*5/9-500=252, или 25,2 градуса Цельсия.
Буквально несколько дней назад разбирался с подобным датчиком. Тоже довольно быстро нашел биты канала, биты поля влажности, и столкнулся со странным форматом поля температуры. Помог хабраюзер ValeriVP — он прямо указал что температура в таких датчиках передается в долях Фаренгейта и CRC рассчитывается как младший байт арифметической суммы всех байт пакета.
Кстати, я смотрел сигнал прямо со входа передатчика цифровым осциллографом и увидел там типичный манчестерский код. Соответственно алгоритм приема у меня реализован по-другому. Сначала идет четыре импульса по 700 мкс, потом 40 бит данных в формате MSB first. Если последовательно записать эти 40 бит, то разбирать их можно будет в привычном формате.
Они в таком виде и приходят. Просто там little-endian по нибблам. Я в таблице это ведь и указал. А CRC точно не арифметическая сумма (и не xor), но что-то к ней близкое, так как иногда совпадает с ней. Я делал перебор различных операций (сумма, разность, xor, or,and, пропуск ниббла, инверсия, вычитание из 0x0f), так вот, мне не удалось найти такую последовательность операций, чтобы CRC всегда совпадало на всех пакетах. Но я заметил, что если третий ниббл нулевой, то в предпоследнем ниббле последний бит тоже всегда ноль и наоборот. Почему так — я не знаю. Поэтому у меня есть предположение, что CRC больше 4 бит и может быть связано с какой-либо операцией на строках и столбцах выписанных блоком нибблов.

(1675-320)*5/9-500=252, или 25,2 градуса Цельсия.


А, вот как. Кстати, очень похоже, что так и сделано. Спасибо за подсказку! Вот откуда 1220 = 320+500*9/5 и 18=10*9/5. Понятно. :)

и увидел там типичный манчестерский код.


Нет, там не похоже на манчестер, потому что ширина высокого уровня всегда одинакова и меньшая из всех.

Если последовательно записать эти 40 бит,


Так я их и записал последовательно. Там ровно 40 бит. У вас какой датчик?
датчик у меня вот такой.
А если сделать перестановки для всех байт пакета и просуммировать, может тогда CRC совпадет с суммой? Вряд ли там слишком много модификаций электроники.
Пакет у меня выглядел вот так:

Но вы смотрели уже с выхода приемника, может это повлияло на длительность импульсов
Да, у вас похоже на манчестерское кодирование.
А приёмник у меня самый обычный китайский RF-модуль (сверхрегенератор с выходным компаратором). Он ничего не умеет декодировать. Просто производители станций придумывают протоколы обмена и модуляцию кто во что горазд. :)

А если сделать перестановки для всех байт пакета и просуммировать, может тогда CRC совпадет с суммой?


А почему вы предлагаете суммировать байты пакета (их там 4.5), а не нибблы (при суммировании байт старший ниббл практически не участвует в младшем ниббле CRC)? А от перестановки нибблов сумма ожидаемо не изменится.
Я видел в одном из протоколов обмена со станциями такую CRC: 0x0f-n1-n2-n3… Это я тоже делал — бесполезно.
просто формат данных очень похож на тот, что в моих датчиках — предположил, что там используется один и тот же чип. В моих датчиках все было логично — 5 байт: 4 данных и 5й — сумма. Все сошлось с первого раза, другие варианты даже не пробовал. Но у вас с передачей нибблами, возможно, все совсем иначе
UFO just landed and posted this here
Да, это возможно. Такой бит описывается в протоколах обмена других станций.
Не знаю. Я такую штуку никогда не использовал. :)
Скорее всего он знает протокол и выдаст что-то в этом роде:
image
Посмотрел список устройств в папке device у rtl_433. Похоже, моего термометра она не знает.
Sign up to leave a comment.

Articles

Change theme settings