MyTnyBx

My Tiny Box

Raspberry Pi + Webcam = sonnette

30/09/2012 à 22:26:20

Problématique: quand j'écoute de la musique chez moi, je n'entends pas toujours la sonnette. Contexte: j'ai acheté un Raspberry Pi sans trop savoir ce que j'allais en faire. Résultat: une sonnette améliorée !

Le matériel

Un Raspberry Pi avec Raspbian comme système d'exploitation.
Une Webcam qui trainaît dans un tiroir (en l'occurence un EyeToy de Playstation 2, qui fonctionne directement sous Raspbian).

Le résultat

La webcam est branchée sur le Raspberry Pi, et est pointée en direction de la porte d'entrée, au travers d'une fenêtre adjacente à celle-ci. Quand quelqu'un se présente devant ma porte d'entrée, l'évènement est détecté, et une notification s'affiche directement sur mon bureau KDE.

La mise en place

Motion est utilisé pour détecter les mouvements.
Il se configure dans /etc/motion/motion.conf. Pour éviter les faux-positifs, j'ai modifié les paramètres suivants:
threshold 3000
lightswitch 70

Pour pouvoir me connecter au flux vidéo depuis mon portable:
webcam_localhost off

Pour lancer la notification quand un évènement est détecté:
on_event_start /home/motion/bin/motionnotify.sh

Une fois l'évènement détecté, la commande notify-send (du paquet libnotify-bin) permet d'afficher la notification.

Notify-send ne fonctionnant qu'en local, les scripts python suivants permettent de l'utiliser en réseau:

http://ubuntuforums.org/showthread.php?t=1222502

Le client (/home/motion/bin/notifyclient.sh):

#!/usr/bin/env python

#network notify-send

import socket
import sys

host = '192.168.1.10' #server IP
port = 50000
size = 1024
title = sys.argv[1]
message = sys.argv[2]

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
s.send('\"' + title + '\" \"' +message+'"')
data = s.recv(size)
s.close()

Le serveur (/home/utilisateur/bin/notifyserver.sh):

#!/usr/bin/env python

# Network Listener for notify-send

import socket
import os

host = ''
port = 50000
backlog = 5
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(backlog)
while 1:
client, address = s.accept()
data = client.recv(size)
if data:
client.send(data)
cmd = 'notify-send ' + data
os.system(cmd)
client.close()

Un petit script qui va appeler le client, avec un lien vers le flux vidéo, pour voir qui se trouve devant la porte (/home/motion/bin/motionnotify.sh):

#!/bin/sh
logger "Motion detected"
/home/motion/bin/notifyclient.sh "Porte" "Il y a quelqu'un à la porte.\<br /\>\<br /\>\<a href=\"http://raspberry.local:8081\"\>Voir le flux\</a\>"

Motion crée un utilisateur "motion", le script doit donc être exécutable par cet utilisateur.

Et voilà, je peux écouter de la musique très fort :)

Raspberry Pi, Webcam

Aucun commentaire

Flux RSS des commentaires de cet article

Les commentaires sont fermés pour cet article