Integration of AUX Air Conditioner in Home Assistant

Hello,
after an extensive search, I finally found a method to integrate my AUX air conditioner into Home Assistant, and I’m happy to share it with you. For about two years, I’ve been using an AUX split air conditioner in my office and have been very satisfied with it. However, one annoyance was that the ACFreedom app could not connect to HA, and the backdoors for retrieving data from Broadlink were too complex for me to implement.

Fortunately, I came across the following repository:

To implement this repository, I made it a bit easier for myself and did not solder anything. The hardware I used includes:

  • ESP32 NodeMCU Development Board
  • LM7805 Voltage Regulator
  • Jumper cables
  • Wago clamp
  • Plastic box

First, I compiled the YAML and customized it to my needs. It now looks like this:

# Konfiguration für ESPHome mit spezifischen Einstellungen für das Gerät mit der Bezeichnung "AUX Klimaanlage".
substitutions:
  name: "TBD"
  friendly_name: AUX Klimaanlage

# Hauptkonfiguration für ESPHome, verwendet die oben definierten Substitutionen.
esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  name_add_mac_suffix: false
  project:
    name: esphome.web
    version: '1.0'

# Konfiguration für den ESP32, der auf dem Nodemcu-32s-Board läuft und das Arduino-Framework verwendet.
esp32:
  board: nodemcu-32s
  framework:
    type: arduino

# Aktiviert das Logging auf DEBUG-Ebene und verwendet die Hardware-UART1.
logger:
    level: DEBUG
    hardware_uart: UART1

# WiFi-Konfiguration, verwendet geheime SSID und Passwort.
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Aktiviert den Fallback-Hotspot (Captive Portal), falls die WiFi-Verbindung fehlschlägt.
  ap:
    ssid: "TBD"
    password: "TBD"

# Ermöglicht Over-The-Air-Updates für die Firmware.
ota:

# Ermöglicht die Bereitstellung von WiFi über die serielle Schnittstelle.
improv_serial:

# API-Konfiguration mit Verschlüsselungsschlüssel.
api:
  encryption:
    key: "TBD"

# Captive Portal ermöglicht die Bereitstellung von WiFi-Anmeldeinformationen über den Hotspot.
captive_portal:

# Importiert ein Dashboard-Paket von GitHub für die Konfiguration.
dashboard_import:
  package_import_url: github://esphome/example-configs/esphome-web/esp32.yaml@main
  import_full_config: true

# Ermöglicht die Bereitstellung von WiFi-Anmeldeinformationen über Bluetooth LE (nur ESP32).
esp32_improv:
  authorizer: none

# Konfiguration des Web-Servers für die Bereitstellung von "nächster URL" für die serielle Bereitstellung.
web_server:

# Externe Komponenten
external_components:
  - source:
      type: git
      url: https://github.com/GrKoR/esphome_aux_ac_component

# Board Konfiguration
uart:
  id: ac_uart_bus
  # ATTENTION! For TX and RX use GPIO4 (D2) and GPIO5 (D1) for NodeMCU-like boards!
  # See docs for details: https://github.com/GrKoR/esphome_aux_ac_component/blob/87f686564e743e3b1d0965a6bbc5780a173abbd1/docs/HARDWARE-EN.md
  rx_pin: GPIO16
  tx_pin: GPIO17
  baud_rate: 4800
  data_bits: 8
  parity: EVEN
  stop_bits: 1

# Klimaanlagen Konfiguration
climate:
  - platform: aux_ac
    name: ${friendly_name}
    id: aux_id
    uart_id: ac_uart_bus
    period: 7s
    show_action: true
    display_inverted: false
    timeout: 150
    optimistic: true
    indoor_temperature:  # AC Indoor Temperature 
      name: Innentemperatur
      id: ac_indoor_temp
      accuracy_decimals: 1
      internal: false
    outdoor_temperature:  # AC Outdoor Temperature 
      name: Außentemperatur
      id: ac_outdoor_temp
      internal: false
    outbound_temperature:  # AC Coolant Outbound Temperature 
      name: Kühlmittel-Ausgangstemperatur
      id: ac_outbound_temp
      internal: false
    inbound_temperature:  # AC Coolant Inbound Temperature 
      name: Kühlmittel-Eingangstemperatur
      id: ac_inbound_temp
      internal: false
    compressor_temperature:  # AC Compressor Temperature 
      name: Kompressor Temperatur
      id: ac_strange_temp
      internal: false
    display_state:  # AC Display State 
      name: Anzeigestatus
      id: ac_display_state
      internal: false
    defrost_state:  # AC Defrost State 
      name: Abtauzustand
      id: ac_defrost_state
      internal: false
    inverter_power:  # AC Inverter Power 
      name: Wechselrichterleistung
      id: ac_inverter_power
      internal: false
    inverter_power_limit_value:  # AC Inverter Power Limit Value 
      name: Grenzwert Wechselrichterleistung
      id: ac_inverter_power_limit_value
      internal: false
    inverter_power_limit_state:  # AC Inverter Power Limit State 
      name: Wechselrichterleistung Grenzzustand
      id: ac_inverter_power_limit_state
      internal: false
    preset_reporter:  # AC Preset Reporter 
      name: Voreinstellung Reporter
      id: ac_preset_reporter
      internal: false
    vlouver_state:  # AC Vertical Louvers State 
      name: Vertikale Lamellen Zustand
      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

After loading this YAML onto the ESP32 with ESPHome, I initially integrated it into Home Assistant. While all entities were visible, they were naturally not reachable.

I then took various jumper cables (Red/Blue/Black/Yellow/Green) and connected them according to the GrKoR repository:

  • Green - NodeMCU 5V Pin ➜ LM7805 PIN3 (Output)
  • Black (1) - NodeMCU GND Pin ➜ Wago Clamp
  • Blue - NodeMCU GPIO16 (RX) ➜ AC TX
  • Red - NodeMCU GPIO017 (TX) ➜ AC RX
  • Black (2) - LM7805 PIN2 (GND) ➜ Wago Clamp
  • Yellow - LM7805 PIN1 (Input) ➜ AC Vcc
  • Black (3) - Wago Clamp ➜ AC GND

Now, I’ve integrated everything into HA and was able to add it to my heating control. Next, I’ll add automations for surplus PV, so the air conditioner can start a bit earlier.

I hope this project appeals to some of you and enables you to integrate your air conditioner into HA as well. I would greatly appreciate active discussions here in the forum, and suggestions for improvements are welcome.

Best regards, Joscha

3 Likes

I’m gonna try this.
I bought an SLWF-01 pro wifi module that’s based on a ESP12E but it’s not working.
So I guess this will work…

Is it not working because of the software, or because wiring and power supply is different?

I am thinking about ordering one as well, and flashing this software to that ESP.

Because I haven’t so much time at the moment I bought one from somebody who makes these in his free time. I plugged it in my Aux Airco and set it up and I saw data coming into Home Assistant. In other words it’s working. It’s based on GrKoR’s code as I can see and he mentions it also.

Hey @Josch what plastic box did you use? I’ve noticed the parts need to be quite skinny to allow the cover to close.
I took a similar approach to you but I used a breakout board that could take 12V to simplify it further.
I documented it at New AC tested: Rinnai RINV25RC · Issue #117 · GrKoR/esphome_aux_ac_component · GitHub

Hello, I registered to the forum just to thank you! I have a Baymak brand air conditioner and there is no documentation. I struggled for days. The example you shared worked perfectly for me. Thanks again!

1 Like

Hello @BenAndo ,
also a very good approach which you have taken.
I glued a simple junction box to the side, it was only intended as a temporary solution, well.

@cempehlivan ,
thanks for the feedback, most of the credit goes to GrKoR, it was through him that I was able to implement it.

Hi everyone, my good friend is creating a drop-in replacement (to use with GrKoR’s code) of a wifi module for AUX AC, and we are wondering if we should order more pieces. Would anyone be interested in buying a plug&play module? The open-source repo will be released soon too.

2 Likes

I’d be keen!

@BenAndo I am this good friend of @freakone :slight_smile:

Here comes the link to the repo (You will find there also an email):

I got this to work too - here’s the yaml I ended up using if you have v2.1 of the device if anyone else needs it

external_components:
  - source:
      type: git
      url: https://github.com/GrKoR/esphome_aux_ac_component


esphome:
  name: aux_air_conditioner
  platform: ESP8266
  board: esp12e

# don't forget to set your's wifi settings!
wifi:
  ssid: <ssid>
  password: <password>
  manual_ip:
    static_ip: <ipofdevice>
    gateway: 192.168.88.1
    subnet: 255.255.255.0
  ap:
    ssid: AUX Hotspot
    password: "seCREThotSPOTpassWORD"

captive_portal:
debug:

logger:
    level: DEBUG
    baud_rate: 0

api:

ota:
  - platform: esphome

# UART0 configuration for AUX air conditioner communication
uart:
  tx_pin: 12
  rx_pin: 14
  baud_rate: 4800
  data_bits: 8
  parity: EVEN
  stop_bits: 1

climate:
  - platform: aux_ac
    name: "AC Name"
    id: aux_id
    period: 7s
    show_action: true
    display_inverted: false
    timeout: 150
    optimistic: true
    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: 0.5
    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

The main thing that kept throwing me off was the uart tx and rx pins - if you go to the site these are for sale and download the corresponding yaml you can find the tx and rx pins used