tion_home_assistant icon indicating copy to clipboard operation
tion_home_assistant copied to clipboard

Атрибуты fan_mode/fan_modes должны быть строками

Open dext0r opened this issue 2 years ago • 4 comments

На данный момент компонент использует не совсем корректные типы данных в атрибутах fan_mode (float) и fan_modes (смесь из int/str).

Согласно коду Home Assistant в этих атрибутах должны быть исключительно строки: https://github.com/home-assistant/core/blob/b8613ec09d71a582d32d30d9c5e8f32955a21c39/homeassistant/components/climate/init.py#L215-L216

Из-за int/float страдают компоненты:

  1. Yandex Smart Home: неможет определить текущий режим работы вентилятора, потому что ожидает увидеть в fan_mode строку
  2. Google Assistant: fan_mode передаётся "как есть" в currentFanSpeedSetting, который должен быть строкой: https://github.com/home-assistant/core/blob/d62bdbb9ffa035d5246f3d54619640f4e5616b4f/homeassistant/components/google_assistant/trait.py#L1473-L1475

dext0r avatar Dec 06 '22 10:12 dext0r

Что вы предлагаете? Home assistant не знает про такое устройство, как бризер

airens avatar Dec 14 '22 14:12 airens

Что вы предлагаете? Home assistant не знает про такое устройство, как бризер

Возвращать в fan_mode и fan_modes только строки. Грубо говоря:

--- climate.py.orig	2022-12-15 08:01:48
+++ climate.py	2022-12-06 11:45:57
@@ -104,9 +104,9 @@
             return FAN_AUTO
         elif not self._breezer.is_on:
             return FAN_OFF
         else:
-            return self._breezer.speed
+            return str(int(self._breezer.speed))

     @property
     def fan_modes(self):
         """Return the list of available fan modes."""
@@ -115,9 +115,9 @@
             _fan_modes.extend(range(0, int(self._breezer.speed_limit) + 1))
         except Exception as e:
             _fan_modes.extend(range(0, 7))
             _LOGGER.info(f"breezer.speed_limit is \"{self._breezer.speed_limit}\", fan_modes set to 0-6")
-        return _fan_modes
+        return [str(m) for m in _fan_modes]

     def set_temperature(self, **kwargs):
         """Set new target temperature."""
         if ATTR_TEMPERATURE in kwargs:

dext0r avatar Dec 15 '22 05:12 dext0r

Пользуюсь интеграцией tion_home_assistant для управления бризерами из Алисы. Страдаю из-за того, что изменения скорости вентилятора из ХА не отображаются в Алисе (Умном доме Яндекса). Как раз из-за несовпадения передаваемых и ожидаемых типов.

С правками из комментария выше скорость вентилятора начинает обновляться. Но нет возможности использовать пресеты (возникает ошибка).

i2r avatar Jan 26 '23 07:01 i2r

Обновил компонент, вроде все что хотел сделал. Описание: https://github.com/RealLord/tion_home_assistant У меня 5 бризеров дома, в кабинетах, в спальне, в гостинной. Все работает стабильно, на 3S/4S.

4 бризера работают по пресету:

два по SLEEP в спальнях в 21:00 два в кабинетах по пресету ACTIVITY в 08:00 Один по CO2 от Air Magic в гостиной по скрипту, который раз в минуту запускается, определяет СО2 и выставляет скорость вентилятора.

RealLord avatar Jan 24 '24 17:01 RealLord