Projet : Video surveillance

Les applications du Raspberry Pi en contrôle d'accès, alarme et vidéosurveillance

Modérateur : Francois

Avatar du membre
Gpapig
Messages : 75
Enregistré le : ven. 10 juin 2016 12:48

Re: Projet : Video surveillance

Message par Gpapig » ven. 15 juil. 2016 09:35

Hello !

Bon ça avance bien tout ça, le système est en place et fonctionne :)

Mon seul soucis vient de la détection automatique de présence sur le Wifi, j'ai des faux positifs (ou négatifs ^^) régulièrement. Je pense qu'il va falloir que je rajoute un "buffer" de présence.

Donc en l'état :

1. Le système se lance dès que l'on sort de la maison (basé sur un ping/arp des devices connectées au wifi)
-> Au démarrage je reçois un email et les leds s'allument
2. Il s'éteint au retour (Idem)
-> Je reçois un mail et les leds s'éteignent
3. Il peut s'éteindre sur pression d'un bouton physique
-> Cela coupe la détection de présence et laisse le système de détection de présence afin de pouvoir faire l'étape 4.
4. Si l'on quitte la maison avec le système sur off, on reçoit un email nous demandant si on veut l'activer ou le laisser éteint.
-> Pour le moment l'activation se fait à travers une appli endroit qui se connecte en SSH pour lancer un script (J'ai envie d'améliorer cette partie)
5. Une deuxièmre pression sur le bouton, si le système est "off", le remet en automatique. Une led indique dans quel état se trouve le système en tout temps

Donc au final j'utilise 2 leds, une pour l'état du système (automatique ou "off") et une pour savoir si la détection de mouvement est en marche.

Et pour finir en cas de détection de mouvement, les images sont copiées sur un compte gdrive, avec email à chaque détection.

Je viens de commander la camera NoIR avec un spot IR parce que la qualité est franchement mauvaise (quand on est en dehors de l'appartement, l'entrée est sombre comme pas possible).

Donc voilà je copierai les fichiers ici une fois que j'aurai tout fignolé, c'est pas du grand art niveau code mais si ca peut servir à quelqu'un autant y mettre à dispo ^^

Avatar du membre
Gpapig
Messages : 75
Enregistré le : ven. 10 juin 2016 12:48

Re: Projet : Video surveillance

Message par Gpapig » ven. 4 nov. 2016 14:34

J'ai abandonné les leds/boutons, au final personne ne s'en servait et c'est plus esthétique sans ^^

Je reviens dans le coin pour poster le résultat. Cela marche plutôt bien, maintenant je suis entrain de faire la 2ème partie du projet, à savoir allumer les lampes etc en cas de détéction (J'attend mes modules RF 433 et mes prises pour jouer avec)

Alors au final voilà ce que fait mon code :

Il détecte la présence d'un membre de la famille en se basant sur la présence ou non de son smartphone sur le wifi familial. Le code est lancé dans le cron, toute les 2 mins. J'ai du rajouté une étape car j'avais des faux positifs, donc il faut maintenant deux itérations du code pour que un changement de l'activation/désactivation intervienne.

Je gère au niveau de ce code l'envoi d'email pour l'activation/désactivation de motion, et c'est au niveau de motion que j'envoi les emails lors de détection de mouvement (avec upload vers un Gdrive des images/films).

Je me doute que c'est pas le code le plus propre de la terre, j'aurai pu simplifier les choses mais au final il me convient bien ^^, le log généré est clair et me permet de surveiller tout ça tranquillement. En espérant que cela puisse être utile à quelqu'un

Voici le log de sortie, en l’occurrence un changement d'état :

Code : Tout sélectionner

----------------------------------
-      2016-11-04 10:54:01       -
----------------------------------
2016-11-04 10:54:02 Equipement inactif  : X Natel (192.168.1.114)
2016-11-04 10:54:03 Equipement inactif  : TV (192.168.1.102)
2016-11-04 10:54:04 Equipement inactif  : XX Natel (192.168.1.101)
2016-11-04 10:54:04 Motion              : ON
2016-11-04 10:54:04 Présence            : Il y a 0 équipement(s) en fonctionnement
2016-11-04 10:54:04 Etat                : Identique
2016-11-04 10:54:04 Action              : Rien
----------------------------------
----------------------------------
-      2016-11-04 10:56:01       -
----------------------------------
2016-11-04 10:56:01 Equipement actif    : X Natel (192.168.1.114)
2016-11-04 10:56:02 Equipement inactif  : TV (192.168.1.102)
2016-11-04 10:56:03 Equipement inactif  : XX Natel (192.168.1.101)
2016-11-04 10:56:03 Motion              : ON
2016-11-04 10:56:03 Présence            : Il y a 1 équipement(s) en fonctionnement
2016-11-04 10:56:04 Etat                : En cours de changement
2016-11-04 10:56:04 Action              : Rien
----------------------------------
----------------------------------
-      2016-11-04 10:58:01       -
----------------------------------
2016-11-04 10:58:01 Equipement actif    : X Natel (192.168.1.114)
2016-11-04 10:58:02 Equipement inactif  : TV (192.168.1.102)
2016-11-04 10:58:03 Equipement inactif  : XX Natel (192.168.1.101)
2016-11-04 10:58:03 Motion              : ON
2016-11-04 10:58:03 Présence            : Il y a 1 équipement(s) en fonctionnement
2016-11-04 10:58:03 Etat                : A changer
2016-11-04 10:58:09 Action              : Stopper la surveillance
----------------------------------


Voici le code bash, il faut lui fournir en paramètre les IP (que j'ai rendu fixes pour les équipements qui m'intéressait au niveau du routeur):

Code : Tout sélectionner

#!/bin/bash

athome="0"

echo "----------------------------------"
echo "-     "   $(date +"%Y-%m-%d %H:%M:%S") "      -"
echo "----------------------------------"

howmanyathome=0
#Ping des adresses fournies en entrée

for var in "$@"
do
        case $var in
                "192.168.1.114") name="X Natel";;
                "192.168.1.102") name="TV";;
                "192.168.1.101") name="XX Natel";;
                *) name="unknown"
        esac

        ping -q -W1 -c1 $var > /dev/null
        if [ $? -eq 0 ]
        then
                athome="1"
                echo $(date +"%Y-%m-%d %H:%M:%S") "Equipement actif     : $name ($var)"
                howmanyathome=$((howmanyathome+1))
                #break
        else
                echo $(date +"%Y-%m-%d %H:%M:%S") "Equipement inactif   : $name ($var)"
        fi
done

#Detection si le service est lancé
service="motion"

isMotionON=0
isMotionON=$(sudo service motion status | grep -o running | wc -l)


if [ $isMotionON -gt 0 ]
then
        echo $(date +"%Y-%m-%d %H:%M:%S") "Motion               : ON"
else
        echo $(date +"%Y-%m-%d %H:%M:%S") "Motion               : OFF"
fi

echo $(date +"%Y-%m-%d %H:%M:%S") "Présence             : Il y a $howmanyathome équipment(s) en fonctionnement"

ToDo="NOTHING"

if [ "$athome" = "0" ]
then
        if [ $isMotionON -gt 0 ]
        then
                #Personne et motion allumé -> on ne fait rien
                #Enlève tout les fichiers flag permettant d'éviter les faux positifs
                ToDo="NOTHING"
                $(sudo rm -f /home/gpapig/automation/cam/flag/*)
        else
                #personne et motion pas allumé -> on lance
                #créer un fichier flag
                filename=$(date +"%Y%m%d%H%M%S")"ON"
                $(touch /home/gpapig/automation/cam/flag/$filename)
                ToDo="ON"
        fi
else
        if [ $isMotionON -gt 0 ]
        then
                #quelqu'un et motion allumé -> On éteint
                #créer un fichier flag
                ToDo="OFF"
                filename=$(date +"%Y%m%d%H%M%S")"OFF"
                $(touch /home/gpapig/automation/cam/flag/$filename)
        else
                #quelqu'un et motion éteint -> On ne fait rien
                #enlève tout les fichiers flags
                ToDo="NOTHING"
                $(sudo rm -f /home/gpapig/automation/cam/flag/*)
        fi
fi

Flags=$(ls /home/gpapig/automation/cam/flag | wc -l)
case "$Flags" in
        0) echo $(date +"%Y-%m-%d %H:%M:%S") "Etat              : Identique";;
        1) echo $(date +"%Y-%m-%d %H:%M:%S") "Etat              : En cours de changement";;
        2) echo $(date +"%Y-%m-%d %H:%M:%S") "Etat              : A changer";;
        *) echo $(date +"%Y-%m-%d %H:%M:%S") "Etat              : Inconnu";;
esac

if [ $Flags -ge 2 ]
then
        case "$ToDo" in
                "NOTHING")
                        echo $(date +"%Y-%m-%d %H:%M:%S") "Action               : Rien"
                ;;
                "ON")
                        sudo service motion start
                        /usr/sbin/ssmtp  XXX@gmail.com < /home/gpapig/automation/mail_template/email_motion_on
                        echo $(date +"%Y-%m-%d %H:%M:%S") "Action               : Activer la surveillance"
                        $(sudo rm -f /home/gpapig/automation/cam/flag/*)
                ;;
                "OFF")
                        sudo service motion stop
                        /usr/sbin/ssmtp  XXX@gmail.com < /home/gpapig/automation/mail_template/email_motion_off
                        echo $(date +"%Y-%m-%d %H:%M:%S") "Action               : Stopper la surveillance"
                        $(sudo rm -f /home/gpapig/automation/cam/flag/*)
                ;;
                *)
                        echo "Cas inconnu"
        esac
else
        echo $(date +"%Y-%m-%d %H:%M:%S") "Action               : Rien"
fi

echo "----------------------------------"

Avatar du membre
marco123
Raspinaute
Messages : 438
Enregistré le : sam. 30 janv. 2016 07:59
Localisation : Val d'Oise

Re: Projet : Video surveillance

Message par marco123 » sam. 5 nov. 2016 20:11

peut être intéressant ( pour toi ) de donner le nom de la personne qui est passée ?

2016-11-04 10:58:03 Présence : Il y a 1 équipement(s) en fonctionnement

Untel ( unetelle ) est rentré(e) ce qui serait parlant ( notamment si tu as comme moi une môme de 16/17 ans :mrgreen: )

ps: ton code est propre ... mais mal documenté donc, difficile a modifier / reprendre ;)

Avatar du membre
Gpapig
Messages : 75
Enregistré le : ven. 10 juin 2016 12:48

Re: Projet : Video surveillance

Message par Gpapig » lun. 7 nov. 2016 07:25

Merci de ton retour :) ca fait toujours plaisir.

Je vais commenter tout ça histoire que cela puisse servir ^^

Concernant ta remarque sur le Qui, c'est le cas dans la liste des équipements actifs/inactifs, en français Suisse, Natel veut dire téléphone portable/Smartphone, donc je sais qui est/était présent ^^

Avatar du membre
Gpapig
Messages : 75
Enregistré le : ven. 10 juin 2016 12:48

Re: Projet : Video surveillance

Message par Gpapig » mer. 23 nov. 2016 09:31

Bon je viens de franchir une nouvelle étape dans le projet, j'ai craqué pour kit Philips HUE.

Au delà de l'aspect déco/visuel qui est très sympa (possibilité de varier les couleurs, l'intensité etc), le gros plus de tout ça c'est que Phillips propose des API pour pouvoir faire mumuse avec les réglages des lampes.

Je suis donc entrain de coder en python (Il existe pas mal de librairie dans quasiment tout les langages, issues de l'API) deux usages.

Le premier est un simulateur de présence. Si il n'y a personne à la maison et qu'il fait nuit (pour le moment basé sur les horaires, j'attend mon light sensor) j'allume les lumières à plusieurs endroits de la maison.

Le 2ème étant d'allumer le plafonnier de l'entrée en rouge clignotant histoire de faire fuir les visiteurs importuns si il y a une détection de mouvement dans l'entrée.

Je tenterai de faire un petit mode d'emploi pour les curieux une fois que tout sera fini, mais pour le moment je "galère" à coder en python à travers le SSH sur mes PI, faudrait que je trouve un IDE (ou au moins un colorateur syntaxique avec auto-completion) qui fonctionne à travers SSH. J'ai tenté de configurer VIM mais je n'arrive pas à m'y faire :? .

Avatar du membre
Nico
Messages : 11
Enregistré le : sam. 25 juin 2016 23:07

Re: Projet : Video surveillance

Message par Nico » dim. 25 déc. 2016 12:51

Bonjour Gpapig !
Joli projet, ta vidéos surveillance ! J'espère que tu es parvenu à tout mettre au point maintenant !

Moi je suis intéressé par ta phrase :"A coté de ça il y a aura 2-3 leds pour connaitre l'état du système lorsque l'on passe devant. Une led servant pour savoir si le système est en mode automatique ou manuel et une led indiquant si il est actuellement en fonction ou non."

Est ce que tu pourrais me donner des indications pour effectuer ce genre de test et traduire le résultat de façon lumineuse ?...
Je cherche personnellement à allumer une LED quand ma Raspberry Pi est connectée à un réseau (d'une part) et allumer une autre LED quand elle diffuse son propre Wifi (c'est aussi un hotspot). Je pourrais ainsi vérifier rapidement que la RPi diffuse bien son ssid et est connectée au réseau local sans passer par ssh....
Je ne trouve nul part d'exemple de script permettant de vérifier une condition et d'allumer une LED (ou non) en fonction du résultat du test.... :?

C'est un peu hors sujet sur ce post mais ta phrase m'a interpellée....

Bonnes fêtes de fin d'année à tous !

Avatar du membre
Gpapig
Messages : 75
Enregistré le : ven. 10 juin 2016 12:48

Re: Projet : Video surveillance

Message par Gpapig » lun. 2 janv. 2017 08:49

Hello Nico,

Merci :)

Il te faut un petit bout de code du genre (désolé il est fait de tête il ne sera certainement pas valable, je n'ai pas mes PI d'accessible ce matin) :

Code : Tout sélectionner

#!/bin/bash

isWifiON=$(iwconfig wlan0 | grep -o MON_SSID | wc -l) #remplace MON_SSID par le nom de ton wifi, si tu veux tester la connexion filiaire, c'est ifconfig eth0)

if [ $isWifiON ]
then
echo "1" > /sys/class/gpio/gpioXX/value #ceci va mettre à 1 le gpio XX (a remplacer par celui correspondant à ta led)
else
echo "0" > /sys/class/gpio/gpioXX/value # Ici tu y mets 0
fi

Répondre

Retourner vers « Accès, alarme et vidéosurveillance »