Voir la v2 proposant au SUNLAB - Enregistrement, Authentification & Accès électronique.

Développement d'un système d'accès sécurisé du Sunlab

Bonjour,

Dans le cadre de l'Opex (opération de récupération de matériel donné par des entreprises partenaires) que nous avons réalisé le 16 Avril dernier, nous avons récupéré un aimant de blocage de porte (300 kg de résistance) que nous pourrions utiliser pour réaliser un système d'accès du Sunlab et arrêter d'avoir ce problème permanent avec les jeux de clefs à se passer les uns et les autres.

En particulier, le dispositif que j'imaginerais serait de piloter ce système d'aimantation par un relai 12V, qui lui même serait piloté par un arduino ou un dispositif équivalent.

Si la carte utilisée aurait une fonction Wifi (ex NodeCMU qui est décrite dans l'un des autres projets du Sunlab), on pourrait même imaginer que la commande de la carte soit faite à partir d'un accès Web… et donc d'être piloté directement à partir d'un SmartPhone.

D'où ensuite la possibilité de pouvoir recourrir à des ID et password individuel pour suivre qui accède au Sunlab. Voire même d'ouvrir à des personnes à distance lorsque ces personnes n'ont pas encore un accès officiel, mais que les personnes habilités sont en chemin ou encore trop loin…

Nota: sur Suggestion de Philippe B., nous essaierons de configurer notre système pour qu'il soit compatible avec le LDAP du Hatlab et que les utilisateurs n'aient pas besoin de gérer un ID et Password supplémentaire. Voir les détails plus loin…

Pour suivre ou participer à ce projet, contacter : systeme_d_acces_securise_pour_le_sunlab@hatlab.fr ou inscrivez vous à la mailing list du projet à l'aide de l'icone à droite.

Etape 1 - on se renseigne

Dans le carton, on a trouvé 4 feuilles d'explication que nous allons commencer à étudier.

02_magnet_doc_p01.jpg02_magnet_doc_p02.jpg02_magnet_doc_p03.jpg02_magnet_doc_p04.jpg

ou télécharger le PDF global.

Etape 2 - on réfléchit sur place

Je suis passé sur place pour voir de quoi il retourne.

L'aimant dispose bien d'un connecteur dont le pinout est tel que décrit dans la doc. (ie 0V / 12 V / NC - Com - NO).

03_magnet_pinout.jpg04_magnet_jumpers.jpg

En outre, on voit dans le fond de l'image le Jumper qu'il faut configurer pour travailler soit en 12 V (500 mA) ou en 24V (250 mA). ATTENTION : Il y a effectivement risque d'endommager l'aimant si il est configuré pour du 12V, mais alimenté en 24V (la résistance d'entrée étant 2x trop faible, il est vraisemblable que la bobine encaisserait 1 A. Et le dispositif consommerait 24 W au lieu des 6 prévus.

Électroniquement, nous pourrions nous contenter d'utiliser le 0 et le 12V. On laisse tomber les 3 autres connecteurs qui sont utilisés habituellement pour être connecté au digicode ou au système de sécurité incendie par exemple.

Mécaniquement, l'aimant pourrait se positionner directement sur le bâti de la porte d'entrée.

05_magnet_sur_porte_01.jpg05_magnet_sur_porte_02.jpg

Un possibilité pour fixer la contre-plaque, serait de s'appuyer sur le dispositif de fixation de la poignée de la porte. On voit sur la photo ci dessous les deux têtes de vis hexagonales sur lequel on pourrait venir faire la reprise.

05_magnet_sur_porte_03.jpg

Voila. Pour ce soir, on s'arrêtera là.

06_magnet.jpg

En attendant la carte NodeMCU... Réflexion autour de l'architecture

Décidément. Autant la carte Arduino Nano chinois est arrivée vite. Autant la carte NodeMCU et le relai 12V prennent du temps à arriver. L'occasion pour moi de réfléchir à l'architecture globale du dispositif.

Le schéma global est reporté figure ci dessous:

07_architecture_preliminaire.jpg

De base, l'ensemble sera piloté par un PC qui commandera la carte Arduino. Ce PC fera tourner un serveur Apache (permettant de gérer le serveur HTTP, donc de se connecter via un navigateur classique : Firefox, Google chrome, etc…), et une base de donnée Mysql où seront gérés les identifiants et les password des personnes habilitées à ouvrir la porte.

La carte Arduino pour sa part sera connectée d'un coté au PC pour recevoir ses instructions et de l'autre au relais qui ouvrira ou coupera la tension de 12V qui alimente(ra) l'aimant de la porte.

Afin de pouvoir accéder à l'application via internet, la Freebox sera configurée en serveur NAT et redirigera les requêtes HTTP vers le PC de contrôle de manière transparente pour l'utilisateur.

De manière alternative, si l'utilisateur se trouve sur place, il devrait être capable de se connecter au Wifi de la freebox et donc d'accéder au PC de contrôle et à l'application en direct. Nous fixerons de manière arbitraire l'adresse du PC de contrôle à 192.168.0.66 (mon année de naissance) et le port 78 (notre département).

Choix du PC de contrôle

Pour une application aussi basique qu'une ouverture de porte, il ne sera pas nécessaire de mobiliser un PC haut de gamme. Dans le stock des PC récupéré, j'ai trouvé un petit ACER Aspire One (model ZG5) que nous a donné Fabien (un membre qui habite le quartier de Porchefontaine - merci à lui).

L'ACER Aspire One - ZG5 dispose d'un processeur Intel Atom N270 cadendé à 1,6 Ghz (x2) ; d'une carte graphine Intel 945GME x86/MMX/SSE2 ; de 481,7 MiB de RAM, d'un disque interne de 7,3 Gb et de la liaison Wifi.

Je l'ai configuré avec un Ubuntu 14.04 LTS.

Je vais suivre les instructions qui sont reportées sur le site https://doc.ubuntu-fr.org/apache2.

De base, je tape :

sudo apt-get install apache2-bin

Comme j'ai eu de prime abord un erreur “Unable to locate package”, j'ai tapé préalablement :

sudo apt-get update

puis à nouveau :

sudo apt-get install apache2-bin

comme il me semblait ne pas avoir tous les fichiers (dont /etc/apache2/apache2.conf), j'ai tapé en outre :

sudo apt-get install apache2

A ce moment là, on peut lancer le serveur apache avec la commande :

sudo service apache2 start

L'ordinateur répond :

 * Starting web serveur apache2
 *

Si en outre, on ouvre Firefox et qu'on se connecte sur http://localhost, on obtient l'écran ci dessous qui confirme que le serveur est bien démarré :

08_apache_started.jpg

Pour le fun d'ailleurs, vous pouvez arrêter le serveur apache2 par la commande :

sudo service apache2 stop

ce qui va conduire à une erreur lors de l'essai de connexion avec Firefox.

Bien sur, après cet essai (pour rire), on relance le serveur apache:

sudo service apache2 start

Je ne savais pas si apache2 intègre ou non PHP. J'ai donc écrit un petit bout de code dans /var/www/html, par exemple : php.php.

<html>
  <head>
    <title>Test PHP</title>
  </head>
  <body>
    <?php echo '<B>Mon premier essai en PHP</B>';
    phpinfo();
    ?>
  </body>
</html>

Que j'ai essayé d'ouvrir. Bof. Pas très probant.

Il me faut donc installer PHP.

La première vidéo Youtube venue m'indique :

sudo apt-get install php5 libapache2-mod-php5

J'obtiens l'écran suivant - ce qui prouve que ca marche :

09_php_started.jpg

Nota : pour ceux qui sont observateurs, ils auront remarqué que l'adresse dans la barre de navigation n'est pas localhost, mais 192.168.1.41. Ceci provient bien sur que j'utilise un 2eme PC pour voir les résultats de mes différentes installations / configurations et ca marche, bien entendu, aussi bien. D'ailleurs, ca me facilite le renseignement du dokuwiki, puisque c'est aussi de ce deuxième PC que je documente mes avancées au fur et à mesure que je les fais.

Pour savoir qu'elle était l'adresse IP du petit ACER qui me sert de serveur. J'ai tapé dans un terminal la commande :

ifconfig

Il nous reste maintenant à installer la base de donnée qui gèrera les identités et les passwords.

Toujours selon la même video (https://www.youtube.com/watch?v=ioqa-ZT-WSg), la commande à taper est :

sudo apt-get install mysql-server php5-mysql

A un moment de l'installation, il m'est demandé de définir le password d'accès à la base de donnée.

Dans la même video, la personne continue les installations en ajoutant “phpmyadmin”. C'est vrai que c'est intéressant de se déplacer dans les champs des différentes tables que nous allons créer sans avoir à développer une interface graphique dédiée. C'est quelque chose que j'ai oublié initialement dans mon plan d'instal, mais qui va s'avérer bien utile.

Qu'à cela ne tienne, voici la commande à utiliser pour lancer l'instal correspondante :

sudo apt-get install phpmyadmin

A un moment de l'instal, il est demander de choisir entre le Webserver qui sera configuré pour faire tourner PhpMyAdmin. J'ai sélectionné l'option par défaut : apache2.

Un peu plus loin il me demande si je veux configurer phpmyadmin avec l'outil par défaut : YES.

Puis de redonner le password d'accès à la base mysql ; ainsi que d'en ajouter 1 à l'utilisation de phpmyadmin. (pour ne rien vous cacher, j'ai mis pour l'instant deux fois le même).

Toujours en suivant la même video, l'étape suivante consiste à ajouter, tout à la fin du fichier /etc/apache2/apache2.conf deux petites lignes indiquant :

# Include PHPMYADMIN
Include /etc/phpmyadmin/apache.conf

Puis de créer un lien entre /usr/share/phpmyadmin/ et /var/www/, via la commande:

sudo ln -s /usr/share/phpmyadmin/ /var/www/

Après, on arrête et on redémarre le serveur apache :

sudo service apache2 restart

Ce qui fait qu'on peut ensuite essayer de se connecter sur myphpadmin à partir de l'autre PC :

10_phpmyadmin_01_connect.jpg

Et ca marche !!!!

Nota : L'ID a utiliser pour entrer dans phpmyadmin est par défaut “root”. Le password est celui que nous avons défini plus haut.

On arrive alors sur l'écran d'accueil suivant :

10_phpmyadmin_02_accueil.jpg

Maintenant que tous les logiciels nécessaires semblent avoir été installé, nous allons créer les champs dont nous aurons besoin pour gérer les accès. Me semblent incontournable pour commencer :

  • Nom
  • Prenom
  • Email
  • Password
  • Telephone-portable

J'évite les accents pour éviter les problèmes. Et je pense que nous aurons tout le temps de rajouter d'autres champs ultérieurement si ceux ci s'avèrent nécessaires.

Je décide d'appeler ma base de données AccessSunlab. Je met son type de codage en Utf8_general_ci, pour être compatible avec la plupart des autres systèmes.

Je ne détaille pas ici dans le détail les 3 étapes clefs que j'ai du traverser, mais il s'est agit de :

  • créer une base dans la base de donnée AccessSunlab
  • créer un table Identite avec 7 colonnes
  • Renseignement de données dans la table (ie. “insertion de ligne”).
Champs créésQuelques entrées types
10_phpmyadmin_03_tableidentite_structure.jpg10_phpmyadmin_04_tableidentite_data.jpg

Pour y aller par étape, nous allons maintenant créer une page PHP qui puisse interroger la base AccessSunlab et récupérer le nom d'une personne (par exemple celle pour laquelle l'IdMembre vaudrait 1.

On va par exemple s'inspirer de l'exemple donné par http://www.phpdebutant.org/article66.php.

Je crée un fichier rq.php :

rq.php

<?php
  // On dit bonjour pour la  forme et le debug
  echo 'bonjour Guillaume</P>';
 
  // on se connecte a  MySQL
  $db = mysql_connect('localhost','root','sunlab78');
  echo 'On ouvre bien la base</P>'.$db;
 
  // on selectionne la base
  mysql_select_db('AccessSunlab',$db);
  echo 'On selectionne bien la base AccessSunlab</P>';
 
  // On cree la requete SQL
  $sql = 'SELECT IdMembre,Nom,Prenom FROM Identite';
  echo 'On prepare bien la requete <B>'.$sql.'</B></P>';
 
  // on renvoie la requete
  $req = mysql_query($sql) or  die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
  echo 'On recupere <B>'.$req.'</B> en retour</P>';
 
  // On fait une boucle qui va faire le tour pour chaque enregistrement
  echo '</P></P><B>Le contenu de la table est :</P>';
  while($data = mysql_fetch_assoc($req))
    {
    // on affiche les informations de l'enregistrement en cours
    echo '<font color="blue">'.$data['IdMembre'].'</b> '.$data['Nom'].' '.$data['Prenom'].'</font></P>';
    }
 
  // On ferme la connection a  Mysql
  mysql_close();
  echo '</B>On sort bien d ici proprement';
?>

Ce qui nous permet d'obtenir le retour suivant :

11_rq.php.jpg

et qui confirme que l'on arrive bien à accéder à la base de donnée et à y lire des informations.

Pour intégrer un formulaire, on va s'inspirer du tutoriel de Sylvie Vauthier.

Je crée le formulaire suivant, que je nomme form.php.

form.php

  <form name="inscription" method="post" action="saisie.php">
  <H1>Dévérouillage de l'accès du Sunlab</H1>
  Le <A HREF="http://mysunlab.org">Sunlab</A> est le Fablab qui couvre la communauté de commune de <A HREF="http://www.versaillesgrandparc.fr/index.php?id=181&tx_ttnews[tt_news]=1821&cHash=d435ed61f910bf42163d46c022cc5b1b">Versailles Grand Parc</A>.<br/>
  Il est géré par l'<A HREF="http://hatlab.fr">association Hatlab</A> et il est situé au 185 Avenue Leclerc à Viroflay.<BR/>
  Le Sunlab travaille en relation étroite avec le <A HREF="http://sqylab.org">Sqylab, le Fablab basé à La Verrriere</A>, juste en face de la Gare SNCF).</P>
  </P>
  Vous souhaitez accéder au <B>Sunlab</B> et dévérouiller la porte principale, merci de renseigner le formulaire ci dessous :<br/>
  Pseudo     : <input type="text" name="ID"/> <br/>
  Password : <input type="text" name="PWD"/><br/>
  <input type="submit" name="valider" value="OK"/>
  </form>

J'obtiens le résultat suivant :

12_form.php.jpg

Si je clique sur OK, j'obtiens bien sur le message d'erreur suivant : Saisie.php - file not found.

14_saisie.php_01_notfound.jpg

Il faut donc maintenant s'occuper du fichier saisie.php pour récupérer les données.

saisie.php

<html>
  <head><title>Accè au Sunlab</title></head>
  <body>
    <form name="inscription" method="post" action="saisie.php">
      <H1>Dévérouillage de l'accès du Sunlab</H1>
      <P>Le <A HREF="http://mysunlab.org">Sunlab</A> est le Fablab qui couvre la communauté de commune de <A HREF="http://www.versaillesgrandparc.fr/index.php?id=181&tx_ttnews[tt_news]=1821&cHash=d435ed61f910bf42163d46c022cc5b1b">Versailles Grand Parc</A>.<br/>
      Il est géré par l'<A HREF="http://hatlab.fr">association Hatlab</A> et il est situé au 185 Avenue Leclerc à Viroflay.<BR/>
      Le Sunlab travaille en relation étroite avec le <A HREF="http://sqylab.org">Sqylab, le Fablab basé à La Verrriere</A>, juste en face de la Gare SNCF).</P>
      <P>Vous souhaitez accéder au <B>Sunlab</B> et dévérouiller la porte principale, merci de renseigner le formulaire ci dessous :<br/></P>
      Pseudo   : <input type="text" name="ID"/> <br/>
      Password : <input type="text" name="PWD"/><br/>
      <input type="submit" name="valider" value="OK"/>
    </form>
    <?php
      if(isset($_POST['valider'])){
        $ID=$_POST['ID'];
        $PWD=$_POST['PWD'];
        echo('Données reçues par le formulaire : ID = '.$ID.' et PWD = '.$PWD);
        if ($ID=='Permanence') {
          echo('<BR/></P><FONT color="GREEN"><B>Access Autorisé</B></FONT>');
        } else {
          echo('<BR/></P><FONT color="RED"><B>Access Refusé</B></FONT>');
        }
      }
    ?>
  </body>
</html>

Ceci conduit aux trois cas suivant :

A la première connexion sur la page 192.168.1.41/saisie.php le formulaire vierge apparaît.

14_saisie.php_02.jpg

Lorsqu'on tape un ID qui n'est pas 'Permanence' (pour simuler un interrogation de la base de données) et qu'on tape OK, l'accès est alors refusé.

14_saisie.php_03_accessdenied.jpg

Si on tape 'Permanence' dans le champs ID (pour simuler un interrogation de la base de données) et qu'on tape OK, l'accès est alors accepté.

14_saisie.php_04_accessgranted.jpg

Préparation de l'Arduino pour lui permettre de couper le courant sur ordre via le RS232

Ici, il s'agira d'envoyer un trame prédéfinie sur la liaison RS232.

Dans un premier temps, nous allons envoyer 1 seul caractère (pour faciliter le debug). Puis nous complexifierons la chose dans un second temps en envoyant des trames de texte plus longue pour améliorer la sécurité.

Dans le premier exemple, nous allons allumer la LED 13 de l'Arduino Nano dès le cycle d'initialisation. Puis si le caractère souhaité est reçu (dans notre exemple un “O” = chr(79), pour “ON”), cette LED s'éteindra pour 10 secondes.

le code correspondant est reporté ci dessous :

serialRead.ino

/*
  Reading a serial ASCII-encoded string.
*/
 
// pins for the LEDs:
int LED = 13;
int incomingByte = 0;
int PWD = 79; // chr(79) = "O" pour ON
 
void setup() {
  // initialize serial:
  Serial.begin(9600);
  // make the pins outputs:
  pinMode(LED, OUTPUT);
  digitalWrite(LED,HIGH);
}
 
void loop() {
  // if there's any serial available, read it:
  if (Serial.available()> 0) {
    incomingByte = Serial.read();
 
    Serial.print("I received ");
    Serial.println(incomingByte,DEC);
 
    if (incomingByte == PWD) {
      digitalWrite(LED,LOW);
      Serial.println("               => Pin 13 desactivée");
      delay(10000);
      digitalWrite(LED,HIGH);
    }
  }
}

A l'allumage, on observe bien les deux LEDs allumées (POWER & BLINK=13).

En ouvrant le moniteur de liaison série de l'interface IDE Arduino, on peut envoyer quelques caractères. Si parmi eux, un “O” est présent, la LED=13 s'éteint.

15_nodemcu_led13onoffbyserialcharsend.jpg

Retour sur le petit ACER pour intégrer l'envoi des caractères via la liaison série.

serialWrite.php

<?php
  //envoi un O sur le port Serie et desactive la led n°13 pendant 10 secondes.
 
  $fd = fopen('/dev/ttyUSB0','a');
  fwrite($fd,'O',1);
  fclose($fd);
?>

On raboute les deux programmes et ca génère la désactivation de la pin 13 si le ID est bien “Permanence”.

sunlab.php

<html>
  <head></head>
  <body>
    <form name="inscription" method="post" action="sunlab.php">
      <H1>Dévérouillage de l'accès du Sunlab</H1>
      <P>Le <A HREF="http://mysunlab.org">Sunlab</A> est le Fablab qui couvre la communauté de commune de <A HREF="http://www.versaillesgrandparc.fr/index.php?id=181&tx_ttnews[tt_news]=1821&cHash=d435ed61f910bf42163d46c022cc5b1b">Versailles Grand Parc</A>.<br/>
      Il est géré par l'<A HREF="http://hatlab.fr">association Hatlab</A> et il est situé au 185 Avenue Leclerc à Viroflay.<BR/>
      Le Sunlab travaille en relation étroite avec le <A HREF="http://sqylab.org">Sqylab, le Fablab basé à La Verrriere</A>, juste en face de la Gare SNCF).</P>
      <P>Vous souhaitez accéder au <B>Sunlab</B> et dévérouiller la porte principale, merci de renseigner le formulaire ci dessous :<br/></P>
      Pseudo   : <input type="text" name="ID"/> <br/>
      Password : <input type="text" name="PWD"/><br/>
      <input type="submit" name="valider" value="OK"/>
    </form>
 
    <?php
      if(isset($_POST['valider'])){
        $ID=$_POST['ID'];
        $PWD=$_POST['PWD'];
        echo('Données reçues par le formulaire : ID = '.$ID.' et PWD = '.$PWD);
        if ($ID=='Permanence') {
          echo('<BR/></P><FONT color="GREEN"><B>Access Autorisé</B></FONT>');
          $fd = fopen('/dev/ttyUSB0','a');
          fwrite($fd,'O',1);
          fclose($fd);
        } else {
          echo('<BR/></P><FONT color="RED"><B>Access Refusé</B></FONT>');
        }
      }
    ?>
  </body>
</html>

On obtient bien le formulaire d'accès. Si on utilise le mauvais ID, l'accès est refusé. Si on utilise “Permanence” comme ID, l'accès est autorisé et la pin 13 se désactive.

16_php-nodemcu_01_accessdenied.jpg16_php-nodemcu_02_accessgranted.jpg

Considérations autour des droits d'écriture et de lecture sur /dev/ttyUSB0

Le développement réalisé jusqu'à présent fonctionne. Si on se connecte sur 192.168.1.41/sunlab.php, on arrive bien à désactiver la LED 13 si on utilise le bon ID (= “Permanence”).

Par contre, si le petit PC ACER doit être rebooté, on perd les droits d'écriture et de lecture du port /dev/ttyUSB0. D'autre part, les paramêtres du port série (ie 9600 baud) semble se ré-initialiser à 38 200 par défaut.

Une petite investigation s'impose : en ajoutant l'utilisateur (au sens Linux du terme) www-data au groupe dialout, plus besoin de l'opération de lui donner les droits et cela résiste à un reboot (voir ci-dessous).

Etat du système avant reboot

ls -al /dev/ttyUSB0
crwxrwxrwx 1 root dialout 188, 0 mai    8 11:17 /dev/ttyUSB0
stty -F /dev/ttyUSB0
speed 9600 baud; line = 0;
min = 1; time = 5;
ignbrk -brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexte, -echo -echoe -echok -echoctl -echoke

Etat du système si déconnexion - reconnexion du port USB

ls -al /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 mai    8 12:00 /dev/ttyUSB0
stty -F /dev/ttyUSB0
speed 9600 baud; line = 0;
min = 1; time = 5;
ignbrk -brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexte, -echo -echoe -echok -echoctl -echoke

Le script PHP n'est capable de désactiver la LED 13 que s'il a accès au port USB.

Pour récupérer les droits, je force :

sudo chmod 777 /dev/ttyUSB0

Peut-être qu'un chmod 777 est un petit peu fort. Je tente :

sudo chmod 664 /dev/ttyUSB0

Ca ne marche pas.

Quant à lui :

sudo chmod 666 /dev/ttyUSB0

fonctionne.

La bonne manière est de placer l'utilisateur courant (glh par exemple) dans le groupe dialout, puis de fermer la session en cours puis se relogguer :

sudo usermod -a -G dialout glh # ajoute l'utilisateur glh au groupe dialout
id # permet de vérifier après fermeture de session / redémarrage de session graphique que l'utilisateur est bien dans le groupe dialout

Etat du système si reboot

$ ls-al /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 mai    8 12:00 /dev/ttyUSB0
$ stty -F /dev/ttyUSB0
speed 9600 baud; line = 0;
-brkint -imaxbel

Donc, après un reboot, on retape :

$ sudo chmod 666 /dev/ttyUSB0
$ stty -F /dev/ttyUSB0 -icanon time 5 -echo

Mise en route du système complet

L'aimant devant être alimenté en 12V. On a récupéré un transfo dans le stock capable de délivrer du 12V, 1A. Puisque l'aimant consomme 0,5A sous 12V, cela devrait aller.

Entre l'Arduino et ce circuit 12V, nous allons placer un relais. (cf http://s.aliexpress.comRBNNne6N).

17_relais.jpg

Sur ce relais : - Du côté commande, il y a 3 pin que l'on connecte à l'Arduino. La première pin “VCC” se connecte au 5 V de l'Ardiuno. La seconde pin “GND” au Ground. La dernière pin “IN” sera connectée à la pin 13 de l'arduino. - Du coté Relais. On branche la masse sur le COM. Et le 12V sur le NO (normalement ouvert). Ainsi, l'aimant restera toujours actif, même si le système se figeait. Inversement, en cas de coupure de courant générale. La porte se dé-engagera automatiquement.

Après, l'ensemble ne pose aucune difficulté et on arrive effectivement à désactiver l'aimant à partir de l'intranet.

Il ne restera plus qu'à rendre les choses propres et à faire le montage mécanique

J'ai tout déposé ce soir au Sunlab.

19_magnetfullsystem.jpg

J'ai modifié ensuite la configuration de la Freebox pour permettre le transfert des requêtes de l'extérieur vers le PC ACER :

En pré-requis, nous avons besoin de récupérer le n°IP, mais surtout le n° IMAC du PC ACER. J'utilise la commande :

ifconfig

20_ifconfig.jpg

Ici, on note le n° IMAC = 00:22:68:be:8b:75.

Ensuite, je fixe le n°IP de l'ordinateur qui possède ce même n°IMAC à 192.168.0.66 via l'interface freebox (ie connection sur www.free.fr et id et password donné par Karin (notre présidente) ou Nicolas (votre Vice Président Versailles)). Pourquoi 66… vous vous souvenez c'est mon année de naissance. 8-)

21_config_dhcp.jpg

Puis on transfère toutes les requêtes arrivant sur la box sur le port 80 vers ce même ordinateur.

22_config_redirect.jpg

Enfin, on défini le DNS sur un nom arbitraire (ici : http://ronan.hd.free.fr en référence à notre trésorier…).

Et voilà, il suffit juste de tester...

23_s.php.jpg

Intégration Mécanique

Grâce à l'intervention et à la perceuse de FABFAB, l'installation du système sur la porte a pu être réalisée.

Il faudra mettre les fils au propre. Et renforcer un peu la tôle pliée que nous avons fabriqué en première intention. Mais le système fonctionne.

Interface du système avec le LDAP de hatlab.fr

Sur les conseils de Philippe B., nous allons tenter de raccorder le dispositif créé au LDAP du hatlab.

Selon quelques sites web référents (ex : lien Wikipedia ou Site Comment-Ca-Marche, il faut préalablement connaître :

  1. L'adresse du serveur
  2. Le port sur lequel le serveur fonctionne
  3. La racine de l'annuaire
  4. Le login de l'utilisateur (généralement root) ainsi que son mot de passe. (Il faudra que je valide si j'en ai vraiment besoin ??? Car l'idéal serait de pouvoir réaliser des requettes anonymes et que le système LDAP se limite à m'indiquer si le couple ID/Password que je lui fourni est cohérent).

Je me retourne donc vers Thomas… Et je continuerai la suite dès son retour…

Ici il s'agira de conserver la trace de la requête d'accès en inscrivant dans un fichier LOG : l'heure de l’événement, le Nom et Prénom du membre, le retour de validation de la requête par l'Arduino (accès autorisé ou refusé).

Création d'une page administrateur permettant de voir la liste des utilisateur avec leur accréditation; de voir les logs des 30 derniers accès à la porte. J'ai aussi ajouté un rang administrateur permettant de modifier certaines choses comme la suppression d'un utilisateur ou d'un log, de passer un utilisateur en bloqué ou ouvert et de passer d'autres utilisateur en administrateur. Seuls les administrateurs peuvent voir les boutons pour agir sur la table.

Lien vers la page : http://ronan.hd.free.fr/admin.php