-
Notifications
You must be signed in to change notification settings - Fork 209
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Работа термометров в Home Assistant c Bluetooth LE Long Range. #297
Comments
НА в докере, не получилось заставить работать с LR по предложенной инструкции. Может быть нужно ещё что то предпринять? |
На ходу, когда уже загружен HA, переключение адаптера не работает.
В Linux, в Bluez, адаптер BT5.0 по старту системы инициализируется неправильно. От этого все проблемы в Linux. Интеграция "bluetooth" работает через прокладку "Bleak". "Bleak" в свою очередь работает через DBUS, Далее следующая "прокладка" - "Bluez", далее kernel. Это упрощенно, т.к. там десятки так называемых API прокладок. WEB Bluetooth API нормально не работает в Linux. В Android оно может соединяться с любыми PHY, но меню сканирования у Chrome ещё не умеет работать с BT5.0. В Windows ситуация с WEB Bluetooth API почти аналогична с Linux, но там другие проблемы. Linux тормозят Bluez и Товальдс, подписывая кривые решения. API Android работает без проблем с Coded PHY и всеми остальными форматами PHY. Примером является nRFConnect и многие другие приложения на Android. Apple вообще никогда не придерживалось стандартов Bluetooth SIG. И там свои предрассудки. По идее, в докере, всё должно быть аналогично, если произвести переключение в той части, которая управляет адаптером. Адаптеры BT5.0 умеют сканировать во всех вариантах PHY с 2016 года. |
Интеграция "ble_monitor" в HA включает сканирование только на 1M PHY. Автор ещё не умеет переключать адаптер на работу в BT5.0. |
Спасибо за описание. Удалось таки перевести датчики lywsd03mmc на использование BLE LR в HA в докере. Пришлось перейти с ble_monitor на xiaomi_ble и заново их определить. |
Long Range - ok. |
@pvvx |
На Windows "Advertising.html" практически не работает. Это проблема в Windows c
В HA две интеграции для работы с термометрами - "Bluetooth" и "Bluetooth Low Energy Monitor - Passive BLE monitor".
Рисунки и названия адаптеров от продавцов ни о чем не говорят. По USB VID/PID можно узнать какой чип. По номерам HCI/LMP - какой версии bluetooth: |
@pvvx |
Настройки применяются сразу, но BLE реклама не работает во время соединения. |
цель зависти все это не на виндовс, а на RPI 4 c Home Assistant и с этим свистком |
Google: USB\VID_0BDA&PID_8771 а это и есть 8761B
А это уже ваши проблемы с версиями ОС на RPI 4 и Home Assistant. |
Может отсоединяется по причине посаженной батарейки. Для соединения желательно чтобы было более 40% (+20С). |
батарея 99%. а подключение к chrome на телефоне может мешать подключению к RPI4? |
Во время подключения BLE реклама, ту которую принимает HA, не передается. |
спасибо за уделенное время. пока безуспешно. на тлф в браузере все ок |
Отключите соединение с термометром в Android и в других. Закройте эксплорер. |
@pvvx еще маленький вопрос, значок Bluetooth на самом устройстве что обозначает и должен ли он отображаться в момент рекламы (или соединения)? |
Значок Bluetooth активен только во время соединения и мигает если нажата впаянная кнопка или геркон с выбором в меню функции геркона/кнопки "соединение" (обычно для Long Range). |
@pvvx вместо Xiaomi BLE, установил аддон Passive BLE Monitor |
I don't use MQTT. I receive BLE in Home Assistant using two simple USB-BT adapters. One works for the near zone, the second for the far zone in the “LE Long Range” mode. |
I am not talking about (normal HCI) USB-BT adapters. With espruino these dongles can run your stored javascript code, talk to anything over BLE and then write to USB serial any output you need. So the logic is in javascrit code inside the dongle, if the MQTT broker (like EspruinoHub) or the Home Assistant directly can read from serial port it should work. |
No versatility. For each task on NRF you will have to create a new program. Today there are cheaper chips with full support for BT 5.4 from WCH. Less than 1 dollar. The CH32V208W is a little more expensive. It has BT5.4, USB, Ethernet,... The SDK contains examples of working with BLE+MQTT+Ethernet... |
Oh! Well, I think you don't quite get it with the versatility, but never mind. if you have solution that works for you than that's great. Here is one example of 'no versatility' https://www.espruino.com/Pixl.js+BLE+Ethernet+Bridge - it is NRF device with BLE and ethernet shield connected over SPI. In just few lines of javascript you convert any BLE advertisement seen around into MQTT message and send it to server over ethernet. You don't need to write that stuff in C like with SDK for CH32V208W . If there would be e.g. micropython for that CH32V208W with working BLE api that can do long range then it would be similar. |
Who cares - I can do it faster in C. But no one has been able to write a normal BLE gateway on nRF. For years already. And who in the modern world needs chips with libraries in blobs? NRF - proprietary software. - Correction of errors in nRF binary libs has to wait for years. |
I would like to copy a specific long range solution, put one up, whether c
or js.
Victor ***@***.***> ezt írta (időpont: 2024. febr. 15., Cs
19:41):
… Who cares - I can do it faster in C.
—
Reply to this email directly, view it on GitHub
<#297 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AE3B7YMVI7DHMJYNEPPFSO3YTZJFBAVCNFSM6AAAAAAU7QUZZ6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSNBWHEYTQNBVGY>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Not sure what you mean by "normal BLE gateway". If you mean HCI then we already discussed that, it is part of ZephyrOS and works. However due to poor Linux support as you said many times it is not very useful to get long range/coded phy working in Linux.
This was already discussed too. There are several open source production ready certified BLE stacks for nRF5x chips. Hardly any other chip has such wide open source support. There is ZephyrOS which is also current supported official SDK from Nordic (called nRF Connect SDK), there is also Apache NimBLE and there is at least one commercial one with full sources on GitHub which I think needs license for commercial use (forgot its name, maybe it was this one https://github.com/packetcraft-inc/stacks ?). SoftDevices are legacy and you are definitely not forced (or even recommended) to use them if you don't appreciate the advantages (stability, simplicity, clear separation from your code). |
Again, one nRF advertisement, but in reality there are no devices for users or DIY on nRF.
I want to enable 'PAWR' on all thermometers, but users have no adapters capable of working with PAwR. |
Well I was just disproving your untruths. Would be nice if you could stop so there is no need to correct you over and over again (it is also off topic here). Sadly you just did it again. There are of course tons of nrf5x based devices directly targeted for DYI both made by companies and also individuals and there is also a lot of hackable cheap nrf52 based stuff on aliexpress (smartwatches, fitness trackers, NFC+BLE keychains). For companies just check sparkfun or adafruit for their own nrf5x boards, adafruit even maintains Arduino and also Circuitpython for nrf52 just check list here https://github.com/adafruit/circuitpython/tree/main/ports/nrf/boards , also Microbit is NRF, the version 2 is 52833 and widely available (version 1 was bad IMO but 2 is nice). The Espruino stuff is mostly nrf52, previously I linked nrf52 boards for doing custom BLE/USB HID keyboards https://github.com/joric/nrfmicro/wiki/Alternatives For some reason they like 52840 based boards for this, not sure why, but they are probably quite popular as they got cloned and sold on aliexpress in quantities (google "ZMK firmware"). The Pinetime watch is nrf52832 - they are using Apache NimBLE there in their firmware. In fact it is one of many cheap hackable OTA updatable DaFit nrf5x based smartwatches which come in many shapes and sizes. One example is the 12 EUR "C17" nrf52840 one a.k.a. Magic 3 you can find on aliexpress now but there are many others. So you must be living in some parallel universe to say that thing I quoted. Or you just like to troll.
Oh, that is actually interesting stuff I did not know yet. Some time ago I tried to sync precise time via advertising but got bitten by that random delay and also wanted to send different scan response based on who is asking (so having bidirectional communication via advertising+scan response), it is nice someone was thinking in same direction and fixing both issues :-) GATT and connections are too heavy for a lot of stuff. |
Where is the firmware for this thermometer to work in BTHome? You are describing some toys that are not needed in IoT. Low cost BLE Advertisements Repeater into Ethernet TCP/IP @fanoush - How long will you advertise nRF or will you do something? :) :)
Or do you need to block access to the repository "from this universe"? :) |
I wanted to move from my esp32 to bluetooth on my RPi and found this thread from the docs. Or is this only for people who use their wifi, because yes, then bluetooth does not work properly anymore. But with wifi disabled, should the internal one not be sufficient? |
предлагаемые что nrf, что wch и esp - новые сущности, для которых нужны будут и драйвера и софт. получается эдакий черный ящик по типу zigbee - мало кто знает как оно вообще работает внутри, просто даем нужные (AT) команды и получаем результат. При этом пока что эта штука будет diy - потребуется некоторые умения, чтобы просто собрать ее и прошить. |
Сокращать или оптимизировать код - это не в духе современных программистов. Драйвер в Linux kernel не умеет работать с чипами в BT5.0+. И решений не предвидится. Ситуация в Linux с WiFi, Zigbee, SSD/NVME, CPU, ... аналогична. Никакой поддержки стандартов вышедших десятилетие назад. Только частичная - выборочная и кривая. |
я то думал что низкоуровневый драйвер только транслирует HCI команды через socket. и что для задач HA достаточно послать что то типа cmd 08 31 03 05 05 |
В kernel проблемы с инициализацией USB-BT адаптеров. Куча затычек, отключающих его писателями "непонятные функции" , на которые не смогли разобрать ответ адаптера. Это в основном и есть функционал BT5.0+. https://www.bluez.org/profiles/
BLE cоединение в CODED PHY не работает. Так-же не работают все новые варианты ble advertising из новых версий стандартов. |
так о том мысль и была. вопрос в том насколько глубоко его отпилить и где все эти затычки и индивидуальные патчи. |
В Andrioid всё нормально. API предоставляет сканирование и подключение устройств во всех вариантах (включая CODED PHY).
Все функции находятся в firmware адаптера. И если адаптер имеет спецификацию BT5.+, то соблюдает её. |
спасибо, теперь увидел и суслика и подводную часть айсберга (в исходниках kernel). В кишочках android я наверное уже не буду копаться - перетаскивать низкий уровень из ядра в ядро слишком кучеряво будет. |
К примеру, если в НА запускается интеграция “https://github.com/custom-components/ble_monitor”, то она через “Bleak” включает адаптер на работу только с PHY 1M. Если переключить PHY после старта интеграции, то если в интеграции возникнут какие ошибки или недочеты, то она опять переключит адаптер на работу только с PHY 1M. Это проблема находится в “Bleak”. А “Bleak” там используется только для переинициализации адаптера при старте и ошибках. Остальное на "Bluez". В “Bluez” у функций нет параметров задания первичного и вторичного PHY, что требуется для поддержки BT5.0+. Есть только спец функция глобальной установки типов PHY, которую (пока) никто не использует. Т.е. необходимо переписывать все BLE функции в "Bluez", на что никто никогда не пойдет. |
секунду. Bleak я вижу только один раз в custom_components/ble_monitor/ble_parser/get_beacon_key.py и это отдельный вызываемый скрипт. в других местах используется https://github.com/ukBaz/python-btsocket (BlueZ Bluetooth Management API)внутри которой пути ведут в сокеты libc_socket(PF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI). это тоже типа часть bluez https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/mgmt-api.txt где я так понял и есть упоминаемая функция установки режимов PHY включая 13 LE Coded |
У большинства HA работает в контейнере. Да и много где писалось, не только мной. Но воз и ныне там...
Вместо копания в Linux и Windows проще сделать свой адаптер. Благо большинство чипов на рынке полностью поддерживают BT5.0+, а реализации BT5.4 – это чисто программные дополнения. В SDK большинства чипов уже давно примеры BT5.3. Даже ESP32-C3 поддерживает всё необходимое. |
ну вот и тут засада.... я как раз наоборот - накачал ядер в том числе андройда, посмотреть, что и как менялось в net/bluetooth и насколько я вижу - в ядре 6.6 уже есть всякие adv_sec_phy и BT5.3 так что надежда есть |
Эта надежда теплится уже десяток лет :) Последние пару лет хотя-бы работает сканирование в LE LR с командой адаптеру, а если начнут исправлять - большая вероятность что вообще ничего работать не будет. Проблемы находятся в использованных алгоритмах и подходах. Мелкими патчами и дополнениями это не исправить. И у “модных” мини-компьютерных плат типа “ Raspberry Pi” есть аппаратные приколы. Соединение с чипом BLE на UART c 115200 Baud :) В этот низкоскоростной интерфейс связи входят и заголовки HCI интерфейса, плюс нет контрольной суммы и у всех пользователей периодически проскакивают ошибки. Linux не является real-time системой и еле-еле обрабатывает UART в 115200, и то, только за счет FIFO в UART. Да и Линус Торвальдс закрыл доступ разработчикам из России. Я вот думаю тоже удалить все свои репозитории с BLE с github.com и переехать на что-то типа GitVerse... Тем более что более-менее чипы BLE ныне все китайские и у китайцев всё более лучше в перспективе с BLE, как и в области API для новых стандартов, так и в SDK к чипам… |
примечательно что kernel в android практически тот же самый, включая работу с несколькими видами hci, верхушка только совсем другая. и как то работает. |
Interesting conversation, although i need to translate everytime. |
pvvx
Интересная мысль, которую я сначала не заметил, из-за правки. Похоже что волны вокруг Линуса вскрыли причины, по которым русских людей или продукты так или иначе выпиливают из публичных проектов. А я так понимаю через полтора месяца будет интересно. AleXSR700
Is there any issue to keep read interesting conversation on some random git hosting? Is Gitverse any different to Gitlab, Codeberg etc? But the real issue is what after this Linux kernel drop some maintainers because unknown reason can lead to sudden removal of pvvx's repositories from Github - why not? While Linux Fondation have unclear relations to sanctons and complience, Microsoft owned Github clearly have them. |
The problem is the lack of usage of gitverse and the higher likeliness that the language will shift from the international language English to Russian. |
можно вообще исключить bluez используя отдельный [bt стэк]https://github.com/bluekitchen/btstack/tree/master/port/libusb(url) который умеет обращаться к usb адаптерам включая RTL8761 через libusb, умеет extended advertising and scanning и знает про LE Coded |
|
Предварительное описание решения.
Для примера можно взять:
Low-cost Realtek RTL8761 BT adapter
USB ID 0bda:8771 Realtek Semiconductor Corp. Bluetooth Radio
Сurrent version of Linux fw on RTL8761 supports BT5.1:
Для работы HA c LE Long Range в интеграции “Bluetooth” желательно установить последнюю версию bluez и добавить в файле /lib/systemd/system/bluetooth.service
ExecStart=/usr/local/libexec/bluetooth/bluetoothd --experimental
Из-за неверной инициализации адаптеров BT5.+ в Bluez, перед запуском Home Assistant необходимо переключить BT адаптер на работу в режим Bluetoch 5.0:
hcitool -i hci1 cmd 08 31 03 05 05
или во всех режимах PHY 1M/2M/Coded:
hcitool -i hci1 cmd 08 31 03 07 07
Номер hciN - свой.
Проверить переключение возможно в btmon (log btmon):
В итоге, в интеграции "BTHome" получаем успешный прием термометров со стандартной рекламой и работающих в LE Long Range:
Если адаптер будет работать неустойчиво, тогда HA может его переинициализировать и настройка на работу в Coded PHY (Long Range) собьется. Ожидать официальной поддержки в интеграции “Bluetooth” нет никакой возможности. Выбранный автором API “Bleak” не позволяет управлять PHY адаптера и не предвидится никакой поддержки BLUETOOTH SPECIFICATION Version 5.0 от 2016 года.
Проверить адаптер на совместимость возможно с помощью команд:
Установка вариантов PHY в btmgmt работает не совсем корректно (в некоторых вариантах имеются ошибки). Но и с помощью этой программы возможно установить необходимые PHY.
Для этого необходимо:
Для установки PHY через API в bluez смотреть /doc/mgmt-api.txt.
Или через hci_send_cmd(). Пример для Python (неполный и не совсем корректный):
The text was updated successfully, but these errors were encountered: