Archives par étiquette : 433 MHz

Emettre et recevoir des trames 433 MHz sur sa tablette ou PC

Emettre et recevoir des trames 433 MHz, à destination des télécommandes radio, n’est pas toujours simple. Mais avec la méthode que je vais vous présenter ici, tout devient plus simple, beaucoup plus simple.

Mes essais se réalisent pour le moment avec :

  • un iMac
  • une carte son usb chinoise à quelques euros
  • une platine émission 433 MHz et une platine réception 433 MHz
  • une tablette android 5 et son cordon usb OTG

Sur l’iMac, la carte audio sur laquelle viennent se relier les modules 433 MHz est immédiatement reconnue. Avec le logiciel Audacity je vais venir enregistrer l’audio reçue en 433 MHz lorsque je presse un bouton de la télécommande. Avec le même logiciel, je vais alors venir jouer l’audio, cette fois-ci sur l’émetteur 433 MHz.

Si j’enregistre les sons au format Wav, je peux les transmettre à ma tablette android et venir les rejouer, une fois la carte son branchée sur la tablette : la voici transformée en télécommande sans fil !!

android_433_domotique

Je n’ai pour le moment pas trouvé de solution 100 % android, permettant d’enregistrer, de modifier le son, et de diffuser ensuite sur 433 MHz, mais je cherche, je cherche 🙂

 

Raspberry Pi 2 domotique : naissance d’un projet (1)

Profitant des connaissances acquises au fil des mois sur le Raspberry Pi et de travaux sur un prototype au bureau, j’ai décidé de me lancer dans un projet domotique sur mesure pour aider un ami à automatiser son habitation et l’extérieur.

Les critères sont simples :

  • un Raspberry Pi 2
  • gérer une ouverture de portail
  • gérer des prises 433 MHz télécommandées
  • gérer une alarme avec activation rfid/web/radio
  • recevoir des alertes email/push/sms en cas de déclenchement
  • gérer des télécommandes 433 MHz multi-boutons
  • gérer des caméras IP
  • intégrer les caméras dans une interface web simplifiée
  • intégrer une interface web de gestion domotique
  • par la suite, gérer des stores électriques via radio (Chacon Di-O)

Pour commencer, l’ouverture de portail sera gérée par une simple platine de télécommande 433 MHz et 4 relais : 2 fonctionnant en on/off, à la manière d’un télérupteur, et 2 fonctionnant en impulsion (activation tant que le code est reçu). Deux relais, donc deux ouvertures possibles : totale, ou juste piéton.

La gestion des télécommandes 433 MHz utilisera de scripts et modules déjà connus, utilisés par exemple sur notre RaspiDomo. Les platines seront intégrées dans un boîtier intégré dans les murs en placo proche des arrivées EDF/internet.

La gestion RFID est elle un peu plus complexe, basée sur un module électronique RC522 sur mon propre prototype :

rc522

Le RFID sera par la suite géré seul, par une interface dédiée, la K2000, solution chinoise livrée avec plusieurs badges :

k2000_RFID

A la sortie de cette interface, une impulsion lorsque le badge est reconnu, capable d’activer une gâche électrique : ici, nous ne l’utiliserons pas, nous nous contenterons de badger en entrée et de badger en sortie pour activer ou désactiver l’alarme, une impulsion à chaque fois donc, reçue et traitée par la Framboise. Une LED viendra confirmer la mise en route ou l’arrêt de l’alarme, télécommandée depuis le Raspberry Pi 2. Avantage : solution simple, autonome. Inconvénient : ne pas pouvoir gérer selon l’identifiant du badge, mais ce n’est pas notre idée pour le moment.

La gestion Web : un peu de php, pas mal de scripts bash, une tâche de fond (réception 433 MHz), voir même deux sur mon proto qui lit également le RFID en direct. C’est un gros programme tout bête, des boutons qui portent chacun un nom précis et qui déclenchent des actions, souvent des scripts .sh, parfois des scripts Python ou Python3.

Retour sur le RFID, cette fois-ci avec un prototype de course et un script de mise en marche / arrêt à chaque passage d’une carte :

C’est tout simple, un peu de Python3. Via twitter, voici une version différente, avec cette fois deux badges, le bleu allumant la led… bleue bravo 😉

Je vous présenterai par la suite l’intégration de ce projet dans une boite d’encastrement pour placo, laissons maintenant le temps aux différents matériels d’arriver, le temps de « recopier » le prototype et de personnaliser la solution domotique finale. Que de boulot en perspective, mais pour un geek, c’est un bonheur 😉

 

Raspberry Pi : alimentation Poe et réception 433 MHz

En surfant un peu, une remarque revient régulièrement : ne pas alimenter la réception 433 MHz via le Raspberry, pas forcément prévu pour, mais utiliser une source externe.

Dont acte, je vais profiter du module d’extraction PoE ajouté à mon Raspberry d’alarme pour venir y récupérer le +5V nécessaire à la platine de réception :

raspberry alarme alim poe

La platine rouge est le module PoE, le petit fil rouge qui en sort va se relier, vers la droite, sur le récepteur 433 MHz. On sort du module PoE avec un câble USB/micro-USB extra court (10 cm) destiné à alimenter le Raspberry Pi 2.

Etrangement, effectivement cela fonctionne mieux, le récepteur semble plus réactif, sans doute moins perturbé par une source d’alimentation peu fiable. Je me suis promis de tester également avec l’émetteur, histoire de vérifier si, par hasard, la portée augmentait un peu…

 

 

 

Raspberry Pi : alarme !!

Détecter une ou plusieurs ouvertures de porte, détecter des codes 433 MHz, capturer l’image d’une ou plusieurs caméras IP (via leurs flux RTSP), alerter par SMS ou email, voici autant de fonctionnalités que nous pourrions demander à un Raspberry Pi utilisé en alarme.

C’est avec toutes ces fonctionnalités que j’ai débuté la programmation en Python 3, cherché comment articuler tout ce petit monde sans bugs.

J’ai réutilisé mon précédent travail sur la réception 433 MHz, en la faisant fonctionner en tâche de fond, cf ce billet pour les détails. Ainsi, il ne me reste plus qu’à aller lire le fichier recu.txt et vérifier le code qu’il contient.

raspberry433

Platines Tx et Rx 433 MHz

La mise en route ou l’arrêt de l’alarme est possible de deux façons :

  • une télécommande 433 MHz
  • le serveur web intégré au Raspberry

Si j’arrive chez moi, je coupe l’alarme avec un appui sur la télécommande : la LED d’activation s’éteint, je peux rentrer ! Si j’ai oublié d’activer l’alarme, je peux le faire à distance, via l’interface web du Raspberry, le RASPI ALARME passant de vert à rouge dans ce cas :

raspberry alarme off

Interface de gestion de l’alarme

Voici à quoi ressemble le prototype actuellement en fonctionnement :

raspberry alarme proto

Raspi Alarme : protoype

J’utilise un Raspberry 2, plus puissant. On voit en haut la platine du récepteur 433 MHz, suivie par celle de l’émetteur 433 MHz. Le fil jaune isolé est celui destiné à brancher une LED (mise en route ou arrêt de l’alarme). Les deux fils du bas sont destinés à un contacteur porte, ouvert ou fermé.

Pour la mise en route et l’arrêt par radio, j’utilise une simple télécommande 433 MHz, $2 environ chez ebay, pas la peine de se ruiner :

raspberry 433 remote

Télécommande 433 MHz

Toujours en 433 MHz, j’ai expérimenté avec un détecteur d’ouverture radio plus performant que les m… qu’on trouve chez amazon (cf ce billet pour mes essais avec ces modèles). En fait, j’ai utilisé une petite platine d’émission 433 MHz (merci ebay, environ $5), une pile 12 V miniature pour ne pas avoir à dépendre d’une alimentation 220 V, et un contacteur magnétique inversé acheté à prix d’or chez Conrad :

raspberry alarme ouverture

Prototype détecteur d’ouverture 433 MHz

Oui, je sais, ça pendouille de partout, mais c’est pour mieux vous expliquer l’idée : à droite en bas, la pile 12 V, puis juste au dessus le petit émetteur 433 MHz et une antenne adaptée. Sur la gauche, au dessus de la porte, un aimant. Au dessus, un contacteur : lorsque l’aimant passe sous le contacteur, il alimente très brièvement la télécommande qui transmet alors un code, code que notre Raspberry va recevoir et traiter, ouf 😉

Pour finir, voici le script python3 principal utilisé sur le proto actuel. Chacun l’adaptera, sans oublier qu’il faut aussi un php pour venir gérer l’interface web, installer le serveur Apache 2, etc. Ce billet n’est pas un tuto, il vous donne juste quelques pistes de réflexion si vous vous lancez dans le même bricolage.

START.PY : le script principal, détection des codes radio, de l’ouverture, etc. zero.txt contiendra un simple 0 (zero), sans retour de ligne. alarme_on.txt contient 1, toujours sans retour de ligne, et son pendant alarme_off.txt contient lui 0 (zero).

#!/usr/bin/python3
#
# Lecture du code de telecommande recu par RFSniffer (version modifiee, en tache de fond)
# le code reçu se trouve dans /home/pi/recu.txt
#
import os
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
#
# Broche 7 GPIO4 out sur la LED
#
GPIO.setup(4, GPIO.OUT)
#
# Broche 15 GPIO22 in interrupteur porte
#
GPIO.setup(22, GPIO.IN)
#
# Boucle de detection sans fin
#
while True:
#
# Ouverture et lecture de temp.txt
#
  f = open('/home/pi/recu.txt', encoding='utf-8')
  alarme = open('/home/pi/alarme.txt', encoding='utf-8')
  a = int(alarme.read())
#
# Detectons si le fichier est vide (0) ou pas
# et inscrivons le code recu dans la variable g
#
  statinfo = os.stat('/home/pi/recu.txt').st_size
  if statinfo > 0 :
    g = int(f.read())
#
# Lecture contacteur porte
#
  entree = GPIO.input(22)
#
# ALARME DETECTEE
#
  if entree == 1 and a == 1 :
    print ("alarme contacteur entree !!!!!")
    os.system('sudo cp /home/pi/zero.txt /home/pi/recu.txt')
#
# Capture image depuis le flux rtsp d une camera ip en lancant un script sh
#
    os.system("sudo sh /home/pi/snapshot.sh")
#
# Detection du code radio
# puis remise a zero de recu.txt en copiant le contenu de zero.txt a sa place
# (zero.txt contient un simple 12345)
#
#
# Telecommande cle voiture
#
#
# Bouton A
#
  if g == 5592512:
    print ("alarme on")
#
# On active la LED d'alarme
#
    GPIO.output(4, GPIO.HIGH)
#
# Remise a zero du code recu
#
    os.system('sudo cp /home/pi/zero.txt /home/pi/recu.txt')
#
# on copie 1 dans alarme.txt car l alarme est activee
#
    os.system('sudo cp /home/pi/alarme_on.txt /home/pi/alarme.txt')
#
# Bouton B
#
  if g == 5592368:
    print ("alarme off")
#
# On desactive la LED d'alarme
#
    GPIO.output(4, GPIO.LOW)
#
# Remisee a zero du code recu
#
    os.system('sudo cp /home/pi/zero.txt /home/pi/recu.txt')
#
# on copie 0 dans alarme.txt car alarme desactivee
#
    os.system('sudo cp /home/pi/alarme_off.txt /home/pi/alarme.txt')
  else:
    time.sleep(.1)

(màj) Un détecteur de fumée 433 MHz chinois…

Mise à jour : en fait, en observant bien la notice, le détecteur est prévu pour fonctionner en réseau (sic) sous 12 V, et non pas 9 V. Le beep entendu est tout simplement l’alerte d’une batterie faible ! Pour qu’il soit utilisable, il faudrait donc avoir une pile 9 V qui délivre 12 V. Effectivement, branché sur alimentation 12 V externe, il ne couine plus. Moralité : à ne pas acheter, sauf à prévoir une ligne d’alimentation 12 V à proximité, et le transformateur d’alimentation qui va avec. C’est donc bien une chinoiserie de plus, mal étudiée, montée sans aucune étude préalable.

 

Pour compléter mon installation domotique, je me suis mis en quête d’un détecteur de fumées capable de lancer une alerte sans fil, sur 433 MHz, et ainsi de prévenir mon RaspiDomo d’un départ de feu.

C’est donc en direction d’ebay que j’ai tourné mon regard, cherchant un modèle de qualité acceptable. Oh oui, pas de norme franco-française, pas de marquage CE, ne rêvons pas, mais l’idée était avant tout de tester le principe : fumée -> alerte via une trame 433 MHz.

detecteur_433_domotique
Voici donc ce fabuleux détecteur de fumée, arrivé ce matin par La Poste sous environ 15 jours, pas si mal… Bon, comme souvent avec les chinoiseries d’ebay, il ne faut pas s’attendre à des miracles : une notice vous indique comment brancher la pile 9 v fournie et tester l’alarme. Effectivement, mon Raspberry Pi reçoit bien la trame numéro 5625173, cela ne fait aucun doute, cela fonctionne !

Pris d’un doute, je me lance dans l’allumage d’un feu de cheminée : un peu de papier sec, un peu de bois humide, et voici la fumée qui se dégage, déclenchant rapidement le détecteur : parfait, il fonctionne là encore !

Sauf que… il fonctionne tellement bien qu’il n’arrête plus de beeper ce c.. 🙂 Toutes les 20 à 30 secondes, un court beep se fait entendre, alors même qu’il n’y a plus de fumée. Etrange… Même en enlevant la pile, il couine toujours, sans doute un condensateur qui se décharge, mais mal. Installé à la maison, ce serait impossible de dormir, l’appareil est donc inutilisable en l’état.

J’ai contacté le fournisseur pour avoir des informations, lui indiquant que j’allais évaluer négativement le produit s’il était défectueux, ce qui, pour un vendeur chinois, serait le comble de la honte, lui faisant perdre toute crédibilité sur sa boutique ebay.

Et côté technique ? Une fois la bestiole ouverte, nous retrouvons effectivement un petit émetteur 433 MHz, avec la possibilité de modifier la position des cavaliers pour changer le code émis. Il y a même une antenne pour espérer augmenter la faible portée radio. Sur le papier donc, l’appareil est sympa, si ce n’est ce beep régulier, pas franchement encourageant pour la suite des évènements : j’ai peur que cela ne se termine par un classement vertical sur une quelconque étagère, et s’en suive une plainte sur ebay.

 

Domotique sur Raspberry Pi : détecter le facteur !

Amusons-nous un petit peu avec l’émetteur 433 MHz miniature que propose désormais Monwifi.fr :

tx433mini

Emetteur 433 MHz miniature

 

Ce tout petit module est autonome. Ajoutez lui une antenne (un fil de 17,4 cm exactement sur sa broche ANT), une pile miniature 12 V, et vous voici prêt à émettre vos premières trames de télécommande. Ah oui, notez les jumpers D1 à D4 situés en bas à droite de l’image : ils permettent de générer un code bien précis, selon vos besoins.
Il faudra vous munir bien entendu d’une platine de réception 433 MHz raccordée à votre Raspberry Pi pour déterminer le code transmis, cf ce billet pour apprendre comment sniffer le code. Dans mon cas, le module émet le code 13253135 par défaut, avec les jumpers par défaut.

Allons maintenant chercher un relai reed avec une sortie NC / NO : lorsque la boite aux lettres sera fermée, un petit aimant viendra établir la continuité entre le COMmun et la sortie NO. Ouvres la boîte, l’aimant s’éloigne, et c’est le contact NC qui sera relié au COMmun, parfait pour venir alimenter notre petit module le temps nécessaire :

reed

 

modifions un peu le script de réception présenté ici et venons lui ajouter la détection de notre mini-émetteur :

  elif g == 13253135:
    print ("reception mini tx 433 MHz")
# envoi SMS Freemobile sur ouverture boite aux lettres
#
    os.system('sudo sh /home/pi/sms.sh')
    os.system('sudo cp /home/pi/zero.txt /home/pi/recu.txt')

Le fichier sms.sh est lui des plus simple :

#!/bin/bash
curl --insecure 'https://smsapi.free-mobile.fr/sendmsg?user=12345678&pass=12345678&msg=boite%20ouverte'

Remplacez bien entendu les valeurs user et pass par vos propres informations d’abonné.

Il vous reste désormais à intégrer le petit interrupteur reed, le mini-émetteur et une batterie 12 V dans votre boite aux lettres, voir à l’extérieur dans un boîtier électrique étanche, au besoin en ajoutant une antenne 433 MHz pour obtenir un maximum de portée : à la première ouverture, votre Raspberry vous adressera un SMS :

boite ouverte

Facile non ?

Bien entendu, il faudra améliorer un peu le script, voir améliorer le relai pour qu’il n’envoie qu’une impulsion unique et courte, mais vous avez saisi l’idée de base je pense 😉

 

 

 

Raspberry Pi : intégration d’une télécommande 433 MHz

 

Profitons du week-end et d’un arrivage Samedi par La Poste de deux nouveaux jouets 433 MHz, dont une télécommande à 2 boutons, A et B :

raspberry 433 remote

Télécommande 433 MHz

 

Ce petit module émet un code par bouton, sans rolling code, et nécessite une pile 12 V miniature pour s’alimenter en énergie.

Sur mon modèle, le bouton A transmet le code 5592512, le bouton B 5592368.

Ni une, ni deux, je modifie le script qui scanne ma réception 433 MHz sur le Raspberry, et demande à ces deux boutons de venir allumer l’extérieur, l’entrée, le salon : pratique lorsque vous arrivez de nuit et voulez éviter de chercher le trou de la serrure 😉

Première limitation constatée : la portée d’émission ! C’est certes du 433 MHz, mais sans antenne performante, l’émission radio ne va pas très loin. Il va falloir prévoir d’ajouter une vraie antenne sur le récepteur donc, l’une des modifications déjà prévue de longue date, les pièces étant actuellement en commande en Asie.

 

Détecteur d’ouverture 433 MHz : changement de code

Comment changer de code sur le petit détecteur d’ouverture 433 MHz proposé sur Amazon ?

raspberry_detecteur_ouvertue

Détecteur d’ouverture 433 MHz

Commencez par l’ouvrir (la fente sur le bas), et ôtez la pile. Sortez la platine de son boîtier plastique :

ouverture_433

 

Repérez le petit circuit intégré cms sur l’une des faces : il s’agit de l’encodeur V1527 (datasheet PDF), fréquemment utilisé sur les émetteurs 433 MHz.

Tournons maintenant la platine :

ouverture_433_dos

La série de plots en bas, juste au dessus du contacteur magnétique, va nous intéresser. Vous y trouvez 3 rangées de plots. Seules les rangées 2 et 3 vont nous intéresser, mais uniquement les 4 plots en partant de la droite. Par défaut, seul la deuxième rangée de plots 2 et 3 est  soudée, comme sur la photo ci-dessus.

Venez maintenant souder les plots de la 3ème, la 4ème ou la 1ère rangée, et vous changerez le code de l’émetteur (16437768 sur le module initialement reçu).

Simple non ? Mais n’oubliez pas, la portée est minable, vraiment minable, vous êtes prévenus.

 

 

Raspberry Pi : réception télécom. 433 MHz avec RFSniffer + script Python

Avec notre RFSniffer modifié, 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.

Voyons maintenant comment, 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, WordPress a la faculté de tout bousiller lors d’un copier/coller, désolé…).

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 &

 

Je suis conscient qu’il doit être possible de faire un script beaucoup plus « pro » : je ne suis pas programmeur, je l’assume pleinement, mais le script fonctionne, n’est-ce pas l’essentiel ?

Et puis Blogwifi reste ouvert pour la publication de vos améliorations, c’est le principe d’un travail sans licence commerciale, non ? 😉

A vos scripts, prêts, partez !!

raspidomo1

#!/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')

Raspberry Pi + PiFace + Rx/Tx 433 MHz : comment ?

Comment venir relier vos modules récepteur et émetteur 433 MHz sur un Raspberry Pi disposant de l’interface PiFace ?

Suivez simplement la photo :

raspidomo-cablage

 

Vous utiliserez donc deux fils pour le (+) d’alimentation, deux pour la masse (GND), et un fil pour les données : Jaune sur le récepteur, Vert pour l’émetteur, reliés chacun sur la broche DATA des modules.

Le (+) et GND se relient aux borniers du PiFace, c’est on ne peut plus simple, fiez vous simplement à la photo.