PlatformIO and ESPHome library to control ActronAir Air conditioners directly via the RS-485 bus
========== DISCLAIMER WARNING ==========
Interfacing an ESP32 with an Actron air conditioner is out of specifications and not
condoned by the manufacturer and may void warranty and cause permanent damage.
Author(s) of these instructions and code as well as ActronAir are not responsible for
any damage that may occur with the use of this project directly or indirectly.
USE AT YOUR OWN RISK!!!
This all started as I was sick of the un-reliability of the ACM-1 wireless module and had purchased a ICAMIB-MOD MODBUS controller to replace it. And had started writing code to ESP32 code interface with it (another project). But as this intermediate server hack came out, the ACM-1 module had been running reliably, thus motivation to continue on with the MODBUS controller had dropped. The only real befit gained from the MODBUS controller would be better statistics, continuous fan and ESP Auto fan mode.
I upgraded my system to Ultima, where individual zones could be temperature controlled. My biggest issues was that the temperatures could not be set remotely per zone. Spotting the RS485 chip on the LM-ZC-2W, I thought surely there be a way to send something down to change the temperature. With an oscilloscope, logic analyser, an RS485 USB serial adaptor, and a lot of head banging I was able to decode the communications between these little wall controllers and the main unit. In the process discovered more than I set out to. So here we are with a general purpose RS485 controller for a range of ActronAir conditioners.
- An ActronAir conditioner compatible with ACM-1, ACM-2 or ICAMIB-MOD control modules
BMS Modbus is available for ESP Plus, ESP Ultima, ESP Platinum Plus, ESP Platinum Ultima and selected Classic models (except SRA230 and SRA260) manufactured after October 2013.
- An ESP32 with a power supply
- An RS485 module (ideally a direct MAX485 with RO/RE/DE/DI, not serial converter)
- Wire to connect ESP32 and RS485 together.
- 2 core cable to connect the RS485 A/B to the Actron A/B bus (indoor, outdoor, or zone controller)
This module can be used to control a whole system such as an ACM-1/2 does or as a replacement in lieu of an LM-ZC zone wall controller.
When using as an LM-ZC, one can replace the entire unit with a touch screen controller + temperature sensor to allow for better multi purpose control in that room or use a single ESP32 to control the temperatures in every room with distributed wireless temperature sensors. Useful if wanting to retrofit/upgrade to an Ultima system without having to wire up new controllers.
See examples folder for example usage. Header files such Actron485.h
and Actron485Models.h
are documented on how to use. Only use setControlZone()
if the controller is replacing the zone wall controller. If the zone wall controller is still connected there will be clashes on the RS485 bus, causing the air conditioner to error and can also break cheap chinese RS485 transceiver chips.
- Turn
ON
andOFF
the system - Set the main
SET POINT
temperature of the system - Set fan speed
LOW
/MEDIUM
/HIGH
/ESP
- Set the fan speeds with or without
CONTINUOUS
mode on - Set the operating mode
OFF
/AUTO
/COOL
/HEAT
/FAN ONLY
- Turn
ON
/OFF
individual zones - Set the
SET POINT
of individual zones (Ultima systems only)
- Read main temperature
- Read if compressor is running and if cooling or heating
- Read individual zone temperatures (Ultima systems only)
- Read individual zone statistics e.g. damper position, open mode, requesting compressor (Ultima systems only)
WARNING Turn off the power from the main switch at the outdoor unit before removing covers and touching any wiring as the 240V mains power is exposed. Switching off the power will prevent electrical shock and reduce the risk of damaging your air conditioner.
Wiring up the A/B from the MAX485 TTL UART to the Air conditioner. There will be multiple places to connect the wires to on the AC side.
- Indoor board DATA header e.g. pins 3 (A) 4 (B) shown in the photo
- Indoor board to outdoor connection A/B
- Outdoor board to indoor Connection A/B
There are ESP32 available with built in RS485 connectivity. Connecting an external MAX485 TTL UART, connect the following:
- DI to the TX GPIO
- RO to the RX GPIO
- DE and !RE together to the Write enable GPIO
If running out of pins on the ESP32, TX and RX can be joined and be configured to run on a single wire serial.
Checkout this git repo in a place where your ESPHome instance can access. In the example YAML below it's in /config/
.
ESPHome will create a climate entity for the main controller, with a fan control for each zone.
ULTIMA systems (when enabled in the config) will also have a climate control per zone.
external_components:
- source:
type: local
path: /config/actron485/components
esphome:
name: ac-remote
friendly_name: ac-remote
platformio_options:
lib_extra_dirs: /config/
libraries:
Actron485
# 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 # Write Enable pin for the RS-485 communication
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: true
adjust_master_target: true # Adjust master target temperature to allow the targeted zone temperature.
logging_mode: CHANGE
zones:
- number: 1
name: Living
- number: 2
name: Theatre
- number: 3
name: Study
- number: 4
name: Master Bedroom
- number: 5
name: Bedroom 2
- number: 6
name: Bedroom 3
- One command per cycle can be sent (~1s per cycle). Different commands are stored and sent out one by one at the end of a cycle. E.g. setting 8 individual zone temperatures, takes 8 seconds to complete.
- If a command is scheduled to be sent out, but in the mean time another command of the same type is set, the original command will be ignored. E.g.
turn system off
command is scheduled, but before it has time to be sent aturn system on
command is scheduled, it will replace the off command. - If another user is pressing buttons on a wall controller while also a message is being sent via this controller, a race condition could occur and one may override the other. E.g. Wall zone 1 is turned on, at the same time zone 2 is turned on in this controller. Zone 1 or 2 may turn off again.
- Testing! Code is new and largely untested in different scenarios.
- Decode more data. Should be able retrieve all statistics that the ICAMIB-MOD module can read. Descriptions of the messages found in the
docs
folder. - On my ULTIMA system the
AO...
message comes every cycle with all up to date statistics and control modes. On other systems it appears to lack this and02...
message needs to be used, but only occurs about every 16 seconds. So there will be a lag of status updates for these systems for that amount of time.01...
messages may also contain most data to augment with02...
for improved responsiveness. Alternatively there there maybe other packets to be seen. Create an issue for your particular setup, post logs inALL
mode and different scenarios e.g. heat, cool, fan speeds, changing zone states.
Open issues or merge requests on any bugs found and improvements.
Have logging_mode: ALL
(for ESPHome configuration) or printOutMode = Actron485::PrintOutMode::AllMessages;
(for PlaformIO code) and include logs during the period the error occurs. Especially if it's a data being interpreted issue.