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

  • Unifi bi-bande extérieur : les antennes

    Ubiquiti a récemment publié le description des antennes intégrées à ses bornes Unifi extérieures 802.11ac et le moins que l’on puisse remarquer, ce sont les performances (en PDF ici : unifi_AP_outdoor_dual). D’ailleurs, si on se fie aux photos internes de la borne, on ne peut qu’apprécier la qualité et le dénuement à la fois : Trois antennes par carte WiFi, une carte par bande (2.4 et 5 GHz), voici de quoi espérer des performances haut de gamme !    

  • Much better in english ?

    Si comme moi vous surfez intensément, si vous avez vécu les débuts de l’informatique et avez totalement absorbé le Web 2.0, puis vu apparaître les différents métiers liés au Réseau, avec un grand R, vous n’avez pas manqué de constater que tout a été pratiquement copié ou repris de l’étranger, des USA essentiellement. Ainsi, les métiers ont été petit à petit anglicisés : on ne parle pas de « gestionnaire de communauté » mais de Community Manager (CM). On n’hésite pas à…

  • Nordnet, kit Astra 2F : les fonctionnalités

    Jusqu’à présent je vous ai présenté le matériel du kit pour Astra 2F, mais j’ai peu écrit sur les fonctionnalités. Ce billet vous présentera la téléphonie, le téléchargement, la box, la fonction TV, etc.   Téléphonie : Avec la Nordnet Box, vous bénéficiez de deux téléphones DECT et d’une ligne VoIP (un numéro en 09 xx xx xx xx). Ce matin, j’ai eu l’occasion de tester cette téléphonie par satellite. La qualité correspond à ce que j’avais pu tester sur…

  • |

    Tous Ensemble

    Cet article est rédigé le 8 Décembre mais, pour des questions évidentes de confidentialité, ne sera pas diffusé avant la livraison de l’habitation concernée : il ne s’agit pas de divulguer des informations confidentielles qui aboutiraient à l’arrêt du chantier comme la production l’a clairement indiqué. L’info est passée rapidement sur notre page Facebook : l’émission Tous Ensemble tournait depuis début Décembre sur la proche région de Pontchateau, autant dire très proche d’ici. Un ami proche s’y est déplacé pour…

  • |

    La Poste : nouvelles réformes sur la tête !

    Quand on travaille avec La Poste depuis des années, on arrive forcément à avoir des bruits de couloir des « révolutions » à venir. En ce moment, la révolution se veut stupide, insensée, loin du client, faisant tout pour obscurcir l’image d’une institution pourtant appréciée des français. Je prendrai deux exemples : Confier son courrier au facteur : En campagne, le facteur fait le lien avec la population, souvent d’un certain âge. Ce lien, pour moi il est essentiel, car humain, proche…

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.