Actron Air Conditioner add-on

Looks like your unit is different, and the official compatible card is the ICUNO-MOD card https://docs.actronair.com.au/wp-content/uploads/9590-3013-ICUNO-MOD-Installation-and-Comm-Guide-Ver-08.pdf rather than the ICAMIB-MOD.

So one would need to probably start from scratch to decode this unit. It looks like it still does 1second bursts of information, in your logs when it says “Time to Send” is the period between the bursts when it’s quiet, where this module would send a pending command. There seems to be 8 groups of data in each burst, so the timing is probably similar with what I’ve discovered/set with my unit.

Take the first packet of 3 groups, these are in hexadecimal format. Easiest way to convert to binary is using a tool, e.g. Hex to Binary Converter

1) 4D C8 18 0D 08 00 F8 F8 F8 08 08 08 08 58 98 98 EA EA 08 08 1B 0F 08 09 0B 0B 28 08 FA FA 0A FF FA CA F8 
2) 4D C8 18 0D 08 00 E8 F8 F8 08 08 08 08 58 98 98 EA EA 08 08 1B 0F 08 09 0B 0B 08 08 FA FA 0A FF FA 6A FC 
3) 4D C8 18 0D 08 00 E8 F8 F8 08 08 08 08 58 98 98 EA EA 08 08 1B 0F 08 09 0B 0B 08 08 FA FA 0A FF FA 6A FD

There’s little difference between them. There might be some status or read temperature changes altering between these.
If we look at the change of CA to 6A, second to last its 11001010 to 01101010. F8=11111000, FC=11111100, FD=11111101
So you need to go look at the consistency of the burst of 8 groups, and what changes when you change something like a zone on/off, ac on/off cooling/heating/auto. It looks like your wall controller is on the 485 bus too, so if you make a change, you will likely see a 9th group show up, which will probably be the command to adjust the thing you just pressed on.

It’s also entirely possible, that the esphome module is mis interpreting the timing of this data. Also possible that it’s encoded/encrypted someway, which will make it harder.

Once/if you got a good idea of what’s what, it can start to be written in to this esphome module.

1 Like

Thanks. I also realised after looking it up. Thanks for the tips. I’ll give a go attached trying to decipher this but maybe it’ll be better off just getting modbus module for this series. I’ll report back if I can make some headway.

1 Like

Hi Guys,

Can anyone help with this… i have it setup as type tcp using the transparent mode. Is that how it should be?

I still cannot do ITC per zone and the actions are 8-10sec slower, not much different to how the experience was using McGuire’s MQTT solution

Been trying to get Actron485 to work the the last day and a half on my indoor unit (SRV171E). Kept getting “Receiving Data: NO” (both with and without a ground running alongside the A+B), I went back to the platformio version with a long USB cable running to my laptop and was still getting the same so gave up on the upstairs unit.

After removing everything I noticed a small jumper on the headers on the Actron board that was not present in the icamib-mod or actron485 installation documents so I removed it and connected everything back up. Put power back on, connected it back to the laptop, but vscode monitoring was giving nothing, not even “receiving data: no” which it was giving before. So I tried to flash esphome again.

This time the indoor controller lit up, turned on in random zones and switched to heat, but ac-control doesn’t connect to my network and doesn’t show logs/boot properly afterwards (It sometimes does connect to my network as an esp32, but the ac-control hostname doesn’t work so “esphome logs” doesn’t work). After turning off the mains to the AC(and 5v esp transformer) and only powering the esp32 from the cable connected to the laptop, installation works and it boots properly, but after returning power it’s back to “receiving data: NO”.

I’m thinking it may be a power delivery issue (as the esp32s3 being plugged in via USB AND the 5vin seems to trigger something in the Actron). The waveshare converter (https://www.waveshare.com/ttl-to-rs485-c.htm) I got says it runs on 5v also, so will try powering it directly from my 5v meanwell also. That will have to wait till tomorrow as the heat up in the roof is killing me.

Update: tried swapping the TX/RX, didn’t make a difference. Will try powering the RS485 board with 5V tomorrow.

Next day update: added the jumper back on as I think it was a red herring, powered the rs485 converter with 5V, no difference. Have not managed to get it to say “receiving data: Yes” a single time. Might try a regular esp32. Each time the AC turned on after flashing esphome, I flashed it using one of the two USB C ports on the S3, and noticed the TX light on the rs485 blinking, but when flashing over the other USB C, nothing. Also when sending commands via home assistant, there is no blinking of the TX or RX lights, so perhaps it’s an issue of communication between the rs485 converter and the esp32s3.

Bought a standard esp32 and still no luck. I do have a hypothesis though.

The installation manual for ICAMIB-MOD mentions it takes 60s to initialise upon installation. Is it possible it flashes a chip on the Actron indoor board to enable serial communication?

My outdoor board doesn’t have any AB wires or connectors.

Hi all, I finally got the icuno mod board. Has anyone got this board setup using an esp32 with an rs485 module using modbus communication? If so would you mind sharing your esphome yaml? Or even if it’s with a icamib mod card I Can at least see how to set up a modbus communication on esphome.

Cheers

Which RS485 board do you have connected to your ESP32?

Would you be able to share your esphome yaml that you are using to communicate from the esp32 with 485 module through the icamib module? I figure I could hopefully modify this to work with the icuno modbus module more successful than I’ve been able to decode the raw signals coming from the air conditioner itself. I Hope that makes sense.

Did you try the same yaml as this post

I’m still trying to get mine to work with the ESP32 modbus rather than by a dedicated network adapter. I also have the ICUNO board in an aires series. What series aircon do you have?

When i was first trying to get it to work i bought a 5V 485 module but was advised it might not work so i bought a 3v version and that was able to receive communication. I could be wrong but the rx and tx work on 3v for the esp32 boards i thought.

@vijaykbhatia i followed this post, but it doesnt have configuration for individual zone temperature control. only does on/off for each zone. my unit has the capability to control the temperature in each zone individually.

For anyone who is trying to get a Modbus card in the Actron systems to work through ESPhome with and RS485 adapter here is my code that worked. Note that the dipswitches on my board were set to have baudrate of 9600, EVEN parity and address of 1.

If anyone has figured out home to optimise the update time or that some switches “bounce” states when trying to change, would appreciate any advice.


esphome:
  name: bluetooth-proxy
  friendly_name: Bluetooth Proxy

esp32:
  board: nodemcu-32s
  framework:
    type: arduino
web_server:
  port: 80

uart:
  - id: uart_modbus  
    rx_pin: 18
    tx_pin: 19
    baud_rate: 9600
    parity: EVEN
    stop_bits: 1
    data_bits: 8 #default to 8E1
    debug:
      direction: BOTH

modbus:
    id: modbus1

# Enable logging
logger:
#  level: DEBUG
#  baud_rate: 0  # Disable logging over the serial port

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxx"

ota:
  - platform: esphome
    password: "xxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Bluetooth-Proxy Fallback Hotspot"
    password: "xxxxxxxx"

captive_portal:

modbus_controller:
- id: modbus_actron
  address: 0x1   ## address of the Modbus slave device on the bus
  modbus_id: modbus1
  setup_priority: -10
  update_interval: 10s
  command_throttle: 100ms  ## trying different values to optimise response and bouncing values

sensor:
- platform: modbus_controller
  modbus_controller_id: modbus_actron
  name: "Actron Indoor Temperature"
  register_type: holding
  address: 851
  unit_of_measurement: "C"
  value_type: S_WORD
  accuracy_decimals: 1
  filters:
    - multiply: 0.1

  

- platform: modbus_controller
  modbus_controller_id: modbus_actron
  name: "Actron Outdoor Temperature"
  register_type: holding
  address: 852
  unit_of_measurement: "C"
  value_type: S_WORD
  accuracy_decimals: 1
  filters:
    - multiply: 0.1


- platform: modbus_controller
  modbus_controller_id: modbus_actron
  name: "Actron Capacity"
  register_type: holding
  address: 801 
  unit_of_measurement: "%"
  value_type: S_WORD
  accuracy_decimals: 1
  filters:
    - multiply: 0.1


switch:
  - platform: modbus_controller
    modbus_controller_id: modbus_actron
    name: "Aircon Power"
    address: 0x1
    register_type: holding
    bitmask: 1

  - platform: modbus_controller
    modbus_controller_id: modbus_actron
    name: "Zone Back Bedrooms"
    address: 5001
    register_type: holding
    bitmask: 1

  - platform: modbus_controller
    modbus_controller_id: modbus_actron
    name: "Zone Living Rooms"
    address: 5002
    register_type: holding
    bitmask: 1

  - platform: modbus_controller
    modbus_controller_id: modbus_actron
    name: "Zone Front Bedrooms"
    address: 5003
    register_type: holding
    bitmask: 1

  - platform: modbus_controller
    modbus_controller_id: modbus_actron
    name: "Zone Front Rooms"
    address: 5004
    register_type: holding
    bitmask: 1

#  - platform: modbus_controller
#    modbus_controller_id: modbus_actron
#    name: "Fan Control Continuous"
#    address: 105
#    register_type: holding
#    bitmask: 1

#select: #tried select option and number options for modes
#  - platform: modbus_controller
#    modbus_controller_id: modbus_actron
#    name: "Aircon Mode"
#    address: 101
#    value_type: U_WORD
#    optionsmap:
#      "Heat": 1
#      "Cool": 2
#      "Auto": 3
#      "Fan": 4
#    skip_updates: 2


#  - platform: modbus_controller
#    modbus_controller_id: modbus_actron
#    name: "Fan Speed"
#    address: 4
#    value_type: U_WORD
#    optionsmap:
#      "Low": 1
#      "Medium": 2
#      "High": 3
#    skip_updates: 2

number:
  - platform: modbus_controller
    modbus_controller_id: modbus_actron
    name: "Aircon Setpoint Temperature"
    address: 102
    register_type: holding
    value_type: U_WORD
    min_value: 16.0
    max_value: 30.0
    multiply: 10
    step: 0.5

  - platform: modbus_controller
    modbus_controller_id: modbus_actron
    name: "Aircon Mode"
    address: 101
    value_type: U_WORD
    min_value: 0
    max_value: 4
    step: 1

  - platform: modbus_controller
    modbus_controller_id: modbus_actron
    name: "Fan Speed"
    address: 4
    value_type: U_WORD
    min_value: 0
    max_value: 3
    step: 1



 

Update - after trying to improve response times and reliability through ESPhome, it looks likes either Home assistants Modbus implementation or Tasmota’s Modbus Bridge results in a faster more reliable result. As such I flashed the board with Tasmota compiled with Modbus Bridge and pointed Home Assistants Modbus component at the IP of my ESP32, much better.

1 Like
1 Like

Hi, this looks great but I just tried it and noticed my device is an ESP32 S3, is there a way to convert the code as it will not upload. Thanks

Can anyone please confirm for me if I’m able to run both the NEO controller as well as the MODBUS integration or do I need to spec the system with the LR7 control unit?

@awulf

Finally got around to wiring and connecting this up. Using the isolated module connected to the only zone controller’s RS485. We have an ESP system with just two zones, Upstairs and Downstairs, with only one set point. Can’t seem to get it to work with the setup. Indoor board says “Inzone3 23827-3” which has 8 zone RJ45 ports for up to 8 zone damper motors.

Logs before and after swapping A&B (from the indoor board going to the outdoor board):

INFO ESPHome 2025.5.2
INFO Reading configuration /config/esphome/actronac.yaml...
WARNING Using `climate.CLIMATE_SCHEMA` is deprecated and will be removed in ESPHome 2025.11.0. Please use `climate.climate_schema(...)` instead. If you are seeing this, report an issue to the external_component author and ask them to update it. https://developers.esphome.io/blog/2025/05/14/_schema-deprecations/. Component using this schema: actron485
INFO Starting log output from [redacted] using esphome API
INFO Successfully connected to actronac @ [redacted] in 0.056s
INFO Successful handshake with actronac @ [redacted] in 0.090s
[16:34:39][I][app:115]: ESPHome version 2025.5.2 compiled on Jun 15 2025, 16:26:47
[16:34:39][C][wifi:600]: WiFi:
[16:34:39][C][wifi:428]:   Local MAC: [redacted]
[16:34:39][C][wifi:433]:   SSID: [redacted]
[16:34:39][C][wifi:436]:   IP Address: [redacted]
[16:34:39][C][wifi:440]:   BSSID: [redacted]
[16:34:39][C][wifi:441]:   Hostname: 'actronac'
[16:34:39][C][wifi:443]:   Signal strength: -66 dB ▂▄▆█
[16:34:39][C][wifi:447]:   Channel: 11
[16:34:39][C][wifi:448]:   Subnet: 255.255.255.0
[16:34:39][C][wifi:449]:   Gateway: 192.168.1.1
[16:34:39][C][wifi:450]:   DNS1: 192.168.1.1
[16:34:39][C][wifi:451]:   DNS2: 0.0.0.0
[16:34:39][C][logger:224]: Logger:
[16:34:39][C][logger:225]:   Max Level: DEBUG
[16:34:39][C][logger:226]:   Initial Level: DEBUG
[16:34:39][C][logger:228]:   Log Baud Rate: 115200
[16:34:39][C][logger:229]:   Hardware UART: UART0
[16:34:39][C][logger:233]:   Task Log Buffer Size: 768
[16:34:39][C][uart.arduino_esp32:151]: UART Bus 1:
[16:34:39][C][uart.arduino_esp32:152]:   TX Pin: GPIO26
[16:34:39][C][uart.arduino_esp32:153]:   RX Pin: GPIO27
[16:34:39][C][uart.arduino_esp32:155]:   RX Buffer Size: 256
[16:34:39][C][uart.arduino_esp32:157]:   Baud Rate: 4800 baud
[16:34:39][C][uart.arduino_esp32:158]:   Data Bits: 8
[16:34:39][C][uart.arduino_esp32:159]:   Parity: NONE
[16:34:39][C][uart.arduino_esp32:160]:   Stop bits: 1
[16:34:39][D][actron485.climate:027]: Time to Send
[16:34:39][C][actron485.climate:225]: Actron485 Status:
[16:34:39][C][actron485.climate:226]:   Receiving Data: YES
[16:34:39][C][actron485.climate:571]: ClimateTraits:
[16:34:39][C][actron485.climate:572]:   [x] Visual settings:
[16:34:39][C][actron485.climate:573]:       - Min temperature: 16.0
[16:34:39][C][actron485.climate:574]:       - Max temperature: 30.0
[16:34:39][C][actron485.climate:575]:       - Temperature step:
[16:34:39][C][actron485.climate:576]:           Target: 0.5
[16:34:39][C][actron485.climate:578]:           Current: 0.1
[16:34:39][C][actron485.climate:588]:   [x] Supports current temperature
[16:34:39][C][actron485.climate:597]:   [x] Supports action
[16:34:39][C][actron485.climate:600]:   [x] Supported modes:
[16:34:39][C][actron485.climate:602]:       - OFF
[16:34:39][C][actron485.climate:602]:       - COOL
[16:34:39][C][actron485.climate:602]:       - HEAT
[16:34:39][C][actron485.climate:602]:       - FAN_ONLY
[16:34:39][C][actron485.climate:602]:       - AUTO
[16:34:39][C][actron485.climate:605]:   [x] Supported fan modes:
[16:34:39][C][actron485.climate:607]:       - AUTO
[16:34:39][C][actron485.climate:607]:       - LOW
[16:34:39][C][actron485.climate:607]:       - MEDIUM
[16:34:39][C][actron485.climate:607]:       - HIGH
[16:34:39][C][actron485.climate:620]:   [x] Supported custom presets:
[16:34:39][C][actron485.climate:622]:       - Continuous Fan
[16:34:39][C][actron485.climate:622]:       - Standard Fan
[16:34:39][C][captive_portal:089]: Captive Portal:
[16:34:39][C][mdns:120]: mDNS:
[16:34:39][C][mdns:121]:   Hostname: actronac
[16:34:39][C][esphome.ota:073]: Over-The-Air updates:
[16:34:39][C][esphome.ota:074]:   Address: actronac.local:3232
[16:34:39][C][esphome.ota:075]:   Version: 2
[16:34:39][C][esphome.ota:078]:   Password configured
[16:34:39][C][safe_mode:018]: Safe Mode:
[16:34:39][C][safe_mode:020]:   Boot considered successful after 60 seconds
[16:34:39][C][safe_mode:021]:   Invoke after 10 boot attempts
[16:34:39][C][safe_mode:023]:   Remain in safe mode for 300 seconds
[16:34:39][C][api:170]: API Server:
[16:34:39][C][api:171]:   Address: actronac.local:6053
[16:34:39][C][api:173]:   Using noise encryption: YES
[16:34:39][D][actron485.climate:027]: Unknown Message received
[16:34:39][D][actron485.climate:027]: 1D 08 F8 69 
[16:34:39][D][actron485.climate:027]: 
[16:34:40][D][actron485.climate:027]: Unknown Message received
[16:34:40][D][actron485.climate:027]: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 98 A8 F8 F8 08 08 08 08 48 68 C8 C2 C2 42 08 F8 08 28 08 08 08 08 08 08 08 FA FA 0A FD FA EA FB 
[16:34:40][D][actron485.climate:027]: 
[16:34:40][D][actron485.climate:027]: Unknown Message received
[16:34:40][D][actron485.climate:027]: 4D 08 08 09 08 68 FF 4D 08 08 7C 
[16:34:40][D][actron485.climate:027]: 
[16:34:40][D][actron485.climate:027]: Unknown Message received
[16:34:40][D][actron485.climate:027]: 4D 48 28 08 08 08 0F 58 FF 4D 48 28 E6 
[16:34:40][D][actron485.climate:027]: 
[16:34:40][D][actron485.climate:027]: Unknown Message received
[16:34:40][D][actron485.climate:027]: 4D C8 18 0D 18 08 A8 F8 F8 08 08 08 08 48 68 C8 C2 C2 42 08 F8 08 28 08 08 08 08 08 08 08 FA FA 0A FD FA 5A FD 
[16:34:40][D][actron485.climate:027]: 
[16:34:40][D][actron485.climate:027]: Unknown Message received
[16:34:40][D][actron485.climate:027]: 4D C8 18 68 
[16:34:40][D][actron485.climate:027]: 
[16:34:40][D][actron485.climate:027]: Time to Send
[16:34:41][D][actron485.climate:027]: Unknown Message received
[16:34:41][D][actron485.climate:027]: 1D 08 F8 69 
[16:34:41][D][actron485.climate:027]: 
[16:34:41][D][actron485.climate:027]: Unknown Message received
[16:34:41][D][actron485.climate:027]: 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 F8 08 08 08 08 98 A8 F8 F8 08 08 08 08 48 68 C8 C2 42 42 08 F8 08 28 08 08 08 08 08 08 08 FA FA 0A FD FA AA FD 
[16:34:41][D][actron485.climate:027]: 

[16:40:06][D][actron485.climate:027]: Time to Send
[16:40:06][D][actron485.climate:027]: DC AE 
[16:40:06][D][actron485.climate:027]: 
[16:40:07][D][actron485.climate:027]: DC FE 5E 9E 78 EF EF DF DF EF 5E EF 5E DE 08 08 F8 F9 F8 F8 FF EC 08 08 FF 60 EF EF B9 EF 63 
[16:40:07][D][actron485.climate:027]: 
[16:40:07][D][actron485.climate:027]: C: Zone: 6, Pending or Sensor only Zone, Temperature: 3.70
[16:40:07][D][actron485.climate:027]: D6 ED D6 D0 
[16:40:07][D][actron485.climate:027]: 
[16:40:07][D][actron485.climate:027]: C: Zone: 6, Temp Offset: -4.20
[16:40:07][D][actron485.climate:027]: D6 78 FD D6 E1 
[16:40:07][D][actron485.climate:027]: 
[16:40:07][D][actron485.climate:027]: C: Zone: 6, Temp Offset: -0.80
[16:40:07][D][actron485.climate:027]: D6 3C 79 F8 F9 F8 F8 FF 
[16:40:07][D][actron485.climate:027]: 
[16:40:07][D][actron485.climate:027]: Time to Send
[16:40:08][D][actron485.climate:027]: DC AE 
[16:40:08][D][actron485.climate:027]: 
[16:40:08][D][actron485.climate:027]: DC FE 5E 9E 78 EF EF DF DF EF 5E EF FF 3E DE 08 08 F8 F9 F8 F8 FF 08 08 FF EF 60 EF EF B9 EF 4F 
[16:40:08][D][actron485.climate:027]: 
[16:40:08][D][actron485.climate:027]: C: Zone: 6, Pending or Sensor only Zone, Temperature: 3.70
[16:40:08][D][actron485.climate:027]: D6 ED D6 D0 
[16:40:08][D][actron485.climate:027]: 
[16:40:08][D][actron485.climate:027]: C: Zone: 6, Set Point: 126.00, Temp: -24.70(Pre:-22.00), Mode: Open
[16:40:08][D][actron485.climate:027]: D6 FC CF D6 E1 
[16:40:08][D][actron485.climate:027]: 
[16:40:08][D][actron485.climate:027]: C: Zone: 6, Temp Offset: -0.80
[16:40:08][D][actron485.climate:027]: D6 3C 79 F8 F9 F8 F8 FF 08 08 FF 60 EF EF B9 EF DF FF 
[16:40:08][D][actron485.climate:027]: 
[16:40:08][D][actron485.climate:027]: C: Zone: 6, Temp Offset: -0.80
[16:40:08][D][actron485.climate:027]: D6 3C E9 
[16:40:08][D][actron485.climate:027]: 
[16:40:09][D][actron485.climate:027]: Time to Send
[16:40:09][D][actron485.climate:027]: DC AE 
[16:40:09][D][actron485.climate:027]: 
[16:40:09][D][actron485.climate:027]: DC FE 5E 9E FC EF EF DB F9 DF EF 5E EF 3E DE 08 08 F8 F9 F8 F8 FF EC 08 08 FF 60 EF EF B9 EF 73 FE 
[16:40:09][D][actron485.climate:027]: 
[16:40:10][D][actron485.climate:027]: C: Zone: 6, Pending or Sensor only Zone, Temperature: 3.70
[16:40:10][D][actron485.climate:027]: D6 ED D6 D0 
[16:40:10][D][actron485.climate:027]: 
[16:40:10][D][actron485.climate:027]: C: Zone: 6, Set Point: 126.00, Temp: -24.70(Pre:-22.00), Mode: Open
[16:40:10][D][actron485.climate:027]: D6 FC CF D6 E1 
[16:40:10][D][actron485.climate:027]: 
[16:40:10][D][actron485.climate:027]: C: Zone: 6, Temp Offset: -0.80
[16:40:10][D][actron485.climate:027]: D6 3C 79 F8 F9 F8 F8 FF 08 08 FF 60 EF EF B9 EF DF FF 
[16:40:10][D][actron485.climate:027]: 
[16:40:10][D][actron485.climate:027]: C: Zone: 6, Temp Offset: -0.80
[16:40:10][D][actron485.climate:027]: D6 3C E9 
[16:40:10][D][actron485.climate:027]: 
[16:40:10][D][actron485.climate:027]: Time to Send
[16:40:11][D][actron485.climate:027]: DC AE 


Yaml:

external_components:
  - source:
      type: git
      url: https://github.com/awulf/Actron485
      ref:  0.7.0

esphome:
  name: actronac
  friendly_name: ActronAC
  platformio_options:
    lib_extra_dirs: /config/
  libraries:
    Actron485

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "redacted"

ota:
  - platform: esphome
    password: "redacted"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Actronac Fallback Hotspot"
    password: "redacted"

captive_portal:

# Adds fan component per zone (required)
fan:

# UART settings for Actron485 (required)
uart:
  rx_pin: GPIO27 
  tx_pin: GPIO26 
  baud_rate: 4800

climate:
  - platform: actron485
    name: "Actron Climate Controller"
    #write_enable_pin: GPIO25
    esp_fan_available: true # For Systems with ESP Auto mode, adds Auto fan mode.
    ultima: # For ULTIMA Systems only, adds climate controls per zone.
      available: false
      adjust_master_target: true # Adjust master target temperature to allow the targeted zone temperature.
    logging_mode: ALL
    zones:
      - number: 1
        name: Upstairs
      - number: 2
        name: Downstairs
      

The messages in the logs don’t look right at all. What are the model numbers for the indoor and outdoor units?

Just gave it a try on an ESP32S3, and it works. Double check the Yaml, also it’s Arduino framework based e.g.

esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: arduino

Outdoor unit is a CRA130T-0100, I’ll have to get up in the attic again later for the indoor unit.