Делать копи паст своих коментов с git?
Почти каждый дешевый прошлогодний смартфон имеет следующие опции:
Но это не значит, что он будет принимать стандартную рекламу в разных форматах PHY. Чтобы подключиться, вы должны принять стандартную рекламу на физическом уровне 1M. Только после установления соединения на 1M PHY можно переключить формат PHY.
«Расширенная реклама» — это передача заголовка на 1M PHY, который указывает, по какому каналу и в каком формате будут передаваться сами данные. Те. без получения на 1M PHY вы не будете знать, где и как получить сообщение LongRange.
Прием стандартной рекламы на основных каналах в формате longRange не реализован на большинстве устройств.
И видимо это сделано специально, чтобы не вытеснять ZigBee с рынка или в каких-то других корпоративных целях...
Даже для получения "Расширенной рекламы" с LongRange в программе "nRF Connect" нужно переключать опции в настройки.
Работа в BLE Long Range программно ограничена на всех пользовательских устройствах, включая адаптеры BT-USB. И дело не в аппаратной реализации,
Включение параметров BLE5.2 в пользовательской прошивке позволяет вам поддерживать «соединение» для всех параметров кодирования PHY, которые запрашивает ваш адаптер. Но передача рекламы на другие, кроме 1M PHY, в текущей общей версии не реализована из-за отсутствия поддержки с принимающей стороны.
----
Эксперименты с включением LongRange для «Расширенной рекламы» на основных каналах показали, что ни один из доступных адаптеров в приложении для «HA» не принимает эту опцию. Также проверил десятки смартфонов в nRFConnect выпущенных в том же году - ситуация аналогичная.
Передача «Расширенной рекламы» с заголовком на 1M PHY и данные на S8 успешно принимаются большинством (адаптеры BT5.0+).
Кроме того, вариант рекламы «закодированный PHY» не может быть использован сразу для подключения и сканирования.
И второе:
доступные версии SDK от Telink не поддерживают множественную «расширенную рекламу» .
Это стандартный интерфейс BLE Spec, используемый для включения/отключения расширенной рекламы, см. <Core_5.0> (том 2/часть E/7.8.56 «LE Set Extended Advertising Enable Command») и поймите его в контексте определений типов перечисления SDK и демонстрационного использования. Однако в настоящее время SDK поддерживает только 1 набор рекламных объявлений, поэтому этот API пока не поддерживается и в будущем будет зарезервирован только для множественных наборов рекламных объявлений. Тем не менее, Telink SDK написал упрощенный API, основанный на этой функции API, для включения/выключения 1 расширенных наборов для более эффективного выполнения. Упрощенный API показан ниже с теми же входными параметрами и возвращаемыми значениями, что и стандартный API, но используется только для установки 1 Adv
Set.
С помощью реверса библиотеки я получил возможность встроить "Расширенную рекламу" в вариант "кастомная прошивка". Но такая версия не может поддерживать все текущие опции и требует отдельной реализации.
Также реализация «Расширенной рекламы» в закрытых библиотеках SDK приводит к нестабильной работе устройства в целом. Требуется нормальная реализация библиотек или их открытый исходный код.
--
В результате единственным доступным для пользователей вариантом увеличения дальности приема и передачи остается вариант использования не BLE, а протокола ESB.
ESB (Enhanced ShockBurst) - в простонародье это "RF24". С настройками по протоколу BLE...
--
Аппаратной части чипов все равно, какую синхронизацию принимать, так как модуляция одинакова для разных PHY. Заголовок кадра передачи содержит всю необходимую информацию, а дальше дело программы.
А сообщение в Coded PHY просто отбрасывается, так как не соответствует программному детектору правильного кадра. Воспринимается как шум.
--
В Linux патч не нужен. Вам нужно переключить адаптер на закодированный PHY, и он будет принимать рекламу на LongRange. А вот другие, стандартные BLE, приниматься не будут.
Патчами внутреннего ПО адаптеров никто не занимается. Проще сделать свой BLE приемник рекламных сообщений или использовать полноценный сниффер.
--
И есть вторая проблема с ext_adv:
ext_adv не может быть «подключаемым» и «сканируемым» одновременно. Требуется переключение типа или наличие двух вариантов ext_adv одновременно, что не реализовано в SDK. (Переключение можно производить через холодную бут с разными вариантами инициализации драйверов. Но это дополнительный расход батареи.)
--
И еще одна проблема. Xiaomi LYWSD03MMC не имеет кнопок. На сегодняшний день у меня уже есть рабочая реализация с ext_adv для термометров, в том числе LongRange. Но не для LYWSD03MMC.
Кнопка временно переключает термометр на рекламный вариант подключения.
Также - BLE-реализация HomeAssistant не предусматривает временной рекламы или рекламы только смены данных с датчиков. По истечении встроенного периода, если нет ответов от датчика, то показания переводятся в состояние «Недоступно». Это делает невозможным экономию батареи на датчиках или увеличение периода передачи сообщений BLE.
PS: В итоге все сделано так, чтобы исключить работоспособность LongRange в BLE.
В итоге основная борьба происходит со сторонним софтом, а не с программой для термометров.
Когда сторонние программы решили эти вопросы, то имеет смысл включить поддержку LongRange в термометрах для общей группы пользователей.
И на сегодняшний день для продвинутых в вопросах BLE возможен только DIY вариант. Через какое-то время (дни) он будет в исходном репозитории, но полноценной поддержки ждать не стоит.