X
    Catégories : Tutos

Contrôler du 433MHz sur Raspberry Pi avec Home Assistant

Bonjour à tous,
Aujourd’hui nous allons parler un peu de radio fréquence et comment la contrôler avec home assistant.
Alors pour être précis la fréquence n’est pas 433 mais 433,92 Mega Hertz.

Mais pourquoi cette fréquence ?

L’avantage de cette fréquence est qu’elle est libre d’utilisation, et déjà largement utilisée pour des communications à courte portée.
Comme par exemple dans des télécommandes de portails, des thermomètres d’extérieurs, des volets électriques et plein d’autres objets connectés.

Plusieurs émetteurs/récepteurs « clés en main » existent sur le marché, mais ceux-ci sont généralement onéreux.
Si vous êtes comme moi et que vous n’avez pas envie de vous ruiner dans des dongles USB, type Rfxcom, je vous propose une alternative : des émetteurs / récepteurs à souder soi-même.

À l’action

Avant de regarder comment les intégrer dans Home Assistant, nous allons voir comment les utiliser avec notre Raspberry PI.
Pour commencer, il nous faut un objet commandé par du 433MHz. Pour mon exemple, des douilles d’ampoules et leur télécommande :

(clic pour agrandir)

J’ai trouvé les miennes en grande surface, mais vous pouvez en acheter ici.

Et un Raspberry PI avec Raspbian. Si vous n’avez pas réalisé votre installation, je vous laisse regarder ce billet : Installez son Raspberry PI.

Ok jusque là, ça va.
Maintenant, nous allons utiliser les ports GPIO de notre Raspberry Pi pour commander nos émetteurs / récepteurs.

Euh… GPIO ?

GPIO pour General Purpose Input/Output sont les pins disponibles sur notre Raspberry PI. Mais si ! Ceux-là :

L’avantage de ces ports est qu’ils peuvent être utilisés en entrées comme en sorties (ok, si vous parlez un petit peu anglais, vous l’aviez déjà deviné grâce au IO…).
Donc si vous voulez recevoir une info extérieure comme un signal 433MHz par pur hasard, ou émettre ce type de signal encore par pur hasard, c’est grâce à eux que nous pouvons le faire.

Je vous laisse regarder cette page : GPIO, qui explique très bien leurs utilisations.

Installations

Pour pouvoir contrôler nos GPIO plus simplement, nous allons utiliser la librairie WiringPi.
Depuis votre console SSH rentrez ces quelques lignes :

[shell]
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
[/shell]

Maintenant nous allons installer l’utilitaire de ninjablocks pour gérer nos communications.

[shell]
git clone git://github.com/ninjablocks/433Utils.git
cd 433Utils/RPi_utils
make
[/shell]

Update du 27/09: Dernièrement, certaines personnes ont rencontré des erreurs suite au make. Il on reçu un message ressemblant à ceci make: *** no rule toi make target’../rc-switch/RCSwitch.o , needed by ´send’. Arrêt. Pour régler le problème il suffit d’exécuter les commandes suivantes:

[shell]
git submodule init
git submodule update
make
[/shell]

Merci à Ferkco qui nous a signalé le problème et la solution en commentaire 😉

On attaque les branchements

La librairie RPi_utils utilise par défaut le port Wiring PI 0 pour l’émission et le 2 pour la réception.
Ceux-ci peuvent être modifiés dans les fichiers codeSend.cpp et RFSniffer.cpp dans le répertoire ~/433Utils/RPi_utils (notez que si vous modifiez ceux ci, vous devrez relancer la commande make).
Pour notre test, nous allons garder la configuration d’origine, c’est-à-dire :

WiringPI GPIO pin réel
Émetteur 0 17 11
Récepteur 2 Rev1 : 21 / Rev2 : 27 13

Si vous voulez connaître toutes les correspondances des pins Wiring PI et des pins réels, je vous redirige sur cette page : WiringPi Pins.

Le branchement final devrait ressembler à ça :

Une petite photo si vous avez des doutes :

(clic pour agrandir)

On teste

Pour tester que notre branchement est fonctionnel, on va écouter depuis une console et envoyer un code sur une autre :

Dans la première console :

[shell]
cd 433Utils/RPi_utils
./RFSniffer
[/shell]

Dans la deuxième :

[shell]
cd 433Utils/RPi_utils
./codeSend 12345
//vous devriez voir la ligne suivante
sending code[12345]
[/shell]

Le résultat de la première devrait ressembler à ça :

Bon ça y est, notre montage fonctionne, testons avec la télécommande des douilles.
Sur ma télécommande, je dispose pour la Douille A d’un bouton ON et un OFF, du coup je vais « Sniffer » les 2 boutons pour pouvoir allumer et éteindre mon ampoule.

Comme vous pouvez le voir sur l’image ci-dessus, j’aurais pour le bouton ON le code 16762196, et pour le OFF 16762193.
Allez on test tout ça, branchez les douilles, réutilisez le batch codeSend avec le code du bouton ON, et voila !

Et Home Assistant dans tout ça

Pour pouvoir utiliser notre petit émetteur 433MHz via Home Assistant, nous avons besoin d’installer rpi-rf.

[shell]
sudo apt-get install python3-pip
sudo pip3 install rpi-rf
[/shell]

Une fois rpi-rf installé, nous pouvons passer à la configuration de Home Assistant.

Dans le fichier configuration.yaml, nous allons rajouter ces quelques lignes :

[shell]
switch:
platform: rpi_rf
gpio: 17
switches:
a:
code_on: 16762196
code_off: 16762193
[/shell]

D’autres options sont disponibles, je vous laisse regarder cette page Switch.rpi-rf pour les découvrir.

Après avoir redémarré Home Assistant, vous devriez avoir ça sur votre page state :

Cliquez sur le bouton, et Well done!!

Conclusion

Nous venons de voir comment connecter un émetteur et un récepteur 433MHz à notre Raspberry PI et le contrôler via Home Assistant.
J’espère que vous avez réussi, n’hésitez pas à poser des questions en commentaire si vous avez des problèmes.

Voir les commentaires (54)

  • Bonjour,
    Tout d'abord merci pour cet article.

    J'ai acheté un lot de prises RF (chez lidl). J'essaie d'allumer et d'éteindre ces prises mais ça ne fonctionne pas...
    J'ai récupéré les codes envoyés par la télécommande vie RFSniffer. Pour chaque prise, il y a 4 codes pour ON et 4 pour OFF.
    J'ai écrit le fichier configuration.yaml comme suit (ne pas faire attention aux indentations) :

    switch:
    - platform: rpi_rf
    gpio: 17
    switches:
    prise_silvercrest_a:
    code_on: 80176,618864,703808,975536
    code_off: 42896,196256,853536,992016
    prise_silvercrest_b:
    code_on: 80180,618868,703812,975540
    code_off: 42900,196260,853540,992020
    prise_silvercrest_c:
    code_on: 80188,618876,703820,975548
    code_off: 42908,196268,853548,992028
    prise_silvercrest_d:
    code_on: 42898,196258,853538,992018
    code_off: 80178,618866,703810,975538
    prise_silvercrest_master:
    code_on: 42906,196266,853546,992026
    code_off: 80186,618874,703818,975546

    Lorsque je clique sur l'interface d'Home Assistant, les codes précédents sont bien envoyés car visible par RFSniffer mais rien ne se produit sur les prises....

    Auriez-vous une idée d'où pourrait provenir le problème ?

    Merci d'avance !
    Julien

  • Bonjour Julien
    Alors, si tu as 4 codes, je pense que tes prises fonctionnent avec un code tournant.
    As tu appuyé longtemps sur le bouton jusqu’à trouver une suite logique pour avoir ces 4 codes, ou à chaque nouvel appuis, un code différents était généré?
    Je n'ai pas encore eu se genre de matériel, par contre lorsque tu fais "code_on: 42906,196266,853546,992026" , ça va lancer les 4 codes dans la foulée, ce qui peut être utilisé pour allumer plusieurs devices 433, et non un code tournant à mon sens.
    As tu essayé de ne mettre qu'un code et de jouer avec les 2 variables signal_repetitions et pulselength? (https://home-assistant.io/components/switch.rpi_rf/)
    Voir est ce que sur tes prises / télécommandes tu peux désactivés se code tournant?
    tu as une référence pour tes prises?

  • Bonjour,
    J'ai fait sur le montage sur un RPi 1 et un RPi3 mais je n'arrive pas à capter les télécommandes (j'ai essayé avec 3 différentes).
    Soit je n'ai pas de chance et mes télécommandes n'utilisent pas la fréquence 433MHz ou j'ai louper quelque chose !
    J'ai testé de mettre une led entre GND et DATA de l'émetteur quand j'appuis sur les télécommandes la led clignote pourtant bien.

    • Bonjour Flavien,
      As tu essayé démettre un signal en 433 avec ton rpi? Pour voir si tu recevais ce signal?
      Ce post parle de rc-switch, cette api est utilisable seulement pour émettre ou recevoir des codes simple et non roulant, du coup as tu les spec pour savoir si le code et tournant ? Et est ce qu'elles émettent un code ou des données plus complexes?

      • Bonjour Romain,
        Je remet sur le projet (j'avais du stopper suite à un probleme bref.)
        Donc oui j'ai tester avec le rpi en utilisant le gpio 25 pour l'émetteur (j'ai changer le pin dans codesend.cpp pour PIN=6) et gpio 27 pour le recepteur (PIN=2)
        J'ai bien sending code[12345] mais aucune réponce du coté de RFSniffer

        Comment je peut savoir pour le type de code? Par exemple la ref de la télécommande des prise est TR-502MSV

        • Salut Fabien,
          Question bête, tu as bien fais un make après pour recompilé le cpp ? :)
          En recherchant sur github, je suis tombé sur ce commentaire :
          https://github.com/sui77/rc-switch/issues/103#issuecomment-275911081
          n'ayant pas cette télécommande, je ne peux pas tester, mais il semble qu'il ajoute un protocole dans le fichier rc-switch.cpp avec la référence de ta télécommande :

          { 650, { 1, 10 }, { 1, 2 }, { 2, 1 }, true } // protocol 9 (Mandolyn/Lidl TR-502MSV/RC-402/RC-402DX)

          Bonne chance.
          Tiens nous au courant.

          • J'ai récupérer le forck, ajouter la ligne puis re-compiler.
            Quand j'envoie des codesend, RFSniffer ne reçois rien.
            Par contre en laissant tourner RFSniffer quelle temps il à réagi : https://jpst.it/11PP9
            Sans doute des code extérieur ! Je peut supposer que le récepteur marche ?
            J'ai brancher une led en le data de l'émeteur et la masse. quand j'utilise codesend la led s'allume.
            Je sais pas trop quoi pensez ?!

          • Désolé du temps de latence...
            En effet cela veut bien dire que le récepteur fonctionne.
            J'ai vu récemment que la librairie rc switch à été modifié, je regarde ce que je peux faire et te tiens au courant

  • Bonjour,
    merci pour ce tuto
    j'ai fait les branchements sur mon raspberry 3
    j'ai testé avec RFSniffer et codesend 12345
    cela fonctionne correctement
    je fais le test avec ma télécommande DI-O en appuyant sur les touches ON ou OFF
    rien ne se passe au niveau de RFSniffer
    pouvez vous m'aider ?
    Cordialement
    Pierre Chevalier
    06.86.91.37.82

  • Bonjour, merci pour le tuto. J'ai un problème de débutant visiblement. Au moment de lancer la commande make, j'ai un message
    make: *** no rule toi make target'../rc-switch/RCSwitch.o , needed by ´send'. Arrêt.
    Savez vous comment corriger ce problème ?

  • Merci pour le lien il semble ne effet que les commandes suivantes régle le problème

    git submodule init
    git submodule update
    make

    Je ne les ai pas testé personnellement mais je vais regarder (j'ai justement besoin de paramétrer un ou deux nouveaux périphériques 433 ;) )

    Update:
    Je confirme j'ai bien le même soucis que vous. Les commandes ci-dessus règlent le problème. Je met l'article à jour de suite ;)

  • Merci pour pour tuto. Connaissez-vous un moyen de permettre à home-assistant de réagir en fonction des codes reçus (par exemple par la télécommande physique) ?

Articles similaires