SUNLAB - Enregistrement, Authentification & Accès électronique : Différence entre versions

De HATLAB
 
(7 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 21 : Ligne 21 :
 
}}
 
}}
 
{{Materials
 
{{Materials
|Tools===== Liste des technologies ====
+
|Material=* Electro-aimants (de porte)
 
+
* Boitier plastique
  * Dév web: PHP / CSS / HTML / Javascript
+
* Connecteurs
  * Dév système: C
+
* Fils electrique
  * Hardware: Raspberry py, NFC reader
+
* Raspberry (équipé)
  * Base de données: MYSQL / LDAP
+
* Relais  2A (5/12v commande)
  * Système : Linux (debian), Apache2
+
|Tools=''' Liste des technologies '''
  * Gestion du code: Git
+
* Dév web: PHP / CSS / HTML / Javascript
 +
* Dév système: C
 +
* Hardware: Raspberry py, NFC reader
 +
* Base de données: MYSQL / LDAP
 +
* Système : Linux (debian), Apache2
 +
* Gestion du code: Git
 
}}
 
}}
 
{{Separator}}
 
{{Separator}}
Ligne 37 : Ligne 42 :
 
Lien du git: [[https://github.com/ThomasGsp/sunlab|https://github.com/ThomasGsp/sunlab]]
 
Lien du git: [[https://github.com/ThomasGsp/sunlab|https://github.com/ThomasGsp/sunlab]]
  
__Le code est divisé en quatre grande parties:__
+
'''Le code est divisé en quatre grande parties:'''
 
+
* Le "common", le code sert de base fonctionnelle aux trois autres.
  * Le "common", le code sert de base fonctionnelle aux trois autres.
+
* La partie "door", comprenant le code spécifique pour la porte.
  * La partie "door", comprenant le code spécifique pour la porte.
+
* La partie "nfc", pour le nfc.
  * La partie "nfc", pour le nfc.
+
* La partie "register" pour l'enregistrement de présence.
  * La partie "register" pour l'enregistrement de présence.
 
 
 
__Afin d'accélérer le développement, le code est basé sur plusieurs tierces parties:__
 
  
  * PHPMailer pour l'envoi des email.
+
'''Afin d'accélérer le développement, le code est basé sur plusieurs tierces parties:'''
  * Bootstrap pour le CSS/HTML.
+
* PHPMailer pour l'envoi des email.
  * PHP-Login pour la base php/js/mysql ( [[https://github.com/fethica/PHP-Login/tree/master/login|https://github.com/fethica/PHP-Login/tree/master/login]] ).
+
* Bootstrap pour le CSS/HTML.
 +
* PHP-Login pour la base php/js/mysql ( [[https://github.com/fethica/PHP-Login/tree/master/login|https://github.com/fethica/PHP-Login/tree/master/login]] ).
 
}}
 
}}
 
{{Tuto Step
 
{{Tuto Step
 
|Step_Title=Hardware
 
|Step_Title=Hardware
 
|Step_Content=* Un raspberry pi équipé (alimentation, carte SD, boitier).
 
|Step_Content=* Un raspberry pi équipé (alimentation, carte SD, boitier).
  * Un lecteur NFC compatible (type: [[https://www.amazon.fr/Lecteur-Proximit%C3%A9-125KHz-Contr%C3%B4le-S%C3%A9curit%C3%A9/dp/B00HSDOTTU/ref=sr_1_5?ie=UTF8&qid=1480970036&sr=8-5&keywords=nfc+reader|https://www.amazon.fr/Lecteur-Proximit%C3%A9-125KHz-Contr%C3%B4le-S%C3%A9curit%C3%A9/dp/B00HSDOTTU/ref=sr_1_5?ie=UTF8&qid=1480970036&sr=8-5&keywords=nfc+reader]]
+
* Un lecteur NFC compatible (type: [[https://www.amazon.fr/Lecteur-Proximit%C3%A9-125KHz-Contr%C3%B4le-S%C3%A9curit%C3%A9/dp/B00HSDOTTU/ref=sr_1_5?ie=UTF8&qid=1480970036&sr=8-5&keywords=nfc+reader|https://www.amazon.fr/Lecteur-Proximit%C3%A9-125KHz-Contr%C3%B4le-S%C3%A9curit%C3%A9/dp/B00HSDOTTU/ref=sr_1_5?ie=UTF8&qid=1480970036&sr=8-5&keywords=nfc+reader]]
  * Tablette tactile (optionnel)
+
* Tablette tactile (optionnel)
 
}}
 
}}
 
{{Tuto Step
 
{{Tuto Step
 
|Step_Title=Installation et configuration
 
|Step_Title=Installation et configuration
|Step_Content=* Préparer une installation propre de Raspbian sur un raspberry
+
|Step_Content=* Préparer une installation propre de Raspbian sur un Raspberry
  * Installer les suites de logiciels suivants avec les configurations associés
+
* Installer les suites de logiciels suivants avec les configurations associés
 
}}
 
}}
 
{{Tuto Step
 
{{Tuto Step
 
|Step_Title=Stack web: apache2, php, mysql
 
|Step_Title=Stack web: apache2, php, mysql
|Step_Content=<code>
+
|Step_Content='''Installation des paquets debian pour squeeze/Debian 8'''
Installation des paquets debian pour squeeze/Debian 8
+
  apt-get install apache2 mysql-server php5 libapache2-mod-php5 php-curl php5-ldap  php5-mysql
apt-get install apache2 mysql-server php5 libapache2-mod-php5 php-curl php5-ldap  php5-mysql
 
  
Installation des paquets debian pour stretch/Debian 9.1
+
'''Installation des paquets debian pour stretch/Debian 9.1'''
apt install mariadb-server apache2 php libapache2-mod-php php-ldap php-mysql
+
  apt install mariadb-server apache2 php libapache2-mod-php php-ldap php-mysql
  
# Configuration sécurité apache:
+
'''Configuration sécurité apache:'''
 
vi /etc/apache2/conf-enabled/security.conf
 
vi /etc/apache2/conf-enabled/security.conf
ServerTokens Prod
+
  ServerTokens Prod
ServerSignature Off
+
  ServerSignature Off
  
VHOST apache:
+
'''VHOST apache:'''
 
vi /etc/apache2/sites-available/sunlab.conf
 
vi /etc/apache2/sites-available/sunlab.conf
  
<VirtualHost *:80>
+
  <VirtualHost *:80>
 
         ServerName porte.sunlab.org
 
         ServerName porte.sunlab.org
 
         ServerAdmin webmaster@localhost
 
         ServerAdmin webmaster@localhost
Ligne 87 : Ligne 89 :
 
         ErrorLog ${APACHE_LOG_DIR}/porte_error.log
 
         ErrorLog ${APACHE_LOG_DIR}/porte_error.log
 
         CustomLog ${APACHE_LOG_DIR}/porte_access.log combined
 
         CustomLog ${APACHE_LOG_DIR}/porte_access.log combined
</VirtualHost>
+
  </VirtualHost>
  
<VirtualHost *:80>
+
  <VirtualHost *:80>
 
         ServerName presence.sunlab.org
 
         ServerName presence.sunlab.org
 
         ServerAdmin webmaster@localhost
 
         ServerAdmin webmaster@localhost
Ligne 98 : Ligne 100 :
 
         ErrorLog ${APACHE_LOG_DIR}/presence_error.log
 
         ErrorLog ${APACHE_LOG_DIR}/presence_error.log
 
         CustomLog ${APACHE_LOG_DIR}/presence_access.log combined
 
         CustomLog ${APACHE_LOG_DIR}/presence_access.log combined
</VirtualHost>
+
  </VirtualHost>
  
<VirtualHost *:80>
+
  <VirtualHost *:80>
 
         ServerName nfc.sunlab.org
 
         ServerName nfc.sunlab.org
 
         ServerAdmin webmaster@localhost
 
         ServerAdmin webmaster@localhost
Ligne 109 : Ligne 111 :
 
         ErrorLog ${APACHE_LOG_DIR}/nfc_error.log
 
         ErrorLog ${APACHE_LOG_DIR}/nfc_error.log
 
         CustomLog ${APACHE_LOG_DIR}/nfc_access.log combined
 
         CustomLog ${APACHE_LOG_DIR}/nfc_access.log combined
</VirtualHost>
+
  </VirtualHost>
 +
 
 +
'''Configuration MYSQL:'''
 +
Se connecter à mysql, créer une base avec un utilisateur associé:
 +
  CREATE DATABASE sunlab;
 +
  CREATE USER 'sunlab'@'localhost' IDENTIFIED BY  'definir_ici_un_mot_de_passe';
 +
  GRANT ALL PRIVILEGES ON sunlab.* TO 'sunlab'@'localhost';
 +
  FLUSH PRIVILEGES;
 +
 
 +
Le schéma de la base est disponible dans '''SUNLAB/DOC/DATABASE.sql'''
 +
 
 +
Dans le répertoire /var/www/common : copier le fichier dbconf.php.dist en dbconf.php et l'éditer pour correspondre à votre utilisateur et le password choisi ci-dessus.
 +
 
 +
Procéder de même dans le répertoire /var/www/sunlab/common : copier le fichier config.php.dist en config.php et l'éditer pour correspondre à votre configuration (notamment modifier la variable $mod_ldap à false si vous n'utilisez pas LDAP).
 +
}}
 +
{{Tuto Step
 +
|Step_Title=Restaurer la base à partir de fichiers physiques
 +
|Step_Content=Cette opération n'est nécessaire que lors de la récupération de fichiers existants (à la première installation, ce n'est pas nécessaire et vous pouvez sauter cette étape) :
 +
* https://stackoverflow.com/questions/484750/restoring-mysql-database-from-physical-files
 +
* https://biolinh.wordpress.com/2017/04/01/restoring-mysql-database-from-physical-files-debianubuntu/
 +
 
 +
  service mariadb stop
 +
  cd /var/lib/mysql
 +
  for i in ib* ; do mv $i ${i}.prev ; done
 +
 
 +
  mv sunlab sunlab_prev
 +
  tar zxvf /home/pi/download /var_lib_mysql_sunlab20180207.tar.gz
 +
 
 +
  chown -R mysql: ib* sunlab
 +
 
 +
  service mariadb start
 +
}}
 +
{{Tuto Step
 +
|Step_Title=Déploiement: git
 +
|Step_Content=''' Installation des paquets debian'''
 +
  apt-get install git
 +
 
 +
''' Cloner le projet dans votre home utilisateur'''
 +
  git clone https://github.com/ThomasGsp/sunlab.git
 +
 
 +
''' Copier le projet dans votre répertoire web'''
 +
  cp -R sunlab /var/www/
 +
  chown -R www-data: /var/www/sunlab
 +
}}
 +
{{Tuto Step
 +
|Step_Title=NFC
 +
|Step_Content=Pour utiliser le module nfc usb, il est nécessaire d'installer la librairie libnfc.
 +
 
 +
'''Installation des paquets debian'''
 +
  apt-get install dh-autoreconf  doxygen  libusb-dev libpcsclite-dev make pcscd
 +
 
 +
  apt install libnfc5 libnfc-bin # en stretch / Debian 9.3
 +
 
 +
''' Installation de la libnfc (utiliser la version 1.5 pour des raisons de compatibilités !)'''
 +
  git clone https://github.com/nfc-tools/libnfc.git
 +
  cd libnfc/
 +
  git checkout libnfc-1.7.1
 +
  autoreconf -vis
 +
  ./configure --enable-doc
 +
  make
 +
  make install
 +
 
 +
''' Blacklist du module originel'''
 +
  vi /etc/modprobe.d/blacklist-libnfc.conf
 +
  blacklist pn533
 +
  blacklist nfc
 +
 
 +
''' Désactivation à chaud '''
 +
  modprobe -r pn533 nfc
 +
 
 +
''' restart du process'''
 +
  service pcscd restart
 +
 
 +
  lsusb # doit afficher une ligne similaire à :
 +
  Bus 001 Device 005: ID 072f:2200  Advanced Card Systems, Ltd ACR122U
 +
 
 +
 
 +
nfc-list # en plaçant une carte reconnue par le nfc (navigo, carte bleue...) doit afficher quelque chose comme :
 +
  nfc-list uses libnfc 1.7.1
 +
  NFC device: ACS / ACR122U PICC Interface opened
 +
  1 ISO14443B-2 ST SRx passive target(s) found:
 +
  ISO/IEC 14443-2B ST SRx (106 kbps) target:
 +
                UID: 86  25  06  18  86  19  02  d0
 +
}}
 +
{{Tuto Step
 +
|Step_Title=Gestion IO: wiringPi
 +
|Step_Content='''Ce module permet de gérer les entrés/sorties GPIO du raspberry (en C) '''
 +
  git clone git://git.drogon.net/wiringPi
 +
  cd wiringPi
 +
  ./build
 +
}}
 +
{{Tuto Step
 +
|Step_Title=Code source spécifique
 +
|Step_Content=L'utilisation des commandes NFC et PIN GPIO du Raspberry-pi nécessitent des droits utilisateur élevés (root).
 +
Pour des raisons de sécurité, apache n'a pas des droits suffisamment élevés pour réaliser les opérations. Il existe plusieurs possibilités pour contourner le problème: Mettre en place un SUDO sur certaines commandes ou réaliser un Wrapper en C avec des droits associés corrects.
 +
 
 +
C'est cette seconde possibilité qui est mise en place.
 +
 
 +
Trois programmes sont concernés:
 +
  <web dir>/SUNLAB/nfc/bin/getid.c
 +
  <web dir>/SUNLAB/door/bin/waitforce.c
 +
  <web dir>/SUNLAB/door/bin/opendoor.c
 +
 
 +
 
 +
'''Configuration opendoor.c:'''
 +
<code a mettre>
 +
 
 +
''' Compiler le code source:'''
 +
  gcc -Wall -o opendoor opendoor.c -lwiringPi
 +
 
 +
''' L'attribuer avec le bon user:'''
 +
  chown root: opendoor
 +
 
 +
''' Lui donner les droits spécifique:'''
 +
  chmod ug+s opendoor
 +
 
 +
'''Configuration waitforce.c:'''
 +
<code a mettre>
 +
 
 +
'''Compiler le code source:'''
 +
  gcc -Wall -o waitforce waitforce.c -lwiringPi
 +
 
 +
''' L'attribuer avec le bon user:'''
 +
  chown root: waitforce
 +
 
 +
''' Lui donner les droits spécifique:'''
 +
  chmod ug+s waitforce
 +
 
 +
'''Configuration getid.c:'''
 +
<code a mettre>
 +
 
 +
 
 +
'''Compiler le code source:'''
 +
  gcc -Wall -o getid getid.c
 +
 
 +
'''L'attribuer avec le bon user: '''
 +
  chown root: getid
 +
 
 +
''' Lui donner les droits spécifique: '''
 +
  chmod ug+s getid
 +
 
 +
 
 +
Les programmes sont maintenant habilités à s'exécuter en root avec un utilisateur classique.
 +
 
 +
Le programme waitforce.c permettant l'ouverture forcé de la porte par le bouton est lancé automatiquement au démarrage du raspberry via une ligne ajouté au fichier “/etc/rc.local”.
 +
}}
 +
{{Tuto Step
 +
|Step_Title=Architecture physique
 +
|Step_Content='''Le système est composé de trois parties:''
 +
* Les électro-aimants au situés au niveau de la porte
 +
* La puissance électronique, le petit boîtier blanc
 +
* La commande électroniques, le raspberry
 +
 
 +
'''Les électro-aimants:'''
 +
Afin de limiter l'intensité au niveau du circuit électronique, ils ont été réglés sur 12v. Ils sont montés en dérivation et contrôlés par le boitier de puissance électronique.
  
#  Configuration MYSQL:
+
L'alimentation 12v est assuré par un bloc dédié, un relais est mis en coupure permettant d'ouvrir ou fermer le circuit.
# Se connecter à mysql, créer une base avec un utilisateur associé:
 
CREATE DATABASE sunlab;
 
CREATE USER 'sunlab'@'localhost' IDENTIFIED BY 'definir_ici_un_mot_de_passe';
 
GRANT ALL PRIVILEGES ON sunlab.* TO 'sunlab'@'localhost';
 
FLUSH PRIVILEGES;
 
  
# Le schéma de la base est disponible dans SUNLAB/DOC/DATABASE.sql
+
'''La puissance électronique:'''
</code>
 
  
Restaurer la base à partir de fichiers physiques :
+
Ce boîtier blanc permet de faire l'interconnexion entre les éléments d'actions (interrupteurs, électro-aimants) et le raspberry-pi.
  
  * https://stackoverflow.com/questions/484750/restoring-mysql-database-from-physical-files
+
Il possède plusieurs connecteurs externes:
  * https://biolinh.wordpress.com/2017/04/01/restoring-mysql-database-from-physical-files-debianubuntu/
+
* Connecteur series, pour l'interconnexion avec le raspberry
 +
* Connecteur alimentation (entrée), qui permet de connecter le bloc d'alimentation
 +
* Connecteur alimentation (sortie), qui permet la servitude des electro-aimants
 +
* Connecteur jack, pour l'entrée de la commande des boutons de force d'ouverture
 +
|Step_Picture_00=SUNLAB_-_Enregistrement__Authentification___Acc_s__lectronique_shemaporte.png
 
}}
 
}}
 
{{Notes}}
 
{{Notes}}
 
{{Tuto Status}}
 
{{Tuto Status}}

Version actuelle datée du 15 octobre 2019 à 22:06

Une Technique de avatarThomas dans les catégories Électronique. Dernière modification le 15/10/2019 par Baudouard.

SUNLAB - Enregistrement Authentification Acc s lectronique sunlab door.png

Introduction

Dans ce tutoriel nous allons voir deux sujets : - Service d'authentification de la porte du Sunlab. - Service d'enregistrement de présence au Sunlab.

Afin de suivre correctement ce tutoriel, il est nécessaire d'avoir des connaissances au moins basiques dans les domaines suivants: Linux, Programmation & électronique. Je ne vais pas rentrer dans les détails de certaines parties.

La majorité des opérations doivent être réalisés sur votre Raspberry-pi. Notamment la partie compilation des codes et programmes C qui ne fonctionneront pas s'ils sont compilés sous une architecture x68/x64 et déplacés sur ARM… Une partie des codes sources sont déjà disponibles compilés pour ARM dans le dépôt git.

Liste des matériaux

  • Electro-aimants (de porte)
  • Boitier plastique
  • Connecteurs
  • Fils electrique
  • Raspberry (équipé)
  • Relais 2A (5/12v commande)

Liste des outils

Liste des technologies

  • Dév web: PHP / CSS / HTML / Javascript
  • Dév système: C
  • Hardware: Raspberry py, NFC reader
  • Base de données: MYSQL / LDAP
  • Système : Linux (debian), Apache2
  • Gestion du code: Git

Etape n°1 - Fonctionnement et architecture du code

L'intégralité du code est géré sous GIT, vous pouvez contribuer directement en effectuant des demandes de merge.

Lien du git: [[1]]

Le code est divisé en quatre grande parties:

  • Le "common", le code sert de base fonctionnelle aux trois autres.
  • La partie "door", comprenant le code spécifique pour la porte.
  • La partie "nfc", pour le nfc.
  • La partie "register" pour l'enregistrement de présence.

Afin d'accélérer le développement, le code est basé sur plusieurs tierces parties:

  • PHPMailer pour l'envoi des email.
  • Bootstrap pour le CSS/HTML.
  • PHP-Login pour la base php/js/mysql ( [[2]] ).

Etape n°2 - Hardware

  • Un raspberry pi équipé (alimentation, carte SD, boitier).
  • Un lecteur NFC compatible (type: [[3]]
  • Tablette tactile (optionnel)

Etape n°3 - Installation et configuration

  • Préparer une installation propre de Raspbian sur un Raspberry
  • Installer les suites de logiciels suivants avec les configurations associés

Etape n°4 - Stack web: apache2, php, mysql

Installation des paquets debian pour squeeze/Debian 8

 apt-get install apache2 mysql-server php5 libapache2-mod-php5 php-curl php5-ldap  php5-mysql

Installation des paquets debian pour stretch/Debian 9.1

 apt install mariadb-server apache2 php libapache2-mod-php php-ldap php-mysql

Configuration sécurité apache: vi /etc/apache2/conf-enabled/security.conf

 ServerTokens Prod
 ServerSignature Off

VHOST apache: vi /etc/apache2/sites-available/sunlab.conf

 <VirtualHost *:80>
       ServerName porte.sunlab.org
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/sunlab/door
       <Directory /var/www/sunlab/door>
         Options -Indexes
       </Directory>
       ErrorLog ${APACHE_LOG_DIR}/porte_error.log
       CustomLog ${APACHE_LOG_DIR}/porte_access.log combined
 </VirtualHost>
 <VirtualHost *:80>
       ServerName presence.sunlab.org
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/sunlab/register
       <Directory /var/www/sunlab/register>
               Options -Indexes
       </Directory>
       ErrorLog ${APACHE_LOG_DIR}/presence_error.log
       CustomLog ${APACHE_LOG_DIR}/presence_access.log combined
 </VirtualHost>
 <VirtualHost *:80>
       ServerName nfc.sunlab.org
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/sunlab/nfc
       <Directory /var/www/sunlab/nfc>
               Options -Indexes
       </Directory>
       ErrorLog ${APACHE_LOG_DIR}/nfc_error.log
       CustomLog ${APACHE_LOG_DIR}/nfc_access.log combined
 </VirtualHost>

Configuration MYSQL: Se connecter à mysql, créer une base avec un utilisateur associé:

 CREATE DATABASE sunlab;
 CREATE USER 'sunlab'@'localhost' IDENTIFIED BY   'definir_ici_un_mot_de_passe';
 GRANT ALL PRIVILEGES ON sunlab.* TO 'sunlab'@'localhost';
 FLUSH PRIVILEGES;

Le schéma de la base est disponible dans SUNLAB/DOC/DATABASE.sql

Dans le répertoire /var/www/common : copier le fichier dbconf.php.dist en dbconf.php et l'éditer pour correspondre à votre utilisateur et le password choisi ci-dessus.

Procéder de même dans le répertoire /var/www/sunlab/common : copier le fichier config.php.dist en config.php et l'éditer pour correspondre à votre configuration (notamment modifier la variable $mod_ldap à false si vous n'utilisez pas LDAP).

Etape n°5 - Restaurer la base à partir de fichiers physiques

Cette opération n'est nécessaire que lors de la récupération de fichiers existants (à la première installation, ce n'est pas nécessaire et vous pouvez sauter cette étape) :

 service mariadb stop
 cd /var/lib/mysql
 for i in ib* ; do mv $i ${i}.prev ; done
 mv sunlab sunlab_prev
 tar zxvf /home/pi/download /var_lib_mysql_sunlab20180207.tar.gz
 chown -R mysql: ib* sunlab
 service mariadb start

Etape n°6 - Déploiement: git

Installation des paquets debian

 apt-get install git

Cloner le projet dans votre home utilisateur

 git clone https://github.com/ThomasGsp/sunlab.git

Copier le projet dans votre répertoire web

 cp -R sunlab /var/www/
 chown -R www-data: /var/www/sunlab

Etape n°7 - NFC

Pour utiliser le module nfc usb, il est nécessaire d'installer la librairie libnfc.

Installation des paquets debian

 apt-get install dh-autoreconf  doxygen  libusb-dev libpcsclite-dev make pcscd
 apt install libnfc5 libnfc-bin # en stretch / Debian 9.3

Installation de la libnfc (utiliser la version 1.5 pour des raisons de compatibilités !)

 git clone https://github.com/nfc-tools/libnfc.git
 cd libnfc/
 git checkout libnfc-1.7.1
 autoreconf -vis
 ./configure --enable-doc
 make
 make install

Blacklist du module originel

 vi /etc/modprobe.d/blacklist-libnfc.conf
 blacklist pn533
 blacklist nfc

Désactivation à chaud

 modprobe -r pn533 nfc

restart du process

 service pcscd restart
 lsusb # doit afficher une ligne similaire à :
 Bus 001 Device 005: ID 072f:2200   Advanced Card Systems, Ltd ACR122U


nfc-list # en plaçant une carte reconnue par le nfc (navigo, carte bleue...) doit afficher quelque chose comme :
 nfc-list uses libnfc 1.7.1
 NFC device: ACS / ACR122U PICC Interface opened
 1 ISO14443B-2 ST SRx passive target(s) found:
 ISO/IEC 14443-2B ST SRx (106 kbps) target:
               UID: 86  25  06  18  86  19  02  d0

Etape n°8 - Gestion IO: wiringPi

Ce module permet de gérer les entrés/sorties GPIO du raspberry (en C)

 git clone git://git.drogon.net/wiringPi
 cd wiringPi
 ./build

Etape n°9 - Code source spécifique

L'utilisation des commandes NFC et PIN GPIO du Raspberry-pi nécessitent des droits utilisateur élevés (root). Pour des raisons de sécurité, apache n'a pas des droits suffisamment élevés pour réaliser les opérations. Il existe plusieurs possibilités pour contourner le problème: Mettre en place un SUDO sur certaines commandes ou réaliser un Wrapper en C avec des droits associés corrects.

C'est cette seconde possibilité qui est mise en place.

Trois programmes sont concernés:

 <web dir>/SUNLAB/nfc/bin/getid.c
 <web dir>/SUNLAB/door/bin/waitforce.c
 <web dir>/SUNLAB/door/bin/opendoor.c


Configuration opendoor.c:

Compiler le code source:

 gcc -Wall -o opendoor opendoor.c -lwiringPi

L'attribuer avec le bon user:

 chown root: opendoor

Lui donner les droits spécifique:

 chmod ug+s opendoor

Configuration waitforce.c: <code a mettre>

Compiler le code source:

 gcc -Wall -o waitforce waitforce.c -lwiringPi

L'attribuer avec le bon user:

 chown root: waitforce

Lui donner les droits spécifique:

 chmod ug+s waitforce

Configuration getid.c: <code a mettre>


Compiler le code source:

 gcc -Wall -o getid getid.c

L'attribuer avec le bon user:

 chown root: getid

Lui donner les droits spécifique:

 chmod ug+s getid


Les programmes sont maintenant habilités à s'exécuter en root avec un utilisateur classique.

Le programme waitforce.c permettant l'ouverture forcé de la porte par le bouton est lancé automatiquement au démarrage du raspberry via une ligne ajouté au fichier “/etc/rc.local”. </div> </div>

Etape n°10 - Architecture physique

'Le système est composé de trois parties:

  • Les électro-aimants au situés au niveau de la porte
  • La puissance électronique, le petit boîtier blanc
  • La commande électroniques, le raspberry

Les électro-aimants: Afin de limiter l'intensité au niveau du circuit électronique, ils ont été réglés sur 12v. Ils sont montés en dérivation et contrôlés par le boitier de puissance électronique.

L'alimentation 12v est assuré par un bloc dédié, un relais est mis en coupure permettant d'ouvrir ou fermer le circuit.

La puissance électronique:

Ce boîtier blanc permet de faire l'interconnexion entre les éléments d'actions (interrupteurs, électro-aimants) et le raspberry-pi.

Il possède plusieurs connecteurs externes:

  • Connecteur series, pour l'interconnexion avec le raspberry
  • Connecteur alimentation (entrée), qui permet de connecter le bloc d'alimentation
  • Connecteur alimentation (sortie), qui permet la servitude des electro-aimants
  • Connecteur jack, pour l'entrée de la commande des boutons de force d'ouverture

Notes et références