Actron Aircon / ESP32 Controller Help

So perhaps.
Needs some more testing. On my 4 zone panel I have a ROOM light which seems to align with bit 4.

Does the 8 zone have a ROOM light?

But now that I look at my manual I suspect ROOM light and INSIDE on yours are the same thing. So myabe BIT4 is ZONE 8

My other big unknown is how does the filter light work? Although maybe that’s just a timer in the panel and doesn’t come from the main controller?

Yes, the “inside” is a temporary one that only holds for a second or two when you press the button to show the sensor temperatures and they are displayed instead of the target temp that is displayed normally.

The “filter” is similar (but unlike the one above it does have an actual prompt on the display), once in a bunch of hours of runtime it will pop up indicating that it would be nice to clean up the filters. After you press on/off it will go away.

@johnf I have installed and got this working - much nicer than my hack I put together.

I had a couple of problems with installing from HACS and have created 2 issues for you on GitHub. The first was related to the version in the manifest file preventing the integration from starting & the second is that the Lovelace card did not register itself like the documentation said it would.

On my specific setup I also had to add the lines below the packages section to cater for the fact that my DAC seems to use a non standard address. Just including that here in case anybody else has the same issue. (Not sure if this could be easily included in the overrides)

 packages:
   actron_air: github://johnf/actron-air-esphome/actron_air_keypad.yaml@main
 
 #Override DAC I2c address - mine is 0x62 not default 0x60 or 0x61
 output:
   - id: !extend dac_output
     address: 0x62

Great work overall, thanks for taking this further.

Hi all. I don’t really rate my own soldering abilities and have been looking for a project to try out designing a custom pcb for a while. I’ve done a rough design of updating this layout to use an esp C6 as I’ve just been playing with some to see how they work being a bt proxy and zigbee router at the same time.
Wondering if anyone would like to check my design and split the cost of an order? It currently works out somewhere around $40/board but the c6 is half of that so a different esp would make it significantly cheaper

@brentk Thanks for testing and filing the issues.
I’ve fixed those and have also just rolled out a change that let’s you set the DAC address via a substitution

dac_output_address: "0x60"   # MCP4725 DAC I2C address

@Breddo I might be interested in this.
I’ve just spent the last few days building something myself on veroboard but wouldn’t mind something a bit more professional.

Check out my design here actron-air-esphome/fritzing at main · johnf/actron-air-esphome · GitHub

I’ve improved it so you can power it off the Actron power line. Not fully tested yet, waiting for the capacitor and diode to turn up today.
It is a bit messy because I foolishly didn’t fully test this on a breadboard before moving to veroboard so had to make some changes on the fly.

NOTE: Removed these images as there are errors in the circuit. Will post new ones tomorrow

@Breddo I’m interested. Count me in.

New parts arrived. The circuit needs some work. It is now providing power to the ESP32 properly, but I think the capacitor is degrading the pulsed circuit. The original keypad stops responding once plugged in

@Breddo I’d be interested if you’ve tested the same circuit on breadboard already and found the button circuit voltage stable. My current version still drifts a bit and button presses are not 100% reliable. I have been considering trying to see if a design with variable resistors could work better than the transistor.

Hey thanks johnf, this is working great.
I’m using a xiao esp32c3.
I needed to set the esp32 variant to ESP32C3.

Mine isn’t completed yet as I don’t have the MCP4725 yet, but I can connect and read data from the controller and it works a treat.

I’ve used a 5-30V → 5V buck converter, I put a diode in between the power line and the capacitor to isolate the smoothing away from the controller and the cap is between 5V and ground instead of directly on the line to the dc-dc converter. It seems to work fine for me and my controller operates perfectly well too.

I haven’t tested all the inputs and I didn’t have a huge amount of time today, but wanted to get it going anyway and that was successful. Thanks for the module you created.

@Breddo I would be interested in this too but only after the voltage drift is sorted out. As mentioned by @brentk the voltage drift is still an issue today so some new design must be tested and confirmed as working before custom pcb should be ordered. Zigbee board sounds interesting but I am not sure which one I want… zigbee or ESP32

New schematic.


My newer design I think is what you have bit not having much luck. Will attack it again tomorrow.

3rd veroboard attempt was the charm.


If Zigbee was an option I’d definitely be interested (although I might be interested in a properly tested ESP-ready board too). But unless things have changed in transparency of Zigbee API recently, it seems to me like Zigbee (vs ESP) will have significantly more work involved.

In fact, at the start of this project (on another forum) I tried writing a Zigbee firmware for this (I have a C6), but making complex custom clusters (which is how Zigbee API is structured) was barely documented and riddled with issues at every step of the way. I abandoned it after a few attempts.

Hi John,
I have had reasonable success using your code on an 8 zone system, however I can’t figure out how to flip the bits on the last 4 zone display on the ESP32. For example if I have the 1-8 zones on the wall controller set to on,on,on,on,off,on,off,on , the ESP32 reads it as on,on,on,on,on,off,on,off
I also noticed that when the filter led flashes, zone 7 on the ESP32 flashes on/off.
Thank you (and everyone else) for figuring all of this out too!

Also, can anyone advise the best way to get the voltage readouts for tweaking the DAC output? I have a decent Agilent multimeter, but I cant catch the voltage readouts when I press buttons on the wall controller. Even when I have the meter set to readout the lowest value in its memory, its wildly different each time…
Is it an excuse to buy a scope? hahaha

Cheers

I used a simple Chinese multimeter, whole process was pretty trivial - fix the probes with clips, keep the button pressed, take a reading, write down, do next. I know it’s not much help, sorry.
Maybe you have some fancy front panel?

In my ESP code (it’s here in the thread somewhere) I had to “revert” status bytes for zones 5 to 8. From what I understand there aren’t many people with 8 zones here, so iirc no one confirmed they had the same issue. It’s a pretty strange design choice from Actron if you ask me, but maybe too many “1” bytes in a row was problematic in some way, or maybe it depends on the controller version or something…

As for simultaneous zone 7 and filter it’s either a bad status reading or ESP bug (less likely I reckon). I’d first check ESP code real quick and then focus on what status string reads.
Also iirc if you use the standard code from here you should be able to just go to the ESP device IP and fine tune the currents for each button “on the fly”.

@everydayimhassling As @stsilver mentioned, not many people have 8-zone systems, so it’s quite possible the codes are incorrect.

It would be great if you could turn each zone on one at a time on the panel, and let me know what happens in HA.

Our current mappings are below. It’s quite possible the zones aren’t set up correctly.

It would be handy if you could also provide a photo of your panel.

enum class LedIndex : std::size_t {
  // Mode indicators
  COOL = 0,
  AUTO_MODE = 1,
  RUN = 3,
  HEAT = 15,

  // Fan speed indicators
  FAN_CONT = 8,
  FAN_HIGH = 9,
  FAN_MID = 10,
  FAN_LOW = 11,

  // Zone indicators (1-7)
  ZONE_1 = 21,
  ZONE_2 = 14,
  ZONE_3 = 12,
  ZONE_4 = 13,
  ZONE_5 = 2,
  ZONE_6 = 6,
  ZONE_7 = 5,
  ZONE_8 = 4,

  // Other status indicators
  TIMER = 7,
  INSIDE = 33,

  // 7-segment display - Digit 1 (leftmost)
  DIGIT1_A = 39,
  DIGIT1_B = 35,
  DIGIT1_C = 34,
  DIGIT1_D = 32,
  DIGIT1_E = 36,
  DIGIT1_F = 38,
  DIGIT1_G = 37,

  // 7-segment display - Digit 2 (middle)
  DIGIT2_A = 31,
  DIGIT2_B = 24,
  DIGIT2_C = 29,
  DIGIT2_D = 30,
  DIGIT2_E = 27,
  DIGIT2_F = 25,
  DIGIT2_G = 26,

  // 7-segment display - Digit 3 (rightmost)
  DIGIT3_A = 20,
  DIGIT3_B = 19,
  DIGIT3_C = 16,
  DIGIT3_D = 23,
  DIGIT3_E = 22,
  DIGIT3_F = 17,
  DIGIT3_G = 18,

  // Decimal point (between digit 2 and 3)
  DP = 28,
};


Thanks for the quick reply guys.
Attached is the front + rear of the two panels. I have also taken a screen record of what happens when I hit the buttons on a panel, starting with zone 1 enabled (impossible to disable all the zones as you probably know). ie. started the recording with the panel showing as on,off,off,off,off,off,off,off and ends recording with the panel showing as on,on,on,on,on,on,on,on

I will have another go reading the voltages when I press all the buttons on the panel, maybe I need to hold the press down longer to get the voltage to stabalise?

Cheers

actron_ha_buttons

Ugh that gif conversion from mp4 was horrible but hopefully you get the gist. It got cut off right at the last second, but zone 8 goes from on to off in the recording…

I have to break up the posts as I can’t upload multiple images per post.

Here is the AM7 panel (downstairs).