Renvoi IR MOES UFO-R11 / ZS06
Présentation
Sous son air anodin, sa petite taille et se promesses aguichantes, se cache en réalité des mécanismes et des fonctions insoupçonnés. De la plus trivial à quelque chose de plus abouti.
Je ne vais pas vous représenter en long, en large ni en travers l’objet ni même son utilisation rudimentaire.
Cela ne m’intéresse pas et ce n’est pas le but.
-
- Lisez cet article [FR] pour la présentation sommaire.
- Lisez cet article [FR] pour une présentation un peu plus détaillée.
- Lisez ce sujet du forum HACF.fr pour une utilisation plus détaillée.
- Lisez cet article [EN] pour une présentation plus fine.
Il existe en plusieurs versions (WiFi, Zigbee, Tuya), fonctionne avec 2 piles AAA (vendues séparément) avec la référence UFO-R11 (MOES).
Une copie sans marque sous la référence ZS06 et trouvable mais elle est filaire (donc routeur Zigbee, c’est un avantage).
Je vais vous emmener sur un terrain que je ne soupçonnais même pas lors de l’achat de ce boitier de renvoi de signaux infra-rouge.
Mon modèle :
- Fabricant : MOES
- Références : UFO-R11
- Protocoles : Zigbee
- Alimentation : 2 piles AA (vendues séparément)
- Autonomie : <no_data>
- Diffusion du signal : 360°
- Portée : « suffisante »
- Tarif : 18,19€ (30/06/2025)
- Vendeur : Aliexpress
- Intégration Z2M : Zigbee2MQTT.io
- Led temoin d’action : Oui, toute petite bleu
But initial
Pouvoir piloter sa climatisation qui n’est pas « intelligente » (connectée) sauf via sa télécommande à infra-rouge.
Au départ j’ai acheté ce boitier IR car il offre la possiblilité de capturer des signaux émis par une télécommande à proximité pour les enregistrer et les rejouer via sa box domotique (home-assistant).
C’est largement documenté de part la toile et je m’apprêtais à reproduire bêtement la même chose.
Ensuite, bah il fallait faire des boutons ainsi que tout le tralala… l’idée ne me réjouissait pas trop rien qu’au fait de penser que ça allait être « moche ».
Le signal IR
Comme beaucoup, je pensais que 1 bip = 1 code = 1 action. Quelque chose somme toute de basique.
Sauf qu’en réalité le code IR renvoyé par de très nombreuses télécommandes de climatisation (ou appareils s’y afférant) est en réalité un savant mélange de toutes les fonctions (de leur réglages donc) mais compilées dans un seul code envoyé en une seule pression !
Oui ! Il est faux de penser que le signal IR ne fait QUE une seule chose à la fois ! C’est certes vrai pour des appareils très simples comme les boitier led RGB à bas coût ou même pour les télécommandes des TV (lorsque l’on voyait encore la led IR s’illuminer dans le noir à chaque pression ^^).
Pour des utilisations plus complexes, le code IR est plus complexe. C’est le cas de nos climatiseurs par exemple.
En plus (ou plutôt en moins, c’est selon) le retour de l’information n’est pas assuré. Votre télécommande envoie un ordre et si cet ordre n’arrive pas, votre télécommande n’en saura rien et elle perdra sa « synchronisation » entre ce qu’elle affiche et ce qui est réellement pris en compte par votre climatiseur.
Mais en cas de désynchronisation, il suffit d’appuyer sur une seule touche et c’est comme si vous renvoyez l’intégralité des fonctions de la télécommande. Je vous explique ça ci-dessous.
Cas concret
Septique ? Faites l’essai par vous même :
- Votre climatiseur est en marche.
Il est configuré en mode climatisation à 25°C, vitesse du ventilateur à puissance minimum sans oscillation de la bouche de sortie. - Cachez la télécommande pour ne pas que le signal soit reçu par votre climatiseur.
- Modifiez 2 voir 3 réglages.
Votre télécommande va alors afficher des informations erronés car il n’y pas de retour d’état.
=> par exemple avec une température +2°C (27°C), une vitesse du ventilateur au maximum et l’oscillation activée. - Toujours avec cette télécommande désynchronisée présentez face à votre climatisation.
- Sur votre télécommande, changez uniquement la température pour la faire passer disons de -1°C (26°C).
- Le signal part et votre climatisation va alors mettre à jour la température comme demandée (26°C) mais aussi le vitesse du ventilateur et l’oscillation.
Tout ça juste avec un changement de la température !!!
C’est la preuve que le code envoyé par la télécommande n’est pas « juste » un seul code pour une seule fonction.
Mais cette conclusion, je m’en suis aperçue personnellement qu’après avoir commencé à m’intéresser au sujet au travers de ce boitier UFO-R11.
Une fois dans Home-Assistant
But premier : tester le boitier
Pré-requis :
- Boitier appairé et fonctionniel
- Intégration via Z2M et MQTT
- L’appareil répond au nom de « Télécommande IR«
Donc je vais commencer par capter les signaux pour les enregistrer dans un bête fichier texte et ainsi les intégrer plus tart.
Apprentissage
On se dirige au choix :
- Vers l’intégration MQTT > On cherche son appareil.
- On recherche directement l’appareil « Télécommande IR ».
La partie qui nous intéresse pour commencer est la zone ci-dessous.
- Cliquer sur l’icône
- Votre boitier une led bleu s’allume dans un coin supérieur de votre UFO-R11.
- Pointez votre télécommande et appuyez sur une touche.
- Le code apparaît sur votre page dans la section « Journal » mais aussi « Capteurs ».
La led bleu s’éteint. Si ce n’est pas le cas, cliquez sur le bouton - Notez ce code de votre coté dans un fichier texte.
- Dans la zone
vous pouvez tester votre code car… parfois ça ne fonctionne pas.
Pour savoir si ça fonctionne, votre boitier va réagir en allumant brièvement la petite led bleu. - Répétez l’opération pour vos boutons, mais pas trop vite, je vais vous montrer… beaucoup mieux !
Utiliser ces (ses) codes
Bon là je ne vous serais d’aucune aide aujourd’hui. Il existe tellement de possibilité que… Au lieu d’implémenter les code pour les rendrent utilisables, je vous propose de vous amuser juste avec le la fonction d’envoi du code en utilisant Zigbee via MQTT afin de simuler l’envoie d’une commande avec votre code fraichement appris.
Prêt ? C’est parti ! (après on verra mieux, promis)
Récupérer les informations
Pour récupérer les information nécessaire, avec MQTT il nous faut connaître le sujet (topic) ainsi que le message (payload).
En premier, nous utilisons la zone prévue à cet effet qui fonctionne, ultra simple (trop) mais fonctionnelle.
- Dans le champs « Ir code to send »
vous collez un code précédemment appris.
- Cliquez simplement en dehors du champs pour valider l’envoi.
- Si tout se passe bien, votre boitier va allumer brièvement une petite led bleu
- Vous verrez surtout sur la droite une nouvelle entrée dans le journal.
A la recherche de l’inconnu
Nous venons de procéder à un envoie de commande via MQTT qui fonctionne mais nous ne savons pas comment ça a fonctionné au juste.
Je vous propose de partir à la découverte de ce qu »il vient de se passer sous vos yeux.
On va déjà fair ele point sur ce qui a fonctionné donc. Dirigeons nous vers le « journal ».
- Cliquez sur l’entrée (en bleu) du journal concernant votre dernier apprentissage de code IR.
- Une fenêtre s’ouvre [capture 1].
- Cliquez en haut à droite sur le symbole
- Dans la nouvelle fenêtre qui s’ouvre [capture 2], on voit notement l’information à la sauce home-assistant mais ça va nous être utile pour la suite.
Ce qu’il faut voir c’est « ID d’identité » et qui chez moi vaut :sensor.telecommande_ir_ir_code_to_send - Ce qui nous intéresse surtout c’est la dernière parti du code (formaté à la sauce HA) qui est
ir_code_to_send
Vous aurez aussi observer que ce n’est pas moins que le titre de la fenêtre aussi…!
Notez cette information quelque part.
On cible notre recherche
Pour ce faire, toujours depuis la page d’intégration de votre boitier UFO-R11 :
- Cliquez sur
MQTT Info (PAS sur les
)
- Une fenêtre s’ouvre avec tout un tas de lignes.
- On recherche ce que plus haut nous venions de trouver comme information à savoir :
ir_code_to_send - Plusieurs choix (3) s’offrent à nous.
- Celle qui nous intéresse comporte un paramètre important :
/set
- Vous venez de trouver le sujet (topic) !
zigbee2mqtt/Télécommande IR/set
Notez que la dernière partie (ir_code_to_send) va être utilisée un peu différemment…
Mais vous venez aussi de voir le Nom Familier (Friendly_name) inscrit en clair dans la commande du sujet ! Donc si vous renommez votre appareil via Z2M, il y a de fortes chances pour que tous vos scénarios ne fonctionnent plus car l’appareil sera… différent.
Je ferais certainement un autre article sur le sujet…
Approfondissons
Toujours depuis la même fenêtre, depuis le sujet (topic) zigbee2mqtt/<Friendly Name>/set/ir_code_to_send
- On ouvre le menu déroulant et…
- … on retrouve exactement notre information à savoir le code IR que l’on a envoyé en guise de « payload » (message).
Donc maintenant, nous avons identifié avec certitude le sujet (topic) ainsi que le message (payload).
Via les outils de développeurs
Partons maintenant dans la phase expérimentale pour ceux qui n’ont jamais mis les pieds dans la machine.
- Allez dans Home-Assistant > Outils de développement > Menu « Actions ».
- Faites une recherche / Saisir : «
mqtt.publish«
- [Optionnel] Vous pouvez décocher les 3 cases, ce ne sera pas important dans notre cas.
- Dans le champs « Sujet » inscrire :
zigbee2mqtt/Télécommande IR/set - Cocher la case « Charge ».
- Dans le champs « Charge » inscrire :
{"ir_code_to_send": "<votre_code_IR>"}
Nous retrouvons l’informationir_code_to_senden tête de ligne oui… - Cliquez sur « Exécuter l’action » et normalement vous devriez constater que votre boitier UFO-R11 émet une petite diode bleu pour confirmer qu’elle émet un signal (donc votre commande est bonne)
Si vous passez en affichage Yaml, le code complet est :
YAML
data:
topic: zigbee2mqtt/Télécommande IR/set
payload: >-
{"ir_code_to_send":
"<votre_code_ir>"}
action: mqtt.publish
Via MQTT
Le principe reste le même, c’est juste que l’on passe par l’outil depuis l’intégration MQTT.
- Home-Assistant > Paramètres > Appareils et services > MQTT
- Cliquer sur le symbole
- Dans le champs « Sujet » inscrire :
zigbee2mqtt/Télécommande IR/set - Dans le champs « Charge utile » inscrire :
{"ir_code_to_send": "<votre_code_ir>"} - Cliquez sur « Publier »
- Votre boitier UFO-R11 doit réagir et allumer brièvement sa led bleu symbole d’exécution d’une commande.
Plugin « SmartIR »
Une histoire de formatage…
Avant de parler de l’application en elle-même, il faut bien comprendre une chose.
Les codes capturés lors de la phase d’apprentissage par notre boitier MOES UFO-R11 sont au format « Tuya » !
Pour preuve, un simple passage vers ce convertisseur en ligne va nous aider à les confondre.
L’original
Ce plugin génial répertorie pas moins de 120 références de télécommandes déjà prises en charge ! Et cerise sur le gâteau, une tuile (climate) ergonomique fonctionnel et en Français est proposée pour vos dasboards !
Le plugin de base (dépôt Git) semble toujours maintenu en activité mais il souffre d’un gros déficit de fonctions pourtant proposées par la communauté (PR) mais le propriétaire rechigne à les intégrer.
C’est le cas de la prise en charge de notre boitier de renvoie IR référence MOES UFO-R11…
Parmi la liste des télécommandes prise en charge, j’ai trouvé la mienne AR-REB1E !
Raison pour laquelle je me suis vite intéressé à ce plugin.
Ce plugin est une petite pépite et sa petite documentation vous explique comment fonctionne tout ça, depuis l’installation, la configuration et même pour adapter des codes voir carrément pour créer votre propre template si votre modèle n’est pas prise en charge nativement.
Pour en revenir au cas qui nous intéresse on peut voir que la référence de ma télécommande (il y en a 3… j’ai opté pour la dernière, plus complète) réagis avec un Controller « Broadlink« .
A la lecture de certains sujet, le MOES UFO-R11 ne semble pas compatible en l’état. SmartIR a bien une pull-request (du 28/09/23 – toujours ouverte) en ce sens mais… rien ne bouge hélas. On apprend par ce message qu’une personne à décidée de faire un fork pour accélérer les choses.
Personnellement, même si je préfère toujours les originaux, j’ai décidé de faire confiance à ce dernier fork de litinoveweedle qui a l’avantage de mieux gérer les messages via MQTT face à l’original.
SmartIR (fork – litinoveweedle)
- Adresse dépôt Git.
Alors c’est un fork (copie) fidèle qui stipule bien la prise en charge de notre boitier MOES UFO-R11 / Z06.
A une exception prête tout de même… pour rendre l’ensemble compatible, les codes « Broadlink » devront être formatés !
L’information est écrite noire sur blanc (ou l’inverse selon votre affichage lol). Lien.
Le problème identifié semble être dû à l’échappement des caractères " dans le fichier json contenant les codes des télécommandes. Un script a été proposé puis amélioré par une autre personne. Je vais me baser sur ce dernier.
Je vais vous détailler ci-bas la procédure complète.
Installation
Tout est indiqué sur la page de présentation du dépôt.
Rien de bien sorcier.
- Avoir HACS
- Ajouter le dépot
- Installer depuis HACS ou depuis la page du dépôt via le bouton d’intégration rapide.
- Plugin « File Editor » pour modifier le fichier configuration.yaml ci-dessous.
Ensuite, en fonction de la télécommande que vous ajoutez, il y aura du code à saisir dans votre fichier configuration.yaml (home-assistant). Documentation.
Dans le cas qui nous intéresse, j’ai saisie :
YAML
# Module HACS SmartIR de litinoveweedle
climate:
- platform: smartir
name: Clim Salon
unique_id: clim_salon
device_code: 1293
controller_data:
controller_type: UFOR11
mqtt_topic: "zigbee2mqtt/Télécommande IR/set"
# temperature_sensor: sensor.temperature
# humidity_sensor: sensor.humidity
# power_sensor: binary_sensor.ac_power
# power_sensor_restore_state: true
- A vous d’adapter le code ci-dessus selon votre installation mais pour l’exemple ici, ce sera notre base de travail.
J’ai volontairement commenté les 4 dernière lignes car je ne me sert pas de ces fonctions (pour le moment).
Aussi, je préfère ne pas avoir à les inclure pour l’instant, restons simple.
- Pensez à redémarrer HAOS pour la prise en compte du moindre changement dans le code.
Conversion Broadlink -> Tuya
Du coup, comme évoqué plus haut, en l’état, le script SmartIR ne fonctionnera pas car les le boitier MOES UFO-R11 ne fonctionne qu’avec des codes format « Tuya » alors que le script ne me fourni que des codes au format « Broadlink ».
Donc nous allons formater le fichier 1293.json (correspond à ma télécommande) pour le rendre utilisable et ce, sans hack ni modification qui seraient perdues en cas de montée de version du logiciel. Ce dernier intégrant un dossier spécial prévu à cet effet smartir/custom_codes/climate.
Le script
Pré-requis : Utilisation du plugin : « Advanced SSH and Web Terminal« .
Maintenant mettons nous au travail.
- Dans la fenêtre du terminal, vérifier la présence de Python sur HAOS
python3 --versionSi ce dernier n’est pas installé, installez-le avecapt install python3 - Dans fenêtre de terminal, collez cette commande :
Shell - Linux
# Crée l'arborescence si elle n’existe pas
mkdir -p /config/scripts/broadlink_to_tuya
# Télécharge le script depuis le lien brut de GitHub
wget -O /config/scripts/broadlink_to_tuya/broadlink_to_tuya_converter.py \
https://raw.githubusercontent.com/Gotcha26/broadlink_to_tuya/main/broadlink_to_tuya_converter.py
- Pour utiliser le script, la commande est la suivante :
Shell - Linux
python3 /config/scripts/broadlink_to_tuya/broadlink_to_tuya_converter.py 1293 --type climate --controller UFOR11
Explications :
- On appel le script python qui se trouve installlé sur HAOS à :
/config/scripts/broadlink_to_tuya/broadlink_to_tuya_converter.py - On va chercher le fichier d’origine qui nous sert de modèle.
</config/custom_components/smartir/codes/climate/>1293<.json> - [Invisible] On va installer le résultat dans un dossier personnalisé qui résistera aux montées de versions et qui reprend exactement le même nom que l’original.
</config/custom_components/smartir/custom_codes/climate/>1293<.json> - On change le
controllerpour le passer àUFOR11afin de le rendre pleinement compatible. - On précise qu’il s’agit d’un code
typepour «climate« - > Le fichier de destination est donc directement placé dan le bon répertoire et ne sera pas effacé (pas de hack).
- > Le script est prévu pour s’arrêter en cas de pépin, message d’information en cas d’échec ou de succès, informe avec un écrasement du fichier de destination, à été optimisé comparé à la version d’origine. Commande d’appel simplifiée aussi.
- > Le script comporte un argument
--helppour de plus amples explications.
Utilisation
Voilà enfin la FIN et la découverte du panneau de contrôle rêvé pour votre climatisation intégrée à Home-Assistant sans (plus) de bidouillage hasardeux, de codes à recopier, de personnalisation complexe…
En plus, admirez, c’est déjà en Français car c’est une carte standard « Thermostat« .
Lorsque vous envoyez une commande, vous envoyé en réalité une combinaison de TOUS les petits réglages en même temps. Ce n’est pas juste un simple code pour une simple fonction. Bref.
- Cela apparait donc en tant qu’
Entité(« Clim Salon »). - Pour vos dashboards il faut utiliser la carte «
Thermostat« .
Futur
Utiliser complétement les possibilités offerte par un vrai thermostat car actuellement, j’ai préféré zappé cette partie dans le code yaml du fichier de configuration, mon climatiseur ne supportant pas de thermostat externe…
Bilan
La recherche d’une solution a été longue et périlleuse mais au final je ne m’attendais sérieusement à bénéficier d’un solution aussi bonne ! Je vais avoir un thermostat et sans bidouillages !
Bon ok la partie conversion du controleur ce n’était pas le plus évident…














