Tu n’aura pas la partie mqtt, ca c’est que dans mon fw, la tu utilise l’implementation tuya de esphome, tu peux eventuellement activer la partie mqtt d’esphome pour que ca passe par ca, mais tu n’aura pas les même option que je proposait a moins que tu les codes ![]()
ok merci pour ton retour @devildant.
Pour être sûr de bien comprendre (désolé si ce sont des questions stupides, mais c'est hors de mon domaine de compétences), avec les nouvelles clim Airton, est-on obligé d'utiliser l'implémentation Tuya et de perdre ainsi ce que tu proposais ? Ou est-il possible d'adapter tes développements pour les rendre compatibles ? Dans mon cas le contrôle via MQTT est essentiel, l'objectif est d'avoir les mêmes fonctionnalités que sur mes autres clim avec un contrôle via la domotique.
En gros oui, la version que je propose coté logiciel c’est quelque chose que j’ai coder entièrement avec esphome, l’ancien module etait compatible tuya mais ce n’etait pas du tuya mcu, j’avais donc du decoder chacune des trames rx/tx pour pouvoir communiquer avec la clim et j’avais construit le fw autour de ca et j’ai implementer au fur et a mesure tout se qui pouvait me sembler utils, comme tout faire passer par mqtt pour avoir un controle logique entre les fonctions (par exemple en desactiver certaines en fonction des modes et d’autre options pour respecter le comportement de la telecommande…) et pour rendre le module compatible jeedom et autre…
Toutes les option pour configurer mqtt sans devoir reflasher, c’est pareil, ainsi que la fonction de commande memorisé ou la gestion des erreurs…
Tuya mcu n’est qu’une implementation disponible en open source sur esphome, donc il est tout a fait possible de le fork pour faire les modifs voulu dessus, mais c’est quelque chose qu’ils va falloir maintenir au file des maj d’esphome…
Mais c'est faisable, contrairement a la version que je propose ou rien n'était documenter ou autre la tout le code est disponible
Une autre possibilité ca serait de comprendre la logique des trames de tuya mcu et modifier la partie logique rx/tx de mon code pour faire du tuya mcu
tu pourrais ainsi retrouver des fonctionnalité similaire a l’exception du mute de commande car si elle existe faut la trouver
Merci beaucoup Devildant et Forhorse ! Grâce à vos indications, on a pu relier les 5 clims Airton de notre Atelier. J’ai commandé les cartes sur JLCPCB et en suivant le GitHub, j’ai pu avancer sans me prendre la tête. Un grand merci pour votre aide et votre travail ! ![]()
![]()
Salut, peut-être discuté ailleurs (ou hors sujet) et dans ce cas là m'excuser mais.... Je viens d'activer mon esp8285 qui peut scanner/transmettres des codes IR.
Il faut savoir comment 'progammer' un ESP mais c'est pas super difficile non plus.
Matériel
- FT232 d'Aliexpress (< 10EUR) pour la programmation
- ESP8285 d'Aliexpress (<5 EUR)
- prise usb ou sorte pour l'alimentation 5V
Logiciel:
- ESPHOME
Example de code:
# Board: Generic ESP8285 Module (Espressif)
# Definition: definitions/boards/esp8285/manifest.yaml
esphome:
name: esp-infrared
friendly_name: ESP_INFRARED
esp8266:
board: esp8285
logger:
level: DEBUG
baud_rate: 115200
api:
ota:
- platform: esphome
wifi:
ssid: !secret wifi_ssid2
password: !secret wifi_password2
manual_ip:
static_ip: 192.168.1.160
gateway: 192.168.1.1
subnet: 255.255.255.0
remote_receiver:
pin:
number: GPIO14
inverted: true
dump:
- raw
remote_transmitter:
pin:
number: GPIO4
inverted: false
carrier_duty_percent: 50
id: airton_tx
button:
- platform: template
name: "Airco OFF"
on_press:
- remote_transmitter.transmit_raw:
code: [6657, -3325, 429, -1268, 402, -1268, 404, -402, 428, -411, 425, -1266, 402, -410, 424, -1268, 400, -1268, 401, -1269, 401, -407, 428, -405, 429, -406, 428, -1267, 403, -380, 451, -407, 429, -407, 426, -409, 425, -408, 428, -1268, 401, -407,
428, -405, 428, -406, 429, -405, 429, -406, 428, -405, 430, -1267, 401, -1268, 401, -406, 428, -407, 428, -407, 427, -407, 453, -381, 429, -405, 428, -406, 426, -408, 426, -408, 429, -405, 428, -407, 427, -408, 427, -406, 428, -407, 426, -408, 428,
-1267, 401, -407, 426, -406, 431, -405, 428, -1268, 400, -1269, 400, -1268, 404, -404, 431, -406, 426, -407, 430, -404, 426, -1269, 401, -1268, 400, -1269, 401]
repeat:
times: 5
wait_time: 16ms
carrier_frequency: 38kHz
- platform: template
name: "Airco Cool 22°C"
on_press:
- remote_transmitter.transmit_raw:
code: [6655, -3332, 424, -1247, 424, -1245, 425, -408, 425, -409, 427, -1246, 424, -407, 427, -1265, 404, -1270, 400, -1274, 396, -408, 426, -410, 425, -408, 426, -1270, 400, -408, 426, -408, 427, -408, 426, -1270, 400, -408, 426, -409, 426,
-1270, 400, -408, 426, -409, 426, -408, 426, -409, 426, -408, 427, -1269, 400, -1269, 401, -407, 427, -408, 427, -408, 427, -407, 427, -408, 427, -407, 426, -409, 426, -409, 426, -408, 426, -408, 426, -409, 426, -408, 426, -409, 426, -408, 426, -409,
426, -1268, 401, -408, 427, -408, 426, -408, 427, -1268, 401, -1269, 402, -407, 427, -408, 426, -1269, 400, -409, 426, -408, 427, -1268, 401, -1269, 400, -1271, 398]
repeat:
times: 5
wait_time: 16ms
carrier_frequency: 38kHz
- platform: template
name: "Airco Cool 23°C"
on_press:
- remote_transmitter.transmit_raw:
code: [6659, -3329, 428, -1267, 403, -1267, 402, -406, 429, -406, 430, -1268, 400, -406, 430, -1266, 402, -1245, 425, -1268, 402, -406, 428, -406, 429, -406, 428, -1268, 402, -406, 428, -407, 428, -406, 428, -1269, 402, -405, 429, -406, 428,
-1268, 402, -406, 428, -407, 428, -406, 428, -407, 428, -1268, 402, -1268, 401, -1268, 402, -406, 429, -406, 428, -407, 427, -407, 428, -406, 429, -406, 429, -406, 429, -405, 428, -407, 428, -406, 428, -407, 428, -407, 427, -407, 428, -406, 428, -407,
428, -1267, 403, -407, 427, -406, 431, -406, 427, -1266, 402, -1269, 402, -1267, 402, -1268, 402, -406, 428, -1268, 428, -380, 428, -1269, 401, -1272, 397, -1268, 402]
repeat:
times: 5
wait_time: 16ms
carrier_frequency: 38kHz
- platform: template
name: "Airco Cool 24°C"
on_press:
- remote_transmitter.transmit_raw:
code: [6650, -3351, 401, -1245, 424, -1243, 425, -411, 423, -411, 423, -1243, 425, -411, 422, -1245, 424, -1244, 427, -1242, 424, -411, 423, -411, 423, -410, 424, -1247, 422, -409, 424, -410, 423, -412, 424, -1243, 424, -410, 424, -410, 424,
-1236, 433, -409, 424, -410, 424, -410, 427, -408, 422, -411, 422, -412, 423, -411, 423, -1268, 400, -411, 425, -409, 423, -410, 422, -412, 423, -411, 423, -411, 426, -407, 424, -410, 425, -409, 423, -411, 424, -410, 423, -411, 422, -412, 423, -410,
424, -1266, 401, -411, 423, -411, 424, -410, 423, -1267, 400, -1267, 402, -411, 423, -1266, 402, -412, 422, -1267, 401, -411, 422, -1268, 401, -1267, 401, -1267, 402]
repeat:
times: 5
wait_time: 16ms
carrier_frequency: 38kHz
- platform: template
name: "Airco Cool 25°C"
on_press:
- remote_transmitter.transmit_raw:
code: [6652, -3328, 427, -1267, 401, -1267, 401, -406, 428, -406, 428, -1267, 401, -406, 429, -1267, 400, -1269, 400, -1268, 401, -406, 428, -406, 429, -406, 428, -1266, 402, -405, 429, -407, 426, -406, 428, -1267, 401, -407, 427, -407, 428,
-1266, 402, -408, 425, -405, 430, -407, 427, -409, 425, -1266, 401, -407, 428, -405, 429, -1266, 402, -408, 426, -408, 423, -411, 426, -406, 427, -407, 428, -408, 425, -406, 452, -382, 428, -405, 428, -408, 427, -408, 424, -408, 426, -409, 427, -404,
430, -1265, 401, -407, 428, -405, 429, -406, 426, -1269, 398, -1270, 400, -1268, 401, -407, 429, -407, 426, -1266, 401, -407, 427, -1267, 401, -1268, 377, -1291, 406]
repeat:
times: 5
wait_time: 16ms
carrier_frequency: 38kHz
```
Content que ce soit utilisé (le cloud tuya c'est le mal haha) Amusez-vous bien avec les automatisations !
c'est toujours utiles, par contre faut un décodage complet des trames IR pour les recomposer, car la télécommande envoi normalement sont état complet à chaque commande IR, donc se que tu capture contient beaucoup de chose (vitesse de ventilateur, position des volets, les mode...)
Oui... oublié car il faut scanner tout les options et ce n'est pas facile à combiner tous, p.e. fan mi-force, 24C et swing....le même avec 22C, 23C, etc. et trops de boutons en résultat.
Entretemps, j'ai trouvé ça [airton] Add support to climate for Airton IR A/C units by Procsiab · Pull Request #7753 · esphome/esphome
!Il faut le modifier un petit peut (j'ai commenté le PR) mais ça marche pas mal comme 'climate' entity dans HA J'ai modifié le code et Procsiab l'a accepté donc on peut utiliser ça comme 'external component'
Hello ! Je me permet de demander un peu d'aide car finalement 2 des 4 Clims sont en USB..
J'ai le PCB de Forhorse et dessus il y a un header +5V RX/TX GND, je peux pas simplement souder un vieux cable USB et ensuite utiliser le mode TUYA MCU ?
Hello,
j'aurais envi de dire oui pour le re picage sur le header mais il faut que @Forhorse le confirme, et pour le fw oui, et @frixo avait deja fait une première pass fonctionnel : Module WIFI climatisation AIRTON - #632 par frixo
pour rappel la conf pour le pcb de Forhorse :
board: lolin_c3_mini
TX: GPIO21
RX: GPIO20
par contre je ne sais plus si sur sont PCB si le RX/TX fait référence au coté AC ou ESP, car dans le miens j'avais suivi la logique de l'acw02 d'origine qui faisait référence au TX/RX coté AC...
au pire si ca marche pas dans un sens essayer dans l'autre pour TX/RX :p, mais je pense que Forhorse pourra éclaircir ce point.
Oui tu peux te brancher directement sur le header +5V/RX/TX/GND.
Les pin RX/TX et GND sont tout simplement en parallèle de celle du connecteur JST qui va normalement à la clim (signaux série TTL 5V).
La pin +5V est en amont du régulateur +3.3V (et donc en aval du convertisseur 12V-5V) ça ne pose pas spécialement de soucis d'alimenter le circuit par là (c'est comme de l'alimenter par le connecteur USB)
Si le régulateur à découpage U2 se met à chauffer (ce qui ne devrait pas arriver) il faudrait enlever le transistor Q1 ou court-circuiter la diode D2 pour couper la liaison entre le 12V et le 5V mais c'est normalement pas nécessaire.
EDIT : Et pour le TX et RX c'est la notation conventionnelle, c'est à dire que le TX du module est celui qui émet du point de vue du module (et donc le RX c'est par là que le module reçoit)
ok super merci !
Je fais ça et vous tiens au courant ![]()
Tout fonctionne avec ESPHome 2026.6.4 et le composant tuya natif (aucun composant custom nécessaire).
Matériel
-
Clim Airton SMVH24B-4A2A3NA(I), 6200 W mono → protocole Tuya MCU (
55 AA 03 …). -
PCB de Forhorse.
-
Alimentation +5 V directpar l'USB de la clim, relié au header +5 V du PCB
Firmware
-
ESPHome 2026.6.4, composant
tuyastock (natif). -
Le fork/patch de frixo (
tuya_patchedenexternal_components) n'est pas nécessaire dans mon cas : le tuya natif gère tout (init complète, lecture et écriture des datapoints).
Câblage à partir d'un vieux câble USB coupé
| Fil USB | Norme USB | PCB |
|---|---|---|
| Rouge | +5 V | +5 V |
| Noir | GND | GND |
| Vert | D+ | TX |
| Blanc | D- | RX |
J'ai debug pendant 1h avant de simplement inverser TX et RX physiquement ^^
Alimentation / activation
Le +5 V n'est pas toujours présent sur le port. Il faut appuyer sur le bouton WiFi de la télécommande pour le libérer (tension mesurée plutôt ~3,3 V, LED du PCB qui clignote). Sans ça, le module ne s'alimente pas.
Configuration UART (YAML)
substitutions:
board: lolin_c3_mini
TX: GPIO21
RX: GPIO20
# Pas d'external_components : composant tuya natif d'ESPHome
uart:
id: uart_acw02
tx_pin: ${TX} # GPIO21
rx_pin:
number: ${RX} # GPIO20
baud_rate: 9600
rx_buffer_size: 1024
tuya:
Et tout est bon ! Merci encore pour tout le taff ![]()
Merci pour le retour, vous auriez le reste du yaml pour la commu ? (Et je pourrais le fournir dans mon github)
Sans vos identifiants bien sur ![]()
Bien sur ! Dans cet exemple j'ai le tuya patched parce qu'au final mon autre clim de 5100W avait le double 55...
substitutions:
dev_name: clim_XX
dev_friendly: Climatisation XXX
lang: "fr"
api_encrypted_key: ****
ota_password: ****
ap_password: ****
web_server_username: admin
web_server_password: admin
# ESP32 D1 mini WROOM 32
board: lolin_c3_mini
TX: GPIO21
RX: GPIO20
esphome:
name: ${dev_name}
friendly_name: ${dev_friendly}
platformio_options:
build_flags:
- -DDLOCALE_LANG=\"${lang}\"
- -DDBOARD=\"${board}\"
# Fork tuya (frixo) : filtre le double 0x55 que ce MCU envoie (55 55 AA...)
external_components:
- source:
type: local
path: tuya_patched
components: [tuya]
esp32:
board: ${board}
framework:
type: esp-idf
web_server:
port: 80
auth:
username: ${web_server_username}
password: ${web_server_password}
version: 3
log: true
local : true
include_internal: true
logger:
level: DEBUG
api:
encryption:
key: ${api_encrypted_key}
reboot_timeout: 0s #in test for not forcing using esphome native
ota:
- platform: esphome
password: ${ota_password}
- platform: web_server
wifi:
ssid: Domo-EntreMakers
password: CLMDPdelaDOMO
power_save_mode: none
ap:
ssid: ${dev_friendly}
password: ${ap_password}
captive_portal:
uart:
id: uart_acw02
tx_pin: ${TX}
rx_pin:
number: ${RX}
baud_rate: 9600
rx_buffer_size: 1024
# --- DEBUG TEMPORAIRE : affiche les trames UART brutes (a retirer ensuite) ---
debug:
direction: BOTH
dummy_receiver: false
after:
timeout: 15ms
sequence:
- lambda: UARTDebug::log_hex(direction, bytes, ' ');
#marche pas 9600 57600 115200
# stop_bits: 1
# rx_buffer_size: 1024
tuya:
id: tuya_clim
climate:
- platform: tuya
id: acw02
name: "Climatiseur"
switch_datapoint: 1
supports_heat: true
supports_cool: true
target_temperature_datapoint: 2
current_temperature_datapoint: 3
temperature_multiplier: 0.1
on_state:
- lambda: |-
if (x.target_temperature < 10) {
id(acw02).target_temperature = x.target_temperature * 10;
}
visual:
min_temperature: 16
max_temperature: 31
temperature_step: 1
active_state:
datapoint: 4
heating_value: 3
cooling_value: 1
drying_value: 2
fanonly_value: 4
select:
- platform: tuya
name: "Ventilation"
enum_datapoint: 5
options:
0: "Auto"
1: "20%"
2: "40%"
3: "60%"
4: "80%"
5: "100%"
6: "Silencieux"
7: "Turbo"
- platform: "tuya"
name: "Oscillation Vertical"
enum_datapoint: 107
options:
0: "Désactivé"
1: "Activé"
2: "Position 1"
3: "Position 2"
4: "Position 3"
5: "Position 4"
6: "Position 5"
- platform: "tuya"
name: "Unité"
enum_datapoint: 105
options:
0: "°C"
1: "°F"
- platform: "tuya"
name: "Oscillation Horizontal"
enum_datapoint: 106
options:
0: "Désactivé"
1: "Activé"
switch:
- platform: "tuya"
name: "Affichage"
switch_datapoint: 13
- platform: "tuya"
name: "Purificateur"
switch_datapoint: 110
- platform: "tuya"
name: "Nuit"
switch_datapoint: 109
Merci ![]()
Pour le souci du 55 en double j’avais trouvé un repo qui avait fork tuya mcu d’esphome pour corriger pas mal de souci, frixo n’a pas tu le temps de tester :GitHub - szupi-ipuzs/esphome-external-uyat · GitHub
Bonjour à tous, désolé je suis pas venu sur le forum depuis longtemps
Cette histoire de double 55 c'est quand même vraiment de la merde !
Bon avec le recul, mon truc marche très bien à une exception près, la température relevée dans la pièce des fois déconne, il me dit que des fois qu'il fait 2 degrés
Sinon je reviens sur cette histoire du double 55. Je mettais quand même demandé si cela ne pouvait pas venir de la piètre qualité des ESP que j'utilise, on va pas se mentir j'ai pris des trucs chinois à 2 € pièces qui normalement ne m'ont pas trop déçu
Je pense que j'ai compris le bug
55:AA:03:07:00:08:03:02:00:04:00:00:00:FA:14 → 250 = 25.0°C ✓
En mode clim Off
55:AA:03:07:00:08:03:02:00:04:00:00:00:04:1E → 4 = 0.4°C ✗ 55:AA:03:07:00:08:03:02:00:04:00:00:00:0E:28 → 14 = 1.4°C ✗
Lorsque la clim est éteinte , j'ai un bug dans la trame !!! il me manque un F a la place du 0
je teste le correctif, mais ca correspondrait a la température de ma sonde que j'ai mis a côté
On dirait que tu as du parasitage, faudrait essayer de mettre le blindage du cable usb a la masse voir si ca fait quelque chose ou rien dutout
Bonjour
j'ai modifier le tuya_patched :
j'ai normalement corrigé le soucis de la température, il y a deux bug,
lorsque la clim est éteinte, elle bug dans la tram qu'elle envoit et ... elle envoit deux trame a 10ms d'interval
j'en prend qu'une (sinon tuya s'emballe) et je la corrige, faudrait que je teste sur des température en dessous de 20deg mais c'est pas possible avec le climat actuel. pour l'instant, j'ai enfin des valeurs cohérente !
ca reste du beta !!!


