8000 [Feature Request] Поддержка Tion Lite · Issue #2 · TionAPI/tion_python · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

[Feature Request] Поддержка Tion Lite #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
mozoh opened this issue Jun 1, 2020 · 23 comments
Closed

[Feature Request] Поддержка Tion Lite #2

mozoh opened this issue Jun 1, 2020 · 23 comments
Labels
enhancement New feature or request

Comments

@mozoh
Copy link
mozoh commented Jun 1, 2020

Есть ли какие-то различия в API между S3 и Lite устройствами?

@IATkachenko
Copy link
Collaborator

Да, есть существенные различия в формировании управляющих пакетов (и соответственно дешифровке ответов).

Чтобы добавить поддержку мне нужно (как минимум) убедиться что формируемые мной пакеты соответсвуют тем, которые отправляет приложение, а как максимум еще как-то проверить что все работает. В моем случае это можно сделать только руками энтузиастов.

@IATkachenko IATkachenko added the enhancement New feature or request label Jun 1, 2020
@IATkachenko
Copy link
Collaborator

На Хабре мне прислали дамп взаимовдействия с Lite, так что в ближайшее время попробую сделать поддержку и для них.

@IATkachenko
Copy link
Collaborator

Потихоньку в эту сторону копаем. Уже сделана экспериментальная поддержка (ветка lite).
После окончания тестирования буду причесывать код, сводить вместе dev и lite и готовить релиз 1.0 с поддержкой обоих бризеров.

@lych
Copy link
lych commented Nov 14, 2020

Привет.
В lite.py, вот тут немного странный код

            self._state = bool(self._process_status(data[0] & 1))
            self._sound = bool(self._process_status(data[0] >> 1 & 1))
            self._light = bool(self._process_status(data[0] >> 2 & 1))
            self._filter_change_required = self._process_status(data[0] >> 4 & 1)
            self._co2_auto_control = self._process_status(data[0] >> 5 & 1)
            self._heater = bool(self._process_status(data[0] >> 6 & 1))
            self._have_heater = self._process_status(data[0] >> 7 & 1)

приведение bool к строке и потом опять к bool, результат всегда true, из буфера читаются правильные значения а в переменные всегда записывается True.
Наверное как то вот так должно быть:

            self._state = data[0] & 1
            self._sound = data[0] >> 1 & 1
            self._light = data[0] >> 2 & 1
            self._filter_change_required = data[0] >> 4 & 1
            self._co2_auto_control = data[0] >> 5 & 1
            self._heater = data[0] >> 6 & 1
            self._have_heater = data[0] >> 7 & 1

Все функции которые есть в приложении работают, считываются и выставляются, кроме количества дней оставшихся до замены фильтра.
Ну и все остальные счетчики и температуры тоже не попадают, но их и в приложении нет.
Ну еще self._light считывается и записывается но ни на что не влияет, лампочки на девайсе все равно горят. Через приложение их тоже нельзя отключить.

@IATkachenko
Copy link
Collaborator

@lych, спасибо за тестирование!

Я не очень знаком с приложением. Не могли бы вы указать какие именно параметры определяются/выставляются корректно, какие -- нет и каких нет в приложении?
Я тогда солью все в dev до перехода на bleak и асинхронный режим работы.

Со статусами понял, посмотрю внимательнее, что я хотел этим сказать ;) Точнее что хотел сказать понятно, но, действительно, какая-то фигня получилась.

@lych
Copy link
lych commented Nov 14, 2020
  1. Включение/выключение
  2. Скорость вентилятора
  3. Вкл/Выкл подогрева
  4. Температура подогрева
  5. Вкл/Выкл звукового подтверждения (пикает в ответ на команды)
  6. Количество дней до замены фильтра
    Вот, это весь функционал приложения для lite. Больше ничего нет.

1-5 работают, корректно считываются и выставляются.

6 - считывается некорректно, похоже на обратный счетчик как будто в секундах, новый отсчет через каждые несколько минут, похоже смещение неправильное, зацепило не то младшую не то старшую часть какого то счетчика.

Всего остального в приложении нет.

Единственное, electronic temp похож на температуру выходящего из бризера воздуха, колеблется около целевой температуры нагрева, но если нагрев отключить ниже ноля не падает, хотя за окном -12.

DEBUG:tion.tion:Doing _connect. Attempt 1/3
DEBUG:tion.tion:Enabling notification
DEBUG:tion.tion:Notify handler is 18
DEBUG:tion.tion:Will write b'\x01\x00' to 19 handle
DEBUG:tion.tion:Result is {'rsp': ['wr']}
DEBUG:tion.tion:Final read
DEBUG:tion.tion:Enable notification finished
DEBUG:tion.tion:Doing _try_write. Attempt 1/3
DEBUG:tion.tion:Writing 8010003a0232120dd71f8f48d3c31abbaa to 98f00002-3788-83ea-453e-f52244709ddb
DEBUG:tion.lite:Collecting data
DEBUG:tion.tion:Got data in 18 response 0049003a0131120dd71f8f181a50f1cfd8020f04
DEBUG:tion.lite:Got 0049003a0131120dd71f8f181a50f1cfd8020f04 from tion
DEBUG:tion.tion:Got data in 18 response 40000f146b170300e0d802004275ea004d670c00
DEBUG:tion.lite:Got 40000f146b170300e0d802004275ea004d670c00 from tion
DEBUG:tion.tion:Got data in 18 response 4000000000000000000000000200010000000000
DEBUG:tion.lite:Got 4000000000000000000000000200010000000000 from tion
DEBUG:tion.tion:Got data in 18 response c000000000000a1419020406062800ef7e
DEBUG:tion.lite:Got c000000000000a1419020406062800ef7e from tion
DEBUG:tion.lite:Header is 0049003a0131120dd71f8f181a50f1
DEBUG:tion.lite:Data is cfd8020f0440000f146b170300e0d802004275ea004d670c004000000000000000000000000200010000000000c000000000000a1419020406062800
INFO:tion.lite:state is on
INFO:tion.lite:sound is on
INFO:tion.lite:light is on
INFO:tion.lite:filter change required is 0
INFO:tion.lite:co2 auto control is 0
INFO:tion.lite:have_heater is 1
INFO:tion.lite:heater is on
INFO:tion.lite:air mode 2
INFO:tion.lite:target temperature is 15
INFO:tion.lite:fan sped is 4
INFO:tion.lite:in temp is 64
INFO:tion.lite:out temp is 0
INFO:tion.lite:electronic temp is 15
INFO:tion.lite:electronic work time is 15.487673611111111
INFO:tion.lite:filter_used 50.4%
INFO:tion.lite:device work time is 58.71125
INFO:tion.lite:error code is 0
crc is: ef7e
header._package_size = 73
header_commad_type = 31
DEBUG:__main__:Initial state: device is on, light is on, sound is on, heater is on, fan_speed is 4, target_temp is 15

@lych
Copy link
lych commented Nov 14, 2020

filter change required is 0 - верно, если через 177 дней станет 1, значит работает :)
have_heater is 1 - верно, но подтвердить можно только на бризере без нагревателя
co2 auto control is 0 - похоже верно, чтобы проверить думаю нужна базовая станция, у меня ее нет
air mode 2 - меняется, когда выключен 1 (предполагаю что это значит - заслонка закрыта), когда включен 2 (открыта), ловить в момент когда заслонка двигается чет лениво) но может попробую
in temp is 64 - всегда 64
out temp is 0 - видел два значения 0 и 255, 255 было при выключенном нагреве и температуре на улице -12
electronic work time is 15.487673611111111, device work time is 58.71125 непонятно что, бризер установлен ~2,5 суток назад, работает практически 24/7 c небольшими перерывами

@dkrylov1990
Copy link

А планируете lite в компонент HA вынести?

@IATkachenko
Copy link
Collaborator

@lych, еще раз спасибо! Ваших проверок вполне достаточно чтобы перенести lite часть в основную ветку.
out temp проверю еще раз -- у меня, вроде есть нужные дампы. Да и ваш лог дает нужный пакет.

device work -- это действительно время работы (судя по всему чистое). electronic work -- подозреваю что время работы нагревателя.

@dkrylov1990, да, поскольку для HA принципиальной разницы не будет что за бризер (всю разницу берет на себя этот python-модуль). Следите за релизами!

@IATkachenko
Copy link
Collaborator

@lych, проблему out temp увидел -- пакет неправильно восстанавливается.

IATkachenko added a commit that referenced this issue Nov 16, 2020
@IATkachenko
Copy link
Collaborator

Готово.
Изменения слиты в v0.2.2 и выложены в pypi.

@lych, подправил найденные вами ошибки (и добавил новых). Не могли бы вы проверить v0.2.2 из pypi (pip3 install tion_btle). Если базовый функционал работает, то это issue я закрою, а то что выловится предлагаю править в новых.

@lych
Copy link
lych commented Nov 16, 2020

Забрал изменения из репы, pip пока не пробовал.
Как минимум в счетчиках порядок байт обратный.
response[16:20], byteorder='little', signed=False - количество секунд оставшихся до замены фильтра, при делении на 86400 получается количество дней, в моем случае 176 дней осталось.
@IATkachenko, поправьте пожалуйста и тогда всё, 100% функций приложения покрыто.

@lych
Copy link
lych commented Nov 16, 2020

А вот с остальным не очень понятно.
electronic work time is 4.259432870370371
device work time is 16.69193287037037
Непонятно что эти цифры означают, да и не особо интересно :-), но теперь они хотя бы не скачут от запуска к запуску (после смены byteorder на little) а видно что это какие-то увеличивающиеся счетчики.

А вот с температурами непонятно. У лайт из-за особенностей конструкции при включенном нагревателе входную температуру наверное измерить невозможно, там нагреватель прям на входе (девайс не разбирал, но так мне показалось).
out_temp теперь при изменении target_temp, стремится к ней, но опять же ниже нуля не показывает при отключенном нагревателе и температуре снаружи -15.
Может это не ошибка а так и задумано, в приложении никаких температур не показывает, так что не понятно.
Могу еще дампов выложить с включенным нагревателем и без если интересно.

@IATkachenko
Copy link
Collaborator

у work time тоже был неправильный порядок -- тоже little должен быть. При замене на little похоже на что-то осмысленное?

При отключенном нагревателе и отрицательных температурах бризер может закрывать заслонку (s3 так делает). Не ваш случай? Может еще нагреватель принудительно включается.

Из дампов, на текущем этапе, наиболее интересны строчки:

  • Got ... from tion
  • Data is
  • in temp is
  • out temp is
  • реальные значения для температур.
    Сами данные, вроде, берутся из правильных мест, но возможна проблема со сборкой итогового пакета и смещениями.

Обновление залил (модуль пока не выкладываю, до завершения исправлений).

@lych
Copy link
lych commented Nov 16, 2020

При big все счетчики скачут как попало, то есть очень похоже на перепутанный порядок.
С little все гораздо лучше, просто увеличивающиеся цифры (уменьшающиеся в случае filter_used).
electronic work time похож на секунды, сейчас у меня 4.2 дня, столько он у меня вроде бы не работает но возможно они еще на заводе какое-то время испытания проходят, по крайней мере близко к реальному.
electronic work time - как будто увеличивается каждые 200мс, у меня нет идей что это может быть.
Да ну и не особо это важно, главное время до замены фильтра правильно.

@lych
Copy link
lych commented Nov 16, 2020

Нагрев выключен, заслонка открыта, на улице -12 (приблизительно).
Воздух из тиона дует точно ниже 0, к сожалению точно померить нечем.

DEBUG:tion.tion:Doing _connect. Attempt 1/3
DEBUG:tion.tion:Enabling notification
DEBUG:tion.tion:Notify handler is 18
DEBUG:tion.tion:Will write b'\x01\x00' to 19 handle
DEBUG:tion.tion:Result is {'rsp': ['wr']}
DEBUG:tion.tion:Doing _try_write. Attempt 1/3
DEBUG:tion.tion:Writing 8010003a0232120dd71f8f48d3c31abbaa to 98f00002-3788-83ea-453e-f52244709ddb
DEBUG:tion.lite:Collecting data
DEBUG:tion.tion:Got data in 18 response 0049003a4531120dd71f8fe05f88498fd8020004
DEBUG:tion.lite:Got 0049003a4531120dd71f8fe05f88498fd8020004 from tion
DEBUG:tion.tion:Got data in 18 response 40fd001117aa0500b75605006bf7e7002f401600
DEBUG:tion.lite:Got 40fd001117aa0500b75605006bf7e7002f401600 from tion
DEBUG:tion.lite:Package is [253, 0, 17, 23, 170, 5, 0, 183, 86, 5, 0, 107, 247, 231, 0, 47, 64, 22, 0]
DEBUG:tion.tion:Got data in 18 response 4000000000000000000000000200010000000000
DEBUG:tion.lite:Got 4000000000000000000000000200010000000000 from tion
DEBUG:tion.lite:Package is [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0]
DEBUG:tion.tion:Got data in 18 response c000000000000a1419020406061800734c
DEBUG:tion.lite:Got c000000000000a1419020406061800734c from tion
DEBUG:tion.lite:Header is 0049003a4531120dd71f8fe05f8849
DEBUG:tion.lite:Data is 8fd8020004fd001117aa0500b75605006bf7e7002f4016000000000000000000000000020001000000000000000000000a1419020406061800
INFO:tion.lite:state is on
INFO:tion.lite:sound is on
INFO:tion.lite:light is on
INFO:tion.lite:filter change required is 0
INFO:tion.lite:co2 auto control is 0
INFO:tion.lite:have_heater is 1
INFO:tion.lite:heater is off
INFO:tion.lite:air mode 2
INFO:tion.lite:target temperature is 0
INFO:tion.lite:fan sped is 4
INFO:tion.lite:in temp is 253
INFO:tion.lite:out temp is 0
INFO:tion.lite:electronic temp is 17
INFO:tion.lite:electronic work time is 371223
INFO:tion.lite:filter_used 15202155.000000
INFO:tion.lite:days left until filter replacement: 175
INFO:tion.lite:device work time is 1458223
INFO:tion.lite:error code is 0
crc is: 1800
header._package_size = 73
header_commad_type = 31
DEBUG:__main__:Initial state: device is on, light is on, sound is on, heater is off, fan_speed is 4, target_temp is 0

@lych
Copy link
lych commented Nov 16, 2020

Нагрев включен, заслонка открыта, на улице -12 (приблизительно).
Воздух дует нагретый, опять же точно померить нечем, по ощущениям градусов +20, при цевлевых +23.

'''
DEBUG:tion.tion:Doing _connect. Attempt 1/3
DEBUG:tion.tion:Enabling notification
DEBUG:tion.tion:Notify handler is 18
DEBUG:tion.tion:Will write b'\x01\x00' to 19 handle
DEBUG:tion.tion:Result is {'rsp': ['wr']}
DEBUG:tion.tion:Doing _try_write. Attempt 1/3
DEBUG:tion.tion:Writing 8010003a0232120dd71f8f48d3c31abbaa to 98f00002-3788-83ea-453e-f52244709ddb
DEBUG:tion.lite:Collecting data
DEBUG:tion.tion:Got data in 18 response 0049003a5531120dd71f8fd44a950fcfd8021704
DEBUG:tion.lite:Got 0049003a5531120dd71f8fd44a950fcfd8021704 from tion
DEBUG:tion.tion:Got data in 18 response 40fe17115aac0500fa58050028f5e7007e4b1600
DEBUG:tion.lite:Got 40fe17115aac0500fa58050028f5e7007e4b1600 from tion
DEBUG:tion.lite:Package is [254, 23, 17, 90, 172, 5, 0, 250, 88, 5, 0, 40, 245, 231, 0, 126, 75, 22, 0]
DEBUG:tion.tion:Got data in 18 response 4000000000000000000000000200010000000000
DEBUG:tion.lite:Got 4000000000000000000000000200010000000000 from tion
DEBUG:tion.lite:Package is [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0]
DEBUG:tion.tion:Got data in 18 response c000000000000a14190204060549001c78
DEBUG:tion.lite:Got c000000000000a14190204060549001c78 from tion
DEBUG:tion.lite:Header is 0049003a5531120dd71f8fd44a950f
DEBUG:tion.lite:Data is cfd8021704fe17115aac0500fa58050028f5e7007e4b16000000000000000000000000020001000000000000000000000a1419020406054900
INFO:tion.lite:state is on
INFO:tion.lite:sound is on
INFO:tion.lite:light is on
INFO:tion.lite:filter change required is 0
INFO:tion.lite:co2 auto control is 0
INFO:tion.lite:have_heater is 1
INFO:tion.lite:heater is on
INFO:tion.lite:air mode 2
INFO:tion.lite:target temperature is 23
INFO:tion.lite:fan sped is 4
INFO:tion.lite:in temp is 254
INFO:tion.lite:out temp is 23
INFO:tion.lite:electronic temp is 17
INFO:tion.lite:electronic work time is 371802
INFO:tion.lite:filter_used 15201576.000000
INFO:tion.lite:days left until filter replacement: 175
INFO:tion.lite:device work time is 1461118
INFO:tion.lite:error code is 0
crc is: 4900
header._package_size = 73
header_commad_type = 31
DEBUG:main:Initial state: device is on, light is on, sound is on, heater is on, fan_speed is 4, target_temp is 23
'''

@lych
Copy link
lych commented Nov 16, 2020

Да в общем и целом не нужны они эти температуры.
Вместо входной из-за конструкции там похоже температура нагревателя.
Выходная - соответствует целевой, если мощности нагревателя не хватает поддерживать целевую он просто снижает обороты, например сейчас он у меня с включенным нагревателем не дает поставить 6 скорость, максимум 5 (на улице около -12), а если нагреватель выключить то 6 (максимальная) без проблем.
Вот и получается что в повседневном использовании они не нужны эти температуры, ничего неизвестного они не показывают.

@IATkachenko
Copy link
Collaborator
IATkachenko commented Nov 16, 2020

Похоже что out_temp не умеет (на стороне бризера) быть ниже нуля.
in temp кодируется при помощи дополнительного кода (поправил в последних коммитах) и, поскольку, как вы говорите, датчик стоит в районе нагревателя, показывает (для нас) погоду на Венере.

А out temp, в вашем случае, бывает отличным от нуля и target_temp? Например в момент перехода из "нагреватель выключен" -> "нагреватель включен" удается увидеть, например, 15 градусов?

мне температуры интересны в контексте интеграции в Home Assistant. Извернуться, думаю, смогу и без них, но хочется сделать хорошо.

@dkrylov1990
Copy link

@IATkachenko может поможет, но я не видел функциональной возможности в приложухе на lite внешней температуры. Там конструктивно даже ничего на улице нет.
А температура, которая выдаётся в приложухе - это температура выходящего воздуха (по сути своей просто управление мощностью нагревателя)

@lych
Copy link
lych commented Nov 16, 2020

Вот теперь похоже на правду.

INFO:tion.lite:heater is off
INFO:tion.lite:fan sped is 6
INFO:tion.lite:in temp is -4
INFO:tion.lite:out temp is -1
Должно быть в районе -10-12, хз почему -4, но на работе есть тион о2, он тоже все время показывает зимой температуру градусов на 10 выше чем на улице, прогреваться что ли воздух пока по каналу в стене идет (в обоих случаях канал довольно длинный и проходит через неотапливаемое помещение).

INFO:tion.lite:target temperature is 23
INFO:tion.lite:fan sped is 3
INFO:tion.lite:in temp is -2
INFO:tion.lite:out temp is 21
Как ни странно при включенном обогревателе хоть и выше но все равно отрицательная, все таки видимо датчик всунули впереди нагревателя.

На счет out temp, да бывает, она следует за target_temp c запозданием, более того если выключить бризер (нагреватель был включен) то она резко поднимается (тока воздуха нет, а нагреватель все еще горячий) и постепенно остывает. Т.е. с моей точки зрения out temp ведет себя так и должна.

Если не лень будет в выходные сделаю термометр из ds18b20 и засуну в воздуховод чтобы сравнить с in temp

@IATkachenko
Copy link
Collaborator

Те out_temp можно верить. Хорошо.
in_temp -- под вопросом, но тоже примерно похожа на правду. У меня (s3) in отличается от уличной на 4 градуса примерно, при достаточно тонкой стене (коротком канале). Она меня меньше всего беспокоит.
Думаю что тест с ds18b20 особо не нужен.

В ближайшие дни еще немного причешу код и зафиксирую все еще раз в виде v1.0.0 релиза, чтобы потом можно было спокойно все ломать переводя на асинхронный bleak ;)

Еще раз спасибо за помощь с тестированием.

@IATkachenko
Copy link
Collaborator

Implemented in v1.0.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants
0