Genesis-blog

1-ha9xbf-0jzh_zdmsrgbnpq

Smart Mirror – Partie I : Préparations

Photo: Max Braun – My Bathroom Mirror is Smarter than yours

Pour sa 2ème  édition des journées de recherche et développement, l’équipe mobile de Genesis Groupe a décidé d’orienter ses recherches vers un nouveau concept intéressant : la réalisation d’un miroir connecté.

Le projet est né afin de répondre à une problématique nous ayant été poussée par un grand laboratoire dermatologique. Celui-ci ayant notamment pour objectif de guider l’utilisateur en lui proposant des rituels beauté et des produits adaptés à son type de peau.

L'équipe mobile de Genesis et le miroir connecté
Une partie de l’équipe mobile de Genesis avec le miroir connecté

Nous avons donc décidé de réaliser un miroir qui pourrait notamment reconnaitre l’utilisateur via un système de reconnaissance faciale et lui associer un type de peau. Ce dernier pourrait ensuite lancer, via commande vocale, son rituel beauté personnalisé (étape par étape, le miroir proposerait à l’utilisateur d’utiliser tel ou tel produits et prodiguerait des conseils sur leurs utilisations, notamment à l’aide de mini vidéos).

Afin de réaliser ce projet, nous avons dû trouver un sytème sur lequel nous baser. Suite à nos recherches, nous avons trouvé une plateforme intéressante, open source, permettant de développer son propre miroir connecté avec Node.js : MagicMirror : https://magicmirror.builders/

Cette plateforme est modulable : elle permet à n’importe qui de pouvoir enrichir les fonctionnalités existantes du miroir en développant des modules complémentaires.

Nous avons donc créé de nouveaux modules pour MagicMirror afin de réaliser nos objectifs.

Matériel et coûts

La première phase a été la réalisation physique du miroir.

Voici la liste des composants que nous avons utilisé avec les coûts approximatifs de chacun :

Smart mirror costs

Préparation aux développements

Mise en place des machines virtuelles

Lors des deux journées de recherche, notre équipe était composée de 8 développeurs. Il fallait donc trouver une solution pour que nous puissions travailler simultanément sur le Raspberry Pi du miroir. Pour cela, nous avons mis en place des machines virtuelles pour simuler l’utilisation du miroir sur nos propres machines.

Configuration de la machine virtuelle sous Debian

Nous avons choisi d’utiliser Raspbian comme système d’exploitation sur notre Raspberry Pi. 

Problème :  Ce système d’exploitation n’est pas conçu à ce jour pour être virtualisé. Heureusement pour nous, cet OS est un dérivé de Debian, qui lui est un système d’exploitation qui est virtualisable.

Voilà les procédures que nous avons suivies afin de mettre à disposition une machine virtuelle Debian pour l’ensemble de l’équipe :

  1. Installer Virtual Box sur chaque poste pour pouvoir lancer la machine virtuelle : https://www.virtualbox.org/
  2. Télécharger une image de Debian qui peut-être virtualisée depuis Virtual Box : https://www.debian.org/distrib/netinst
  3. Lancer l’image Debian depuis Virtual Box pour suivre les étapes de configuration initiales. N’oubliez pas de cocher installation du serveur SSH, celui-ci pourra s’avérer très utile par la suite. Retenez le mot de passe que vous allez configurer pour l’utilisateur root.

La machine virtuelle Debian est prête.

Notes : Pour chacune des étapes qui requiert l’utilisation du terminal de la machine Debian, nous vous recommandons de passer par SSH pour vous connecter à votre machine virtuelle via votre machine. Ainsi vous pourrez copier coller les commandes de cet article directement via le terminal de votre machine.

Connexion en SSH

Si vous savez déjà comment vous connecter en SSH à votre Debian, vous pouvez directement passez à la suite ici : Installer Node.js sur Debian 

Depuis la machine virtuelle Debian, ouvrir un terminal, passer en utilisateur root :

su

Puis taper le mot de passe que vous avez configuré lors de la configuration de la machine Debian. Observer l’adresse IP de votre Debian avec la commande suivante :

ifconfig
ipconfig

Si aucune adresse IP n’apparaît, il faut passer le type de connexion de la machine virtuelle en Bridge :

Machine > Settings > Network

Changer le type de connexion en Bridge, rebooter la machine virtuelle et répéter les étapes précédentes. Une fois l’adresse ip en main, il suffit de lancer un terminal depuis votre machine et de vous connecter en SSH via cette adresse ip avec cette commande :

ssh username@ip_machine
username // nom du compte d'utilisateur sur la Debian
ip_machine // adresse IP de la machine Debian

 

capture-decran-2017-02-14-a-11-52-34

installer node.js

Sur la machine Debian : 

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -


sudo apt-get install -y nodejs


sudo apt-get install -y build-essential
Cloner Magic Mirror

Cloner le dépôt .git de MagicMirror sur la Debian : 

git clone https://github.com/MichMich/MagicMirror

Versioning du projet depuis la machine virtuelle

Chez Genesis, nous avons mis en place un Gitlab local. Nous avons donc créé un nouveau dépôt sur ce Gitlab pour versionner notre projet.

Nous avons simplement versionné un sous dossier de modules à l’interieur du projet MagicMirror. Ainsi, nous avons pu travailler chacun de notre côté sur nos machines virtuelles et faire un simple pull sur le raspberry afin de récupérer le travail une fois mergé.

C’est ainsi que chacun a pu travailler en virtualisant le miroir sur sa propre machine et en déployant de temps en temps le travail réalisé sur le véritable miroir sans le monopoliser.

Lancement de MagicMirror

Avant de pouvoir lancer MagicMirror, il faut d’abord créer le fichier de configuration. Comme nous venons de cloner le Git de MagicMirror, un fichier sample est déjà présent à l’intérieur de notre projet. Il suffit de dupliquer ce fichier et de le configurer pour pouvoir lancer le programme.

Pour cela :

cd /path/to/MagicMirror/config

cp config.js.sample config.js

Pour information, ce fichier de configuration contient la liste des modules qui seront affichés sur notre miroir. Un module est un composant du miroir, comme l’heure digitale, la météo, ou les actualités. Nous parlerons de tout cela plus en détails dans la partie 2 de Smart Mirror.

Cet article traite seulement de la préparation du miroir, nous passons donc vite sur les composants de MagicMirror. Pour en savoir plus sur l’utilisation de MagicMirror, merci de vous reporter à la partie 2 de cette suite d’articles.

A partir d’ici, si tout a bien été installé et configuré, nous pouvons désormais simuler notre miroir connecté sur notre machine virtuelle.

Pour cela, via le terminal :

cd /path/to/MagicMirror

Si le projet n’a jamais été lancé, il faut d’abord installer les dépendances du projet Node.js :

npm install

Enfin pour lancer MagicMirror :

npm start

Attention : Si vous êtes en SSH, utilisez la commande suivante pour lancer MagicMirror :

DISPLAY=:0 nohup npm start

Le résultat sur une machine Debian :

MagicMirror on Debian
Les modules définis dans le fichier de configuration config.js s’affichent.

Editer et configurer des fichiers peut vite s’avérer peu confortable sous Debian, alors pourquoi ne pas utiliser directement les outils présents sur notre machine tel que notre IDE ou notre logiciel de versioning préférés ?  En effet beaucoup de logiciels ne sont pas disponibles sous Debian, par exemple, SourceTree (logiciel de version).

Pour cela, il est facile de mettre en place un dossier partagé entre la machine virtuelle et la machine Debian.

Configuration d’un dossier partagé

Etape 1 : Créer le dossier partagé depuis la machine host

Dans un premier temps, il faut créer un dossier sur la machine qui héberge, ce dossier sera partagé ensuite avec la machine virtuelle.

Ensuite dans Virtual Box, il faut maintenant définir le dossier que vous venez de créer, pour cela dans le menu de Virtual Box aller dans :

Devices > Shared Folders > Shared Folders Settings

Cliquer sur l’icône d’ajout de dossier pour ajouter un nouveau dossier partagé.

Folder path : Sélectionner le dossier créé

Folder name : Saisir le nom du dossier crée

Cocher Auto-mount et Make permanent, puis OK.

Etape 2 : Editer le fichier /etc/rc.local

Ce fichier lance un script à la fin du démarrage de la machine virtuelle, c’est ici que nous allons dire à notre machine virtuelle de monter à chaque démarrage notre dossier partagé pour éviter de le faire à la main à chaque fois.

Ouvrir le Terminal sur la machine virtuelle (dans Activités en haut à gauche, puis dans la barre de recherche, chercher « Terminal »).

nano /etc/rc.local

Ajouter la ligne suivante au fichier :

sudo mount –t voxsf -o uid=1000, gid=1000 name_shared_folder /path/to/the/shared/folder/name_shared_folder

Maintenant si tout est correct, le dossier sera monté à chaque démarrage de la machine virtuelle.

Rebooter la machine virtuelle pour que les effets soit immédiats.

Au nouveau lancement, cliquer sur activité en haut à gauche, dans la barre de recherche, recherchez « Fichiers ».

Votre dossier partagé devrait être visible à gauche dans le menu, il doit avoir pour nom sf_name_shared_folder :

get2

Celui-ci ne pointe pas encore sur Magic Mirror. Il est donc vide.

Pour information, le dossier monté sur la machine virtuelle se situe dans :

/media/sf_nom_du_dossier

Etape 3 : Lien symbolique de Magic Mirror vers votre dossier partagé

Enfin, pour voir le contenu du dossier de MagicMirror il faut définir un lien symbolique entre le dossier source de MagicMirror et le dossier partagé.

Ouvrir le Terminal sur la machine virtuelle, et créer le lien symbolique :

ln –s /media/sf_name_shared_folder  /path/to/MagicMirror

Le dossier partagé est désormais lié à Magic Mirror. Aller sur la machine qui héberge, puis initialiser un dépôt .git avec votre dépôt distant.

Maintenant nous pouvons directement développer sur nos machines sans nous préoccuper de la machine virtuelle (ou presque) !

Résultat final du miroir, avec les modules par défaut : 

mirror-finale

5
5

 Developer : Swift and Objective-C

http://www.anthonyroani.com

Laissez un commentaire