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

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

sL0n1k

Member
Модуляция не понижается, может только повыситься в два раза, до 2 Мбит, все остальное,мы общем-то просто повтор передачи либо в 2 раза s2, либо в 8 - s8, код там по-моему Хэмминга, а может Соломона))
 

pvvx

Активный участник сообщества
Можно и более технически: чип драйвера LCD кушает вокруг и около 5 мкА (см. кучу версий чипов в XiaomiLYWSD03MMC). Всё вместе имеет среднее потребление к 14 мкА и при сне 6..9 мкА (опять см. HW версии).
Считайте проценты при выкусывании чипа LCD. Если чип LCD загнать в полный sleep (хотя не все эти чипы умеют такое), то там выгода в до пары мкА.
А потом подсчитайте сколько будет если увеличить период рекламы на 10% и получите что это дело выгоднее.
 

pvvx

Активный участник сообщества
Модуляция не понижается, может только повыситься в два раза, до 2 Мбит, все остальное,мы общем-то просто повтор передачи либо в 2 раза s2, либо в 8 - s8, код там по-моему Хэмминга, а может Соломона))
Это вы чипам BLE расскажите. Они вас не понимают и работают на значительно большую дистанцию при Coded PHY.
Ну, как бы ничего))
Я не использую вторичные каналы никак ни на Андроиде ни внизу только первичные s2 8
А такой рекламы не бывает. Все первичные ограничены 31 байтом и должны быть в 1M PHY для BT4.2, а в BT5.0+ там возможен только заголовок без ваших данных и только о указании на вторичный канал, где и будут данные хоть 1 Мегабайт.
 

pvvx

Активный участник сообщества
Как сильно жрет запись во флеш? У Вас
Где-то на git уже раз 5-ть считал и писал... Точно не помню, но любой знакомый с электроникой может подсчитать сам.
За пол года, при всех установках по умолчанию запишется примерно до 200 килобайт Flash. Какие-то сотые или тысячные от заряда в CR2032.
Когда производите OTA обновление - это уже сильно больше в % батарейки, т.к. ещё работает RF TX и RX.
Выламывание LCD контроллера даст во много раз больше :p
 

sL0n1k

Member
Это вы чипам BLE расскажите. Они вас не понимают и работают на значительно большую дистанцию при Coded PHY.
А такой рекламы не бывает. Все первичные ограничены 31 байтом и должны быть в 1M PHY для BT4.2, а в BT5.0+ там возможен только заголовок без ваших данных и только о указании на вторичный канал, где и будут данные хоть 1 Мегабайт.
Это в соответствии со спецификацией)
 

pvvx

Активный участник сообщества
ТТХ у XiaomiLYWSD03MMC с выдранным контроллером LCD и датчиком SHT4x:
Среднее потребление в режиме sleep - до 2 мкА.
Общее среднее потребление при интервале рекламы 5 сек - 6..7 мкА
Ограничение работы происходит когда батарейка не сможет отдавать более 1.8В при токе 8 мА. Если припаять на положенное на плате место зажиленную Xiaomi емкость по питанию, то это увеличит ещё жизнь батареи на от 20%.
Надеюсь, что вы сможете подсчитать врем жизни батареи.
 

sL0n1k

Member
Если такой рекламы не бывает
Bluez при активном сканировании постоянно переписывает файлы с найденными устройствами и если у вас много BLE датчиков, то этот поток непрерывен и все SD в RPi умрут :)
А опция пассивного сканирования пока "экспериментальная", и встроена в HA bluetooth то после долгих указаний на это безобразие.
Но с эти связаны ещё некотjрые фичи. Проявятся опсоля...
Ка-же долго, уже с 2016 года, Linux не может поддерживать BLE... :cry:
Интересно - уже избавились от детсадовского кода в ядре по поводу блокировки BT адаптера на время сканирования?
И так и продолжают при соединении ожидать минимум 2 рекламных события (пару adv интервалов)?
С первого получения-обнаружения рекламы от нужного устройства адаптер BT соединяется влет. Но не в linux.
Малина моя домашняя работает в таком режиме уже лет шесть, карту не менял
 

sL0n1k

Member
Про линух Вы зря так, Торвальдс заслуживает памятника, как минимум в каждой стране)
 

sL0n1k

Member
Где была бы цивилизация сейчас, не будь Торвальдса? Я очень хорошо помню как я покупал как все начиналось у него)
 

sL0n1k

Member
Бедные обманутые пользователи Home Assistant.

Чтобы адаптер был помечен как High Performance, должны быть выполнены следующие требования:

  • Установить соединение примерно за 1 с или меньше
  • Обрабатывать не менее одной рекламы в секунду с устройства без потери данных
  • 95% попыток подключения успешны в течение двух попыток
  • Соответствует вышеуказанным требованиям с Home Assistant Core 2022.11.1 или более поздней версии и операционной системой Home Assistant 9.3 или более поздней версии.
  • Должен быть в состоянии удерживать пять (5) соединений одновременно

Время соединения зависит от интервала рекламы. Смотреть, что там делает Bluez. А так-же смотреть какое соединение у вас выйдет если интервал рекламы установлен на максимум стандарта BLE в 10 секунд и отработает ли ваш адаптер это когда либо. Пользователи Apple плачут...

Количество принятых реклам на нормальном адаптере может достигать более сотни в секунду. И определяется тупым кодом его прошивки и шиной соединения.
Минимально нормальная скорость USB2.0 – это HiSpeed. Никаких FS, как это имеют большинство описанных на странице адаптеров.
Из них только CSR A10 имеет USB2.0 HS. Но он всего BT4.2. И на нем успевают пролезать по шине заголовки HCI составляющие большую часть трафика.
Ограничение скорости PHY у BLE с HCI интерфейсами учитывать нет смысла – там данные зажаты заголовками и прочим превосходящим мусором.
И если у вас рой BLE, то коллизии обеспечены - следовательно потери приема будут обязательно.

PS: в данной статейке только недавно убрали пометку "LongRange" у адаптеров с внешней антенной :)
Про коллизии, я изначально тоже так думал, а потом передумал))
 

sL0n1k

Member
4 апреля 2022 г., 16:30
Это эхоВыпуск 148487283, и влияет на все телефоны Android.

Это происходит потому, что BluetoothLeScanner.startScan https://developer.android.com/reference/android/bluetooth/le/BluetoothLeScanner#startScan(java.util.List%3Candroid.bluetooth.le.ScanFilter%3E,%20android.bluetooth.le .ScanSettings,%20android.app.PendingIntent) никак не использовал getPhy() и весь стек вызовов сводится к вызову https://cs.android.com/android/platform/superproject/+/master:packages/modules /Bluetooth/system/stack/btm/btm_ble_gap.cc;l=1937;drc=c7b713eba636b891d4c9710555cf0b6cac65ec6c , которые вызывают btsnd_hcic_ble_set_extended_scan_params https://cs.android.com/android/platform/superproject/+/master:packages/system /стек/btm/btm_ble_gap.cc;l=1937;drc=c7b713eba636b891d4c9710555cf0b6cac65ec6c с жестко запрограммированным 1 Мб физ.
Поэтому невозможно сканировать в режиме Coded Phy.
Да, так и есть, в моем инструменте разработки я сам это правил, это qt. Могу сообщить, что даже последняя версия Qt, не позволит вам видить long range advert. Но для России Qt все равно уже не доступен. Но это не важно. Поодержка ble браузерами разная. Сафари это не поддерживал вообще, хром и Эдж - рудиментарно только, но месяц назад, мне сообщили, что Гугл приложил просто невероятные усилия, чтобы в ближайшее время все это работало, как из пулемета, ждать осталось недолго ))
 

sL0n1k

Member
Ничего? :)
Понижение модуляции дает прибавку в дальности и в совокупности с доп. кодированием это дает теоретическое увеличение дальности связи в не менее 4 раза. Практика и все сторонние тесты устойчиво показывает что дальность свзяи увеличивается от 2-х раз. Читайте спецификации, тесты и сами проверьте.

И вот пример на английском, раз вы не понимаете по русски, что такое и как включить LongRange :
Я тестирую на двух телефонах: Pixel 4 с Android 10 и Sony Xperia L3.
Оба утверждают, что поддерживают Bluetooth LE PHY Coded (BluetoothAdapter#isCodedPhySupported).

Я использую nRF Connect для Android для тестирования. Приложение может сканировать пакеты только в том случае, если основной PHY имеет значение PHY LE 1M. Если и первичный, и вторичный PHY настроены на «Закодировано», эти телефоны ничего не найдут. Однако OnePlus 6 возвращает результат примерно через 10 секунд, что указывает на проблему с контроллером.
Протестировано с S=8. Я вижу пакеты с помощью Ellisys Bluetooth Analyzer. Когда основная реклама отправляется по PHY-коду, эти 2 телефона не возвращают ни одного устройства.
Это также можно проверить с двумя телефонами и nRF Connect, установленным на обоих. Используйте один для рекламы и один для сканирования. Если реклама настроена на использование закодированного физического уровня как для первичного, так и для вторичного физического уровня, пакеты будут видны на анализаторе Ellisys, но не на телефоне.
Кроме того, когда BluetoothLeScanner использует ScanSettings.Builder#setPhy(BluetoothDevice.PHY_LE_CODED), сканер также возвращает только 1M пакетов, и не выдается никаких ошибок, что закодированный phy не будет поддерживаться. В этом случае ожидаемым результатом будет как минимум отсутствие сообщений об устройствах.
Тут ничего не могу сказать, но setphy это правильный путь только не с таким параметром, сейчас не помню точно, если надо посмотрю
 

sL0n1k

Member
Тестовая прошивка с поддержкой 'Extended Advertising' и 'LongRange' для LYWSD03MMC.
Файл https://github.com/pvvx/ATC_MiThermometer/blob/master/LR_v99.bin
.
После сброса питания прошивка работает в стандартном протоколе '1M PHY'.
Сброс и замена питания отключает 'Расширенную рекламу' и 'LongRange'.
Для включения режима «Расширенная реклама» в TelinkMiFlasher установите:
изображение

'EXT.ADV' без 'LongRange' включает передачу рекламы в формате LEGACY_CONNECTABLE_SCANNABLE_UNDIRECTED.
изображение

'LongRange' - включает передачу основной и расширенной рекламы в формате 'Coded PHY' c S8 и версию EXTENDED_CONNECTABLE_UNDIRECTED.
изображение

Далее следует, что приемная сторона поддерживает 'Расширенную рекламу' в режиме 'LongRange', а если нет – вытащите и вставьте батарейку.
Что-то я не совсем понимаю. Вы мне прислали это скрин где Ваш девайс переключен в long range и Вы это видите своим телефоном, так? Если так, то Вы не верите своим глазам или что? )) Проясните плиз
 

sL0n1k

Member
Мне изначально не нравился параметр Connect latency, потому как я не мог припомнить именно такого названия ни в одном SDK от разных производителей ни в самой спецификации.

Начал смотреть параметр - вижу подсказку 0..4000 deafult=2500.
Открываю спецификацию Core_v5.2.pdf (последнюю не качал)

page 2980 4.5.1
Connection events

The timing of connection events is determined by two parameters: connection interval (connInterval), and slave latency (connSlaveLatency).

page 2981 The connInterval shall be a multiple of 1.25 ms in the range 7.5 ms to 4.0 s.

connSlaveLatency shall be an integer in the range 0 to ((connSupervisionTimeout / (connInterval*2)) - 1). The connSlaveLatency parameter shall also be less than 500.

У Вас тут похоже возникла какая-то путаница, кроме того мне Qt говорил, что устройство работает не в соответствии со спецификацией. Теперь стало понятно почему (оно отваливало connSupervisionTimeout). В общем это лечится установкой Вашего параметра Connect latency, который на самом деле Slave latency в значение меньше 500. Я например поставил 260, хотя в своих девайсах у меня 10 и это параметр настраивать не надо. Да, китайцы его вынесли в настройки, но это моветон.
Исправите?
 

sL0n1k

Member
Кроме того большие значения - не хорошо, даже 200 плохо.
Он будет влиять когда у Вас слэйв по какой-то причине (при установленном коннекте) будет чем-то пригружен (считать бабочку БПФ, например) и будет пропускать connection event-ы, да будет влиять на потребление при очень длительных сеансах связи, но большое значение будет некомфортно для пользователя (наблюдателя). Но это мои мысли, я не категоричен )
 

sL0n1k

Member
Да, поповоду UUID=181с со скрина, если это с Вашего девайса, то я бы его и не увидел, если в long range этот uuid передается
и никто его не увидит, так как ожидает-то 181a и это не из-за Long Range ))
 

sL0n1k

Member
BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 6, Part A page 2829
Про модуляцию:

Two modulation schemes are defined. The mandatory modulation scheme (“1 Msym/s modulation”) uses a shaped, binary FM to minimize transceiver complexity. The symbol rate is 1 Msym/s. An optional modulation scheme (“2 Msym/s modulation”) is similar but uses a symbol rate of 2 Msym/s.

The 1 Msym/s modulation supports two PHYs:
• LE 1M, with uncoded data at 1 Mb/s;
• LE Coded, with the Access Address, Coding Indicator, and TERM1 coded at 125 kb/s and the payload coded at either 125 kb/s or 500 kb/s.


A device shall support the LE 1M PHY. Support for the LE Coded PHY is optional


The 2 Msym/s modulation supports a single PHY:
• LE 2M, with uncoded data at 2 Mb/s
 
Сверху Снизу