Interphone DIY

De OpenWikiBSD
Aller à : navigation, rechercher

Lassé des interphones audio ou vidéo analogiques ? Envie de tirer du catégorie 6 jusqu'au portail ? Envie de recevoir les appels et d'ouvrir avec son smartphone, mais pas envie d'investir dans un magnifique mais couteux) IP-Interphone ?

On y va :

Matériel

  • 2 RaspberryPi MOdèle B
  • 2 micros cravate filaire
  • 2 cartes son USB (2€ sur Ebay)
  • Un écran LCD 7' ou moins (chercher lcd moniteur recul) sur un site de vente en ligne (Un de ceux qui ne payent pas leurs impôts...)
  • 1 Webcam ou bien 1 module Picam
  • 1 relais adafruit pour alimenter la gâche électrique
  • 2 amplis adafruit pour la sortie HP



Côté portail

  • 1 Rpi avec micro, HP, raspicam, ampli et relais
sudo apt-get install music123 mpg123 vorbis-tools python-picamera python3-picamera python-rpi.gpio python-prowlpy python-ow ffmpeg python-mailer


Si vous voulez n'utiliser le Rpi que comme interface, mais pas comme stockage des données, on va monter une VM distante pour cela :

 sudo apt-get install sshfs rsync openbsd-inetd

Les deux derniers ne sont que pour BackupPC

Côté maison

  • 1 Rpi avec micro,HP, écran et ampli



Config RPi Portail

Connexion SSH

adduser doorphone
su doorphone
ssh-keygen - t rsa

Depuis RPI maison :

ssh-copy-id doorphone@doorbell

Vous pouvez scripter des connexions ssh depuis la maison vers le portail.

Config RPi Maison

Connexion SSH

adduser doorbell
su doorbell
ssh-keygen - t rsa

Depuis RPI portail :

ssh-copy-id doorbell@doorphone

Vous pouvez scripter des connexions ssh depuis le portail vers la maison

Image

sudo apt-get install fbi rsync openbsd-inetd

Les deux derniers ne sont que pour BackupPC

Galerie de photos

sudo pkill fbi
sudo /usr/bin/fbi -T 1 -a -t 5 -u `find /home/pi/Images -iname *.jpg`


Son

  • Activer la carte son USB : [1]

Commenter la ligne correspondant dans /etc/modprobe.d/alsa-base.conf

#options snd-usb-audio index=-2

sudo reboot

Si ça ne fonctionne pas : [2]

  • Message d'erreur lors de la lecture d'un son :
 ALSA lib dlmisc.c:254:(snd1_dlobj_cache_get) Cannot open shared library /usr/lib/arm-linux-gnueabihf/alsa-lib/libasound_module_rate_samplerate.so

Solution :

 sudo apt-get install libasound2-plugins

Schémas

Ajoutez la librairie Adafruit à Fritzing [3]


Le microphone

Compliqué de trouver son bonheur. Le Pi possède une entrée micra qu'on va remplacer par une carte son USB.

Les cartes de base (Moins de 5€ sur Amazon/ebay) sont de chipset C-Media et la qualité est à la hauteur du prix. Néanmoins, pour un interphone, on ne demande pas une qualité formidable de restitution et ça suffira bien.


[4]

Le soft

On pensera à mettre ces scripts en démarrage : [5]

L'interrupteur

#!/usr/bin/env python
# -*- coding: latin-1 -*-
import RPi.GPIO as GPIO, time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
BUTTON1_STATE = False
GPIO.setup(BUTTON1, GPIO.IN)
while True:
 # Ce bout de code a été piqué (puis largement modifié) du site http://....Aretrouver...
 # -- Lecture avec déparasitage logiciel
 # Si le bouton est pressé, la broche GPIO est raccordée
 #   à la masse. Le GPIO est donc à LOW (bas).
 #   Bouton pressé -> Input = LOW = False         
 ETAT1WIRE=onewire()
   if ETAT1WIRE != 0:
    PIC="/usr/script/"+ETAT1WIRE+".jpg"
    print PIC
    remoteaudioout("Nuit.ogg") #Joue le morceau en SSH sur l'autre pi interne
    sendmail(PIC,"MOI",ETAT1WIRE+" rentré(e)")
    notifApple(ETAT1WIRE+" rentré(e)")
    logger(ETAT1WIRE+" est rentré")
    gpioRead1 = GPIO.input( BUTTON1 )
    state1    = not(gpioRead1)
    # Si change d'etat ALORS refaire lecture de déparasitage
    if( state1 != BUTTON1_STATE ):
      # - attendre 10ms
      time.sleep( 10 / 1000 )
      # faire une 2ieme lecture
      gpioRead2 = GPIO.input( BUTTON1 )
      state2 = not(gpioRead2)
      # SI les deux lectures concordent
      # ALORS memoriser le nouvel etat du bouton
      if( state1 == state2 ):
         BUTTON1_STATE = state2
       # -- Programme principal --
       # SI le bouton est pressé
       # ALORS allumer la LED verte  
       if( BUTTON1_STATE == True ):
               GPIO.output(GREEN_LED, False)
               GPIO.output(RED_LED, True)
               print "-----------------------------Bouton appuyé---------------------------"
               remoteaudioout("GoT.ogg")
               subprocess.Popen(['/usr/bin/mpg123', "Afraid2.mp3"])
               recordpic(PHOTO)
               recordaudio(5)
               sendmail(PHOTO,"MOI","Appuyé")
               notifApple("Pressed")
               notifAndroid("Pressed",'Moi')
               logger("Bouton appuyé")
          else:
               GPIO.output(GREEN_LED, True)
               GPIO.output(RED_LED, False)
               #print "Relaché"

La caméra

Vous ne pouvez pas baisser la quantité de mémoire du GPU en dessous de 128 Mo. Sinon:

mmal: mmal_vc_component_enable: failed to enable component: ENOSPC
mmal: camera component couldn't be enabled
mmal: main: Failed to create camera component

Réglages

  • Resolution [6]

Scripts

#!/usr/bin/env python
# -*- coding: latin-1 -*-
import picamera
import os
def recordvideo(DUREE):
  print "Debut enregistrement VIDEO"
  camera.start_preview()
  camera.start_recording('FILE..h264')
  time.sleep(DUREE)
  camera.stop_recording()
  camera.stop_preview()
  print "Fin enregistrement VIDEO"
def recordpic(FILE):
  #camera_width = 320
  #camera_height = 240
  with picamera.PiCamera() as camera:
    #camera.resolution = (camera_width, camera_height)
    #camera.start_preview()
    camera.capture(FILE)
    #camera.stop_preview()
    NOW = str(time.strftime("%c"))
    os.system("/usr/bin/montage -label '"+NOW+"' "+FILE+"   -geometry +1+1 "+FILE)

Génére une photo avec la date en surimpression

Badge Ibutton/1wire

Le hard

  • Le lecteur de badge [7]
  • Le convertisseur USB-1WIre [8]
  • Config du DS9490B [9]

Le soft

#!/usr/bin/env python
# -*- coding: latin-1 -*-
import os,syslog
LESCLES={'ID1':'Moi','ID2':'Miss'}
os.system("/usr/bin/mpg123  smoke.mp3") # On s'exprime au démarrage
while True:
 CLE=str(os.listdir("/mnt/1wire/uncached")[0])[0:15]
  try:
     print LESCLES[CLE]
     syslog.openlog( 'RaspberryPIDoorBell', 0, syslog.LOG_LOCAL4 )
     syslog.syslog( "CLE")
     os.system("/usr/bin/ogg123  starwars.ogg") #Badge lu
       except Exception:

BIDON=1

Notifications Smartphone

C'est là que le WAF augmente rapidement ;-)

IOS

Prowl est votre ami

Idem que pour Android. Le code Python est :

#!/usr/bin/env python
# -*- coding: latin-1 -*-
import pynma
def notifApple(SUBJ):
  api_key="MONAPIKEY"
  provider_key="PROVID"
  p = prowlpy.Prowl(api_key)
  p.add('DoorPhone',SUBJ, "http://Doorbell")
notifApple("TEST")

Android

NMA, notify My Android pour les intimes :

  • Installez l'appli sur l'android de votre choix
  • Faites un tour sur le site NMA
  • Créez un compte
  • Configurez l'appli NMA sur vous doudoud numérique
  • Générez une clé pour l'API
  • Faites un test de notification. Si ca marhce il faut prendre la clé API dans votre code :

En Python :

#!/usr/bin/env python
# -*- coding: latin-1 -*-
import pynma
APIKEY={'User1':'APIKEY1', 'User2': 'APIKEY2' ,'Tablette' : 'APIKEY3','Moi' : 'MONAPIKEY' }
def notifAndroid(SUBJ,DEST):
   p = pynma.PyNMA( APIKEY[DEST])
   p.push('DoorBell',SUBJ, "http://DoorBell",  "http://www.prowlapp.com/")
notifAndroid("TEST",'Moi')

Mail

#!/usr/bin/env python
# -*- coding: latin-1 -*-
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
import mimetypes
def sendmail(FILE,DEST,SUBJ):
  FROM="Pi@Home"
  SMTPSRV="smtp.schwarz-fr.net"
  # Create the container (outer) email message.
  msg = MIMEMultipart()   
  msg['Subject'] = SUBJ
  msg['From'] = FROM
  msg['To'] = COMMASPACE.join(DEST)
  #msg.preamble ="SUBJ" 
  fp = open(FILE, 'rb')
  #img = MIMEImage(fp.read())
  img = MIMEImage(fp.read(),_subtype="jpeg")
  fp.close()
  msg.attach(img)
  s = smtplib.SMTP(SMTPSRV)
  s.sendmail(FROM, DEST, msg.as_string())
  s.quit()

Syslog

#!/usr/bin/env python
# -*- coding: latin-1 -*-
import syslog
def logger(TEXT):
 syslog.openlog( 'RaspberryPI', 0, syslog.LOG_LOCAL4 )
 syslog.syslog( TEXT )

Divers

Mettre à jour le firmware de sa framboise

Depuis chez Korben : [10]

/opt/vc/bin/vcgencmd version
 Jun  4 2014 21:04:32 
Copyright (c) 2012 Broadcom
version c89591d3959d5fec88856f2460ee641f3a1d29dc (clean) (release)

sudo apt-get install ca-certificates git-core binutils
sudo wget https://raw.github.com/Hexxeh/rpi-update/master/rpi-update
sudo cp rpi-update /usr/local/bin/rpi-update
sudo chmod +x /usr/local/bin/rpi-update
sudo rpi-update
sudo reboot
/opt/vc/bin/vcgencmd version
Dec 19 2014 18:40:20 
Copyright (c) 2012 Broadcom
version 5abd572e2ed1811283443387af09377b95501c50 (clean) (release)