Outils pour utilisateurs

Outils du site


wiki:projets:smartphone-geiger:backend

Maquette du site de remontée des données

Notre projet étant celui d'un compteur geiger connecté, nous devons nous assurer de pouvoir envoyer nos données vers un serveur pour les mettre à disposition. En réunion, deux approches ont étés évoquées.

La première est celle d'un serveur central. Cette solution est simple à mettre en place et est souvent utilisée. Par contre elle n'offre que peu de protection en cas de crise, ce qui nous oblige à avoir un deuxième serveur de secours où l'on copie la base de donnée, pour ne rien perdre en cas de panne.

La deuxième est celle de plusieurs serveurs hébergés chez les utilisateurs. Ce système est plus sûr en cas de crise et accroit la confiance des utilisateurs dans le projet. Mais d'un point de vue technique, il est beaucoup plus complexe car il se pose de vraies questions de synchronisation entre les bases.

Nous avons donc choisi de partir sur un serveur central, les premières années et de se laisser la possibilité d'évoluer vers une solution décentralisée si le projet prenait une ampleur considérable.

Solutions techniques

Le système de base de donnée choisi est PostgreSQL. Il est open-source et souvent utilisé par les professionnels. La partie interface communauté sera réalisée en PHP/HTML/javascript pour faciliter l'utilisation de CMS. La partie de remontée des données sera réalisée en javascript avec NodeJS, pour faciliter les échanges avec l'application et pour rester souple face au potentiel afflux de données.

Installation de PostgreSQL

Par un heureux hasard, notre environnement de développement Cloud9, nous permet d'installer et d’exécuter PostgreSQL et NodeJS. Nous pouvons donc nous en servir comme d'un serveur de test.

Pour installer postgreSQL, il suffit d'ouvrir un terminal dans Cloud9 et d'y entrer :

c9pm install postgresql

NodeJS est déjà installé sur Cloud9.

Premier test avec NodeJS

Pour utiliser PostgreSQL avec NodeJS, nous avons besoin du module nodeJS node-postgres.

npm install pg

Pour nos tests, nous aurons aussi besoins d'une base, donc nous allons en créer une. On se place dans le dossier Backend et on créé le dossier “database” qui contiendra notre base de donnée :

cd Backend
initdb ./database

Cette opération prend un peu de temps (quelques minutes). Une fois la base créée, nous pouvons démarrer l'instance du serveur :

postgres -D ./database -h $IP &

$IP est une variable d'environnement définie par cloud9 qui correspond à l'IP locale (l'équivalent de 127.0.0.1). L'esperluette à la fin de la commande indique que l'on souhaite que le process tourne en arrière-plan.

Afin de pouvoir se connecter à la base de données il faut aussi créer un utilisateur :

createuser opengeiger

Il est temps de créer notre base, celle-ci doit avoir le même nom que notre utilisateur :

createdb opengeiger

Nous pouvons nous y connecter avec :

psql -U opengeiger

Dans ce mode, nous pouvons lancer des commandes SQL. Pour quitter le mode SQL il suffit de faire :

\q

Nous allons créer une table de test :

CREATE TABLE mesures_test
(
    id SERIAL PRIMARY KEY,
    nb_coups INT,
    latitude DECIMAL,
    longitude DECIMAL,
    altitude DECIMAL,
    TIMESTAMP BIGINT
);

Note: Le type SERIAL est l'équivalent Postgresql de AUTO_INCREMENT de MySQL.

Et y inserer un élément de test :

INSERT INTO mesures_test VALUES (0, 10, 1564543, 1675561, 4567564, 4161657);

Pour tester que tout c'est bien passé nous pouvons afficher le contenu de la table :

SELECT * FROM mesures_test;

Une dernière modification est nécessaire pour pouvoir se connecter à la base. Dans le fichier pg_hba.conf du dossier database, il faut remplacer l'ip 127.0.0.1 par l'ip du workspace (echo $IP), dans notre cas : 127.9.201.1.

Il faut ensuite redémarrer la base. (kill -SIGTERM <PID>, puis la relancer)

Nous pouvons maintenant créer un fichier server.js :

var pg = require('pg');
 
var conStr = "postgres://opengeiger@localhost/opengeiger";
 
pg.connect(conStr, function(err, db, done) {
    if (err) {
       return console.error("Could not connect to PostgreSQL", err);
   }
   db.query("SELECT * FROM mesures_test", function(err, result) {
       done(); // Release db back to the pool
       if (err) {
           return console.error("Error while running query", err);
       }
       console.log(result);
   });
});

Si tout ce passe bien, en lançant le programme avec le bouton run de l'interface, la console devrait afficher le contenu de notre base de test.

Afficher les données

Pour vérifier que nos informations arrivent bien dans la base de donnée, nous aurons besoin d'un moyen d'afficher les données. Nous réaliserons cela avec le moteur de template express.

npm install express
wiki/projets/smartphone-geiger/backend.txt · Dernière modification: 2016/09/11 13:15 (modification externe)