Closed crimean-celica closed 3 years ago
У проблем с сопряжением есть две стороны:
Второй пункт для каждого хоста достаточно выполнить 1 раз (я так и не понял как сбросить информацию о "разрешенных" хостах на бризере).
При этом если бризер находится в режиме сопряжения, он корректно ответит на одну любую команду (ожидает, конечно, получить команду сопряжения, но если придет запрос состояния -- пришлет ответ) => если в режиме сопряжения с бризером ничего не получается сделать через библиотеку, то разбираться надо с bluetooth-стеком в системе.
По факту у меня 2 ZeroW как-то подключились и стабильно работают, каждая со своим бризером (нет удобного места для того, чтобы 1 малина уверенно видела оба бризера), одна на 1.1.2a2, вторая на 1.1.2. Как делалось сопряжение на старой - уже не скажу, на новой - описал выше. А вот 2 RPi4 не могу подключить. Я не трогал ничего где-то с декабря прошлого года - тогда RPi4 получалось "запинать" (было обсуждение здесь, которое привело к некоторым модификациям данной библиотеки) и поднять стабильно работающий api server. Собственно, это и послужило причиной появления второй ZeroW. Которая, в итоге, решила мою проблему управления после неудачных попыток оживить коннект с 4й модели. Так что зависимость от стека хоста определенно есть - у меня налицо разное поведение RPi 4 vs RPi Zero при том что обе ставились с нуля, "начисто", актуальными версиями. Если есть время/желание повозиться с поиском причин - я готов тратить время - у меня "образовалась" выделенная "песочница" в виде "лишней" RPi4, с которой можно делать что угодно без существенных ограничений по времени и без вреда для существующей инфраструктуры. Могу начать с установки "чистой" системы + проведение тестового сопряжения.
Чистой установка не получится: бризер уже помнит что с этой малиной было сопряжение. Поэтому возможно всякое.
У меня под рукой тоже образовалась одна RPi4 не очень часто занята чем-то полезным. Будет время на ней посмотрю что происходит, может там действительно что-то не очевидное в части bluetooth.
Я почти уверен что в части библиотеки работает все корректно (просто потому что библиотека на уровень BT лезет в двух местах: сопряжение и работа с уведомлениями. И то, и другое делается через bluepy, те от кода библиотеки не зависит). Так что исследование будет посвящено скорее правильной настройке BT/bluepy на Pi4.
ps. более того, у меня есть идея добавить поддержку bleak в качестве второго backend для работы с BT. Первые тесты я делал несколько лет назад и было все гораздо лучше чем через bluepy.
Чистой установка не получится: бризер уже помнит что с этой малиной было сопряжение.
насколько я помню, вот тут https://github.com/TionAPI/tion_python/issues/17 я использовал как раз RPi4, на ней совершенно спокойно выполнялось многократное сопряжение через tion_btle/remove из bluetoothctrl. и таких проблем, как сейчас - не возникало. к сожалению, у меня не осталось образа системы той версии для "контрольной проверки". а в текущих версиях (за год было прилично обновлений) стабильно работают только Zero, у которых чуть другой набор библиотек в силу чуть другой элементной базы
образовалась одна RPi4 на ней посмотрю что происходит
спасибо! да, так будет гораздо быстрее (и эффективнее)
Да, в Pi4 происходят неочевидные вещи с bluetooth.
На встроенном адаптере заставить это работать не получилось. Даже с внешним адаптером вставленным прямо в малину не работает. Пришлось уносить на удлинителе. Вот тут обсуждается похожая проблема https://github.com/TionAPI/HA-tion/issues/60
Похоже что эту проблему программными способами решить не получится.
На встроенном адаптере заставить это работать не получилось
да, но я начинал "это" запускать именно на RPi4 и все работало - если поднять мои первые инциденты - они были именно про RPi4 и там было вполне себе успешно-стабильное поведение. но после определенного времени (и обновлений!) я уже совсем не смог запинать "четверку" (пробовал с 2 разных устройств). при этом Zero все это время работает достаточно стабильно. итого, есть неплохая вероятность, что сломали что-то в обновлениях. этот вариант можно проверить, если получится "откатиться" с прошивками на пару лет назад. но времени-желания это делать у меня пока особого нет. спасибо за совет про "шнурок" - будет повод - проверю с ним. хотя я для себя закрыл вопрос управления покупкой пары Zero, которые у меня как device proxy работают и работают вполне стабильно, с чистым syslog.
Между "старыми" и "новыми" версиями есть одно существенное отличие в способе общения с бризером. Оно появилось в v0.2.2: до этого компонент читал характеристику, а в 0.2.2 начал подписываться на notification'ы, поскольку Lite (и 4S в будущем) используют многопакетные сообщения.
Версия модуля: 1.1.2a2 (пробовал 1.2.0, с ней - тот же результат) Модель бризера: 3S Версия прошивки (если известна): 003C
Описание проблемы
Это "первый" бризер (есть еще), на котором было (и еще будет) много "тренировок". "Исторически" он оставался на правах "тестового стенда" и без постоянного "внешнего управления".
Порядок действий, которые приводят к проявлению проблемы
При попытке выполнить сопряжение бризера с новой "малиной" (с новым телефоном - без проблем) обнаружил невозможность сопряжения. После отключения от старой RPi - невозможно сопрячь "обратно". Пробовал 4 разных устройства 2RPi 4B (2 и 8 Gb) и 2RPi Zero W с одинаковым результатом. В итоге решил перепроверить MAC устройства и не нашел ничего лучшего, чем просто сопрячь с ноутом. Сопряглось. Удивился. МАК - тот. После чего выполнил сопряжение с "нужной" "малиной" просто через bluetoothctrl: scan on / pair / scan off / trust (на всякий случай). Все отработало. Дальше api server работает и отдает данные без проблем.
Логи
Это логи от соединения RPi4, которая после соединения данные не получает. При этом Zero W после такого же соединения данные получает. Zero здесь поставленая "наново", RPi4 - на склоненой SD карты от другой "малины". Я убил на это все около 3 вечеров, не получая значимого результата. И только сегодня получилось соединить устройства с последующим успешным получением данных. Уже с этой позиции попробую как-то систематизировать происходящее. Потому как с одной стороны я получил желаемое - управление через api server. С другой - хочется найти причину проблем сопряжения, становится жалко потраченного времени. С третьей, если таких проблем больше ни у кого нет - можно времени больше не тратить, так как я свою проблему решил.