RFSniffer - новый драйвер для 433МГц оборудования

Альтернатива для стандартного драйвера радио ism-radio.

В качестве основы был взят драйвер от @avp (https://github.com/avp-avp/rfsniffer), он был обернут в deb-пакет, добавлено несколько новых протоколов и других возможностей.
В настоящий момент RFSniffer НЕ включает в себя полный функционал ism-radio, он больше заточен на получение данных с датчиков (управления из веб-интерфейса нет).
В настоящий момент поддерживаются протоколы:

  • Oregon (V2 + V3)
  • Noolite
  • Livolo
  • Raex
  • RST
  • Rubitek
  • VHome (нет)
  • X10
  • протокол чипов HS****

В ближайшее время драйвер появится в репозитории под именем wb-homa-rfsniffer.

Установка

apt-get update
apt-get install wb-homa-rfsniffer

Этот драйвер не совместим с wb-homa-ism-radio! Установить оба deb-пакета у вас и так не получится, но при самостоятельном запуске исполняемого файла это стоит учитывать. В таком случае самостоятельно отключайте сервис: service wb-homa-ism-radio stop.

Настройка

Есть json-конфиг, доступный к редактированию из веб-интерфейса.
Из полезных настроек, там можно задать:

  • Показывать ли все устройства, от которых приходят сообщения, или только те про которые это явно сказано
  • Для каждого устройства можно задать политику - показывать или скрывать это устройство, кроме этого можно сказать, что если, например, от устройства нет сигналов в течение 2 минут, то стоит выдать ошибку.
    (При изменении политики само устройство не исчезнет, делаем mqtt-delete-retained /devices/noolite_rx_0x14e5/#, только с нужным названием устройства)

Сообщить об ошибке

  • Сначала убедитесь, что ошибка действительно есть (wb-homa-ism-radio отключен, поведение драйвера действительно ненормальное)
  • Подробно опишите ошибку. Это значит все названия используемых устройств, все производимые с ними действия в хронологическом порядке и прочую информацию того же рода.
  • Стоит приложить /run/wb-homa-rfsniffer.log
  • Для следующих пунктов остановить драйвер: service wb-homa-rfsniffer stop.
  • Или, чтобы дать больше информации запустить вручную /usr/bin/wb-homa-rfsniff -c /etc/wb-homa-rfsniffer.conf и приложить его вывод.
  • При проблемах с поддержкой устройства нужно запустить/usr/bin/wb-homa-rfsniff -W, смоделировать нужную ситуацию, потом скопировать файл .rcf и приложить. В нём записаны все полученные сообщения. Это позволит смоделировать ситуацию и исправить ошибки. Особенно важно сделать это, если драйвер падает.

Ссылки

Главная страница на github (там есть README) https://github.com/contactless/rfsniffer
Все новые версии появляются в первую очередь здесь
https://github.com/contactless/rfsniffer/releases
.

1 лайк

В наличии есть 1, 2 и 3 кнопочные сенсорные выключатели VHome, пытаюсь их подключить, но похоже не работает полностью:

  1. 3-кнопочный выключатель появляется, но с именем hs24bits_1047734_1 (а не vhome_blabla, как ожидается), радиолог https://transfer.sh/biyxf/dump-all-0107-165058-001.rcf (нажимал 4 раза 1 кнопку)
  2. 1 и 2-кнопочные не работают корректно — появляется устройство VHome, но в контроле Switch всегда пустота. Вот лог rfsniffer’а, приём сообщения заканчивается ошибкой:
01/07 16:33:20 [11195] RF Received: VHome:. RSSI=-78 (-96)
01/07 16:33:20 [11195] mqtt::on_log(16, Client RFsniffer sending PUBLISH (d0, q0, r1, m34, '/devices/VHome/controls/Switch/meta/readonly', ... (1 bytes)))
01/07 16:33:20 [11195] mqtt::on_publish(34)
01/07 16:33:20 [11195] publish /devices/VHome/controls/Switch/meta/readonly=1
01/07 16:33:20 [11195] mqtt::on_log(16, Client RFsniffer sending PUBLISH (d0, q0, r1, m35, '/devices/VHome/controls/Switch', ... (0 bytes)))
01/07 16:33:20 [11195] mqtt::on_publish(35)
01/07 16:33:20 [11195] publish /devices/VHome/controls/Switch=
01/07 16:33:20 [11195] mqtt::on_log(16, Client RFsniffer sending PUBLISH (d0, q0, r1, m36, '/devices/VHome/controls/Switch/meta/order', ... (1 bytes)))
01/07 16:33:20 [11195] mqtt::on_publish(36)
01/07 16:33:20 [11195] publish /devices/VHome/controls/Switch/meta/order=1
01/07 16:33:20 [11195] mqtt::on_log(16, Client RFsniffer sending PUBLISH (d0, q0, r1, m37, '/devices/VHome/meta/name', ... (6 bytes)))
01/07 16:33:20 [11195] mqtt::on_publish(37)
01/07 16:33:20 [11195] publish /devices/VHome/meta/name=VHome
01/07 16:33:20 [11195] mqtt::on_log(16, Client RFsniffer sending PUBLISH (d0, q0, r1, m38, '/devices/VHome/controls/Switch/meta/type', ... (6 bytes)))
01/07 16:33:20 [11195] mqtt::on_publish(38)
01/07 16:33:20 [11195] publish /devices/VHome/controls/Switch/meta/type=switch
01/07 16:33:20 [11195] conn.NewMessage failed: Exception

Радиолог: https://transfer.sh/tcgWh/dump-all-0107-165219-001.rcf (нажимал одну кнопку на 2-кнопочном выключателе 4 раза).

ii  wb-homa-rfsniffer          1.0.6              armel              Wiren Board RFM69 driver

Спустя произвольный период времени приложение вылетает, выводя вот это в лог:

08/07 07:21:17 [9729] Msg from Oregon type=1D20 id=144 ch=1 low_bat=0 t=20.2 h=54
08/07 07:21:17 [9729] mqtt::on_publish(3830)
08/07 07:21:17 [9729] publish /devices/oregon_rx_1D20_144_1/controls/Temperature=20.2
08/07 07:21:17 [9729] mqtt::on_publish(3831)
08/07 07:21:17 [9729] publish /devices/oregon_rx_1D20_144_1/controls/Humidity=54
08/07 07:21:17 [9729] mqtt::on_publish(3832)
08/07 07:21:17 [9729] publish /devices/oregon_rx_1D20_144_1/controls/Battery low=0
08/07 07:21:56 [9729] RF got data 376 bytes. RSSI=-99
08/07 07:22:35 [9729] RF got data 438 bytes. RSSI=-91
08/07 07:22:42 [9729] RF got data 1406 bytes. RSSI=-92
08/07 07:22:43 [9729] RF got data 1454 bytes. RSSI=-93
08/07 07:22:44 [9729] RF got data 1566 bytes. RSSI=-89
08/07 07:22:45 [9729] RF got data 520 bytes. RSSI=-91
08/07 07:22:46 [9729] RF got data 1616 bytes. RSSI=-92
08/07 07:22:47 [9729] RF got data 2284 bytes. RSSI=-89
08/07 07:22:48 [9729] RF got data 2038 bytes. RSSI=-88
08/07 07:23:00 [9729] RF got data 628 bytes. RSSI=-94
08/07 07:23:01 [9729] RF got data 522 bytes. RSSI=-93
08/07 07:23:02 [9729] RF got data 1504 bytes. RSSI=-95
terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_S_construct null not valid
Stack trace (most recent call last):
#2    Object "/lib/arm-linux-gnueabi/libc.so.6", at 0xb6c46aa7, in gsignal
#1    Object "/lib/arm-linux-gnueabi/libc.so.6", at 0xb6c47daf, in
#0    Object "/usr/bin/wb-homa-rfsniff", at 0x1cef7, in
Aborted (Signal sent by tkill() 9729 0)
Aborted
root@wirenboard-ASXOO36V:~# date
Sat Jul  8 07:25:38 UTC 2017

Радиолог скинуть не могу, т.к. при запуске с -W приложение перестаёт обрабатывать полученные сигналы (либо сообщать о них в mqtt), а у меня весь свет в квартире на радио-выключателях, и до падения может пройти несколько дней.
Можно выпустить версию, в которой -W не будет мешать нормальной работе?

Спасибо за багрепорт. Попытаюсь воспроизвести ошибку.
Запись, не мешающую нормальной работе, тоже сделаю.

Просмотрел дамп, протокол очень похож (если не совпадает) на протокол одного безымянного датчика движения (это как раз hs24bits). Как различать сообщения пока не понятно.

Еще в дампе я нашел сообщения похожие на сообщения от нажатий, но не похоже, что их было 4. Получается выделить группы, например, по 6 сообщений. Возможно помогут разобраться дампы: долгого зажатия одной кнопки, короткого зажатия одной кнопки. Зажатия разных кнопок по одному разу.

Или статья на разбор протокола.

Извините за утверждение о поддержке VHome, она была заимствована и полностью не протестирована.

VHome делал я. У меня был только 3х кнопочный пульт и похоже я не угадал с поддержкой двух-кнопочного.

Вот вам дампики

Вот тестовая версия

Спасибо за дампы (вы даже перестарались :slight_smile: ), они помогли. Протокол vhome это частный случай использования чипов ev1527, так что по умолчанию будет определяться ими. Но в настройках, в конфиге можно отключить ev1527 и влючить vhome. Тогда будет более презентабельно отображаться.

На короткие нажатия пока не очень хорошо реагирует.

1 лайк

Шикааарно, спасибо. Проверил 3-кнопочный, отлично работает. Пните ещё, пожалуйста, когда -W перестанет мешать нормальной работе.

UPD Проверил 1-, 2- и 3- кнопочные сенсорные, и 1- и 3-кнопочные не-сенсорные — все работают. Ловится правда не стабильно, но вполне приемлемо, для дешёвых китайских выключателей :slight_smile:

P.S. Ссылка на 3-кнопочный не-сенсорный выключатель ведёт на 2-кнопочный потому, что на плате там 3 кнопки, но внешне — всего 2 :slight_smile:

Запись не мешающая нормальной работе: флаг -w при прямом запуске. Или в конфиге выставить dump_stream true. Но во втором случае файлы окажутся в корне (но это скоро исправится).

А можно как-нибудь сделать, чтоб дамп не сожрал все мои оставшиеся 300мб диска? :slight_smile: Я его сейчас запустил, и чёрт его знает сколько придётся ждать до падения…

Вау! В этот раз оно упало через 20 минут после запуска. Радиолог и предсмертный вывод консоли:

1500400182 INFO  : mqtt::on_publish(344)
1500400182 INFO  : publish /devices/oregon_rx_1D20_144_1/controls/Humidity = 60
1500400182 INFO  : mqtt::on_log(16, Client RFsniffer sending PUBLISH (d0, q0, r1, m345, '/devices/oregon_rx_1D20_144_1/controls/Battery low', ... (1 bytes)))
1500400182 INFO  : mqtt::on_publish(345)
1500400182 INFO  : publish /devices/oregon_rx_1D20_144_1/controls/Battery low = 0
1500400192 INFO  : RF got data 390 signals. RSSI=-80
1500400192 INFO  : RF Received: MotionSensor:bBbBbBbBaAbAaBaAbAaBaAbAaBbBbBaAbBbAaBbBaAbBbAaBaAbBbBbBbBbAaBaAbBbBbBbAaBbBaAbAaBaAbBbAaBaAbBbBbBbBbAaBbBaAbAaBaAbBbAaBbBaAbBbBbBbBbBbBbBbAaBbBbBbBbBaAbBbBbAaBaAbBbBbBbAaBbB. RSSI=-101 (-102)
1500400192 INFO  : RF Received: Oregon:type=EC40 id=69 ch=1 low_bat=0 t=19.6. RSSI=-101 (-102)
1500400192 INFO  : Msg from Oregon type=EC40 id=69 ch=1 low_bat=0 t=19.6
1500400192 INFO  : mqtt::on_log(16, Client RFsniffer sending PUBLISH (d0, q0, r1, m346, '/devices/oregon_rx_EC40_69_1/controls/Battery low', ... (1 bytes)))
1500400192 INFO  : mqtt::on_publish(346)
1500400192 INFO  : publish /devices/oregon_rx_EC40_69_1/controls/Battery low = 0
1500400192 INFO  : mqtt::on_log(16, Client RFsniffer sending PUBLISH (d0, q0, r1, m347, '/devices/oregon_rx_EC40_69_1/controls/Temperature', ... (4 bytes)))
1500400192 INFO  : mqtt::on_publish(347)
1500400192 INFO  : publish /devices/oregon_rx_EC40_69_1/controls/Temperature = 19.6
1500400192 INFO  : RF Received: MotionSensor:BbBbBbBbBbBbBbBbBbBbBbBbBbBbBbBaAbAaBaAbAaBaAbAaBbBbBaAbBbAaBbBaAbBbAaBaAbBbBbBbBbAaBaAbBbBbBbAaBbBaAbAaBaAbBbAaBaAbBbBbBbBbAaBbBaAbAaBaAbBbAaBbBaAbBbBbBbBbBbBbBbAaBbBbBbBbBaAbBbBbAaBaAbBbBbBbAaBbB. RSSI=-101 (-102)
terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_S_construct null not valid
Stack trace (most recent call last):
#2    Object "/lib/arm-linux-gnueabi/libc.so.6", at 0xb6bd7aa7, in gsignal
#1    Object "/lib/arm-linux-gnueabi/libc.so.6", at 0xb6bd8daf, in
#0    Object "/usr/bin/wb-homa-rfsniff", at 0x268ab, in
Aborted (Signal sent by tkill() 9483 0)
Aborted

В квартире стоит беспроводной комплект сигнализации iconnect 2way в следующем составе:

  1. 2 датчика движения
  2. 1 СМК
  3. Беспроводная клавиатура
    Кажется WB ловит её сигнал, и даже пытается что-то парсить, судя по RF Received: MotionSensor в логе.

Спасибо вам. Исправил баг. Теперь падать не должно, по крайней мере при тех же обстоятельствах) Новая версия по ссылке выше. Если все хорошо, пожалуйста напишите, версия пойдет в репозиторий.

1 лайк

Можно, конечно, но основной смысл в нем, чтобы в точности восстановить происходящее, а если он будет не сначала, то точности не будет, и появится много недопонимания.[quote=“Andrey_Yantsen, post:12, topic:940, full:true”]
А можно как-нибудь сделать, чтоб дамп не сожрал все мои оставшиеся 300мб диска? :slight_smile: Я его сейчас запустил, и чёрт его знает сколько придётся ждать до падения…
[/quote]

Поставил-запустил. Предлагаю подождать до понедельника.

Кажется демон чувствует себя хорошо и не падает, но мне приходилось несколько раз перезагружать контроллер (не всегда восстанавливается сеть при падении-поднятии линка). Но пару дней оно держалось и не падало.
Но началось другое — демон то ли начал лучше распознавать сигналы, то ли наоборот, то ли это мои ощущения :slight_smile: На старой версии на ноолайте не было “ложных” срабатываний, сейчас же — периодически нажимаешь на выключатель, а WB регистрирует 2 нажатия, и из-за этого свет включается на долю секунды и сразу выключается. А на VHome периодически путаются 1я и 3я кнопки — т.е. нажимаешь первую, а контроллер считает её третьей, или вообще видит нажатие с обеих кнопок (но тут я виню скорее китайские кнопки, хотя подсветка загорается только у той, на которую нажали).

Обновил до 1.0.7. Один день работает, на следующий день нет. Нет желания и время смотреть логи, вернул 1.0.6.

Здравствуйте! можно ли пояснить? где смотреть устройства от которых приходят данные? у меня имеются пульты X10, но не могу понять где мне добавлять устройство и как? спасибо!

неужели никто не подскажет? здесь же как-то подключали устройства с радио передачей!