Module WIFI climatisation AIRTON

Merci pour cet excellent travail, j’ai ré-utilisé votre logique et j’ai créé un module semblable en Zigbee (Testé avec Zigbee2mqtt / Home Assistant).

Pour l’instant c’est encore au stade de développement, j’ai un prototype qui fonctionne sur ma clim Airton mais je dois encore faire le PCB et l’intégrer proprement.

Pour ceux que ça intéresse plus d’info sur mon Github Fabiancrg

1 « J'aime »

Nice, pour le pcb j’ai deja fait un pcb qui est compatible seeed studio (xiao) esp 32 c3/c6, jai fournis toutes mes sources et il y a mon export de projet easyeda si tu veux : acw02_esphome/PCB/lolin_c3_xiao_c3_xiao_c6/v1.0 at main · devildant/acw02_esphome · GitHub

si j’ai volontairement utiliser des marques pour les esp c’est qu’on ma rapporter des souci avec certain model chinois qui ne fonctionne pas avec les climatiseurs (a cause des convertisseur 5v vers 3v), au moins avec ces marques je suis sur de la qualité, un peu plus cher certes mais vos mieux assurer le coup au vu du prix des climatiseur ^^

Ps: je suis conscient que mon code est assez gros et un peu verbeux mais je n’ai pas voulu trop factoriser pour simplifier la lecture et le maintient

@Fabiancrg une fois votre dev fini hésitez pas a me re contacter, je pourrais mettre un lien dans mon readme vers votre repo pour ceux qui cherche une alternative zigbee :slight_smile:

par contre je me pose la question de comment vous allez gerer les options conditionnel, par exemple l’option nuit si activé désactive le eco et vis versa (techniquement elles sont activable en meme temps mais le climatiseur risque de mal réagir, que se soit la télécommande ou le acw02 d’origine ne le permettent pas), le mode eco ne peux pas être activé avec le mode fan, ou encore en mode eco la vitesse de ventilation n’est plus réglable…

je n’ai pas l’impression que le zigbee permettent se genre de condition (vu que c’est des expositions d’endpoint), je suis curieux :stuck_out_tongue:

Pour info, un de mes users sur github, avait un model de clim airton qui utilise le module wifi 409945, il a fait un super travail d’analyse pour me donner les trames, et enfaite ce module utilise le protocol tuya MCU, cela étant supporté nativement par esphome, j’ai pu avec sont aide fournir un yaml, il y a quelques restrictions, comme l’impossibilité de mute, mais au pire vous pourrez dégager le buzzer a vos risque et périls ^^, et le status du display n’est pas remonté mais sinon les commandes sont la…

Donc toutes la partie hardware (pcb, impression 3d) est compatible.

1 « J'aime »

Tout d’abord, un GRAND MERCI pour ce superbe projet !

J’ai installé un ESP32 D1 mini WROOM 32 dans ma PAC monosplit Airton. À part une petite inversion initiale entre les fils RX et TX, tout a fonctionné du premier coup. L’intégration dans Home Assistant s’est également déroulée sans problème. :ok_hand:

J’ai toutefois deux questions :

  1. La température d’air ambiant retransmise est de 26,0 à 26,5 °C, alors que la température réelle de la pièce est de 22 °C, soit la valeur réglée sur ma PAC.

.

Je suppose donc qu’il ne s’agit pas de la bonne sonde ou de la bonne donnée remontée.
Y a-t-il un moyen de corriger cela ?

  1. Est-il possible de réguler la température de la pièce en se basant sur une sonde externe (autre que celle du split) ?

Merci d’avance pour votre aide et le temps consacré à ce projet !

1 « J'aime »

Hello, c’est la temperature de la sonde de l’ac, elle devrait se reguler avec la ventilation.

Et la réponse a ta question est non, si j’avais pu le faire ca serait deja fait, il ya bien quelques solutions annexe mais elles sont hasardeuse et surtout elles engendreront une sur consommation, ou rendraient des options complètement inopérante (eco, night…)

Et normalement si tu appui sur le bouton affichage via la telecommande tu devrais voir pendant quelques seconde la temperature mesurer par l’ac avant que ca change pour la temperature de consigne.

Mon fw ne fait que lire les informations transmise par l’ac et a ma connaissance il y a qu’une seul sonde de temperature

Il faudrait vérifier le type de la sonde d’origine. Il est fort probable qu’il s’agisse simplement d’une résistance variable. Dans ce cas, il serait assez simple de la remplacer par un potentiomètre numérique piloté par l’ESP32.

Cela permettrait d’injecter à la clim la température souhaitée. L’ESP32 pourrait alors récupérer la température souhaitée via le Wi-Fi depuis une sonde intégrée à Home Assistant.

On peut même conserver la sonde d’origine câblée en parallèle via un interrupteur à deux positions. En cas de problème côté ESP32, il suffirait de basculer sur la sonde d’origine.

Cet interrupteur pourrait être doublé par un petit relais. Si l’ESP32 n’arrive plus à récupérer la valeur de température pendant un certain temps, la bascule vers la sonde d’origine se ferait automatiquement, garantissant ainsi un fonctionnement dégradé.

Oui potentiellement, mais rien ne garantie que tout le monde aura le meme type de sonde, rien que moi j’ai 2 unité identique concernant le model et pourtant le marquage sur la sonde est diff, ensuite faut accéder a la carte de l’ac et souder dessus donc perte de garantie et en cas de donné incorrect ou erreur ca peux soit mettre le système en sécurité soit potentiellement endommager la carte de l’ac.

En plus l’ac doit avoir un systeme de compensation interne je pense, donc si il faut prendre ca en compte la galere.

perso je m’y risquerais pas.

Autre solution qui peut être un compromis, juste déplacer la sonde pour la mettre a l’avant, ce que j’ai fait, ca marche bien pour le mode cool, pour le heat je sais pas

Le mieux serait de trouver un moyen de transmettre la temperature ambiante en uart, mais j’ai cherché un moment et je n’ai rien trouvé

Merci beaucoup pour votre retour, c’est déjà génial de pouvoir piloter ma PAC depuis Home Assistant. Encore un grand merci pour tout ce temps investit et d’avoir partager votre projet.

1 « J'aime »

Bonjour @martial10280 ,
Pourrais-tu nous en dire un peu plus sur le materiel utilisé? Ta version semble être une version simplifiée au maximum…

Merci

Il n’a pas utilisé :

  • le pcb donc branchement avec des files
  • De channel logic converteur donc il envoi direct du 5v sur le uart de l’esp 32 qui fonctionne normalement en 3v, donc il n’a pas de protect, et l’esp32 peut potentiellement griller a n’importe qu’elle moment (ou pas), en tout cas les esp ne supporte pas officiellement le 5v.
  • Le convertisseur 12 vers 5v que je conseille et il a utilisé un convertisseur Xv vers 5v, chinois, qui doit être regler pour sortir du 5v qui est plus gros et de moins bonne qualité que le pololu
  • Le bon connecteur, il a utiliser un dupont 4 pin, donc inversion possible…

Ouaip, c’est bien ce que j’avais compris :slight_smile:
Mais si ça tient dans le temps (et sans bugs d’alim) c’est tout benef (temps/argent) non ?

Salut,
J’ai fait mon montage et tout fonctionne à merveille. Faute d’imprimante 3d, j’ai acheté un boitier pvc mais je l’ai trouvé trop grand pour l’esp. Finalement j’ai tout casé dans une goulotte pvc, c’est nickel.

Comme je le disais avant, tout fonctionne à merveille mais j’ai une bizarrerie lorsque je veux consulter les logs dans esphome.

INFO ESPHome 2025.10.4
INFO Reading configuration /config/esphome/ha-esphome-builder-acw02-en.yaml...
WARNING Found 'xxxx$00000' (see substitutions->ota_password) which looks like a substitution, but '00000' was not declared
WARNING Found 'xxxx$00000' (see substitutions->ap_password) which looks like a substitution, but '00000' was not declared
WARNING Found 'xxxx$00000' (see substitutions->web_server_password) which looks like a substitution, but '00000' was not declared
INFO Starting looking for IP in topic esphome/discover/clim-salon
Traceback (most recent call last):
  File "/usr/local/bin/esphome", line 10, in <module>
    sys.exit(main())
             ^^^^^^
  File "/esphome/esphome/__main__.py", line 1387, in main
    return run_esphome(sys.argv)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/esphome/esphome/__main__.py", line 1374, in run_esphome
    rc = POST_CONFIG_ACTIONS[args.command](args, config)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/esphome/esphome/__main__.py", line 743, in command_logs
    return show_logs(config, args, devices)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/esphome/esphome/__main__.py", line 644, in show_logs
    network_devices := _resolve_network_devices(devices, config, args)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/esphome/esphome/__main__.py", line 324, in _resolve_network_devices
    mqtt_ips = mqtt_get_ip(
               ^^^^^^^^^^^^
  File "/esphome/esphome/__main__.py", line 293, in mqtt_get_ip
    return mqtt.get_esphome_device_ip(config, username, password, client_id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/esphome/esphome/mqtt.py", line 205, in get_esphome_device_ip
    mqtt_client = prepare(
                  ^^^^^^^^
  File "/esphome/esphome/mqtt.py", line 129, in prepare
    client.connect(host, port)
  File "/usr/local/lib/python3.12/site-packages/paho/mqtt/client.py", line 912, in connect
    self.connect_async(host, port, keepalive,
  File "/usr/local/lib/python3.12/site-packages/paho/mqtt/client.py", line 978, in connect_async
    raise ValueError('Invalid host.')
ValueError: Invalid host.

corrige tes warning deja,
et verif tes identifiant mqtt

pour ce qui est du mqtt, l’esp remonte bien dans mon brocker.

Lorsque je tente de corriger les warnings et de faire la mise à jour:

INFO ESPHome 2025.10.4
INFO Reading configuration /config/esphome/ha-esphome-builder-acw02-en.yaml...
INFO Generating C++ source...
INFO Compiling app...
Processing clim-salon (board: esp32dev; framework: espidf; platform: https://github.com/pioarduino/platform-espressif32/releases/download/54.03.21-2/platform-espressif32.zip)
--------------------------------------------------------------------------------
INFO Version mismatch for tool-esptoolpy: 1.30000.201119 != 5.0.2
INFO Reinstalling tool-esptoolpy due to version mismatch
INFO Package configuration completed successfully
Tool Manager: Installing https://github.com/pioarduino/registry/releases/download/0.0.1/esptoolpy-v5.0.2.zip
INFO Installing https://github.com/pioarduino/registry/releases/download/0.0.1/esptoolpy-v5.0.2.zip
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Tool Manager: tool-esptoolpy@5.0.2 has been installed!
INFO tool-esptoolpy@5.0.2 has been installed!
INFO Installing tools via idf_tools.py (this may take several minutes)...
Tool Manager: Installing file:///root/.platformio/tools/tool-esptoolpy
INFO Installing file:///root/.platformio/tools/tool-esptoolpy
Tool Manager: tool-esptoolpy@5.0.2 has been installed!
INFO tool-esptoolpy@5.0.2 has been installed!
INFO Tool tool-esptoolpy successfully installed
INFO Package configuration completed successfully
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
 - framework-espidf @ 3.50402.0 (5.4.2) 
 - tool-cmake @ 3.30.2 
 - tool-esp-rom-elfs @ 2024.10.11 
 - tool-esptoolpy @ 5.0.2 
 - tool-mklittlefs @ 3.2.0 
 - tool-ninja @ 1.13.1 
 - tool-scons @ 4.40801.0 (4.8.1) 
 - toolchain-xtensa-esp-elf @ 14.2.0+20241119
Reading CMake configuration...
Dependency Graph
|-- noise-c @ 0.1.10
|-- ArduinoJson @ 7.4.2
Compiling .pioenvs/clim-salon/src/esphome/components/acw02/acw02.cpp.o
Compiling .pioenvs/clim-salon/src/main.cpp.o
Linking .pioenvs/clim-salon/firmware.elf
usage: esp_idf_size [-h] [--format {table,text,tree,csv,json2,raw,dot}]
                    [--archives] [--archive-dependencies] [--dep-symbols]
                    [--dep-reverse] [--archive-details ARCHIVE_NAME] [--files]
                    [--diff MAP_FILE] [--no-abbrev] [--unify] [--show-unused]
                    [--show-unchanged] [--use-flash-size] [--lto] [-d]
                    [-o OUTPUT_FILE] [-s COLUMN] [-F PATTERN] [--sort-diff]
                    [--sort-reverse] [-q] [--no-color] [--force-terminal]
                    [--doc]
                    MAP_FILE
RAM:   [=         ]  11.3% (used 37036 bytes from 327680 bytes)
Flash: [=======   ]  69.0% (used 1265426 bytes from 1835008 bytes)
Building .pioenvs/clim-salon/firmware.bin
Creating ESP32 image...
Successfully created ESP32 image.
merge_factory_bin([".pioenvs/clim-salon/firmware.bin"], [".pioenvs/clim-salon/firmware.elf"])
Info: bootloader.bin not found - skipping
Info: partition-table.bin not found - skipping
Info: ota_data_initial.bin not found - skipping
Info: clim-salon.bin not found - skipping
Using FLASH_EXTRA_IMAGES from PlatformIO environment
Merging binaries into /data/build/clim-salon/.pioenvs/clim-salon/firmware.factory.bin
Merging binaries with esptool
SHA digest in image updated.
Wrote 0x1450a0 bytes to file '/data/build/clim-salon/.pioenvs/clim-salon/firmware.factory.bin', ready to flash to offset 0x0.
Successfully created /data/build/clim-salon/.pioenvs/clim-salon/firmware.factory.bin
esp32_copy_ota_bin([".pioenvs/clim-salon/firmware.bin"], [".pioenvs/clim-salon/firmware.elf"])
Copied firmware to /data/build/clim-salon/.pioenvs/clim-salon/firmware.ota.bin
========================= [SUCCESS] Took 30.02 seconds =========================
INFO Successfully compiled program.
INFO Starting looking for IP in topic esphome/discover/clim-salon
Traceback (most recent call last):
  File "/usr/local/bin/esphome", line 10, in <module>
    sys.exit(main())
             ^^^^^^
  File "/esphome/esphome/__main__.py", line 1387, in main
    return run_esphome(sys.argv)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/esphome/esphome/__main__.py", line 1374, in run_esphome
    rc = POST_CONFIG_ACTIONS[args.command](args, config)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/esphome/esphome/__main__.py", line 770, in command_run
    exit_code, successful_device = upload_program(config, args, devices)
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/esphome/esphome/__main__.py", line 618, in upload_program
    network_devices = _resolve_network_devices(devices, config, args)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/esphome/esphome/__main__.py", line 324, in _resolve_network_devices
    mqtt_ips = mqtt_get_ip(
               ^^^^^^^^^^^^
  File "/esphome/esphome/__main__.py", line 293, in mqtt_get_ip
    return mqtt.get_esphome_device_ip(config, username, password, client_id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/esphome/esphome/mqtt.py", line 205, in get_esphome_device_ip
    mqtt_client = prepare(
                  ^^^^^^^^
  File "/esphome/esphome/mqtt.py", line 129, in prepare
    client.connect(host, port)
  File "/usr/local/lib/python3.12/site-packages/paho/mqtt/client.py", line 912, in connect
    self.connect_async(host, port, keepalive,
  File "/usr/local/lib/python3.12/site-packages/paho/mqtt/client.py", line 978, in connect_async
    raise ValueError('Invalid host.')
ValueError: Invalid host.

Esphome a encore du casser un truc avec leurs breaking change regulier…

Ca te le fait a chaque fois? Ou seulement la premiere fois avant d’avoir defini les info mqtt?

En usb ou ota?