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 :

git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

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

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

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 :

WiringPIGPIOpin réel
Émetteur01711
Récepteur2Rev1 : 21 / Rev2 : 2713

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 :

RPI GPIO HEADER
____________
|        ____|__
|       |    |  |
|       |01. x02| 
|       |  . x04|________   Récepteur
|       |  . x06|______  |   ________
|       |  . .  |      | |  |        |
Émetteur    |   ____|09x .  |      | |__|VCC     |
_______     |  |  __|11x .  |      |    |        |
|       |    |  | |  |13x____|______|____|DATA    |
|    GND|____|__| |  |  . .  |      |    |        |
|       |    |    |  |  . .  |      |    |DATA    |
|    VCC|____|    |  |  . .  |      |    |        |
|       |__       |  |  . .  |      |____|GND     |
|   DATA|_________|  |  . .  |           |________|
|_______|            |  . .  |
|  . .  |
|  . .  |
|  . .  |
|  . .  |
|  . .  |
|  . .  |
39|  . .  |40
|_______|

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 :

cd 433Utils/RPi_utils
./RFSniffer

Dans la deuxième :

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

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.

sudo apt-get install python3-pip
sudo pip3 install rpi-rf

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

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

switch:
platform: rpi_rf
gpio: 17
switches:
a:
code_on: 16762196
code_off: 16762193

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.

Expert technique en développement web et Android dans une société de service, je suis passionné par les nouvelles technologies et l’IOT.
Tu aimes cet article ? Alors partage le Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInPin on PinterestShare on RedditShare on Tumblr

5 réponses

  1. Mareau dit :

    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

  2. Romain Bonnetier dit :

    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?

  3. Flavien dit :

    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.

    • Romain Bonnetier dit :

      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?

  1. 29 avril 2017

    […] Lire l’article complet sur le site original […]

Laisser un commentaire