tion_home_assistant
tion_home_assistant copied to clipboard
Перестала правильно работать служба управления вентилятором set_fan_mode
При вызове службы управления вентилятором climate.set_fan_mode происходит ошибка, когда в качестве параметра заданы диапазоны скорости и/или CO (вообще при наличии любых чисел в тексте параметра), например 2-4:800:
- service: climate.set_fan_mode
metadata: {}
data:
fan_mode: 2-4:800
target:
entity_id: climate.tion_breezer_4s_1
Службу вызываю из автоматизации, созданной в графическом интерфейсе. Даже без выполнения всей автоматизации, просто при запуске одного блока вручную прямо из графического редактора автоматизации, вылезает окно "Ошибка при выполнении действия Unknown error".
Если в fan_mode задано "auto" или "off", то срабатывает правильно. Во всех остальных случаях пишет, что ожидается str, а найден int. Раньше работало, но в какой-то момент перестало, заметил с месяц назад. При попытке вызова службы set_fan_mode в логе выскакивает сразу две ошибки:
2024-01-15 12:34:15.309 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 2149, in async_call
response_data = await coro
^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/core.py", line 2186, 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 565, 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 526, in _valid_mode_or_raise
modes_str: str = ", ".join(modes) if modes else ""
^^^^^^^^^^^^^^^^
TypeError: sequence item 2: expected str instance, int found
2024-01-15 12:34:15.324 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection] [139681795744064] Error handling message: Unknown error (unknown_error) Сергей from 172.16.0.1 (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 YaBrowser/23.11.0.0 Safari/537.36)
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 2149, in async_call
response_data = await coro
^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/core.py", line 2186, 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 565, 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 526, in _valid_mode_or_raise
modes_str: str = ", ".join(modes) if modes else ""
^^^^^^^^^^^^^^^^
TypeError: sequence item 2: expected str instance, int found
Пробовал задавать значение по всякому, и в кавычках, и через | и >-, и даже так - {{ ("2-4:800")|string }}, безрезультатно.
Бризер Тион 4S. Версия компонента c055732 (1.03) Core 2024.1.3 Supervisor 2023.12.0 Operating System 11.4
Это ошибка в HomeAssistant Core в версии 2024.01.хх Вот описание проблемы не только с Тионом https://github.com/home-assistant/core/issues/107633
Это ошибка в HomeAssistant Core в версии 2024.01.хх Вот описание проблемы не только с Тионом home-assistant/core#107633
В HomeAssistant Core ошибок нет, они просто в этой версии привели тип данных к обязательному str. Об этом писали тут еще в декабре 2022: https://github.com/airens/tion_home_assistant/issues/37 На стороне HA это поправлено не будет, надо править интеграцию.
Но я согласен с airens, https://github.com/airens/tion_home_assistant/issues/47#issuecomment-1890846214 вообще непонятно, как теперь передать в бризер целевой уровень CO2 и ограничения по скорость (1-2, например), если согласно спецификации fan_modes должны быть предустановлены заранее.
Наверное, только городить input_number'ы для целевого CO2 и типа приточки (дом, улица, смешанный), и еще input_text для режимов работы вентилятора с ограничениями ("1-3").
А в fan_mode и fan_modes оставить жесткие режимы (0,1,2,3,4,5, auto, off) для того, чтобы в другие системы (в умный дом яндекса и гугл) улетало то, что они способны увидеть, а также, чтобы можно было через стандартную карточку включить этот жесткий режим. Ну и увидеть текущий.
Вот тут еще похожее предложение писали: https://github.com/airens/tion_home_assistant/issues/46#issuecomment-1892000281
В общем, есть предложение, как переделать модуль для работы по CO2. Я пока остановился на том, чтобы сделать:
- Управление воздухозабором через swing_modes: например swing_horisontal = outside, swing_vertical = inside, swing_both = mixed
- Управление CO2 можно уже сейчас делать через разные скрипты, текущий уровень CO2 уже есть в переменных. Его можно получить и обработать в НА. Переменная например: sensor.magicair_co2
- Часть режимов можно сделать через PRESET_MODE: SLEEP, ACTIVITY, BOOST и т.п. там их 7 штук. Можно задать типовые варианты сразу в коде.
Например у меня все 5 бризеров работают всего в 2-х режимах, и у знакомы тоже так же. В спальне, включаем с 20:00 и до 08:00 на 1 скорость. Например режим PRESET_SLEEP В гостиной и кабинете, включаем с 08:00 до 21:00 на 2 скорость. Например режим PRESET_ACTIVITY
Написать типовой скрипт несложно: Получили текущее значение CO2 в НА, выставили нужную скорость через службу.
Обновил компонент, вроде все что хотел сделал. Описание: https://github.com/RealLord/tion_home_assistant У меня 5 бризеров дома, в кабинетах, в спальне, в гостинной. Все работает стабильно, на 3S/4S.
4 бризера работают по пресету:
- два по SLEEP в спальнях в 21:00
- два в кабинетах по пресету ACTIVITY в 08:00
Один по CO2 от Air Magic в гостиной по скрипту, который раз в минуту запускается, определяет СО2 и выставляет скорость вентилятора.
Один по CO2 от Air Magic в гостиной по скрипту, который раз в минуту запускается, определяет СО2 и выставляет скорость вентилятора
приветствую, покажите, пожалуйста, скрипт ПС: как же нам усложнили жизнь, как прекрасно жилось с целевой уставкой типа 1-4:800
Уточню, там не скрипт, а 4 типовые автоматизации, неправильно выразился. Руки пока не доходят собрать из них скрипт с условиями скорости в зависимости от CO2 .
description: "Кабинет TION СО2 500-600"
mode: single
trigger:
- platform: time_pattern
minutes: "5"
condition:
- condition: numeric_state
entity_id: sensor.magicair_co2
above: 500
below: 600
action:
- service: climate.set_fan_mode
target:
entity_id: climate.tion_breezer_3s_2_2
data:
fan_mode: "2"
description: "Кабинет TION СО2 600-700"
mode: single
trigger:
- platform: time_pattern
minutes: "5"
condition:
- condition: numeric_state
entity_id: sensor.magicair_co2
above: 601
below: 700
action:
- service: climate.set_fan_mode
target:
entity_id: climate.tion_breezer_3s_2_2
data:
fan_mode: "3"
description: "Кабинет TION СО2 700-800"
mode: single
trigger:
- platform: time_pattern
minutes: "5"
condition:
- condition: numeric_state
entity_id: sensor.magicair_co2
above: 701
below: 800
action:
- service: climate.set_fan_mode
target:
entity_id: climate.tion_breezer_3s_2_2
data:
fan_mode: "4"
description: "Кабинет TION СО2 900+"
mode: single
trigger:
- platform: time_pattern
minutes: "5"
condition:
- condition: numeric_state
entity_id: sensor.magicair_co2
above: 901
action:
- service: climate.set_fan_mode
target:
entity_id: climate.tion_breezer_3s_2_2
data:
fan_mode: "6"
У меня бризеры включены почти все время, поэтому реально скорость выше 3 не поднимается вообще.
Уточню, там не скрипт, а 4 типовые автоматизации, неправильно выразился. Руки пока не доходят собрать из них скрипт с условиями скорости в зависимости от CO2 .
https://pastebin.com/raw/t71fex2e спасибо, накидал скрипт и одна автоматизация, в которой триггер - любое изменение датчика со2 из скрипта действие - запуск скрипта принимаю критику по значениям уровня со2) Зы: в условиях везде кроме 0 скорости - сигнализация, чтоб оно по итогу просто выключило бризер
Обновил компонент, вроде все что хотел сделал.
Простите, не знаю как в вашем форке отписаться. Не очень понимаю как режим вентилятора бризера auto работает. Пытаюсь его выбрать, он либо сбрасывается на предыдущий числовой, либо выключает бризер (закономерность не понял, проверял на низком уровне со2 около 550, целевая 800) Так же у вас пресеты в форке описаны, но ха их не понимает и просит другие (в целом ха пишет какие, поэтому это не доставило проблем, а потом я от пресетов отказался в принципе)
Напишите в телегу @Dmitry_Durandin И проверьте пожалуйста, последняя ли у Вас версия с моего форка.
Уточню, там не скрипт, а 4 типовые автоматизации, неправильно выразился. Руки пока не доходят собрать из них скрипт с условиями скорости в зависимости от CO2 .
https://pastebin.com/raw/t71fex2e спасибо, накидал скрипт и одна автоматизация, в которой триггер - любое изменение датчика со2 из скрипта действие - запуск скрипта принимаю критику по значениям уровня со2) Зы: в условиях везде кроме 0 скорости - сигнализация, чтоб оно по итогу просто выключило бризер
посмотрел код. сразу вопросы- показатели CO2 это 0,01% CO2 в воздухе. считается что воздухе (если вы не в оранжерее где растения активно поглощают углекислый газ его содержание 4% - 400). у вас первое условие - выключить бризер при CO2 <350. Как такое может быть?
посмотрел код. сразу вопросы- показатели CO2 это 0,01% CO2 в воздухе. считается что воздухе (если вы не в оранжерее где растения активно поглощают углекислый газ его содержание 4% - 400). у вас первое условие - выключить бризер при CO2 <350. Как такое может быть?
я думаю чо датчик подвирает, потому что меньше 400 показывает изредка. в отпуске были, показывал 269. понимаю что фантастика
@RealLord к сожалению у Вас похоже запрещено создавать Issues в проекте, или я не нашёл где быть первым :(
подскажите, может я что-то не так делаю. в NodeRed пытаюсь передать "авто" следующим образом: msg.payload = { data: { "fan_mode": "auto" } } в Call Services. Нода говорит что всё ок, команда прошла. но бризер не переводится в Авто Режим. Проверил в приложении от тионов. Хотя если той же строкой передать цифру или off - то всё отлично отрабатывает.
Если я пытаюсь обоготить строку добавив target_co2: msg.payload = { data: { "fan_mode": "auto","target_co2":"800" } } то получаю ошибку: "HomeAssistantError: extra keys not allowed @ data['target_co2']"
Возможно я что-то не учитываю? Раньше достаточно было передать просто "авто", теперь похоже что-то изменилось, но я ни как не пойму что.
чуть уточню: мне не нужно передавать бризеру параметры по моей задумке. мне просто нужно включить его в Авто режим, чтобы он настройки взял из тех, что у него были настроены в приложении. раньше это работало просто через передачу "auto"
заранее спасибо за помощь :)
@RealLord к сожалению у Вас похоже запрещено создавать Issues в проекте, или я не нашёл где быть первым :(
подскажите, может я что-то не так делаю. в NodeRed пытаюсь передать "авто" следующим образом: msg.payload = { data: { "fan_mode": "auto" } } в Call Services. Нода говорит что всё ок, команда прошла. но бризер не переводится в Авто Режим. Проверил в приложении от тионов. Хотя если той же строкой передать цифру или off - то всё отлично отрабатывает.
Если я пытаюсь обоготить строку добавив target_co2: msg.payload = { data: { "fan_mode": "auto","target_co2":"800" } } то получаю ошибку: "HomeAssistantError: extra keys not allowed @ data['target_co2']"
Возможно я что-то не учитываю? Раньше достаточно было передать просто "авто", теперь похоже что-то изменилось, но я ни как не пойму что.
чуть уточню: мне не нужно передавать бризеру параметры по моей задумке. мне просто нужно включить его в Авто режим, чтобы он настройки взял из тех, что у него были настроены в приложении. раньше это работало просто через передачу "auto"
заранее спасибо за помощь :)
переходите на проект esp_tion. Стоимость «флешки» 1500₽ и получите локальный бризер
переходите на проект esp_tion. Стоимость «флешки» 1500₽ и получите локальный бризер
спасибо. интересный проект. буду за ним так же следить. но в данный момент он не поможет мне решить мою задачу с автоматическим режимом - он в нём пока ещё не реализован. а базовый функционал у меня и сейчас работает. подождём, посмотрим что у них получится со временем.
переходите на проект esp_tion. Стоимость «флешки» 1500₽ и получите локальный бризер
спасибо. интересный проект. буду за ним так же следить. но в данный момент он не поможет мне решить мою задачу с автоматическим режимом - он в нём пока ещё не реализован. а базовый функционал у меня и сейчас работает. подождём, посмотрим что у них получится со временем.
Реализован сторонним разработчиком, у меня работает. И автор проекта обещает в скором времени релиз с авто режимом
буду за ним так же следить. но в данный момент он не поможет мне решить мою задачу с автоматическим режимом - он в нём пока ещё не реализован
Ну как как мы говорим про интеграции в HA то для ESP HOME есть как минимум два варианта автоматизации.
- Полностью автоматический режим внутри ESP, когда из HA берутся показания внешнего датчика CO2,
- с помощью template sensor, в котором описывается скорость, в зависимости о времени суток и внешнего co2, и автоматизации реагирующей на этот template
Да, Вы правы, не заметил что issue не включены. Включил и добавил еще обсуждения. По поводу Авто, все оказалось не просто. В текущей версии на сайте действительно Авто режим не работает. Планирую в эти выходные выложить новую версию, где режим Авто реально будет работать.
К сожалению, пока не смог придумать никакого способа нормально сделать изменение target_co2. В текущей реализации объекта Climate просто нет никаких доступных методов указать СО2. Я уже пару недель думаю над этим вопросом, пока кроме пары пресетов AUTO (speed=1:6, target_co2=800) и COMFORT (speed=1:4, target_co2=600) ничего придумать не смог. Нельзя в текущей организации HomeAssistant добавлять методы и задавать переменные. Свойства - можно сколько угодно, а вот методы жестко заданы в Объекте Climate НА.
Для интересующихся, вот ссылка на описание объекта Climate https://developers.home-assistant.io/docs/core/entity/climate/
Для интересующихся, вот ссылка на описание объекта Climate https://developers.home-assistant.io/docs/core/entity/climate/
а мы не можем как то сначала преднастраивать бризер через параметры, а только потом пытаться включить его через климат в авто режим? в НодРеде это решалось бы через 2 итерации. но это и не проблема. как бы это выглядило в ХА - не знаю, давно ушёл в ноду, уже и забыл как там всё в жинже пишется.
Выкатил релиз 1.06 https://github.com/RealLord/tion_home_assistant/blob/master/CHANGELOG.md
а мы не можем как то сначала преднастраивать бризер через параметры, а только потом пытаться включить его через климат в авто режим? в НодРеде это решалось бы через 2 итерации. но это и не проблема. как бы это выглядило в ХА - не знаю, давно ушёл в ноду, уже и забыл как там всё в жинже пишется.
Здесь примерно то же самое, вот чем можно управлять:
- источник воздуха через swing_mode
- скорость вентилятора через fan_mode (здесь же режим авто)
- обогреватель ON/OFF через HVACMode (OFF, HEAT, FAN_ONLY)
Порядок управления не имеет значения. Но самое простое включение через пресет и потом если надо, дополнительно регулировка необходимого параметра.
предлагаю перенести дискуссию с идеей по включению в проект: https://github.com/RealLord/tion_home_assistant/discussions/3
Выкатил релиз 1.06 https://github.com/RealLord/tion_home_assistant/blob/master/CHANGELOG.md
а мы не можем как то сначала преднастраивать бризер через параметры, а только потом пытаться включить его через климат в авто режим? в НодРеде это решалось бы через 2 итерации. но это и не проблема. как бы это выглядило в ХА - не знаю, давно ушёл в ноду, уже и забыл как там всё в жинже пишется.
Здесь примерно то же самое, вот чем можно управлять:
- источник воздуха через swing_mode
- скорость вентилятора через fan_mode (здесь же режим авто)
- обогреватель ON/OFF через HVACMode (OFF, HEAT, FAN_ONLY)
Порядок управления не имеет значения. Но самое простое включение через пресет и потом если надо, дополнительно регулировка необходимого параметра.
Здравствуйте!
Можно ли как-то сделать кастомизацию ваших пресетов на локальной установке? Я могу подправить код под себя прямо в файле, но это неправильный путь. Мне нужно создать пресеты под свои условия, там несколько другие значения СО2 и скорости потока. Буду благодарен за совет!