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)

Publications similaires

  • Facebook : le bidonnage des pubs

    Vous avez déjà tenté de faire une pub sur Facebook ? Tenez, récemment, nous cherchions à présenter notre nouveau Hotspot Wifipak Mini. Nous avons donc ciblé plusieurs critères, dont 2 véritablement essentiels : Homme ou Femme de 35 ans minimum la France exclusivement Si les likes fonctionnaient bien au départ, voici plusieurs jours que nous avons des retours payants un peu étranges, jugez en plutôt par quelques captures d’écrans de nos gentils « likeurs » : On commence par un village en plein…

  • JoeMobile : la 4G sur le réseau SFR

    Attendu depuis de nombreuses semaines maintenant, JoeMobile se lance enfin en 4G, hélas toujours sur le réseau SFR, pas forcément un gage de qualité, de rapidité et de couverture. Deux ou trois nouveautés pour un forfait à 20 € et 3 Go de données, ou 30 € et 7 Go. On rajoute une surcouche d’appels vers les DOM, un peu de SMS ici et là, etc. Bref, ça avance, mais ça ne révolutionne pas grand chose, d’autant qu’avec le réseau…

  • Wifipak V2 : deux réseaux, deux portails captifs

    Le firmware du Wifipak v2 permet des jeux techniques assez sympathiques, à condition que les bornes WiFi autorisent les VLANs. Wifipak V2 + enregistreur de connexions Tenez, prenez l’exemple d’un établissement ayant besoin de trois réseaux WiFi : [checklist] un réseau privé fermé et sécurisé par un cryptage WPA2, IP 10.10.0.0/24 un réseau ouvert avec le Vlan 10 et un portail captif dédié, IP 192.168.10.0/24 un second réseau ouvert, cette fois avec Vlan20 et un autre portail captif, IP 192.168.20.0/24…

  • Noël et congés

    Quelques congés en cette fin d’année enneigée, avec la fermeture d’Infracom du 23 au 27 Décembre 2010. Les dernières expéditions seront effectuées le 22 en début d’après midi, les suivantes reprendront à partir du 28 Décembre. Par conséquent, pour toute commande urgente, n’hésitez pas à vous organiser un minimum pour éviter tous délais de réapprovisionnement. Attention, Décembre est par habitude un mois extrêmement chargé chez nos fournisseurs, il faut par conséquent prévoir à l’avance !

  • |

    Adafruit : votre AP WiFi bloque la pub !

    Vous vous souvenez du Raspberry Pi, cette petite bestiole considérée, en son temps, comme une innovation tellement le prix était supposé rester bas ? Après lui avoir ajouté une webcam, des interfaces d’entrées/sorties, voici maintenant venir un firmware permettant de transformer l’engin en point d’accès bloqueur de pub ! Oui, vous avez bien lu, le Raspberry peut désormais vous éviter d’afficher ces insupportables publicités, un peu à l’instar de la Freebox du Chevalier Niel, un personnage fort en colère contre…

4 commentaires

  1. bonjour pouvez m’envoyer un schéma de branchement du contact de porte sur l’émetteur 433 mhz svp

  2. pouvez vous me dire ou vous avez brancher les 2 fil du contact de porte sur l’emetteur

Les commentaires sont fermés.