GrKoR / esphome_aux_ac_component

ESPHome component for AUX based air conditioners. Direct wifi control of HVAC by ESPHome and Home Assistant. HVAC status and command feedback are available.
Other
208 stars 50 forks source link
airconditioning esphome hvac hvac-control wifi

Кастомный компонент для ESPHome для управления кондиционером по Wi-Fi

English readme is here.

Управляет кондиционерами на базе AUX по Wi-Fi.
По тексту ниже для компонента используется сокращение aux_ac.

Обсудить проект можно в чате Телеграм.
Отзывы о багах и ошибках, а так же запросы на дополнительный функционал оставляйте в соответствующем разделе. Будет просто отлично, если к своему сообщению вы добавите лог и подробное описание. Для сбора логов есть специальный скрипт на Python. С его помощью вы сможете сохранить в csv-файл все пакеты, которыми обменивается Wi-Fi модуль и сплит-система. Если такой лог дополнить описанием, в какое время и что именно вы пытались включить, то это сильно ускорит исправление багов. Также есть подробная инструкция, описывающая как правильно запросить фичу.

ДИСКЛЭЙМЕР (ОТМАЗКИ)

  1. Все материалы этого проекта (программы, прошивки, схемы, 3D модели и т.п.) предоставляются "КАК ЕСТЬ". Всё, что вы делаете с вашим оборудованием, вы делаете на свой страх и риск. Автор не несет ответственности за результат и ничего не гарантирует. Если вы с абсолютной четкостью не понимаете, что именно вы делаете и для чего, лучше просто купите Wi-Fi модуль у производителя вашего кондиционера.
  2. Я не настоящий сварщик не программер. Поэтому код наверняка не оптимален и плохо оформлен (зато комментариев по коду я разместил от души), местами может быть написан небезопасно. И хоть я и старался протестировать всё, но уверен, что какие-то моменты упустил. Так что отнеситесь к коду с подозрением, ожидайте от него подвоха и если что-то увидели - пишите в багрепорт.

Поддерживаемые кондиционеры

AUX - это один из нескольких OEM-производителей кондиционеров. AUX производят кондиционеры как под собственным брендом, так и для внешних заказчиков. Поэтому есть шанс, что произведенный на их фабрике кондиционер неизвестного бренда с aux_ac так же заработает. В интернете есть такой перечень производившихся на фабриках AUX брендов: AUX, Abion, AC ELECTRIC, Almacom, Ballu , Centek, Climer, DAX, Energolux, ERISSON, Green Energy, Hyundai, IGC, Kentatsu (некоторые серии), Klimaire, KOMANCHI, LANZKRAFT, LEBERG, LGen, Monroe, Neoclima, NEOLINE, One Air, Pioneer (до 2016 года), Roda, Rovex, Royal Clima, SAKATA, Samurai, SATURN, Scarlett, SmartWay, Soling, Subtropic, SUBTROPIC, Supra, Timberk, Vertex, Zanussi. В его полноте и достоверности есть сомнения, но ничего лучше найти не удалось.

Список совместимых (протестированных) кондиционеров

Список протестированных кондиционеров размещен в отдельном файле и включает те модели, на которых aux_ac был запущен автором компонента или пользователями. Этот список постоянно пополняется, преимущественно по обратной связи от пользователей в чате Телеграм.

Если кондиционер в списке отсутствует

Если ваш кондиционер отсутствует в списке протестированных, то это еще не значит, что его не получится подключить к Wi-Fi. Вот основные "звоночки", которые могут говорить о высоких шансах на успех:

  1. Если производитель вашего кондиционера есть в списке протестированных выше, но модели нет.
  2. Если на шильдике кондиционера в строке производитель написано что-то про AUX или Аукс.
  3. Если в инструкции пользователя вашего кондиционера что-то написано про возможность управления по Wi-Fi с помощью мобильного приложения ACFreedom.
  4. Если производитель вашего кондиционера предлагает для управления Wi-Fi модуль CTTM-40X24-WIFI-AKS (слева) или такой, как на фото справа. Причем правый модуль может быть как с USB-разъемом, так и с 5-контактным разъемом.

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

Если вы протестировали ваш кондиционер и он работает, напишите мне, пожалуйста. Я внесу вашу модель в список протестированных. Возможно, это упростит кому-то жизнь =)
Лучший способ сообщить о протестированном кондиционере - написать в телеграм или в разделе багрепортов и заказа фич.

Как использовать компонент

Для работы с кондиционером понадобится "железо" и прошивка. Описание электроники вынесено в отдельный файл.

Прошивка: интеграция aux_ac в вашу конфигурацию ESPHome

Для использования требуется ESPHome версией не ниже 1.18.0. Именно в этой версии появились external_components. Но лучше использовать версию 1.20.4 или старше, так как до этой версии массированно исправлялись ошибки в механизме подключения внешних компонентов.

Установка

  1. Подключите компонент. За подробностями можно заглянуть в официальную документацию ESPHome.
    external_components:
    - source:
      type: git
      url: https://github.com/GrKoR/esphome_aux_ac_component

    Если требуется прошить определенную версию компонента, используйте синтаксис из примера ниже. Здесь прошивается версия 0.2.14. Список версий смотрите в тегах на гитхаб.

    external_components:
    - source:
      type: git
      url: https://github.com/GrKoR/esphome_aux_ac_component
      ref: v.0.2.14
  2. Настройте UART для коммуникации с вашим кондиционером:
    uart:
    id: ac_uart_bus
    # ВНИМАНИЕ! Для TX и RX на платах типа NodeMCU используйте GPIO4 (D2) и GPIO5 (D1)!
    # подробнее см. в документации: https://github.com/GrKoR/esphome_aux_ac_component/blob/master/docs/HARDWARE.md
    tx_pin: GPIO1
    rx_pin: GPIO3
    baud_rate: 4800
    data_bits: 8
    parity: EVEN
    stop_bits: 1
  3. ВАЖНО! Нужно отключить логгер ESPHome, чтобы он не отправлял в кондиционер свои данные. Отключение логгера от UART никак не затронет вывод в лог консоли или web-сервера.
    logger:
    baud_rate: 0

    Если по каким-то причинам вам нужен вывод логгера в UART, можно переключить его на другой UART чипа. Например, у ESP8266 два аппаратных UART: UART0 и UART1. Aux_ac подходит только UART0, поскольку только он у esp8266 имеет и TX и RX. Логгеру достаточно только TX. Такой функционал в чипе esp8266 у UART1:

    logger:
    level: DEBUG
    hardware_uart: UART1

Настройка компонента

Минимальная конфигурация:

climate:
  - platform: aux_ac
    name: "AC Name"

Полная конфигурация:

climate:
  - platform: aux_ac
    name: "AC Name"
    id: aux_id
    uart_id: ac_uart_bus
    period: 7s
    show_action: true
    display_inverted: false
    timeout: 150
    indoor_temperature:
      name: AC Indoor Temperature
      id: ac_indoor_temp
      accuracy_decimals: 1
      internal: false
    outdoor_temperature:
      name: AC Outdoor Temperature
      id: ac_outdoor_temp
      internal: false
    outbound_temperature:
      name: AC Coolant Outbound Temperature
      id: ac_outbound_temp
      internal: false
    inbound_temperature:
      name: AC Coolant Inbound Temperature
      id: ac_inbound_temp
      internal: false
    compressor_temperature:
      name: AC Compressor Temperature
      id: ac_strange_temp
      internal: false
    display_state:
      name: AC Display State
      id: ac_display_state
      internal: false
    defrost_state:
      name: AC Defrost State
      id: ac_defrost_state
      internal: false
    inverter_power:
      name: AC Inverter Power
      id: ac_inverter_power
      internal: false
    inverter_power_limit_value:
      name: AC Inverter Power Limit Value
      id: ac_inverter_power_limit_value
      internal: false
    inverter_power_limit_state:
      name: AC Inverter Power Limit State
      id: ac_inverter_power_limit_state
      internal: false
    preset_reporter:
      name: AC Preset Reporter
      id: ac_preset_reporter
      internal: false
    vlouver_state:
      name: AC Vertical Louvers State
      id: ac_vlouver_state
      internal: false
    visual:
      min_temperature: 16
      max_temperature: 32
      temperature_step: 1
    supported_modes:
      - HEAT_COOL
      - COOL
      - HEAT
      - DRY
      - FAN_ONLY
    custom_fan_modes:
      - MUTE
      - TURBO
    supported_presets:
      - SLEEP
    custom_presets:
      - CLEAN
      - HEALTH
      - ANTIFUNGUS
    supported_swing_modes:
      - VERTICAL
      - HORIZONTAL
      - BOTH

Параметры компонента:

Действия:

aux_ac.display_on

Включение экрана температуры на лицевой панели кондиционера.

on_...:
  then:
    - aux_ac.display_on: aux_id

aux_ac.display_off

Выключение экрана температуры на лицевой панели кондиционера.

on_...:
  then:
    - aux_ac.display_off: aux_id

aux_ac.vlouver_set

Переводит жалюзи в указанное состояние.

Состояние кодируется следующими целочисленными значениями:

on_...:
  then:
    - aux_ac.vlouver_set:
        id: aux_id
        position: 3 # устанавливаем жалюзи в среднее положение

aux_ac.vlouver_stop

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

on_...:
  then:
    - aux_ac.vlouver_stop: aux_id

aux_ac.vlouver_swing

Включение вертикального качания жалюзи кондиционера.

on_...:
  then:
    - aux_ac.vlouver_swing: aux_id

aux_ac.vlouver_top

Установка жалюзи в самое верхнее положение.

on_...:
  then:
    - aux_ac.vlouver_top: aux_id

aux_ac.vlouver_middle_above

Установка жалюзи во второе сверху положение. Это положение между верхним и средним.

on_...:
  then:
    - aux_ac.vlouver_middle_above: aux_id

aux_ac.vlouver_middle

Установка жалюзи в среднее положение.

on_...:
  then:
    - aux_ac.vlouver_middle: aux_id

aux_ac.vlouver_middle_below

Установка жалюзи в положение ниже среднего.

on_...:
  then:
    - aux_ac.vlouver_middle_below: aux_id

aux_ac.vlouver_bottom

Установка жалюзи в самое нижнее положение.

on_...:
  then:
    - aux_ac.vlouver_bottom: aux_id

aux_ac.power_limit_off

Отключает лимит мощности инверторного кондиционера, если такой лимит был установлен.

on_...:
  then:
    - aux_ac.power_limit_off: aux_id

aux_ac.power_limit_on

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

on_...:
  then:
    - aux_ac.power_limit_on:
        id: aux_id
        limit: 46 # ограничивает максимальную мощность инверторного кондиционера на уровне 46%

Простейший пример

Исходный код простейшего примера можно найти в файле aux_ac_simple.yaml.

Все настройки в нем тривиальны и подробно описаны в официальной документации на ESPHome и дополнены в разделе о настройке компонента выше.
Просто скопируйте yaml-файл примера в локальную папку у себя на компьютере, пропишите настройки вашей сети Wi-Fi и откомпилируйте YAML с использованием ESPHome.

Продвинутый пример

Все исходники продвинутого примера лежат в соответствующей папке.

В этом примере мы конфигурируем два относительно одинаковых кондиционера на работу с aux_ac.
Вводные: представим, что у нас есть два кондея, расположенных в кухне и в гостиной. Эти кондиционеры могут и не быть одного бренда. Главное, чтобы они были совместимы с aux_ac.

Поскольку мы ленивы, мы пропишем все общие настройки обоих кондиционеров в общем конфигурационном файле ac_common.yaml.
А все параметры, специфичные для каждого конкретного устройства, вынесем в отдельные файлы. Это файлы ac_kitchen.yaml и ac_livingroom.yaml. В них мы установим значения для подстановок devicename и upper_devicename, чтобы у устройств в сети были корректные имена самого компонента и его сенсоров. И здесь же мы указываем уникальные для каждого устройства IP-адреса, спрятанные в secrets.yaml.
Кстати да! Не забудьте присвоить корректные значения wifi_ip_kitchen, wifi_ota_ip_kitchen, wifi_ip_livingroom и wifi_ota_ip_livingroom в файле secrets.yaml наряду с остальной "секретной" информацией (например пароли, токены и т.п.). Файл secrets.yaml по понятным причинам на гитхаб не выложен.

Если попытаться компилировать файл ac_common.yaml, то ESPHome выдаст ошибку. Для корректной прошивки необходимо компилировать ac_kitchen.yaml или ac_livingroom.yaml.