Renvoi IR MOES UFO-R11 / ZS06

Noyé dans un océan de doutes

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 :

  1. 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.
  2. Cachez la télécommande pour ne pas que le signal soit reçu par votre climatiseur.
  3. 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.
  4. Toujours avec cette télécommande désynchronisée présentez face à votre climatisation.
  5. Sur votre télécommande, changez uniquement la température pour la faire passer disons de -1°C (26°C).
  6. 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« 

Intégration UFO-R11 via MQTT

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 ».

Page d’intégration MQTT de l’appareil UFO-R11

La partie qui nous intéresse pour commencer est la zone ci-dessous.

UFO-R11 – Apprentissage (MQTT)

  1. Cliquer sur l’icône icône flash
  2. Votre boitier une led bleu s’allume dans un coin supérieur de votre UFO-R11.
  3. Pointez votre télécommande et appuyez sur une touche.
  4. 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 icône ha
  5. Notez ce code de votre coté dans un fichier texte.
  6. Dans la zone icône ha 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.
  7. 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

Page d’intégration MQTT de l’appareil UFO-R11

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.

MQTT – Contrôles

  • Dans le champs « Ir code to send » icône ha 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.

MQTT – Exposition / journalisation

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 icône ha
  • 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.

Journalisation d’un évènement

Home-assistant – Détail journal commande MQTT

On cible notre recherche

MQTT – Informations Appareil

Pour ce faire, toujours depuis la page d’intégration de votre boitier UFO-R11 :

  • Cliquez sur icône ha MQTT Info (PAS sur les icône ha)
  • 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

MQTT – Informations de débogage

  • 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…

MQTT – Détail – Transmitted messages

  • … 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« 

Outils de développement – Action : 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’information ir_code_to_send en 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 icône ha 

MQTT – Publication paquet

  • 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.

SmartIR – Liste des télécommandes

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)

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 --version Si ce dernier n’est pas installé, installez-le avec apt 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 controller pour le passer à UFOR11 afin de le rendre pleinement compatible.
  • On précise qu’il s’agit d’un code type pour « 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 --help pour 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…

Appareil thermostat – Clim Salon

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…

Tags: , ,

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *