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.
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.
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.
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.
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.
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.
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?
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