FujitsuAC Integration

Hello, I created Fujitsu air conditioners integration for newer models with UART.

  • not yet fully tested.
    current status of AC is showed in HomeAssistant without problems.
    Some controls are not working yet, I believe I will fix it it near future.

Hardware required:

  • ESP32
  • DC/DC Adapter (currently I used powerbank for testing)
  • connection plug

Do not connect any of these pins to external device, like your computer. If you touch AC GND with, lets say laptop GND, it will fry your laptop USB port and/or AC mainboard fuse.


5 Likes

Fixed couple bugs, now AC control is working

1 Like

So, soldered controller for one unit. Also included OTA to example code. So far, so good.
Next step to design a box which would fit to dedicated place for controller.

btw, why I cannot edit my first post of this topic?



I have loaded up your controller code and hooked it into my ASTG18KMTC wall unit. I am using an M5 Atom Lite. I only looked at the status messages for now and it’s working correctly from the limited testing I have done.


Thanks for sharing your work thus far. I have 4 other headunits that this project should cover.

If you want someone to test some code or do some captures I am willing to help.

4 Likes

Very interested in this. Got almost to the same stage but gave up when I couldn’t decode/determine the commands etc.

1 Like

Nice. When you controlling with remote control, are states shown in home assistant correctly?
I see some registers differs from my ac, but i dont know what they mean. Maybe it defines what functions AC has.
Also, your AC has USB-type connection, right?

Does your remote look like one of these?

Yes it has the USB A male connector and connects to the newer anywAIR dongle. In the morning I will pick this up again and run through trying to control it. I haven’t tried any control from the esp yet. I couldn’t work out how to get the sketch to connect to an mqtt server with authentication. I have in the past done that with the pubsub library though. I’ll check my remotes in the morning as well.

try
if (mqttClient.connect(DEVICE_NAME, “MQTT_USER”, “MQTT_PASS”, topic, 0, true, “offline”)) {

1 Like

I will do. That looks right.
I have one anywAIR 2 dongle that I have never used as well. The models it covers are in this document, and it would appear are likely to be controlled via this method.


My remote control is slightly different.

I see, your AC has horizontal fins position also (mine has vertical only).
So listen topic “fujitsu/7c9ebdf0677c/debug/changed/#”, replacing unique id by yours and see, what registers change when you change fins positions with remote control (vertical and horizontal). Also when enabling swing

mosquitto_sub -h 192.168.1.100 -t fujitsu/7c9ebdf0677c/debug/changed/# -v

I have updated the code and used the authenticated MQTT. I can control the aircon via home assistant now.

I have run through the swing & direction functions and attached the register changes.

Horizontal Direction Range (The trace also includes turning the aircon on and off.)

fujitsu/d4d4da9d1884/debug/changed 1000 | 0000 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0000 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0000 -> 0003
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0001 -> 0002
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0003 -> 0004
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0004 -> 0005
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0005 -> 0004
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0004 -> 0003
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0003 -> 0002
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0002 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0001 -> 0002
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0002 -> 0003
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0003 -> 0004
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0004 -> 0005
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0005 -> 0004
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0004 -> 0003
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0003 -> 0002
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0002 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0001 -> 0002
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0002 -> 0003
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0003 -> 0004
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0004 -> 0005
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0005 -> 0004
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0004 -> 0003
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0003 -> 0002
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0002 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0001 -> 0002
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0002 -> 0003
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0003 -> 0004
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0004 -> 0005
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0005 -> 0004
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0004 -> 0003
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0003 -> 0002
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0002 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0001 -> 0002
fujitsu/d4d4da9d1884/debug/changed 1000 | 0001 -> 0000
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0002 -> 0000
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0002 -> 0000

Vertical Direction Range

fujitsu/d4d4da9d1884/debug/changed 10A0 | 0002 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0001 -> 0002
fujitsu/d4d4da9d1884/debug/changed 2020 | 17D4 -> 1838
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0002 -> 0003
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0003 -> 0004
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0004 -> 0003
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0003 -> 0002
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0002 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0001 -> 0002

Horizontal & Vertical Swing Enable and Disable
This cycled between No Swing, Vertical Swing, Horizontal Swing, Verticle and Horizontal Swing.

fujitsu/d4d4da9d1884/debug/changed 1011 | 0000 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0002 -> 0020
fujitsu/d4d4da9d1884/debug/changed 1023 | 0000 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0002 -> 0020
fujitsu/d4d4da9d1884/debug/changed 1011 | 0001 -> 0000
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0020 -> 0002
fujitsu/d4d4da9d1884/debug/changed 1023 | 0001 -> 0000
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0020 -> 0002
fujitsu/d4d4da9d1884/debug/changed 1033 | 186A -> 189C
fujitsu/d4d4da9d1884/debug/changed 2020 | 1838 -> 189C
fujitsu/d4d4da9d1884/debug/changed 1011 | 0000 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0002 -> 0020
fujitsu/d4d4da9d1884/debug/changed 1011 | 0001 -> 0000
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0020 -> 0002
fujitsu/d4d4da9d1884/debug/changed 1023 | 0000 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0002 -> 0020
fujitsu/d4d4da9d1884/debug/changed 1011 | 0000 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0002 -> 0020
fujitsu/d4d4da9d1884/debug/changed 1011 | 0001 -> 0000
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0020 -> 0002
fujitsu/d4d4da9d1884/debug/changed 1023 | 0001 -> 0000
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0020 -> 0002
fujitsu/d4d4da9d1884/debug/changed 1011 | 0000 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0002 -> 0020
fujitsu/d4d4da9d1884/debug/changed 1011 | 0001 -> 0000
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0020 -> 0002
fujitsu/d4d4da9d1884/debug/changed 1023 | 0000 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A9 | 0002 -> 0020
fujitsu/d4d4da9d1884/debug/changed 1011 | 0000 -> 0001
fujitsu/d4d4da9d1884/debug/changed 10A0 | 0002 -> 0020

To confirm notion: in the code (and in original fujitsu app) vertical swing is long fin that is moving up and down, so horizontal is small fins inside which are moving left to right

Can you confirm, that:
Vertical swing is still address 1011 and values (off = 0000, on = 0001)
Horizontal swing is in address 1023 and values (off = 0000, on = 0001)?

Swing
Both off:
1011 = 0000
1023 = 0000

Both on:
1011 = 0001
1023 = 0001

Vertical only:
1011 = 0001
1023 = 0000

Horizontal only:
1011 = 0000
1023 = 0001

Vertical

  • When vertical swing turned on, vertical position 10A0 changes to 0020?
  • After vertical swing turning off it fallbacks to 0002, or any previous state?
  • Only 4 vertical positions available? I see values from 1 to 4

Horizontal

  • When horizontal swing turned on, horizontal position 10A9 changes to 0020?
  • After horizontal swing turning off it fallbacks to 0002, or any previous state?
  • Only 4 vertical positions available? I see values from 1 to 5

What is state of registry 1010? Shown as /state/vertical_airflow

Verticle swing is as you describe it, up and down and horizontal swing is left to right.

The interesting thing is that it appears that register 10A0 which reports the vertical postion of the vane / louvre doesn’t report some positions in the debug stream.

The horizontal register seems fine.

Register Function Values / Notes
1011 Vertical Swing 0001 = On
0000 = Off
1023 Horizontal Swing 0001 = On
0000 = Off
10A0 Vertical Direction - 0001 = to 0004 = Top to Bottom
- 0020 = Swing mode
- Returns to position 3 when turned off
- More Postions are able to be set via the remote but are not reported in the debug stream
10A9 Horizontal Direction - 0001 to 0005 = 5 positions (Left to Right)
- 0020 = Swing mode
- Returns to previous position when swing is off

Register 1010 doesn’t yet make a lot of sense to me. I will look at that in more depth later if you like. It seems to be 1 in cool, dry and fan mode but then 4 in heat mode and in auto mode I saw it in 1 and 4. My MQTT history also records a 3 but I am not sure what I was doing at the time it recorded that. Happy to take some of this Dev chat elsewhere if you like? Can PM me and we can arrange something or else keep it here.

1 Like

Hello, I have an ASYG09KPCA unit that uses a UTY-TFSXF2 or UTY-TFSXH3. Will this integration work, or do these dongles not use UART?

I believe that will also work. What connector does the adapter connect to on your aircon? It may require some code changes but it at first glance seems like it’s going to be hardware compatible.

Through USB, I haven’t tested the code yet, I don’t want to fry any ESP hahaha

That’s the same socket that’s on my aircon. Mine uses the anywAIR II dongle and some of the code seems a bit different but the fundamentals are working. Despite that being a usb male plug, there is nothing usb about it. It will be 12v GND and RX plus TX. Benas discovered that the ground is a floating ground. Don’t connect your computer to it. The circuit that Benas used in the GitHub will work. I think he is working towards an esphome integration for this. Maybe someone will design a nice little compact dongle.

It didn’t work, HomeAssistant wasn’t updating and the indoor unit is giving an error 18.

Also I’ve found this table


it looks like my model uses another protocol, bad luck