airens / tion_home_assistant

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

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

Open dext0r opened 1 year ago

dext0r commented 1 year ago

На данный момент компонент использует не совсем корректные типы данных в атрибутах 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
airens commented 1 year ago

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

dext0r commented 1 year ago

Что вы предлагаете? 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:
i2r commented 1 year ago

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

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

RealLord commented 7 months ago

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

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

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