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

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

pvvx

Активный участник сообщества
Большая путаница с этими Flags существует только в Linux.
Bluez, в режиме пассивного сканирования, не принимает рекламу от BLE без структуры флагов и некоторые варианты с битами "Discoverable Mode".
А при активном сканировании принимает всё без разбора, хотя не должен, если он руководствуется флагами.
Очередной маразм.
 

sL0n1k

Member
Большая путаница с этими Flags существует только в Linux.
Bluez, в режиме пассивного сканирования, не принимает рекламу от BLE без структуры флагов и некоторые варианты с битами "Discoverable Mode".
А при активном сканировании принимает всё без разбора, хотя не должен, если он руководствуется флагами.
Очередной маразм.
Можете собрать прошивку LE only?
Я протестирую
 

pvvx

Активный участник сообщества
Или можно как то законфигурить это?
В "HA" никак. Там очередная круговая порука...
Нет четкого определения установок по умолчанию и распределению. И в основном в головах писателей, а не в софте и возможностях. Такое сдвинуть сложно - это требует не исправление, а обучение...
 

pvvx

Активный участник сообщества
Всё это ещё завязано на "безопасности" и даже Google и прочие API ещё не пробили.
Слишком много вариантов с разными flag, "спариванием", версиями BLE...
А Bluez тупо сканирует - при активном режиме всем кому не попадя шлет запросы на сканирование и выжирает батарейки...
А при пассивном режиме - выбирает что-то, что понравилось его писателям.
 

pvvx

Активный участник сообщества
Passive BLE Monitor integration при пассивном режиме принимает всё, не разбирая флагов и прочего, но стартует адаптер в режиме BT4.2.
"Bluetooth" интеграция в "HA" - оно через прослойку Bleak, и там полный бардак с этими делами... В пассивном режиме - это прикрыто названием "experimental" :)
 

sL0n1k

Member
Мне не нужен HA, мне нужно чтобы в рекламе Device type был "LE only", а не "CLASSIC and LE", тем более, что никакого классик там нет. С помощью Вашего браузерного JS-конфигуратора можно это задать? Если да, то как? Если нет, то можете собрать правильную прошивку хотя бы для теста?
 

sL0n1k

Member
Это означает, что передача Flags отключена в меню конфигурации термометра и каждая программа воспринимает как ей нравится.
Путаницы это не создает. Если программа соединяется в режиме с переключением адаптера в LE Classic то соединения не будет, а если в режиме BLE - будет.
Так я и подозреваю, что древний андроид пытается начать соединение классик, обламывается и все. А пытается, потому что видит в рекламе CLASSIC. Не хочется глубоко копать, потому как смысл небольшой, но чисто из академического интереса прояснить это хочется.
 

pvvx

Активный участник сообщества
Мне не нужен HA, мне нужно чтобы в рекламе Device type был "LE only", а не "CLASSIC and LE", тем более, что никакого классик там нет. С помощью Вашего браузерного JS-конфигуратора можно это задать? Если да, то как? Если нет, то можете собрать правильную прошивку хотя бы для теста?
Это устанавливается в TelinkMiFlasher и установлено по умолчанию. Передаются флаги "BR/EDR not supported" и "LE General Discoverable Mode".
 

pvvx

Активный участник сообщества
И ещё раз:
Фрейм передачи рекламы идентичен с официальными прошивками на термометрах.
Различие только в интервалах. И они соответствуют диапазонам спецификации для BLE от Bluetooth SIG.
> Хотя нет, подождите, а откуда он берет это? В рекламе нет такого
Это отсебятина у nRFConnect. Значение по умолчанию, если не переданы флаги. Это если отключить передачу Flags в TelinkMiFlasher.
 

sL0n1k

Member
И ещё раз:

> Хотя нет, подождите, а откуда он берет это? В рекламе нет такого
Это отсебятина у nRFConnect. Значение по умолчанию, если не переданы флаги. Это если отключить передачу Flags в TelinkMiFlasher.
Если вы про "AdFlags:", то я его и включал и выключал - ничего не меняется в рекламе.
Ну, тут другой вопрос: что-то я забыл, а где в рекламе поле про CLASSIC and LE, или LE only?

Точнее, как Вам удалось такое включить?)
 

sL0n1k

Member
да, получается, что это нордик сам как-то решает, что девайс CLASSIC and LE, т.к. бит про классик всегда сброшен, а может кстати это и не нордик решает, а SDK андроида
 

sL0n1k

Member
Все прояснилось.
Это кэш bluetooth, после его очистки и включения отправки флагов, все стало как положено - LE only.
Конечно, мое мнение - надо ВСЕГДА предавать поле флагов.

И сразу заработали древние андроиды )) - все читается.
 

Вложения

sL0n1k

Member
Так, проблема не в старых андроидах, а том что у Вас есть серьезное нарушение спецификации, которое приводит к ненужному головняку. Это поле надо передавать ВСЕГДА если у используется LE и предполагается коннектиться к устройству.
У Вас это поле (AdFlags) не только вынесено в настройки, но и еще по умолчанию выключено (не передается).
Это вы так тренируете молодежь?)

Ну, в принципе, был повод еще раз заглянуть в спецификацию.

Supplement to the Bluetooth Core Specification | CSS v10, Part A page 13
Data Types Specification

1.3 FLAGS 1.3.1 Description
The Flags data type contains one bit Boolean flags. The Flags data type shall be included when any of the Flag bits are non-zero and the advertising packet is connectable, otherwise the Flags data type may be omitted. All 0x00 octets after the last non-zero octet shall be omitted from the value transmitted.
 

pvvx

Активный участник сообщества
Опять дурных газет начитались?

>Это поле надо передавать ВСЕГДА если у используется LE и предполагается коннектиться к устройству.

А если не предполагается? Для соединения есть специальная программа, И чтобы у соседа в каждом меню BLE не торчали ваши термометры и есть опция отключения передачи Flags.

И у вас опять ошибки - в термометрах по deafault передача Flags включена.

sL0n1k - Сколько ещё можете выдумывать?
Смотрите спецификацию - чему равно "нулевое значение Flags".
 

pvvx

Активный участник сообщества
Вот вам картинка битов Flags из мурзилки, как вам привычнее: :)
1682317080143.png
Пробуйте по ней догадаться, чему будет равен Flags = 0x00 если не читали спецификации :p
 

pvvx

Активный участник сообщества
@sL0n1k -когда изучите эти битики, рекомендую ознакомится с другими, в которых указывается connectable и прочее. А так-же с форматами классического Bluetooth.
 
Сверху Снизу