Fujitsu AC (heat pump) integration via ESPHome [ESP32]

Hi @FOSV, I have no experience in electronics assembly, but I see that JCLPCB offer assembly of PCBs. However they don’t seem to stock all the relevant parts. In particular there is no MCP2025 – but there is a TLIN1028. Would you be interested building an updated model that uses parts JCLPCB stock? :pray:

Does anyone know if this code is compatible when directly using the UART interface that the wifi dongle (anywAIRⓇ technology Wi-Fi adaptor II | Fujitsu General) would normally plug into?

1 Like

I’m interested in buying 5 with or without the Atoms when you have them available.

I suspect there is enough demand that it would make sense to have a batch made - but your hand made version is good with me if you have them to sell.

Thanks,
-Ken

Hi Grant, I’d take one also

@His-his did you ever have any luck with this?, just moved into a house that has an old ducted system using this control panel. I haven’t even figured out how to take it off the wall yet.

Since ESPHome 2025.2 remove Custom Component. How I recode this for update ?

climate:
- platform: custom
  lambda: |-
    auto fujitsuClimate = new fujitsu::FujitsuClimate();
    App.register_component(fujitsuClimate);
    return {fujitsuClimate};

  climates:
    - name: "Fujitsu"    
  
captive_portal:
1 Like

Hi, I have the same problem and I don’t know how to solve it.

Just wanted to say a big thank you to all who have contributed to this project. I finally assembled all the pieces over the weekend and its working perfectly!

Put all the pieces on a 50x70mm prototyping board and designed and printed and enclosure for it.

1 Like

I’m in the same situation as @ravecas and @FlaMike and some others. My yaml has been working great for a couple of years but now I get the dreaded error The “custom” component has been removed. Consider conversion to an external component. I can’t upgrade.

Here’s my yaml. Any help greatly appreciated.

esphome:
  name: esphome-web-08efd4
  friendly_name: Fujitsu WiFi ESP32
  includes:
    - FujitsuClimate.h
    - FujitsuClimate.cpp
    - FujiHeatPump.h
    - FujiHeatPump.cpp

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:
  logs:
    component: ERROR

# Enable Home Assistant API
api:
  encryption:
    key: *(deleted)*
ota:
  platform: esphome

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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome-Web-08Efd4"
    password: "T27DGAlFgJSg"

captive_portal:
    
climate:
- platform: custom
  lambda: |-
    auto fujitsuClimate = new fujitsu::FujitsuClimate();
    App.register_component(fujitsuClimate);
    return {fujitsuClimate};

  climates:
    - name: "Fujitsu WiFi ESP32"

See my recent edit on the original post.
I’ll need to work on supporting external components.
No promise on when that’ll be done.

1 Like

Thank you, didn’t see the edit on the original post. looking forward to it.

the author of this project has reached out to me, if you want you can give this a try:

In case it helps (and others find this useful), I found an external component that re-enables custom components via an external components:

Not perfect as a solution, but seems to be an effective workaround for the time being!

You just need to add the following to your yaml file (I added mine just above the climate section):

external_components:
  - source:
      type: git
      url: https://github.com/robertklep/esphome-custom-component
    components: [ custom, custom_component ]

Hope this helps others!

Hey team, trying to troubleshoot my setup. If connected correctly, before rebooting the AC unit, should the ESP be able to read the primary controller but not control the unit? Then after a reboot be identified as a second controller? Am I understanding that correctly? I am not getting either of these behaviors I am just making sure I understand correctly :smiley:

I have had to use a 2021-330 instead of the 2025 so I am not confident my circuit is working, on top of this this is my first substantial project :smiley:

I am seeing the web interface on the ESP but it wont change anything on the unit or mirror any changes made on the primary controller.

This is my attempt at remapping the 2021 chip:

And my breadboard setup to test (sorry I am a terrible photographer):

  • have to include in another post

ESP web_server interface:

  • have to include in another post

Any my yaml file.

substitutions:
  name: test-fuji
  friendly_name: Test Fuji
  halcyon_name: Test Fuji
  esp_board: esp32dev

esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  includes:
    - FujitsuClimate.h
    - FujitsuClimate.cpp
    - FujiHeatPump.h
    - FujiHeatPump.cpp

esp32:
  board: ${esp_board}

packages:
  wifi: !include common/wifi.yaml

api:

web_server:
  port: 80
  auth:
    username: !secret web_server_username
    password: !secret web_server_password

logger:
  level: DEBUG

captive_portal:

external_components:
  - source:
      type: git
      url: https://github.com/robertklep/esphome-custom-component
    components: [ custom, custom_component ]

climate:
- platform: custom
  lambda: |-
    auto fujitsuClimate = new fujitsu::FujitsuClimate();
    App.register_component(fujitsuClimate);
    return {fujitsuClimate};

  climates:
    - name: "Fujitsu"

I am stuck and do not know where to go from here :frowning:

And my breadboard setup to test (sorry I am a terrible photographer):

You should be receiving from both and begin transmitting after power cycling the HVAC system (power cycling only the primary controller is sufficient, if it is easy to disconnect)

Thanks, works for me.

1 Like

Thanks for the reply. I am definitely doing something wrong then, I am getting no feedback at all, every time I change the mode in the web_interface it just resets to 16 degrees and off.

Any tips, I am stuck for next steps.

Works great, thanks.

1 Like

Hi! amazing project! :slight_smile: newy here. for some reason i don’t understand, i can’t upload the component to the ESP32 board via the yaml file. I got this error after update:

INFO ESPHome 2025.2.2
INFO Reading configuration /config/esphome/esphome103.yaml...
INFO Generating C++ source...
INFO Updating https://github.com/espressif/[email protected]
INFO Compiling app...
Processing esphome103 (board: esp32dev; framework: espidf; platform: https://github.com/pioarduino/platform-espressif32.git#51.03.07)
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
 - framework-espidf @ 3.50105.0 (5.1.5) 
 - tool-cmake @ 3.21.3 
 - tool-esptoolpy @ 4.8.1 
 - tool-mklittlefs @ 3.2.0 
 - tool-ninja @ 1.7.1 
 - tool-riscv32-esp-elf-gdb @ 12.1.0+20221002 
 - tool-xtensa-esp-elf-gdb @ 12.1.0+20221002 
 - toolchain-esp32ulp @ 2.35.0-20220830 
 - toolchain-xtensa-esp32 @ 12.2.0+20230208
Reading CMake configuration...
Generating assembly for certificate bundle...
Dependency Graph
|-- ArduinoJson @ 6.18.5
Compiling .pioenvs/esphome103/src/FujiHeatPump.cpp.o
Compiling .pioenvs/esphome103/src/FujitsuClimate.cpp.o
In file included from src/FujiHeatPump.cpp:4:
src/FujiHeatPump.h:5:10: fatal error: HardwareSerial.h: No such file or directory

************************************************************************
* Looking for HardwareSerial.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:HardwareSerial.h"
* Web  > https://registry.platformio.org/search?q=header:HardwareSerial.h
*
************************************************************************

    5 | #include "HardwareSerial.h"
      |          ^~~~~~~~~~~~~~~~~~
compilation terminated.
*** [.pioenvs/esphome103/src/FujiHeatPump.cpp.o] Error 1
In file included from src/FujitsuClimate.h:2,
                 from src/FujitsuClimate.cpp:1:
src/FujiHeatPump.h:5:10: fatal error: HardwareSerial.h: No such file or directory

************************************************************************
* Looking for HardwareSerial.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:HardwareSerial.h"
* Web  > https://registry.platformio.org/search?q=header:HardwareSerial.h
*
************************************************************************

    5 | #include "HardwareSerial.h"
      |          ^~~~~~~~~~~~~~~~~~
compilation terminated.
*** [.pioenvs/esphome103/src/FujitsuClimate.cpp.o] Error 1
========================= [FAILED] Took 16.68 seconds =========================

My yaml file is this:

esphome:
  name: "esphome103"
  friendly_name: Fujitsu103
  min_version: 2024.11.0
  name_add_mac_suffix: false
  includes:
    - FujitsuClimate.h
    - FujitsuClimate.cpp
    - FujiHeatPump.h
    - FujiHeatPump.cpp


esp32:
  board: esp32dev
  #board: nodemcu-32s
  framework:
    type: esp-idf

# Enable logging
logger:

# Enable Home Assistant API
api:

web_server:
  port: 80

# Allow Over-The-Air updates
ota:
- platform: esphome

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

   # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Fujitsu"
    password: "a password for cative portal"

captive_portal:

external_components:
  - source:
      type: git
      url: https://github.com/robertklep/esphome-custom-component
    components: [ custom, custom_component ]

climate:
- platform: custom
  lambda: |-
    auto fujitsuClimate = new fujitsu::FujitsuClimate();
    App.register_component(fujitsuClimate);
    return {fujitsuClimate};

  climates:
    - name: "Fujitsu"

I’ve already copied the “FujitsuClimate.h/cpp” files, the “FujitsuPump.h/cpp” and the “HardwareSerial.h/cpp” just in case to the config/esphome folder.

It’s even more stange because in two past ocasions, i was able to upload the components without any problem. but now, it’s failing again and again.

Any idea what i’m doing wrong? Thanks in advance!