Dring&Call

De Wiki d'activités IMA

Cahier des charges

Contexte

Objectifs du projet

Le projet a pour objectif de développer une sonnette connectée, autonome et intuitive d'utilisation, permettant à l'utilisateur d’interagir avec la personne se trouvant à sa porte. Ce dispositif, baptisé Dring&Call, communique alors avec l'utilisateur, même si celui-ci se situe loin de son domicile. Il peut ainsi répondre via un appel vocal et informer l'interlocuteur de sa non présence et de son heure de retour par exemple.

Description du projet

Le système comportera plusieures fonctionnalités principales :

  • Comptage du nombre de sonneries journalières et puis récapitulatif journalier par mail
  • Informations en temps réel via l'envoi de mail de la présence d'une personne à la porte
  • Appel vocal entre le dispositif et l'utilisateur

Choix techniques

  • Fabrication d'une boîte à la découpeuse laser du Fabricarium
  • Raspberry connectée à la borne Wifi de l'utilisateur
  • Haut parleur et microphone
  • Bouton poussoirs pour la sonnette
  • Arduino Nano pour convertir des données analogiques
  • Mail pour transmettre les informations
  • Serveur Asterisk et softphone PJSIP pour passer des appels

Etapes du projet

  • Connexion de la Raspberry au réseau local en wifi
  • Programmation de la fonctionnalité de comptage de sonnerie
  • Installation et configuration des fonctionnalités d'appel
  • Fabrication des différents boîtiers

Déroulement du travail

Séance 1

Brainstorming sur les différents sujets possibles

Choix du sujet

Choix techniques et mise en place du travail à effectuer

Acquisition du matériel (Raspberry, Clé WIPI, etc)

Connexion de la Raspberry à internet en utilisant un téléphone Android comme point d'accès

Séance 2

Programme de test pour gérer les GPIOs de la Raspberry

Lorsqu'on met une des GPIOs à l'état haut (en lui injectant une tension ici), on incrémente un compteur.

Écriture du script pour envoyer un mail lorsqu'une personne sonne

Nous utilisons pour cela un script shell. Le mail contient uniquement un titre et un texte, qui indique l'heure à laquelle la personne a sonné. Une adresse Gmail a été créée pour représenter la sonnette. Le destinataire est unique : c'est le possesseur de la sonnette. Nous avons également pris en compte le fait qu'une personne puisse appuyer plusieurs fois de suite sur la sonnette. Nous avons intégré ce script dans notre programme principal, dans lequel nous détectons l'activation du bouton de la sonnette.

Écriture du script pour le récapitulatif journalier

Nous décidons d'envoyer au destinataire un récapitulatif quotidien. Ce récapitulatif se fait également via un mail qui contient les heures auxquelles une personne a sonné (cela renseigne également le propriétaire sur le nombre de personnes qui sont venues chez lui en son absence). Le mail sera donc envoyé tous les jours, à 20h. Nous utilisons la aussi un script shell.

Séance 3

Tentative d'utilisation de Skype sur la Raspberry

Nous avons tenté d'installer Skype afin de passer des appels entre la Raspberry (qui représente la sonnette) et le téléphone du propriétaire. Malheureusement, il n'a pas été possible de faire cela. Nous avons donc décidé de nous tourner vers l'appel VoiP, grâce à Asterisk, à un softphone pour la sonnette et un téléphone pour le propriétaire. Il nous faut un softphone que l'on puisse commander en ligne de commande. Nous utilisons donc le PJSiP, qui intègre un tel softphone.

Installation d'Asterisk

Nous avons donc commencer par installer et configurer Asterisk. Nous avons déjà réalisé cette tâche dans le module Protocole réseaux avancés. Il a donc été assez facile de reproduire et d'adapter la configuration que nous avions utilisé dans ce module.

Séance 4

Installation de PJSiP et tests

Nous avons installé PJSiP. Nous avons créé un compte sur le téléphone (en utilisant l'application CSiPSimple) et sur le softphone. Nous sommes assez rapidement parvenus à passer un appel entre le softphone et le téléphone. La difficulté a été rencontrée au niveau de la mise en place du son au niveau de la Raspberry. Pour la sortie, nous utilisons une paire d'enceintes que l'on branche simplement grâce à la prise Jack que contient la Raspberry. Cela a été plus difficile pour l'entrée. En effet, nous n'avions pas de microphone USB. Or, la Raspberry n'intègre pas de convertisseur analogique-numérique, et il est donc difficile d'utiliser un microphone non USB.

En attendant de trouver une solution, nous avons tenté de passer un appel en ne mettant en place que la sortie audio : autrement dit, la personne qui vient de sonner pourra entendre le propriétaire mais ne pourra pas parler. Après beaucoup de tests, nous nous sommes rendus compte que PJSiP refuse d'activer la sortie audio tant qu'une entrée audio n'est pas détectée par le logiciel. Nous avons donc tenté d'utiliser un micro non USB, couplé à un Arduino Nano qui fait office de convertisseur analogique-numérique, et d'envoyer ces données converties à la Raspberry. Mais nous savions que cela serait difficile.

Séance 5

Utilisation de crontab

Nous avons modifié le script qui permet d'envoyer le récapitulatif quotidien. Nous utilisons désormais la crontab qui permet d'exécuter une commande de manière périodique. Cela a eu pour conséquence de simplifier le script.

Utilisation d'un Microphone USB

Pour résoudre le problème du micro, nous avons eu l'idée d'utiliser une webcam USB qui intègre un micro. Nous sommes parvenus à faire fonctionner ce micro. Grâce aux tests que propose PJSiP, nous pouvions dès lors enregistrer un son et le jouer. Cependant, nous avions toujours le même problème lors d'un appel réel : le micro n'était pas activé, et donc aucune sortie ou entrée audio n'était possible. Nous n'avons pas compris pourquoi l'appel ne fonctionnait pas alors que les programmes de tests du logiciel fonctionnaient parfaitement. Étant déjà à la 5ème séance, nous avons commencé à réfléchir à une solution de repli.

Solution de repli

Comme nous étions capables d'enregistrer un son, nous avons eu l'idée de mettre en place un répondeur. Lorsqu'une personne sonne, un message d'annonce se met en route pour lui dire qu'il peut laisser un message. Lorsque cette personne a fini d'enregistrer son message, celui-ci est envoyé au propriétaire par mail.

Parallèlement, nous nous sommes rendus compte que notre version de PJSiP n'était pas la plus récente, ce qui pouvait peut-être être la cause de notre problème.

Travail hors séance

Mise en place du répondeur

Nous avons donc programmé la partie du code qui permettra de mettre en place le répondeur. Nous sommes parvenus à intégrer le message vocale dans le mail envoyé au propriétaire.

Résolution du problème audio PJSiP

En parallèle, nous avons mis à jour notre version de PJSiP. Cela a permis de corriger le bug audio : l'appel était donc désormais possible. Puisque le répondeur a été mis en place dans le même temps, il serait intéressant d'intégrer les deux modes différents.

Intégration des deux fonctions

Nous avons donc intégrer la fonction "appel" et la fonction "envoi de mails" dans notre sonnette. Ainsi, si le propriétaire sait qu'il ne pourra pas répondre aux appels, il pourra au moins recevoir les mails qui lui indiqueront si une personne a sonné. Nous avons également ajouté une LED qui permet d'indiquer à la personne qui sonne qu'elle peut enregistrer son message.

Vous trouverez les codes sources en bas de cette page :

  • code source permettant de faire fonctionner la sonnette
  • les scripts permettant d'envoyer les mails et de faire le récapitulatif
  • le fichier de configuration de PJSip

Liste de matériels

Raspberry Pi 2 [03/01/2017], <br\> WiPi [03/01/2017], <br\> 2 Boutons poussoir [13/01/2017], <br\> Microphone [10/01/2017], <br\> Haut parleur [10/01/2017], <br\> Arduino Nano [10/01/2017]

Reférence

http://www.pjsip.org/pjsua.htm

POSTER

Dringandcall poster IoT.jpg

Codes sources

Fichier:Code raspi.zip