[PIGET] Contrôler des prises radio et bien plus !

[PIGET] Contrôler des prises radio et bien plus !

TUTORIEL EN COURS D’ECRITURE

Dans ce tutoriel, nous allons voir comment contrôler des prises radio bas de gamme contrôlé à l’aide de la Radio 433Mhz.
De nombreuses autre solution existent pour gérer la radio 433Mhz sur le Raspberry Pi
Par exemple : Pilight , RCSwitch, radioEmission etc…

Radio2serial

 

Avant toute chose, il convient de préciser que la radio en 433Mhz que nous allons utiliser:

  • n’est pas très fiable (c’est le même système que pour les portails, et je ne connais aucun portail qui s’ouvrent en appuyant sur le bouton une seule fois)
  • n’est pas sécurisé (Si quelqu’un est capable de recevoir le code il peut le renvoyer, à la différence d’un portail le code n’est pas protégé par un rolling code)
  • facilement brouillée (Il suffit d’envoyer des messages radio en boucle pour empêcher la réception des messages radio)
  • la porté est relativement faible de 5 à 10m parfois plus mais n’y compter pas trop.
  • n’a aucun retour d’état, impossible de savoir si la prise s’est vraiment éteinte ou allumer.

En effet, cette fréquence étant libre, elle est souvent parasité, donc si vous faites des tests à 2h du matin , les résultats peuvent être différent qu’à 13h si cette fréquence est utilisé.

Pour autant, les prises que l’on peut contrôler avec cette fréquence, ne coutent rien et peuvent nous permettre d’allumer et éteindre des Raspberry Pi/ arduino à distance par exemple.
Ou de broadcaster des messages à visée publique (par ex les valeurs d’une station météo pourraient être capter par vos voisins)
Si vous voulez utiliser des prises pour de la domotique, je vous conseillerais d’utiliser un système plus fiable, mais pour autant j’utilise personnellement ces prises chez moi et elles font le travail.
Si vous voulez créer des capteurs , allez voir du coté de Mysensors.org ou du récent tutoriel d’Adafruit sur les transmetteurs RFM69HW et RFM96 qui ont une portée élevé (400m pour RFM69HW et de 2 à 4km pour le RFM96) , et la possibilité de chiffrer les messages (par encore vraiment simple avec le RFM96).

Ma version a pour but d’être compatible avec le maximum de plateforme, et rendre la réception et l’émission de codes radios et de message texte, le plus simple possible.
Pour cela nous allons délégué la gestion de la radio 433Mhz à un arduino.
Ceci permettra de fonctionner sur n’importe quel système capable d’utiliser une liaison série (usb/bluetooth/directe)  (ce qui couvrent à peu près tout les ordinateurs)
Ainsi que d’utiliser ces protocoles pour communiquer entre arduino ou entre Raspberry Pi.

Ce programme s’appelle radio2serial, et utilise deux bibliothèques :

  • RadioHead (anciennement virtualwire) pour envoyer et recevoir des messages texte
  • 433MhzForArduino pour envoyer et recevoir des codes radio de prises plus ou moins anciennes.

J’ai choisi 433MhzForArduino à la place de RCSwitch, car il est compatible avec plus de prises radio, et surtout il fonctionne relativement bien avec RadioHead.

Le programme est aussi capable de s’autodiagnostiquer, et de détecter si l’émetteur ou le récepteur ne fonctionne plus.

Prises compatibles

  • Les prises à codes fixes
    Ces prises utilisent des codes fixes et donc le risque que quelqu’un utilise les mêmes codes que vous existent, elles sont caractérisés par la présence d’un switch à l’arrière des prises radio, qui permettent de choisir les codes

Ex: Les prises SCS.

dipswitch rotaryswitch

Les codes se présentent sous la forme d’un nombre, et si les pulsations ne sont pas celle par défaut, d’une nombre le représentant.
/radio/old/1234 ou /radio/old/1234/400

  • Les prises avec un code d’apprentissage

Ces prises utilisent un code unique à chaque télécommande, la prise va apprendre le code de la télécommande, lors de la mise en route.

Ex: Les prises chacon.

chacn

Les codes se présentent sous la forme d’un code , d’un numéro d’identifiant, d’un état.
/radio/new/1234/1/on /radio/new/1234/0/off
L’état peut être aussi un niveau d’éclairage de 1 à 16 si vous utiliser un module pour vos lumières
/radio/new/1234/1/15 /radio/new/1234/1/1

Il peut être compliqué de trouver des prises compatibles, rendre compatible de nouvel prise est laborieux et sachant que ces prises sont pratiquement obsolète, un peu une perte de temps.

Montage

radio

Il vous faudra un Arduino, Un émetteur/récepteur radio.

Les émetteurs sont facile à trouver, n’importe lequel fera l’affaire, des récepteurs fiable sont plus difficile.
La plupart de ceux vendus ne sont que de bêtes convertisseur d’ondes en électricité, alors que d’autres ont des puces qui vont permettre de filtrer les messages radio.
Je recommande très fortement l’achat d’un récepteur RXB-6 qui sont fiable, vous les trouverais sous la référence : Super-heterodyne ASK OOK RF Receiver

Brancher l’émetteur radio (DATA) sur la broche 10
Brancher le récepteur radio (DATA) sur la broche 2
Alimenter l’émetteur et le récepteur à l’aide de l’arduino
Il est conseillé de rajouter un câble (de 17cm à peu près) sur l’entrée ANT de l’émetteur et du récepteur afin d’améliorer la portée.
Je ne l’ai personnellement pas fait et je n’ai aucun problème de portée (mais mon appartement est petit)

Radio2serial breadboard

Voilà donc un autre avantage de la Radio 433Mhz par rapport aux autres système radio, il est très facile à brancher, alors que les transmetteur nrf et rfm nécessitent beaucoup plus de câbles.

Programmation

Vous pouvez programmer votre Arduino soit depuis votre ordinateur , soit directement depuis votre Raspberry Pi.
Pour programmer votre Arduino depuis un Raspberry Pi , installer tout d’abord le module radio2serial

Le code arduino est disponible ici : https://github.com/pigetArduino/radio2serial

/pi/install radio2serial

Puis tapez

/do/radio2serial/uploadNano

Ceci va installer Platformio (si il n’est pas déjà installé) , télécharger le code , pus le téléverser sur notre Arduino Nano.
Platformio va se charger de trouver où est branché votre Arduino, Attention si vous avez déjà des arduino branché sur votre Raspberry Pi, le premier disponible sera programmé.
Vous pouvez lancer cette commande à nouveau pour mettre à jour votre Arduino.

Test

Au démarrage de l’Arduino, un message radio va être envoyé (/radio/new/1234/0/off)
Notre prototype est capable de recevoir ces propres codes ce qui va nous permettent de déterminer si notre Arduino est capable d’envoyer des codes radios.
Pour le récepteur nous vérifions simplement que la broche 2 reçoit bien des variations entre du 0v et du 5v.

Si la led rouge, clignote rapidement : Le récepteur ne fonctionne pas
Si la led rouge, clignote lentement : L’émetteur ne fonctionne pas
Cette led est toujours éteinte lorsque le transmetteur fonctionne correctement.

Pour avoir plus d’information sur votre arduino, Tapez

/do/radio2serial/state

Ceci va envoyer à votre Arduino le message /info qui va lui dire de s’identifier.
Vous devriez voir sur votre terminal :

USB radio 433
radio2serial.ino v0.71
github.com/pigetArduino/radio2serial
Radio : OK
Pinout: tx:10;rx:2

Il est en effet possible de modifier l’arduino pour qu’il contrôle plus que de la radio, par exemple vous pouvez rajouter des leds, des relais et modifier le programme pour les contrôler.
On peut aussi par exemple faire un système où l’arduino va vérifier si le Raspberry Pi fonctionne correctement où et bien relié à internet et si ce n’est pas le cas, broadcaster un message avec Radiohead pour prévenir l’utilisateur.

Vous pouvez aussi relier votre Arduino sur votre ordinateur pour vérifier s’il fonctionne (la vitesse est de 115200).
Au démarrage sur le port série vous devriez voir :
Serial:{« file »: »radio2serial.ino », »url »: »github.com/pigetArduino/radio2serial », »ver »: »0.71″, »pins »: »tx:10;rx:2″, »state »: »tx:1;rx:1″}
/user/scripts/getRadio « {\ »file\ »:\ »radio2serial.ino\ »,\ »url\ »:\ »github.com/pigetArduino/radio2serial\ »,\ »ver\ »:\ »0.71\ »,\ »pins\ »:\ »tx:10;rx:2\ »,\ »state\ »:\ »tx:1;rx:1\ »} »

J’ai décidé d’utiliser du JSON pour les réponses, pour envoyer des codes radio par contre, j’ai utilisé un système similaire à une syntaxe REST.

Recevoir/Emettre un code radio

Pour recevoir les codes radio , tapez

/do/radio2serial/listen

Puis appuyer sur un bouton d’un télécommande.
Vous devriez recevoir le code radio.
Ex: {« data »: »/radio/old/175682/320″}

Pour le retransmettre faites :

/do/radio2serial/send « /radio/old/175682/320 »

Si vous voulez envoyer du texte tapez:

/do/radio2serial/sendText « Salut le monde »

Ceci va envoyer du texte, nous sommes limité au caractères ASCII, toute accent ou caractères non autorisé sera automatiquement remplacé et si votre texte est trop long il sera transmis en autant de partie que nécessaire. Je tiens à rappeler que les transmissions ne sont pas très fiable donc des messages peuvent être perdus, où être reçu plus ou moins efficacement selon l’heure de la journée.

Exécuter des actions à la réception d’un code radio

Par défaut (pour le moment ce n’est pas désactivable), à chaque code reçu est exécute la commande : /user/scripts/getRadio

Des exemples sont disponibles dans ce fichier par défaut, le script se contente d’afficher dans les logs de radio2serial une version lisible des messages reçus.
Il est possible d’afficher les messages radio dans une notification, effectuer une action lorsqu’un code est reçu, sauvegarder les codes dans une base de données, retransmettre les codes sur votre application de domotique préféré

radio2serial de série à socket

Afin de pouvoir discuter avec notre arduino, nous avons utilisé un service en python, celui-ci se connecte à l’arduino et permet de discuter avec lui directement à l’aide d’un socket sur le port 31401 (vous pouvez reconfigurer le port dans le fichier /user/config/radio2serial/port)
Pour le moment je laisse le port ouvert sur le réseau afin d’expérimenter mais au final celui-ci devraient être fermé en local, afin de n’être utilisable que par les programmes en local, ce socket est en effet non protégé et extrêmement basique.
Ceci permet à la différence du série, de recevoir et d’émettre des messages à l’arduino depuis 1 à plusieurs programmes à la fois.

Dans l’idéal, il est plus efficace de garder une connexion active à ce socket pour communiquer avec l’Arduino plutôt que d’utiliser la commande /user/script/getRadio , ceci permet de recevoir et d’envoyer des codes à l’Arduino en directe.

Voilà, j’essayerais de décrire un peu mieux le fonctionnement de radio2serial et de donner des exemples concrets d’utilisation plus tard, ainsi que des plans de montage afin de créer un prototype fonctionnel.

Par exemple , j’utilise une prise radio pour éteindre et allumer mon ordinateur à distance , tout en éteignant tout les veilles (écran, haut-parleurs etc).
Ce système me permet de pouvoir allumer mon ordinateur et l’éteindre même si l’ordinateur n’est plus accessible par le réseau.
Évidemment ce système présente des risques et je pense l’utiliser à l’aide de prise WIFI wemo ultérieurement, ces prises peuvent mesurer le courant qui passe par celle-ci et ainsi être sur d’éteindre la prise alors que l’ordinateur est éteint sans dépendre d’un ping.

Il peut être aussi utiliser pour allumer et éteindre un Raspberry Pi à distance ou un Arduino, chose impossible sans prise radio pour un prix relativement réduit.
On peut aussi utiliser ce protocole pour communiquer ou contrôler des Arduino.

Les commentaires sont clos.