• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

TLSR8251 + LCD + термометр = LYWSD03MMC XIAOMI Bluetooth термометр

pvvx

Активный участник сообщества
В kernel 6.3+ налепили патчей для USB-BT адаптера Bluetooth 5.3 с чипом ATS2851.
C:
     if (id->driver_info & BTUSB_ACTIONS_SEMI) {
         /* Support is advertised, but not implemented */
         set_bit(HCI_QUIRK_BROKEN_ERR_DATA_REPORTING, &hdev->quirks);
+        set_bit(HCI_QUIRK_BROKEN_READ_TRANSMIT_POWER, &hdev->quirks);
+        set_bit(HCI_QUIRK_BROKEN_SET_RPA_TIMEOUT, &hdev->quirks);
+        set_bit(HCI_QUIRK_BROKEN_EXT_SCAN, &hdev->quirks);
     }
Патчи типа функции объявляются адаптером, но не работают.
Но толку ноль - адаптер теперь проходит включение и старт, и с некоторыми старыми приложениями работает, а в некоторых всё равно нарывается на ошибку.
Приема LongRange так и нет, как и нет BT5.3.
Пересобрал уже разные дистрибутивы к разным платам типа xPI - HA на этом адаптере работает, но прием в LE Coded PHY не включить... патчами просто обрезали функционал для данного адаптера.
 

pvvx

Активный участник сообщества
И kernel 6 имеет глобальные отличия по части Bluetooch от kernel 5. Переписана большая часть кода и много добавлено. Так что применить патчи для старых вариантов kernel 5.1+ используемых в текущих (у большинства) типов хPi плат нет никакой возможности.
Вот интересно - в Windows этот адаптер работает и не жужит на типовых дровах мелкомягких, слепленных до появления этого адаптера, а в Linux нужны глобальные патчи. Что-то явно не так в Linux c BLE.
 

sL0n1k

Member
Вот интересно - в Windows этот адаптер работает и не жужит на типовых дровах мелкомягких, слепленных до появления этого адаптера, а в Linux нужны глобальные патчи. Что-то явно не так в Linux c BLE.
Так тут ничего удивительного.
Вы себе представляете как появляются "драйвера" для разного железа под линухом (в том числе и для блю адаптеров)?
Они рождаются (по большей части) путем выпиливания бинарных кусков из драйверов Win.
Этот процесс хорошо известен.
Если Вам так непременно хочется это заставить работать по линух, то вполне можете это сделать самостоятельно))
 

sL0n1k

Member
Конечно, не под все платформы, но такое имеет место быть, как вариант.)
 

pvvx

Активный участник сообщества
Так тут ничего удивительного.
Вы себе представляете как появляются "драйвера" для разного железа под линухом (в том числе и для блю адаптеров)?
Представляю. Вы указываете не про то.
"Драйвер" для BT адаптера, если это можно так назвать, в Linux, работает по стандарту с HCI протоколом. При этом устройство имеет и отвечает флагами поддерживаемых команд и опций согласно всем доступной спецификации. И "драйвер" при старте в Linux, тупо по маске ответа запрашивет все команды и на некоторых нарывается на свои ошибки. Linux просто не шарит в BT 5.0+ и какие опции по флагам от адаптера как надо разгребать. Вместо этого тупо "патчат" в ядре непонятные команды-опции флагами HCI_QUIRK_BROKEN, означающими что Linux не шарит в параметрах к конкретной команде с учетом BT5.0. :p
Т.е. Linux давно мертв и погряз в тупизне отвечающих за развитие, типа главного пердуна Linux T.
 

sL0n1k

Member
Так переходите на Андроид.))
Тем более, что теперь тут новый ble стек - габельдорш. Он в исходниках, на rust-e.
 

sL0n1k

Member
Ну в Андроиде своих сложностей вагон таких размеров, что Торвальдсу можно только позавидовать с его одним вариантом стека, который блюз)
 

pvvx

Активный участник сообщества
Так тут ничего удивительного.
И тут действительно ничего удивительного :) Кому это вдруг надо на старости лет копаться для Linux в новых стандартах? Пущай загибается.
Тем более это происходит не только с BLE, а и со всем другим, что вышло в последние десять лет.
 

pvvx

Активный участник сообщества
Ну в Андроиде своих сложностей вагон таких размеров, что Торвальдсу можно только позавидовать с его одним вариантом стека, который блюз)
А стек BLE как раз не Товальдса. Это ныне к Bluez. А дальше к насадкам типа Bleak через DBUS
У Bluez воооще кошмар - заявлено что типа всё поддерживается, а нифига не работает.
И они ссылаются на kernel.
Bleak ссылается на Bluez.
Круговая порука в ярчайшем виде.
 

pvvx

Активный участник сообщества
Kernel для чипов Intel и Realtek как-то, через силу обновляется, а для других - фигу. Это называется GNU - open-source с жесточайшим авторским правом и прочими обременениями. Хуже Windows.
 

sL0n1k

Member
Где-то было такое,
Но сам не делал, за ненадобностью)
 

pvvx

Активный участник сообщества
Я недавно пересобрал (для своих плат) armbian c ядром 6.2 Ubuntu 23.04 (Lunar Lobster) и последними патчами для bluetooth части ядра. Вроде всё работает, последний HA установился без проблем и допиливания.
Bluetooth интеграция работает с USB-BT на ATS2851. А вот Bluetooth Low Energy Monitor нарывается на ошибку в ядре, в части Bluetooth - видимо ещё не всё запатчили патчеписатели в kernel.org.
Но, т.к. на данном адаптере не включается прием BLE реклам в LongRange, то пока его использование не имеет смысла. Он сильно тормозной - USB2.0FS и по кол-ву принимаемых реклам за тестовый отрезок времени примерно равен или хуже Realtek-овским USB-BT. CSR принимает раз в десять больше реклам за единицу времени и у него USB2.0HS.
Возможно скоро ещё повожусь с USB-BT на ATS2851 - уберу ошибку с интеграцией Bluetooth Low Energy Monitor и поковыряю ядро на выполнение переключения на Coded PHY...
А сейчас ядро с ATS2851 при подаче команды включения Coded PHY говорит ok, но не переключает - нет приема реклам с Coded PHY на основном канале...
 

sL0n1k

Member
Почему-то не вижу в рекламе состояния батарейки от XMWSDJ04MMC, тот который на чернилах:

Прилетают объекты
ID_TemperatureFloat =0x4C01,
ID_HumidityFloat =0x4C08,

другого ничего не прилетает, ну кроме не шифрованных.

В теории должно прилетать
ID_Battery =0x4C03 - но нет.

Кто-нибудь видит его батарейку?
 

pvvx

Активный участник сообщества
Service UUID: ebe0ccb0-7a0a-4b0c-8a1a-6ff2997da3a6
Characteristic Name: ebe0ccc1-7a0a-4b0c-8a1a-6ff2997da3a6 - Value: F5-00-FA-00-D4-0C = 24.5C, 25.0%, 3284mV
Characteristic Name: ebe0ccc4-7a0a-4b0c-8a1a-6ff2997da3a6 - Value: 64 = 100%
 

sL0n1k

Member
Ага, вижу, спасибо.

Но батарейка точно в рекламе прилетела или ее вычитали из характеристики?
 

pvvx

Активный участник сообщества
Ага, вижу, спасибо.

Но батарейка точно в рекламе прилетела или ее вычитали из характеристики?
Реклама с данными редкая, батарейки ещё реже.
Mijia передает по одному параметру... Ждите и прибудет :)
 

pvvx

Активный участник сообщества
1683499962747.png
По графику истории - почти раз в сутки 🤪
 

pvvx

Активный участник сообщества
И графики от него квадратные. Переписать прошивку некому.
1683500496238.png
И батарея на этом уже заменена. Работает 1 год ровно на хорошей (дорогой) батарейке (+20..26С).
 
Сверху Снизу