airens / tion_home_assistant

Custom Tion component for Home Assistant
50 stars 16 forks source link

Не работает с HA 2024.1 #46

Closed AlexeyTorch closed 9 months ago

AlexeyTorch commented 10 months ago

Добрый день. Версия HA: 2024.1 Версия компонента 1.03 включено логгирование:

    custom_components.tion: info
    tion: info

При запуске выбора режима кодом

service: climate.set_fan_mode
target:
  entity_id:
    - climate.tion_bedroom
data:
  fan_mode: 0-3:600

при запуске в логе ошибка:

2024-01-05 09:20:48.962 ERROR (MainThread) [homeassistant.helpers.script.websocket_api_script] websocket_api script: Error executing script. Unexpected error for call_service at pos 1: sequence item 2: expected str instance, int found Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 476, in _async_step await getattr(self, handler)() File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 713, in _async_call_service_step response_data = await self._async_run_long_action( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 675, in _async_run_long_action return long_task.result() ^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/core.py", line 2173, in async_call response_data = await coro ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/core.py", line 2210, in _execute_service return await target(service_call) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 272, in handle_service return await service.entity_service_call( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 882, in entity_service_call single_response = await _handle_entity_call( ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 952, in _handle_entity_call result = await task ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/components/climate/init.py", line 570, in async_handle_set_fan_mode_service self._valid_mode_or_raise("fan", fan_mode, self.fan_modes) File "/usr/src/homeassistant/homeassistant/components/climate/init.py", line 531, in _valid_mode_or_raise modes_str: str = ", ".join(modes) if modes else "" ^^^^^^^^^^^^^^^^ TypeError: sequence item 2: expected str instance, int found 2024-01-05 09:20:48.980 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection] [140717754775872] Error handling message: Unknown error (unknown_error) Alex from 192.168.0.33 (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0) Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/components/websocket_api/decorators.py", line 26, in _handle_async_response await func(hass, connection, msg) File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 782, in handle_execute_script script_result = await script_obj.async_run( ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 1587, in async_run return await asyncio.shield(run.async_run()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 426, in async_run await self._async_step(log_exceptions=False) File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 479, in _async_step self._handle_exception( File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 502, in _handle_exception raise exception File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 476, in _async_step await getattr(self, handler)() File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 713, in _async_call_service_step response_data = await self._async_run_long_action( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 675, in _async_run_long_action return long_task.result() ^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/core.py", line 2173, in async_call response_data = await coro ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/core.py", line 2210, in _execute_service return await target(service_call) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 272, in handle_service return await service.entity_service_call( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 882, in entity_service_call single_response = await _handle_entity_call( ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 952, in _handle_entity_call result = await task ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/components/climate/init.py", line 570, in async_handle_set_fan_mode_service self._valid_mode_or_raise("fan", fan_mode, self.fan_modes) File "/usr/src/homeassistant/homeassistant/components/climate/init.py", line 531, in _valid_mode_or_raise modes_str: str = ", ".join(modes) if modes else "" ^^^^^^^^^^^^^^^^ TypeError: sequence item 2: expected str instance, int found

При этом, выключение командой

service: climate.set_hvac_mode
data:
  hvac_mode: "off"
target:
  entity_id:
    - climate.tion_bedroom

работает штатно

shilin-da commented 10 months ago

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

              - show_name: true
                show_icon: true
                type: button
                tap_action:
                  action: call-service
                  service: climate.set_fan_mode
                  target:
                    entity_id:
                      - climate.bedroom_breezer
                      - climate.nursery_breezer
                      - climate.lounge_breezer
                  data:
                    fan_mode: '2'
ZeBriD commented 10 months ago

Поддерживаю. Установка цифрового значения в fan_mode не работает ни в каком виде с 2024.1 версии

man55 commented 10 months ago

Подтверждаю, всё сломалось.

bisquit2003 commented 10 months ago

доброй ночи. очень ждем правку

ilvi80 commented 9 months ago

То же перестало работать после обновления, ошибки те же.

dandgam commented 9 months ago

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

wayfarer70 commented 9 months ago

При переключении режимов жалуется на то, что сервис ждет str, а не int. Поправил в climate.py fan_mode и fan_modes как было предложено в issue #37 - все заработало.

AlexeyTorch commented 9 months ago

При переключении режимов жалуется на то, что сервис ждет str, а не int. Поправил в climate.py fan_mode и fan_modes как было предложено в issue #37 - все заработало.

это решает проблему частично. да, теперь можно поменять скорость. или поставить режим auto. но нельзя поставить условный "ночной режим" (ограничить скорость в auto), и нельзя в режиме auto управляmь целевыми co2 ( fan_mode: 0-3:600 )

man55 commented 9 months ago

будет решение проблемы?

bisquit2003 commented 9 months ago

будет решение проблемы?

Автора давно не слышно, к сожалению. В тг он так же давно не заходил. Я попросил разработчика интеграции Yaha посмотреть эту проблему (хоть у него тионы и не через magic air добавлены в ха), он планировал заняться этим на выходных. Ну или нам всем путь в есп32, зато локально будет)

airens commented 9 months ago

Ответил в другом issue.

man55 commented 9 months ago

будет решение проблемы?

Автора давно не слышно, к сожалению. В тг он так же давно не заходил. Я попросил разработчика интеграции Yaha посмотреть эту проблему (хоть у него тионы и не через magic air добавлены в ха), он планировал заняться этим на выходных. Ну или нам всем путь в есп32, зато локально будет)

Нет каких-нибудь новостей?

На сколько я понял, в НА нет подобия "целевого СО2" и автор придумал решение через fan_modes, где вместо простого задания скорости, отправлялась строка вида "fan_min-fan_max:target_co2". Но после обновления НА это перестало работать, даже если привести код как в issue https://github.com/airens/tion_home_assistant/issues/37, НА не хочет принимать для fan_mode прежний формат и ничего, кроме предустановленных FAN_OFF, FAN_AUTO или скорости одной цифрой 0-6. Полагаю решение должно быть в виде добавления отдельной переменной(сервиса) типа climate.target_co2, который можно будет отдельно задать в НА. И так же что-то типа fan_min и fan_max. То есть нужно выделить отдельно три этих переменных, которые ранее задавались через составную строку в fan_modes.

ПС. Локально через ЕСП это тоже не решение при наличии MagicAir, так как полностью теряется логика автоматического управления бризером по целевому СО2, разве-что автоматизациями потом городить огород...

ПС2. Откатиться уже тоже не вариант, после последней резервной копии было много разных изменений по устройствам и автоматизациям и я совсем не готов переделывать это всё заново ((((.

RealLord commented 9 months ago

Спасибо за подсказку, после изменения кода как в #37 почти все заработало и смог перенастроить под свои нужны. Сейчас хотя бы нет ошибки, можно через автоматизацию объекта климат задать скорость потока и вкл/выкл обогрев. Но не нашел нигде в объекте климат как включить тип воздухозабора на улицу или квартиру или смешанный. Но так как у меня все время с улицы, то это вроде как не критично пока. Согласен что надо делать доработку объекта под CO2 и тип забора воздуха.

@airens Спасибо большое за Ваш труд по интеграции! Давно пора у компании ТИОН цистерну молока затребовать.

man55 commented 9 months ago

Но не нашел нигде в объекте климат как включить тип воздухозабора на улицу или квартиру или смешанный.

И не найдешь. Нет отдельного управления для заслонки, так же как и для целевого уровня со2, мин и макс скорости кулера в авторежиме. Автор прикрутил это через костыль, путём задания сложной составной строки для fan_mode, типа "1-4:700".. После обновления НА перестал принимать такую строку для fan_mode, который теперь может принимать только заранее определённые значения (ON, OFF, 1, 2, 3... 7), а не произвольную строку. Исправить это можно только путём ввода новых сервисов для управления заслонкой, мин и макс скоростью, целевым СО2, после чего в НА появяться отдельные entity.

RealLord commented 9 months ago

Сделал pull request сюда в репу чтобы решить проблему со строкой и типом воздухозабора. Добавить отдельный тип СО2 пока непонятно как, такого типа нет в объекте Climate и добавить кастомные свойства нельзя вроде как. Пока смотрю на тему сделать управления через свойство влажность (humidity), там вроде как есть все нужные свойства.

Так как автор пока недоступен и не может одобрить pull request, предлагаю кто хочет потестить, скачать и заменить себе 2 файла climate.py и sensor.py Вот ссылка на мой репозиторий с последней версией. У меня корректно отработал 1 день и по тестам погонял вручную как из GUI так и из скрипта. https://github.com/RealLord/tion_home_assistant/tree/master/custom_components/tion

Фото как выглядит в интерфейсе НА https://disk.yandex.ru/i/lb9jJ6qdrHUluA

AlexeyTorch commented 9 months ago

Добавить отдельный тип СО2 пока непонятно как, такого типа нет в объекте Climate и добавить кастомные свойства нельзя вроде как.

Для zigbee термоголовок сделан стандартный объект класса климат, и переменные которых нет в стандарте (например local_temperature_calibration ) так что вероятно кастомные свойства возможны. но не с моими знаниями python