Closed andlommy closed 3 years ago
S4 модулем не поддерживается: там может быть совершенно другой механизм сопряжения. Если у вас есть возможность -- соберите, пожалуйста, дамп общения телефона и бризера во время следующих действий:
занимаюсь этим. пока не могу поднять hci_snoop на телефоне или планшете - не создается логфайл. Если есть идеи как его подшаманить - буду сильно признателен
Все дампы что мне собирали делались на iPhone дебагом bluetooth стека.
у меня 2 ведроида и в обоих дебаг блютус стека не делает нужные действия, но я поковыряюсь еще, уж больно хочется подружить свои бризеры с ХА
Попробуйте через bluetoothctl сделать обычный pairing -- это может сработать, как в случае с Lite. Это самый простой вариант -- вдруг сработает. Если это получится -- будем думать как добыть пакаеты. Внешне бризеры очень похожи, но я не думаю что программный стек не поменялся (тем более если сработает сопряжение через bluetoothctl).
Оно действительно похож на обычный Pairing, судя по расковыряным исходникам приложения, в 4с особой процедуры спаривания нет. Лог спаривания раздобыл snooplog.log
В каждом из логов каждое действие делалось по 3 раза Logs.zip
Открытие проги и получение информации об устройстве Включение турбо режима и переключение на 4 скорость Включение прогрева (на 25 градусов, на 24 и на 20) Включение и выключение заслонки
Спасибо. Может ближе к ночи будет что-нибудь что можно потестить.
Быстро не получится -- по структуре пакетов он ближе к Lite, а не к S3, так что придется немного повозиться. Данные из дампов вытащил -- буду смотреть и разбираться.
есть коды команд и примерная структура пакетов (из реверса apk приложения тиона) - если поможет, могу скинуть
Я туда уже тоже заглянул. Да и из пакетов много чего понятно. Основная проблема в "аккуратно сделать": Lite-класс чуть сложнее и был не так хорошо написан как S3.
@andlommy, попробуйте, пожалуйста, tests/s4.py
из ветки s4-dev
в двух вариантах:
s4.py dummy
s4.py MAC:вашего:Бризера
Первый -- просто для того чтобы убедиться что все работает. А результат второго будет интересно сравнить с действительностью.
Перед реальным запуском нужно будет сделать сопряжение устройств через bluetoothctl или примерно такой python скрипт
from tion_btle.s4 import S4
device = S4(MAC:вашего:Бризера)
device.pair()
спасибо, завтра попробую. Спрашивал доки по протоколу у Тиона - не дали :(
Они их обещают примерно с выпуска первого бризера :(
Не заработало на бризере
root@ubuntu:/home/ubuntu/Documents/tion_python-s4-dev/tests# python3 ./s4.py XX:XX:XX:XX:XX:XX DEBUG:tion_btle.tion:Connecting WARNING:tion_btle.tion:Got BTLEDisconnectError:Failed to connect to peripheral XX:XX:XX:XX:XX:XX, addr type: random DEBUG:tion_btle.tion:Will try again. DEBUG:tion_btle.tion:Connecting WARNING:tion_btle.tion:Got BTLEDisconnectError:Failed to connect to peripheral XX:XX:XX:XX:XX:XX, addr type: random Traceback (most recent call last): File "/usr/local/lib/python3.8/dist-packages/tion_btle/tion.py", line 305, in _connect self._btle.connect(self.mac, btle.ADDR_TYPE_RANDOM) File "/usr/local/lib/python3.8/dist-packages/bluepy/btle.py", line 445, in connect self._connect(addr, addrType, iface) File "/usr/local/lib/python3.8/dist-packages/bluepy/btle.py", line 439, in _connect raise BTLEDisconnectError("Failed to connect to peripheral %s, addr type: %s" % (addr, addrType), rsp) bluepy.btle.BTLEDisconnectError: Failed to connect to peripheral XX:XX:XX:XX:XX:XX, addr type: random
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./s4.py", line 18, in
в это же время bluetoothctl
[Breezer 4S]# connect XX:XX:XX:XX:XX:XX Attempting to connect to XX:XX:XX:XX:XX:XX Connection successful
Спасибо. Небольшое уточнение: во время теста к бризеру не было подключено никаких устройств (телефон, magic Air или что-нибудь еще)?
Отключил всех, попробовал еще раз, то же самое
Интересно... До enable_notifications он не доходит... Добавлю побольше дебага вечером. Может станет понятнее что именно ему не удается. Пока варианта два:
Понять поможет примерно вот такая конструкция (если нигде не опечатался):
from bluepy import btle
mac = 'MAC:address:here'
device = btle.Peripheral(None)
print ('connecting')
device.connect(mac, btle.ADDR_TYPE_RANDOM)
print ('connected')
print(device.getCharacteristics())
device.disconnect()
print('disconnected')
Если это работает, а модуль нет -- буду думать в другую сторону.
Да, бризер -- довольно капризная в плане BT штука: не любит частых подключений отключений и вообще активной работы с BT (по опыту Lite и S3). Еще если открыть bluetoothctl во втором окне, будет видно подключается ли хост к бризеру или нет.
О. оно очухалось
root@ubuntu:/home/ubuntu/Documents/tion_python-s4-dev/tests# python3 ./s4.py XX:XX:XX:XX:XX:XX
DEBUG:tion_btle.tion:Connecting
DEBUG:tion_btle.tion:Enabling notification
DEBUG:tion_btle.tion:Notify handler is 18
DEBUG:tion_btle.tion:Will write b'\x01\x00' to 19 handle
DEBUG:tion_btle.tion:Result is {'rsp': ['wr']}
DEBUG:tion_btle.tion:Delegation enabled
DEBUG:tion_btle.tion:First read done. Data is c00000000000060054e2
DEBUG:tion_btle.tion:enable_notification is done
Traceback (most recent call last):
File "./s4.py", line 18, in
Привыкайте, так оно и работает :( Отлично, базовый функционал в порядке, можно двигаться дальше.
Я, конечно, забыл что команду для запроса данных нужно сделать, но там хоть из дампа можно взять, так что может даже сегодня сделаю :)
Залил обновленную версию. Сейчас должно нормально отработать.
Заработало
root@ubuntu:/home/ubuntu/Downloads/tion_python-s4-dev/tests# python3 ./s4.py XX:XX:XX:XX:XX:XX DEBUG:tion_btle.tion:Connecting DEBUG:tion_btle.tion:Enabling notification DEBUG:tion_btle.tion:Notify handler is 18 DEBUG:tion_btle.tion:Will write b'\x01\x00' to 19 handle DEBUG:tion_btle.tion:Result is {'rsp': ['wr']} DEBUG:tion_btle.tion:Delegation enabled DEBUG:tion_btle.tion:First read done. Data is c00000000000060054e2 DEBUG:tion_btle.tion:enable_notification is done DEBUG:tion_btle.tion:Doing _try_write. Attempt 1/3 DEBUG:tion_btle.tion:Writing 8010003aa132325ba5a7498e46d067bbaa to 98f00002-3788-83ea-453e-f52244709ddb DEBUG:tion_btle.light_family:Collecting data DEBUG:tion_btle.tion:Got data in 18 response 002f003a5831325ba5a749b8c8bc183f51001904 DEBUG:tion_btle.tion:Got data in 18 response 400d101d26df1d0a0005fa0900fb53e30054812f DEBUG:tion_btle.tion:Got data in 18 response c0000000000006002e3f DEBUG:tion_btle.light_family:Got 002f003a5831325ba5a749b8c8bc183f51001904 from tion DEBUG:tion_btle.light_family:Got 400d101d26df1d0a0005fa0900fb53e30054812f from tion DEBUG:tion_btle.light_family:Got c0000000000006002e3f from tion DEBUG:tion_btle.s4:Data is 3f510019040d101d26df1d0a0005fa0900fb53e30054812f00000000000600 DEBUG:main:Result is {'state': 'on', 'heater': 'off', 'heating': 'off', 'sound': 'on', 'mode': 'outside', 'out_temp': 16, 'in_temp': 13, 'heater_temp': 25, 'fan_speed': 4, 'filter_remain': 172.43253472222221, 'time': '17:32', 'request_error_code': 0, 'model': 'S4', 'light': 'on'} INFO:main:Initial state: device is on, light is on, sound is on, heater is off, fan_speed is 4, target_temp is 25
оно пока умеет только читать или писать тоже сможет?
Пока только читать. Тион устроен так, что при команде set нужно передавать полное состояние бризера, а не только тот параметр, который хочется изменить. Поэтому сначала учимся читать, убеждаемся что читается все правильно, а потом начинаем учиться писать.
Эти результаты соответствуют действительности? Попробуйте некоторые параметры поменять (пультом или приложением) и убедиться что они корректно изменяются и в результатах теста. Сейчас очень важно убедиться что мы умеем получать правильные данные с бризера.
Результаты считываются корректно
Отлично. Тогда в ближайшее время займусь set-частью.
премного благодарен. Умел бы писать на питоне, посодействовал бы
Стесняюсь спросить - есть какой-нибудь прогресс? не терпиться протестировать :)
Не стоит стесняться -- хороший вопрос!
Извините, пока со временем не особо :(
@andlommy, попробуйте, пожалуйста, tests/s4.py из ветки s4-dev.
Оно должно:
Дебага будет море, поэтому пришлите сюда только то, что пойдет не по плану, начиная с DEBUG:tion_btle.tion:Connecting
и до ошибки или следующего теста.
Между действиями будет пауза в 10 секунд (настраивается параметром sleep_step
, но меньше 5 секунд ставить не стоит), прервать можно практически в любой момент.
Приветствую. Сори был в отъезде, на этой неделе попробую поиграться и сообщу
@andlommy, никаких проблем. Все идет в удобном каждому ритме: дэдлайнов тут не бывает ;)
Можно попросить добавить в тест, чтобы после установки режима он показывал состояние, а то непросто определить включился ли обогрев или нет :)
INFO:main:Going to set mode to recirculation
DEBUG:tion_btle.tion:Connecting
DEBUG:tion_btle.tion:Enabling notification
DEBUG:tion_btle.tion:Notify handler is 18
DEBUG:tion_btle.tion:Will write b'\x01\x00' to 19 handle
DEBUG:tion_btle.tion:Result is {'rsp': ['wr']}
DEBUG:tion_btle.tion:Delegation enabled
DEBUG:tion_btle.tion:First read done. Data is c0010000000006009399
DEBUG:tion_btle.tion:enable_notification is done
DEBUG:tion_btle.tion:Doing _try_write. Attempt 1/3
DEBUG:tion_btle.tion:Writing 8010003aa132327e85ee1ac563d7b6bbaa to 98f00002-3788-83ea-453e-f52244709ddb
DEBUG:tion_btle.light_family:Collecting data
DEBUG:tion_btle.tion:Got data in 18 response 002f003ac631327e85ee1a17e321d72551010002
DEBUG:tion_btle.tion:Got data in 18 response 400f11161f829d3b00ad3439005319b40031a103
DEBUG:tion_btle.tion:Got data in 18 response c001000000000600fc09
Traceback (most recent call last):
File "s4.py", line 56, in
народ, если вы мне скажете как мне это запустить, не имея компа с линухом 😅, я могу присоединиться к разработке.
Есть Тион 4S, debian и успешно подключаюсь через bluetoothctl Готов тоже помочь с дебагом и тестами.
Ядро работает, похоже, нормально. Ошибка выше -- не специфичная для модели, скорее всего, плавающая и не критичная: модуль получил все необходимые данные и отвалился уже после этого.
@Zorgino, linux -- не обязательно. Для работы нужен python3.9 с установленным модулем bluepy. Это можно провернуть под Windows.
@Ravexkgd, спасибо. Я к выходным обновлю тестовый скрипт и чутка подкручу модуль чтобы при таких ошибках оно не крашилось.
@Zorgino даже так... Тогда остается лазейка в виде того, что в Win-10 можно "Run Linux on windows" https://docs.microsoft.com/ru-ru/windows/wsl/install-win10
Плюс у меня есть дааавний проект по добавлению bleak в качестве BT интерфейса, но он не поддерживается HA и я не спешу (но абстракции для этого в модуле практически готовы: осталось добавить только уровень для разделения на bluepy и bleak).
@Zorgino, как все в виндах запущено...
Можно попросить добавить в тест, чтобы после установки режима он показывал состояние, а то непросто определить включился ли обогрев или нет :)
@andlommy, @Zorgino, обновил модуль и тестовый скрипт. Ошибки выше быть не должно, но могут проскакивать WARNING'и с ней связанные. Они не критичные и не должны мешать работе.
to test tion s4. in Linux terminal:
git clone https://github.com/TionAPI/tion_python.git
cd tion_python
git checkout s4-dev
pip3 install -e ./
python3 tests/s4.py "CF:7E:05:FC:**:**"
Коллеги, у кого-нибудь получилось запустить тесты, после обновления от 4 июня?
Коллеги, у кого-нибудь получилось запустить тесты, после обновления от 4 июня?
да, всё отлично, тесты бегают, ошибок нет. из сайдэффектов, по ощущениям, меньше сообщений об отвале "Got BTLEDisconnectError:Failed to connect to peripheral"
Отлично! Тогда в ближайшие дни сделаю релиз модуля.
Версия модуля: 1.20 Модель бризера: Tion S4 Версия прошивки (если известна): 02D0
Описание проблемы
Опишите возникшую проблему простыми словами When performing device.pair() (device in blue flashing mode), Authentication Failed response comes back from the breezer
Порядок действий, которые приводят к проявлению проблемы
from tion_btle import S3 as Breezer mac: str=str("XX:XX:XX:XX:XX:XX") device = Breezer(mac) device.pair()
Логи