Piloter vos récepteurs volets OTIO avec un Raspberry Pi

Publié le 29 septembre 2014 par Spawnrider @spawnrider

Cet article est le premier d’une longue série sur la mise en place d’une centrale domotique pour piloter des périphériques de ma maison (volets roulants, détecteurs de mouvements, lumière, …). Je commencerais par quelques expérimentations autour de la technologie RF avec le Raspberry Pi ou l’Arduino puis par la mise en place d’une interface Web de contrôle. Mais ça, ce n’est pas pour demain

Je possède des volets électriques Somfy à mon domicile. Seulement, ces volets ne sont pas pilotables sans fils mais uniquement via les interrupteurs muraux filaires. J’ai donc installé des micro-récepteurs sans fils afin de pouvoir les piloter à distance. Les micro-récepteurs que j’ai sélectionné ont l’avantage de ne pas modifier l’installation existante et de pouvoir être masqués derrière les interrupteurs existants. J’ai donc choisi les récepteurs de la marque OTIO disponibles sur Internet ou dans les GSB pour moins de 100€ le pack. Au niveau des caractéristiques, c’est du classique RF 433 Mhz avec une portée de 70 mètres. Ce n’est certes pas ce qui se fait de mieux mais le rapport qualité/prix est intéressant. L’autre avantage c’est que les récepteurs sont pilotables à l’aide d’un simple module RF connecté sur un Raspberry ou un Arduino.

Du côté Hardware

Pour ce premier tutorial, je vais vous présenter comment récupérer, à l’aide d’un récepteur RF, les codes des commandes haut/bas de la télécommande permettant respectivement d’ouvrir et fermer les volets roulants et comment les envoyer aux différents récepteurs à l’aide d’un transmetteur RF connecté à un Raspberry Pi. Pour cela, j’ai utilisé :

  • Un Raspberry Pi (Modèle B rev. 1 – RAM 256 Mb),
  • Des modules émetteurs/récepteurs RF 433 Mhz (Amazon) :
    • Récepteur référencé XY-MK-5V
    • Emetteur référencé XY-FST
Pour le côté pratique, j’ai également utilisé une carte d’expérimentation (Breadbord), un T-Cobbler, ainsi que des fils de connection pour réaliser mon montage sans soudures. Le Raspberry Pi possède une interface GPIO (General Purpose Input/Output), un port d’extension composé de 26 pins sur lesquels il est possible de s’interfacer. Les 26 pins sont répartis ainsi :
  • 2 pins fournissant du 5v,
  • 2 pins fournissant du 3,3v,
  • 5 pins pour la terre (Ground)
  • et 17 pins pour les entrées et sorties (GPIO).
  Le Raspberry Pi s’interface avec les modules RF émetteur/récepteur comme sur le schéma ci-dessous : Les deux modules sont alimentés par du 5v et sont reliés à la terre. Les entrées utilisées sont :
  • La broche 13 (GPIO 21/27 suivant la version du Raspberry) pour l’entrée du récepteur,
  • La broche 11 (GPIO 17) pour l’entrée de l’émetteur.
Pour récapituler, le branchement se fait de cette manière :

Pins Raspberry Pi Pins Récepteur 433 Mhz

GND GND

5V VCC

GPIO 21/27 Data

Pins Raspberry Pi Pins Emetteur 433 Mhz

GND GND

5V VCC

GPIO 13 Data

Il est également préférable, pour gagner en portée, d’ajouter un petit bout de fil sur le connecteur ANT des modules. La taille idéale étant de 17,3cm ou de 33cm en spirales. A noter que si vous utilisez déjà ces broches pour d’autres montages, il est possible d’en choisir d’autres, vous n’aurez qu’à le spécifier au niveau du code. Une photo du montage une fois terminé (à noter, l’ajout de la LED permettant de savoir si le montage est sous tension). Du côté software Une fois votre montage réalisé, il ne reste plus qu’à installer les logiciels permettant d’envoyer et recevoir des signaux RF en manipulant les états des ports GPIO. Pour cela, nous allons installer :
  1. La librairie WiringPi permettant de manipuler les GPIO en ligne de commande,
  2. La librairie 433Utils regroupant des outils pour s’interfacer avec les modules RF,
  3. Exécuter RFSniffer afin d’obtenir les codes de la télécommande actuelle,
  4. Puis exécuter le code permettant d’envoyer les ordres RF vers les récepteurs OTIO.
C’est parti 1. Installer la librairie WiringPi à l’aide des comandes ci-dessous  2. Installer la librairie 433Utils à l’aide des commandes ci-dessous : 3. Intercepter les codes d’envoi/réception de la télécommande avec RFSniffer (~/433Utils/RPi_utils/RFSniffer) : Une fois cette commande lancée, il suffit d’approcher la télécommande du récepteur RF. Les codes s’affichent alors dans la console. Pour ma part, les codes sont :
  • 959542784 pour la fermeture,
  • 892433920 pour l’ouverture.
Ces codes ne seront sûrement pas les même pour vous car ils différent d’un kit à l’autre pour éviter les interférences entre les différents kits. Le mécanisme d’association des récepteurs avec la télécommande sert d’ailleurs aux récepteurs à apprendre les différents codes (haut/bas) de la télécommande. Il ne reste plus qu’a rejouer ces codes via un programme pour contrôler les récepteurs depuis le Raspberry Pi : Les commandes doivent être envoyées en 32 bits, via le protocole 2 avec une durée d’impulsion de 700ms. Il est possible de réduire le nombre d’envois à 10 voir 5 en fonction de la qualité de votre antenne et des interférences environnantes. Voilà, il ne reste plus qu’à vous amusez avec ces petites commandes en attendant de pouvoir piloter vos périphériques depuis une interface Web. Mes références/sources sur le sujet : Prochaine étape… Je vous présenterais comment réaliser la même opération à l’aide de l’Arduino au lieu du Raspberry Pi. J’ai dans l’idée de déléguer la partie émission/réception RF à un module Arduino connecté au Raspberry Pi soit par liaison série USB soit en utilisant le port I2C plutôt que d’utiliser le Raspberry Pi pour cet usage car la consommation CPU de la boucle de traitement des signaux RF est trop importante et qu’il n’est pas fait pour le temps réel.