2021-04-22 22:50:34 +03:00
2021-04-20 23:21:32 +03:00
2021-04-22 22:50:34 +03:00
2021-04-22 15:53:11 +03:00
2021-04-22 22:05:06 +03:00
2021-04-20 21:27:43 +03:00
2021-04-22 15:55:54 +03:00
2021-04-22 21:29:20 +03:00

Компонент для ESPHome.

Readme in english is here.

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

Обсудить проект можно в чате Телеграм.

Отзывы о багах и ошибках, а так же запросы на дополнительный функционал оставляйте в соответствующем разделе.

ДИСКЛЭЙМЕР

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

Общее описание

Этот кастомный компонент для ESPHome позволяет управлять по wifi кондиционером, сделанным на фабриках AUX.

Прошивка тестировалась с ESPHome 1.15.3 и сплит-системой Rovex серии ALS1. Скорее всего многие другие кондиционеры разных брендов, так же произведенные на фабриках AUX, могут управляться aux_ac без переделок. Но это не точно :)

По понятным причинам протестирован ограниченный перечень кондиционеров. Полный перечень протестированных кондиционеров приведен в списке ниже.

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

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

Приведенные ниже в списке кондиционеры были протестированы автором aux_ac или пользователями. И у нас все функции работали.

Отсутствие вашего кондиционера в списке не говорит о том, что aux_ac с ним не работает. Но и присутствие названия в списке протестированных тоже не даёт никакой гарантии, так как тест проводится такими же пользователями компонента, как и вы.

Проведенное автором или пользователями тестирование может не включать какие-то функции по причине их отсутствия в кондиционере тестировщика. Но как минимум присутствие вашего кондиционера в списке протестированных позволяет говорить, что у кого-то из пользователей компонента своим кондиционером этого бренда управлять получилось. Так что с должной осмотрительностью можно пробовать запускать у себя.

Протестированы:

  • Rovex (models: ALS1)

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

НЕ ТЕСТИРОВАЛИСЬ! ИСПОЛЬЗУЙТЕ КОМПОНЕНТ НА СВОЙ СТРАХ И РИСК! AUX - это один из нескольких OEM-производителей кондиционеров. AUX производят кондиционеры как под собственным брендом, так и для внешних заказчиков. Поэтому есть шанс, что произведенный на их фабрике кондиционер неизвестного бренда с aux_ac так же заработает. В интернете есть такой перечень производившихся на фабриках AUX брендов:

  • AUX
  • Abion
  • AC ELECTRIC
  • Almacom
  • Ballu
  • CENTEK
  • Energolux
  • ERISSON
  • Green Energy
  • Hyundai
  • Kentatsu (некоторые серии)
  • Klimaire
  • KOMANCHI
  • LANZKRAFT
  • LEBERG
  • Monroe
  • Neoclima
  • NEOLINE
  • Pioneer (до 2016 года)
  • Roda
  • Royal Clima
  • SAKATA
  • SATURN
  • Scarlett
  • SmartWay
  • SUBTROPIC
  • Supra
  • Vertex
  • Zanussi

Если производитель вашего кондиционера есть в списке выше, то стоит изучить вопрос. Возможно, вам тоже подойдет aux_ac для управления по wifi.

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

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

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

Железо

Я тестировал проект на esp8266 (esp-12e). Минимальная обвязка традиционная и выглядит так:

scheme

Для прошивки esp8266 в первый раз нужно в дополнение к обвязке, показанной на схеме выше, притянуть к Земле пин IO0 (GPIO0). После этого ESPHome может быть загружена в esp8266 по UART0. Если при этом вы указали OTA в конфигурации ESPHome, то в дальнейшем пин IO0 можно подтянуть к питанию или оставить висеть в воздухе. Он никак не будет влиять на загрузку новых прошивок, потому что все апдейты можно будет делать "по воздуху" (то есть по wifi). Я никуда IO0 не подтягивал и ничего к нему не паял, потому что не вижу смысла это делать ради одного раза. Первую прошивку делал в самодельном переходнике на макетке.

Плата esp-12e перед подключением кондиционера и модуля питания:

esp-12e minimal photo

Внутренний блок сплит-системы имеет 5-проводное подключение к модулю wifi. Коннектор JST SM.

Перечень проводников:

  1. Желтый: +14В постоянного тока. Осциллограф показал от +13.70В до +14.70В. В сервисном мануале встречалось, что питание возможно до +16В.
  2. Черный: земля.
  3. Белый: +5В постоянного тока (измерено от +4.43В до +5.63В). Для чего нужна эта линия - не понятно. У меня нет версий. Эксперименты с родным wifi-модулем сплит-системы показали, что эта линия в работе wifi не участвует. Линия идет напрямую на ножку контроллера в сплите через резистор 1 кОм.
  4. Синий: TX кондиционера. Высокий уровень +5В.
  5. Red: RX кондиционера. Высокий уровень +5В.

Для питания ESP8266 можно использовать любой подходящий DC-DC преобразователь. Я использовал такой:

power module.

Подключение: Черный провод (земля) подключается к земле DC-DC преобразователя и к пину GND модуля ESP8266. Желтый провод подключается ко входу DC-DC преобразователя (в моём случае контакт Vin). Синий провод подключается к пину RXD модуля esp-12e. Красный провод подключается к пину TXD модуля esp-12e.

Вот схема всех соединений:

connections

Вот так это выглядит внутри самодельного корпуса:

module assembled

Поскольку у меня не было под рукой коннекторов JST SM, а ехать искать их не хотелось, я сделал свой собственный из стандартных пинов с шагом 2,54 мм и нескольких напечатанных на 3D-принтере деталей:

JST SM connector replica.

Все относящиеся к проекту модели для 3D-принтера также доступны: STL-файлы коннектора, модельки частей корпуса.

Конечный результат:

photo 1

photo 2

photo 3

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

  1. Скопируйте файл aux_ac_custom_component.h в папку с вашими YAML-файлами ESPHome.
  2. В заголовочной части вашего YAML-файла пропишите инструкцию include. Например:
esphome:
  name: $devicename
  platform: ESP8266
  board: esp12e
  includes:
    - aux_ac_custom_component.h
  1. Настройте UART для коммуникации с вашим кондиционером:
uart:
  id: ac_uart_bus
  tx_pin: GPIO1
  rx_pin: GPIO3
  baud_rate: 4800
  data_bits: 8
  parity: EVEN
  stop_bits: 1
  1. У ESP8266 два аппаратных UART: UART0 и UART1. Нам подходит только UART0, поскольку только он имеет и TX и RX. Поэтому в секции uart: выше мы настроили UART0 для нужд aux_ac. Но на том же УАРТе сидит и logger. Чтобы не было коллизий, настраиваем логгер на работу с UART1, у которого есть только TX, чего для нужд логгера более чем достаточно:
logger:
    level: DEBUG
    # important: for avoiding collisions logger works with UART1 (for esp8266 tx = GPIO2, rx = None)
    hardware_uart: UART1
  1. Последний шаг - объявление кастомного компонента:
climate:
- platform: custom
  lambda: |-
    extern AirCon acAirCon;
    if (!acAirCon.get_initialized()) acAirCon.initAC(id(ac_uart_bus));
    App.register_component(&acAirCon);
    return {&acAirCon};
  climates:
    - name: "My awesome air conditioner"

Пример использования

Файлы ac_common.yaml, ac_kitchen.yaml и ac_livingroom.yaml иллюстрируют стандартный способ использования компонента aux_ac. Причем для случая, когда у нас в доме два кондиционера, управляемых aux_ac: один расположен в кухне, второй - в гостиной.

ac_common.yaml содержит общую для двух кондиционеров часть конфигурации.

ac_kitchen.yaml и ac_livingroom.yaml содержат уникальные для каждого кондиционера настройки: IP-адреса, названия устройств и т.п.

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

Дополнительная функциональность

Компонент aux_ac предоставляет три дополнительных сенсора: два значения температуры и один номер версии прошивки.

Комнатная температура

Этот сенсор отдает значения комнатной температуры воздуха с внутреннего блока кондиционера. Если значение этого датчика вам нужно, пропишите подобную конфигурацию сенсора в вашем YAML-файле:

sensor:
  - platform: custom
    lambda: |-
      extern AirCon acAirCon;
      if (!acAirCon.get_initialized()) acAirCon.initAC(id(ac_uart_bus));
      App.register_component(&acAirCon);
      return {acAirCon.sensor_ambient_temperature};
    sensors:
    - name: AC ambient temperature
      unit_of_measurement: "°C"
      accuracy_decimals: 1

Уличная температура

К сожалению, пока этот сенсор показывает погоду на Марсе =) Значение, обрабатываемое aux_ac для нужд этого сенсора точно как-то связано с уличной температурой, но полностью расшифровка значения не известна. Есть предположение, что это температура испарителя во внешнем блоке, потому что при переключении кондиционера с обогрева на охлаждение или обратно эта температура стремительно меняется. А при выключенном кондиционере в течение суток меняется похожим на уличную температуру образом. Однако всё это при теплой погоде на улице. При отрицательной температуре показывает одно и то же значение. По крайней мере при температурах в диапазоне -25..-19 градусов Цельсия.

В общем, для расшифровки надо собрать больше статистики и коллективно подумать в чатике.

Если несмотря на сказанное вам нужно это значение в ESPHome, пропишите следующий сенсор в конфигурации:

sensor:
  - platform: custom
    lambda: |-
      extern AirCon acAirCon;
      if (!acAirCon.get_initialized()) acAirCon.initAC(id(ac_uart_bus));
      App.register_component(&acAirCon);
      return {acAirCon.sensor_outdoor_temperature};
    sensors:
    - name: AC outdoor temperature
      unit_of_measurement: "°C"
      accuracy_decimals: 1

Обе температуры одновременно

Возможно прописать конфигурацию обоих сенсоров в одном определении:

sensor:
  - platform: custom
    lambda: |-
      extern AirCon acAirCon;
      if (!acAirCon.get_initialized()) acAirCon.initAC(id(ac_uart_bus));
      App.register_component(&acAirCon);
      return {acAirCon.sensor_outdoor_temperature, acAirCon.sensor_ambient_temperature};
    sensors:
    - name: AC outdoor temperature
      unit_of_measurement: "°C"
      accuracy_decimals: 1
    - name: AC ambient temperature
      unit_of_measurement: "°C"
      accuracy_decimals: 1

Версия прошивки

Компонент aux_ac предоставляет информацию о своей версии в виде текстового сенсора. Соответствующая конфигурация показана ниже:

text_sensor:
- platform: custom
  lambda: |-
    auto aircon_firmware_version = new AirConFirmwareVersion();
    App.register_component(aircon_firmware_version);
    return {aircon_firmware_version};
  text_sensors:
    name: AC firmware version
    icon: "mdi:chip"
Description
ESPHome component for AUX based air conditioners. Direct wifi control of HVAC by ESPHome and Home Assistant. HVAC status and command feedback are available.
Readme 2.1 MiB
Languages
C++ 91.5%
Python 8.5%