blog i69

pense-bête, contre la perte de données de mes sites favoris...

Raspberry Pi - Réception télécom 433 MHz en tâche de fond avec 433Utils + RFSniffer + script Python

Jeudi 05 février 2015 - Aucun commentaire

Utiliser le petit module de réception 433 MHz sur le Raspberry Pi, sans être pour autant coincé sur la seule réception ?



En bas à droite, récepteur 433 MHz

Je m’explique : ce petit récepteur est installé avec les outils 433Utils (procédure d’installation sur ce billet).
Pour recevoir un code 433 MHz, la solution de base était de le récupérer via une simple commande :

sudo ./RFSniffer

chaque code reçu était alors affiché à l’écran du terminal, une méthode totalement inexploitable pour venir détecter le code, le comparer à une liste, et lancer des actions appropriées.
Par exemple, je reçois le code 12345, je détecte qu’il s’agit de mon alarme incendie, je peux donc envoyer un email d’alerte.
Avec le RFSniffer actuel, c’est impossible !

Nous allons donc légèrement modifier ce RFSniffer pour qu’il vienne enregistrer le code reçu dans un bête fichier .txt :

sudo su
nano ./RFSniffer.cpp

et modifions la partie qui se trouve sous } else { :

//
// Sauvegarde du code recu dans /home/pi/recu.txt
//
          FILE *f = fopen(« /home/pi/recu.txt », « w »);
fprintf(f, « %i », value );
//
// Supprimez ou commentez la ligne ci dessous pour n avoir aucun affichage
//
//          printf(« recu %i/n », value );
          fclose(f);

Lançons maintenant RFSniffer en tâche de fond :

./RFSniffer &

Il fonctionnera en permanence, et désormais tout code reçu se trouvera dans /home/pi/recu.txt, à vous alors de venir le récupérer. Si vous souhaitez interrompre RFSniffer, pensez à noter le nombre indiqué lors de son lancement en tâche de fond :

root@raspberrypi:~/433Utils/RPi_utils# ./RFSniffer &
[2] 2578
root@raspberrypi:~/433Utils/RPi_utils#

2578 ici, nous allons donc supprimer la tâche avec :

kill 2578

Si vous avez zappé ce nombre, exécutez la commande :

ps

et observez le résultat :

root@raspberrypi:~/433Utils/RPi_utils# ps
PID TTY          TIME CMD
2120 pts/0    00:00:00 sudo
2121 pts/0    00:00:00 su
2122 pts/0    00:00:01 bash
2578 pts/0    00:00:02 RFSniffer
2581 pts/0    00:00:00 ps
root@raspberrypi:~/433Utils/RPi_utils#

On identifie le processus RFSniffer, et son numéro de tâche : 2578 ! Simple non ? :-)

CONCLUSION :

Il ne vous reste désormais plus qu’à écrire un script avec une boucle lisant /home/pi/recu.txt et exécutant certaines commandes selon le code reçu, et à lancer RFSniffer au démarrage de la Framboise bien entendu.

Nous savons désormais comment recevoir un code dans un fichier stocké dans /home/pi/recu.txt, un processus mis en tâche de fond.

Au moyen d’un simple script rx2.py, placé dans /home/pi, nous allons pouvoir lancer des actions en fonction du code reçu (pensez à recréer les identations nécessaires à Python).

Nous allons commencer par copier recu.txt dans un fichier temporaire, temp.txt. Ouvrons alors ce fichier, lisons son code et lançons alors les actions appropriées :
    allumage du salon (un script .sh tout simple exécuté en arrière plan)
    extinction du salon
    activation du relai 0 du PiFace, sous forme de pression : j’appuie, je relâche, comme s’il s’agissait d’une pression sur une télécommande
    activation du relai 1 du PiFace

Pensez à créer un fichier /home/pi/zero.txt contenant juste le chiffre 0 (zero) sans rien d’autre.

Lancez le script simplement :

python3 rx2.py

Si vous voulez le faire tourner en tache de fond, ajoutez simplement un # devant les lignes contenant print, de façon à ce qu’aucun affichage ne vienne vous déranger, puis lancez le :
python3 rx2.py &




#!/usr/bin/python3
#
# Lecture du code de télécommande reçu par RFSniffer (version modifiée, en tâche de fond)
# le code reçu se trouve dans /home/pi/recu.txt
#
import os
#
# Boucle de detection sans fin
#
# var = 1
while True :
#
# on copie recu.txt dans temp.txt pour éviter de le lire alors que le processus RFSniffer l'utilise (plantage assuré)
#
os.system('sudo cp /home/pi/recu.txt /home/pi/temp.txt')
#
# Ouverture et lecture de temp.txt
#
f = open('/home/pi/temp.txt', encoding='utf-8')
g = int(f.read())
#
# détection du code
# puis remise à zero de recu.txt en copiant zero.txt à sa place
# (zero.txt contient un simple 0)
#

#
# activation relai 0 du PiFace : ON puis OFF
#
if g == 4195665:
print ("Relai 0")
os.system('sudo python /home/pi/output.py 0')
os.system('sudo cp /home/pi/zero.txt /home/pi/recu.txt')

#
# activation relai 1 du PiFace : ON puis OFF
#
if g == 4195668:
print ("Relai 1")
os.system('sudo python /home/pi/output.py 1')
os.system('sudo cp /home/pi/zero.txt /home/pi/recu.txt')

#
# télécommande du salon, lancement des scripts salon_on ou salon_off (envoi de trappes SNMP à un contrôleur 10 relais)
# à modifier selon les besoins, le code est indiqué dans g == xxxxxxxx: xxxxxxx = code de télécommande
#
elif g == 4198737:
print ("salon on")
os.system('sudo sh /home/pi/salon_on.sh &')
os.system('sudo cp /home/pi/zero.txt /home/pi/recu.txt')

elif g == 4198740:
print ("salon off")
os.system('sudo sh /home/pi/salon_off.sh &')
os.system('sudo cp /home/pi/zero.txt /home/pi/recu.txt')

Tags de l'article : , ,

Raspberry Pi - Télécommande 433 MHz universelle

Jeudi 05 février 2015 - Aucun commentaire

Faire reconnaitre un code de télécommande 433 MHz, et comment reproduire ce code en émission.

Sorties GPIO du PI :


La broche 1 est celle située la plus près de la LED rouge d’alimentation.
Utiliser les broches 2 et 4 pour le +5V nécessaire aux modules 433 MHz, les broches Ground pour la masse (GND) des modules.
Les broches 11 et 13 seront utilisées respectivement pour les datas en émission (11) et réception (13).


Raccordement des modules Tx / Rx 433 MHz
Sur l’image du montage, le module Tx se trouve en haut, le module Rx en bas à gauche, contre la télécommande Phenix.

Installation des gestionnaires, toujours en mode superutilisateur (sudo su depuis une connexion ssh).

Installation de WiringPi :

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

Installation de 433Utils :

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

Nous voici désormais munis de tous les outils pour recevoir et émettre des trames 433 MHz, mais attention, seulement sans Rolling Code, c’est à dire des télécommandes basiques, non cryptées.

Recevoir les codes :

Pour recevoir les codes, lancez la commande :

sudo ./RFSniffer

Une fois le code reçu, vous le verrez s’afficher à l’écran. Notez le pour une utilisation ultérieure.

Emettre un code :

L’émission d’un code est simple :

sudo ./codesend 12345

pour émettre le code 12345.

Ce petit montage, simplifié à l’extrême, va donc vous permettre de venir automatiser une télécommande existante, à condition que cette dernière ne soit pas sécurisée par rolling code.
A vous donc l’activation à distance via une petite interface Web, la programmation d’allumage ou d’extinction en fonction des heures via un crontab, l’activation sur détection de mouvement, etc.

Tags de l'article : , ,