Vous êtes sur la page 1sur 50

Projet de services

réseaux
Mise en place de services de bus et de notification des heures de prière
basés sur les SMS.

Réalisé par :

- Aminata WILLANE
- Salomon DAHOUN
- Régis Donald DAMOUÉ
- Wilfried OUÉDRAOGO

Enseignant : Dr. James T. KOUAWA


Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Table des matières

Liste des abréviations ............................................................................................................... 4

Liste des figures ........................................................................................................................ 5

Liste des tableaux ..................................................................................................................... 6

Introduction .............................................................................................................................. 7

1. Généralités ........................................................................................................................ 8

1.1. Modèle client/serveur ................................................................................................ 8

1.2. Système Linux (Philosophie de l’open source) ........................................................ 9

1.3. Réseau GSM (Fonctionnement global du sms) ..................................................... 10

1.4. Service PUSH et service PULL ............................................................................... 10

2. Analyse des besoins du projet ....................................................................................... 12

2.1. Identification des entités ......................................................................................... 12

2.1.1. Langage de programmation ............................................................................ 12

2.1.2. Modem GSM ..................................................................................................... 13

2.1.3. Carte SIM .......................................................................................................... 13

2.1.4. Passerelle SMS .................................................................................................. 13

2.1.5. Base de données ................................................................................................ 14

2.1.6. Serveur Web ..................................................................................................... 18

2.2. Proposition d’une architecture physique .............................................................. 18

3. Implémentation ............................................................................................................... 21

3.1. Installation de LAMP .............................................................................................. 21

3.2. Création d’un utilisateur MySQL .......................................................................... 22

3.3. Installation de phpMyAdmin ................................................................................. 23

3.4. Création de la base de données nécessaire au service de bus .............................. 24

3.5. Création de la base de données nécessaire au service de prière .......................... 25

3.6. Installation de Gammu ............................................................................................ 26

2
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

3.7. Configuration de Gammu ....................................................................................... 26

3.8. Installation de Gammu-smsd .................................................................................. 29

3.9. Configuration de Gammu-smsd ............................................................................. 29

3.10. Mise en place du script d’envoi des SMS ........................................................... 32

3.11. Mise en place du script de souscription aux services ........................................ 33

3.12. Automatisation des envois de SMS ..................................................................... 35

Conclusion ............................................................................................................................... 36

Webographie ........................................................................................................................... 37

Annexes ................................................................................................................................... 39

Fichier de configuration gammurc ................................................................................... 39

Fichier de configuration gammu-smsdrc ......................................................................... 39

Script d’envoi de SMS pour le service de bus .................................................................. 39

Script d’envoi de SMS pour le service de prière ............................................................. 41

Script Shell de réception de SMS ...................................................................................... 43

Script de réception de SMS ............................................................................................... 43

3
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Liste des abréviations

AT&T American Telephone & Telegraph


CGI Common Gateway Interface
GNU GNU is Not UNIX
HTTP HyperText Transfer Protocol
HTTP HyperText Transfer Protocol
LAMP Linux Apache MySQL PHP
MCC Mobile Country Code
MCD Modèle Conceptuel des Données
MMS Multimedia Message Service
MNC Mobile Network Code
MSIN Mobile Subscriber Identification Number
PHP Hypertext Preprocessor
SAPI Server Application Programming Interface
SIM Subscriber Identity Module
SMS Short Message Service
SMSC SMS Center
SQL Structured Query Language
UML Unified Modeling Language
URL Uniform Resource Locator

4
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Liste des figures


Figure 1. Exemple d’architecture client/serveur. ....................................................................... 8
Figure 2. Logo de GNU/Linux. .................................................................................................. 9
Figure 3. Fonctionnement PHP. ............................................................................................... 13
Figure 4. Modèle Conceptuel des Données de la base de données utilisateurs-service-sms. .. 15
Figure 5. Modèle Conceptuel des Données de la base de données bus-service-sms. .............. 16
Figure 6. Modèle Conceptuel des Données de la base de données heures-de-prieres-service-
sms. ........................................................................................................................................... 18
Figure 7. Diagramme de cas d’utilisation (UML) du système. ................................................ 19
Figure 8. Architecture physique des services déployés. ........................................................... 20
Figure 9. Connexion en tant que root. ...................................................................................... 21
Figure 10. Installation de LAMP .............................................................................................. 22
Figure 11. Connexion à MySQL en tant que root. ................................................................... 23
Figure 12. Création d’un utilisateur sous MySQL. .................................................................. 23
Figure 13. Installation de phpMyAdmin : saisie du mot de passe. .......................................... 24
Figure 14. Page de connexion de phpMyAdmin. ..................................................................... 24
Figure 15. Création de la base de données bus-service-sms. ................................................... 25
Figure 16. Aperçu des tables de bus-service-sms. ................................................................... 25
Figure 17. Création de la base de données heures-de-priere-service-sms. ............................... 25
Figure 18. Aperçu des tables de heures-de-priere-service-sms. ............................................... 25
Figure 19. Installation de Gammu. ........................................................................................... 26
Figure 20. Génération automatique de la configuration. .......................................................... 27
Figure 21. Contenu du fichier /etc/gammurc. .......................................................................... 27
Figure 22. Informations du modem GSM. ............................................................................... 28
Figure 23. Envoi d’un SMS...................................................................................................... 28
Figure 24. Réception sur téléphone portable du SMS envoyé via Gammu. ............................ 28
Figure 25. Installation de Gammu-smsd. ................................................................................. 29
Figure 26. Configuration de Gammu-smsd. ............................................................................. 30
Figure 27. Importation du script mysql.sql.gz. ........................................................................ 31
Figure 28. Tables générées par le script mysql.sql.gz. ............................................................. 31
Figure 29. Redémarrage de gammu-smsd. ............................................................................... 31
Figure 30. Envoi d’un SMS à Gammu. .................................................................................... 32
Figure 31. Réception du SMS envoyé depuis le téléphone portable. ....................................... 32

5
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Figure 32. Extrait du script d’envoi des SMS pour le service de bus. ..................................... 33
Figure 33. Extrait du script de réception des SMS de souscription. ........................................ 33
Figure 34. Ligne à rajouter au fichier gammu-smsdrc. ............................................................ 34
Figure 35. Contenu du script Shell reception.sh. ..................................................................... 34
Figure 36. Aperçu du fichier de configuration de Cron. .......................................................... 35

Liste des tableaux


Tableau 1. Présentation des entités........................................................................................... 12
Tableau 2. Dictionnaire des données de la base de données utilisateurs-service-sms. ............ 14
Tableau 3. Dictionnaire des données de la base de données bus-service-sms. ........................ 15
Tableau 4. Dictionnaire des données de la base de données heures-de-prieres-service-sms. .. 16

6
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Introduction

Créativité, rigueur, communication dans le travail d’équipe, curiosité, prise de risques, telles
sont les qualités qui définissent les futurs ingénieurs télécoms que nous sommes.

Notre vocation première est d’analyser les besoins des utilisateurs afin de déployer des services
innovants. Dans le cadre de notre projet de déploiement de services PUSH, nous avons choisi
de développer un service de notification d’heure de passage de bus et un service de notification
sur les heures de prière.

Le service de bus, grâce à Gammu permet à ses utilisateurs de recevoir des messages PUSH
périodiques leur indiquant :

- Le numéro du bus à proximité à partir de leur arrêt de bus habituel


- Le temps avant son arrivé ;
- Le nombre de personnes dans le bus ;
- Les éventuelles pannes du bus.

Quant au service de prière, ses utilisateurs seront périodiquement notifiés des heures de prière
de la religion islamique durant toute la journée.

Les aspects techniques seront traités dans la suite du présent document.

7
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

1. Généralités

1.1. Modèle client/serveur

L'environnement client/serveur désigne un mode de communication à travers un réseau entre


plusieurs programmes, dans lequel l’un qui est qualifié de client envoi des requêtes ce qui
correspond à une demande de service et l’autre ou les autres qui sont qualifiés de serveurs
attendent les requêtes des clients et répondent à la demande. Le client désigne un ordinateur ou
une machine virtuelle sur lequel est exécuté un logiciel client, et le serveur, un ordinateur ou
une machine virtuelle sur lequel est exécuté le logiciel serveur. Les serveurs sont des
ordinateurs généralement dotés de capacités supérieures à celles des ordinateurs personnels en
ce qui concerne la puissance de calcul, les entrées-sorties et les connexions réseaux. Les clients
sont souvent des ordinateurs personnels ou des appareils individuels (téléphone, tablette). Un
serveur peut répondre aux requêtes d'un grand nombre de clients. Il existe une grande variété
de logiciels serveurs et de logiciels clients en fonction des besoins à servir : un serveur Web
publie des pages Web demandées par des navigateurs Web ; un serveur de messagerie
électronique envoie du courriel à des clients de messagerie ; un serveur de fichiers permet de
partager des fichiers sur un réseau ; un serveur de base de données permet de récupérer des
données stockées dans une base de données, etc.

Figure 1. Exemple d’architecture client/serveur.

8
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

1.2. Système Linux (Philosophie de l’open source)

Linux est un système d'exploitation qui est comme Windows ou MacOs X. Il permet de travailler
comme on le ferait sous Windows. Mais il fonctionne différemment. Certains voient toujours
Linux comme un système plein de commandes qui sont compliquées. Cela n'est plus vrai. Linux
possède désormais un système graphique agréable, confortable et simple à utiliser. Nous avons
l'habitude de dire que Linux est un système d'exploitation, en réalité, Linux, c'est uniquement le
noyau (cœur) du système d'exploitation GNU/Linux. GNU est un projet qui a apporté des tas
d'utilitaires au noyau Linux, tel que le fameux compilateur gcc, et des milliers d'utilitaires
comme tar, tail, man, bash, etc. Ces utilitaires GNU, associés au noyau Linux, constituent le
système d'exploitation GNU/Linux. Linux est donc un noyau, GNU est un ensemble de
programmes utilitaires et GNU/Linux est le système d'exploitation. Le succès de Linux
s’explique par ses qualités techniques et l’essor d’un courant de pensée issu des mouvements
qui revendiquent la liberté individuelle en réaction aux contraintes dictées par les logiciels
propriétaires. Le concept de l’open source a vu le jour comme bien d’autres concepts avec
l’avènement de Linux. Il tire son existence dans le besoin de préserver la liberté des utilisateurs
sur le net. Un logiciel Open Source est un programme informatique dont le code source est
distribué sous une licence permettant à quiconque de lire, modifier ou redistribuer ce logiciel.
Presque tout le monde se tourne vers les programmes open source du fait qu’ils répondent d’une
meilleure sécurité, d’une meilleure qualité, de l'accès au support et la possibilité de
personnaliser les logiciels.

Figure 2. Logo de GNU/Linux.

9
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

1.3. Réseau GSM (Fonctionnement global du sms)

Global System for Mobile Communications est une norme numérique de seconde génération
pour la téléphonie mobile. La norme GSM autorise un débit maximal de 9,6 kbps, ce qui permet
de transmettre la voix ainsi que des données numériques de faible volume, par exemple des
messages textes SMS (Short Message Service) ou des messages multimédias MMS
(Multimedia Message Service). Le service de messages courts offert par le réseau GSM permet
à un utilisateur de composer un message textuel d'au plus 160 caractères (codés à l'aide d'ASCII
7 bits sur 140 octets) à partir de son terminal mobile et de l'envoyer à un destinataire possédant
également un téléphone radio-mobile GSM. Les messages courts sont plus couramment
désignés par textos ou SMS (par abus de langage). Ces messages émis et reçus sont véhiculés
par le réseau de signalisation sémaphore n°7 (SS7). Ils sont soit transmis directement au
terminal destinataire du message si celui-ci est allumé ou soit stockés dans le serveur de
message courts SMSC (SMS Center) par lequel ils transitent. Les messages courts ne circulent
pas dans les mêmes canaux logiques que la voix ou les données si bien qu'il est possible pour
un utilisateur en communication téléphonique (avec un autre correspondant) de recevoir des
messages courts simultanément. Le service SMS nécessite la mise en place d'un ou plusieurs
serveurs spécifiques dans le réseau. Le serveur de messages courts (SMSC) assure le stockage
des SMS (dans des bases de données), la distribution des SMS aux terminaux mobiles
destinataires (quand ceux-ci se sont manifestés dans le réseau GSM auquel ils appartiennent) et
le traitement des dates de validité des SMS.

1.4. Service PUSH et service PULL

PUSH et PULL sont des termes de stratégie de marketing pour attirer des consommateurs ou
clients. Leur objectif commun est d’attirer de la clientèle mais la technique utilisée est
différente.

 PUSH consiste à pousser un produit vers un consommateur sans que le consommateur


n’en ait exprimé un besoin quelconque. Un message publicitaire est envoyé de façon
proactive au consommateur par des méthodes qui sont souvent directes et concrètes. Par
exemple nous pouvons avoir comme exemple un service PUSH ciblé qui enverra

10
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

automatiquement des messages à des consommateurs pour leur donner la météo, ou pour
ceux désirant connaitre l’actualité sur le coronavirus dans leur pays.

 PULL consiste à tirer le client vers le produit. Cette stratégie repose sur la
communication publicitaire via les médias de masse (Radio, Télévision, site internet) et
sur les campagnes de promotions. Sur ces actions publicitaires, cette stratégie ravive un
besoin chez le consommateur qui viendra de son plein gré acheter le produit. Comme
exemple nous pouvons prendre le cas de L’ESMT, pour faire la promotion de la rentrée
prochaine de son cycle ingénieur de conception décide de mettre des panneaux
publicitaires dans la ville de Dakar et aussi d’en faire la publicité à la radio ainsi espérant
attirer des personnes désireuses de s’inscrire.

11
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

2. Analyse des besoins du projet

2.1. Identification des entités

Tableau 1. Présentation des entités

Pour programmer un code qui, pour tout


utilisateur abonné à un service va permettre
PHP ou C ou Python
d’envoyer régulièrement périodiquement des
SMS via Gammu/Kannel/Gnokii
Passerelle SMS pour récupérer le texte
Gammu/Kannel/Gnokii/SMStools/Gsm-utils envoyé par le code et envoyer au numéro de
téléphone du destinataire
Clé USB avec carte SIM de connexion
Modem GSM
internet
SGBD pour gérer la base de données des
MySQL/Prostgresql/MongoDB
services à implémenter

2.1.1. Langage de programmation

Pour la mise en œuvre du projet nous avons opté pour le langage PHP.

PHP est un langage de script généralement utilisé pour le développement Web pour créer du
contenu de pages web dynamiques. Le code PHP est traité sur un serveur web par un
interpréteur PHP mis en œuvre sous la forme d'un module, d'un démon ou d'un exécutable CGI
(Common Gateway Interface). Le résultat du code PHP interprété et exécuté, peut être de
n'importe quel type de données.

PHP a été largement porté et peut être déployé gratuitement sur la plupart des serveurs web sur
presque tous les systèmes d'exploitation et plates-formes.

PHP dispose d'une interface de module directe appelée SAPI (Server Application Programming
Interface), qui est prise en charge par de nombreux serveurs web, dont Apache HTTP.

12
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Figure 3. Fonctionnement PHP.

2.1.2. Modem GSM

Un modem GSM est un périphérique matériel qui utilise la technologie de téléphonie mobile
GSM pour fournir une liaison de données à un réseau GSM.

Certaine clé de connexion internet en vente sur le marché par les équipementiers ou operateurs
téléphonique ont la fonction du modem GSM. C’est le cas du modem GSM utilisé dans ce projet
qui est fabriqué par l’équipementier Huawei et vendu par Orange Sénégal (Modèle : Huawei
E3531s-2).

2.1.3. Carte SIM

Une carte SIM (Subscriber Identity Module) est une puce contenant un microcontrôleur et de la
mémoire, utilisée en téléphonie mobile pour stocker les informations spécifiques de l'abonné
d'un réseau mobile tel que le réseaux GSM. Elle permet d’identifier de manière unique sur le
réseau l’abonné grâce à un numéro IMSI, constitué du code pays (MCC), de l'identifiant de
l'opérateur (MNC), et de l'identifiant de l'abonné (MSIN).

2.1.4. Passerelle SMS

13
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

La passerelle SMS est un transmetteur d’information entre un ordinateur et la fonctionnalité


SMS du modem GSM. Les informations passent par la passerelle SMS qui communique avec le
modem GSM pour livrer les SMS aux différents destinataires via l’opérateur.

Dans ce projet nous utiliserons Gammu :

Gammu est le nom de l'utilitaire en ligne de commande mais aussi le nom du projet bifurqué de
Gnokii, qu’on utilisera pour avoir accès aux fonctions GSM de notre modem (Huawei E3531s-
2). Il est écrit en C et construit sur libGammu.

Son utilitaire de ligne de commande donne accès à de nombreuses fonctionnalités


téléphoniques. Parmi toutes ses fonctionnalités nous nous focaliserons sur la récupération, la
sauvegarde et l’envoi de SMS

2.1.5. Base de données

Une base de données est une entité dans laquelle on stocke des données de façon structurée et
avec le moins de redondance possible. Nous utiliserons dans ce projet une base de données de
relationnel réalisé avec le modèle MERISE. Elle sera utilisée pour stocker les informations des
utilisateurs de nos services, ainsi que d’autres paramètres importants pour Gammu.

Le Système de Gestion de Base de Données Relationnel pour lequel nous avons opté est
MySQL.

2.1.5.1. Modélisation de la base de données du site Web de souscription aux services


Cette base de données se nomme utilisateurs-service-sms.

 Dictionnaire de données

Tableau 2. Dictionnaire des données de la base de données utilisateurs-service-sms.

Nom Signification Types Longueur Règles


idClient Identifiant du client INT 5 99999
nomCli Nom du client TEXT 45
prenomCli Prénom du client TEXT 45
numeroTel Numéro de téléphone TEXT 45 78888888
du client
password Mot de passe du client TEXT 255

14
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

idService Identifiant du services INT 5 99999


nomService Nom du services TEXT 45
dateAbon Date d’abonnement du DATE AAAA-MM-JJ
client
 Modèle Conceptuel des Données (MCD)

Figure 4. Modèle Conceptuel des Données de la base de données utilisateurs-service-sms.


2.1.5.2. Modélisation de la base de données du service de bus
Cette base de données se nomme bus-service-sms.

 Dictionnaire de données

Tableau 3. Dictionnaire des données de la base de données bus-service-sms.

Nom Signification Types Longueur Règles


id Identifiant de la INT 11
personne
nom Nom de la personne VARCHAR 50
prenom Prénom de la personne VARCHAR 100 788584545
numeroTel Numéro de le personne VARCHAR 16
numeroBus Numéro de bus de la VARCHAR 11
personne
pointsEmprunt Le point de prise du VARCHAR 50
bus
heuresEmprunt Heure de prise du bus VARCHAR 50 6:20
points Les points de passage VARCHAR 120
d’un trajet de bus
numero Numéro de bus INT 11

15
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

nombrePlacesTotal Nombre de places INT 11


totales dans le bus
nombrePlacesOccupees Nombre de places INT 11
occupées dans le bus
heureDepart Heure de départ du bus VARCHAR 5
dureeActivite Durée activité du bus VARCHAR 5
idTrajet Identifiant du trajet INT 11
pointActuel Point actuel du bus VARCHAR 50

 Modèle Conceptuel des Données (MCD)

Figure 5. Modèle Conceptuel des Données de la base de données bus-service-sms.

2.1.5.3. Modélisation de la base de données du service de prière


 Dictionnaire de données

Tableau 4. Dictionnaire des données de la base de données heures-de-prieres-service-sms.

Nom Signification Types Longueur Règles

16
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

id Identification du int 11
trajet
Sobh Heure de prière varchar 5
Duhr Heure de prière varchar 5
Duhr
Asr Heure de prière varchar 5
Asr
Maghrib Heure de prière varchar 5
Maghrib
Isha Heure de prière varchar 5
Isha
id Identification de Varchar 11
la personne
nom Nom de la varchar 50
personne
prenom Prénom de la varchar 100
personne
numeroTel Numéro de varchar 16 788584545
téléphone de la
personne
localisation Localisation de varchar 50
la personne
fuseauHoraire Fuseau horaire varchar 2
de la personne

 Modèle Conceptuel des Données (MCD)

17
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Figure 6. Modèle Conceptuel des Données de la base de données heures-de-prieres-service-


sms.

2.1.6. Serveur Web

Dans le cadre de ce projet, nous utiliserons le serveur Web Apache, afin de gérer notre interface
Web de souscription aux services. Le serveur HTTP Apache ou Apache, est un logiciel de
serveur web multiplateforme libre et gratuit, qui est développé et maintenu par une communauté
ouverte de développeurs sous la supervision de Apache Software Foundation.

Il fonctionne aussi bien sur les distributions Linux que sur Windows, OpenVMS, NetWare, OS/2
et une grande variété de systèmes de type Unix.

2.2. Proposition d’une architecture physique

Un utilisateur voulant s’abonner à travers le Web, utilise son appareil, et se connecte à un point
d’accès internet. Il entre l’URL de la page dans son navigateur. Le serveur Apache reçoit la
requête puis retransmet la page interprétée par PHP.

Lors de la soumission des données de l’inscription, Apache les reçoit et les transmet au script
PHP qui les traite et insère les informations dans la base de données correspondante.

À travers la page Web, le client pourra effectuer les actions telles que s’abonner ou se
désabonner à un service particulier.

Après s’être abonné ou désabonné le client reçoit une notification de son action par SMS.

18
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

L’envoi du message se fait par un script PHP qui récupère les informations nécessaires dans la
base de données et les envoie à la passerelle Gammu qui se charge de communiquer avec le
modem GSM.

Le modem GSM, à travers la carte SIM à l’intérieur envoi un SMS dans le réseau en destination
du client.

Le client a la possibilité de s’abonner avec son mobile en envoyant un SMS au numéro de


téléphone de la carte SIM dans le modem qui sera interprété par un script PHP pour la réception
et son insertion dans la base de données.

À l’instar de l’inscription par le Web, le client recevra une notification si son inscription est
acceptée ou pas.

Le diagramme de cas d’utilisation du langage UML, permet de clarifier les interactions entre
les utilisateurs et le système.

Figure 7. Diagramme de cas d’utilisation (UML) du système.


La gestion des bases de données pour les actions nécessaires de création, de suppression et de
parcours se fera avec phpMyAdmin.

19
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Voici ci-dessous, une proposition d’architecture physique :

Figure 8. Architecture physique des services déployés.

20
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

3. Implémentation

Dans ce chapitre, il sera question de l’installation et de la configuration des différentes entités


matérielles et logicielles, nécessaires au projet. Nous travaillerons avec le système
d’exploitation Ubuntu Desktop 18.04 LTS. Pour des raisons de droit d’accès, nous utiliserons
dans la majorité des cas, le compte utilisateur root.

Figure 9. Connexion en tant que root.

3.1. Installation de LAMP

LAMP est un acronyme désignant Linux Apache MySQL PHP. C’est une suite de logiciels
importants dans la mise en œuvre d’un service basé sur le Web. Cette suite contient le système
d’exploitation Linux (que nous avons déjà à travers Ubuntu Desktop 18.04 LTS), le serveur
Web Apache, le système de gestion de base de données MySQL ainsi que le langage de
programmation PHP.

Le serveur Apache permet la communication client-serveur à travers le protocole HTTP(S).

Le système de gestion de base de données MySQL est un serveur de base de données. Il nous
servira à stocker et manipuler les données relatives à notre service.

La logique de programmation de notre service, sera écrite en langage PHP. C’est un langage
interprété très utilisé dans le monde du Web.

21
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

L’installation se fait avec la commande sudo apt install apache2 php libapache2-mod-php
mysql-server php-mysql -y.

Les réglages par défauts conviendront parfaitement à nos besoins, c’est pour cela que nous
ajouterons l’option –y à la fin de la commande afin de répondre par l’affirmative à toutes les
questions éventuellement posées lors de l’installation des différents paquets.

Figure 10. Installation de LAMP

3.2. Création d’un utilisateur MySQL

Un utilisateur est nécessaire afin de pouvoir administrer les bases de données sous MySQL.
Dans notre cas nous créerons l’utilisateur admin avec comme mot de passe azerty. Nous
utilisons un mot de passe aussi faible pour des raisons de simplicité et de démonstration. Dans
un environnement de production, il est impensable d’utiliser de tels mots de passe : la sécurité
est primordiale.

Connectons-nous d’abord à MySQL en tant que root. Depuis la vingtième version du système
d’exploitation Ubuntu, la connexion à MySQL en tant que root se fait grâce à la commande
sudo mysql.

22
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Figure 11. Connexion à MySQL en tant que root.


À l’aide des commandes SQL visibles dans la figure ci-dessous, nous créons notre utilisateur.

Figure 12. Création d’un utilisateur sous MySQL.

3.3. Installation de phpMyAdmin

Le logiciel phpMyAdmin est une interface Web d’administration de systèmes de bases de


données. Du fait de son utilisation en mode graphique, il facilite grandement l’administration
des bases de données.

La commande sudo apt install phpmyadmin permet de l’installer. Au cours de l’installation il


faudra répondre Oui pour la création de la base de données phpmyadmin et définir un mot de
passe de connexion MySQL. Nous utiliserons le mot de passe azerty.

23
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Figure 13. Installation de phpMyAdmin : saisie du mot de passe.

Par la suite il faudra choisir apache2 à l’aide de la touche espace, comme serveur Web à
configurer automatiquement.

En saisant localhost/phpmyadmin dans la barre d’adresse d’un navigateur, la page de


connexion de phpMyAdmin devrait apparaître, attestant ainsi sa bonne installation.

Figure 14. Page de connexion de phpMyAdmin.

3.4. Création de la base de données nécessaire au service de bus

Pour la mise en œuvre du service de notification par SMS de la position de bus, nous créerons
la base de données bus-service-sms. Elle contiendra trois (3) tables : bus, personne et trajet.

24
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Figure 15. Création de la base de données bus-service-sms.

Figure 16. Aperçu des tables de bus-service-sms.

3.5. Création de la base de données nécessaire au service de prière

La base de données du service de prière se nomme heures-de-priere-service-sms et contient


deux (2) tables : personne et heures-de-priere-utc.

Figure 17. Création de la base de données heures-de-priere-service-sms.

Figure 18. Aperçu des tables de heures-de-priere-service-sms.

25
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

3.6. Installation de Gammu

Gammu est une passerelle GSM permettant entre autres, d’envoyer et recevoir des SMS à l’aide
d’un téléphone portable ou d’un modem GSM. Il est écrit en langage C, et est disponible sur
Windows ainsi que sur Linux. Son interface graphique du nom de Wammu, facilite grandement
son utilisation ; nous ne l’utiliserons pas dans notre cas.

La commande apt install gammu -y permet de l’installer. Comme auparavant, les paramètres
par défauts nous conviennent.

Figure 19. Installation de Gammu.

3.7. Configuration de Gammu

La configuration de Gammu s’effectue dans un fichier dédié nommé gammurc situé à dans le
répertoire etc (/etc/gammurc).

En s’assurant d’avoir correctement connecté le modem GSM, la commande gammu-detect


détecte le modem et génère automatiquement le contenu du fichier de configuration.

26
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Figure 20. Génération automatique de la configuration.

Il ne reste plus qu’à rediriger le flux généré par gammu-detect vers le fichier /etc/gamurc afin
de pérenniser la configuration. Cette opération est réalisée grâce à la commande gammu-detect
> /etc/gammurc.

Figure 21. Contenu du fichier /etc/gammurc.


Il est également possible d’identifier le modem GSM connecté et obtenir davantage
d’informations à son sujet. Nous utiliserons la commande gammu identify.

27
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Figure 22. Informations du modem GSM.

L’envoi des SMS se fait à travers la commande echo "corps du message" | gammu --sendsms
TEXT numero_de_telephone.

Figure 23. Envoi d’un SMS.


Sur la figure ci-dessus, on remarque que le réseau de l’opérateur dont on utilise la carte SIM a
répondu « OK ». Cela signifie que le SMS a bien été envoyé.

Figure 24. Réception sur téléphone portable du SMS envoyé via Gammu.

28
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

3.8. Installation de Gammu-smsd

Gammu-smsd est un daemon de gammu permettant aussi bien l’envoi que la réception de SMS
via Gammu. Il scanne périodiquement le modem GSM à la recherche d’éventuels SMS reçus.
En cas de réception, il stocke les SMS dans un espace de stockage défini qui peut être un
répertoire quelconque, ou une base de données. La commande apt install gammu-smsd -y
permet de l’installer.

Dans notre contexte, Gammu-smsd sera utilisé pour réceptionner les SMS de souscription au
service. Ces SMS proviendront de tout personne désireuse d’avoir le service.

Figure 25. Installation de Gammu-smsd.

3.9. Configuration de Gammu-smsd

La configuration de Gammu-smsd s’effectue dans le fichier gammu-smsdrc situé dans le


répertoire /etc. Le fichier de configuration gammu-smsdrc est composé essentiellement de deux
(2) sections : [gammu] et [smsd]. La section [gammu] contient la même configuration que le
fichier gammurc vu précédemment. La section [smsd] contient la véritable configuration du
daemon Gammu-smsd. On peut y définir entre autres, l’espace de stockage des SMS ainsi que
ses paramètres d’accès, le chemin du fichier d’historique (log file) et le niveau de débogage du
daemon.

Dans le cadre de notre projet, nous utiliserons la base de données MySQL comme espace de
stockage des SMS. L’accès à la base de donnée se fera par l’utilisateur admin précédemment
créé. La base de données qui sera utilisée par Gammu-smsd se nomme gammu-smsd-settings.

29
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Figure 26. Configuration de Gammu-smsd.

Gammu-smsd stocke les SMS et d’autres informations selon un modèle de données prédéfini.
Ce modèle de données n’est rien d’autre qu’une définition de tables SQL. Parmi ces tables on
retrouve la table inbox qui sert à stocker les SMS entrants et la table outbox qui sert à stocker
les SMS sortants. La définition de ce modèle se trouve dans un script SQL fourni avec Gammu-
smsd. Ce script se situe à /usr/share/doc/gammu-smsd/examples sous le nom de mysql.sql.gz.

Sur phpMyAdmin il faut créer une base de données du même nom que celle définie dans le
fichier de configuration gammu-smsdrc, soit gammu-smsd-settings. Par la suite, il faudra
importer dans cette base de données, le script mysql.sql.gz.

30
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Figure 27. Importation du script mysql.sql.gz.

Figure 28. Tables générées par le script mysql.sql.gz.

Testons à présent la réception d’un SMS. Pour ce faire, il faut d’abord redémarrer le daemon
Gammu-smsdrc pour qu’il prenne en compte son fichier de configuration. La commande
/etc/init.d/gammu-smsd restart permet de le faire.

Figure 29. Redémarrage de gammu-smsd.

31
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Depuis un téléphone portable, envoyons un SMS au numéro de la carte SIM qui se trouve dans
le modem GSM.

Figure 30. Envoi d’un SMS à Gammu.


En actualisant la page de phpMyAdmin, on retrouve le SMS dans la table inbox. Cela atteste le
bon fonctionnement du daemon Gammu-smsd.

Figure 31. Réception du SMS envoyé depuis le téléphone portable.

3.10. Mise en place du script d’envoi des SMS

Le script responsable de l’envoi des SMS est écrit en langage PHP. Il récupère dans la base de
données, les informations des personnes ayant souscrit au service et effectue certains
traitements. Il est défini de telle sorte à n’envoyer des SMS qu’une trentaine de minutes avant
l’heure d’arrivée du bus concerné. Un dernier SMS est également envoyé une dizaine de
minutes avant. Il en est de même pour le service des heures de prière.

32
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Figure 32. Extrait du script d’envoi des SMS pour le service de bus.

3.11. Mise en place du script de souscription aux services

Le script de souscription au service de bus sera responsable de l’analyse et de l’insertion dans


la base de données, des informations envoyées par les personnes désireuses de souscrire au
service de bus. Il s’assure du respect du format du SMS reçu et de la pertinence des informations
reçues. Pour le service des heures de prière, une grande attention sera portée sur la pertinence
du fuseau horaire envoyé reçu.

Figure 33. Extrait du script de réception des SMS de souscription.

33
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Toute personne désirant souscrire au service de Bus devra envoyer un SMS au format suivant :

“Bus Nom Prenom N°Bus PointEmprunt HeureEmprunt”.

Par exemple, le SMS “Bus DIOP Amadou 22 Medina 12:00” respecte ce format.

Quant au service de prière, le format suivant devra être respecté :

“Priere Nom Prenom Ville FuseauHoraire”.

“Priere FALL Mohamed -5” est un exemple de SMS valide.

Pour que le script assurant le traitement des SMS reçus s’exécute, il faut modifier le fichier de
configuration /etc/gammu-smsdrc en y ajoutant une ligne spécifiant le chemin d’un script Shell
à exécuter. Ce script Shell doit nécessairement avoir les droits d’exécution.

Figure 34. Ligne à rajouter au fichier gammu-smsdrc.


Étant dans notre cas, en présence d’un script PHP, nous utiliserons un script Shell chargé de
faire appel au script PHP.

Figure 35. Contenu du script Shell reception.sh.

34
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

3.12. Automatisation des envois de SMS

Pour le bon fonctionnement de nos services, il est indispensable d’automatiser l’envoi des SMS.
Pour réaliser cette automatisation, nous utiliserons l’utilitaire Cron, bien connu sur les
distributions Linux.

Cron est un logiciel permettant d’automatiser l’exécution de commandes, scripts selon un


timing défini à l’avance. Il a été développé par les laboratoires Bell d’AT&T, en langage C.

La programmation des tâches sous Cron se fait selon le format suivant :

Minute heure jours_dans_le_mois mois _jour_de_la_semaine commande

Dans le cadre de notre projet, nous souhaitons exécuter deux tâches toutes les minutes.

Ces tâches ne sont rien d’autres que les appels à exécution des scripts responsables des services
de bus et de prière.

Les inscriptions devant figurer dans le fichier de configuration de Cron seront donc :

‘‘* * * * * /var/www/html/bus.php’’ ;

‘‘* * * * * /var/www/html/priere.php’’.

La configuration de Cron se fait avec la commande crontab -e.

Figure 36. Aperçu du fichier de configuration de Cron.

35
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Conclusion

La conception de ce projet a nécessité des connaissances en programmation PHP, en systèmes


de bases de données, en HTML mais aussi et surtout sur la configuration de la passerelle
Gammu afin d’accéder au modem GSM.

Cette première phase conceptuelle a été primordiale pour réaliser l’implémentation (les scripts,
les tests et l’intégration), la démonstration ainsi que la proposition d’une architecture physique
adéquate à nos services.

36
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Webographie
 « C’est quoi Linux ? »,
http://www.sebsauvage.net/comprendre/linux/#:~:text=Linux%20est%20un%20syst%
C3%A8me%20d,syst%C3%A8me%20plein%20de%20commandes%20compliqu%C3
%A9es..
 « Philosophie d’Unix », https://fr.wikipedia.org/wiki/Philosophie_d%27Unix.
 « Client-serveur - Définition et Explications », https://www.techno-
science.net/definition/3743.html.
 « Introduction à Linux et la philosophie du logiciel libre », http://blog-des-auteurs-
libres.over-blog.com/2014/08/introduction-a-linux-et-la-philosophie-du-logiciel-
libre.html.
 « Conception et philosophie de Linux »,
http://lexo.free.fr/docs/bien_debuter/html/node23.html.
 « L’Open Source a 20 ans : comment cette philosophie a-t-elle révolutionné la
programmation ? », https://www.zdnet.fr/actualites/l-open-source-a-20-ans-comment-
cette-philosophie-a-t-elle-revolutionne-la-programmation-39863738.htm.
 « Global System for Mobile Communications »,
https://fr.wikipedia.org/wiki/Global_System_for_Mobile_Communications.
 « Le service de messages courts de GSM (SMS) »,
http://jaaayyy.chez.com/html/Radiomobiles/stage/SMS.html.
 « Push and Pull marketing : ou l’art d’attirer le consommateur ? », https://www.e-
marketing.fr/Thematique/data-1091/Tribune/Push-and-Pull-marketing-art-attirer-
consommateur-231920.htm.
 « PHP », https://en.wikipedia.org/wiki/PHP.
 « Carte SIM », https://fr.wikipedia.org/wiki/Carte_SIM.
 « Gammu », https://wammu.eu/gammu/.
 « Apache HTTP Server », https://en.wikipedia.org/wiki/Apache_HTTP_Server.
 « Serveur web – LAMP », https://doc.ubuntu-fr.org/lamp#serveur_web_-_lamp.
 « MySQL », https://doc.ubuntu-fr.org/mysql.
 « phpMyAdmin », https://doc.ubuntu-fr.org/phpmyadmin.
 « Gammu Configuration File », https://fr.wammu.eu/docs/manual/config/index.html.
 « SMSD Configuration File », https://fr.wammu.eu/docs/manual/smsd/config.html.

37
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

 « MySQL Backend », https://fr.wammu.eu/docs/manual/smsd/mysql.html#gammu-


smsd-mysql.
 « Installer Gammu et Gammu-smsd pour envoyer des SMS depuis un Raspberry »,
https://tutoandco.colas-delmas.fr/software/envoyer-sms-gammu-deamon/.
 « Serveur sms avec traitement de contenu, avec Gammu »,
https://fr.slideshare.net/laSerenite489/serveur-sms.

38
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

Annexes

Fichier de configuration gammurc


; Fichier de configuration généré par gammu-detect.
; Merci de consulter le manuel de Gammu pour plus d'informations.

[gammu]
device = /dev/ttyUSB0
name = Téléphone sur le port USB série HUAWEI_TechnologyHUAWEI_Mobile
connection = at

Fichier de configuration gammu-smsdrc


# Configuration file for Gammu SMS Daemon

# Gammu library configuration, see gammurc(5)


[gammu]
port = /dev/ttyUSB0
connection = at

# SMSD configuration, see gammu-smsdrc(5)


[smsd]
service = SQL
logfile = /var/log/gammu.log
debuglevel = 1

#Database connection
driver = native_mysql
user = admin
password = azerty
host = localhost
database = gammu-smsd-settings
sql = mysql

#Script à exécuter à la réception d'un SMS


RunOnReceive = /var/www/html/reception.sh

Script d’envoi de SMS pour le service de bus


<?php
//For debugging
ini_set('display_errors', 1);

39
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

//Variables de connexion à la base de données


$host = "localhost";
$user = "admin";
$password = "azerty";
$database = "bus-service-sms";

//Connexion à la base de données


$conn = mysqli_connect($host, $user, $password, $database);
mysqli_query($conn, "SET NAMES 'utf8'");

//Formatage de la requête SQL


$query = " SELECT personne.numeroTel,personne.numeroBus,heuresEmprun
t,
personne.pointsEmprunt,nombrePlacesOccupees,nombrePlacesTotal,
points
FROM personne,bus,trajet
WHERE personne.numeroBus=bus.numero AND bus.idTrajet=tra
jet.id
ORDER BY personne.id";

//Exécution de la requête
$resultat = mysqli_query($conn, $query);

if($resultat)
{
while($ligne = mysqli_fetch_array($resultat))//Pour chaque personne co
ncernée
{
$numeroTel = $ligne['numeroTel'];
$numeroBus = $ligne['numeroBus'];
$nbPlacesTotal = $ligne['nombrePlacesTotal'];
$nbPlacesLibres = $nbPlacesTotal - $ligne['nombrePlacesOccupees'];
$heuresEmprunt = $ligne['heuresEmprunt'];
$heuresEmpruntHh = explode(':',$heuresEmprunt)[0];
$heuresEmpruntMn = explode(':',$heuresEmprunt)[1] + 60*$heuresEmpr
untHh;
$heureActuelleMn = date('H')*60 + date('i');//Heure actuelle du sy
stème.
$tempsRestant = $heuresEmpruntMn - $heureActuelleMn;

echo "remaining = ".$tempsRestant." mn "."\n";

if($tempsRestant == 30 || $tempsRestant == 10)


{
$message = "Le bus ".$numeroBus." est a ".$tempsRestant

40
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

."mn de l'arret de bus ".$ligne['pointsEmprunt


']." Il y reste "
.$nbPlacesLibres." place(s).";
//gammu-smsd-inject TEXT 77xxxxxxx -text "message"
$sendCmd = 'gammu-smsd-inject TEXT "'.$numeroTel.'" -
text "'.$message.'"';
//exec($sendCmd);
$resultMsg = shell_exec($sendCmd);
echo $resultMsg."\n";
}
}
}
else
{
echo("Erreur de la requête : ".mysqli_error($conn));
}
?>

Script d’envoi de SMS pour le service de prière


<?php
//For debugging
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

//Variables de connexion à la base de données


$host = "localhost";
$user = "admin";
$password = "azerty";
$database = "heures-de-priere-service-sms";

//Connexion à la base de données


$conn = mysqli_connect($host, $user, $password, $database);
mysqli_query($conn, "SET NAMES 'utf8'");

//Formatage de la requête SQL


$query = " SELECT numeroTel, Sobh, Duhr, Asr, Maghrib, Isha, fuseauHorai
re
FROM `heures-de-priere-utc`, personne";

//Exécution de la requête
$resultat = mysqli_query($conn, $query);

if($resultat)
{

41
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

while($row = mysqli_fetch_array($resultat))
{
$numeroTel = $row['numeroTel'];
$heuresDePriere = array($row['Sobh'], $row['Duhr'], $row['Asr'], $
row['Maghrib'], $row['Isha']);
$fuseauHoraireStr = $row['fuseauHoraire'];
$fuseauHoraire = 0;
if(strcmp($fuseauHoraireStr[0],'+') == 0)
{
$fuseauHoraire = $fuseauHoraireStr[1];
}
else
{
$fuseauHoraire = -$fuseauHoraireStr[1];
}
$heureActuelleMn = date('H')*60 + date('i');//Heure actuelle du sy
stème.

for($i = 0; $i < 5; $i++)//Pour chaque prière


{
$heureDePriereMn = (explode(':', $heuresDePriere[$i])[0] - $fu
seauHoraire) * 60 + explode(':', $heuresDePriere[$i])[1];
$tempsRestant = $heureDePriereMn - $heureActuelleMn;

//Debugging
echo "#_DEBUG_# : actu = ".date('H').":".date('i')."\t";
echo "p".($i+1)."=".$heuresDePriere[$i]."\t";
echo "restant = ".$tempsRestant."\n";

if($tempsRestant == 30 || $tempsRestant == 10)


{
$message = "Cher fidel(e), preparez vous pour la ".($i+1).
"e priere du jour. "
."Plus que ".$tempsRestant."mn avant. Qu'Allah vous beniss
e.";

//gammu-smsd-inject TEXT 77xxxxxxx -text "message"


$sendCmd = 'gammu-smsd-inject TEXT "'.$numeroTel.'" -
text "'.$message.'"';

//Debugging
//echo "msg = ".$message."\n\n";

$resultMsg = shell_exec($sendCmd);
//Debugging
echo $resultMsg."\n\n";
}
}

42
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

//Debugging
echo "\n\n";
}
}
?>

Script Shell de réception de SMS


#!/bin/sh

#Localisation de php
php=/usr/bin/php
#Localisation du script php
script=/var/www/html/reception.php

#Exécution
$php $script

Script de réception de SMS


<?php
//For debugging
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

//Variables de connexion à la base de données


$host = "localhost";
$user = "php";
$password = "phpmyadmin";
$database = "gammu-smsd-settings";

//Connexion à la base de données


$conn = mysqli_connect($host, $user, $password, $database);
mysqli_query($conn, "SET NAMES 'utf8'");

//Formatage de la requête SQL


$query = " SELECT SenderNumber, TextDecoded
FROM inbox
ORDER BY ReceivingDateTime DESC
LIMIT 1";

//Exécution de la requête
$resultat = mysqli_query($conn, $query);

43
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

if($resultat)
{
while($row = mysqli_fetch_array($resultat))//Pour l'unique SMS_
{

$senderNumber = $row['SenderNumber'];
$sms = $row['TextDecoded'];
$smsParts = explode(' ', $sms);

if(count($smsParts) == 5)//priere
{
if(strcmp('priere',strtolower($smsParts[0])) == 0)
{
//$motCle = $smsParts[0];
$nom = $smsParts[1];
$prenom = $smsParts[2];
$localisation = $smsParts[3];
$fuseauHoraire = $smsParts[4];
$isSmsValid = false;
if(strcmp($fuseauHoraire[0],'+') == 0 || strcmp($fuseauHor
aire[0],'-') == 0)
{
$fuseau = substr($fuseauHoraire,1);
if($fuseau >= -12 && $fuseau <= 12)
{
//Format correct
$isSmsValid = true;

//Le client existe-t-il déjà ?


$conn2 = mysqli_connect($host, $user, $password, '
heures-de-priere-service-sms');
$query2 = " SELECT id
FROM personne
WHERE numeroTel='$senderNumber'";
$resultat2 = mysqli_query($conn2, $query2);
mysqli_query($conn2, "SET NAMES 'utf8'");

if(mysqli_num_rows($resultat2) == 0)//client inexi


stant
{
//Insertion dans la database
$query2 = " INSERT INTO personne(nom, prenom,
numeroTel, localisation, fuseauHoraire)
VALUES ('$nom', '$prenom', '$sende
rNumber', '$localisation', '$fuseauHoraire')";
$resultat2 = mysqli_query($conn2, $query2);

44
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

if(mysqli_affected_rows($conn2) != 0)
{
$message = 'Felicitations '.$prenom.' '.$n
om.' !'
.' Votre souscription au service d
e priere a reussi.';
exec('gammu-smsd-
inject TEXT "' . $senderNumber . '" -text "' . $message . '"');

echo "#_DEBUG_# : ".$message;


}
else
{
$message = 'Desole '.$prenom.' '.$nom.', v
otre souscription au service de priere a echoue.'
.' Veuillez reesayer plus tard.';
exec('gammu-smsd-
inject TEXT "' . $senderNumber . '" -text "' . $message . '"');

echo "#_DEBUG_# : ".$message;


}

}
else//client existant
{
//Deja inscrit
$message = "Desole ".$prenom." ".$nom.", vous
semblez deja avoir souscrit au service de priere.";
exec('gammu-smsd-
inject TEXT "' . $senderNumber . '" -text "' . $message . '"'."\n");

echo "#_DEBUG_# : ".$message;


}

}
}

if(!$isSmsValid)
{
$message = "Desole ".$nom." ".$prenom.", votre souscri
ption au service de priere a echoue. "
."Le fuseau horaire est invalide.";
exec('gammu-smsd-inject TEXT "' . $senderNumber . '" -
text "' . $message . '"');

echo "#_DEBUG_# : ".$message;


}
}

45
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

else
{
//Envoyer un SMS disant que le format est invalide.
//gammu-smsd-inject TEXT 77xxxxxxx -text "message"
$message = "Desole, votre souscription au service de notif
ication d'heures de priere a echoue."
.' Le format de votre SMS est invalide. Format : "Priere"
nom prenom ville fuseauHoraire';
exec('gammu-smsd-inject TEXT "' . $senderNumber . '" -
text "' . $message . '"');

echo "#_DEBUG_# : ".$message;


}
}
else if(count($smsParts) == 6)//bus
{
if(strcmp('bus',strtolower($smsParts[0])) == 0)
{
$nom = $smsParts[1];
$prenom = $smsParts[2];
$numeroBus = $smsParts[3];
$pointsEmprunt = $smsParts[4];
$heuresEmprunt = $smsParts[5];

//Vérifier d'abord si le client existe deja dans la base


$conn2 = mysqli_connect($host, $user, $password, 'bus-
service-sms');
$query2 = " SELECT id
FROM personne
WHERE personne.numeroTel='$senderNumber'";
$resultat2 = mysqli_query($conn2, $query2);

print_r(mysqli_error($conn2));

//if($resultat2)//####### A REVOIR :
if(mysqli_num_rows($resultat2) == 0)
{
//On continue le traitement

//Vérification de l'existence du N° de bus


$conn3 = mysqli_connect($host, $user, $password, 'bus-
service-sms');
mysqli_query($conn2, "SET NAMES 'utf8'");
$query3 = " SELECT points
FROM bus, trajet

46
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

WHERE bus.numero = $numeroBus AND bus.id


Trajet = trajet.id
LIMIT 1";
$resultat3 = mysqli_query($conn3, $query3);

if(mysqli_num_rows($resultat3) != 0)//N° de bus valide


{
$points = explode(';', mysqli_fetch_array($resulta
t3)['points']);

$pointExiste = false;

foreach($points as $point)
{
if(strcmp(strtolower($pointsEmprunt) , explode
('/',strtolower($point))[0]) == 0)
{
$pointExiste = true;
break;
}
}

if($pointExiste)//Point d'emprunt valide


{
//Vérification du format de l'heure
$regex = '/^([0-1]?[0-9]|2[0-3]):[0-5][0-
9]$/';
if(preg_match($regex, $heuresEmprunt) == 1
)
{
//Insertion dans la database
$query2 = " INSERT INTO
personne (nom, prenom, num
eroTel, numeroBus, pointsEmprunt, heuresEmprunt)
VALUES ('$nom', '$prenom',
'$senderNumber',
$numeroBus,'$pointsEmprunt
', '$heuresEmprunt')";
//echo "sql = ".$query2;
$resultat2 = mysqli_query($conn2, $que
ry2);

if(mysqli_affected_rows($conn2) != 0)
{
//Envoi d'un SMS pour informer de
la réussite de l'insciption
$message = 'Felicitations '.$preno
m.' '.$nom.' !'

47
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

.' Votre souscription au service d


e bus a reussi.';
exec('gammu-smsd-
inject TEXT "' . $senderNumber . '" -text "' . $message . '"');

echo "#_DEBUG_# : ".$message;


}
else
{
//Envoi d'un SMS pour informer de
l'échec de l'inscription
$message = 'Desole '.$prenom.' '.$
nom.', votre souscription au service de Bus a echoue.'
.' Veuillez reesayer plus tard.';
exec('gammu-smsd-
inject TEXT "' . $senderNumber . '" -text "' . $message . '"');

echo "#_DEBUG_# : ".$message;


}

}
else
{
//Envoyer SMS heure invalide
$message = "Desole ".$prenom." ".$nom.
", votre souscription au service de Bus a echoue."
." Votre heure d'emprunt est invalide
!";
exec('gammu-smsd-
inject TEXT "' . $senderNumber . '" -text "' . $message . '"');

echo "#_DEBUG_# : ".$message;


}
}
else//Point d'emprunt invalide
{
//Envoyer un SMS signalant que le point d'
emprunt est invalide
$message = "Desole ".$prenom." ".$nom.", v
otre souscription au service de Bus a echoue."
." Le point d'emprunt est invalide !";
exec('gammu-smsd-
inject TEXT "' . $senderNumber . '" -text "' . $message . '"');

echo "#_DEBUG_# : ".$message;


}
}
else//N° de bus invalide

48
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

{
//Envoyer SMS signalant que le N° de bus est inval
ide
$message = 'Desole '.$prenom.' '.$nom.', votre sou
scription au service de Bus a echoue. Le numero de bus est invalide !';
exec('gammu-smsd-
inject TEXT "' . $senderNumber . '" -text "' . $message . '"');

echo "#_DEBUG_# : ".$message;


}
}
else
{
//Deja inscrit
$message = "Desole ".$prenom." ".$nom.", vous semblez
deja avoir souscrit au service de Bus.";
exec('gammu-smsd-inject TEXT "' . $senderNumber . '" -
text "' . $message . '"');

echo "#_DEBUG_# : ".$message;


}
}
else //Format du SMS invalide
{
//Envoyer un SMS disant que le format est invalide.
//gammu-smsd-inject TEXT 77xxxxxxx -text "message"
$message = 'Desole, votre souscription au service de Bus a
echoue.'
.' Le format de votre SMS est invalide. Format : nom preno
m numeroBus pointEmprunt heureEmprunt';
exec('gammu-smsd-inject TEXT "' . $senderNumber . '" -
text "' . $message . '"');

echo "#_DEBUG_# : ".$message;


}
}
else
{
$message = "Votre SMS ne respecte aucun format. "
.'Service bus : Bus nom prenom numeroBus ptEmprunt heureEmprun
t. '
.'Service priere : Priere nom prenom ville fuseauHoraire';
exec('gammu-smsd-inject TEXT "' . $senderNumber . '" -
text "' . $message . '"');

echo "#_DEBUG_# : ".$message."\n\n";


}

49
Mise en place de services de bus et de notification des heures de prière basés sur les SMS

}
}
?>

50