mavrikkk / ha_kettler

allows you to connect Redmond SkyKettle, SkyCooker and SkyHeat to your Home Assistant. see README to know further
131 stars 50 forks source link

Интеграция (предположительно) вызывает падение Home Assistant #22

Closed r-vit closed 4 years ago

r-vit commented 4 years ago

За последнее время Home Assistant несколько раз падал с таким логом:

мая 14 08:35:52 home hass[43963]: Exception ignored in: <function _after_at_fork_child_reinit_locks at 0x7f314f2bae50>
мая 14 08:35:52 home hass[43963]: Traceback (most recent call last):
мая 14 08:35:52 home hass[43963]:   File "/usr/lib/python3.8/logging/__init__.py", line 258, in _after_at_fork_child_reinit_locks
мая 14 08:35:52 home hass[43963]:     print("Ignoring exception from logging atfork", instance,
мая 14 08:35:52 home hass[43963]: NameError: name 'instance' is not defined
мая 14 08:35:53 home hass[43964]: Exception ignored in: <function _after_fork at 0x7f314f415550>
мая 14 08:35:53 home hass[43964]: Traceback (most recent call last):
мая 14 08:35:53 home hass[43964]:   File "/usr/lib/python3.8/threading.py", line 1435, in _after_fork
мая 14 08:35:53 home hass[43964]:     threads.update(_dangling)
мая 14 08:35:53 home hass[43964]:   File "/usr/lib/python3.8/_weakrefset.py", line 59, in __iter__
мая 14 08:35:53 home hass[43964]:     with _IterationGuard(self):
мая 14 08:35:53 home hass[43964]:   File "/usr/lib/python3.8/_weakrefset.py", line 18, in __init__
мая 14 08:35:53 home hass[43964]:     self.weakcontainer = ref(weakcontainer)
мая 14 08:35:53 home hass[43964]: RecursionError: maximum recursion depth exceeded while calling a Python object
мая 14 08:35:54 home hass[43965]: Exception ignored in: <function _after_fork at 0x7f314f415550>
мая 14 08:35:54 home hass[43965]: Traceback (most recent call last):
мая 14 08:35:54 home hass[43965]:   File "/usr/lib/python3.8/threading.py", line 1435, in _after_fork
мая 14 08:35:54 home hass[43965]:     threads.update(_dangling)
мая 14 08:35:54 home hass[43965]:   File "/usr/lib/python3.8/_weakrefset.py", line 59, in __iter__
мая 14 08:35:54 home hass[43965]:     with _IterationGuard(self):
мая 14 08:35:54 home hass[43965]: RecursionError: maximum recursion depth exceeded
мая 14 08:36:47 home hass[44031]: Fatal Python error: Cannot recover from stack overflow.
мая 14 08:36:47 home hass[44031]: Python runtime state: initialized
мая 14 08:36:47 home hass[44031]: Current thread 0x00007f314fa0b740 (most recent call first):
мая 14 08:36:47 home hass[44031]:   File "/usr/lib/python3.8/_weakrefset.py", line 84 in add
мая 14 08:36:47 home hass[44031]:   File "/usr/lib/python3.8/logging/__init__.py", line 247 in _register_at_fork_reinit_lock
мая 14 08:36:47 home hass[44031]:   File "/usr/lib/python3.8/logging/__init__.py", line 892 in createLock
мая 14 08:36:47 home hass[44031]:   File "/usr/lib/python3.8/logging/__init__.py", line 255 in _after_at_fork_child_reinit_locks
мая 14 08:36:47 home hass[44031]:   File "/usr/lib/python3.8/subprocess.py", line 1637 in _execute_child
мая 14 08:36:47 home hass[44031]:   File "/usr/lib/python3.8/subprocess.py", line 854 in __init__
мая 14 08:36:47 home hass[44031]:   File "/usr/lib/python3.8/site-packages/bluepy/btle.py", line 279 in _startHelper
мая 14 08:36:47 home hass[44031]:   File "/usr/lib/python3.8/site-packages/bluepy/btle.py", line 426 in _connect
мая 14 08:36:47 home hass[44031]:   File "/usr/lib/python3.8/site-packages/bluepy/btle.py", line 391 in __init__
мая 14 08:36:47 home hass[44031]:   File "/hass/.homeassistant/custom_components/r4s_kettler/__init__.py", line 108 in __enter__
мая 14 08:36:47 home hass[44031]:   File "/hass/.homeassistant/custom_components/r4s_kettler/__init__.py", line 112 in __enter__
мая 14 08:36:47 home hass[44031]:   File "/hass/.homeassistant/custom_components/r4s_kettler/__init__.py", line 112 in __enter__
мая 14 08:36:47 home hass[44031]:   File "/hass/.homeassistant/custom_components/r4s_kettler/__init__.py", line 112 in __enter__
мая 14 08:36:47 home hass[44031]:   File "/hass/.homeassistant/custom_components/r4s_kettler/__init__.py", line 112 in __enter__
мая 14 08:36:47 home hass[44031]:   File "/hass/.homeassistant/custom_components/r4s_kettler/__init__.py", line 112 in __enter__

и так далее.

Не уверен на 100%, что проблема именно в этой интеграции, но других кандидатов пока не видно. Пока что попробую отключить и посмотреть на поведение HA

tayanov commented 4 years ago

То же падает ха. Может из за не асинхронности компонента?

mavrikkk commented 4 years ago

это первый адекватный лог с причиной "вылетает"...сразу все видно...Однако ПРИЧИНА осталась неясной.

у вас проблемы с коннектом. модуль в принципе не может даже подключиться к чайнику, не то что управлять им или получать, отправлять команды... У меня коннект стоял в бесконечном цикле...типа не подключился - отключился - попытался еще...у вас эта петля зависла...потом HA вылетел, когда ему надоело бесконечно пытаться подключиться... Однако ПОЧЕМУ он не может подключиться - неясно...тупо команда коннект не идет... если шарите, то уберите все try except из класса BTLEConnection в файле init.py. Запустите все заново и ловите логи...

mavrikkk commented 4 years ago

Может из за не асинхронности компонента?

в самом HA полно неасинхронных компонентов ) и ничего

3AXAPOB commented 4 years ago

У меня все нормально работает. =/ Может что-то не так делаю?))

mavrikkk commented 4 years ago

Может что-то не так делаю?))

когда то и у вас не работало )

r-vit commented 4 years ago

в changelog увидел, что вы убрали рекурсивный вызов. правильно ли я понимаю, что сейчас нет необходимости убирать try/except?

mavrikkk commented 4 years ago

правильно ли я понимаю, что сейчас нет необходимости убирать try/except?

необходимости убирать и не было и нет... эти блоки не просто так туда добавлены. Но если вы хотите отладить модуль и увидеть ошибку коннекта, которая, возможно, прольет свет на вашу проблему, то вам нужно это сделать...без этого вы получите максимум мою обезличенную ошибку error 5 attemtps to firstConnect например...

danilovvs commented 4 years ago

За последнее время Home Assistant несколько раз падал с таким логом: Не уверен на 100%, что проблема именно в этой интеграции, но других кандидатов пока не видно. Пока что попробую отключить и посмотреть на поведение HA

аналогично падает HA

r-vit commented 4 years ago

После избавления от рекурсивного входа в функцию enter HA перестал падать, однако интеграция продолжает нарушать нормальную работу системы. Через некоторое время после начала работы система теряет возможность устанавливать соединения. Возможно ли, что где-то не закрываются сокеты или дескрипторы, и при нестабильном соединении с устройством их число быстро достигает предельного?

После отключения интеграции HA работает стабильно.

mavrikkk commented 4 years ago

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

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

Через некоторое время после начала работы система теряет возможность устанавливать соединения.

я думаю, что причину надо искать у вас... что у вас за железо? как установлен HA? hassOS? hassio? virtual env? в каждом из этих случаев нужен свой подход... в соседних ветках я давал рекомендации для некоторых случаев с модулем блютус...от сообщества также были полезные советы...почитайте другие issues открытые и закрытые... в любом случае без контекста это гадание на кофейной гуще

r-vit commented 4 years ago

Остальные устройства bluetooth у меня работают стабильно, в том числе датчики темепратуры и с десяток устройств MiFlora, поэтому я пока не тороплюсь обвинять в проблемах стек BT. Однако я не уверен, что работающие интеграции используют bluepy, так что возможна проблема именно с библиотекой.

После отключения интеграции с чайником HA работает стабильно, причем исчезли задержки при обработке сообщений брокера mqtt. При этом в системе ничего не менялось, за исключением отключения вашей интеграции. К сожалению, в моменты возникновения проблем в логи больше ничего не пишется (после удаления рекурсивного вызова), сообщается только о невозможности установить соединения с массой устройств. Всё это сильно затрудняет выяснение первопричины проблем.

HA установлен на виртуалке с archlinux, с использованием venv - это дает болльше гибкости для доступа к системе

Кстати, не ручаюсь на 100%, но, по-моему, предыдущие версии вашей интеграции (до перехода на bluepy) работали более стабильно и таких проблем не вызывали, только много спамили в лог при отстутствии коннекта

mavrikkk commented 4 years ago

Остальные устройства bluetooth у меня работают стабильно, в том числе датчики темепратуры и с десяток устройств MiFlora,

они тоже используют сложную систему авторизации? коннект и подписку на уведомления? или просто считываются данные с датчиков?

После отключения интеграции с чайником HA работает стабильно

нисколько не сомневаюсь...потому что не используете эти возможности ))

причем исчезли задержки при обработке сообщений брокера mqtt

это возможно...уже слышал такое...интерфейс ha (наверное и брокер ваш) может подвисать на 1-2 сек во время обновления статуса...меня пока нисколько не трогает этот факт...однако я с радостью решу эту проблему, если разберусь с точными причинами и методами...

HA установлен на виртуалке с archlinux, с использованием venv - это дает болльше гибкости для доступа к системе

ничем от hassio не отличается...по степени гибкости...но это уже холивар...кому что...

предыдущие версии вашей интеграции (до перехода на bluepy) работали более стабильно и таких проблем не вызывали, только много спамили в лог при отстутствии коннекта

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

r-vit commented 4 years ago

Вы абсолютно правы, работающие интеграции используют только пассивное прослушивание BT трафика

ничем от hassio не отличается...по степени гибкости...но это уже холивар...кому что...

не скажите, в моем случае я могу тонко контролировать систему. до этого использовал и hassio на RPi4, и готовый образ виртуалки от разработчиков HA. везде чувствовал себя ущербным :). Но вы правы, это исключительно вопрос личных предпочтений.

возможно, есть еще более совершенные методы? не знаете, случайно, первоклассную асинхронную бле библиотеку на питон с поддержкой уведомлений?

я бы с удовольствием поучаствовал в разработке, но я, увы, devops, поэтому могу только с благодарностью пользоваться результатми вашего труда :)

r-vit commented 4 years ago

может быть bleak?

mavrikkk commented 4 years ago

везде чувствовал себя ущербным :)

опять холивар, но пример...хоть один! мне правда интересно! именно с хассио, не готовый образ хассОС а именно в хассио чего вам не хватало...1 пример...может мне тоже не хватает этого? я как раз с виртуал енв перешел на хассио...увидел только кучу плюсов...при этом система осталась моей! я ее изначально сам ставил...и консоль и рут и что хочешь...и все папки хассио доступны...

mavrikkk commented 4 years ago

может быть bleak?

нашел ее около недели назад...теоретически, то что надо...практически бы услышать мнение пробовавшего...ибо переходя с pexpect на bluepy я тоже был уверен, что делаю боооооооольшой шаг вперед...а в итоге вы уже 3 или 4, который считает предыдущую версию более стабильной... не хотелось бы также попасть с bleak

r-vit commented 4 years ago

Ни в коем случае не собираюсь холиварить - в подобных спорах истины не добиться. Да и незачем. Это исключительно вопрос личных препочтений. Возможно, у меня проблемы с терминологией, потому что не совсем понимаю разницу между HassOS и Hassio. Изначально я использовал готовые образы - RPi4, а потом vmdk, который сконвертировал в qcow2 и использовал на виртуалке. В обоих случаях я включал отладочный режим и получал доступ к хост-системе через ssh. Однако управление системой было слишком ограниченное, без возможности установки пакетов и прочими экспериментами. Да и вообще, мне не нравится docker (опять-таки, вопрос личных предпочтений). Потому меня не устраивала Supervised-установка для Generic Linux. Вот в итоге и пришел к установке через venv, где я могу при необходимости использовать пакеты python как установленные в venv, так и системные, плюс гибкость в манипуляциях с ситемой, резервное копирование, эемперименты с версионированием компонентов. Опять же, доустановил туда snapcast-сервер, который вещает на несколько устройств. Мелочи, конечно, но мне так удобнее. В итоге получившаяся система меня полностью устраивает, работает стабильно и наконец-то начала радовать :)

В общем, я всё это к тому веду, что на самом деле есть только один объективный критерий - нравится или нет. А это - персональный выбор, поэтому никого не агитирую :)

r-vit commented 4 years ago

может быть bleak?

нашел ее около недели назад...теоретически, то что надо...практически бы услышать мнение пробовавшего...ибо переходя с pexpect на bluepy я тоже был уверен, что делаю боооооооольшой шаг вперед...а в итоге вы уже 3 или 4, который считает предыдущую версию более стабильной... не хотелось бы также попасть с bleak

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

mavrikkk commented 4 years ago

Потому меня не устраивала Supervised-установка для Generic Linux.

вот это я называю hassio )

значально я использовал готовые образы

а это hassOS....это и правда ужасный вариант!

где я могу при необходимости использовать пакеты python как установленные в venv, так и системные

это все hassio умеет...

доустановил туда snapcast-сервер

тоже стоит )

Да и вообще, мне не нравится docker

тут уж увы...

А это - персональный выбор, поэтому никого не агитирую :)

да, согласен...но правда было интересно...

mavrikkk commented 4 years ago

я готов погонять его у себя с цель протестировать работу в условиях нестабильного соединения

и правда devops ))

думаю, займусь этим вопросом...осталось найти время...

r-vit commented 4 years ago

Потому меня не устраивала Supervised-установка для Generic Linux.

вот это я называю hassio )

кстати, буквально на прошлой неделе разработчики HA пытались ее закрыть, но поднявшееся возмущение сообщества заставило их отложить (но не отказаться!). Так что надо на всякий случай быть готовым ко всяки фокусам :(

r-vit commented 4 years ago

я готов погонять его у себя с цель протестировать работу в условиях нестабильного соединения

и правда devops ))

думаю, займусь этим вопросом...осталось найти время...

отлично! я всегда на связи, если что :)

tayanov commented 4 years ago

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

2020-05-18 10:58:18 WARNING (MainThread) [custom_components.r4s_kettler] five attempts of modeUpdate failed

2020-05-18 12:30:12 WARNING (MainThread) [custom_components.r4s_kettler] five attempts of modeUpdate failed

2020-05-18 12:32:10 WARNING (MainThread) [custom_components.r4s_kettler] five attempts of modeUpdate failed

2020-05-18 12:37:54 WARNING (MainThread) [custom_components.r4s_kettler] five attempts of modeUpdate failed

Сейчас 19:40? последнее сообщение из лога выше в 12:37.

И ладно бы просто чайник отвалился. Отвалилась вся морда ха. Советую автору то же попробовать увеличить расстояние и проверить на зависание. Как бы там ни было не у всех есть возможность поставить сервер на кухне.

Вот бы разработать прошивку на основе esp32 для работы с чайником ....

mavrikkk commented 4 years ago

не у всех есть возможность поставить сервер на кухне.

у меня стоит в зале...прямое расстояние около 5 метров...однако на пути стена между залом и кухней.

Вот бы разработать прошивку на основе esp32 для работы с чайником ...

в другую ветку...

И ладно бы просто чайник отвалился. Отвалилась вся морда ха.

попробуем вылечить асинхронностью...псевдо, но все же...попробуйте новую версию...

mavrikkk commented 4 years ago

падений нет...если остались подвисания - то в соответствующую ветку