mavrikkk / ha_kettler

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

Redmond RAC-3706S support #60

Closed vrslev closed 2 years ago

vrslev commented 3 years ago

I have this air purifier and with your integration in connects as kettle :) How can I contribute to project so it'd support this?

Снимок экрана 2021-01-11 в 22 39 49
mavrikkk commented 3 years ago

Прям скопировал текст из исходника, может очепятка в букве где

vrslev commented 3 years ago

Модель объекта вентилятора изменили только вчера. Наверное, ещё не успели обновить версию Home Assistant 😃 Коммит в документацию: https://github.com/home-assistant/developers.home-assistant/commit/6ebc02f268f74b2c82f351e1375588ff42e45a5f Коммит в ядро: https://github.com/home-assistant/core/commit/babfef829d866acf2c7e81e0d855feb2f106d1ce

mavrikkk commented 3 years ago

на опережение работаем ) ну если до пн не обновят, то будем думать...

vrslev commented 3 years ago

Хорошо. А проблема с добавлением нескольких устройств?

mavrikkk commented 3 years ago

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

mavrikkk commented 3 years ago

вроде вернул FAN на старые рельсы

vrslev commented 3 years ago

Теперь вот так:

2021-02-01 11:14:26 ERROR (MainThread) [homeassistant.config_entries] Error unloading entry f9:ae:7e:b4:9a:a6 for sensor
Traceback (most recent call last):
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/config_entries.py", line 321, in async_unload
result = await component.async_unload_entry(hass, self) # type: ignore
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/components/sensor/__init__.py", line 72, in async_unload_entry
return await hass.data[DOMAIN].async_unload_entry(entry)
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/helpers/entity_component.py", line 172, in async_unload_entry
raise ValueError("Config entry was never loaded!")
ValueError: Config entry was never loaded!
2021-02-01 11:14:26 ERROR (MainThread) [homeassistant.config_entries] Error unloading entry f9:ae:7e:b4:9a:a6 for light
Traceback (most recent call last):
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/config_entries.py", line 321, in async_unload
result = await component.async_unload_entry(hass, self) # type: ignore
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/components/light/__init__.py", line 270, in async_unload_entry
return await hass.data[DOMAIN].async_unload_entry(entry)
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/helpers/entity_component.py", line 172, in async_unload_entry
raise ValueError("Config entry was never loaded!")
ValueError: Config entry was never loaded!
2021-02-01 11:14:26 ERROR (MainThread) [homeassistant.config_entries] Error unloading entry f9:ae:7e:b4:9a:a6 for switch
Traceback (most recent call last):
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/config_entries.py", line 321, in async_unload
result = await component.async_unload_entry(hass, self) # type: ignore
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/components/switch/__init__.py", line 78, in async_unload_entry
return await hass.data[DOMAIN].async_unload_entry(entry)
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/helpers/entity_component.py", line 172, in async_unload_entry
raise ValueError("Config entry was never loaded!")
ValueError: Config entry was never loaded!
2021-02-01 11:14:26 ERROR (MainThread) [homeassistant.config_entries] Error unloading entry f9:ae:7e:b4:9a:a6 for fan
Traceback (most recent call last):
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/config_entries.py", line 321, in async_unload
result = await component.async_unload_entry(hass, self) # type: ignore
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/components/fan/__init__.py", line 105, in async_unload_entry
return await hass.data[DOMAIN].async_unload_entry(entry)
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/helpers/entity_component.py", line 172, in async_unload_entry
raise ValueError("Config entry was never loaded!")
ValueError: Config entry was never loaded!
2021-02-01 11:14:26 ERROR (MainThread) [homeassistant.config_entries] Error calling entry remove callback f9:ae:7e:b4:9a:a6 for ready4sky
Traceback (most recent call last):
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/config_entries.py", line 356, in async_remove
await component.async_remove_entry(hass, self) # type: ignore
File "/home/homeassistant/.homeassistant/custom_components/ready4sky/__init__.py", line 95, in async_remove_entry
hass.data[DOMAIN]["devices"].pop(entry.entry_id)
KeyError: 'devices'
2021-02-01 11:15:24 ERROR (SyncWorker_2) [custom_components.ready4sky] unable to connect to device
2021-02-01 11:15:38 ERROR (SyncWorker_2) [custom_components.ready4sky] unable to connect to device
2021-02-01 11:15:52 ERROR (SyncWorker_2) [custom_components.ready4sky] unable to connect to device
2021-02-01 11:16:06 ERROR (SyncWorker_2) [custom_components.ready4sky] unable to connect to device
2021-02-01 11:16:19 ERROR (SyncWorker_2) [custom_components.ready4sky] unable to connect to device
2021-02-01 11:16:29 WARNING (SyncWorker_2) [custom_components.ready4sky] five attempts of firstConnect failed
mavrikkk commented 3 years ago

unload error - потому что мозги поменялись. Ему не удалось выгрузить старые элементы, так как ссылка на них уже другая

На время тестов правильно делать так:

  1. удаляем интеграцию (в смысле через настройки удаляем чайники, очистители...).
  2. удаляем файлы интеграции вручную или через hacs.
  3. ставим новую интеграцию вручную или через hacs
  4. подключаем ваши устройства

можно 2 и 3 объединить в пункт - обновляем интеграцию с HACS или вручную. Но все же лучше как я выше написал.

vrslev commented 3 years ago

Работает, спасибо за работу!

Чисто эстетический момент: можно поменять иконки (fan — air-purifier и switch — atom-variant). Также можно поменять «Устройство» на Air Purifier, а модель на RAC-3706S.

Снимок экрана 2021-02-01 в 17 09 22

Пока ничего не придумали, как поступить, если больше одного устройства?

vrslev commented 3 years ago

Немного потестил и выявил проблему. Каждый ~5 раз, когда пытаюсь переключить режим или выключить/включить, режим меняется на нынешний, и он не переключается на нужный мне.

https://user-images.githubusercontent.com/75225148/106472682-f9ee4e00-64b3-11eb-934c-2b4db29df0a4.mov

mavrikkk commented 3 years ago

ничего не понял ни из слов, ни из видео ( Более разжевано. И с логом (если там есть что то)

vrslev commented 3 years ago

Допустим, я хочу выключить очиститель. Выключаю (через HomeKit или фронтенд HA — без разницы), ничего не происходит. То есть сначала очиститель якобы выключается, а через несколько секунд тумблер возвращается в обратное положение. И со второй только попытки у меня получается выключить. На скрине выключаю очиститель, но он не выключается. Ещё раз — теперь сработало: image

mavrikkk commented 3 years ago

теперь понял. А что в логах то пишется в этот момент? потестируйте еще. и скиньте. Заоодно посмотрите, удаляется ли устройство при добавлении второго? и тоже логи

vrslev commented 3 years ago

В логе проблемы с подключением:

2021-02-02 13:07:21 WARNING (SyncWorker_1) [custom_components.ready4sky] five attempts of modeUpdate failed
2021-02-02 13:21:37 WARNING (SyncWorker_2) [custom_components.ready4sky] five attempts of modeFan failed
2021-02-02 13:22:03 WARNING (SyncWorker_0) [custom_components.ready4sky] five attempts of modeOff failed
2021-02-02 13:22:04 WARNING (SyncWorker_3) [custom_components.ready4sky] five attempts of modeUpdate failed
2021-02-02 14:21:19 WARNING (SyncWorker_2) [custom_components.ready4sky] five attempts of modeFan failed
2021-02-02 14:21:19 ERROR (SyncWorker_4) [custom_components.ready4sky] unable to connect to device
2021-02-02 14:21:22 WARNING (SyncWorker_1) [custom_components.ready4sky] five attempts of modeFan failed
2021-02-02 14:21:24 ERROR (SyncWorker_4) [custom_components.ready4sky] unable to connect to device
2021-02-02 14:21:26 WARNING (SyncWorker_0) [custom_components.ready4sky] five attempts of modeFan failed
2021-02-02 14:21:26 WARNING (SyncWorker_4) [custom_components.ready4sky] five attempts of modeUpdate failed
2021-02-02 14:21:34 WARNING (SyncWorker_3) [custom_components.ready4sky] five attempts of modeUpdate failed

Добавил чайник, перезагрузил HA. Очиститель снова удалился и добавился как чайник. image

2021-02-02 15:02:13 ERROR (SyncWorker_2) [custom_components.ready4sky] unable to know the type of device...use default
2021-02-02 15:03:18 ERROR (SyncWorker_8) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:18 ERROR (SyncWorker_8) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:20 ERROR (SyncWorker_8) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:20 ERROR (SyncWorker_8) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:21 ERROR (SyncWorker_8) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:21 WARNING (SyncWorker_8) [custom_components.ready4sky] five attempts of modeUpdate failed
2021-02-02 15:03:27 ERROR (SyncWorker_4) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:28 ERROR (SyncWorker_4) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:28 ERROR (SyncWorker_4) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:28 ERROR (SyncWorker_4) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:29 ERROR (SyncWorker_4) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:29 WARNING (SyncWorker_4) [custom_components.ready4sky] five attempts of modeUpdate failed
2021-02-02 15:03:37 ERROR (SyncWorker_8) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:38 ERROR (SyncWorker_8) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:38 ERROR (SyncWorker_8) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:38 ERROR (SyncWorker_8) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:39 ERROR (SyncWorker_8) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:39 WARNING (SyncWorker_8) [custom_components.ready4sky] five attempts of modeUpdate failed
2021-02-02 15:03:47 ERROR (SyncWorker_6) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:48 ERROR (SyncWorker_3) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:48 ERROR (SyncWorker_3) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:49 ERROR (SyncWorker_3) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:49 ERROR (SyncWorker_3) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:50 ERROR (SyncWorker_3) [custom_components.ready4sky] unable to connect to device
2021-02-02 15:03:50 WARNING (SyncWorker_3) [custom_components.ready4sky] five attempts of modeUpdate failed
mavrikkk commented 3 years ago

по поводу глюков, мне нужно от вас 2 отдельных лога с тлф.

1 лог:

  1. выключаем очиститель, запускаем запись лога и открываем родное приложение.
  2. режимы скорости и ионизации не трогаем!!!
  3. включаем очиститель
  4. ждем 2-3 сек
  5. выключаем очиститель
  6. ждем 2-3 сек
  7. повторяем пункты 3-6 еще 2 раза
  8. останавливаем запись лога

2 лог:

  1. включаем очиститель на любой скорости с режимом ионизации
  2. ПОТОМ запускаем запись лога и родное приложение. Больше не выключаем очиститель.
  3. выключаем ионизацию
  4. ждем 2-3 сек
  5. включаем ионизацию
  6. ждем 2-3 сек
  7. повторяем пункты 3-6 еще 2 раза
  8. переключаем скорость на любую другую
  9. ждем 2-3 сек
  10. повторяем пункты 8-9 еще 2 раза
  11. выключаем очиститель
  12. включаем очиститель
  13. останавливаем запись лога
mavrikkk commented 3 years ago

по поводу отвала мне нужно от вас несколько видом данных: в папке с конфигом HA есть скрытая папка ".storage". Алгоритм такой:

  1. удаляете все интеграции Redmond, перезагружаете HA.

  2. добавляете любую интеграцию (чайник или очиститель)

  3. смотрите содержимое файла "core.config_entries" и ищите там конфиг подключенного устройства

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

  5. смотрите содержимое файла "core.device_registry" и ищите там конфиг подключенного устройства

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

  7. смотрите содержимое файла "core.entity_registry" и ищите там все элементы подключенного устройства

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

  9. добавляете второе устройство

  10. повторяете пункты 3-8, только теперь для двух устройств соответственно.

  11. перезагружаете HA и наблюдаете как одно из устройств отвалилось

  12. повторяете пункты 3-8, копируя все, что осталось

  13. шлете эти файлы сюда

я хочу понять, почему отвал идет, то ли он не туда записывает данные, то ли еще что.

vrslev commented 3 years ago

Логи Bluetooth

Сделал в точности, как вы написали btsnoop_hci-2.log btsnoop_hci-1.log

Файлы из .storage

1. Удалил все интеграции, перезагрузился и добавил очиститель

1_core.config_entries.txt 1_core.device_registry.txt 1_core.entity_registry.txt

2. Добавил чайник

2_core.config_entries.txt 2_core.device_registry.txt 2_core.entity_registry.txt

3. Перезагрузился

3_core.config_entries.txt 3_core.device_registry.txt 3_core.entity_registry.txt

mavrikkk commented 3 years ago

попробуйте обновить версию и проверить отвал. Вроде я нашел, почему оставалось только 1 устройство

Только не забудьте, удалить устройства, удалить интеграцию, перезагрузить HA, обновить, подключить, проверить

vrslev commented 3 years ago

Теперь не добавляются объекты:

2021-02-03 12:46:26 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry cb:77:d2:f5:ad:8c for ready4sky
Traceback (most recent call last):
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/config_entries.py", line 236, in async_setup
result = await component.async_setup_entry(hass, self) # type: ignore
File "/home/homeassistant/.homeassistant/custom_components/ready4sky/__init__.py", line 67, in async_setup_entry
hass.data[DOMAIN][config_entry.entry_id] = kettler
KeyError: 'ready4sky'
2021-02-03 12:47:12 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry f9:ae:7e:b4:9a:a6 for ready4sky
Traceback (most recent call last):
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/config_entries.py", line 236, in async_setup
result = await component.async_setup_entry(hass, self) # type: ignore
File "/home/homeassistant/.homeassistant/custom_components/ready4sky/__init__.py", line 67, in async_setup_entry
hass.data[DOMAIN][config_entry.entry_id] = kettler
KeyError: 'ready4sky'
mavrikkk commented 3 years ago

Это уже лучше )) Обновите и попробуйте добавить 1 устройство...потом 2.

В логах должны быть строки: error('TEST') еще что то error('END TEST')

интересуют эти строки

vrslev commented 3 years ago

Вот, что в логе:

2021-02-03 14:23:58 ERROR (MainThread) [custom_components.ready4sky] TEST
2021-02-03 14:23:58 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry cb:77:d2:f5:ad:8c for ready4sky
Traceback (most recent call last):
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/config_entries.py", line 236, in async_setup
result = await component.async_setup_entry(hass, self) # type: ignore
File "/home/homeassistant/.homeassistant/custom_components/ready4sky/__init__.py", line 68, in async_setup_entry
_LOGGER.error(str(hass.data[DOMAIN]))
KeyError: 'ready4sky'
2021-02-03 14:27:21 ERROR (MainThread) [custom_components.ready4sky] TEST
2021-02-03 14:27:21 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry f9:ae:7e:b4:9a:a6 for ready4sky
Traceback (most recent call last):
File "/srv/homeassistant/homeassistant/lib/python3.9/site-packages/homeassistant/config_entries.py", line 236, in async_setup
result = await component.async_setup_entry(hass, self) # type: ignore
File "/home/homeassistant/.homeassistant/custom_components/ready4sky/__init__.py", line 68, in async_setup_entry
_LOGGER.error(str(hass.data[DOMAIN]))
KeyError: 'ready4sky'
mavrikkk commented 3 years ago

никак не могу поймать значение ((

попробуйте обновить...логи сюда

vrslev commented 3 years ago

Добавил чайник: 2021-02-03 16:20:46 ERROR (MainThread) [custom_components.ready4sky] except Потом добавил очиститель: 2021-02-03 16:21:54 ERROR (MainThread) [custom_components.ready4sky] try

После перезагрузки:

2021-02-03 16:23:12 ERROR (SyncWorker_1) [custom_components.ready4sky] unable to know the type of device...use default
2021-02-03 16:23:20 ERROR (MainThread) [custom_components.ready4sky] except
2021-02-03 16:23:28 ERROR (MainThread) [custom_components.ready4sky] try
mavrikkk commented 3 years ago

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

vrslev commented 3 years ago

Как и раньше. Чайник остался, а очиститель выглядит вот так: image

mavrikkk commented 3 years ago

мы где то рядом ) но удаленная отладка, да еще и не мгновенная - это жесть. попробуйте обновить и проверить )

vrslev commented 3 years ago

Теперь второе устройство не отваливается! Но в логе всё равно появляется информация о использовании дефолтного (хотя по факту всё работает как надо: новые объекты не добавляются, старые не удаляются).

2021-02-03 17:50:10 ERROR (SyncWorker_0) [custom_components.ready4sky] unable to know the type of device...use default
2021-02-03 17:51:11 WARNING (SyncWorker_5) [homeassistant.components.homekit.util] ['01', '02', '03', '04', '05', '06'] does not contain the speed setting off as its first element. Assuming that 01 is equivalent to 'off'
2021-02-03 17:51:26 WARNING (SyncWorker_0) [custom_components.ready4sky] five attempts of modeUpdate failed
2021-02-03 17:51:51 ERROR (SyncWorker_3) [custom_components.ready4sky] unable to connect to device
2021-02-03 17:51:53 WARNING (SyncWorker_6) [custom_components.ready4sky] five attempts of modeFan failed
2021-02-03 17:51:58 WARNING (SyncWorker_4) [custom_components.ready4sky] five attempts of modeOff failed
2021-02-03 17:52:23 WARNING (SyncWorker_0) [custom_components.ready4sky] five attempts of modeFan failed
2021-02-03 17:52:32 WARNING (SyncWorker_1) [custom_components.ready4sky] five attempts of modeUpdate failed

Правильно понимаю, вы ещё не смотрели логи Bluetooth по очистителю?

mavrikkk commented 3 years ago

отлично, что не отваливается!

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

mavrikkk commented 3 years ago

есть еще некоторые мысли, но это уже с компа нужно...с тлф править код - то еще удовольствие.

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

vrslev commented 3 years ago

Без разницы в каком порядке добавляю: сначала очиститель или чайник. И в том, и в другом случае ничего не отваливается 😃

mavrikkk commented 3 years ago

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

vrslev commented 3 years ago

Попробовал. Ошибки нет

mavrikkk commented 3 years ago

я убрал защиту с модуля определения типа...по идее ошибка должна стать намного информативнее и ярче )) попробуйте обновить, подключить 2 устройства, перезагрузить HA и сюда логи пришлите.

vrslev commented 3 years ago

Удалился очиститель 🤔 2021-02-04 09:48:38 ERROR (MainThread) [custom_components.ready4sky] Connect to cb:77:d2:f5:ad:8c through device hci0 failed

mavrikkk commented 3 years ago

это не то. Он не удалился,а не смог подключиться к нему при инициализации. Это собственно и не ошибка. Почему то не удалось подключиться.

2021-02-03 17:51:53 WARNING (SyncWorker_6) [custom_components.ready4sky] five attempts of modeFan failed 2021-02-03 17:51:58 WARNING (SyncWorker_4) [custom_components.ready4sky] five attempts of modeOff failed 2021-02-03 17:52:23 WARNING (SyncWorker_0) [custom_components.ready4sky] five attempts of modeFan failed 2021-02-03 17:52:32 WARNING (SyncWorker_1) [custom_components.ready4sky] five attempts of modeUpdate failed

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

Я убрал защиту только в модуле определения типа устройства, а у вас даже не дошло до этого.

Пробуйте еще

vrslev commented 3 years ago

В логе bluetoothctl очиститель постоянно то подключается, то отключается (это когда очиститель есть в HA)

[CHG] Device CB:77:D2:F5:AD:8C Connected: no
[CHG] Device CB:77:D2:F5:AD:8C Connected: yes
[CHG] Device CB:77:D2:F5:AD:8C Connected: no
[CHG] Device CB:77:D2:F5:AD:8C Connected: yes
[CHG] Device CB:77:D2:F5:AD:8C Connected: no
[CHG] Device CB:77:D2:F5:AD:8C Connected: yes

После перезагрузки HA теперь доступен чайник и в логе ситуация поменялась. Теперь чайник подключается-отключается:

[CHG] Device F9:AE:7E:B4:9A:A6 Connected: yes
[CHG] Device F9:AE:7E:B4:9A:A6 Connected: no
[CHG] Device F9:AE:7E:B4:9A:A6 Connected: yes
[CHG] Device F9:AE:7E:B4:9A:A6 Connected: no
[CHG] Device F9:AE:7E:B4:9A:A6 Connected: yes
[CHG] Device F9:AE:7E:B4:9A:A6 Connected: no
[CHG] Device F9:AE:7E:B4:9A:A6 Connected: yes

Помимо очистителя и чайника на Bluetooth Raspberry Pi у меня повешено 5 датчиков влажности и температуры.

mavrikkk commented 3 years ago

В логе bluetoothctl очиститель постоянно то подключается, то отключается (это когда очиститель есть в HA)

в принципе тут нет ничего криминального. подключение происходит ТОЛЬКО в момент исполнения команд: либо обновление статуса по таймеру, либо когда вы тыкаете какуюнть команду в интерфейсе HA

Помимо очистителя и чайника на Bluetooth Raspberry Pi у меня повешено 5 датчиков влажности и температуры.

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

Однако ж меня все же интересует первоначальная ошибка:

unable to know the type of device...use default

Куда она делась?

vrslev commented 3 years ago

А значение частоты обновления, указанного при первоначальной настройке устройства влияет на процесс инициализации? Я почти всегда ставил 10 секунд.

Датчики температуры и влажности подключены через интеграцию ble_monitor, которая позволяет подключить датчики пассивно. То есть информацию она берёт из пакетов, которые эти датчики посылают — без постоянно подключения к ним.

Попробовал убрать интеграцию с датчиками. Почистил интеграцию, перезагрузился, добавил чайник с очистителем и снова перезагрузился. Результат тот же: один из девайсов отвалился

vrslev commented 3 years ago

Однако ж меня все же интересует первоначальная ошибка:

unable to know the type of device...use default

Куда она делась?

Вы же в последнем коммите закомментили этот кусок кода:

        #except:
             #_LOGGER.error('unable to know the type of device...use default')
mavrikkk commented 3 years ago

Попробовал убрать интеграцию с датчиками. Почистил интеграцию, перезагрузился, добавил чайник с очистителем и снова перезагрузился. Результат тот же: один из девайсов отвалился

Это прям жесть какая то ))

Вы же в последнем коммите закомментили этот кусок кода:

Специально...для того, чтобы вместо unable to know the type of device...use default я получил полноценный exception от самого HA. С кучей строк и тд и тп. И я не понимаю, почему эта ошибка пропала в никуда.

Я так понимаю, что поэтому у вас и отваливается 2 устройство. Первый раз все проходит как надо. А во второй он не может ПОЧЕМУ-ТО определить тип устройства и вылетает. Когда был try except, то он не вылетал, а дефолт возвращал. Вопрос только в том, почему эта ошибка вылета не отобразилась у вас в логе?

mavrikkk commented 3 years ago

Сделайте мне снова вот так:

Файлы из .storage

  1. Удалил все интеграции, перезагрузился и добавил очиститель 1_core.config_entries.txt 1_core.device_registry.txt 1_core.entity_registry.txt

  2. Добавил чайник 2_core.config_entries.txt 2_core.device_registry.txt 2_core.entity_registry.txt

  3. Перезагрузился 3_core.config_entries.txt 3_core.device_registry.txt 3_core.entity_registry.txt

vrslev commented 3 years ago
  1. Удалил интеграции, перезагрузился и добавил очиститель: 1.txt
  2. Добавил чайник: 2.txt
  3. Перезагрузился: 3.txt
mavrikkk commented 3 years ago

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

я видел настоящую асинхронную библиотеку блютус, но она не завелась на hassio (кстати, если есть что на примете - делитесь)

либо делать ее полностью синхронной (тогда возможны подтормаживания интерфейса вплоть до 5 сек, так как ha ждёт завершения команды, чтобы обновить статус)

либо как то разделять их во времени старта и обновления.

mavrikkk commented 3 years ago

кстати, если вы говорите что в ha логе ничего нет, то попробуйте посмотреть в других логах...в частности: HA - supervisor - system. там несколько разных log provider. может там что то всплывает

vrslev commented 3 years ago

Не нашёл никаких других логах нигде. У меня Home Assistant Core (в виртуальной среде Python). Искал в /home/homeassistant и в /srv

vrslev commented 3 years ago

либо как то разделять их во времени старта и обновления.

На мой взгляд это самый лучший вариант в этой ситуации. Но опять же, решать вам :)

Вы изучали, как обстоит ситуация с другими кастомными компонентами сейчас в HA? Имею ввиду именно сейчас, а не когда создавали интеграцию

mavrikkk commented 3 years ago

Вы изучали, как обстоит ситуация с другими кастомными компонентами сейчас в HA?

Мне нужен именно блютус! А все блютус интеграции (неважно родные или сторонние) основаны либо на датчиках (им не нужно команды отдавать, только читать притом 1 командой), либо (например, встроенный в HA Термостат) имеют намного более простую структуру команд (можете посмотреть тут https://github.com/rytilahti/python-eq3bt/tree/master/eq3bt), а редмонд сильно запарился, например запуск вашего очистителя состоит из: коннект; посылка пакета на секретный хендл, иначе чайник не будет никогда ничего отвечать;отправка пароля; получение ответа (авторизоан или нет); отправка команды установки скорости (почему то состоит из двух последовательных команд, поэтому кстати в первый раз скорость не завелась); установка состояния ионизатора;команда включения; команда запроса статуса; чтение ответа статуса (чтобы узнать, что все сработало); дисконнект. Посчитайте количество команд.

Но, кстати, именно у термостата я взял основу (коннекты, коллбеки).

Вот классная библиотека асинхронная (https://pypi.org/project/bleak/), но она не собирается в hassio, только в homeassistant.

С текущей библиотекой есть одна серьезная проблема кроме синхронности:

https://github.com/mavrikkk/ha_kettler/issues/31

https://github.com/IanHarvey/bluepy/issues/239

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

Однако, если у вас есть конкректные предложения и идеи, то велкам.

vrslev commented 3 years ago

Я новичок во всей этой теме, идей нет)

Меня настораживает, что необходимо добавлять интеграцию несколько раз. Нельзя это организовать другим путём? Одна интеграция и несколько устройств. В таком случае можно будет сделать задержку на подключение второго и последующих устройств?

mavrikkk commented 3 years ago

Меня настораживает, что необходимо добавлять интеграцию несколько раз.

Это правильный "нативный" подход HA. Попробуйте, например, добавить интеграцию certificate expire. Для каждого сертификата добавлять заново, что логично: интеграция одна, а устройств несколько и каждое добавляется отдельно.

Одна интеграция и несколько устройств.

Вы наверное хотели сказать одна интеграция (она и так одна), ОДНО устройство и НЕСКОЛЬКО платформ? Это в корне неверный подход, нужно разделять физические устройства, что прямо написано в мануалах HA, посмотрите ту же интеграцию mobile app например.

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

Если все же плюнуть и сделать 1 устройство? Тогда да получится последовательно подключать, ОДНАКО, одно устройство физически невозможно сделать (ну ладно, скорее почти невозможно и очень колхозно, да и громоздкое очень будет, памяти и времени при подключении сожрет очень много), ибо у каждого из них с одной стороны разный, а с другой пересекающийся набор параметров и команд.

vrslev commented 3 years ago

Нет, вы меня не поняли. Одна интеграция, несколько устройств, для каждого устройства свои объекты. Сейчас: по интеграции на каждое устройство