<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://air.imag.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rama.Codazzi</id>
	<title>air - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://air.imag.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rama.Codazzi"/>
	<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php/Special:Contributions/Rama.Codazzi"/>
	<updated>2026-05-30T01:42:54Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:RapportProjetOpenSmartCampus2016.pdf&amp;diff=28113</id>
		<title>File:RapportProjetOpenSmartCampus2016.pdf</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:RapportProjetOpenSmartCampus2016.pdf&amp;diff=28113"/>
		<updated>2016-03-17T08:56:58Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus/tuto_meteor&amp;diff=28108</id>
		<title>Projets-2015-2016-OpenSmartCampus/tuto meteor</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus/tuto_meteor&amp;diff=28108"/>
		<updated>2016-03-17T08:43:32Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: Created page with &amp;quot;Nous allons, lors de ce tutoriel, utiliser un script (deploy_meteor.sh) dans le but de deployer l&amp;#039;application sur le serveur amazon. Vous pouvez néanmoins développer le proj...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nous allons, lors de ce tutoriel, utiliser un script (deploy_meteor.sh) dans le but de deployer l&#039;application sur le serveur amazon. Vous pouvez néanmoins développer le projet en local avant de passer au deployment sur un server&lt;br /&gt;
&lt;br /&gt;
Cloner le projet situé sur [https://github.com/quentin74/Smartcampus, GitHub]&lt;br /&gt;
 git clone https://github.com/quentin74/Smartcampus.git&lt;br /&gt;
Se placer dans le dossier Smartcampus/meteor :&lt;br /&gt;
 cd Smartcampus/meteor&lt;br /&gt;
&lt;br /&gt;
Ouvrir le fichier deploy_meteor.sh avec un éditeur :&lt;br /&gt;
&lt;br /&gt;
Dans ce fichier il faut changer la variable HOST en fonction de l&#039;adresse sur laquelle vous voulez déployer l&#039;application.&lt;br /&gt;
&lt;br /&gt;
Pour développer en local il faut installer Meteor et installer les packages : &lt;br /&gt;
&lt;br /&gt;
Installation des différents paquets nécessaires à la mise en place de l&#039;application :&lt;br /&gt;
 # curl https://install.meteor.com/ | sh&lt;br /&gt;
 # meteor add meteorhacks:npm&lt;br /&gt;
 # npm install mqtt --save&lt;br /&gt;
 # sudo npm install fs&lt;br /&gt;
 # meteor add bevanhunt:leaflet&lt;br /&gt;
&lt;br /&gt;
Pour passer en MQTTS, il faut modifier le fichier settings.json :&lt;br /&gt;
&lt;br /&gt;
 #&amp;quot;mqtt_options&amp;quot; : {&lt;br /&gt;
 #		&amp;quot;port&amp;quot;: &amp;lt;your port&amp;gt;,&lt;br /&gt;
 #		&amp;quot;host&amp;quot;: &amp;quot;&amp;lt;your host&amp;gt;&amp;quot;,&lt;br /&gt;
 #		&amp;quot;clientId&amp;quot;: &amp;quot;GEST&amp;quot;,&lt;br /&gt;
 #		&amp;quot;username&amp;quot;: &amp;quot;&amp;lt;your username&amp;gt;&amp;quot;,&lt;br /&gt;
 #		&amp;quot;password&amp;quot;: &amp;quot;&amp;lt;your password&amp;gt;&amp;quot;,&lt;br /&gt;
 #		&amp;quot;qos&amp;quot;:1,&lt;br /&gt;
 #		&amp;quot;keepalive&amp;quot;: 60,&lt;br /&gt;
 #		&amp;quot;reconnectPeriod&amp;quot;: 1000,&lt;br /&gt;
 #		&amp;quot;protocol&amp;quot;: &amp;quot;mqtts&amp;quot;,&lt;br /&gt;
 #		&amp;quot;protocolVersion&amp;quot;: 4,&lt;br /&gt;
 #		&amp;quot;clean&amp;quot;: true,&lt;br /&gt;
 #		&amp;quot;encoding&amp;quot;: &amp;quot;utf8&amp;quot;,&lt;br /&gt;
 #		&amp;quot;key&amp;quot; : &amp;quot;&amp;lt;your key&amp;gt;&amp;quot;,&lt;br /&gt;
 #		&amp;quot;ca&amp;quot; : &amp;quot;&amp;lt;your ca&amp;gt;&amp;quot;,&lt;br /&gt;
 #		&amp;quot;rejectUnauthorized&amp;quot;: false,&lt;br /&gt;
 #		&amp;quot;cert&amp;quot; :&amp;quot;&amp;lt;your cert&amp;gt;&amp;quot;&lt;br /&gt;
 #	}&lt;br /&gt;
&lt;br /&gt;
Intégration Kadira à l&#039;application Meteor, Dashboard disponible pour l&#039;administrateur&lt;br /&gt;
&lt;br /&gt;
Installation du package : &lt;br /&gt;
 # meteor add meteorhacks:kadira&lt;br /&gt;
&lt;br /&gt;
Ajout au settings.json&lt;br /&gt;
&lt;br /&gt;
 #&amp;quot;kadira&amp;quot;: { &lt;br /&gt;
 # &amp;quot;appId&amp;quot;: &amp;quot;&amp;lt;your id&amp;gt;&amp;quot;, &lt;br /&gt;
 # &amp;quot;appSecret&amp;quot;: &amp;quot;&amp;lt;your app&amp;gt;&amp;quot; &lt;br /&gt;
 #}&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28106</id>
		<title>Projets-2015-2016-OpenSmartCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28106"/>
		<updated>2016-03-17T08:30:08Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du Projet=&lt;br /&gt;
==Introduction==&lt;br /&gt;
Le projet nommé smart Campus est un projet étudiant visant à rendre un domaine universitaire intelligent. Il a vu le jour il y a 3 ans et il a comme but principal de rendre plus pratique la vie sur le campus ainsi que la gestion de celui-ci.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Le projet en 2014-2015 :&#039;&#039;&#039; [http://air.imag.fr/index.php/Proj-2014-2015-SmartCampus2015 &#039;&#039;&#039;SmartCampus2014-2015&#039;&#039;&#039;]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Le projet en 2013-2014 :&#039;&#039;&#039; [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi &#039;&#039;&#039;SmartCampus2013-2014&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur Raspberry Pi&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_raspi &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
Le tutoriel ci-dessus est un résumé des étapes décrites dans les sprint ci-dessous. Grâce à ce tutoriel on obtient rapidement le flux créé sur node-red les cartes dans l&#039;état nécessaire au fonctionnement de l&#039;application. Après l&#039;édition du fichier settings.json, la carte est prête à envoyer des données via MQTT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur serveur(s) Ubuntu 14.04&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_serveur &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application coté client via Meteor&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_meteor &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
==L&#039;équipe==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RICM5 : &#039;&#039;&#039;&lt;br /&gt;
*Quentin Torck&lt;br /&gt;
*Vivien Michel&lt;br /&gt;
*Jérémy Hammerer &lt;br /&gt;
*Rama Codazzi&lt;br /&gt;
*Zhengmeng Zhang&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT : &#039;&#039;&#039;&lt;br /&gt;
*Andréas Gillet-Pascal&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encadrants : &#039;&#039;&#039;&lt;br /&gt;
*Didier Donsez&lt;br /&gt;
*Vivien Quéma&lt;br /&gt;
&lt;br /&gt;
=Organisation du Projet=&lt;br /&gt;
Dans le but de mener à bien notre projet, nous avons décider d&#039;utiliser la méthode agile Scrum. Le projet étant à faire dans un court intervalle de temps (2 mois), nous avons décidé de faire des sprints d&#039;une semaine chacun.&lt;br /&gt;
&lt;br /&gt;
==Sprint 1 (du 25 Janvier au 31 Janvier)==&lt;br /&gt;
Matériel récupéré:&lt;br /&gt;
* Gateways&lt;br /&gt;
** [[Raspberry Pi]] 2 + Alimentation 5V DC&lt;br /&gt;
* [[ZWave]]&lt;br /&gt;
** Clé USB Sigma ZWave&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2921-aeon-labs-detecteur-multifonctions-6-en-1-multisensor-z-wave-plus-gen5-1220000013100.html Détecteur de présence Aeon-labs ZWave]&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2608-zipato-detecteur-z-wave-4-en-1-mouvement-ouverture-luminosite-tem-3858890730425.html Détecteur d&#039;ouverture Zipato ZWave]&lt;br /&gt;
*[[Rfxcom]]&lt;br /&gt;
** Récepteur RFXCom 443 MHz&lt;br /&gt;
** Station WMR88&lt;br /&gt;
** Sonde Oregon Hygro Baro&lt;br /&gt;
** Sonde Oregon Luminosité&lt;br /&gt;
** Sonde Oregon Thermo Hygro All Weather&lt;br /&gt;
* [[enOcean]]&lt;br /&gt;
* Digital Security Camera&lt;br /&gt;
** [[DLink DSC 5222L]] PTZ, UPnP&lt;br /&gt;
&lt;br /&gt;
Travail effectué:&lt;br /&gt;
** Etude de l&#039;existant&lt;br /&gt;
** Etude des données de la métro de Grenoble, savoir si l&#039;on peut leur apporter de nouvelles données ou non.&lt;br /&gt;
&lt;br /&gt;
A voir&lt;br /&gt;
* http://fablab.ensimag.fr/index.php/SmartCampus/FicheSuivi&lt;br /&gt;
* http://air.imag.fr/index.php/PM2M/2016/TP&lt;br /&gt;
* http://air.imag.fr/index.php/GrenobloisFut%C3%A9&lt;br /&gt;
&lt;br /&gt;
==Sprint 2 (du 1 Février au 7 Février)==&lt;br /&gt;
&lt;br /&gt;
Architecture réalisée avec Didier Donsez :&lt;br /&gt;
[[Image:Architecture_SmartCampus_2016.png|800px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
L&#039;utilisation de [http://www.angular-meteor.com/ Météor] avec une base de donnée MongoDB est possible . Une alternative à explorer est [http://sailsjs.org/ Sails.js]. Étant donné le caractère exploratoire de ce sprint, l&#039;architecture peut être amenée à changer. Notamment en ce qui concerne l&#039;utilisation de Météor ou la base de donnée MongoDB.&lt;br /&gt;
 &lt;br /&gt;
Taches : &lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de Météor et de [https://kadira.io/ Kadira] à travers des tutoriels. Installation locale pour l&#039;instant.&lt;br /&gt;
&lt;br /&gt;
*Installer un serveur Mosquito/MQTT(S) pour les communications avec les cartes&lt;br /&gt;
&lt;br /&gt;
*Installer Node-Red sur Rasberry PI : faire flux de reception/envoie entre la carte et le serveur MQTT : [http://nodered.org/docs/hardware/raspberrypi.html Tutoriel d&#039;installation Node-Red]&lt;br /&gt;
&lt;br /&gt;
[http://www.rs-online.com/designspark/electronics/eng/blog/building-distributed-node-red-applications-with-mqtt Tutoriel pour connecter Node-Red avec serveur MQTT]. Ceci est à adapter suivant la configuration dans settings.json&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/015f1c7463476d5e5fd8 Regarder ce flux existant proposant un envoie sécurisé sur le serveur]&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/bf9814b4c6bffda3c675 Regarder ce flux existant pour envoyer des données reçues par la Z-Wave]&lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de [https://www.twilio.com/ Twilio] pour l&#039;envoie de sms automatique depuis les cartes. Technologies JavaScript utilisable sur serveur Node.js&lt;br /&gt;
&lt;br /&gt;
=== Prendre en main sa rasberry pi à distance ===&lt;br /&gt;
http://www.framboise314.fr/prenez-la-main-a-distance-sur-votre-raspberry-pi-avec-vnc/&lt;br /&gt;
&lt;br /&gt;
===Installation sur Rasberry Pi Wheezy===&lt;br /&gt;
* Lancer node-red sur la rasberry-pi B+ grâce aux commandes suivantes dans un script. Sur l&#039;OS Debian wheezy. &lt;br /&gt;
 &lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #install nodered&lt;br /&gt;
 sudo apt-get  remove nodered&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
 # install Node-red&lt;br /&gt;
 sudo npm install -g --unsafe-perm node-red&lt;br /&gt;
 echo  nmp---------------------&amp;gt;[OK]&lt;br /&gt;
&lt;br /&gt;
Tentatives de démarrer le serveur au boot de la carte sur l&#039;OS Wheezy. Malgré plusieurs tentatives (utilisation de update.rc, de PM2) le serveur ne démarre pas au lancement.&lt;br /&gt;
&lt;br /&gt;
=== Utilisation de la plateforme AWS d&#039;Amazon ===&lt;br /&gt;
* Création d&#039;un compte gratuit sur Amazon d&#039;une validité d&#039;un an.&lt;br /&gt;
* Création d&#039;une machine virtuelle Ubuntu sur la plateforme.&lt;br /&gt;
* Installation et mise en marche d&#039;un serveur Mosquitto (broker) sur la machine virtuelle. (voir [http://mosquitto.org/2013/01/mosquitto-debian-repository/ installation])&lt;br /&gt;
&lt;br /&gt;
===Sur l&#039;OS Debian Jessie : Une version de node-red est pré-installée.===&lt;br /&gt;
&lt;br /&gt;
Pour passer de Wheezy à Jessie (solution adoptée) : installation de [https://www.raspberrypi.org/downloads/noobs/ NOOBS] puis de Debian Jessie via cet utilitaire. Il est nécessaire d&#039;avoir une carte SD vierge ou de la formater.&lt;br /&gt;
&lt;br /&gt;
Mise à jour des logiciels :&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
le système pré-installé sur Jessie permet de lancer au démarrage et, en cas de panne, de relancer le serveur node-red grâce à nodered.service.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;activer, taper la commande :&lt;br /&gt;
 sudo systemctl enable nodered.service&lt;br /&gt;
&lt;br /&gt;
===Installation des noeuds RFXcom pour le récepteur 433 Mhz et du noeud pour le récepteur Zwave===&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d&#039;installer npm pour ajouter des noeuds à node-red:&lt;br /&gt;
 sudo apt-get install npm&lt;br /&gt;
&lt;br /&gt;
Les noeuds sont à installer dans le dossier $HOME/.node-red/ pour qu&#039;un seul utilisateur y ai accès. La commande npm sans -g installera le noeud dans le dossier courant. Sinon avec l&#039;option -g et les droits root dans le dossier node_module/node-red. Pour que le noeud apparaisse, il faut redémarrer node-red.&lt;br /&gt;
&lt;br /&gt;
====Téléchargement du noeud RFXcom====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-rfxcom Noeud RfxCom]&lt;br /&gt;
&lt;br /&gt;
====Installation des noeuds Zwave====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-openzwave Noeud Zwave]&lt;br /&gt;
&lt;br /&gt;
Ce noeud dépend d&#039;une version d&#039;Openzwave avec nodejs : [https://github.com/OpenZWave/node-openzwave-shared node-openzave]. Il faut donc installer la librairie OpenZwave.&lt;br /&gt;
&lt;br /&gt;
Téléchargement de la version 1.4 [https://github.com/OpenZWave/open-zwave/releases/tag/v1.4 OpenZwave 1.4] en zip.&lt;br /&gt;
&lt;br /&gt;
Dans le répertoire décompressé.&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
La commande make, provoquant la compilation, peut mettre du temps.&lt;br /&gt;
Il est possible qu&#039;une librairie soit manquante et provoque une erreur.&lt;br /&gt;
&lt;br /&gt;
Pour y remédier :&lt;br /&gt;
 sudo apt-get install libudev-dev&lt;br /&gt;
&lt;br /&gt;
La commande make install copie les librairies openzwave dans /usr/local/lib. Si node-red n&#039;est pas dans /usr/local/lib/node_modules/ il faut déplacer les librairies dans /usr/lib/.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier la bonne installation, lors de lancement de node-red, un noeud Zwave in et Zwave out sont respectivement dans Input et Output.&lt;br /&gt;
&lt;br /&gt;
L&#039;installation du noeud peut provoquer une erreur si la version de nodejs est inférieure ou égale à 0.10.29&lt;br /&gt;
&lt;br /&gt;
====Configuration des ports====&lt;br /&gt;
&lt;br /&gt;
http://www.latelierdugeek.fr/2015/02/02/domotique-partie-8-ajout-du-support-du-z-wave-dans-domoticz/&lt;br /&gt;
&lt;br /&gt;
====Mettre à jour nodejs==== &lt;br /&gt;
 sudo apt-get remove nodered&lt;br /&gt;
 sudo apt-get remove nodejs nodejs-legacy&lt;br /&gt;
 sudo apt-get remove npm&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 2=====&lt;br /&gt;
 curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -&lt;br /&gt;
 sudo apt-get install -y build-essential python-dev python-rpi.gpio nodejs&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi=====&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
&lt;br /&gt;
Une fois nodejs mis à jour(nodejs -v &amp;gt; 0.12.x ou 4.2.x)&lt;br /&gt;
 sudo npm cache clean&lt;br /&gt;
 sudo npm install -g --unsafe-perm  node-red&lt;br /&gt;
&lt;br /&gt;
=====Remettre les scripts de lancement et de démarrage=====&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/quentin74/Smartcampus/master/node-red/nodered.service -O /lib/systemd/system/nodered.service&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop&lt;br /&gt;
 sudo chmod +x /usr/bin/node-red-st*&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
==Sprint 3 (du 8 Février au 14 Février)==&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;un VPN ===&lt;br /&gt;
Dans le but de pouvoir avancer plus facilement dans le projet, nous avons dû mettre en place un serveur VPN car les ports utilisés par MQTT sont bloqués sur le réseau de l&#039;université. Il est donc impossible pour une Raspberry Pi de communiquer avec un serveur mosquitto basé sur la plateforme AWS sans passer par un VPN (en utilisant le réseau de l&#039;université). L&#039;avantage d&#039;utiliser un VPN est aussi de sécuriser les communications entre les Raspberry pi et le serveur mosquitto. Les étapes de la mise en place de notre VPN sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
* Création d&#039;une nouvelle machine virtuelle dans le but d&#039;installer un serveur VPN openVPN dans le cluster d&#039;amazon (voir [https://www.youtube.com/watch?v=VWqRrMGHJQg installation]).&lt;br /&gt;
&lt;br /&gt;
* Installation d&#039;un client VPN sur une Raspberry&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&#039;une base de donnée [https://influxdata.com/ InfluxDB]===&lt;br /&gt;
&lt;br /&gt;
Installation sur le serveur amazone d&#039;une base InfluxDB:&lt;br /&gt;
 wget https://s3.amazonaws.com/influxdb/influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
 sudo dpkg -i influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
&lt;br /&gt;
===Installation de [http://grafana.org/download/ Grafana]===&lt;br /&gt;
Connexion avec la base InfluxDB et première visualisation de données émises par les capteurs météorologiques.&lt;br /&gt;
Avec ce Framework, nous pouvons visualiser l&#039;occupation d&#039;une salle ou non, en fonction des capteurs de présence.&lt;br /&gt;
&lt;br /&gt;
[[File:Grafana.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Nous pouvons également afficher des graphique pour voir les variations de température au cours du temps.&lt;br /&gt;
[[File:Grafana2.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
===Modification du flow Node-red===&lt;br /&gt;
Récupération d&#039;informations depuis le récepteur RfxCom et envoie vers le broker mqtt.&lt;br /&gt;
&lt;br /&gt;
==Sprint 4 (du 15 Février au 21 Février)==&lt;br /&gt;
===Mise en place de Meteor===&lt;br /&gt;
Installation des différents paquets nécessaires à la mise en place de l&#039;application&lt;br /&gt;
 # curl https://install.meteor.com/ | sh&lt;br /&gt;
 # meteor add meteorhacks:npm&lt;br /&gt;
 # npm install mqtt --save&lt;br /&gt;
 # sudo npm install fs&lt;br /&gt;
&lt;br /&gt;
[[File:meteor.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
===Mise en place de Leaflet===&lt;br /&gt;
&lt;br /&gt;
 # meteor add bevanhunt:leaflet&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
Cliquer sur une des 2 salles équipées et obtenir les informations en temps réels&lt;br /&gt;
&lt;br /&gt;
===Passage en MQTTS===&lt;br /&gt;
Changement du port de configuration sur le flow node-red : 1883 -&amp;gt; 8883&lt;br /&gt;
Activation du cryptage tls/ssl et désactivation de la vérification du certificat du serveur. En effet, tous les certificats générés sont auto-signés. Afin que la connexion puisse se faire il faut, soit un certificat signé par une autorité reconnue, soit désactiver la vérification.&lt;br /&gt;
&lt;br /&gt;
Pour Telegraf (voir installation ci-dessous)&lt;br /&gt;
&lt;br /&gt;
Changement du port et définition de la clé et du certificat pour la communication cryptée dans le fichier de configuration.&lt;br /&gt;
&lt;br /&gt;
Pour le broker mosquitto, nous avons changé le fichier config dans le but de pouvoir utiliser TLS/SSL. Le fichier config est complété comme suivant :&lt;br /&gt;
 # Place your local configuration in /etc/mosquitto/conf.d/&lt;br /&gt;
 #&lt;br /&gt;
 # A full description of the configuration file is at&lt;br /&gt;
 # /usr/share/doc/mosquitto/examples/mosquitto.conf.example&lt;br /&gt;
 pid_file /var/run/mosquitto.pid&lt;br /&gt;
 #TLS&lt;br /&gt;
 require_certificate false&lt;br /&gt;
 listener 8883&lt;br /&gt;
 cafile /etc/mosquitto/ca_certificates/ca.crt&lt;br /&gt;
 certfile /etc/mosquitto/certs/server.crt&lt;br /&gt;
 keyfile /etc/mosquitto/certs/server.key&lt;br /&gt;
 #&lt;br /&gt;
 persistence true&lt;br /&gt;
 persistence_location /var/lib/mosquitto/&lt;br /&gt;
 log_dest file /var/log/mosquitto/mosquitto.log&lt;br /&gt;
 include_dir /etc/mosquitto/conf.d&lt;br /&gt;
 allow_anonymous true&lt;br /&gt;
 password_file /etc/mosquitto/passwd&lt;br /&gt;
&lt;br /&gt;
===Passage en MQTTS coté Meteor===&lt;br /&gt;
&lt;br /&gt;
Il faut modifier le fichier settings.json&lt;br /&gt;
&lt;br /&gt;
 #&amp;quot;mqtt_options&amp;quot; : {&lt;br /&gt;
 #		&amp;quot;port&amp;quot;: &amp;lt;your port&amp;gt;,&lt;br /&gt;
 #		&amp;quot;host&amp;quot;: &amp;quot;&amp;lt;your host&amp;gt;&amp;quot;,&lt;br /&gt;
 #		&amp;quot;clientId&amp;quot;: &amp;quot;GEST&amp;quot;,&lt;br /&gt;
 #		&amp;quot;username&amp;quot;: &amp;quot;&amp;lt;your username&amp;gt;&amp;quot;,&lt;br /&gt;
 #		&amp;quot;password&amp;quot;: &amp;quot;&amp;lt;your password&amp;gt;&amp;quot;,&lt;br /&gt;
 #		&amp;quot;qos&amp;quot;:1,&lt;br /&gt;
 #		&amp;quot;keepalive&amp;quot;: 60,&lt;br /&gt;
 #		&amp;quot;reconnectPeriod&amp;quot;: 1000,&lt;br /&gt;
 #		&amp;quot;protocol&amp;quot;: &amp;quot;mqtts&amp;quot;,&lt;br /&gt;
 #		&amp;quot;protocolVersion&amp;quot;: 4,&lt;br /&gt;
 #		&amp;quot;clean&amp;quot;: true,&lt;br /&gt;
 #		&amp;quot;encoding&amp;quot;: &amp;quot;utf8&amp;quot;,&lt;br /&gt;
 #		&amp;quot;key&amp;quot; : &amp;quot;&amp;lt;your key&amp;gt;&amp;quot;,&lt;br /&gt;
 #		&amp;quot;ca&amp;quot; : &amp;quot;&amp;lt;your ca&amp;gt;&amp;quot;,&lt;br /&gt;
 #		&amp;quot;rejectUnauthorized&amp;quot;: false,&lt;br /&gt;
 #		&amp;quot;cert&amp;quot; :&amp;quot;&amp;lt;your cert&amp;gt;&amp;quot;&lt;br /&gt;
 #	}&lt;br /&gt;
&lt;br /&gt;
===Installation de [https://github.com/influxdata/telegraf Telegraf]===&lt;br /&gt;
La dernière release précompilée pour Ubuntu(0.10.2) ne contient pas le plugin &amp;quot;mqtt_consumer&amp;quot;. Elle ne sera disponible que dans la release 0.10.3. Il faut donc l&#039;installer depuis les sources si la version n&#039;est pas supérieur à 0.10.3.&lt;br /&gt;
Afin de faciliter le démarrage automatique de Telegraf, on installe via le package debian puis on remplacera l&#039;exécutable par une version plus récente:&lt;br /&gt;
 &lt;br /&gt;
[http://get.influxdb.org/telegraf/telegraf_0.10.3-1_amd64.deb Dernière version disponible actuellement]&lt;br /&gt;
&lt;br /&gt;
====Installation de GO====&lt;br /&gt;
Sur AWS, une version de go est pré-existante mais non fonctionnelle car non à jour.&lt;br /&gt;
 sudo rm /usr/bin/go&lt;br /&gt;
&lt;br /&gt;
Choisir la dernière version de go : [https://golang.org/dl/ GO]&lt;br /&gt;
&lt;br /&gt;
Décompresser l&#039;archive:&lt;br /&gt;
 tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz&lt;br /&gt;
&lt;br /&gt;
Ajouter dans /etc/profile ou $HOME/.profile. L&#039;exemple ci-dessous n&#039;est fonctionnel que si vous avez décompréssé dans /usr/local:&lt;br /&gt;
 export PATH=$PATH:/usr/local/go/bin&lt;br /&gt;
&lt;br /&gt;
Créer la variable GOPATH:&lt;br /&gt;
  export GOPATH=&amp;lt;YOUR_PATH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Télécharger les sources:&lt;br /&gt;
 go get github.com/influxdata/telegraf&lt;br /&gt;
&lt;br /&gt;
Aller dans le dossier de téléchargements:&lt;br /&gt;
 cd $GOPATH/src/github.com/influxdata/telegraf&lt;br /&gt;
 make&lt;br /&gt;
 sudo cp telegraf /usr/bin/&lt;br /&gt;
&lt;br /&gt;
====Configuration de Telegraf====&lt;br /&gt;
&lt;br /&gt;
Un exemple de fichier de configuration est obtenu via la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 telegraf -sample-config -input-filter mqtt_consumer -output-filter influxdb &amp;gt; YOUR_FILE.conf&lt;br /&gt;
[https://github.com/influxdata/telegraf/tree/master/plugins/inputs/mqtt_consumer Exemple configuration mqtt]&lt;br /&gt;
&lt;br /&gt;
Changez l&#039;adresse et le port du broker mqtt et de la base influxDB. Choissez les topics auxquels souscrire, le format des données reçu de la part du broker (json,influx...) &lt;br /&gt;
&lt;br /&gt;
Si vous utilisez des certificats auto-signés ne pas oublier&lt;br /&gt;
 skip_verify_ssl = true&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration lu au démarrage se situe dans :&lt;br /&gt;
 /etc/telegraf&lt;br /&gt;
&lt;br /&gt;
Pour renommer le fichier de configuration lu au démarrage :&lt;br /&gt;
 sudo nano /etc/init.d/telegraf&lt;br /&gt;
&lt;br /&gt;
Changer la ligne avec la variable confile=/etc/telegraf/YOUR_FILE.conf&lt;br /&gt;
&lt;br /&gt;
===Passage d&#039;influxDB en https===&lt;br /&gt;
Dans le fichier /etc/influxdb/infludb.conf :&lt;br /&gt;
&lt;br /&gt;
Modifier les attributs de [admin] et [http] en mettant https = true et le chemin vers la clé/certificat pour influxDB. Une subtilité est à retenir pour influxDB ssl. En effet, la clé et le certificat doivent être dans le même fichier :&lt;br /&gt;
 cat key.pem crt.pem &amp;gt; key_crt.pem&lt;br /&gt;
&lt;br /&gt;
==Sprint 5 (du 29 Février au 6 Mars)==&lt;br /&gt;
&lt;br /&gt;
=== Ajout de Widget dans grafana integrant cartographie leaflet ===&lt;br /&gt;
Attention --&amp;gt; cette tache ne sera pas réalisée car sur le forum de grafana ou d&#039;autres nous avons vu qu&#039;intégrer de la cartographie était dans les projet à venir de grafana, par consequent il est inutile de perdre du temps sur une tache qui sera prochainement réalisée.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;une PKI ===&lt;br /&gt;
&lt;br /&gt;
Une PKI (Public Key Infrastructure) permet de gérer la création, la récupération et la révocation de certificats. Nous avons, dans le cadre de la sécurisation de notre plateforme, d&#039;en créer une dans le but de fournir des certificats à nos différentes machines. Nous avons décider de suivre le tutoriel suivant :&lt;br /&gt;
* Mise en place d&#039;une d&#039;une PKI: http://stankiewicz.free.fr/Wikka/wikka.php?wakka=HowtoPKI&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé à travailler sur ce tutoriel. Cependant, celui-ci semble être obsolète (certaines technologies semblent avoir évoluées depuis et donc certaines actions du tutoriel ne fonctionnent plus). Nous avons perdu beaucoup de temps à essayer de résoudre ces problèmes.&lt;br /&gt;
&lt;br /&gt;
===Configuration d&#039;OpenVPN, dans le but d&#039;ajouter de nouveaux utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
Au départ, nous avions alloué une instance Amazon dédiée à OpenVPN. Plus précisément, c&#039;était une image dans laquelle OpenVPN était préinstallé. Nous n&#039;arrivions pas à ajouter de nouveaux utilisateurs pour ce VPN avec cette instance. Nous avons donc décidé de supprimer l&#039;instance Amazon d&#039;OpenVPN et de l&#039;installer par nous même sur notre instance principale. Après avoir fait cela, nous arrivions à créer différents utilisateurs pour notre VPN. Cependant, nous avons remarqué qu&#039;OpenVPN limite le nombre de connexions à deux utilisateurs maximum (en même temps).&lt;br /&gt;
&lt;br /&gt;
==Sprint 6 (du 7 Mars au 13 Mars)==&lt;br /&gt;
Equipement des salles avec les raspberry pi , les capteurs enocean, les capteurs Zwave&lt;br /&gt;
&lt;br /&gt;
Ajout de fichier de configuration dans l&#039;application meteor, pour faciliter le déploiement. Ajout par exemple de chemins génériques.&lt;br /&gt;
&lt;br /&gt;
Intégration Kadira à l&#039;application Meteor, Dashboard disponible pour l&#039;administrateur&lt;br /&gt;
&lt;br /&gt;
Installation du package : &lt;br /&gt;
 # meteor add meteorhacks:kadira&lt;br /&gt;
&lt;br /&gt;
Ajout au settings.json&lt;br /&gt;
&lt;br /&gt;
 #&amp;quot;kadira&amp;quot;: { &lt;br /&gt;
 # &amp;quot;appId&amp;quot;: &amp;quot;&amp;lt;your id&amp;gt;&amp;quot;, &lt;br /&gt;
 # &amp;quot;appSecret&amp;quot;: &amp;quot;&amp;lt;your app&amp;gt;&amp;quot; &lt;br /&gt;
 #}&lt;br /&gt;
&lt;br /&gt;
[[File:kadira.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Sprint 7 (du 14 Mars au 17 Mars)==&lt;br /&gt;
* Pour lancer l&#039;application Meteor : lancer le script deploy_meteor.sh : attention à modifier le Host pour deployer sur votre serveur&lt;br /&gt;
* Equipement des salles air et fablab avec les capteurs Zwave, Rfxcom&lt;br /&gt;
* Contact des administrateurs réseaux de Polytech pour pouvoir débloquer les ports&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28105</id>
		<title>Projets-2015-2016-OpenSmartCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28105"/>
		<updated>2016-03-17T08:25:30Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Passage en MQTTS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du Projet=&lt;br /&gt;
==Introduction==&lt;br /&gt;
Le projet nommé smart Campus est un projet étudiant visant à rendre un domaine universitaire intelligent. Il a vu le jour il y a 3 ans et il a comme but principal de rendre plus pratique la vie sur le campus ainsi que la gestion de celui-ci.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Le projet en 2014-2015 :&#039;&#039;&#039; [http://air.imag.fr/index.php/Proj-2014-2015-SmartCampus2015 &#039;&#039;&#039;SmartCampus2014-2015&#039;&#039;&#039;]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Le projet en 2013-2014 :&#039;&#039;&#039; [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi &#039;&#039;&#039;SmartCampus2013-2014&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur Raspberry Pi&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_raspi &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
Le tutoriel ci-dessus est un résumé des étapes décrites dans les sprint ci-dessous. Grâce à ce tutoriel on obtient rapidement le flux créé sur node-red les cartes dans l&#039;état nécessaire au fonctionnement de l&#039;application. Après l&#039;édition du fichier settings.json, la carte est prête à envoyer des données via MQTT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur serveur(s) Ubuntu 14.04&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_serveur &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
==L&#039;équipe==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RICM5 : &#039;&#039;&#039;&lt;br /&gt;
*Quentin Torck&lt;br /&gt;
*Vivien Michel&lt;br /&gt;
*Jérémy Hammerer &lt;br /&gt;
*Rama Codazzi&lt;br /&gt;
*Zhengmeng Zhang&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT : &#039;&#039;&#039;&lt;br /&gt;
*Andréas Gillet-Pascal&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encadrants : &#039;&#039;&#039;&lt;br /&gt;
*Didier Donsez&lt;br /&gt;
*Vivien Quéma&lt;br /&gt;
&lt;br /&gt;
=Organisation du Projet=&lt;br /&gt;
Dans le but de mener à bien notre projet, nous avons décider d&#039;utiliser la méthode agile Scrum. Le projet étant à faire dans un court intervalle de temps (2 mois), nous avons décidé de faire des sprints d&#039;une semaine chacun.&lt;br /&gt;
&lt;br /&gt;
==Sprint 1 (du 25 Janvier au 31 Janvier)==&lt;br /&gt;
Matériel récupéré:&lt;br /&gt;
* Gateways&lt;br /&gt;
** [[Raspberry Pi]] 2 + Alimentation 5V DC&lt;br /&gt;
* [[ZWave]]&lt;br /&gt;
** Clé USB Sigma ZWave&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2921-aeon-labs-detecteur-multifonctions-6-en-1-multisensor-z-wave-plus-gen5-1220000013100.html Détecteur de présence Aeon-labs ZWave]&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2608-zipato-detecteur-z-wave-4-en-1-mouvement-ouverture-luminosite-tem-3858890730425.html Détecteur d&#039;ouverture Zipato ZWave]&lt;br /&gt;
*[[Rfxcom]]&lt;br /&gt;
** Récepteur RFXCom 443 MHz&lt;br /&gt;
** Station WMR88&lt;br /&gt;
** Sonde Oregon Hygro Baro&lt;br /&gt;
** Sonde Oregon Luminosité&lt;br /&gt;
** Sonde Oregon Thermo Hygro All Weather&lt;br /&gt;
* [[enOcean]]&lt;br /&gt;
* Digital Security Camera&lt;br /&gt;
** [[DLink DSC 5222L]] PTZ, UPnP&lt;br /&gt;
&lt;br /&gt;
Travail effectué:&lt;br /&gt;
** Etude de l&#039;existant&lt;br /&gt;
** Etude des données de la métro de Grenoble, savoir si l&#039;on peut leur apporter de nouvelles données ou non.&lt;br /&gt;
&lt;br /&gt;
A voir&lt;br /&gt;
* http://fablab.ensimag.fr/index.php/SmartCampus/FicheSuivi&lt;br /&gt;
* http://air.imag.fr/index.php/PM2M/2016/TP&lt;br /&gt;
* http://air.imag.fr/index.php/GrenobloisFut%C3%A9&lt;br /&gt;
&lt;br /&gt;
==Sprint 2 (du 1 Février au 7 Février)==&lt;br /&gt;
&lt;br /&gt;
Architecture réalisée avec Didier Donsez :&lt;br /&gt;
[[Image:Architecture_SmartCampus_2016.png|800px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
L&#039;utilisation de [http://www.angular-meteor.com/ Météor] avec une base de donnée MongoDB est possible . Une alternative à explorer est [http://sailsjs.org/ Sails.js]. Étant donné le caractère exploratoire de ce sprint, l&#039;architecture peut être amenée à changer. Notamment en ce qui concerne l&#039;utilisation de Météor ou la base de donnée MongoDB.&lt;br /&gt;
 &lt;br /&gt;
Taches : &lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de Météor et de [https://kadira.io/ Kadira] à travers des tutoriels. Installation locale pour l&#039;instant.&lt;br /&gt;
&lt;br /&gt;
*Installer un serveur Mosquito/MQTT(S) pour les communications avec les cartes&lt;br /&gt;
&lt;br /&gt;
*Installer Node-Red sur Rasberry PI : faire flux de reception/envoie entre la carte et le serveur MQTT : [http://nodered.org/docs/hardware/raspberrypi.html Tutoriel d&#039;installation Node-Red]&lt;br /&gt;
&lt;br /&gt;
[http://www.rs-online.com/designspark/electronics/eng/blog/building-distributed-node-red-applications-with-mqtt Tutoriel pour connecter Node-Red avec serveur MQTT]. Ceci est à adapter suivant la configuration dans settings.json&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/015f1c7463476d5e5fd8 Regarder ce flux existant proposant un envoie sécurisé sur le serveur]&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/bf9814b4c6bffda3c675 Regarder ce flux existant pour envoyer des données reçues par la Z-Wave]&lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de [https://www.twilio.com/ Twilio] pour l&#039;envoie de sms automatique depuis les cartes. Technologies JavaScript utilisable sur serveur Node.js&lt;br /&gt;
&lt;br /&gt;
=== Prendre en main sa rasberry pi à distance ===&lt;br /&gt;
http://www.framboise314.fr/prenez-la-main-a-distance-sur-votre-raspberry-pi-avec-vnc/&lt;br /&gt;
&lt;br /&gt;
===Installation sur Rasberry Pi Wheezy===&lt;br /&gt;
* Lancer node-red sur la rasberry-pi B+ grâce aux commandes suivantes dans un script. Sur l&#039;OS Debian wheezy. &lt;br /&gt;
 &lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #install nodered&lt;br /&gt;
 sudo apt-get  remove nodered&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
 # install Node-red&lt;br /&gt;
 sudo npm install -g --unsafe-perm node-red&lt;br /&gt;
 echo  nmp---------------------&amp;gt;[OK]&lt;br /&gt;
&lt;br /&gt;
Tentatives de démarrer le serveur au boot de la carte sur l&#039;OS Wheezy. Malgré plusieurs tentatives (utilisation de update.rc, de PM2) le serveur ne démarre pas au lancement.&lt;br /&gt;
&lt;br /&gt;
=== Utilisation de la plateforme AWS d&#039;Amazon ===&lt;br /&gt;
* Création d&#039;un compte gratuit sur Amazon d&#039;une validité d&#039;un an.&lt;br /&gt;
* Création d&#039;une machine virtuelle Ubuntu sur la plateforme.&lt;br /&gt;
* Installation et mise en marche d&#039;un serveur Mosquitto (broker) sur la machine virtuelle. (voir [http://mosquitto.org/2013/01/mosquitto-debian-repository/ installation])&lt;br /&gt;
&lt;br /&gt;
===Sur l&#039;OS Debian Jessie : Une version de node-red est pré-installée.===&lt;br /&gt;
&lt;br /&gt;
Pour passer de Wheezy à Jessie (solution adoptée) : installation de [https://www.raspberrypi.org/downloads/noobs/ NOOBS] puis de Debian Jessie via cet utilitaire. Il est nécessaire d&#039;avoir une carte SD vierge ou de la formater.&lt;br /&gt;
&lt;br /&gt;
Mise à jour des logiciels :&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
le système pré-installé sur Jessie permet de lancer au démarrage et, en cas de panne, de relancer le serveur node-red grâce à nodered.service.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;activer, taper la commande :&lt;br /&gt;
 sudo systemctl enable nodered.service&lt;br /&gt;
&lt;br /&gt;
===Installation des noeuds RFXcom pour le récepteur 433 Mhz et du noeud pour le récepteur Zwave===&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d&#039;installer npm pour ajouter des noeuds à node-red:&lt;br /&gt;
 sudo apt-get install npm&lt;br /&gt;
&lt;br /&gt;
Les noeuds sont à installer dans le dossier $HOME/.node-red/ pour qu&#039;un seul utilisateur y ai accès. La commande npm sans -g installera le noeud dans le dossier courant. Sinon avec l&#039;option -g et les droits root dans le dossier node_module/node-red. Pour que le noeud apparaisse, il faut redémarrer node-red.&lt;br /&gt;
&lt;br /&gt;
====Téléchargement du noeud RFXcom====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-rfxcom Noeud RfxCom]&lt;br /&gt;
&lt;br /&gt;
====Installation des noeuds Zwave====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-openzwave Noeud Zwave]&lt;br /&gt;
&lt;br /&gt;
Ce noeud dépend d&#039;une version d&#039;Openzwave avec nodejs : [https://github.com/OpenZWave/node-openzwave-shared node-openzave]. Il faut donc installer la librairie OpenZwave.&lt;br /&gt;
&lt;br /&gt;
Téléchargement de la version 1.4 [https://github.com/OpenZWave/open-zwave/releases/tag/v1.4 OpenZwave 1.4] en zip.&lt;br /&gt;
&lt;br /&gt;
Dans le répertoire décompressé.&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
La commande make, provoquant la compilation, peut mettre du temps.&lt;br /&gt;
Il est possible qu&#039;une librairie soit manquante et provoque une erreur.&lt;br /&gt;
&lt;br /&gt;
Pour y remédier :&lt;br /&gt;
 sudo apt-get install libudev-dev&lt;br /&gt;
&lt;br /&gt;
La commande make install copie les librairies openzwave dans /usr/local/lib. Si node-red n&#039;est pas dans /usr/local/lib/node_modules/ il faut déplacer les librairies dans /usr/lib/.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier la bonne installation, lors de lancement de node-red, un noeud Zwave in et Zwave out sont respectivement dans Input et Output.&lt;br /&gt;
&lt;br /&gt;
L&#039;installation du noeud peut provoquer une erreur si la version de nodejs est inférieure ou égale à 0.10.29&lt;br /&gt;
&lt;br /&gt;
====Configuration des ports====&lt;br /&gt;
&lt;br /&gt;
http://www.latelierdugeek.fr/2015/02/02/domotique-partie-8-ajout-du-support-du-z-wave-dans-domoticz/&lt;br /&gt;
&lt;br /&gt;
====Mettre à jour nodejs==== &lt;br /&gt;
 sudo apt-get remove nodered&lt;br /&gt;
 sudo apt-get remove nodejs nodejs-legacy&lt;br /&gt;
 sudo apt-get remove npm&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 2=====&lt;br /&gt;
 curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -&lt;br /&gt;
 sudo apt-get install -y build-essential python-dev python-rpi.gpio nodejs&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi=====&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
&lt;br /&gt;
Une fois nodejs mis à jour(nodejs -v &amp;gt; 0.12.x ou 4.2.x)&lt;br /&gt;
 sudo npm cache clean&lt;br /&gt;
 sudo npm install -g --unsafe-perm  node-red&lt;br /&gt;
&lt;br /&gt;
=====Remettre les scripts de lancement et de démarrage=====&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/quentin74/Smartcampus/master/node-red/nodered.service -O /lib/systemd/system/nodered.service&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop&lt;br /&gt;
 sudo chmod +x /usr/bin/node-red-st*&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
==Sprint 3 (du 8 Février au 14 Février)==&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;un VPN ===&lt;br /&gt;
Dans le but de pouvoir avancer plus facilement dans le projet, nous avons dû mettre en place un serveur VPN car les ports utilisés par MQTT sont bloqués sur le réseau de l&#039;université. Il est donc impossible pour une Raspberry Pi de communiquer avec un serveur mosquitto basé sur la plateforme AWS sans passer par un VPN (en utilisant le réseau de l&#039;université). L&#039;avantage d&#039;utiliser un VPN est aussi de sécuriser les communications entre les Raspberry pi et le serveur mosquitto. Les étapes de la mise en place de notre VPN sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
* Création d&#039;une nouvelle machine virtuelle dans le but d&#039;installer un serveur VPN openVPN dans le cluster d&#039;amazon (voir [https://www.youtube.com/watch?v=VWqRrMGHJQg installation]).&lt;br /&gt;
&lt;br /&gt;
* Installation d&#039;un client VPN sur une Raspberry&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&#039;une base de donnée [https://influxdata.com/ InfluxDB]===&lt;br /&gt;
&lt;br /&gt;
Installation sur le serveur amazone d&#039;une base InfluxDB:&lt;br /&gt;
 wget https://s3.amazonaws.com/influxdb/influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
 sudo dpkg -i influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
&lt;br /&gt;
===Installation de [http://grafana.org/download/ Grafana]===&lt;br /&gt;
Connexion avec la base InfluxDB et première visualisation de données émises par les capteurs météorologiques.&lt;br /&gt;
Avec ce Framework, nous pouvons visualiser l&#039;occupation d&#039;une salle ou non, en fonction des capteurs de présence.&lt;br /&gt;
&lt;br /&gt;
[[File:Grafana.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Nous pouvons également afficher des graphique pour voir les variations de température au cours du temps.&lt;br /&gt;
[[File:Grafana2.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
===Modification du flow Node-red===&lt;br /&gt;
Récupération d&#039;informations depuis le récepteur RfxCom et envoie vers le broker mqtt.&lt;br /&gt;
&lt;br /&gt;
==Sprint 4 (du 15 Février au 21 Février)==&lt;br /&gt;
===Mise en place de Meteor===&lt;br /&gt;
Installation des différents paquets nécessaires à la mise en place de l&#039;application&lt;br /&gt;
 # curl https://install.meteor.com/ | sh&lt;br /&gt;
 # meteor add meteorhacks:npm&lt;br /&gt;
 # npm install mqtt --save&lt;br /&gt;
 # sudo npm install fs&lt;br /&gt;
&lt;br /&gt;
[[File:meteor.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
===Mise en place de Leaflet===&lt;br /&gt;
&lt;br /&gt;
 # meteor add bevanhunt:leaflet&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
Cliquer sur une des 2 salles équipées et obtenir les informations en temps réels&lt;br /&gt;
&lt;br /&gt;
===Passage en MQTTS===&lt;br /&gt;
Changement du port de configuration sur le flow node-red : 1883 -&amp;gt; 8883&lt;br /&gt;
Activation du cryptage tls/ssl et désactivation de la vérification du certificat du serveur. En effet, tous les certificats générés sont auto-signés. Afin que la connexion puisse se faire il faut, soit un certificat signé par une autorité reconnue, soit désactiver la vérification.&lt;br /&gt;
&lt;br /&gt;
Pour Telegraf (voir installation ci-dessous)&lt;br /&gt;
&lt;br /&gt;
Changement du port et définition de la clé et du certificat pour la communication cryptée dans le fichier de configuration.&lt;br /&gt;
&lt;br /&gt;
Pour le broker mosquitto, nous avons changé le fichier config dans le but de pouvoir utiliser TLS/SSL. Le fichier config est complété comme suivant :&lt;br /&gt;
 # Place your local configuration in /etc/mosquitto/conf.d/&lt;br /&gt;
 #&lt;br /&gt;
 # A full description of the configuration file is at&lt;br /&gt;
 # /usr/share/doc/mosquitto/examples/mosquitto.conf.example&lt;br /&gt;
 pid_file /var/run/mosquitto.pid&lt;br /&gt;
 #TLS&lt;br /&gt;
 require_certificate false&lt;br /&gt;
 listener 8883&lt;br /&gt;
 cafile /etc/mosquitto/ca_certificates/ca.crt&lt;br /&gt;
 certfile /etc/mosquitto/certs/server.crt&lt;br /&gt;
 keyfile /etc/mosquitto/certs/server.key&lt;br /&gt;
 #&lt;br /&gt;
 persistence true&lt;br /&gt;
 persistence_location /var/lib/mosquitto/&lt;br /&gt;
 log_dest file /var/log/mosquitto/mosquitto.log&lt;br /&gt;
 include_dir /etc/mosquitto/conf.d&lt;br /&gt;
 allow_anonymous true&lt;br /&gt;
 password_file /etc/mosquitto/passwd&lt;br /&gt;
&lt;br /&gt;
===Passage en MQTTS coté Meteor===&lt;br /&gt;
&lt;br /&gt;
Il faut modifier le fichier settings.json&lt;br /&gt;
&lt;br /&gt;
 #&amp;quot;mqtt_options&amp;quot; : {&lt;br /&gt;
 #		&amp;quot;port&amp;quot;: &amp;lt;your port&amp;gt;,&lt;br /&gt;
 #		&amp;quot;host&amp;quot;: &amp;quot;&amp;lt;your host&amp;gt;&amp;quot;,&lt;br /&gt;
 #		&amp;quot;clientId&amp;quot;: &amp;quot;GEST&amp;quot;,&lt;br /&gt;
 #		&amp;quot;username&amp;quot;: &amp;quot;&amp;lt;your username&amp;gt;&amp;quot;,&lt;br /&gt;
 #		&amp;quot;password&amp;quot;: &amp;quot;&amp;lt;your password&amp;gt;&amp;quot;,&lt;br /&gt;
 #		&amp;quot;qos&amp;quot;:1,&lt;br /&gt;
 #		&amp;quot;keepalive&amp;quot;: 60,&lt;br /&gt;
 #		&amp;quot;reconnectPeriod&amp;quot;: 1000,&lt;br /&gt;
 #		&amp;quot;protocol&amp;quot;: &amp;quot;mqtts&amp;quot;,&lt;br /&gt;
 #		&amp;quot;protocolVersion&amp;quot;: 4,&lt;br /&gt;
 #		&amp;quot;clean&amp;quot;: true,&lt;br /&gt;
 #		&amp;quot;encoding&amp;quot;: &amp;quot;utf8&amp;quot;,&lt;br /&gt;
 #		&amp;quot;key&amp;quot; : &amp;quot;&amp;lt;your key&amp;gt;&amp;quot;,&lt;br /&gt;
 #		&amp;quot;ca&amp;quot; : &amp;quot;&amp;lt;your ca&amp;gt;&amp;quot;,&lt;br /&gt;
 #		&amp;quot;rejectUnauthorized&amp;quot;: false,&lt;br /&gt;
 #		&amp;quot;cert&amp;quot; :&amp;quot;&amp;lt;your cert&amp;gt;&amp;quot;&lt;br /&gt;
 #	}&lt;br /&gt;
&lt;br /&gt;
===Installation de [https://github.com/influxdata/telegraf Telegraf]===&lt;br /&gt;
La dernière release précompilée pour Ubuntu(0.10.2) ne contient pas le plugin &amp;quot;mqtt_consumer&amp;quot;. Elle ne sera disponible que dans la release 0.10.3. Il faut donc l&#039;installer depuis les sources si la version n&#039;est pas supérieur à 0.10.3.&lt;br /&gt;
Afin de faciliter le démarrage automatique de Telegraf, on installe via le package debian puis on remplacera l&#039;exécutable par une version plus récente:&lt;br /&gt;
 &lt;br /&gt;
[http://get.influxdb.org/telegraf/telegraf_0.10.3-1_amd64.deb Dernière version disponible actuellement]&lt;br /&gt;
&lt;br /&gt;
====Installation de GO====&lt;br /&gt;
Sur AWS, une version de go est pré-existante mais non fonctionnelle car non à jour.&lt;br /&gt;
 sudo rm /usr/bin/go&lt;br /&gt;
&lt;br /&gt;
Choisir la dernière version de go : [https://golang.org/dl/ GO]&lt;br /&gt;
&lt;br /&gt;
Décompresser l&#039;archive:&lt;br /&gt;
 tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz&lt;br /&gt;
&lt;br /&gt;
Ajouter dans /etc/profile ou $HOME/.profile. L&#039;exemple ci-dessous n&#039;est fonctionnel que si vous avez décompréssé dans /usr/local:&lt;br /&gt;
 export PATH=$PATH:/usr/local/go/bin&lt;br /&gt;
&lt;br /&gt;
Créer la variable GOPATH:&lt;br /&gt;
  export GOPATH=&amp;lt;YOUR_PATH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Télécharger les sources:&lt;br /&gt;
 go get github.com/influxdata/telegraf&lt;br /&gt;
&lt;br /&gt;
Aller dans le dossier de téléchargements:&lt;br /&gt;
 cd $GOPATH/src/github.com/influxdata/telegraf&lt;br /&gt;
 make&lt;br /&gt;
 sudo cp telegraf /usr/bin/&lt;br /&gt;
&lt;br /&gt;
====Configuration de Telegraf====&lt;br /&gt;
&lt;br /&gt;
Un exemple de fichier de configuration est obtenu via la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 telegraf -sample-config -input-filter mqtt_consumer -output-filter influxdb &amp;gt; YOUR_FILE.conf&lt;br /&gt;
[https://github.com/influxdata/telegraf/tree/master/plugins/inputs/mqtt_consumer Exemple configuration mqtt]&lt;br /&gt;
&lt;br /&gt;
Changez l&#039;adresse et le port du broker mqtt et de la base influxDB. Choissez les topics auxquels souscrire, le format des données reçu de la part du broker (json,influx...) &lt;br /&gt;
&lt;br /&gt;
Si vous utilisez des certificats auto-signés ne pas oublier&lt;br /&gt;
 skip_verify_ssl = true&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration lu au démarrage se situe dans :&lt;br /&gt;
 /etc/telegraf&lt;br /&gt;
&lt;br /&gt;
Pour renommer le fichier de configuration lu au démarrage :&lt;br /&gt;
 sudo nano /etc/init.d/telegraf&lt;br /&gt;
&lt;br /&gt;
Changer la ligne avec la variable confile=/etc/telegraf/YOUR_FILE.conf&lt;br /&gt;
&lt;br /&gt;
===Passage d&#039;influxDB en https===&lt;br /&gt;
Dans le fichier /etc/influxdb/infludb.conf :&lt;br /&gt;
&lt;br /&gt;
Modifier les attributs de [admin] et [http] en mettant https = true et le chemin vers la clé/certificat pour influxDB. Une subtilité est à retenir pour influxDB ssl. En effet, la clé et le certificat doivent être dans le même fichier :&lt;br /&gt;
 cat key.pem crt.pem &amp;gt; key_crt.pem&lt;br /&gt;
&lt;br /&gt;
==Sprint 5 (du 29 Février au 6 Mars)==&lt;br /&gt;
&lt;br /&gt;
=== Ajout de Widget dans grafana integrant cartographie leaflet ===&lt;br /&gt;
Attention --&amp;gt; cette tache ne sera pas réalisée car sur le forum de grafana ou d&#039;autres nous avons vu qu&#039;intégrer de la cartographie était dans les projet à venir de grafana, par consequent il est inutile de perdre du temps sur une tache qui sera prochainement réalisée.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;une PKI ===&lt;br /&gt;
&lt;br /&gt;
Une PKI (Public Key Infrastructure) permet de gérer la création, la récupération et la révocation de certificats. Nous avons, dans le cadre de la sécurisation de notre plateforme, d&#039;en créer une dans le but de fournir des certificats à nos différentes machines. Nous avons décider de suivre le tutoriel suivant :&lt;br /&gt;
* Mise en place d&#039;une d&#039;une PKI: http://stankiewicz.free.fr/Wikka/wikka.php?wakka=HowtoPKI&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé à travailler sur ce tutoriel. Cependant, celui-ci semble être obsolète (certaines technologies semblent avoir évoluées depuis et donc certaines actions du tutoriel ne fonctionnent plus). Nous avons perdu beaucoup de temps à essayer de résoudre ces problèmes.&lt;br /&gt;
&lt;br /&gt;
===Configuration d&#039;OpenVPN, dans le but d&#039;ajouter de nouveaux utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
Au départ, nous avions alloué une instance Amazon dédiée à OpenVPN. Plus précisément, c&#039;était une image dans laquelle OpenVPN était préinstallé. Nous n&#039;arrivions pas à ajouter de nouveaux utilisateurs pour ce VPN avec cette instance. Nous avons donc décidé de supprimer l&#039;instance Amazon d&#039;OpenVPN et de l&#039;installer par nous même sur notre instance principale. Après avoir fait cela, nous arrivions à créer différents utilisateurs pour notre VPN. Cependant, nous avons remarqué qu&#039;OpenVPN limite le nombre de connexions à deux utilisateurs maximum (en même temps).&lt;br /&gt;
&lt;br /&gt;
==Sprint 6 (du 7 Mars au 13 Mars)==&lt;br /&gt;
Equipement des salles avec les raspberry pi , les capteurs enocean, les capteurs Zwave&lt;br /&gt;
&lt;br /&gt;
Ajout de fichier de configuration dans l&#039;application meteor, pour faciliter le déploiement. Ajout par exemple de chemins génériques.&lt;br /&gt;
&lt;br /&gt;
Intégration Kadira à l&#039;application Meteor, Dashboard disponible pour l&#039;administrateur&lt;br /&gt;
&lt;br /&gt;
Installation du package : &lt;br /&gt;
 # meteor add meteorhacks:kadira&lt;br /&gt;
&lt;br /&gt;
Ajout au settings.json&lt;br /&gt;
&lt;br /&gt;
 #&amp;quot;kadira&amp;quot;: { &lt;br /&gt;
 # &amp;quot;appId&amp;quot;: &amp;quot;&amp;lt;your id&amp;gt;&amp;quot;, &lt;br /&gt;
 # &amp;quot;appSecret&amp;quot;: &amp;quot;&amp;lt;your app&amp;gt;&amp;quot; &lt;br /&gt;
 #}&lt;br /&gt;
&lt;br /&gt;
[[File:kadira.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Sprint 7 (du 14 Mars au 17 Mars)==&lt;br /&gt;
* Pour lancer l&#039;application Meteor : lancer le script deploy_meteor.sh : attention à modifier le Host pour deployer sur votre serveur&lt;br /&gt;
* Equipement des salles air et fablab avec les capteurs Zwave, Rfxcom&lt;br /&gt;
* Contact des administrateurs réseaux de Polytech pour pouvoir débloquer les ports&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28104</id>
		<title>Projets-2015-2016-OpenSmartCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28104"/>
		<updated>2016-03-17T08:21:45Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Sprint 7 (du 14 Mars au 17 Mars) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du Projet=&lt;br /&gt;
==Introduction==&lt;br /&gt;
Le projet nommé smart Campus est un projet étudiant visant à rendre un domaine universitaire intelligent. Il a vu le jour il y a 3 ans et il a comme but principal de rendre plus pratique la vie sur le campus ainsi que la gestion de celui-ci.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Le projet en 2014-2015 :&#039;&#039;&#039; [http://air.imag.fr/index.php/Proj-2014-2015-SmartCampus2015 &#039;&#039;&#039;SmartCampus2014-2015&#039;&#039;&#039;]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Le projet en 2013-2014 :&#039;&#039;&#039; [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi &#039;&#039;&#039;SmartCampus2013-2014&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur Raspberry Pi&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_raspi &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
Le tutoriel ci-dessus est un résumé des étapes décrites dans les sprint ci-dessous. Grâce à ce tutoriel on obtient rapidement le flux créé sur node-red les cartes dans l&#039;état nécessaire au fonctionnement de l&#039;application. Après l&#039;édition du fichier settings.json, la carte est prête à envoyer des données via MQTT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur serveur(s) Ubuntu 14.04&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_serveur &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
==L&#039;équipe==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RICM5 : &#039;&#039;&#039;&lt;br /&gt;
*Quentin Torck&lt;br /&gt;
*Vivien Michel&lt;br /&gt;
*Jérémy Hammerer &lt;br /&gt;
*Rama Codazzi&lt;br /&gt;
*Zhengmeng Zhang&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT : &#039;&#039;&#039;&lt;br /&gt;
*Andréas Gillet-Pascal&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encadrants : &#039;&#039;&#039;&lt;br /&gt;
*Didier Donsez&lt;br /&gt;
*Vivien Quéma&lt;br /&gt;
&lt;br /&gt;
=Organisation du Projet=&lt;br /&gt;
Dans le but de mener à bien notre projet, nous avons décider d&#039;utiliser la méthode agile Scrum. Le projet étant à faire dans un court intervalle de temps (2 mois), nous avons décidé de faire des sprints d&#039;une semaine chacun.&lt;br /&gt;
&lt;br /&gt;
==Sprint 1 (du 25 Janvier au 31 Janvier)==&lt;br /&gt;
Matériel récupéré:&lt;br /&gt;
* Gateways&lt;br /&gt;
** [[Raspberry Pi]] 2 + Alimentation 5V DC&lt;br /&gt;
* [[ZWave]]&lt;br /&gt;
** Clé USB Sigma ZWave&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2921-aeon-labs-detecteur-multifonctions-6-en-1-multisensor-z-wave-plus-gen5-1220000013100.html Détecteur de présence Aeon-labs ZWave]&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2608-zipato-detecteur-z-wave-4-en-1-mouvement-ouverture-luminosite-tem-3858890730425.html Détecteur d&#039;ouverture Zipato ZWave]&lt;br /&gt;
*[[Rfxcom]]&lt;br /&gt;
** Récepteur RFXCom 443 MHz&lt;br /&gt;
** Station WMR88&lt;br /&gt;
** Sonde Oregon Hygro Baro&lt;br /&gt;
** Sonde Oregon Luminosité&lt;br /&gt;
** Sonde Oregon Thermo Hygro All Weather&lt;br /&gt;
* [[enOcean]]&lt;br /&gt;
* Digital Security Camera&lt;br /&gt;
** [[DLink DSC 5222L]] PTZ, UPnP&lt;br /&gt;
&lt;br /&gt;
Travail effectué:&lt;br /&gt;
** Etude de l&#039;existant&lt;br /&gt;
** Etude des données de la métro de Grenoble, savoir si l&#039;on peut leur apporter de nouvelles données ou non.&lt;br /&gt;
&lt;br /&gt;
A voir&lt;br /&gt;
* http://fablab.ensimag.fr/index.php/SmartCampus/FicheSuivi&lt;br /&gt;
* http://air.imag.fr/index.php/PM2M/2016/TP&lt;br /&gt;
* http://air.imag.fr/index.php/GrenobloisFut%C3%A9&lt;br /&gt;
&lt;br /&gt;
==Sprint 2 (du 1 Février au 7 Février)==&lt;br /&gt;
&lt;br /&gt;
Architecture réalisée avec Didier Donsez :&lt;br /&gt;
[[Image:Architecture_SmartCampus_2016.png|800px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
L&#039;utilisation de [http://www.angular-meteor.com/ Météor] avec une base de donnée MongoDB est possible . Une alternative à explorer est [http://sailsjs.org/ Sails.js]. Étant donné le caractère exploratoire de ce sprint, l&#039;architecture peut être amenée à changer. Notamment en ce qui concerne l&#039;utilisation de Météor ou la base de donnée MongoDB.&lt;br /&gt;
 &lt;br /&gt;
Taches : &lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de Météor et de [https://kadira.io/ Kadira] à travers des tutoriels. Installation locale pour l&#039;instant.&lt;br /&gt;
&lt;br /&gt;
*Installer un serveur Mosquito/MQTT(S) pour les communications avec les cartes&lt;br /&gt;
&lt;br /&gt;
*Installer Node-Red sur Rasberry PI : faire flux de reception/envoie entre la carte et le serveur MQTT : [http://nodered.org/docs/hardware/raspberrypi.html Tutoriel d&#039;installation Node-Red]&lt;br /&gt;
&lt;br /&gt;
[http://www.rs-online.com/designspark/electronics/eng/blog/building-distributed-node-red-applications-with-mqtt Tutoriel pour connecter Node-Red avec serveur MQTT]. Ceci est à adapter suivant la configuration dans settings.json&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/015f1c7463476d5e5fd8 Regarder ce flux existant proposant un envoie sécurisé sur le serveur]&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/bf9814b4c6bffda3c675 Regarder ce flux existant pour envoyer des données reçues par la Z-Wave]&lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de [https://www.twilio.com/ Twilio] pour l&#039;envoie de sms automatique depuis les cartes. Technologies JavaScript utilisable sur serveur Node.js&lt;br /&gt;
&lt;br /&gt;
=== Prendre en main sa rasberry pi à distance ===&lt;br /&gt;
http://www.framboise314.fr/prenez-la-main-a-distance-sur-votre-raspberry-pi-avec-vnc/&lt;br /&gt;
&lt;br /&gt;
===Installation sur Rasberry Pi Wheezy===&lt;br /&gt;
* Lancer node-red sur la rasberry-pi B+ grâce aux commandes suivantes dans un script. Sur l&#039;OS Debian wheezy. &lt;br /&gt;
 &lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #install nodered&lt;br /&gt;
 sudo apt-get  remove nodered&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
 # install Node-red&lt;br /&gt;
 sudo npm install -g --unsafe-perm node-red&lt;br /&gt;
 echo  nmp---------------------&amp;gt;[OK]&lt;br /&gt;
&lt;br /&gt;
Tentatives de démarrer le serveur au boot de la carte sur l&#039;OS Wheezy. Malgré plusieurs tentatives (utilisation de update.rc, de PM2) le serveur ne démarre pas au lancement.&lt;br /&gt;
&lt;br /&gt;
=== Utilisation de la plateforme AWS d&#039;Amazon ===&lt;br /&gt;
* Création d&#039;un compte gratuit sur Amazon d&#039;une validité d&#039;un an.&lt;br /&gt;
* Création d&#039;une machine virtuelle Ubuntu sur la plateforme.&lt;br /&gt;
* Installation et mise en marche d&#039;un serveur Mosquitto (broker) sur la machine virtuelle. (voir [http://mosquitto.org/2013/01/mosquitto-debian-repository/ installation])&lt;br /&gt;
&lt;br /&gt;
===Sur l&#039;OS Debian Jessie : Une version de node-red est pré-installée.===&lt;br /&gt;
&lt;br /&gt;
Pour passer de Wheezy à Jessie (solution adoptée) : installation de [https://www.raspberrypi.org/downloads/noobs/ NOOBS] puis de Debian Jessie via cet utilitaire. Il est nécessaire d&#039;avoir une carte SD vierge ou de la formater.&lt;br /&gt;
&lt;br /&gt;
Mise à jour des logiciels :&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
le système pré-installé sur Jessie permet de lancer au démarrage et, en cas de panne, de relancer le serveur node-red grâce à nodered.service.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;activer, taper la commande :&lt;br /&gt;
 sudo systemctl enable nodered.service&lt;br /&gt;
&lt;br /&gt;
===Installation des noeuds RFXcom pour le récepteur 433 Mhz et du noeud pour le récepteur Zwave===&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d&#039;installer npm pour ajouter des noeuds à node-red:&lt;br /&gt;
 sudo apt-get install npm&lt;br /&gt;
&lt;br /&gt;
Les noeuds sont à installer dans le dossier $HOME/.node-red/ pour qu&#039;un seul utilisateur y ai accès. La commande npm sans -g installera le noeud dans le dossier courant. Sinon avec l&#039;option -g et les droits root dans le dossier node_module/node-red. Pour que le noeud apparaisse, il faut redémarrer node-red.&lt;br /&gt;
&lt;br /&gt;
====Téléchargement du noeud RFXcom====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-rfxcom Noeud RfxCom]&lt;br /&gt;
&lt;br /&gt;
====Installation des noeuds Zwave====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-openzwave Noeud Zwave]&lt;br /&gt;
&lt;br /&gt;
Ce noeud dépend d&#039;une version d&#039;Openzwave avec nodejs : [https://github.com/OpenZWave/node-openzwave-shared node-openzave]. Il faut donc installer la librairie OpenZwave.&lt;br /&gt;
&lt;br /&gt;
Téléchargement de la version 1.4 [https://github.com/OpenZWave/open-zwave/releases/tag/v1.4 OpenZwave 1.4] en zip.&lt;br /&gt;
&lt;br /&gt;
Dans le répertoire décompressé.&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
La commande make, provoquant la compilation, peut mettre du temps.&lt;br /&gt;
Il est possible qu&#039;une librairie soit manquante et provoque une erreur.&lt;br /&gt;
&lt;br /&gt;
Pour y remédier :&lt;br /&gt;
 sudo apt-get install libudev-dev&lt;br /&gt;
&lt;br /&gt;
La commande make install copie les librairies openzwave dans /usr/local/lib. Si node-red n&#039;est pas dans /usr/local/lib/node_modules/ il faut déplacer les librairies dans /usr/lib/.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier la bonne installation, lors de lancement de node-red, un noeud Zwave in et Zwave out sont respectivement dans Input et Output.&lt;br /&gt;
&lt;br /&gt;
L&#039;installation du noeud peut provoquer une erreur si la version de nodejs est inférieure ou égale à 0.10.29&lt;br /&gt;
&lt;br /&gt;
====Configuration des ports====&lt;br /&gt;
&lt;br /&gt;
http://www.latelierdugeek.fr/2015/02/02/domotique-partie-8-ajout-du-support-du-z-wave-dans-domoticz/&lt;br /&gt;
&lt;br /&gt;
====Mettre à jour nodejs==== &lt;br /&gt;
 sudo apt-get remove nodered&lt;br /&gt;
 sudo apt-get remove nodejs nodejs-legacy&lt;br /&gt;
 sudo apt-get remove npm&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 2=====&lt;br /&gt;
 curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -&lt;br /&gt;
 sudo apt-get install -y build-essential python-dev python-rpi.gpio nodejs&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi=====&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
&lt;br /&gt;
Une fois nodejs mis à jour(nodejs -v &amp;gt; 0.12.x ou 4.2.x)&lt;br /&gt;
 sudo npm cache clean&lt;br /&gt;
 sudo npm install -g --unsafe-perm  node-red&lt;br /&gt;
&lt;br /&gt;
=====Remettre les scripts de lancement et de démarrage=====&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/quentin74/Smartcampus/master/node-red/nodered.service -O /lib/systemd/system/nodered.service&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop&lt;br /&gt;
 sudo chmod +x /usr/bin/node-red-st*&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
==Sprint 3 (du 8 Février au 14 Février)==&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;un VPN ===&lt;br /&gt;
Dans le but de pouvoir avancer plus facilement dans le projet, nous avons dû mettre en place un serveur VPN car les ports utilisés par MQTT sont bloqués sur le réseau de l&#039;université. Il est donc impossible pour une Raspberry Pi de communiquer avec un serveur mosquitto basé sur la plateforme AWS sans passer par un VPN (en utilisant le réseau de l&#039;université). L&#039;avantage d&#039;utiliser un VPN est aussi de sécuriser les communications entre les Raspberry pi et le serveur mosquitto. Les étapes de la mise en place de notre VPN sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
* Création d&#039;une nouvelle machine virtuelle dans le but d&#039;installer un serveur VPN openVPN dans le cluster d&#039;amazon (voir [https://www.youtube.com/watch?v=VWqRrMGHJQg installation]).&lt;br /&gt;
&lt;br /&gt;
* Installation d&#039;un client VPN sur une Raspberry&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&#039;une base de donnée [https://influxdata.com/ InfluxDB]===&lt;br /&gt;
&lt;br /&gt;
Installation sur le serveur amazone d&#039;une base InfluxDB:&lt;br /&gt;
 wget https://s3.amazonaws.com/influxdb/influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
 sudo dpkg -i influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
&lt;br /&gt;
===Installation de [http://grafana.org/download/ Grafana]===&lt;br /&gt;
Connexion avec la base InfluxDB et première visualisation de données émises par les capteurs météorologiques.&lt;br /&gt;
Avec ce Framework, nous pouvons visualiser l&#039;occupation d&#039;une salle ou non, en fonction des capteurs de présence.&lt;br /&gt;
&lt;br /&gt;
[[File:Grafana.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Nous pouvons également afficher des graphique pour voir les variations de température au cours du temps.&lt;br /&gt;
[[File:Grafana2.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
===Modification du flow Node-red===&lt;br /&gt;
Récupération d&#039;informations depuis le récepteur RfxCom et envoie vers le broker mqtt.&lt;br /&gt;
&lt;br /&gt;
==Sprint 4 (du 15 Février au 21 Février)==&lt;br /&gt;
===Mise en place de Meteor===&lt;br /&gt;
Installation des différents paquets nécessaires à la mise en place de l&#039;application&lt;br /&gt;
 # curl https://install.meteor.com/ | sh&lt;br /&gt;
 # meteor add meteorhacks:npm&lt;br /&gt;
 # npm install mqtt --save&lt;br /&gt;
 # sudo npm install fs&lt;br /&gt;
&lt;br /&gt;
[[File:meteor.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
===Mise en place de Leaflet===&lt;br /&gt;
&lt;br /&gt;
 # meteor add bevanhunt:leaflet&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
Cliquer sur une des 2 salles équipées et obtenir les informations en temps réels&lt;br /&gt;
&lt;br /&gt;
===Passage en MQTTS===&lt;br /&gt;
Changement du port de configuration sur le flow node-red : 1883 -&amp;gt; 8883&lt;br /&gt;
Activation du cryptage tls/ssl et désactivation de la vérification du certificat du serveur. En effet, tous les certificats générés sont auto-signés. Afin que la connexion puisse se faire il faut, soit un certificat signé par une autorité reconnue, soit désactiver la vérification.&lt;br /&gt;
&lt;br /&gt;
Pour Telegraf (voir installation ci-dessous)&lt;br /&gt;
&lt;br /&gt;
Changement du port et définition de la clé et du certificat pour la communication cryptée dans le fichier de configuration.&lt;br /&gt;
&lt;br /&gt;
Pour le broker mosquitto, nous avons changé le fichier config dans le but de pouvoir utiliser TLS/SSL. Le fichier config est complété comme suivant :&lt;br /&gt;
 # Place your local configuration in /etc/mosquitto/conf.d/&lt;br /&gt;
 #&lt;br /&gt;
 # A full description of the configuration file is at&lt;br /&gt;
 # /usr/share/doc/mosquitto/examples/mosquitto.conf.example&lt;br /&gt;
 pid_file /var/run/mosquitto.pid&lt;br /&gt;
 #TLS&lt;br /&gt;
 require_certificate false&lt;br /&gt;
 listener 8883&lt;br /&gt;
 cafile /etc/mosquitto/ca_certificates/ca.crt&lt;br /&gt;
 certfile /etc/mosquitto/certs/server.crt&lt;br /&gt;
 keyfile /etc/mosquitto/certs/server.key&lt;br /&gt;
 #&lt;br /&gt;
 persistence true&lt;br /&gt;
 persistence_location /var/lib/mosquitto/&lt;br /&gt;
 log_dest file /var/log/mosquitto/mosquitto.log&lt;br /&gt;
 include_dir /etc/mosquitto/conf.d&lt;br /&gt;
 allow_anonymous true&lt;br /&gt;
 password_file /etc/mosquitto/passwd&lt;br /&gt;
&lt;br /&gt;
===Installation de [https://github.com/influxdata/telegraf Telegraf]===&lt;br /&gt;
La dernière release précompilée pour Ubuntu(0.10.2) ne contient pas le plugin &amp;quot;mqtt_consumer&amp;quot;. Elle ne sera disponible que dans la release 0.10.3. Il faut donc l&#039;installer depuis les sources si la version n&#039;est pas supérieur à 0.10.3.&lt;br /&gt;
Afin de faciliter le démarrage automatique de Telegraf, on installe via le package debian puis on remplacera l&#039;exécutable par une version plus récente:&lt;br /&gt;
 &lt;br /&gt;
[http://get.influxdb.org/telegraf/telegraf_0.10.3-1_amd64.deb Dernière version disponible actuellement]&lt;br /&gt;
&lt;br /&gt;
====Installation de GO====&lt;br /&gt;
Sur AWS, une version de go est pré-existante mais non fonctionnelle car non à jour.&lt;br /&gt;
 sudo rm /usr/bin/go&lt;br /&gt;
&lt;br /&gt;
Choisir la dernière version de go : [https://golang.org/dl/ GO]&lt;br /&gt;
&lt;br /&gt;
Décompresser l&#039;archive:&lt;br /&gt;
 tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz&lt;br /&gt;
&lt;br /&gt;
Ajouter dans /etc/profile ou $HOME/.profile. L&#039;exemple ci-dessous n&#039;est fonctionnel que si vous avez décompréssé dans /usr/local:&lt;br /&gt;
 export PATH=$PATH:/usr/local/go/bin&lt;br /&gt;
&lt;br /&gt;
Créer la variable GOPATH:&lt;br /&gt;
  export GOPATH=&amp;lt;YOUR_PATH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Télécharger les sources:&lt;br /&gt;
 go get github.com/influxdata/telegraf&lt;br /&gt;
&lt;br /&gt;
Aller dans le dossier de téléchargements:&lt;br /&gt;
 cd $GOPATH/src/github.com/influxdata/telegraf&lt;br /&gt;
 make&lt;br /&gt;
 sudo cp telegraf /usr/bin/&lt;br /&gt;
&lt;br /&gt;
====Configuration de Telegraf====&lt;br /&gt;
&lt;br /&gt;
Un exemple de fichier de configuration est obtenu via la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 telegraf -sample-config -input-filter mqtt_consumer -output-filter influxdb &amp;gt; YOUR_FILE.conf&lt;br /&gt;
[https://github.com/influxdata/telegraf/tree/master/plugins/inputs/mqtt_consumer Exemple configuration mqtt]&lt;br /&gt;
&lt;br /&gt;
Changez l&#039;adresse et le port du broker mqtt et de la base influxDB. Choissez les topics auxquels souscrire, le format des données reçu de la part du broker (json,influx...) &lt;br /&gt;
&lt;br /&gt;
Si vous utilisez des certificats auto-signés ne pas oublier&lt;br /&gt;
 skip_verify_ssl = true&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration lu au démarrage se situe dans :&lt;br /&gt;
 /etc/telegraf&lt;br /&gt;
&lt;br /&gt;
Pour renommer le fichier de configuration lu au démarrage :&lt;br /&gt;
 sudo nano /etc/init.d/telegraf&lt;br /&gt;
&lt;br /&gt;
Changer la ligne avec la variable confile=/etc/telegraf/YOUR_FILE.conf&lt;br /&gt;
&lt;br /&gt;
===Passage d&#039;influxDB en https===&lt;br /&gt;
Dans le fichier /etc/influxdb/infludb.conf :&lt;br /&gt;
&lt;br /&gt;
Modifier les attributs de [admin] et [http] en mettant https = true et le chemin vers la clé/certificat pour influxDB. Une subtilité est à retenir pour influxDB ssl. En effet, la clé et le certificat doivent être dans le même fichier :&lt;br /&gt;
 cat key.pem crt.pem &amp;gt; key_crt.pem&lt;br /&gt;
&lt;br /&gt;
==Sprint 5 (du 29 Février au 6 Mars)==&lt;br /&gt;
&lt;br /&gt;
=== Ajout de Widget dans grafana integrant cartographie leaflet ===&lt;br /&gt;
Attention --&amp;gt; cette tache ne sera pas réalisée car sur le forum de grafana ou d&#039;autres nous avons vu qu&#039;intégrer de la cartographie était dans les projet à venir de grafana, par consequent il est inutile de perdre du temps sur une tache qui sera prochainement réalisée.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;une PKI ===&lt;br /&gt;
&lt;br /&gt;
Une PKI (Public Key Infrastructure) permet de gérer la création, la récupération et la révocation de certificats. Nous avons, dans le cadre de la sécurisation de notre plateforme, d&#039;en créer une dans le but de fournir des certificats à nos différentes machines. Nous avons décider de suivre le tutoriel suivant :&lt;br /&gt;
* Mise en place d&#039;une d&#039;une PKI: http://stankiewicz.free.fr/Wikka/wikka.php?wakka=HowtoPKI&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé à travailler sur ce tutoriel. Cependant, celui-ci semble être obsolète (certaines technologies semblent avoir évoluées depuis et donc certaines actions du tutoriel ne fonctionnent plus). Nous avons perdu beaucoup de temps à essayer de résoudre ces problèmes.&lt;br /&gt;
&lt;br /&gt;
===Configuration d&#039;OpenVPN, dans le but d&#039;ajouter de nouveaux utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
Au départ, nous avions alloué une instance Amazon dédiée à OpenVPN. Plus précisément, c&#039;était une image dans laquelle OpenVPN était préinstallé. Nous n&#039;arrivions pas à ajouter de nouveaux utilisateurs pour ce VPN avec cette instance. Nous avons donc décidé de supprimer l&#039;instance Amazon d&#039;OpenVPN et de l&#039;installer par nous même sur notre instance principale. Après avoir fait cela, nous arrivions à créer différents utilisateurs pour notre VPN. Cependant, nous avons remarqué qu&#039;OpenVPN limite le nombre de connexions à deux utilisateurs maximum (en même temps).&lt;br /&gt;
&lt;br /&gt;
==Sprint 6 (du 7 Mars au 13 Mars)==&lt;br /&gt;
Equipement des salles avec les raspberry pi , les capteurs enocean, les capteurs Zwave&lt;br /&gt;
&lt;br /&gt;
Ajout de fichier de configuration dans l&#039;application meteor, pour faciliter le déploiement. Ajout par exemple de chemins génériques.&lt;br /&gt;
&lt;br /&gt;
Intégration Kadira à l&#039;application Meteor, Dashboard disponible pour l&#039;administrateur&lt;br /&gt;
&lt;br /&gt;
Installation du package : &lt;br /&gt;
 # meteor add meteorhacks:kadira&lt;br /&gt;
&lt;br /&gt;
Ajout au settings.json&lt;br /&gt;
&lt;br /&gt;
 #&amp;quot;kadira&amp;quot;: { &lt;br /&gt;
 # &amp;quot;appId&amp;quot;: &amp;quot;&amp;lt;your id&amp;gt;&amp;quot;, &lt;br /&gt;
 # &amp;quot;appSecret&amp;quot;: &amp;quot;&amp;lt;your app&amp;gt;&amp;quot; &lt;br /&gt;
 #}&lt;br /&gt;
&lt;br /&gt;
[[File:kadira.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Sprint 7 (du 14 Mars au 17 Mars)==&lt;br /&gt;
* Pour lancer l&#039;application Meteor : lancer le script deploy_meteor.sh : attention à modifier le Host pour deployer sur votre serveur&lt;br /&gt;
* Equipement des salles air et fablab avec les capteurs Zwave, Rfxcom&lt;br /&gt;
* Contact des administrateurs réseaux de Polytech pour pouvoir débloquer les ports&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28103</id>
		<title>Projets-2015-2016-OpenSmartCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28103"/>
		<updated>2016-03-17T08:17:20Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Sprint 6 (du 7 Mars au 13 Mars) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du Projet=&lt;br /&gt;
==Introduction==&lt;br /&gt;
Le projet nommé smart Campus est un projet étudiant visant à rendre un domaine universitaire intelligent. Il a vu le jour il y a 3 ans et il a comme but principal de rendre plus pratique la vie sur le campus ainsi que la gestion de celui-ci.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Le projet en 2014-2015 :&#039;&#039;&#039; [http://air.imag.fr/index.php/Proj-2014-2015-SmartCampus2015 &#039;&#039;&#039;SmartCampus2014-2015&#039;&#039;&#039;]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Le projet en 2013-2014 :&#039;&#039;&#039; [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi &#039;&#039;&#039;SmartCampus2013-2014&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur Raspberry Pi&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_raspi &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
Le tutoriel ci-dessus est un résumé des étapes décrites dans les sprint ci-dessous. Grâce à ce tutoriel on obtient rapidement le flux créé sur node-red les cartes dans l&#039;état nécessaire au fonctionnement de l&#039;application. Après l&#039;édition du fichier settings.json, la carte est prête à envoyer des données via MQTT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur serveur(s) Ubuntu 14.04&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_serveur &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
==L&#039;équipe==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RICM5 : &#039;&#039;&#039;&lt;br /&gt;
*Quentin Torck&lt;br /&gt;
*Vivien Michel&lt;br /&gt;
*Jérémy Hammerer &lt;br /&gt;
*Rama Codazzi&lt;br /&gt;
*Zhengmeng Zhang&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT : &#039;&#039;&#039;&lt;br /&gt;
*Andréas Gillet-Pascal&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encadrants : &#039;&#039;&#039;&lt;br /&gt;
*Didier Donsez&lt;br /&gt;
*Vivien Quéma&lt;br /&gt;
&lt;br /&gt;
=Organisation du Projet=&lt;br /&gt;
Dans le but de mener à bien notre projet, nous avons décider d&#039;utiliser la méthode agile Scrum. Le projet étant à faire dans un court intervalle de temps (2 mois), nous avons décidé de faire des sprints d&#039;une semaine chacun.&lt;br /&gt;
&lt;br /&gt;
==Sprint 1 (du 25 Janvier au 31 Janvier)==&lt;br /&gt;
Matériel récupéré:&lt;br /&gt;
* Gateways&lt;br /&gt;
** [[Raspberry Pi]] 2 + Alimentation 5V DC&lt;br /&gt;
* [[ZWave]]&lt;br /&gt;
** Clé USB Sigma ZWave&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2921-aeon-labs-detecteur-multifonctions-6-en-1-multisensor-z-wave-plus-gen5-1220000013100.html Détecteur de présence Aeon-labs ZWave]&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2608-zipato-detecteur-z-wave-4-en-1-mouvement-ouverture-luminosite-tem-3858890730425.html Détecteur d&#039;ouverture Zipato ZWave]&lt;br /&gt;
*[[Rfxcom]]&lt;br /&gt;
** Récepteur RFXCom 443 MHz&lt;br /&gt;
** Station WMR88&lt;br /&gt;
** Sonde Oregon Hygro Baro&lt;br /&gt;
** Sonde Oregon Luminosité&lt;br /&gt;
** Sonde Oregon Thermo Hygro All Weather&lt;br /&gt;
* [[enOcean]]&lt;br /&gt;
* Digital Security Camera&lt;br /&gt;
** [[DLink DSC 5222L]] PTZ, UPnP&lt;br /&gt;
&lt;br /&gt;
Travail effectué:&lt;br /&gt;
** Etude de l&#039;existant&lt;br /&gt;
** Etude des données de la métro de Grenoble, savoir si l&#039;on peut leur apporter de nouvelles données ou non.&lt;br /&gt;
&lt;br /&gt;
A voir&lt;br /&gt;
* http://fablab.ensimag.fr/index.php/SmartCampus/FicheSuivi&lt;br /&gt;
* http://air.imag.fr/index.php/PM2M/2016/TP&lt;br /&gt;
* http://air.imag.fr/index.php/GrenobloisFut%C3%A9&lt;br /&gt;
&lt;br /&gt;
==Sprint 2 (du 1 Février au 7 Février)==&lt;br /&gt;
&lt;br /&gt;
Architecture réalisée avec Didier Donsez :&lt;br /&gt;
[[Image:Architecture_SmartCampus_2016.png|800px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
L&#039;utilisation de [http://www.angular-meteor.com/ Météor] avec une base de donnée MongoDB est possible . Une alternative à explorer est [http://sailsjs.org/ Sails.js]. Étant donné le caractère exploratoire de ce sprint, l&#039;architecture peut être amenée à changer. Notamment en ce qui concerne l&#039;utilisation de Météor ou la base de donnée MongoDB.&lt;br /&gt;
 &lt;br /&gt;
Taches : &lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de Météor et de [https://kadira.io/ Kadira] à travers des tutoriels. Installation locale pour l&#039;instant.&lt;br /&gt;
&lt;br /&gt;
*Installer un serveur Mosquito/MQTT(S) pour les communications avec les cartes&lt;br /&gt;
&lt;br /&gt;
*Installer Node-Red sur Rasberry PI : faire flux de reception/envoie entre la carte et le serveur MQTT : [http://nodered.org/docs/hardware/raspberrypi.html Tutoriel d&#039;installation Node-Red]&lt;br /&gt;
&lt;br /&gt;
[http://www.rs-online.com/designspark/electronics/eng/blog/building-distributed-node-red-applications-with-mqtt Tutoriel pour connecter Node-Red avec serveur MQTT]. Ceci est à adapter suivant la configuration dans settings.json&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/015f1c7463476d5e5fd8 Regarder ce flux existant proposant un envoie sécurisé sur le serveur]&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/bf9814b4c6bffda3c675 Regarder ce flux existant pour envoyer des données reçues par la Z-Wave]&lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de [https://www.twilio.com/ Twilio] pour l&#039;envoie de sms automatique depuis les cartes. Technologies JavaScript utilisable sur serveur Node.js&lt;br /&gt;
&lt;br /&gt;
=== Prendre en main sa rasberry pi à distance ===&lt;br /&gt;
http://www.framboise314.fr/prenez-la-main-a-distance-sur-votre-raspberry-pi-avec-vnc/&lt;br /&gt;
&lt;br /&gt;
===Installation sur Rasberry Pi Wheezy===&lt;br /&gt;
* Lancer node-red sur la rasberry-pi B+ grâce aux commandes suivantes dans un script. Sur l&#039;OS Debian wheezy. &lt;br /&gt;
 &lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #install nodered&lt;br /&gt;
 sudo apt-get  remove nodered&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
 # install Node-red&lt;br /&gt;
 sudo npm install -g --unsafe-perm node-red&lt;br /&gt;
 echo  nmp---------------------&amp;gt;[OK]&lt;br /&gt;
&lt;br /&gt;
Tentatives de démarrer le serveur au boot de la carte sur l&#039;OS Wheezy. Malgré plusieurs tentatives (utilisation de update.rc, de PM2) le serveur ne démarre pas au lancement.&lt;br /&gt;
&lt;br /&gt;
=== Utilisation de la plateforme AWS d&#039;Amazon ===&lt;br /&gt;
* Création d&#039;un compte gratuit sur Amazon d&#039;une validité d&#039;un an.&lt;br /&gt;
* Création d&#039;une machine virtuelle Ubuntu sur la plateforme.&lt;br /&gt;
* Installation et mise en marche d&#039;un serveur Mosquitto (broker) sur la machine virtuelle. (voir [http://mosquitto.org/2013/01/mosquitto-debian-repository/ installation])&lt;br /&gt;
&lt;br /&gt;
===Sur l&#039;OS Debian Jessie : Une version de node-red est pré-installée.===&lt;br /&gt;
&lt;br /&gt;
Pour passer de Wheezy à Jessie (solution adoptée) : installation de [https://www.raspberrypi.org/downloads/noobs/ NOOBS] puis de Debian Jessie via cet utilitaire. Il est nécessaire d&#039;avoir une carte SD vierge ou de la formater.&lt;br /&gt;
&lt;br /&gt;
Mise à jour des logiciels :&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
le système pré-installé sur Jessie permet de lancer au démarrage et, en cas de panne, de relancer le serveur node-red grâce à nodered.service.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;activer, taper la commande :&lt;br /&gt;
 sudo systemctl enable nodered.service&lt;br /&gt;
&lt;br /&gt;
===Installation des noeuds RFXcom pour le récepteur 433 Mhz et du noeud pour le récepteur Zwave===&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d&#039;installer npm pour ajouter des noeuds à node-red:&lt;br /&gt;
 sudo apt-get install npm&lt;br /&gt;
&lt;br /&gt;
Les noeuds sont à installer dans le dossier $HOME/.node-red/ pour qu&#039;un seul utilisateur y ai accès. La commande npm sans -g installera le noeud dans le dossier courant. Sinon avec l&#039;option -g et les droits root dans le dossier node_module/node-red. Pour que le noeud apparaisse, il faut redémarrer node-red.&lt;br /&gt;
&lt;br /&gt;
====Téléchargement du noeud RFXcom====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-rfxcom Noeud RfxCom]&lt;br /&gt;
&lt;br /&gt;
====Installation des noeuds Zwave====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-openzwave Noeud Zwave]&lt;br /&gt;
&lt;br /&gt;
Ce noeud dépend d&#039;une version d&#039;Openzwave avec nodejs : [https://github.com/OpenZWave/node-openzwave-shared node-openzave]. Il faut donc installer la librairie OpenZwave.&lt;br /&gt;
&lt;br /&gt;
Téléchargement de la version 1.4 [https://github.com/OpenZWave/open-zwave/releases/tag/v1.4 OpenZwave 1.4] en zip.&lt;br /&gt;
&lt;br /&gt;
Dans le répertoire décompressé.&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
La commande make, provoquant la compilation, peut mettre du temps.&lt;br /&gt;
Il est possible qu&#039;une librairie soit manquante et provoque une erreur.&lt;br /&gt;
&lt;br /&gt;
Pour y remédier :&lt;br /&gt;
 sudo apt-get install libudev-dev&lt;br /&gt;
&lt;br /&gt;
La commande make install copie les librairies openzwave dans /usr/local/lib. Si node-red n&#039;est pas dans /usr/local/lib/node_modules/ il faut déplacer les librairies dans /usr/lib/.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier la bonne installation, lors de lancement de node-red, un noeud Zwave in et Zwave out sont respectivement dans Input et Output.&lt;br /&gt;
&lt;br /&gt;
L&#039;installation du noeud peut provoquer une erreur si la version de nodejs est inférieure ou égale à 0.10.29&lt;br /&gt;
&lt;br /&gt;
====Configuration des ports====&lt;br /&gt;
&lt;br /&gt;
http://www.latelierdugeek.fr/2015/02/02/domotique-partie-8-ajout-du-support-du-z-wave-dans-domoticz/&lt;br /&gt;
&lt;br /&gt;
====Mettre à jour nodejs==== &lt;br /&gt;
 sudo apt-get remove nodered&lt;br /&gt;
 sudo apt-get remove nodejs nodejs-legacy&lt;br /&gt;
 sudo apt-get remove npm&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 2=====&lt;br /&gt;
 curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -&lt;br /&gt;
 sudo apt-get install -y build-essential python-dev python-rpi.gpio nodejs&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi=====&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
&lt;br /&gt;
Une fois nodejs mis à jour(nodejs -v &amp;gt; 0.12.x ou 4.2.x)&lt;br /&gt;
 sudo npm cache clean&lt;br /&gt;
 sudo npm install -g --unsafe-perm  node-red&lt;br /&gt;
&lt;br /&gt;
=====Remettre les scripts de lancement et de démarrage=====&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/quentin74/Smartcampus/master/node-red/nodered.service -O /lib/systemd/system/nodered.service&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop&lt;br /&gt;
 sudo chmod +x /usr/bin/node-red-st*&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
==Sprint 3 (du 8 Février au 14 Février)==&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;un VPN ===&lt;br /&gt;
Dans le but de pouvoir avancer plus facilement dans le projet, nous avons dû mettre en place un serveur VPN car les ports utilisés par MQTT sont bloqués sur le réseau de l&#039;université. Il est donc impossible pour une Raspberry Pi de communiquer avec un serveur mosquitto basé sur la plateforme AWS sans passer par un VPN (en utilisant le réseau de l&#039;université). L&#039;avantage d&#039;utiliser un VPN est aussi de sécuriser les communications entre les Raspberry pi et le serveur mosquitto. Les étapes de la mise en place de notre VPN sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
* Création d&#039;une nouvelle machine virtuelle dans le but d&#039;installer un serveur VPN openVPN dans le cluster d&#039;amazon (voir [https://www.youtube.com/watch?v=VWqRrMGHJQg installation]).&lt;br /&gt;
&lt;br /&gt;
* Installation d&#039;un client VPN sur une Raspberry&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&#039;une base de donnée [https://influxdata.com/ InfluxDB]===&lt;br /&gt;
&lt;br /&gt;
Installation sur le serveur amazone d&#039;une base InfluxDB:&lt;br /&gt;
 wget https://s3.amazonaws.com/influxdb/influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
 sudo dpkg -i influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
&lt;br /&gt;
===Installation de [http://grafana.org/download/ Grafana]===&lt;br /&gt;
Connexion avec la base InfluxDB et première visualisation de données émises par les capteurs météorologiques.&lt;br /&gt;
Avec ce Framework, nous pouvons visualiser l&#039;occupation d&#039;une salle ou non, en fonction des capteurs de présence.&lt;br /&gt;
&lt;br /&gt;
[[File:Grafana.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Nous pouvons également afficher des graphique pour voir les variations de température au cours du temps.&lt;br /&gt;
[[File:Grafana2.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
===Modification du flow Node-red===&lt;br /&gt;
Récupération d&#039;informations depuis le récepteur RfxCom et envoie vers le broker mqtt.&lt;br /&gt;
&lt;br /&gt;
==Sprint 4 (du 15 Février au 21 Février)==&lt;br /&gt;
===Mise en place de Meteor===&lt;br /&gt;
Installation des différents paquets nécessaires à la mise en place de l&#039;application&lt;br /&gt;
 # curl https://install.meteor.com/ | sh&lt;br /&gt;
 # meteor add meteorhacks:npm&lt;br /&gt;
 # npm install mqtt --save&lt;br /&gt;
 # sudo npm install fs&lt;br /&gt;
&lt;br /&gt;
[[File:meteor.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
===Mise en place de Leaflet===&lt;br /&gt;
&lt;br /&gt;
 # meteor add bevanhunt:leaflet&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
Cliquer sur une des 2 salles équipées et obtenir les informations en temps réels&lt;br /&gt;
&lt;br /&gt;
===Passage en MQTTS===&lt;br /&gt;
Changement du port de configuration sur le flow node-red : 1883 -&amp;gt; 8883&lt;br /&gt;
Activation du cryptage tls/ssl et désactivation de la vérification du certificat du serveur. En effet, tous les certificats générés sont auto-signés. Afin que la connexion puisse se faire il faut, soit un certificat signé par une autorité reconnue, soit désactiver la vérification.&lt;br /&gt;
&lt;br /&gt;
Pour Telegraf (voir installation ci-dessous)&lt;br /&gt;
&lt;br /&gt;
Changement du port et définition de la clé et du certificat pour la communication cryptée dans le fichier de configuration.&lt;br /&gt;
&lt;br /&gt;
Pour le broker mosquitto, nous avons changé le fichier config dans le but de pouvoir utiliser TLS/SSL. Le fichier config est complété comme suivant :&lt;br /&gt;
 # Place your local configuration in /etc/mosquitto/conf.d/&lt;br /&gt;
 #&lt;br /&gt;
 # A full description of the configuration file is at&lt;br /&gt;
 # /usr/share/doc/mosquitto/examples/mosquitto.conf.example&lt;br /&gt;
 pid_file /var/run/mosquitto.pid&lt;br /&gt;
 #TLS&lt;br /&gt;
 require_certificate false&lt;br /&gt;
 listener 8883&lt;br /&gt;
 cafile /etc/mosquitto/ca_certificates/ca.crt&lt;br /&gt;
 certfile /etc/mosquitto/certs/server.crt&lt;br /&gt;
 keyfile /etc/mosquitto/certs/server.key&lt;br /&gt;
 #&lt;br /&gt;
 persistence true&lt;br /&gt;
 persistence_location /var/lib/mosquitto/&lt;br /&gt;
 log_dest file /var/log/mosquitto/mosquitto.log&lt;br /&gt;
 include_dir /etc/mosquitto/conf.d&lt;br /&gt;
 allow_anonymous true&lt;br /&gt;
 password_file /etc/mosquitto/passwd&lt;br /&gt;
&lt;br /&gt;
===Installation de [https://github.com/influxdata/telegraf Telegraf]===&lt;br /&gt;
La dernière release précompilée pour Ubuntu(0.10.2) ne contient pas le plugin &amp;quot;mqtt_consumer&amp;quot;. Elle ne sera disponible que dans la release 0.10.3. Il faut donc l&#039;installer depuis les sources si la version n&#039;est pas supérieur à 0.10.3.&lt;br /&gt;
Afin de faciliter le démarrage automatique de Telegraf, on installe via le package debian puis on remplacera l&#039;exécutable par une version plus récente:&lt;br /&gt;
 &lt;br /&gt;
[http://get.influxdb.org/telegraf/telegraf_0.10.3-1_amd64.deb Dernière version disponible actuellement]&lt;br /&gt;
&lt;br /&gt;
====Installation de GO====&lt;br /&gt;
Sur AWS, une version de go est pré-existante mais non fonctionnelle car non à jour.&lt;br /&gt;
 sudo rm /usr/bin/go&lt;br /&gt;
&lt;br /&gt;
Choisir la dernière version de go : [https://golang.org/dl/ GO]&lt;br /&gt;
&lt;br /&gt;
Décompresser l&#039;archive:&lt;br /&gt;
 tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz&lt;br /&gt;
&lt;br /&gt;
Ajouter dans /etc/profile ou $HOME/.profile. L&#039;exemple ci-dessous n&#039;est fonctionnel que si vous avez décompréssé dans /usr/local:&lt;br /&gt;
 export PATH=$PATH:/usr/local/go/bin&lt;br /&gt;
&lt;br /&gt;
Créer la variable GOPATH:&lt;br /&gt;
  export GOPATH=&amp;lt;YOUR_PATH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Télécharger les sources:&lt;br /&gt;
 go get github.com/influxdata/telegraf&lt;br /&gt;
&lt;br /&gt;
Aller dans le dossier de téléchargements:&lt;br /&gt;
 cd $GOPATH/src/github.com/influxdata/telegraf&lt;br /&gt;
 make&lt;br /&gt;
 sudo cp telegraf /usr/bin/&lt;br /&gt;
&lt;br /&gt;
====Configuration de Telegraf====&lt;br /&gt;
&lt;br /&gt;
Un exemple de fichier de configuration est obtenu via la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 telegraf -sample-config -input-filter mqtt_consumer -output-filter influxdb &amp;gt; YOUR_FILE.conf&lt;br /&gt;
[https://github.com/influxdata/telegraf/tree/master/plugins/inputs/mqtt_consumer Exemple configuration mqtt]&lt;br /&gt;
&lt;br /&gt;
Changez l&#039;adresse et le port du broker mqtt et de la base influxDB. Choissez les topics auxquels souscrire, le format des données reçu de la part du broker (json,influx...) &lt;br /&gt;
&lt;br /&gt;
Si vous utilisez des certificats auto-signés ne pas oublier&lt;br /&gt;
 skip_verify_ssl = true&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration lu au démarrage se situe dans :&lt;br /&gt;
 /etc/telegraf&lt;br /&gt;
&lt;br /&gt;
Pour renommer le fichier de configuration lu au démarrage :&lt;br /&gt;
 sudo nano /etc/init.d/telegraf&lt;br /&gt;
&lt;br /&gt;
Changer la ligne avec la variable confile=/etc/telegraf/YOUR_FILE.conf&lt;br /&gt;
&lt;br /&gt;
===Passage d&#039;influxDB en https===&lt;br /&gt;
Dans le fichier /etc/influxdb/infludb.conf :&lt;br /&gt;
&lt;br /&gt;
Modifier les attributs de [admin] et [http] en mettant https = true et le chemin vers la clé/certificat pour influxDB. Une subtilité est à retenir pour influxDB ssl. En effet, la clé et le certificat doivent être dans le même fichier :&lt;br /&gt;
 cat key.pem crt.pem &amp;gt; key_crt.pem&lt;br /&gt;
&lt;br /&gt;
==Sprint 5 (du 29 Février au 6 Mars)==&lt;br /&gt;
&lt;br /&gt;
=== Ajout de Widget dans grafana integrant cartographie leaflet ===&lt;br /&gt;
Attention --&amp;gt; cette tache ne sera pas réalisée car sur le forum de grafana ou d&#039;autres nous avons vu qu&#039;intégrer de la cartographie était dans les projet à venir de grafana, par consequent il est inutile de perdre du temps sur une tache qui sera prochainement réalisée.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;une PKI ===&lt;br /&gt;
&lt;br /&gt;
Une PKI (Public Key Infrastructure) permet de gérer la création, la récupération et la révocation de certificats. Nous avons, dans le cadre de la sécurisation de notre plateforme, d&#039;en créer une dans le but de fournir des certificats à nos différentes machines. Nous avons décider de suivre le tutoriel suivant :&lt;br /&gt;
* Mise en place d&#039;une d&#039;une PKI: http://stankiewicz.free.fr/Wikka/wikka.php?wakka=HowtoPKI&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé à travailler sur ce tutoriel. Cependant, celui-ci semble être obsolète (certaines technologies semblent avoir évoluées depuis et donc certaines actions du tutoriel ne fonctionnent plus). Nous avons perdu beaucoup de temps à essayer de résoudre ces problèmes.&lt;br /&gt;
&lt;br /&gt;
===Configuration d&#039;OpenVPN, dans le but d&#039;ajouter de nouveaux utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
Au départ, nous avions alloué une instance Amazon dédiée à OpenVPN. Plus précisément, c&#039;était une image dans laquelle OpenVPN était préinstallé. Nous n&#039;arrivions pas à ajouter de nouveaux utilisateurs pour ce VPN avec cette instance. Nous avons donc décidé de supprimer l&#039;instance Amazon d&#039;OpenVPN et de l&#039;installer par nous même sur notre instance principale. Après avoir fait cela, nous arrivions à créer différents utilisateurs pour notre VPN. Cependant, nous avons remarqué qu&#039;OpenVPN limite le nombre de connexions à deux utilisateurs maximum (en même temps).&lt;br /&gt;
&lt;br /&gt;
==Sprint 6 (du 7 Mars au 13 Mars)==&lt;br /&gt;
Equipement des salles avec les raspberry pi , les capteurs enocean, les capteurs Zwave&lt;br /&gt;
&lt;br /&gt;
Ajout de fichier de configuration dans l&#039;application meteor, pour faciliter le déploiement. Ajout par exemple de chemins génériques.&lt;br /&gt;
&lt;br /&gt;
Intégration Kadira à l&#039;application Meteor, Dashboard disponible pour l&#039;administrateur&lt;br /&gt;
&lt;br /&gt;
Installation du package : &lt;br /&gt;
 # meteor add meteorhacks:kadira&lt;br /&gt;
&lt;br /&gt;
Ajout au settings.json&lt;br /&gt;
&lt;br /&gt;
 #&amp;quot;kadira&amp;quot;: { &lt;br /&gt;
 # &amp;quot;appId&amp;quot;: &amp;quot;&amp;lt;your id&amp;gt;&amp;quot;, &lt;br /&gt;
 # &amp;quot;appSecret&amp;quot;: &amp;quot;&amp;lt;your app&amp;gt;&amp;quot; &lt;br /&gt;
 #}&lt;br /&gt;
&lt;br /&gt;
[[File:kadira.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Sprint 7 (du 14 Mars au 17 Mars)==&lt;br /&gt;
* Equipement des salles air et fablab avec les capteurs Zwave, Rfxcom&lt;br /&gt;
* Contact des administrateurs réseaux de Polytech pour pouvoir débloquer les ports&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28102</id>
		<title>Projets-2015-2016-OpenSmartCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28102"/>
		<updated>2016-03-17T08:13:16Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Mise en place de Meteor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du Projet=&lt;br /&gt;
==Introduction==&lt;br /&gt;
Le projet nommé smart Campus est un projet étudiant visant à rendre un domaine universitaire intelligent. Il a vu le jour il y a 3 ans et il a comme but principal de rendre plus pratique la vie sur le campus ainsi que la gestion de celui-ci.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Le projet en 2014-2015 :&#039;&#039;&#039; [http://air.imag.fr/index.php/Proj-2014-2015-SmartCampus2015 &#039;&#039;&#039;SmartCampus2014-2015&#039;&#039;&#039;]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Le projet en 2013-2014 :&#039;&#039;&#039; [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi &#039;&#039;&#039;SmartCampus2013-2014&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur Raspberry Pi&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_raspi &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
Le tutoriel ci-dessus est un résumé des étapes décrites dans les sprint ci-dessous. Grâce à ce tutoriel on obtient rapidement le flux créé sur node-red les cartes dans l&#039;état nécessaire au fonctionnement de l&#039;application. Après l&#039;édition du fichier settings.json, la carte est prête à envoyer des données via MQTT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur serveur(s) Ubuntu 14.04&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_serveur &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
==L&#039;équipe==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RICM5 : &#039;&#039;&#039;&lt;br /&gt;
*Quentin Torck&lt;br /&gt;
*Vivien Michel&lt;br /&gt;
*Jérémy Hammerer &lt;br /&gt;
*Rama Codazzi&lt;br /&gt;
*Zhengmeng Zhang&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT : &#039;&#039;&#039;&lt;br /&gt;
*Andréas Gillet-Pascal&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encadrants : &#039;&#039;&#039;&lt;br /&gt;
*Didier Donsez&lt;br /&gt;
*Vivien Quéma&lt;br /&gt;
&lt;br /&gt;
=Organisation du Projet=&lt;br /&gt;
Dans le but de mener à bien notre projet, nous avons décider d&#039;utiliser la méthode agile Scrum. Le projet étant à faire dans un court intervalle de temps (2 mois), nous avons décidé de faire des sprints d&#039;une semaine chacun.&lt;br /&gt;
&lt;br /&gt;
==Sprint 1 (du 25 Janvier au 31 Janvier)==&lt;br /&gt;
Matériel récupéré:&lt;br /&gt;
* Gateways&lt;br /&gt;
** [[Raspberry Pi]] 2 + Alimentation 5V DC&lt;br /&gt;
* [[ZWave]]&lt;br /&gt;
** Clé USB Sigma ZWave&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2921-aeon-labs-detecteur-multifonctions-6-en-1-multisensor-z-wave-plus-gen5-1220000013100.html Détecteur de présence Aeon-labs ZWave]&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2608-zipato-detecteur-z-wave-4-en-1-mouvement-ouverture-luminosite-tem-3858890730425.html Détecteur d&#039;ouverture Zipato ZWave]&lt;br /&gt;
*[[Rfxcom]]&lt;br /&gt;
** Récepteur RFXCom 443 MHz&lt;br /&gt;
** Station WMR88&lt;br /&gt;
** Sonde Oregon Hygro Baro&lt;br /&gt;
** Sonde Oregon Luminosité&lt;br /&gt;
** Sonde Oregon Thermo Hygro All Weather&lt;br /&gt;
* [[enOcean]]&lt;br /&gt;
* Digital Security Camera&lt;br /&gt;
** [[DLink DSC 5222L]] PTZ, UPnP&lt;br /&gt;
&lt;br /&gt;
Travail effectué:&lt;br /&gt;
** Etude de l&#039;existant&lt;br /&gt;
** Etude des données de la métro de Grenoble, savoir si l&#039;on peut leur apporter de nouvelles données ou non.&lt;br /&gt;
&lt;br /&gt;
A voir&lt;br /&gt;
* http://fablab.ensimag.fr/index.php/SmartCampus/FicheSuivi&lt;br /&gt;
* http://air.imag.fr/index.php/PM2M/2016/TP&lt;br /&gt;
* http://air.imag.fr/index.php/GrenobloisFut%C3%A9&lt;br /&gt;
&lt;br /&gt;
==Sprint 2 (du 1 Février au 7 Février)==&lt;br /&gt;
&lt;br /&gt;
Architecture réalisée avec Didier Donsez :&lt;br /&gt;
[[Image:Architecture_SmartCampus_2016.png|800px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
L&#039;utilisation de [http://www.angular-meteor.com/ Météor] avec une base de donnée MongoDB est possible . Une alternative à explorer est [http://sailsjs.org/ Sails.js]. Étant donné le caractère exploratoire de ce sprint, l&#039;architecture peut être amenée à changer. Notamment en ce qui concerne l&#039;utilisation de Météor ou la base de donnée MongoDB.&lt;br /&gt;
 &lt;br /&gt;
Taches : &lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de Météor et de [https://kadira.io/ Kadira] à travers des tutoriels. Installation locale pour l&#039;instant.&lt;br /&gt;
&lt;br /&gt;
*Installer un serveur Mosquito/MQTT(S) pour les communications avec les cartes&lt;br /&gt;
&lt;br /&gt;
*Installer Node-Red sur Rasberry PI : faire flux de reception/envoie entre la carte et le serveur MQTT : [http://nodered.org/docs/hardware/raspberrypi.html Tutoriel d&#039;installation Node-Red]&lt;br /&gt;
&lt;br /&gt;
[http://www.rs-online.com/designspark/electronics/eng/blog/building-distributed-node-red-applications-with-mqtt Tutoriel pour connecter Node-Red avec serveur MQTT]. Ceci est à adapter suivant la configuration dans settings.json&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/015f1c7463476d5e5fd8 Regarder ce flux existant proposant un envoie sécurisé sur le serveur]&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/bf9814b4c6bffda3c675 Regarder ce flux existant pour envoyer des données reçues par la Z-Wave]&lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de [https://www.twilio.com/ Twilio] pour l&#039;envoie de sms automatique depuis les cartes. Technologies JavaScript utilisable sur serveur Node.js&lt;br /&gt;
&lt;br /&gt;
=== Prendre en main sa rasberry pi à distance ===&lt;br /&gt;
http://www.framboise314.fr/prenez-la-main-a-distance-sur-votre-raspberry-pi-avec-vnc/&lt;br /&gt;
&lt;br /&gt;
===Installation sur Rasberry Pi Wheezy===&lt;br /&gt;
* Lancer node-red sur la rasberry-pi B+ grâce aux commandes suivantes dans un script. Sur l&#039;OS Debian wheezy. &lt;br /&gt;
 &lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #install nodered&lt;br /&gt;
 sudo apt-get  remove nodered&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
 # install Node-red&lt;br /&gt;
 sudo npm install -g --unsafe-perm node-red&lt;br /&gt;
 echo  nmp---------------------&amp;gt;[OK]&lt;br /&gt;
&lt;br /&gt;
Tentatives de démarrer le serveur au boot de la carte sur l&#039;OS Wheezy. Malgré plusieurs tentatives (utilisation de update.rc, de PM2) le serveur ne démarre pas au lancement.&lt;br /&gt;
&lt;br /&gt;
=== Utilisation de la plateforme AWS d&#039;Amazon ===&lt;br /&gt;
* Création d&#039;un compte gratuit sur Amazon d&#039;une validité d&#039;un an.&lt;br /&gt;
* Création d&#039;une machine virtuelle Ubuntu sur la plateforme.&lt;br /&gt;
* Installation et mise en marche d&#039;un serveur Mosquitto (broker) sur la machine virtuelle. (voir [http://mosquitto.org/2013/01/mosquitto-debian-repository/ installation])&lt;br /&gt;
&lt;br /&gt;
===Sur l&#039;OS Debian Jessie : Une version de node-red est pré-installée.===&lt;br /&gt;
&lt;br /&gt;
Pour passer de Wheezy à Jessie (solution adoptée) : installation de [https://www.raspberrypi.org/downloads/noobs/ NOOBS] puis de Debian Jessie via cet utilitaire. Il est nécessaire d&#039;avoir une carte SD vierge ou de la formater.&lt;br /&gt;
&lt;br /&gt;
Mise à jour des logiciels :&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
le système pré-installé sur Jessie permet de lancer au démarrage et, en cas de panne, de relancer le serveur node-red grâce à nodered.service.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;activer, taper la commande :&lt;br /&gt;
 sudo systemctl enable nodered.service&lt;br /&gt;
&lt;br /&gt;
===Installation des noeuds RFXcom pour le récepteur 433 Mhz et du noeud pour le récepteur Zwave===&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d&#039;installer npm pour ajouter des noeuds à node-red:&lt;br /&gt;
 sudo apt-get install npm&lt;br /&gt;
&lt;br /&gt;
Les noeuds sont à installer dans le dossier $HOME/.node-red/ pour qu&#039;un seul utilisateur y ai accès. La commande npm sans -g installera le noeud dans le dossier courant. Sinon avec l&#039;option -g et les droits root dans le dossier node_module/node-red. Pour que le noeud apparaisse, il faut redémarrer node-red.&lt;br /&gt;
&lt;br /&gt;
====Téléchargement du noeud RFXcom====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-rfxcom Noeud RfxCom]&lt;br /&gt;
&lt;br /&gt;
====Installation des noeuds Zwave====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-openzwave Noeud Zwave]&lt;br /&gt;
&lt;br /&gt;
Ce noeud dépend d&#039;une version d&#039;Openzwave avec nodejs : [https://github.com/OpenZWave/node-openzwave-shared node-openzave]. Il faut donc installer la librairie OpenZwave.&lt;br /&gt;
&lt;br /&gt;
Téléchargement de la version 1.4 [https://github.com/OpenZWave/open-zwave/releases/tag/v1.4 OpenZwave 1.4] en zip.&lt;br /&gt;
&lt;br /&gt;
Dans le répertoire décompressé.&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
La commande make, provoquant la compilation, peut mettre du temps.&lt;br /&gt;
Il est possible qu&#039;une librairie soit manquante et provoque une erreur.&lt;br /&gt;
&lt;br /&gt;
Pour y remédier :&lt;br /&gt;
 sudo apt-get install libudev-dev&lt;br /&gt;
&lt;br /&gt;
La commande make install copie les librairies openzwave dans /usr/local/lib. Si node-red n&#039;est pas dans /usr/local/lib/node_modules/ il faut déplacer les librairies dans /usr/lib/.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier la bonne installation, lors de lancement de node-red, un noeud Zwave in et Zwave out sont respectivement dans Input et Output.&lt;br /&gt;
&lt;br /&gt;
L&#039;installation du noeud peut provoquer une erreur si la version de nodejs est inférieure ou égale à 0.10.29&lt;br /&gt;
&lt;br /&gt;
====Configuration des ports====&lt;br /&gt;
&lt;br /&gt;
http://www.latelierdugeek.fr/2015/02/02/domotique-partie-8-ajout-du-support-du-z-wave-dans-domoticz/&lt;br /&gt;
&lt;br /&gt;
====Mettre à jour nodejs==== &lt;br /&gt;
 sudo apt-get remove nodered&lt;br /&gt;
 sudo apt-get remove nodejs nodejs-legacy&lt;br /&gt;
 sudo apt-get remove npm&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 2=====&lt;br /&gt;
 curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -&lt;br /&gt;
 sudo apt-get install -y build-essential python-dev python-rpi.gpio nodejs&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi=====&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
&lt;br /&gt;
Une fois nodejs mis à jour(nodejs -v &amp;gt; 0.12.x ou 4.2.x)&lt;br /&gt;
 sudo npm cache clean&lt;br /&gt;
 sudo npm install -g --unsafe-perm  node-red&lt;br /&gt;
&lt;br /&gt;
=====Remettre les scripts de lancement et de démarrage=====&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/quentin74/Smartcampus/master/node-red/nodered.service -O /lib/systemd/system/nodered.service&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop&lt;br /&gt;
 sudo chmod +x /usr/bin/node-red-st*&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
==Sprint 3 (du 8 Février au 14 Février)==&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;un VPN ===&lt;br /&gt;
Dans le but de pouvoir avancer plus facilement dans le projet, nous avons dû mettre en place un serveur VPN car les ports utilisés par MQTT sont bloqués sur le réseau de l&#039;université. Il est donc impossible pour une Raspberry Pi de communiquer avec un serveur mosquitto basé sur la plateforme AWS sans passer par un VPN (en utilisant le réseau de l&#039;université). L&#039;avantage d&#039;utiliser un VPN est aussi de sécuriser les communications entre les Raspberry pi et le serveur mosquitto. Les étapes de la mise en place de notre VPN sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
* Création d&#039;une nouvelle machine virtuelle dans le but d&#039;installer un serveur VPN openVPN dans le cluster d&#039;amazon (voir [https://www.youtube.com/watch?v=VWqRrMGHJQg installation]).&lt;br /&gt;
&lt;br /&gt;
* Installation d&#039;un client VPN sur une Raspberry&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&#039;une base de donnée [https://influxdata.com/ InfluxDB]===&lt;br /&gt;
&lt;br /&gt;
Installation sur le serveur amazone d&#039;une base InfluxDB:&lt;br /&gt;
 wget https://s3.amazonaws.com/influxdb/influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
 sudo dpkg -i influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
&lt;br /&gt;
===Installation de [http://grafana.org/download/ Grafana]===&lt;br /&gt;
Connexion avec la base InfluxDB et première visualisation de données émises par les capteurs météorologiques.&lt;br /&gt;
Avec ce Framework, nous pouvons visualiser l&#039;occupation d&#039;une salle ou non, en fonction des capteurs de présence.&lt;br /&gt;
&lt;br /&gt;
[[File:Grafana.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Nous pouvons également afficher des graphique pour voir les variations de température au cours du temps.&lt;br /&gt;
[[File:Grafana2.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
===Modification du flow Node-red===&lt;br /&gt;
Récupération d&#039;informations depuis le récepteur RfxCom et envoie vers le broker mqtt.&lt;br /&gt;
&lt;br /&gt;
==Sprint 4 (du 15 Février au 21 Février)==&lt;br /&gt;
===Mise en place de Meteor===&lt;br /&gt;
Installation des différents paquets nécessaires à la mise en place de l&#039;application&lt;br /&gt;
 # curl https://install.meteor.com/ | sh&lt;br /&gt;
 # meteor add meteorhacks:npm&lt;br /&gt;
 # npm install mqtt --save&lt;br /&gt;
 # sudo npm install fs&lt;br /&gt;
&lt;br /&gt;
[[File:meteor.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
===Mise en place de Leaflet===&lt;br /&gt;
&lt;br /&gt;
 # meteor add bevanhunt:leaflet&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
Cliquer sur une des 2 salles équipées et obtenir les informations en temps réels&lt;br /&gt;
&lt;br /&gt;
===Passage en MQTTS===&lt;br /&gt;
Changement du port de configuration sur le flow node-red : 1883 -&amp;gt; 8883&lt;br /&gt;
Activation du cryptage tls/ssl et désactivation de la vérification du certificat du serveur. En effet, tous les certificats générés sont auto-signés. Afin que la connexion puisse se faire il faut, soit un certificat signé par une autorité reconnue, soit désactiver la vérification.&lt;br /&gt;
&lt;br /&gt;
Pour Telegraf (voir installation ci-dessous)&lt;br /&gt;
&lt;br /&gt;
Changement du port et définition de la clé et du certificat pour la communication cryptée dans le fichier de configuration.&lt;br /&gt;
&lt;br /&gt;
Pour le broker mosquitto, nous avons changé le fichier config dans le but de pouvoir utiliser TLS/SSL. Le fichier config est complété comme suivant :&lt;br /&gt;
 # Place your local configuration in /etc/mosquitto/conf.d/&lt;br /&gt;
 #&lt;br /&gt;
 # A full description of the configuration file is at&lt;br /&gt;
 # /usr/share/doc/mosquitto/examples/mosquitto.conf.example&lt;br /&gt;
 pid_file /var/run/mosquitto.pid&lt;br /&gt;
 #TLS&lt;br /&gt;
 require_certificate false&lt;br /&gt;
 listener 8883&lt;br /&gt;
 cafile /etc/mosquitto/ca_certificates/ca.crt&lt;br /&gt;
 certfile /etc/mosquitto/certs/server.crt&lt;br /&gt;
 keyfile /etc/mosquitto/certs/server.key&lt;br /&gt;
 #&lt;br /&gt;
 persistence true&lt;br /&gt;
 persistence_location /var/lib/mosquitto/&lt;br /&gt;
 log_dest file /var/log/mosquitto/mosquitto.log&lt;br /&gt;
 include_dir /etc/mosquitto/conf.d&lt;br /&gt;
 allow_anonymous true&lt;br /&gt;
 password_file /etc/mosquitto/passwd&lt;br /&gt;
&lt;br /&gt;
===Installation de [https://github.com/influxdata/telegraf Telegraf]===&lt;br /&gt;
La dernière release précompilée pour Ubuntu(0.10.2) ne contient pas le plugin &amp;quot;mqtt_consumer&amp;quot;. Elle ne sera disponible que dans la release 0.10.3. Il faut donc l&#039;installer depuis les sources si la version n&#039;est pas supérieur à 0.10.3.&lt;br /&gt;
Afin de faciliter le démarrage automatique de Telegraf, on installe via le package debian puis on remplacera l&#039;exécutable par une version plus récente:&lt;br /&gt;
 &lt;br /&gt;
[http://get.influxdb.org/telegraf/telegraf_0.10.3-1_amd64.deb Dernière version disponible actuellement]&lt;br /&gt;
&lt;br /&gt;
====Installation de GO====&lt;br /&gt;
Sur AWS, une version de go est pré-existante mais non fonctionnelle car non à jour.&lt;br /&gt;
 sudo rm /usr/bin/go&lt;br /&gt;
&lt;br /&gt;
Choisir la dernière version de go : [https://golang.org/dl/ GO]&lt;br /&gt;
&lt;br /&gt;
Décompresser l&#039;archive:&lt;br /&gt;
 tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz&lt;br /&gt;
&lt;br /&gt;
Ajouter dans /etc/profile ou $HOME/.profile. L&#039;exemple ci-dessous n&#039;est fonctionnel que si vous avez décompréssé dans /usr/local:&lt;br /&gt;
 export PATH=$PATH:/usr/local/go/bin&lt;br /&gt;
&lt;br /&gt;
Créer la variable GOPATH:&lt;br /&gt;
  export GOPATH=&amp;lt;YOUR_PATH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Télécharger les sources:&lt;br /&gt;
 go get github.com/influxdata/telegraf&lt;br /&gt;
&lt;br /&gt;
Aller dans le dossier de téléchargements:&lt;br /&gt;
 cd $GOPATH/src/github.com/influxdata/telegraf&lt;br /&gt;
 make&lt;br /&gt;
 sudo cp telegraf /usr/bin/&lt;br /&gt;
&lt;br /&gt;
====Configuration de Telegraf====&lt;br /&gt;
&lt;br /&gt;
Un exemple de fichier de configuration est obtenu via la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 telegraf -sample-config -input-filter mqtt_consumer -output-filter influxdb &amp;gt; YOUR_FILE.conf&lt;br /&gt;
[https://github.com/influxdata/telegraf/tree/master/plugins/inputs/mqtt_consumer Exemple configuration mqtt]&lt;br /&gt;
&lt;br /&gt;
Changez l&#039;adresse et le port du broker mqtt et de la base influxDB. Choissez les topics auxquels souscrire, le format des données reçu de la part du broker (json,influx...) &lt;br /&gt;
&lt;br /&gt;
Si vous utilisez des certificats auto-signés ne pas oublier&lt;br /&gt;
 skip_verify_ssl = true&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration lu au démarrage se situe dans :&lt;br /&gt;
 /etc/telegraf&lt;br /&gt;
&lt;br /&gt;
Pour renommer le fichier de configuration lu au démarrage :&lt;br /&gt;
 sudo nano /etc/init.d/telegraf&lt;br /&gt;
&lt;br /&gt;
Changer la ligne avec la variable confile=/etc/telegraf/YOUR_FILE.conf&lt;br /&gt;
&lt;br /&gt;
===Passage d&#039;influxDB en https===&lt;br /&gt;
Dans le fichier /etc/influxdb/infludb.conf :&lt;br /&gt;
&lt;br /&gt;
Modifier les attributs de [admin] et [http] en mettant https = true et le chemin vers la clé/certificat pour influxDB. Une subtilité est à retenir pour influxDB ssl. En effet, la clé et le certificat doivent être dans le même fichier :&lt;br /&gt;
 cat key.pem crt.pem &amp;gt; key_crt.pem&lt;br /&gt;
&lt;br /&gt;
==Sprint 5 (du 29 Février au 6 Mars)==&lt;br /&gt;
&lt;br /&gt;
=== Ajout de Widget dans grafana integrant cartographie leaflet ===&lt;br /&gt;
Attention --&amp;gt; cette tache ne sera pas réalisée car sur le forum de grafana ou d&#039;autres nous avons vu qu&#039;intégrer de la cartographie était dans les projet à venir de grafana, par consequent il est inutile de perdre du temps sur une tache qui sera prochainement réalisée.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;une PKI ===&lt;br /&gt;
&lt;br /&gt;
Une PKI (Public Key Infrastructure) permet de gérer la création, la récupération et la révocation de certificats. Nous avons, dans le cadre de la sécurisation de notre plateforme, d&#039;en créer une dans le but de fournir des certificats à nos différentes machines. Nous avons décider de suivre le tutoriel suivant :&lt;br /&gt;
* Mise en place d&#039;une d&#039;une PKI: http://stankiewicz.free.fr/Wikka/wikka.php?wakka=HowtoPKI&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé à travailler sur ce tutoriel. Cependant, celui-ci semble être obsolète (certaines technologies semblent avoir évoluées depuis et donc certaines actions du tutoriel ne fonctionnent plus). Nous avons perdu beaucoup de temps à essayer de résoudre ces problèmes.&lt;br /&gt;
&lt;br /&gt;
===Configuration d&#039;OpenVPN, dans le but d&#039;ajouter de nouveaux utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
Au départ, nous avions alloué une instance Amazon dédiée à OpenVPN. Plus précisément, c&#039;était une image dans laquelle OpenVPN était préinstallé. Nous n&#039;arrivions pas à ajouter de nouveaux utilisateurs pour ce VPN avec cette instance. Nous avons donc décidé de supprimer l&#039;instance Amazon d&#039;OpenVPN et de l&#039;installer par nous même sur notre instance principale. Après avoir fait cela, nous arrivions à créer différents utilisateurs pour notre VPN. Cependant, nous avons remarqué qu&#039;OpenVPN limite le nombre de connexions à deux utilisateurs maximum (en même temps).&lt;br /&gt;
&lt;br /&gt;
==Sprint 6 (du 7 Mars au 13 Mars)==&lt;br /&gt;
Equipement des salles avec les raspberry pi , les capteurs enocean, les capteurs Zwave&lt;br /&gt;
&lt;br /&gt;
Ajout de fichier de configuration dans l&#039;application meteor, pour faciliter le déploiement. Ajout par exemple de chemins génériques.&lt;br /&gt;
&lt;br /&gt;
Intégration Kadira à l&#039;application Meteor, Dashboard disponible pour l&#039;administrateur&lt;br /&gt;
&lt;br /&gt;
[[File:kadira.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Sprint 7 (du 14 Mars au 17 Mars)==&lt;br /&gt;
* Equipement des salles air et fablab avec les capteurs Zwave, Rfxcom&lt;br /&gt;
* Contact des administrateurs réseaux de Polytech pour pouvoir débloquer les ports&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Kadira.PNG&amp;diff=28091</id>
		<title>File:Kadira.PNG</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Kadira.PNG&amp;diff=28091"/>
		<updated>2016-03-16T22:49:23Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28090</id>
		<title>Projets-2015-2016-OpenSmartCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28090"/>
		<updated>2016-03-16T22:49:03Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Sprint 6 (du 7 Mars au 13 Mars) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du Projet=&lt;br /&gt;
==Introduction==&lt;br /&gt;
Le projet nommé smart Campus est un projet étudiant visant à rendre un domaine universitaire intelligent. Il a vu le jour il y a 3 ans et il a comme but principal de rendre plus pratique la vie sur le campus ainsi que la gestion de celui-ci.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Le projet en 2014-2015 :&#039;&#039;&#039; [http://air.imag.fr/index.php/Proj-2014-2015-SmartCampus2015 &#039;&#039;&#039;SmartCampus2014-2015&#039;&#039;&#039;]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Le projet en 2013-2014 :&#039;&#039;&#039; [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi &#039;&#039;&#039;SmartCampus2013-2014&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur Raspberry Pi&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_raspi &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
Le tutoriel ci-dessus est un résumé des étapes décrites dans les sprint ci-dessous. Grâce à ce tutoriel on obtient rapidement le flux créé sur node-red les cartes dans l&#039;état nécessaire au fonctionnement de l&#039;application. Après l&#039;édition du fichier settings.json, la carte est prête à envoyer des données via MQTT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur serveur(s) Ubuntu 14.04&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_serveur &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
==L&#039;équipe==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RICM5 : &#039;&#039;&#039;&lt;br /&gt;
*Quentin Torck&lt;br /&gt;
*Vivien Michel&lt;br /&gt;
*Jérémy Hammerer &lt;br /&gt;
*Rama Codazzi&lt;br /&gt;
*Zhengmeng Zhang&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT : &#039;&#039;&#039;&lt;br /&gt;
*Andréas Gillet-Pascal&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encadrants : &#039;&#039;&#039;&lt;br /&gt;
*Didier Donsez&lt;br /&gt;
*Vivien Quéma&lt;br /&gt;
&lt;br /&gt;
=Organisation du Projet=&lt;br /&gt;
Dans le but de mener à bien notre projet, nous avons décider d&#039;utiliser la méthode agile Scrum. Le projet étant à faire dans un court intervalle de temps (2 mois), nous avons décidé de faire des sprints d&#039;une semaine chacun.&lt;br /&gt;
&lt;br /&gt;
==Sprint 1 (du 25 Janvier au 31 Janvier)==&lt;br /&gt;
Matériel récupéré:&lt;br /&gt;
* Gateways&lt;br /&gt;
** [[Raspberry Pi]] 2 + Alimentation 5V DC&lt;br /&gt;
* [[ZWave]]&lt;br /&gt;
** Clé USB Sigma ZWave&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2921-aeon-labs-detecteur-multifonctions-6-en-1-multisensor-z-wave-plus-gen5-1220000013100.html Détecteur de présence Aeon-labs ZWave]&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2608-zipato-detecteur-z-wave-4-en-1-mouvement-ouverture-luminosite-tem-3858890730425.html Détecteur d&#039;ouverture Zipato ZWave]&lt;br /&gt;
*[[Rfxcom]]&lt;br /&gt;
** Récepteur RFXCom 443 MHz&lt;br /&gt;
** Station WMR88&lt;br /&gt;
** Sonde Oregon Hygro Baro&lt;br /&gt;
** Sonde Oregon Luminosité&lt;br /&gt;
** Sonde Oregon Thermo Hygro All Weather&lt;br /&gt;
* [[enOcean]]&lt;br /&gt;
* Digital Security Camera&lt;br /&gt;
** [[DLink DSC 5222L]] PTZ, UPnP&lt;br /&gt;
&lt;br /&gt;
Travail effectué:&lt;br /&gt;
** Etude de l&#039;existant&lt;br /&gt;
** Etude des données de la métro de Grenoble, savoir si l&#039;on peut leur apporter de nouvelles données ou non.&lt;br /&gt;
&lt;br /&gt;
A voir&lt;br /&gt;
* http://fablab.ensimag.fr/index.php/SmartCampus/FicheSuivi&lt;br /&gt;
* http://air.imag.fr/index.php/PM2M/2016/TP&lt;br /&gt;
* http://air.imag.fr/index.php/GrenobloisFut%C3%A9&lt;br /&gt;
&lt;br /&gt;
==Sprint 2 (du 1 Février au 7 Février)==&lt;br /&gt;
&lt;br /&gt;
Architecture réalisée avec Didier Donsez :&lt;br /&gt;
[[Image:Architecture_SmartCampus_2016.png|800px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
L&#039;utilisation de [http://www.angular-meteor.com/ Météor] avec une base de donnée MongoDB est possible . Une alternative à explorer est [http://sailsjs.org/ Sails.js]. Étant donné le caractère exploratoire de ce sprint, l&#039;architecture peut être amenée à changer. Notamment en ce qui concerne l&#039;utilisation de Météor ou la base de donnée MongoDB.&lt;br /&gt;
 &lt;br /&gt;
Taches : &lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de Météor et de [https://kadira.io/ Kadira] à travers des tutoriels. Installation locale pour l&#039;instant.&lt;br /&gt;
&lt;br /&gt;
*Installer un serveur Mosquito/MQTT(S) pour les communications avec les cartes&lt;br /&gt;
&lt;br /&gt;
*Installer Node-Red sur Rasberry PI : faire flux de reception/envoie entre la carte et le serveur MQTT : [http://nodered.org/docs/hardware/raspberrypi.html Tutoriel d&#039;installation Node-Red]&lt;br /&gt;
&lt;br /&gt;
[http://www.rs-online.com/designspark/electronics/eng/blog/building-distributed-node-red-applications-with-mqtt Tutoriel pour connecter Node-Red avec serveur MQTT]. Ceci est à adapter suivant la configuration dans settings.json&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/015f1c7463476d5e5fd8 Regarder ce flux existant proposant un envoie sécurisé sur le serveur]&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/bf9814b4c6bffda3c675 Regarder ce flux existant pour envoyer des données reçues par la Z-Wave]&lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de [https://www.twilio.com/ Twilio] pour l&#039;envoie de sms automatique depuis les cartes. Technologies JavaScript utilisable sur serveur Node.js&lt;br /&gt;
&lt;br /&gt;
=== Prendre en main sa rasberry pi à distance ===&lt;br /&gt;
http://www.framboise314.fr/prenez-la-main-a-distance-sur-votre-raspberry-pi-avec-vnc/&lt;br /&gt;
&lt;br /&gt;
===Installation sur Rasberry Pi Wheezy===&lt;br /&gt;
* Lancer node-red sur la rasberry-pi B+ grâce aux commandes suivantes dans un script. Sur l&#039;OS Debian wheezy. &lt;br /&gt;
 &lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #install nodered&lt;br /&gt;
 sudo apt-get  remove nodered&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
 # install Node-red&lt;br /&gt;
 sudo npm install -g --unsafe-perm node-red&lt;br /&gt;
 echo  nmp---------------------&amp;gt;[OK]&lt;br /&gt;
&lt;br /&gt;
Tentatives de démarrer le serveur au boot de la carte sur l&#039;OS Wheezy. Malgré plusieurs tentatives (utilisation de update.rc, de PM2) le serveur ne démarre pas au lancement.&lt;br /&gt;
&lt;br /&gt;
=== Utilisation de la plateforme AWS d&#039;Amazon ===&lt;br /&gt;
* Création d&#039;un compte gratuit sur Amazon d&#039;une validité d&#039;un an.&lt;br /&gt;
* Création d&#039;une machine virtuelle Ubuntu sur la plateforme.&lt;br /&gt;
* Installation et mise en marche d&#039;un serveur Mosquitto (broker) sur la machine virtuelle. (voir [http://mosquitto.org/2013/01/mosquitto-debian-repository/ installation])&lt;br /&gt;
&lt;br /&gt;
===Sur l&#039;OS Debian Jessie : Une version de node-red est pré-installée.===&lt;br /&gt;
&lt;br /&gt;
Pour passer de Wheezy à Jessie (solution adoptée) : installation de [https://www.raspberrypi.org/downloads/noobs/ NOOBS] puis de Debian Jessie via cet utilitaire. Il est nécessaire d&#039;avoir une carte SD vierge ou de la formater.&lt;br /&gt;
&lt;br /&gt;
Mise à jour des logiciels :&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
le système pré-installé sur Jessie permet de lancer au démarrage et, en cas de panne, de relancer le serveur node-red grâce à nodered.service.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;activer, taper la commande :&lt;br /&gt;
 sudo systemctl enable nodered.service&lt;br /&gt;
&lt;br /&gt;
===Installation des noeuds RFXcom pour le récepteur 433 Mhz et du noeud pour le récepteur Zwave===&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d&#039;installer npm pour ajouter des noeuds à node-red:&lt;br /&gt;
 sudo apt-get install npm&lt;br /&gt;
&lt;br /&gt;
Les noeuds sont à installer dans le dossier $HOME/.node-red/ pour qu&#039;un seul utilisateur y ai accès. La commande npm sans -g installera le noeud dans le dossier courant. Sinon avec l&#039;option -g et les droits root dans le dossier node_module/node-red. Pour que le noeud apparaisse, il faut redémarrer node-red.&lt;br /&gt;
&lt;br /&gt;
====Téléchargement du noeud RFXcom====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-rfxcom Noeud RfxCom]&lt;br /&gt;
&lt;br /&gt;
====Installation des noeuds Zwave====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-openzwave Noeud Zwave]&lt;br /&gt;
&lt;br /&gt;
Ce noeud dépend d&#039;une version d&#039;Openzwave avec nodejs : [https://github.com/OpenZWave/node-openzwave-shared node-openzave]. Il faut donc installer la librairie OpenZwave.&lt;br /&gt;
&lt;br /&gt;
Téléchargement de la version 1.4 [https://github.com/OpenZWave/open-zwave/releases/tag/v1.4 OpenZwave 1.4] en zip.&lt;br /&gt;
&lt;br /&gt;
Dans le répertoire décompressé.&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
La commande make, provoquant la compilation, peut mettre du temps.&lt;br /&gt;
Il est possible qu&#039;une librairie soit manquante et provoque une erreur.&lt;br /&gt;
&lt;br /&gt;
Pour y remédier :&lt;br /&gt;
 sudo apt-get install libudev-dev&lt;br /&gt;
&lt;br /&gt;
La commande make install copie les librairies openzwave dans /usr/local/lib. Si node-red n&#039;est pas dans /usr/local/lib/node_modules/ il faut déplacer les librairies dans /usr/lib/.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier la bonne installation, lors de lancement de node-red, un noeud Zwave in et Zwave out sont respectivement dans Input et Output.&lt;br /&gt;
&lt;br /&gt;
L&#039;installation du noeud peut provoquer une erreur si la version de nodejs est inférieure ou égale à 0.10.29&lt;br /&gt;
&lt;br /&gt;
====Configuration des ports====&lt;br /&gt;
&lt;br /&gt;
http://www.latelierdugeek.fr/2015/02/02/domotique-partie-8-ajout-du-support-du-z-wave-dans-domoticz/&lt;br /&gt;
&lt;br /&gt;
====Mettre à jour nodejs==== &lt;br /&gt;
 sudo apt-get remove nodered&lt;br /&gt;
 sudo apt-get remove nodejs nodejs-legacy&lt;br /&gt;
 sudo apt-get remove npm&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 2=====&lt;br /&gt;
 curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -&lt;br /&gt;
 sudo apt-get install -y build-essential python-dev python-rpi.gpio nodejs&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi=====&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
&lt;br /&gt;
Une fois nodejs mis à jour(nodejs -v &amp;gt; 0.12.x ou 4.2.x)&lt;br /&gt;
 sudo npm cache clean&lt;br /&gt;
 sudo npm install -g --unsafe-perm  node-red&lt;br /&gt;
&lt;br /&gt;
=====Remettre les scripts de lancement et de démarrage=====&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/quentin74/Smartcampus/master/node-red/nodered.service -O /lib/systemd/system/nodered.service&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop&lt;br /&gt;
 sudo chmod +x /usr/bin/node-red-st*&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
==Sprint 3 (du 8 Février au 14 Février)==&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;un VPN ===&lt;br /&gt;
Dans le but de pouvoir avancer plus facilement dans le projet, nous avons dû mettre en place un serveur VPN car les ports utilisés par MQTT sont bloqués sur le réseau de l&#039;université. Il est donc impossible pour une Raspberry Pi de communiquer avec un serveur mosquitto basé sur la plateforme AWS sans passer par un VPN (en utilisant le réseau de l&#039;université). L&#039;avantage d&#039;utiliser un VPN est aussi de sécuriser les communications entre les Raspberry pi et le serveur mosquitto. Les étapes de la mise en place de notre VPN sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
* Création d&#039;une nouvelle machine virtuelle dans le but d&#039;installer un serveur VPN openVPN dans le cluster d&#039;amazon (voir [https://www.youtube.com/watch?v=VWqRrMGHJQg installation]).&lt;br /&gt;
&lt;br /&gt;
* Installation d&#039;un client VPN sur une Raspberry&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&#039;une base de donnée [https://influxdata.com/ InfluxDB]===&lt;br /&gt;
&lt;br /&gt;
Installation sur le serveur amazone d&#039;une base InfluxDB:&lt;br /&gt;
 wget https://s3.amazonaws.com/influxdb/influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
 sudo dpkg -i influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
&lt;br /&gt;
===Installation de [http://grafana.org/download/ Grafana]===&lt;br /&gt;
Connexion avec la base InfluxDB et première visualisation de données émises par les capteurs météorologiques.&lt;br /&gt;
Avec ce Framework, nous pouvons visualiser l&#039;occupation d&#039;une salle ou non, en fonction des capteurs de présence.&lt;br /&gt;
&lt;br /&gt;
[[File:Grafana.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Nous pouvons également afficher des graphique pour voir les variations de température au cours du temps.&lt;br /&gt;
[[File:Grafana2.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
===Modification du flow Node-red===&lt;br /&gt;
Récupération d&#039;informations depuis le récepteur RfxCom et envoie vers le broker mqtt.&lt;br /&gt;
&lt;br /&gt;
==Sprint 4 (du 15 Février au 21 Février)==&lt;br /&gt;
===Mise en place de Meteor===&lt;br /&gt;
Installation des différents paquets nécessaires à la mise en place de l&#039;application&lt;br /&gt;
&lt;br /&gt;
 # meteor add meteorhacks:npm&lt;br /&gt;
 # npm install mqtt --save&lt;br /&gt;
 # sudo npm install fs&lt;br /&gt;
&lt;br /&gt;
[[File:meteor.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
===Mise en place de Leaflet===&lt;br /&gt;
&lt;br /&gt;
 # meteor add bevanhunt:leaflet&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
Cliquer sur une des 2 salles équipées et obtenir les informations en temps réels&lt;br /&gt;
&lt;br /&gt;
===Passage en MQTTS===&lt;br /&gt;
Changement du port de configuration sur le flow node-red : 1883 -&amp;gt; 8883&lt;br /&gt;
Activation du cryptage tls/ssl et désactivation de la vérification du certificat du serveur. En effet, tous les certificats générés sont auto-signés. Afin que la connexion puisse se faire il faut, soit un certificat signé par une autorité reconnue, soit désactiver la vérification.&lt;br /&gt;
&lt;br /&gt;
Pour Telegraf (voir installation ci-dessous)&lt;br /&gt;
&lt;br /&gt;
Changement du port et définition de la clé et du certificat pour la communication cryptée dans le fichier de configuration.&lt;br /&gt;
&lt;br /&gt;
Pour le broker mosquitto, nous avons changé le fichier config dans le but de pouvoir utiliser TLS/SSL. Le fichier config est complété comme suivant :&lt;br /&gt;
 # Place your local configuration in /etc/mosquitto/conf.d/&lt;br /&gt;
 #&lt;br /&gt;
 # A full description of the configuration file is at&lt;br /&gt;
 # /usr/share/doc/mosquitto/examples/mosquitto.conf.example&lt;br /&gt;
 pid_file /var/run/mosquitto.pid&lt;br /&gt;
 #TLS&lt;br /&gt;
 require_certificate false&lt;br /&gt;
 listener 8883&lt;br /&gt;
 cafile /etc/mosquitto/ca_certificates/ca.crt&lt;br /&gt;
 certfile /etc/mosquitto/certs/server.crt&lt;br /&gt;
 keyfile /etc/mosquitto/certs/server.key&lt;br /&gt;
 #&lt;br /&gt;
 persistence true&lt;br /&gt;
 persistence_location /var/lib/mosquitto/&lt;br /&gt;
 log_dest file /var/log/mosquitto/mosquitto.log&lt;br /&gt;
 include_dir /etc/mosquitto/conf.d&lt;br /&gt;
 allow_anonymous true&lt;br /&gt;
 password_file /etc/mosquitto/passwd&lt;br /&gt;
&lt;br /&gt;
===Installation de [https://github.com/influxdata/telegraf Telegraf]===&lt;br /&gt;
La dernière release précompilée pour Ubuntu(0.10.2) ne contient pas le plugin &amp;quot;mqtt_consumer&amp;quot;. Elle ne sera disponible que dans la release 0.10.3. Il faut donc l&#039;installer depuis les sources si la version n&#039;est pas supérieur à 0.10.3.&lt;br /&gt;
Afin de faciliter le démarrage automatique de Telegraf, on installe via le package debian puis on remplacera l&#039;exécutable par une version plus récente:&lt;br /&gt;
 &lt;br /&gt;
[http://get.influxdb.org/telegraf/telegraf_0.10.3-1_amd64.deb Dernière version disponible actuellement]&lt;br /&gt;
&lt;br /&gt;
====Installation de GO====&lt;br /&gt;
Sur AWS, une version de go est pré-existante mais non fonctionnelle car non à jour.&lt;br /&gt;
 sudo rm /usr/bin/go&lt;br /&gt;
&lt;br /&gt;
Choisir la dernière version de go : [https://golang.org/dl/ GO]&lt;br /&gt;
&lt;br /&gt;
Décompresser l&#039;archive:&lt;br /&gt;
 tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz&lt;br /&gt;
&lt;br /&gt;
Ajouter dans /etc/profile ou $HOME/.profile. L&#039;exemple ci-dessous n&#039;est fonctionnel que si vous avez décompréssé dans /usr/local:&lt;br /&gt;
 export PATH=$PATH:/usr/local/go/bin&lt;br /&gt;
&lt;br /&gt;
Créer la variable GOPATH:&lt;br /&gt;
  export GOPATH=&amp;lt;YOUR_PATH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Télécharger les sources:&lt;br /&gt;
 go get github.com/influxdata/telegraf&lt;br /&gt;
&lt;br /&gt;
Aller dans le dossier de téléchargements:&lt;br /&gt;
 cd $GOPATH/src/github.com/influxdata/telegraf&lt;br /&gt;
 make&lt;br /&gt;
 sudo cp telegraf /usr/bin/&lt;br /&gt;
&lt;br /&gt;
====Configuration de Telegraf====&lt;br /&gt;
&lt;br /&gt;
Un exemple de fichier de configuration est obtenu via la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 telegraf -sample-config -input-filter mqtt_consumer -output-filter influxdb &amp;gt; YOUR_FILE.conf&lt;br /&gt;
[https://github.com/influxdata/telegraf/tree/master/plugins/inputs/mqtt_consumer Exemple configuration mqtt]&lt;br /&gt;
&lt;br /&gt;
Changez l&#039;adresse et le port du broker mqtt et de la base influxDB. Choissez les topics auxquels souscrire, le format des données reçu de la part du broker (json,influx...) &lt;br /&gt;
&lt;br /&gt;
Si vous utilisez des certificats auto-signés ne pas oublier&lt;br /&gt;
 skip_verify_ssl = true&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration lu au démarrage se situe dans :&lt;br /&gt;
 /etc/telegraf&lt;br /&gt;
&lt;br /&gt;
Pour renommer le fichier de configuration lu au démarrage :&lt;br /&gt;
 sudo nano /etc/init.d/telegraf&lt;br /&gt;
&lt;br /&gt;
Changer la ligne avec la variable confile=/etc/telegraf/YOUR_FILE.conf&lt;br /&gt;
&lt;br /&gt;
===Passage d&#039;influxDB en https===&lt;br /&gt;
Dans le fichier /etc/influxdb/infludb.conf :&lt;br /&gt;
&lt;br /&gt;
Modifier les attributs de [admin] et [http] en mettant https = true et le chemin vers la clé/certificat pour influxDB. Une subtilité est à retenir pour influxDB ssl. En effet, la clé et le certificat doivent être dans le même fichier :&lt;br /&gt;
 cat key.pem crt.pem &amp;gt; key_crt.pem&lt;br /&gt;
&lt;br /&gt;
==Sprint 5 (du 29 Février au 6 Mars)==&lt;br /&gt;
&lt;br /&gt;
=== Ajout de Widget dans grafana integrant cartographie leaflet ===&lt;br /&gt;
Attention --&amp;gt; cette tache ne sera pas réalisée car sur le forum de grafana ou d&#039;autres nous avons vu qu&#039;intégrer de la cartographie était dans les projet à venir de grafana, par consequent il est inutile de perdre du temps sur une tache qui sera prochainement réalisée.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;une PKI ===&lt;br /&gt;
&lt;br /&gt;
Une PKI (Public Key Infrastructure) permet de gérer la création, la récupération et la révocation de certificats. Nous avons, dans le cadre de la sécurisation de notre plateforme, d&#039;en créer une dans le but de fournir des certificats à nos différentes machines. Nous avons décider de suivre le tutoriel suivant :&lt;br /&gt;
* Mise en place d&#039;une d&#039;une PKI: http://stankiewicz.free.fr/Wikka/wikka.php?wakka=HowtoPKI&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé à travailler sur ce tutoriel. Cependant, celui-ci semble être obsolète (certaines technologies semblent avoir évoluées depuis et donc certaines actions du tutoriel ne fonctionnent plus). Nous avons perdu beaucoup de temps à essayer de résoudre ces problèmes.&lt;br /&gt;
&lt;br /&gt;
===Configuration d&#039;OpenVPN, dans le but d&#039;ajouter de nouveaux utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
Au départ, nous avions alloué une instance Amazon dédiée à OpenVPN. Plus précisément, c&#039;était une image dans laquelle OpenVPN était préinstallé. Nous n&#039;arrivions pas à ajouter de nouveaux utilisateurs pour ce VPN avec cette instance. Nous avons donc décidé de supprimer l&#039;instance Amazon d&#039;OpenVPN et de l&#039;installer par nous même sur notre instance principale. Après avoir fait cela, nous arrivions à créer différents utilisateurs pour notre VPN. Cependant, nous avons remarqué qu&#039;OpenVPN limite le nombre de connexions à deux utilisateurs maximum (en même temps).&lt;br /&gt;
&lt;br /&gt;
==Sprint 6 (du 7 Mars au 13 Mars)==&lt;br /&gt;
Equipement des salles avec les raspberry pi , les capteurs enocean, les capteurs Zwave&lt;br /&gt;
&lt;br /&gt;
Ajout de fichier de configuration dans l&#039;application meteor, pour faciliter le déploiement. Ajout par exemple de chemins génériques.&lt;br /&gt;
&lt;br /&gt;
Intégration Kadira à l&#039;application Meteor, Dashboard disponible pour l&#039;administrateur&lt;br /&gt;
&lt;br /&gt;
[[File:kadira.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Sprint 7 (du 14 Mars au 17 Mars)==&lt;br /&gt;
* Equipement des salles air et fablab avec les capteurs Zwave, Rfxcom&lt;br /&gt;
* Contact des administrateurs réseaux de Polytech pour pouvoir débloquer les ports&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28089</id>
		<title>Projets-2015-2016-OpenSmartCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28089"/>
		<updated>2016-03-16T22:46:09Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Mise en place de Leaflet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du Projet=&lt;br /&gt;
==Introduction==&lt;br /&gt;
Le projet nommé smart Campus est un projet étudiant visant à rendre un domaine universitaire intelligent. Il a vu le jour il y a 3 ans et il a comme but principal de rendre plus pratique la vie sur le campus ainsi que la gestion de celui-ci.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Le projet en 2014-2015 :&#039;&#039;&#039; [http://air.imag.fr/index.php/Proj-2014-2015-SmartCampus2015 &#039;&#039;&#039;SmartCampus2014-2015&#039;&#039;&#039;]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Le projet en 2013-2014 :&#039;&#039;&#039; [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi &#039;&#039;&#039;SmartCampus2013-2014&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur Raspberry Pi&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_raspi &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
Le tutoriel ci-dessus est un résumé des étapes décrites dans les sprint ci-dessous. Grâce à ce tutoriel on obtient rapidement le flux créé sur node-red les cartes dans l&#039;état nécessaire au fonctionnement de l&#039;application. Après l&#039;édition du fichier settings.json, la carte est prête à envoyer des données via MQTT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur serveur(s) Ubuntu 14.04&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_serveur &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
==L&#039;équipe==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RICM5 : &#039;&#039;&#039;&lt;br /&gt;
*Quentin Torck&lt;br /&gt;
*Vivien Michel&lt;br /&gt;
*Jérémy Hammerer &lt;br /&gt;
*Rama Codazzi&lt;br /&gt;
*Zhengmeng Zhang&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT : &#039;&#039;&#039;&lt;br /&gt;
*Andréas Gillet-Pascal&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encadrants : &#039;&#039;&#039;&lt;br /&gt;
*Didier Donsez&lt;br /&gt;
*Vivien Quéma&lt;br /&gt;
&lt;br /&gt;
=Organisation du Projet=&lt;br /&gt;
Dans le but de mener à bien notre projet, nous avons décider d&#039;utiliser la méthode agile Scrum. Le projet étant à faire dans un court intervalle de temps (2 mois), nous avons décidé de faire des sprints d&#039;une semaine chacun.&lt;br /&gt;
&lt;br /&gt;
==Sprint 1 (du 25 Janvier au 31 Janvier)==&lt;br /&gt;
Matériel récupéré:&lt;br /&gt;
* Gateways&lt;br /&gt;
** [[Raspberry Pi]] 2 + Alimentation 5V DC&lt;br /&gt;
* [[ZWave]]&lt;br /&gt;
** Clé USB Sigma ZWave&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2921-aeon-labs-detecteur-multifonctions-6-en-1-multisensor-z-wave-plus-gen5-1220000013100.html Détecteur de présence Aeon-labs ZWave]&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2608-zipato-detecteur-z-wave-4-en-1-mouvement-ouverture-luminosite-tem-3858890730425.html Détecteur d&#039;ouverture Zipato ZWave]&lt;br /&gt;
*[[Rfxcom]]&lt;br /&gt;
** Récepteur RFXCom 443 MHz&lt;br /&gt;
** Station WMR88&lt;br /&gt;
** Sonde Oregon Hygro Baro&lt;br /&gt;
** Sonde Oregon Luminosité&lt;br /&gt;
** Sonde Oregon Thermo Hygro All Weather&lt;br /&gt;
* [[enOcean]]&lt;br /&gt;
* Digital Security Camera&lt;br /&gt;
** [[DLink DSC 5222L]] PTZ, UPnP&lt;br /&gt;
&lt;br /&gt;
Travail effectué:&lt;br /&gt;
** Etude de l&#039;existant&lt;br /&gt;
** Etude des données de la métro de Grenoble, savoir si l&#039;on peut leur apporter de nouvelles données ou non.&lt;br /&gt;
&lt;br /&gt;
A voir&lt;br /&gt;
* http://fablab.ensimag.fr/index.php/SmartCampus/FicheSuivi&lt;br /&gt;
* http://air.imag.fr/index.php/PM2M/2016/TP&lt;br /&gt;
* http://air.imag.fr/index.php/GrenobloisFut%C3%A9&lt;br /&gt;
&lt;br /&gt;
==Sprint 2 (du 1 Février au 7 Février)==&lt;br /&gt;
&lt;br /&gt;
Architecture réalisée avec Didier Donsez :&lt;br /&gt;
[[Image:Architecture_SmartCampus_2016.png|800px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
L&#039;utilisation de [http://www.angular-meteor.com/ Météor] avec une base de donnée MongoDB est possible . Une alternative à explorer est [http://sailsjs.org/ Sails.js]. Étant donné le caractère exploratoire de ce sprint, l&#039;architecture peut être amenée à changer. Notamment en ce qui concerne l&#039;utilisation de Météor ou la base de donnée MongoDB.&lt;br /&gt;
 &lt;br /&gt;
Taches : &lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de Météor et de [https://kadira.io/ Kadira] à travers des tutoriels. Installation locale pour l&#039;instant.&lt;br /&gt;
&lt;br /&gt;
*Installer un serveur Mosquito/MQTT(S) pour les communications avec les cartes&lt;br /&gt;
&lt;br /&gt;
*Installer Node-Red sur Rasberry PI : faire flux de reception/envoie entre la carte et le serveur MQTT : [http://nodered.org/docs/hardware/raspberrypi.html Tutoriel d&#039;installation Node-Red]&lt;br /&gt;
&lt;br /&gt;
[http://www.rs-online.com/designspark/electronics/eng/blog/building-distributed-node-red-applications-with-mqtt Tutoriel pour connecter Node-Red avec serveur MQTT]. Ceci est à adapter suivant la configuration dans settings.json&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/015f1c7463476d5e5fd8 Regarder ce flux existant proposant un envoie sécurisé sur le serveur]&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/bf9814b4c6bffda3c675 Regarder ce flux existant pour envoyer des données reçues par la Z-Wave]&lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de [https://www.twilio.com/ Twilio] pour l&#039;envoie de sms automatique depuis les cartes. Technologies JavaScript utilisable sur serveur Node.js&lt;br /&gt;
&lt;br /&gt;
=== Prendre en main sa rasberry pi à distance ===&lt;br /&gt;
http://www.framboise314.fr/prenez-la-main-a-distance-sur-votre-raspberry-pi-avec-vnc/&lt;br /&gt;
&lt;br /&gt;
===Installation sur Rasberry Pi Wheezy===&lt;br /&gt;
* Lancer node-red sur la rasberry-pi B+ grâce aux commandes suivantes dans un script. Sur l&#039;OS Debian wheezy. &lt;br /&gt;
 &lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #install nodered&lt;br /&gt;
 sudo apt-get  remove nodered&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
 # install Node-red&lt;br /&gt;
 sudo npm install -g --unsafe-perm node-red&lt;br /&gt;
 echo  nmp---------------------&amp;gt;[OK]&lt;br /&gt;
&lt;br /&gt;
Tentatives de démarrer le serveur au boot de la carte sur l&#039;OS Wheezy. Malgré plusieurs tentatives (utilisation de update.rc, de PM2) le serveur ne démarre pas au lancement.&lt;br /&gt;
&lt;br /&gt;
=== Utilisation de la plateforme AWS d&#039;Amazon ===&lt;br /&gt;
* Création d&#039;un compte gratuit sur Amazon d&#039;une validité d&#039;un an.&lt;br /&gt;
* Création d&#039;une machine virtuelle Ubuntu sur la plateforme.&lt;br /&gt;
* Installation et mise en marche d&#039;un serveur Mosquitto (broker) sur la machine virtuelle. (voir [http://mosquitto.org/2013/01/mosquitto-debian-repository/ installation])&lt;br /&gt;
&lt;br /&gt;
===Sur l&#039;OS Debian Jessie : Une version de node-red est pré-installée.===&lt;br /&gt;
&lt;br /&gt;
Pour passer de Wheezy à Jessie (solution adoptée) : installation de [https://www.raspberrypi.org/downloads/noobs/ NOOBS] puis de Debian Jessie via cet utilitaire. Il est nécessaire d&#039;avoir une carte SD vierge ou de la formater.&lt;br /&gt;
&lt;br /&gt;
Mise à jour des logiciels :&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
le système pré-installé sur Jessie permet de lancer au démarrage et, en cas de panne, de relancer le serveur node-red grâce à nodered.service.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;activer, taper la commande :&lt;br /&gt;
 sudo systemctl enable nodered.service&lt;br /&gt;
&lt;br /&gt;
===Installation des noeuds RFXcom pour le récepteur 433 Mhz et du noeud pour le récepteur Zwave===&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d&#039;installer npm pour ajouter des noeuds à node-red:&lt;br /&gt;
 sudo apt-get install npm&lt;br /&gt;
&lt;br /&gt;
Les noeuds sont à installer dans le dossier $HOME/.node-red/ pour qu&#039;un seul utilisateur y ai accès. La commande npm sans -g installera le noeud dans le dossier courant. Sinon avec l&#039;option -g et les droits root dans le dossier node_module/node-red. Pour que le noeud apparaisse, il faut redémarrer node-red.&lt;br /&gt;
&lt;br /&gt;
====Téléchargement du noeud RFXcom====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-rfxcom Noeud RfxCom]&lt;br /&gt;
&lt;br /&gt;
====Installation des noeuds Zwave====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-openzwave Noeud Zwave]&lt;br /&gt;
&lt;br /&gt;
Ce noeud dépend d&#039;une version d&#039;Openzwave avec nodejs : [https://github.com/OpenZWave/node-openzwave-shared node-openzave]. Il faut donc installer la librairie OpenZwave.&lt;br /&gt;
&lt;br /&gt;
Téléchargement de la version 1.4 [https://github.com/OpenZWave/open-zwave/releases/tag/v1.4 OpenZwave 1.4] en zip.&lt;br /&gt;
&lt;br /&gt;
Dans le répertoire décompressé.&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
La commande make, provoquant la compilation, peut mettre du temps.&lt;br /&gt;
Il est possible qu&#039;une librairie soit manquante et provoque une erreur.&lt;br /&gt;
&lt;br /&gt;
Pour y remédier :&lt;br /&gt;
 sudo apt-get install libudev-dev&lt;br /&gt;
&lt;br /&gt;
La commande make install copie les librairies openzwave dans /usr/local/lib. Si node-red n&#039;est pas dans /usr/local/lib/node_modules/ il faut déplacer les librairies dans /usr/lib/.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier la bonne installation, lors de lancement de node-red, un noeud Zwave in et Zwave out sont respectivement dans Input et Output.&lt;br /&gt;
&lt;br /&gt;
L&#039;installation du noeud peut provoquer une erreur si la version de nodejs est inférieure ou égale à 0.10.29&lt;br /&gt;
&lt;br /&gt;
====Configuration des ports====&lt;br /&gt;
&lt;br /&gt;
http://www.latelierdugeek.fr/2015/02/02/domotique-partie-8-ajout-du-support-du-z-wave-dans-domoticz/&lt;br /&gt;
&lt;br /&gt;
====Mettre à jour nodejs==== &lt;br /&gt;
 sudo apt-get remove nodered&lt;br /&gt;
 sudo apt-get remove nodejs nodejs-legacy&lt;br /&gt;
 sudo apt-get remove npm&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 2=====&lt;br /&gt;
 curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -&lt;br /&gt;
 sudo apt-get install -y build-essential python-dev python-rpi.gpio nodejs&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi=====&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
&lt;br /&gt;
Une fois nodejs mis à jour(nodejs -v &amp;gt; 0.12.x ou 4.2.x)&lt;br /&gt;
 sudo npm cache clean&lt;br /&gt;
 sudo npm install -g --unsafe-perm  node-red&lt;br /&gt;
&lt;br /&gt;
=====Remettre les scripts de lancement et de démarrage=====&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/quentin74/Smartcampus/master/node-red/nodered.service -O /lib/systemd/system/nodered.service&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop&lt;br /&gt;
 sudo chmod +x /usr/bin/node-red-st*&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
==Sprint 3 (du 8 Février au 14 Février)==&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;un VPN ===&lt;br /&gt;
Dans le but de pouvoir avancer plus facilement dans le projet, nous avons dû mettre en place un serveur VPN car les ports utilisés par MQTT sont bloqués sur le réseau de l&#039;université. Il est donc impossible pour une Raspberry Pi de communiquer avec un serveur mosquitto basé sur la plateforme AWS sans passer par un VPN (en utilisant le réseau de l&#039;université). L&#039;avantage d&#039;utiliser un VPN est aussi de sécuriser les communications entre les Raspberry pi et le serveur mosquitto. Les étapes de la mise en place de notre VPN sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
* Création d&#039;une nouvelle machine virtuelle dans le but d&#039;installer un serveur VPN openVPN dans le cluster d&#039;amazon (voir [https://www.youtube.com/watch?v=VWqRrMGHJQg installation]).&lt;br /&gt;
&lt;br /&gt;
* Installation d&#039;un client VPN sur une Raspberry&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&#039;une base de donnée [https://influxdata.com/ InfluxDB]===&lt;br /&gt;
&lt;br /&gt;
Installation sur le serveur amazone d&#039;une base InfluxDB:&lt;br /&gt;
 wget https://s3.amazonaws.com/influxdb/influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
 sudo dpkg -i influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
&lt;br /&gt;
===Installation de [http://grafana.org/download/ Grafana]===&lt;br /&gt;
Connexion avec la base InfluxDB et première visualisation de données émises par les capteurs météorologiques.&lt;br /&gt;
Avec ce Framework, nous pouvons visualiser l&#039;occupation d&#039;une salle ou non, en fonction des capteurs de présence.&lt;br /&gt;
&lt;br /&gt;
[[File:Grafana.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Nous pouvons également afficher des graphique pour voir les variations de température au cours du temps.&lt;br /&gt;
[[File:Grafana2.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
===Modification du flow Node-red===&lt;br /&gt;
Récupération d&#039;informations depuis le récepteur RfxCom et envoie vers le broker mqtt.&lt;br /&gt;
&lt;br /&gt;
==Sprint 4 (du 15 Février au 21 Février)==&lt;br /&gt;
===Mise en place de Meteor===&lt;br /&gt;
Installation des différents paquets nécessaires à la mise en place de l&#039;application&lt;br /&gt;
&lt;br /&gt;
 # meteor add meteorhacks:npm&lt;br /&gt;
 # npm install mqtt --save&lt;br /&gt;
 # sudo npm install fs&lt;br /&gt;
&lt;br /&gt;
[[File:meteor.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
===Mise en place de Leaflet===&lt;br /&gt;
&lt;br /&gt;
 # meteor add bevanhunt:leaflet&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
Cliquer sur une des 2 salles équipées et obtenir les informations en temps réels&lt;br /&gt;
&lt;br /&gt;
===Passage en MQTTS===&lt;br /&gt;
Changement du port de configuration sur le flow node-red : 1883 -&amp;gt; 8883&lt;br /&gt;
Activation du cryptage tls/ssl et désactivation de la vérification du certificat du serveur. En effet, tous les certificats générés sont auto-signés. Afin que la connexion puisse se faire il faut, soit un certificat signé par une autorité reconnue, soit désactiver la vérification.&lt;br /&gt;
&lt;br /&gt;
Pour Telegraf (voir installation ci-dessous)&lt;br /&gt;
&lt;br /&gt;
Changement du port et définition de la clé et du certificat pour la communication cryptée dans le fichier de configuration.&lt;br /&gt;
&lt;br /&gt;
Pour le broker mosquitto, nous avons changé le fichier config dans le but de pouvoir utiliser TLS/SSL. Le fichier config est complété comme suivant :&lt;br /&gt;
 # Place your local configuration in /etc/mosquitto/conf.d/&lt;br /&gt;
 #&lt;br /&gt;
 # A full description of the configuration file is at&lt;br /&gt;
 # /usr/share/doc/mosquitto/examples/mosquitto.conf.example&lt;br /&gt;
 pid_file /var/run/mosquitto.pid&lt;br /&gt;
 #TLS&lt;br /&gt;
 require_certificate false&lt;br /&gt;
 listener 8883&lt;br /&gt;
 cafile /etc/mosquitto/ca_certificates/ca.crt&lt;br /&gt;
 certfile /etc/mosquitto/certs/server.crt&lt;br /&gt;
 keyfile /etc/mosquitto/certs/server.key&lt;br /&gt;
 #&lt;br /&gt;
 persistence true&lt;br /&gt;
 persistence_location /var/lib/mosquitto/&lt;br /&gt;
 log_dest file /var/log/mosquitto/mosquitto.log&lt;br /&gt;
 include_dir /etc/mosquitto/conf.d&lt;br /&gt;
 allow_anonymous true&lt;br /&gt;
 password_file /etc/mosquitto/passwd&lt;br /&gt;
&lt;br /&gt;
===Installation de [https://github.com/influxdata/telegraf Telegraf]===&lt;br /&gt;
La dernière release précompilée pour Ubuntu(0.10.2) ne contient pas le plugin &amp;quot;mqtt_consumer&amp;quot;. Elle ne sera disponible que dans la release 0.10.3. Il faut donc l&#039;installer depuis les sources si la version n&#039;est pas supérieur à 0.10.3.&lt;br /&gt;
Afin de faciliter le démarrage automatique de Telegraf, on installe via le package debian puis on remplacera l&#039;exécutable par une version plus récente:&lt;br /&gt;
 &lt;br /&gt;
[http://get.influxdb.org/telegraf/telegraf_0.10.3-1_amd64.deb Dernière version disponible actuellement]&lt;br /&gt;
&lt;br /&gt;
====Installation de GO====&lt;br /&gt;
Sur AWS, une version de go est pré-existante mais non fonctionnelle car non à jour.&lt;br /&gt;
 sudo rm /usr/bin/go&lt;br /&gt;
&lt;br /&gt;
Choisir la dernière version de go : [https://golang.org/dl/ GO]&lt;br /&gt;
&lt;br /&gt;
Décompresser l&#039;archive:&lt;br /&gt;
 tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz&lt;br /&gt;
&lt;br /&gt;
Ajouter dans /etc/profile ou $HOME/.profile. L&#039;exemple ci-dessous n&#039;est fonctionnel que si vous avez décompréssé dans /usr/local:&lt;br /&gt;
 export PATH=$PATH:/usr/local/go/bin&lt;br /&gt;
&lt;br /&gt;
Créer la variable GOPATH:&lt;br /&gt;
  export GOPATH=&amp;lt;YOUR_PATH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Télécharger les sources:&lt;br /&gt;
 go get github.com/influxdata/telegraf&lt;br /&gt;
&lt;br /&gt;
Aller dans le dossier de téléchargements:&lt;br /&gt;
 cd $GOPATH/src/github.com/influxdata/telegraf&lt;br /&gt;
 make&lt;br /&gt;
 sudo cp telegraf /usr/bin/&lt;br /&gt;
&lt;br /&gt;
====Configuration de Telegraf====&lt;br /&gt;
&lt;br /&gt;
Un exemple de fichier de configuration est obtenu via la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 telegraf -sample-config -input-filter mqtt_consumer -output-filter influxdb &amp;gt; YOUR_FILE.conf&lt;br /&gt;
[https://github.com/influxdata/telegraf/tree/master/plugins/inputs/mqtt_consumer Exemple configuration mqtt]&lt;br /&gt;
&lt;br /&gt;
Changez l&#039;adresse et le port du broker mqtt et de la base influxDB. Choissez les topics auxquels souscrire, le format des données reçu de la part du broker (json,influx...) &lt;br /&gt;
&lt;br /&gt;
Si vous utilisez des certificats auto-signés ne pas oublier&lt;br /&gt;
 skip_verify_ssl = true&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration lu au démarrage se situe dans :&lt;br /&gt;
 /etc/telegraf&lt;br /&gt;
&lt;br /&gt;
Pour renommer le fichier de configuration lu au démarrage :&lt;br /&gt;
 sudo nano /etc/init.d/telegraf&lt;br /&gt;
&lt;br /&gt;
Changer la ligne avec la variable confile=/etc/telegraf/YOUR_FILE.conf&lt;br /&gt;
&lt;br /&gt;
===Passage d&#039;influxDB en https===&lt;br /&gt;
Dans le fichier /etc/influxdb/infludb.conf :&lt;br /&gt;
&lt;br /&gt;
Modifier les attributs de [admin] et [http] en mettant https = true et le chemin vers la clé/certificat pour influxDB. Une subtilité est à retenir pour influxDB ssl. En effet, la clé et le certificat doivent être dans le même fichier :&lt;br /&gt;
 cat key.pem crt.pem &amp;gt; key_crt.pem&lt;br /&gt;
&lt;br /&gt;
==Sprint 5 (du 29 Février au 6 Mars)==&lt;br /&gt;
&lt;br /&gt;
=== Ajout de Widget dans grafana integrant cartographie leaflet ===&lt;br /&gt;
Attention --&amp;gt; cette tache ne sera pas réalisée car sur le forum de grafana ou d&#039;autres nous avons vu qu&#039;intégrer de la cartographie était dans les projet à venir de grafana, par consequent il est inutile de perdre du temps sur une tache qui sera prochainement réalisée.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;une PKI ===&lt;br /&gt;
&lt;br /&gt;
Une PKI (Public Key Infrastructure) permet de gérer la création, la récupération et la révocation de certificats. Nous avons, dans le cadre de la sécurisation de notre plateforme, d&#039;en créer une dans le but de fournir des certificats à nos différentes machines. Nous avons décider de suivre le tutoriel suivant :&lt;br /&gt;
* Mise en place d&#039;une d&#039;une PKI: http://stankiewicz.free.fr/Wikka/wikka.php?wakka=HowtoPKI&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé à travailler sur ce tutoriel. Cependant, celui-ci semble être obsolète (certaines technologies semblent avoir évoluées depuis et donc certaines actions du tutoriel ne fonctionnent plus). Nous avons perdu beaucoup de temps à essayer de résoudre ces problèmes.&lt;br /&gt;
&lt;br /&gt;
===Configuration d&#039;OpenVPN, dans le but d&#039;ajouter de nouveaux utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
Au départ, nous avions alloué une instance Amazon dédiée à OpenVPN. Plus précisément, c&#039;était une image dans laquelle OpenVPN était préinstallé. Nous n&#039;arrivions pas à ajouter de nouveaux utilisateurs pour ce VPN avec cette instance. Nous avons donc décidé de supprimer l&#039;instance Amazon d&#039;OpenVPN et de l&#039;installer par nous même sur notre instance principale. Après avoir fait cela, nous arrivions à créer différents utilisateurs pour notre VPN. Cependant, nous avons remarqué qu&#039;OpenVPN limite le nombre de connexions à deux utilisateurs maximum (en même temps).&lt;br /&gt;
&lt;br /&gt;
==Sprint 6 (du 7 Mars au 13 Mars)==&lt;br /&gt;
Equipement des salles avec les raspberry pi , les capteurs enocean, les capteurs Zwave&lt;br /&gt;
&lt;br /&gt;
Ajout de fichier de configuration dans l&#039;application meteor, pour faciliter le déploiement. Ajout par exemple de chemins génériques.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sprint 7 (du 14 Mars au 17 Mars)==&lt;br /&gt;
* Equipement des salles air et fablab avec les capteurs Zwave, Rfxcom&lt;br /&gt;
* Contact des administrateurs réseaux de Polytech pour pouvoir débloquer les ports&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28088</id>
		<title>Projets-2015-2016-OpenSmartCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28088"/>
		<updated>2016-03-16T22:45:59Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Mise en place de Meteor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du Projet=&lt;br /&gt;
==Introduction==&lt;br /&gt;
Le projet nommé smart Campus est un projet étudiant visant à rendre un domaine universitaire intelligent. Il a vu le jour il y a 3 ans et il a comme but principal de rendre plus pratique la vie sur le campus ainsi que la gestion de celui-ci.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Le projet en 2014-2015 :&#039;&#039;&#039; [http://air.imag.fr/index.php/Proj-2014-2015-SmartCampus2015 &#039;&#039;&#039;SmartCampus2014-2015&#039;&#039;&#039;]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Le projet en 2013-2014 :&#039;&#039;&#039; [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi &#039;&#039;&#039;SmartCampus2013-2014&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur Raspberry Pi&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_raspi &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
Le tutoriel ci-dessus est un résumé des étapes décrites dans les sprint ci-dessous. Grâce à ce tutoriel on obtient rapidement le flux créé sur node-red les cartes dans l&#039;état nécessaire au fonctionnement de l&#039;application. Après l&#039;édition du fichier settings.json, la carte est prête à envoyer des données via MQTT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur serveur(s) Ubuntu 14.04&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_serveur &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
==L&#039;équipe==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RICM5 : &#039;&#039;&#039;&lt;br /&gt;
*Quentin Torck&lt;br /&gt;
*Vivien Michel&lt;br /&gt;
*Jérémy Hammerer &lt;br /&gt;
*Rama Codazzi&lt;br /&gt;
*Zhengmeng Zhang&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT : &#039;&#039;&#039;&lt;br /&gt;
*Andréas Gillet-Pascal&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encadrants : &#039;&#039;&#039;&lt;br /&gt;
*Didier Donsez&lt;br /&gt;
*Vivien Quéma&lt;br /&gt;
&lt;br /&gt;
=Organisation du Projet=&lt;br /&gt;
Dans le but de mener à bien notre projet, nous avons décider d&#039;utiliser la méthode agile Scrum. Le projet étant à faire dans un court intervalle de temps (2 mois), nous avons décidé de faire des sprints d&#039;une semaine chacun.&lt;br /&gt;
&lt;br /&gt;
==Sprint 1 (du 25 Janvier au 31 Janvier)==&lt;br /&gt;
Matériel récupéré:&lt;br /&gt;
* Gateways&lt;br /&gt;
** [[Raspberry Pi]] 2 + Alimentation 5V DC&lt;br /&gt;
* [[ZWave]]&lt;br /&gt;
** Clé USB Sigma ZWave&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2921-aeon-labs-detecteur-multifonctions-6-en-1-multisensor-z-wave-plus-gen5-1220000013100.html Détecteur de présence Aeon-labs ZWave]&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2608-zipato-detecteur-z-wave-4-en-1-mouvement-ouverture-luminosite-tem-3858890730425.html Détecteur d&#039;ouverture Zipato ZWave]&lt;br /&gt;
*[[Rfxcom]]&lt;br /&gt;
** Récepteur RFXCom 443 MHz&lt;br /&gt;
** Station WMR88&lt;br /&gt;
** Sonde Oregon Hygro Baro&lt;br /&gt;
** Sonde Oregon Luminosité&lt;br /&gt;
** Sonde Oregon Thermo Hygro All Weather&lt;br /&gt;
* [[enOcean]]&lt;br /&gt;
* Digital Security Camera&lt;br /&gt;
** [[DLink DSC 5222L]] PTZ, UPnP&lt;br /&gt;
&lt;br /&gt;
Travail effectué:&lt;br /&gt;
** Etude de l&#039;existant&lt;br /&gt;
** Etude des données de la métro de Grenoble, savoir si l&#039;on peut leur apporter de nouvelles données ou non.&lt;br /&gt;
&lt;br /&gt;
A voir&lt;br /&gt;
* http://fablab.ensimag.fr/index.php/SmartCampus/FicheSuivi&lt;br /&gt;
* http://air.imag.fr/index.php/PM2M/2016/TP&lt;br /&gt;
* http://air.imag.fr/index.php/GrenobloisFut%C3%A9&lt;br /&gt;
&lt;br /&gt;
==Sprint 2 (du 1 Février au 7 Février)==&lt;br /&gt;
&lt;br /&gt;
Architecture réalisée avec Didier Donsez :&lt;br /&gt;
[[Image:Architecture_SmartCampus_2016.png|800px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
L&#039;utilisation de [http://www.angular-meteor.com/ Météor] avec une base de donnée MongoDB est possible . Une alternative à explorer est [http://sailsjs.org/ Sails.js]. Étant donné le caractère exploratoire de ce sprint, l&#039;architecture peut être amenée à changer. Notamment en ce qui concerne l&#039;utilisation de Météor ou la base de donnée MongoDB.&lt;br /&gt;
 &lt;br /&gt;
Taches : &lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de Météor et de [https://kadira.io/ Kadira] à travers des tutoriels. Installation locale pour l&#039;instant.&lt;br /&gt;
&lt;br /&gt;
*Installer un serveur Mosquito/MQTT(S) pour les communications avec les cartes&lt;br /&gt;
&lt;br /&gt;
*Installer Node-Red sur Rasberry PI : faire flux de reception/envoie entre la carte et le serveur MQTT : [http://nodered.org/docs/hardware/raspberrypi.html Tutoriel d&#039;installation Node-Red]&lt;br /&gt;
&lt;br /&gt;
[http://www.rs-online.com/designspark/electronics/eng/blog/building-distributed-node-red-applications-with-mqtt Tutoriel pour connecter Node-Red avec serveur MQTT]. Ceci est à adapter suivant la configuration dans settings.json&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/015f1c7463476d5e5fd8 Regarder ce flux existant proposant un envoie sécurisé sur le serveur]&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/bf9814b4c6bffda3c675 Regarder ce flux existant pour envoyer des données reçues par la Z-Wave]&lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de [https://www.twilio.com/ Twilio] pour l&#039;envoie de sms automatique depuis les cartes. Technologies JavaScript utilisable sur serveur Node.js&lt;br /&gt;
&lt;br /&gt;
=== Prendre en main sa rasberry pi à distance ===&lt;br /&gt;
http://www.framboise314.fr/prenez-la-main-a-distance-sur-votre-raspberry-pi-avec-vnc/&lt;br /&gt;
&lt;br /&gt;
===Installation sur Rasberry Pi Wheezy===&lt;br /&gt;
* Lancer node-red sur la rasberry-pi B+ grâce aux commandes suivantes dans un script. Sur l&#039;OS Debian wheezy. &lt;br /&gt;
 &lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #install nodered&lt;br /&gt;
 sudo apt-get  remove nodered&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
 # install Node-red&lt;br /&gt;
 sudo npm install -g --unsafe-perm node-red&lt;br /&gt;
 echo  nmp---------------------&amp;gt;[OK]&lt;br /&gt;
&lt;br /&gt;
Tentatives de démarrer le serveur au boot de la carte sur l&#039;OS Wheezy. Malgré plusieurs tentatives (utilisation de update.rc, de PM2) le serveur ne démarre pas au lancement.&lt;br /&gt;
&lt;br /&gt;
=== Utilisation de la plateforme AWS d&#039;Amazon ===&lt;br /&gt;
* Création d&#039;un compte gratuit sur Amazon d&#039;une validité d&#039;un an.&lt;br /&gt;
* Création d&#039;une machine virtuelle Ubuntu sur la plateforme.&lt;br /&gt;
* Installation et mise en marche d&#039;un serveur Mosquitto (broker) sur la machine virtuelle. (voir [http://mosquitto.org/2013/01/mosquitto-debian-repository/ installation])&lt;br /&gt;
&lt;br /&gt;
===Sur l&#039;OS Debian Jessie : Une version de node-red est pré-installée.===&lt;br /&gt;
&lt;br /&gt;
Pour passer de Wheezy à Jessie (solution adoptée) : installation de [https://www.raspberrypi.org/downloads/noobs/ NOOBS] puis de Debian Jessie via cet utilitaire. Il est nécessaire d&#039;avoir une carte SD vierge ou de la formater.&lt;br /&gt;
&lt;br /&gt;
Mise à jour des logiciels :&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
le système pré-installé sur Jessie permet de lancer au démarrage et, en cas de panne, de relancer le serveur node-red grâce à nodered.service.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;activer, taper la commande :&lt;br /&gt;
 sudo systemctl enable nodered.service&lt;br /&gt;
&lt;br /&gt;
===Installation des noeuds RFXcom pour le récepteur 433 Mhz et du noeud pour le récepteur Zwave===&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d&#039;installer npm pour ajouter des noeuds à node-red:&lt;br /&gt;
 sudo apt-get install npm&lt;br /&gt;
&lt;br /&gt;
Les noeuds sont à installer dans le dossier $HOME/.node-red/ pour qu&#039;un seul utilisateur y ai accès. La commande npm sans -g installera le noeud dans le dossier courant. Sinon avec l&#039;option -g et les droits root dans le dossier node_module/node-red. Pour que le noeud apparaisse, il faut redémarrer node-red.&lt;br /&gt;
&lt;br /&gt;
====Téléchargement du noeud RFXcom====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-rfxcom Noeud RfxCom]&lt;br /&gt;
&lt;br /&gt;
====Installation des noeuds Zwave====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-openzwave Noeud Zwave]&lt;br /&gt;
&lt;br /&gt;
Ce noeud dépend d&#039;une version d&#039;Openzwave avec nodejs : [https://github.com/OpenZWave/node-openzwave-shared node-openzave]. Il faut donc installer la librairie OpenZwave.&lt;br /&gt;
&lt;br /&gt;
Téléchargement de la version 1.4 [https://github.com/OpenZWave/open-zwave/releases/tag/v1.4 OpenZwave 1.4] en zip.&lt;br /&gt;
&lt;br /&gt;
Dans le répertoire décompressé.&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
La commande make, provoquant la compilation, peut mettre du temps.&lt;br /&gt;
Il est possible qu&#039;une librairie soit manquante et provoque une erreur.&lt;br /&gt;
&lt;br /&gt;
Pour y remédier :&lt;br /&gt;
 sudo apt-get install libudev-dev&lt;br /&gt;
&lt;br /&gt;
La commande make install copie les librairies openzwave dans /usr/local/lib. Si node-red n&#039;est pas dans /usr/local/lib/node_modules/ il faut déplacer les librairies dans /usr/lib/.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier la bonne installation, lors de lancement de node-red, un noeud Zwave in et Zwave out sont respectivement dans Input et Output.&lt;br /&gt;
&lt;br /&gt;
L&#039;installation du noeud peut provoquer une erreur si la version de nodejs est inférieure ou égale à 0.10.29&lt;br /&gt;
&lt;br /&gt;
====Configuration des ports====&lt;br /&gt;
&lt;br /&gt;
http://www.latelierdugeek.fr/2015/02/02/domotique-partie-8-ajout-du-support-du-z-wave-dans-domoticz/&lt;br /&gt;
&lt;br /&gt;
====Mettre à jour nodejs==== &lt;br /&gt;
 sudo apt-get remove nodered&lt;br /&gt;
 sudo apt-get remove nodejs nodejs-legacy&lt;br /&gt;
 sudo apt-get remove npm&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 2=====&lt;br /&gt;
 curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -&lt;br /&gt;
 sudo apt-get install -y build-essential python-dev python-rpi.gpio nodejs&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi=====&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
&lt;br /&gt;
Une fois nodejs mis à jour(nodejs -v &amp;gt; 0.12.x ou 4.2.x)&lt;br /&gt;
 sudo npm cache clean&lt;br /&gt;
 sudo npm install -g --unsafe-perm  node-red&lt;br /&gt;
&lt;br /&gt;
=====Remettre les scripts de lancement et de démarrage=====&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/quentin74/Smartcampus/master/node-red/nodered.service -O /lib/systemd/system/nodered.service&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop&lt;br /&gt;
 sudo chmod +x /usr/bin/node-red-st*&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
==Sprint 3 (du 8 Février au 14 Février)==&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;un VPN ===&lt;br /&gt;
Dans le but de pouvoir avancer plus facilement dans le projet, nous avons dû mettre en place un serveur VPN car les ports utilisés par MQTT sont bloqués sur le réseau de l&#039;université. Il est donc impossible pour une Raspberry Pi de communiquer avec un serveur mosquitto basé sur la plateforme AWS sans passer par un VPN (en utilisant le réseau de l&#039;université). L&#039;avantage d&#039;utiliser un VPN est aussi de sécuriser les communications entre les Raspberry pi et le serveur mosquitto. Les étapes de la mise en place de notre VPN sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
* Création d&#039;une nouvelle machine virtuelle dans le but d&#039;installer un serveur VPN openVPN dans le cluster d&#039;amazon (voir [https://www.youtube.com/watch?v=VWqRrMGHJQg installation]).&lt;br /&gt;
&lt;br /&gt;
* Installation d&#039;un client VPN sur une Raspberry&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&#039;une base de donnée [https://influxdata.com/ InfluxDB]===&lt;br /&gt;
&lt;br /&gt;
Installation sur le serveur amazone d&#039;une base InfluxDB:&lt;br /&gt;
 wget https://s3.amazonaws.com/influxdb/influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
 sudo dpkg -i influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
&lt;br /&gt;
===Installation de [http://grafana.org/download/ Grafana]===&lt;br /&gt;
Connexion avec la base InfluxDB et première visualisation de données émises par les capteurs météorologiques.&lt;br /&gt;
Avec ce Framework, nous pouvons visualiser l&#039;occupation d&#039;une salle ou non, en fonction des capteurs de présence.&lt;br /&gt;
&lt;br /&gt;
[[File:Grafana.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Nous pouvons également afficher des graphique pour voir les variations de température au cours du temps.&lt;br /&gt;
[[File:Grafana2.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
===Modification du flow Node-red===&lt;br /&gt;
Récupération d&#039;informations depuis le récepteur RfxCom et envoie vers le broker mqtt.&lt;br /&gt;
&lt;br /&gt;
==Sprint 4 (du 15 Février au 21 Février)==&lt;br /&gt;
===Mise en place de Meteor===&lt;br /&gt;
Installation des différents paquets nécessaires à la mise en place de l&#039;application&lt;br /&gt;
&lt;br /&gt;
 # meteor add meteorhacks:npm&lt;br /&gt;
 # npm install mqtt --save&lt;br /&gt;
 # sudo npm install fs&lt;br /&gt;
&lt;br /&gt;
[[File:meteor.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
===Mise en place de Leaflet===&lt;br /&gt;
&lt;br /&gt;
# meteor add bevanhunt:leaflet&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
Cliquer sur une des 2 salles équipées et obtenir les informations en temps réels&lt;br /&gt;
&lt;br /&gt;
===Passage en MQTTS===&lt;br /&gt;
Changement du port de configuration sur le flow node-red : 1883 -&amp;gt; 8883&lt;br /&gt;
Activation du cryptage tls/ssl et désactivation de la vérification du certificat du serveur. En effet, tous les certificats générés sont auto-signés. Afin que la connexion puisse se faire il faut, soit un certificat signé par une autorité reconnue, soit désactiver la vérification.&lt;br /&gt;
&lt;br /&gt;
Pour Telegraf (voir installation ci-dessous)&lt;br /&gt;
&lt;br /&gt;
Changement du port et définition de la clé et du certificat pour la communication cryptée dans le fichier de configuration.&lt;br /&gt;
&lt;br /&gt;
Pour le broker mosquitto, nous avons changé le fichier config dans le but de pouvoir utiliser TLS/SSL. Le fichier config est complété comme suivant :&lt;br /&gt;
 # Place your local configuration in /etc/mosquitto/conf.d/&lt;br /&gt;
 #&lt;br /&gt;
 # A full description of the configuration file is at&lt;br /&gt;
 # /usr/share/doc/mosquitto/examples/mosquitto.conf.example&lt;br /&gt;
 pid_file /var/run/mosquitto.pid&lt;br /&gt;
 #TLS&lt;br /&gt;
 require_certificate false&lt;br /&gt;
 listener 8883&lt;br /&gt;
 cafile /etc/mosquitto/ca_certificates/ca.crt&lt;br /&gt;
 certfile /etc/mosquitto/certs/server.crt&lt;br /&gt;
 keyfile /etc/mosquitto/certs/server.key&lt;br /&gt;
 #&lt;br /&gt;
 persistence true&lt;br /&gt;
 persistence_location /var/lib/mosquitto/&lt;br /&gt;
 log_dest file /var/log/mosquitto/mosquitto.log&lt;br /&gt;
 include_dir /etc/mosquitto/conf.d&lt;br /&gt;
 allow_anonymous true&lt;br /&gt;
 password_file /etc/mosquitto/passwd&lt;br /&gt;
&lt;br /&gt;
===Installation de [https://github.com/influxdata/telegraf Telegraf]===&lt;br /&gt;
La dernière release précompilée pour Ubuntu(0.10.2) ne contient pas le plugin &amp;quot;mqtt_consumer&amp;quot;. Elle ne sera disponible que dans la release 0.10.3. Il faut donc l&#039;installer depuis les sources si la version n&#039;est pas supérieur à 0.10.3.&lt;br /&gt;
Afin de faciliter le démarrage automatique de Telegraf, on installe via le package debian puis on remplacera l&#039;exécutable par une version plus récente:&lt;br /&gt;
 &lt;br /&gt;
[http://get.influxdb.org/telegraf/telegraf_0.10.3-1_amd64.deb Dernière version disponible actuellement]&lt;br /&gt;
&lt;br /&gt;
====Installation de GO====&lt;br /&gt;
Sur AWS, une version de go est pré-existante mais non fonctionnelle car non à jour.&lt;br /&gt;
 sudo rm /usr/bin/go&lt;br /&gt;
&lt;br /&gt;
Choisir la dernière version de go : [https://golang.org/dl/ GO]&lt;br /&gt;
&lt;br /&gt;
Décompresser l&#039;archive:&lt;br /&gt;
 tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz&lt;br /&gt;
&lt;br /&gt;
Ajouter dans /etc/profile ou $HOME/.profile. L&#039;exemple ci-dessous n&#039;est fonctionnel que si vous avez décompréssé dans /usr/local:&lt;br /&gt;
 export PATH=$PATH:/usr/local/go/bin&lt;br /&gt;
&lt;br /&gt;
Créer la variable GOPATH:&lt;br /&gt;
  export GOPATH=&amp;lt;YOUR_PATH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Télécharger les sources:&lt;br /&gt;
 go get github.com/influxdata/telegraf&lt;br /&gt;
&lt;br /&gt;
Aller dans le dossier de téléchargements:&lt;br /&gt;
 cd $GOPATH/src/github.com/influxdata/telegraf&lt;br /&gt;
 make&lt;br /&gt;
 sudo cp telegraf /usr/bin/&lt;br /&gt;
&lt;br /&gt;
====Configuration de Telegraf====&lt;br /&gt;
&lt;br /&gt;
Un exemple de fichier de configuration est obtenu via la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 telegraf -sample-config -input-filter mqtt_consumer -output-filter influxdb &amp;gt; YOUR_FILE.conf&lt;br /&gt;
[https://github.com/influxdata/telegraf/tree/master/plugins/inputs/mqtt_consumer Exemple configuration mqtt]&lt;br /&gt;
&lt;br /&gt;
Changez l&#039;adresse et le port du broker mqtt et de la base influxDB. Choissez les topics auxquels souscrire, le format des données reçu de la part du broker (json,influx...) &lt;br /&gt;
&lt;br /&gt;
Si vous utilisez des certificats auto-signés ne pas oublier&lt;br /&gt;
 skip_verify_ssl = true&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration lu au démarrage se situe dans :&lt;br /&gt;
 /etc/telegraf&lt;br /&gt;
&lt;br /&gt;
Pour renommer le fichier de configuration lu au démarrage :&lt;br /&gt;
 sudo nano /etc/init.d/telegraf&lt;br /&gt;
&lt;br /&gt;
Changer la ligne avec la variable confile=/etc/telegraf/YOUR_FILE.conf&lt;br /&gt;
&lt;br /&gt;
===Passage d&#039;influxDB en https===&lt;br /&gt;
Dans le fichier /etc/influxdb/infludb.conf :&lt;br /&gt;
&lt;br /&gt;
Modifier les attributs de [admin] et [http] en mettant https = true et le chemin vers la clé/certificat pour influxDB. Une subtilité est à retenir pour influxDB ssl. En effet, la clé et le certificat doivent être dans le même fichier :&lt;br /&gt;
 cat key.pem crt.pem &amp;gt; key_crt.pem&lt;br /&gt;
&lt;br /&gt;
==Sprint 5 (du 29 Février au 6 Mars)==&lt;br /&gt;
&lt;br /&gt;
=== Ajout de Widget dans grafana integrant cartographie leaflet ===&lt;br /&gt;
Attention --&amp;gt; cette tache ne sera pas réalisée car sur le forum de grafana ou d&#039;autres nous avons vu qu&#039;intégrer de la cartographie était dans les projet à venir de grafana, par consequent il est inutile de perdre du temps sur une tache qui sera prochainement réalisée.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;une PKI ===&lt;br /&gt;
&lt;br /&gt;
Une PKI (Public Key Infrastructure) permet de gérer la création, la récupération et la révocation de certificats. Nous avons, dans le cadre de la sécurisation de notre plateforme, d&#039;en créer une dans le but de fournir des certificats à nos différentes machines. Nous avons décider de suivre le tutoriel suivant :&lt;br /&gt;
* Mise en place d&#039;une d&#039;une PKI: http://stankiewicz.free.fr/Wikka/wikka.php?wakka=HowtoPKI&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé à travailler sur ce tutoriel. Cependant, celui-ci semble être obsolète (certaines technologies semblent avoir évoluées depuis et donc certaines actions du tutoriel ne fonctionnent plus). Nous avons perdu beaucoup de temps à essayer de résoudre ces problèmes.&lt;br /&gt;
&lt;br /&gt;
===Configuration d&#039;OpenVPN, dans le but d&#039;ajouter de nouveaux utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
Au départ, nous avions alloué une instance Amazon dédiée à OpenVPN. Plus précisément, c&#039;était une image dans laquelle OpenVPN était préinstallé. Nous n&#039;arrivions pas à ajouter de nouveaux utilisateurs pour ce VPN avec cette instance. Nous avons donc décidé de supprimer l&#039;instance Amazon d&#039;OpenVPN et de l&#039;installer par nous même sur notre instance principale. Après avoir fait cela, nous arrivions à créer différents utilisateurs pour notre VPN. Cependant, nous avons remarqué qu&#039;OpenVPN limite le nombre de connexions à deux utilisateurs maximum (en même temps).&lt;br /&gt;
&lt;br /&gt;
==Sprint 6 (du 7 Mars au 13 Mars)==&lt;br /&gt;
Equipement des salles avec les raspberry pi , les capteurs enocean, les capteurs Zwave&lt;br /&gt;
&lt;br /&gt;
Ajout de fichier de configuration dans l&#039;application meteor, pour faciliter le déploiement. Ajout par exemple de chemins génériques.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sprint 7 (du 14 Mars au 17 Mars)==&lt;br /&gt;
* Equipement des salles air et fablab avec les capteurs Zwave, Rfxcom&lt;br /&gt;
* Contact des administrateurs réseaux de Polytech pour pouvoir débloquer les ports&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28087</id>
		<title>Projets-2015-2016-OpenSmartCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets-2015-2016-OpenSmartCampus&amp;diff=28087"/>
		<updated>2016-03-16T22:44:22Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Sprint 4 (du 15 Février au 21 Février) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du Projet=&lt;br /&gt;
==Introduction==&lt;br /&gt;
Le projet nommé smart Campus est un projet étudiant visant à rendre un domaine universitaire intelligent. Il a vu le jour il y a 3 ans et il a comme but principal de rendre plus pratique la vie sur le campus ainsi que la gestion de celui-ci.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Le projet en 2014-2015 :&#039;&#039;&#039; [http://air.imag.fr/index.php/Proj-2014-2015-SmartCampus2015 &#039;&#039;&#039;SmartCampus2014-2015&#039;&#039;&#039;]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Le projet en 2013-2014 :&#039;&#039;&#039; [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi &#039;&#039;&#039;SmartCampus2013-2014&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur Raspberry Pi&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_raspi &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
Le tutoriel ci-dessus est un résumé des étapes décrites dans les sprint ci-dessous. Grâce à ce tutoriel on obtient rapidement le flux créé sur node-red les cartes dans l&#039;état nécessaire au fonctionnement de l&#039;application. Après l&#039;édition du fichier settings.json, la carte est prête à envoyer des données via MQTT.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutoriel de déploiement de l&#039;application sur serveur(s) Ubuntu 14.04&#039;&#039;&#039; [http://air.imag.fr/index.php/Projets-2015-2016-OpenSmartCampus/tuto_serveur &#039;&#039;&#039;Tutoriel installation&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
==L&#039;équipe==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RICM5 : &#039;&#039;&#039;&lt;br /&gt;
*Quentin Torck&lt;br /&gt;
*Vivien Michel&lt;br /&gt;
*Jérémy Hammerer &lt;br /&gt;
*Rama Codazzi&lt;br /&gt;
*Zhengmeng Zhang&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DUT : &#039;&#039;&#039;&lt;br /&gt;
*Andréas Gillet-Pascal&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Encadrants : &#039;&#039;&#039;&lt;br /&gt;
*Didier Donsez&lt;br /&gt;
*Vivien Quéma&lt;br /&gt;
&lt;br /&gt;
=Organisation du Projet=&lt;br /&gt;
Dans le but de mener à bien notre projet, nous avons décider d&#039;utiliser la méthode agile Scrum. Le projet étant à faire dans un court intervalle de temps (2 mois), nous avons décidé de faire des sprints d&#039;une semaine chacun.&lt;br /&gt;
&lt;br /&gt;
==Sprint 1 (du 25 Janvier au 31 Janvier)==&lt;br /&gt;
Matériel récupéré:&lt;br /&gt;
* Gateways&lt;br /&gt;
** [[Raspberry Pi]] 2 + Alimentation 5V DC&lt;br /&gt;
* [[ZWave]]&lt;br /&gt;
** Clé USB Sigma ZWave&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2921-aeon-labs-detecteur-multifonctions-6-en-1-multisensor-z-wave-plus-gen5-1220000013100.html Détecteur de présence Aeon-labs ZWave]&lt;br /&gt;
** [http://www.domadoo.fr/fr/peripheriques/2608-zipato-detecteur-z-wave-4-en-1-mouvement-ouverture-luminosite-tem-3858890730425.html Détecteur d&#039;ouverture Zipato ZWave]&lt;br /&gt;
*[[Rfxcom]]&lt;br /&gt;
** Récepteur RFXCom 443 MHz&lt;br /&gt;
** Station WMR88&lt;br /&gt;
** Sonde Oregon Hygro Baro&lt;br /&gt;
** Sonde Oregon Luminosité&lt;br /&gt;
** Sonde Oregon Thermo Hygro All Weather&lt;br /&gt;
* [[enOcean]]&lt;br /&gt;
* Digital Security Camera&lt;br /&gt;
** [[DLink DSC 5222L]] PTZ, UPnP&lt;br /&gt;
&lt;br /&gt;
Travail effectué:&lt;br /&gt;
** Etude de l&#039;existant&lt;br /&gt;
** Etude des données de la métro de Grenoble, savoir si l&#039;on peut leur apporter de nouvelles données ou non.&lt;br /&gt;
&lt;br /&gt;
A voir&lt;br /&gt;
* http://fablab.ensimag.fr/index.php/SmartCampus/FicheSuivi&lt;br /&gt;
* http://air.imag.fr/index.php/PM2M/2016/TP&lt;br /&gt;
* http://air.imag.fr/index.php/GrenobloisFut%C3%A9&lt;br /&gt;
&lt;br /&gt;
==Sprint 2 (du 1 Février au 7 Février)==&lt;br /&gt;
&lt;br /&gt;
Architecture réalisée avec Didier Donsez :&lt;br /&gt;
[[Image:Architecture_SmartCampus_2016.png|800px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
L&#039;utilisation de [http://www.angular-meteor.com/ Météor] avec une base de donnée MongoDB est possible . Une alternative à explorer est [http://sailsjs.org/ Sails.js]. Étant donné le caractère exploratoire de ce sprint, l&#039;architecture peut être amenée à changer. Notamment en ce qui concerne l&#039;utilisation de Météor ou la base de donnée MongoDB.&lt;br /&gt;
 &lt;br /&gt;
Taches : &lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de Météor et de [https://kadira.io/ Kadira] à travers des tutoriels. Installation locale pour l&#039;instant.&lt;br /&gt;
&lt;br /&gt;
*Installer un serveur Mosquito/MQTT(S) pour les communications avec les cartes&lt;br /&gt;
&lt;br /&gt;
*Installer Node-Red sur Rasberry PI : faire flux de reception/envoie entre la carte et le serveur MQTT : [http://nodered.org/docs/hardware/raspberrypi.html Tutoriel d&#039;installation Node-Red]&lt;br /&gt;
&lt;br /&gt;
[http://www.rs-online.com/designspark/electronics/eng/blog/building-distributed-node-red-applications-with-mqtt Tutoriel pour connecter Node-Red avec serveur MQTT]. Ceci est à adapter suivant la configuration dans settings.json&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/015f1c7463476d5e5fd8 Regarder ce flux existant proposant un envoie sécurisé sur le serveur]&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/flow/bf9814b4c6bffda3c675 Regarder ce flux existant pour envoyer des données reçues par la Z-Wave]&lt;br /&gt;
&lt;br /&gt;
*Explorer l&#039;utilisation de [https://www.twilio.com/ Twilio] pour l&#039;envoie de sms automatique depuis les cartes. Technologies JavaScript utilisable sur serveur Node.js&lt;br /&gt;
&lt;br /&gt;
=== Prendre en main sa rasberry pi à distance ===&lt;br /&gt;
http://www.framboise314.fr/prenez-la-main-a-distance-sur-votre-raspberry-pi-avec-vnc/&lt;br /&gt;
&lt;br /&gt;
===Installation sur Rasberry Pi Wheezy===&lt;br /&gt;
* Lancer node-red sur la rasberry-pi B+ grâce aux commandes suivantes dans un script. Sur l&#039;OS Debian wheezy. &lt;br /&gt;
 &lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #install nodered&lt;br /&gt;
 sudo apt-get  remove nodered&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
 # install Node-red&lt;br /&gt;
 sudo npm install -g --unsafe-perm node-red&lt;br /&gt;
 echo  nmp---------------------&amp;gt;[OK]&lt;br /&gt;
&lt;br /&gt;
Tentatives de démarrer le serveur au boot de la carte sur l&#039;OS Wheezy. Malgré plusieurs tentatives (utilisation de update.rc, de PM2) le serveur ne démarre pas au lancement.&lt;br /&gt;
&lt;br /&gt;
=== Utilisation de la plateforme AWS d&#039;Amazon ===&lt;br /&gt;
* Création d&#039;un compte gratuit sur Amazon d&#039;une validité d&#039;un an.&lt;br /&gt;
* Création d&#039;une machine virtuelle Ubuntu sur la plateforme.&lt;br /&gt;
* Installation et mise en marche d&#039;un serveur Mosquitto (broker) sur la machine virtuelle. (voir [http://mosquitto.org/2013/01/mosquitto-debian-repository/ installation])&lt;br /&gt;
&lt;br /&gt;
===Sur l&#039;OS Debian Jessie : Une version de node-red est pré-installée.===&lt;br /&gt;
&lt;br /&gt;
Pour passer de Wheezy à Jessie (solution adoptée) : installation de [https://www.raspberrypi.org/downloads/noobs/ NOOBS] puis de Debian Jessie via cet utilitaire. Il est nécessaire d&#039;avoir une carte SD vierge ou de la formater.&lt;br /&gt;
&lt;br /&gt;
Mise à jour des logiciels :&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
le système pré-installé sur Jessie permet de lancer au démarrage et, en cas de panne, de relancer le serveur node-red grâce à nodered.service.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;activer, taper la commande :&lt;br /&gt;
 sudo systemctl enable nodered.service&lt;br /&gt;
&lt;br /&gt;
===Installation des noeuds RFXcom pour le récepteur 433 Mhz et du noeud pour le récepteur Zwave===&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire d&#039;installer npm pour ajouter des noeuds à node-red:&lt;br /&gt;
 sudo apt-get install npm&lt;br /&gt;
&lt;br /&gt;
Les noeuds sont à installer dans le dossier $HOME/.node-red/ pour qu&#039;un seul utilisateur y ai accès. La commande npm sans -g installera le noeud dans le dossier courant. Sinon avec l&#039;option -g et les droits root dans le dossier node_module/node-red. Pour que le noeud apparaisse, il faut redémarrer node-red.&lt;br /&gt;
&lt;br /&gt;
====Téléchargement du noeud RFXcom====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-rfxcom Noeud RfxCom]&lt;br /&gt;
&lt;br /&gt;
====Installation des noeuds Zwave====&lt;br /&gt;
&lt;br /&gt;
[http://flows.nodered.org/node/node-red-contrib-openzwave Noeud Zwave]&lt;br /&gt;
&lt;br /&gt;
Ce noeud dépend d&#039;une version d&#039;Openzwave avec nodejs : [https://github.com/OpenZWave/node-openzwave-shared node-openzave]. Il faut donc installer la librairie OpenZwave.&lt;br /&gt;
&lt;br /&gt;
Téléchargement de la version 1.4 [https://github.com/OpenZWave/open-zwave/releases/tag/v1.4 OpenZwave 1.4] en zip.&lt;br /&gt;
&lt;br /&gt;
Dans le répertoire décompressé.&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
La commande make, provoquant la compilation, peut mettre du temps.&lt;br /&gt;
Il est possible qu&#039;une librairie soit manquante et provoque une erreur.&lt;br /&gt;
&lt;br /&gt;
Pour y remédier :&lt;br /&gt;
 sudo apt-get install libudev-dev&lt;br /&gt;
&lt;br /&gt;
La commande make install copie les librairies openzwave dans /usr/local/lib. Si node-red n&#039;est pas dans /usr/local/lib/node_modules/ il faut déplacer les librairies dans /usr/lib/.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier la bonne installation, lors de lancement de node-red, un noeud Zwave in et Zwave out sont respectivement dans Input et Output.&lt;br /&gt;
&lt;br /&gt;
L&#039;installation du noeud peut provoquer une erreur si la version de nodejs est inférieure ou égale à 0.10.29&lt;br /&gt;
&lt;br /&gt;
====Configuration des ports====&lt;br /&gt;
&lt;br /&gt;
http://www.latelierdugeek.fr/2015/02/02/domotique-partie-8-ajout-du-support-du-z-wave-dans-domoticz/&lt;br /&gt;
&lt;br /&gt;
====Mettre à jour nodejs==== &lt;br /&gt;
 sudo apt-get remove nodered&lt;br /&gt;
 sudo apt-get remove nodejs nodejs-legacy&lt;br /&gt;
 sudo apt-get remove npm&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 2=====&lt;br /&gt;
 curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -&lt;br /&gt;
 sudo apt-get install -y build-essential python-dev python-rpi.gpio nodejs&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi=====&lt;br /&gt;
 wget http://node-arm.herokuapp.com/node_archive_armhf.deb&lt;br /&gt;
 sudo dpkg -i node_archive_armhf.deb&lt;br /&gt;
 sudo apt-get install build-essential python-dev python-rpi.gpio&lt;br /&gt;
&lt;br /&gt;
Une fois nodejs mis à jour(nodejs -v &amp;gt; 0.12.x ou 4.2.x)&lt;br /&gt;
 sudo npm cache clean&lt;br /&gt;
 sudo npm install -g --unsafe-perm  node-red&lt;br /&gt;
&lt;br /&gt;
=====Remettre les scripts de lancement et de démarrage=====&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/quentin74/Smartcampus/master/node-red/nodered.service -O /lib/systemd/system/nodered.service&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start&lt;br /&gt;
 sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop&lt;br /&gt;
 sudo chmod +x /usr/bin/node-red-st*&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
==Sprint 3 (du 8 Février au 14 Février)==&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;un VPN ===&lt;br /&gt;
Dans le but de pouvoir avancer plus facilement dans le projet, nous avons dû mettre en place un serveur VPN car les ports utilisés par MQTT sont bloqués sur le réseau de l&#039;université. Il est donc impossible pour une Raspberry Pi de communiquer avec un serveur mosquitto basé sur la plateforme AWS sans passer par un VPN (en utilisant le réseau de l&#039;université). L&#039;avantage d&#039;utiliser un VPN est aussi de sécuriser les communications entre les Raspberry pi et le serveur mosquitto. Les étapes de la mise en place de notre VPN sont les suivantes :&lt;br /&gt;
&lt;br /&gt;
* Création d&#039;une nouvelle machine virtuelle dans le but d&#039;installer un serveur VPN openVPN dans le cluster d&#039;amazon (voir [https://www.youtube.com/watch?v=VWqRrMGHJQg installation]).&lt;br /&gt;
&lt;br /&gt;
* Installation d&#039;un client VPN sur une Raspberry&lt;br /&gt;
&lt;br /&gt;
===Mise en place d&#039;une base de donnée [https://influxdata.com/ InfluxDB]===&lt;br /&gt;
&lt;br /&gt;
Installation sur le serveur amazone d&#039;une base InfluxDB:&lt;br /&gt;
 wget https://s3.amazonaws.com/influxdb/influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
 sudo dpkg -i influxdb_0.10.1-1_amd64.deb&lt;br /&gt;
&lt;br /&gt;
===Installation de [http://grafana.org/download/ Grafana]===&lt;br /&gt;
Connexion avec la base InfluxDB et première visualisation de données émises par les capteurs météorologiques.&lt;br /&gt;
Avec ce Framework, nous pouvons visualiser l&#039;occupation d&#039;une salle ou non, en fonction des capteurs de présence.&lt;br /&gt;
&lt;br /&gt;
[[File:Grafana.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Nous pouvons également afficher des graphique pour voir les variations de température au cours du temps.&lt;br /&gt;
[[File:Grafana2.png |1000px]]&lt;br /&gt;
&lt;br /&gt;
===Modification du flow Node-red===&lt;br /&gt;
Récupération d&#039;informations depuis le récepteur RfxCom et envoie vers le broker mqtt.&lt;br /&gt;
&lt;br /&gt;
==Sprint 4 (du 15 Février au 21 Février)==&lt;br /&gt;
===Mise en place de Meteor===&lt;br /&gt;
Installation des différents paquets nécessaires à la mise en place de l&#039;application&lt;br /&gt;
&lt;br /&gt;
# meteor add meteorhacks:npm&lt;br /&gt;
# npm install mqtt --save&lt;br /&gt;
# sudo npm install fs&lt;br /&gt;
&lt;br /&gt;
[[File:meteor.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
===Mise en place de Leaflet===&lt;br /&gt;
&lt;br /&gt;
# meteor add bevanhunt:leaflet&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet.png | 1000px]]&lt;br /&gt;
&lt;br /&gt;
Cliquer sur une des 2 salles équipées et obtenir les informations en temps réels&lt;br /&gt;
&lt;br /&gt;
===Passage en MQTTS===&lt;br /&gt;
Changement du port de configuration sur le flow node-red : 1883 -&amp;gt; 8883&lt;br /&gt;
Activation du cryptage tls/ssl et désactivation de la vérification du certificat du serveur. En effet, tous les certificats générés sont auto-signés. Afin que la connexion puisse se faire il faut, soit un certificat signé par une autorité reconnue, soit désactiver la vérification.&lt;br /&gt;
&lt;br /&gt;
Pour Telegraf (voir installation ci-dessous)&lt;br /&gt;
&lt;br /&gt;
Changement du port et définition de la clé et du certificat pour la communication cryptée dans le fichier de configuration.&lt;br /&gt;
&lt;br /&gt;
Pour le broker mosquitto, nous avons changé le fichier config dans le but de pouvoir utiliser TLS/SSL. Le fichier config est complété comme suivant :&lt;br /&gt;
 # Place your local configuration in /etc/mosquitto/conf.d/&lt;br /&gt;
 #&lt;br /&gt;
 # A full description of the configuration file is at&lt;br /&gt;
 # /usr/share/doc/mosquitto/examples/mosquitto.conf.example&lt;br /&gt;
 pid_file /var/run/mosquitto.pid&lt;br /&gt;
 #TLS&lt;br /&gt;
 require_certificate false&lt;br /&gt;
 listener 8883&lt;br /&gt;
 cafile /etc/mosquitto/ca_certificates/ca.crt&lt;br /&gt;
 certfile /etc/mosquitto/certs/server.crt&lt;br /&gt;
 keyfile /etc/mosquitto/certs/server.key&lt;br /&gt;
 #&lt;br /&gt;
 persistence true&lt;br /&gt;
 persistence_location /var/lib/mosquitto/&lt;br /&gt;
 log_dest file /var/log/mosquitto/mosquitto.log&lt;br /&gt;
 include_dir /etc/mosquitto/conf.d&lt;br /&gt;
 allow_anonymous true&lt;br /&gt;
 password_file /etc/mosquitto/passwd&lt;br /&gt;
&lt;br /&gt;
===Installation de [https://github.com/influxdata/telegraf Telegraf]===&lt;br /&gt;
La dernière release précompilée pour Ubuntu(0.10.2) ne contient pas le plugin &amp;quot;mqtt_consumer&amp;quot;. Elle ne sera disponible que dans la release 0.10.3. Il faut donc l&#039;installer depuis les sources si la version n&#039;est pas supérieur à 0.10.3.&lt;br /&gt;
Afin de faciliter le démarrage automatique de Telegraf, on installe via le package debian puis on remplacera l&#039;exécutable par une version plus récente:&lt;br /&gt;
 &lt;br /&gt;
[http://get.influxdb.org/telegraf/telegraf_0.10.3-1_amd64.deb Dernière version disponible actuellement]&lt;br /&gt;
&lt;br /&gt;
====Installation de GO====&lt;br /&gt;
Sur AWS, une version de go est pré-existante mais non fonctionnelle car non à jour.&lt;br /&gt;
 sudo rm /usr/bin/go&lt;br /&gt;
&lt;br /&gt;
Choisir la dernière version de go : [https://golang.org/dl/ GO]&lt;br /&gt;
&lt;br /&gt;
Décompresser l&#039;archive:&lt;br /&gt;
 tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz&lt;br /&gt;
&lt;br /&gt;
Ajouter dans /etc/profile ou $HOME/.profile. L&#039;exemple ci-dessous n&#039;est fonctionnel que si vous avez décompréssé dans /usr/local:&lt;br /&gt;
 export PATH=$PATH:/usr/local/go/bin&lt;br /&gt;
&lt;br /&gt;
Créer la variable GOPATH:&lt;br /&gt;
  export GOPATH=&amp;lt;YOUR_PATH&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Télécharger les sources:&lt;br /&gt;
 go get github.com/influxdata/telegraf&lt;br /&gt;
&lt;br /&gt;
Aller dans le dossier de téléchargements:&lt;br /&gt;
 cd $GOPATH/src/github.com/influxdata/telegraf&lt;br /&gt;
 make&lt;br /&gt;
 sudo cp telegraf /usr/bin/&lt;br /&gt;
&lt;br /&gt;
====Configuration de Telegraf====&lt;br /&gt;
&lt;br /&gt;
Un exemple de fichier de configuration est obtenu via la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 telegraf -sample-config -input-filter mqtt_consumer -output-filter influxdb &amp;gt; YOUR_FILE.conf&lt;br /&gt;
[https://github.com/influxdata/telegraf/tree/master/plugins/inputs/mqtt_consumer Exemple configuration mqtt]&lt;br /&gt;
&lt;br /&gt;
Changez l&#039;adresse et le port du broker mqtt et de la base influxDB. Choissez les topics auxquels souscrire, le format des données reçu de la part du broker (json,influx...) &lt;br /&gt;
&lt;br /&gt;
Si vous utilisez des certificats auto-signés ne pas oublier&lt;br /&gt;
 skip_verify_ssl = true&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration lu au démarrage se situe dans :&lt;br /&gt;
 /etc/telegraf&lt;br /&gt;
&lt;br /&gt;
Pour renommer le fichier de configuration lu au démarrage :&lt;br /&gt;
 sudo nano /etc/init.d/telegraf&lt;br /&gt;
&lt;br /&gt;
Changer la ligne avec la variable confile=/etc/telegraf/YOUR_FILE.conf&lt;br /&gt;
&lt;br /&gt;
===Passage d&#039;influxDB en https===&lt;br /&gt;
Dans le fichier /etc/influxdb/infludb.conf :&lt;br /&gt;
&lt;br /&gt;
Modifier les attributs de [admin] et [http] en mettant https = true et le chemin vers la clé/certificat pour influxDB. Une subtilité est à retenir pour influxDB ssl. En effet, la clé et le certificat doivent être dans le même fichier :&lt;br /&gt;
 cat key.pem crt.pem &amp;gt; key_crt.pem&lt;br /&gt;
&lt;br /&gt;
==Sprint 5 (du 29 Février au 6 Mars)==&lt;br /&gt;
&lt;br /&gt;
=== Ajout de Widget dans grafana integrant cartographie leaflet ===&lt;br /&gt;
Attention --&amp;gt; cette tache ne sera pas réalisée car sur le forum de grafana ou d&#039;autres nous avons vu qu&#039;intégrer de la cartographie était dans les projet à venir de grafana, par consequent il est inutile de perdre du temps sur une tache qui sera prochainement réalisée.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;une PKI ===&lt;br /&gt;
&lt;br /&gt;
Une PKI (Public Key Infrastructure) permet de gérer la création, la récupération et la révocation de certificats. Nous avons, dans le cadre de la sécurisation de notre plateforme, d&#039;en créer une dans le but de fournir des certificats à nos différentes machines. Nous avons décider de suivre le tutoriel suivant :&lt;br /&gt;
* Mise en place d&#039;une d&#039;une PKI: http://stankiewicz.free.fr/Wikka/wikka.php?wakka=HowtoPKI&lt;br /&gt;
&lt;br /&gt;
Nous avons donc commencé à travailler sur ce tutoriel. Cependant, celui-ci semble être obsolète (certaines technologies semblent avoir évoluées depuis et donc certaines actions du tutoriel ne fonctionnent plus). Nous avons perdu beaucoup de temps à essayer de résoudre ces problèmes.&lt;br /&gt;
&lt;br /&gt;
===Configuration d&#039;OpenVPN, dans le but d&#039;ajouter de nouveaux utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
Au départ, nous avions alloué une instance Amazon dédiée à OpenVPN. Plus précisément, c&#039;était une image dans laquelle OpenVPN était préinstallé. Nous n&#039;arrivions pas à ajouter de nouveaux utilisateurs pour ce VPN avec cette instance. Nous avons donc décidé de supprimer l&#039;instance Amazon d&#039;OpenVPN et de l&#039;installer par nous même sur notre instance principale. Après avoir fait cela, nous arrivions à créer différents utilisateurs pour notre VPN. Cependant, nous avons remarqué qu&#039;OpenVPN limite le nombre de connexions à deux utilisateurs maximum (en même temps).&lt;br /&gt;
&lt;br /&gt;
==Sprint 6 (du 7 Mars au 13 Mars)==&lt;br /&gt;
Equipement des salles avec les raspberry pi , les capteurs enocean, les capteurs Zwave&lt;br /&gt;
&lt;br /&gt;
Ajout de fichier de configuration dans l&#039;application meteor, pour faciliter le déploiement. Ajout par exemple de chemins génériques.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sprint 7 (du 14 Mars au 17 Mars)==&lt;br /&gt;
* Equipement des salles air et fablab avec les capteurs Zwave, Rfxcom&lt;br /&gt;
* Contact des administrateurs réseaux de Polytech pour pouvoir débloquer les ports&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25133</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25133"/>
		<updated>2015-11-06T09:01:54Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de algorithme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
un balot est de la forme : Paire &amp;lt;num, process_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le leader courant p choisit localement un numéro unique croissant :&lt;br /&gt;
–Si le dernier ballot connu est &amp;lt;n, q&amp;gt; alors p choisit &amp;lt;n+1, p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple d’exécution ==&lt;br /&gt;
&lt;br /&gt;
Il y a 3 phases lors de l’exécution de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
* Phase 1 : Préparation (Prepare)&lt;br /&gt;
**Objectif : demander à joindre le tour (ballot) courant et collecter les informations des décisions passées&lt;br /&gt;
&lt;br /&gt;
* Phase 2 : Acceptation&lt;br /&gt;
** Le leader reçoit une majorité de ACK avec et renvoie un accept à tous&lt;br /&gt;
** les autres process reçoivent le accept et le renvoie à tous&lt;br /&gt;
&lt;br /&gt;
*Phase 3 : Décision&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
*Il peut y avoir plusieurs leader concurrents&lt;br /&gt;
*Les numéros de ballot permettent de distinguer les valeurs proposées par les différents leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos1.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec 1 leader]]&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos2.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec un client]]&lt;br /&gt;
&lt;br /&gt;
= Lien avec Zookeeper =&lt;br /&gt;
&lt;br /&gt;
Zookeper utilise un protocole différent que Paxos mais il partage avec lui quelques aspect clés :&lt;br /&gt;
&lt;br /&gt;
* Un leader propose une valeur à tout les autres process&lt;br /&gt;
* le leader attend les ack d&#039;un maximum d&#039;autres process avant d&#039;envoyer un demande de changement de valeur&lt;br /&gt;
* l&#039;utilisation des Ballots&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Zookeeper fonctionne en fournissant un espace mémoire partagé par toutes les instances d’un même ensemble de serveurs Zookeeper. Cet espace mémoire est hiérarchique, à la manière d’un système de fichier composé de répertoires et de fichiers à la différence que, dans le cas de Zookeeper, on ne parle pas de répertoires et de fichiers mais de nœuds. Chaque nœud s’appelle un ZNode.&lt;br /&gt;
&lt;br /&gt;
Cette hiérarchie de nœuds va se répliquer et se synchroniser sur tous les serveurs créé par Zookeeper.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement d’un ensemble Zookeeper nécessite l’élection d’un leader parmi les instances qui le composent. Lorsqu’un client écrit/modifie des données dans les ZNodes, c’est le leader qui effectue l’opération puis la transmet aux autres membres. Une fois qu’un certain nombre d’instances ont appliqué l’opération, cette dernière est considérée comme valide au sein de l’ensemble Zookeeper. &lt;br /&gt;
&lt;br /&gt;
Ledit nombre est appelé le quorum. Comme lors d’une élection au sein d’un groupe de personnes, le quorum représente le nombre minimum d’instances Zookeeper pour qu’une décision (typiquement, décider si la valeur affectée dans un ZNode est validée sur l’ensemble Zookeeper) soit prise par l’ensemble Zookeeper.&lt;br /&gt;
&lt;br /&gt;
Le calcul du quorum s’effectue selon la formule suivante : quorum = n/2&lt;br /&gt;
&lt;br /&gt;
avec n le nombre de serveurs présents dans l’ensemble Zookeeper&lt;br /&gt;
sachant que l’on arrondira toujours le résultat à la valeur supérieure (par exemple 3/2 = 1.5 =&amp;gt; quorum = 2)&lt;br /&gt;
on ajoute +1 si la valeur ne représente pas une majorité stricte (par exemple 2/2 = 1 =&amp;gt; quorum = 2)&lt;br /&gt;
&lt;br /&gt;
=== Installation en local d’un ensemble de 1 Zookeeper ===&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord, nous allons creer une instance standalone&lt;br /&gt;
&lt;br /&gt;
Après avoir créé un fichier config et choisi le port client tel que si dessous : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;tickTime=2000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
//dataDir : attention changer avec votre path vers votre tmp qu’il faudra créer si vous le placez comme moi dans le répertoire d’installation de zookeeper //&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;dataDir=[chemin d&#039;acces]/zookeeper-3.4.6/tmp&#039;&#039;&lt;br /&gt;
&#039;&#039;clientPort=2181&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Il suffit de démarer le serveur à l&#039;aide de la commande&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;./zkServer.sh start&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Puis de nous y connecter&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;bin/zkCli.sh -server 127.0.0.1:2181&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Il faut maintenant creer un noeud et lui associer une valeur :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;create /xebia hello&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On obtient alors un Znode /xebia associé à la valeur hello&lt;br /&gt;
&lt;br /&gt;
[[File:Zookeeper.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Installation en local d’un ensemble de 3 Zookeepers ===&lt;br /&gt;
&lt;br /&gt;
Déplaçons notre instance dans un repertoire nommé zookeeper-1 pour plus de lisibilité&lt;br /&gt;
&lt;br /&gt;
Il faut modifier le fichier de configuration afin de dire comment les serveurs doivent communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;tickTime=2000&#039;&#039;&lt;br /&gt;
# ATTENTION : changer dataDir et n’oubliez pas de créer le répertoire tmp&lt;br /&gt;
&#039;&#039;dataDir=[chemin]/zookeeper-1/tmp&#039;&#039;&lt;br /&gt;
&#039;&#039;clientPort=2181&#039;&#039;&lt;br /&gt;
&#039;&#039;server.1=localhost:2888:3888&#039;&#039;&lt;br /&gt;
&#039;&#039;server.2=localhost:2889:3889&#039;&#039;&lt;br /&gt;
&#039;&#039;server.3=localhost:2890:3890&#039;&#039;&lt;br /&gt;
&#039;&#039;initLimit=5&#039;&#039;&lt;br /&gt;
&#039;&#039;syncLimit=2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dans un autre terminal se connecter sur une autre instance de notre ensemble, par exemple sur le serveur 2 :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;./zookeeper-2/bin/zkCli.sh -server 127.0.0.1:2182&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
puis modifier la valeur affectée au ZNode xebia:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;set /xebia world&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
on constate que le watcher s’est déclenché :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WATCHER::&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;WatchedEvent state:SyncConnected type:NodeDataChanged path:/xebia&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cela montre la synchronisation et la réplication des données dans notre ensemble Zookeeper. Maintenant nous allons tester la réelection d’un leader dans notre ensemble.&lt;br /&gt;
&lt;br /&gt;
La première chose à faire est de connaître le leader en cours dans notre ensemble. Pour cela, nous utilisons la commande suivante pour chaque serveur :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;echo stat | nc localhost 2181 | grep Mode &amp;amp;&amp;amp; echo stat | nc localhost 2182 | grep Mode &amp;amp;&amp;amp; echo stat | nc localhost 2183 | grep Mode&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cela nous donnera, dans l’ordre, l’affectation de chacun de nos serveur comme follower ou leader. Dans mon cas, par exemple, j’ai obtenu la réponse suivante :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mode: follower&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Mode: follower&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Mode: leader&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous allons stopper le serveur leader en utilisant le résultat de la commande précédente. Ici, le serveur 3 était le leader :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;./zookeeper-3/bin/zkServer.sh stop&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Puis, on relance sur notre ensemble, maintenant composé de 2 instances, la commande suivante :&lt;br /&gt;
&lt;br /&gt;
echo stat | nc localhost 2181 | grep Mode &amp;amp;&amp;amp; echo stat | nc localhost 2182 | grep Mode&lt;br /&gt;
&lt;br /&gt;
Résultat :&lt;br /&gt;
&lt;br /&gt;
Mode: follower&lt;br /&gt;
Mode: leader&lt;br /&gt;
&lt;br /&gt;
Ici, je constate que le serveur 2 est devenu le leader.&lt;br /&gt;
&lt;br /&gt;
Si finalement nous stoppons un serveur supplémentaire nous allons tomber à un seul élément dans notre ensemble Zookeeper initialement composé de 3 et dont le quorum dans ce cas est de 2. Par conséquent, cela devrait avoir des conséquences négatives sur notre ensemble. Vérifions cela:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;./zookeeper-2/bin/zkServer.sh stop&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
La réponse est :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This ZooKeeper instance is not currently serving requests&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notre ensemble zookeeper est hors service !&lt;br /&gt;
&lt;br /&gt;
Redémarrons le serveur 2 :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;./zookeeper-2/bin/zkServer.sh start&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Interrogeons de nouveau l’état du serveur 2 :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;echo stat | nc localhost 2181&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mode: follower&lt;br /&gt;
Mode: leader&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
et nous pouvons voir que notre ensemble Zookeeper est de nouveau up !&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
Le problème du consensus est très complexe mais certains algorithmes permettent d&#039;en la plupart des cas, le résoudre.&lt;br /&gt;
&lt;br /&gt;
Une autre solution consiste à utiliser un détecteur de faute, mais c&#039;est un autre sujet :D&lt;br /&gt;
&lt;br /&gt;
=Références=&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* http://blog.xebia.fr/2015/02/24/introduction-et-demystification-de-zookeeper/&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25132</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25132"/>
		<updated>2015-11-06T08:58:51Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Installation en local d’un ensemble de 3 Zookeepers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de algorithme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
un balot est de la forme : Paire &amp;lt;num, process_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le leader courant p choisit localement un numéro unique croissant :&lt;br /&gt;
–Si le dernier ballot connu est &amp;lt;n, q&amp;gt; alors p choisit &amp;lt;n+1, p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple d’exécution ==&lt;br /&gt;
&lt;br /&gt;
Il y a 3 phases lors de l’exécution de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
* Phase 1 : Préparation (Prepare)&lt;br /&gt;
**Objectif : demander à joindre le tour (ballot) courant et collecter les informations des décisions passées&lt;br /&gt;
&lt;br /&gt;
* Phase 2 : Acceptation&lt;br /&gt;
** Le leader reçoit une majorité de ACK avec et renvoie un accept à tous&lt;br /&gt;
** les autres process reçoivent le accept et le renvoie à tous&lt;br /&gt;
&lt;br /&gt;
*Phase 3 : Décision&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
*Il peut y avoir plusieurs leader concurrents&lt;br /&gt;
*Les numéros de ballot permettent de distinguer les valeurs proposées par les différents leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos1.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec 1 leader]]&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos2.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec un client]]&lt;br /&gt;
&lt;br /&gt;
= Lien avec Zookeeper =&lt;br /&gt;
&lt;br /&gt;
Zookeper utilise un protocole différent que Paxos mais il partage avec lui quelques aspect clés :&lt;br /&gt;
&lt;br /&gt;
* Un leader propose une valeur à tout les autres process&lt;br /&gt;
* le leader attend les ack d&#039;un maximum d&#039;autres process avant d&#039;envoyer un demande de changement de valeur&lt;br /&gt;
* l&#039;utilisation des Ballots&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Zookeeper fonctionne en fournissant un espace mémoire partagé par toutes les instances d’un même ensemble de serveurs Zookeeper. Cet espace mémoire est hiérarchique, à la manière d’un système de fichier composé de répertoires et de fichiers à la différence que, dans le cas de Zookeeper, on ne parle pas de répertoires et de fichiers mais de nœuds. Chaque nœud s’appelle un ZNode.&lt;br /&gt;
&lt;br /&gt;
Cette hiérarchie de nœuds va se répliquer et se synchroniser sur tous les serveurs créé par Zookeeper.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement d’un ensemble Zookeeper nécessite l’élection d’un leader parmi les instances qui le composent. Lorsqu’un client écrit/modifie des données dans les ZNodes, c’est le leader qui effectue l’opération puis la transmet aux autres membres. Une fois qu’un certain nombre d’instances ont appliqué l’opération, cette dernière est considérée comme valide au sein de l’ensemble Zookeeper. &lt;br /&gt;
&lt;br /&gt;
Ledit nombre est appelé le quorum. Comme lors d’une élection au sein d’un groupe de personnes, le quorum représente le nombre minimum d’instances Zookeeper pour qu’une décision (typiquement, décider si la valeur affectée dans un ZNode est validée sur l’ensemble Zookeeper) soit prise par l’ensemble Zookeeper.&lt;br /&gt;
&lt;br /&gt;
Le calcul du quorum s’effectue selon la formule suivante : quorum = n/2&lt;br /&gt;
&lt;br /&gt;
avec n le nombre de serveurs présents dans l’ensemble Zookeeper&lt;br /&gt;
sachant que l’on arrondira toujours le résultat à la valeur supérieure (par exemple 3/2 = 1.5 =&amp;gt; quorum = 2)&lt;br /&gt;
on ajoute +1 si la valeur ne représente pas une majorité stricte (par exemple 2/2 = 1 =&amp;gt; quorum = 2)&lt;br /&gt;
&lt;br /&gt;
=== Installation en local d’un ensemble de 1 Zookeeper ===&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord, nous allons creer une instance standalone&lt;br /&gt;
&lt;br /&gt;
Après avoir créé un fichier config et choisi le port client tel que si dessous : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;tickTime=2000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
//dataDir : attention changer avec votre path vers votre tmp qu’il faudra créer si vous le placez comme moi dans le répertoire d’installation de zookeeper //&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;dataDir=[chemin d&#039;acces]/zookeeper-3.4.6/tmp&#039;&#039;&lt;br /&gt;
&#039;&#039;clientPort=2181&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Il suffit de démarer le serveur à l&#039;aide de la commande&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;./zkServer.sh start&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Puis de nous y connecter&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;bin/zkCli.sh -server 127.0.0.1:2181&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Il faut maintenant creer un noeud et lui associer une valeur :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;create /xebia hello&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On obtient alors un Znode /xebia associé à la valeur hello&lt;br /&gt;
&lt;br /&gt;
[[File:Zookeeper.PNG]]&lt;br /&gt;
&lt;br /&gt;
=== Installation en local d’un ensemble de 3 Zookeepers ===&lt;br /&gt;
&lt;br /&gt;
Déplaçons notre instance dans un repertoire nommé zookeeper-1 pour plus de lisibilité&lt;br /&gt;
&lt;br /&gt;
Il faut modifier le fichier de configuration afin de dire comment les serveurs doivent communiquer entre eux.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;tickTime=2000&#039;&#039;&lt;br /&gt;
# ATTENTION : changer dataDir et n’oubliez pas de créer le répertoire tmp&lt;br /&gt;
&#039;&#039;dataDir=[chemin]/zookeeper-1/tmp&#039;&#039;&lt;br /&gt;
&#039;&#039;clientPort=2181&#039;&#039;&lt;br /&gt;
&#039;&#039;server.1=localhost:2888:3888&#039;&#039;&lt;br /&gt;
&#039;&#039;server.2=localhost:2889:3889&#039;&#039;&lt;br /&gt;
&#039;&#039;server.3=localhost:2890:3890&#039;&#039;&lt;br /&gt;
&#039;&#039;initLimit=5&#039;&#039;&lt;br /&gt;
&#039;&#039;syncLimit=2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dans un autre terminal se connecter sur une autre instance de notre ensemble, par exemple sur le serveur 2 :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;./zookeeper-2/bin/zkCli.sh -server 127.0.0.1:2182&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
puis modifier la valeur affectée au ZNode xebia:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;set /xebia world&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
on constate que le watcher s’est déclenché :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WATCHER::&#039;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;WatchedEvent state:SyncConnected type:NodeDataChanged path:/xebia&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cela montre la synchronisation et la réplication des données dans notre ensemble Zookeeper. Maintenant nous allons tester la réelection d’un leader dans notre ensemble.&lt;br /&gt;
&lt;br /&gt;
La première chose à faire est de connaître le leader en cours dans notre ensemble. Pour cela, nous utilisons la commande suivante pour chaque serveur :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;echo stat | nc localhost 2181 | grep Mode &amp;amp;&amp;amp; echo stat | nc localhost 2182 | grep Mode &amp;amp;&amp;amp; echo stat | nc localhost 2183 | grep Mode&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cela nous donnera, dans l’ordre, l’affectation de chacun de nos serveur comme follower ou leader. Dans mon cas, par exemple, j’ai obtenu la réponse suivante :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mode: follower&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Mode: follower&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Mode: leader&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous allons stopper le serveur leader en utilisant le résultat de la commande précédente. Ici, le serveur 3 était le leader :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;./zookeeper-3/bin/zkServer.sh stop&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Puis, on relance sur notre ensemble, maintenant composé de 2 instances, la commande suivante :&lt;br /&gt;
&lt;br /&gt;
echo stat | nc localhost 2181 | grep Mode &amp;amp;&amp;amp; echo stat | nc localhost 2182 | grep Mode&lt;br /&gt;
&lt;br /&gt;
Résultat :&lt;br /&gt;
&lt;br /&gt;
Mode: follower&lt;br /&gt;
Mode: leader&lt;br /&gt;
&lt;br /&gt;
Ici, je constate que le serveur 2 est devenu le leader.&lt;br /&gt;
&lt;br /&gt;
Si finalement nous stoppons un serveur supplémentaire nous allons tomber à un seul élément dans notre ensemble Zookeeper initialement composé de 3 et dont le quorum dans ce cas est de 2. Par conséquent, cela devrait avoir des conséquences négatives sur notre ensemble. Vérifions cela:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;./zookeeper-2/bin/zkServer.sh stop&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
La réponse est :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This ZooKeeper instance is not currently serving requests&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notre ensemble zookeeper est hors service !&lt;br /&gt;
&lt;br /&gt;
Redémarrons le serveur 2 :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;./zookeeper-2/bin/zkServer.sh start&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Interrogeons de nouveau l’état du serveur 2 :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;echo stat | nc localhost 2181&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mode: follower&lt;br /&gt;
Mode: leader&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
et nous pouvons voir que notre ensemble Zookeeper est de nouveau up !&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Références=&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* http://blog.xebia.fr/2015/02/24/introduction-et-demystification-de-zookeeper/&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25128</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25128"/>
		<updated>2015-11-06T08:07:48Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Installation en local d’un ensemble de 3 Zookeepers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de algorithme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
un balot est de la forme : Paire &amp;lt;num, process_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le leader courant p choisit localement un numéro unique croissant :&lt;br /&gt;
–Si le dernier ballot connu est &amp;lt;n, q&amp;gt; alors p choisit &amp;lt;n+1, p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple d’exécution ==&lt;br /&gt;
&lt;br /&gt;
Il y a 3 phases lors de l’exécution de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
* Phase 1 : Préparation (Prepare)&lt;br /&gt;
**Objectif : demander à joindre le tour (ballot) courant et collecter les informations des décisions passées&lt;br /&gt;
&lt;br /&gt;
* Phase 2 : Acceptation&lt;br /&gt;
** Le leader reçoit une majorité de ACK avec et renvoie un accept à tous&lt;br /&gt;
** les autres process reçoivent le accept et le renvoie à tous&lt;br /&gt;
&lt;br /&gt;
*Phase 3 : Décision&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
*Il peut y avoir plusieurs leader concurrents&lt;br /&gt;
*Les numéros de ballot permettent de distinguer les valeurs proposées par les différents leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos1.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec 1 leader]]&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos2.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec un client]]&lt;br /&gt;
&lt;br /&gt;
= Lien avec Zookeeper =&lt;br /&gt;
&lt;br /&gt;
Zookeper utilise un protocole différent que Paxos mais il partage avec lui quelques aspect clés :&lt;br /&gt;
&lt;br /&gt;
* Un leader propose une valeur à tout les autres process&lt;br /&gt;
* le leader attend les ack d&#039;un maximum d&#039;autres process avant d&#039;envoyer un demande de changement de valeur&lt;br /&gt;
* l&#039;utilisation des Ballots&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Zookeeper fonctionne en fournissant un espace mémoire partagé par toutes les instances d’un même ensemble de serveurs Zookeeper. Cet espace mémoire est hiérarchique, à la manière d’un système de fichier composé de répertoires et de fichiers à la différence que, dans le cas de Zookeeper, on ne parle pas de répertoires et de fichiers mais de nœuds. Chaque nœud s’appelle un ZNode.&lt;br /&gt;
&lt;br /&gt;
Cette hiérarchie de nœuds va se répliquer et se synchroniser sur tous les serveurs créé par Zookeeper.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement d’un ensemble Zookeeper nécessite l’élection d’un leader parmi les instances qui le composent. Lorsqu’un client écrit/modifie des données dans les ZNodes, c’est le leader qui effectue l’opération puis la transmet aux autres membres. Une fois qu’un certain nombre d’instances ont appliqué l’opération, cette dernière est considérée comme valide au sein de l’ensemble Zookeeper. &lt;br /&gt;
&lt;br /&gt;
Ledit nombre est appelé le quorum. Comme lors d’une élection au sein d’un groupe de personnes, le quorum représente le nombre minimum d’instances Zookeeper pour qu’une décision (typiquement, décider si la valeur affectée dans un ZNode est validée sur l’ensemble Zookeeper) soit prise par l’ensemble Zookeeper.&lt;br /&gt;
&lt;br /&gt;
Le calcul du quorum s’effectue selon la formule suivante : quorum = n/2&lt;br /&gt;
&lt;br /&gt;
avec n le nombre de serveurs présents dans l’ensemble Zookeeper&lt;br /&gt;
sachant que l’on arrondira toujours le résultat à la valeur supérieure (par exemple 3/2 = 1.5 =&amp;gt; quorum = 2)&lt;br /&gt;
on ajoute +1 si la valeur ne représente pas une majorité stricte (par exemple 2/2 = 1 =&amp;gt; quorum = 2)&lt;br /&gt;
&lt;br /&gt;
=== Installation en local d’un ensemble de 3 Zookeepers ===&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord, nous allons creer une instance standalone&lt;br /&gt;
&lt;br /&gt;
Après avoir créé un fichier config et choisi le port client tel que si dessous : &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
tickTime=2000&lt;br /&gt;
&lt;br /&gt;
//dataDir : attention changer avec votre path vers votre tmp qu’il faudra créer si vous le placez comme moi dans le répertoire d’installation de zookeeper //&lt;br /&gt;
&lt;br /&gt;
dataDir=[chemin d&#039;acces]/zookeeper-3.4.6/tmp&lt;br /&gt;
clientPort=2181&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Il suffit de démarer le serveur à l&#039;aide de la commande&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;./zkServer.sh start&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Puis de nous y connecter&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;bin/zkCli.sh -server 127.0.0.1:2181&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Il faut maintenant creer un noeud et lui associer une valeur :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;create /xebia hello&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On obtient alors un Znode /xebia associé à la valeur hello&lt;br /&gt;
&lt;br /&gt;
[[File:Zookeeper.PNG]]&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Références=&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* http://blog.xebia.fr/2015/02/24/introduction-et-demystification-de-zookeeper/&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25127</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25127"/>
		<updated>2015-11-06T08:07:14Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Installation en local d’un ensemble de 3 Zookeepers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de algorithme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
un balot est de la forme : Paire &amp;lt;num, process_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le leader courant p choisit localement un numéro unique croissant :&lt;br /&gt;
–Si le dernier ballot connu est &amp;lt;n, q&amp;gt; alors p choisit &amp;lt;n+1, p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple d’exécution ==&lt;br /&gt;
&lt;br /&gt;
Il y a 3 phases lors de l’exécution de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
* Phase 1 : Préparation (Prepare)&lt;br /&gt;
**Objectif : demander à joindre le tour (ballot) courant et collecter les informations des décisions passées&lt;br /&gt;
&lt;br /&gt;
* Phase 2 : Acceptation&lt;br /&gt;
** Le leader reçoit une majorité de ACK avec et renvoie un accept à tous&lt;br /&gt;
** les autres process reçoivent le accept et le renvoie à tous&lt;br /&gt;
&lt;br /&gt;
*Phase 3 : Décision&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
*Il peut y avoir plusieurs leader concurrents&lt;br /&gt;
*Les numéros de ballot permettent de distinguer les valeurs proposées par les différents leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos1.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec 1 leader]]&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos2.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec un client]]&lt;br /&gt;
&lt;br /&gt;
= Lien avec Zookeeper =&lt;br /&gt;
&lt;br /&gt;
Zookeper utilise un protocole différent que Paxos mais il partage avec lui quelques aspect clés :&lt;br /&gt;
&lt;br /&gt;
* Un leader propose une valeur à tout les autres process&lt;br /&gt;
* le leader attend les ack d&#039;un maximum d&#039;autres process avant d&#039;envoyer un demande de changement de valeur&lt;br /&gt;
* l&#039;utilisation des Ballots&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Zookeeper fonctionne en fournissant un espace mémoire partagé par toutes les instances d’un même ensemble de serveurs Zookeeper. Cet espace mémoire est hiérarchique, à la manière d’un système de fichier composé de répertoires et de fichiers à la différence que, dans le cas de Zookeeper, on ne parle pas de répertoires et de fichiers mais de nœuds. Chaque nœud s’appelle un ZNode.&lt;br /&gt;
&lt;br /&gt;
Cette hiérarchie de nœuds va se répliquer et se synchroniser sur tous les serveurs créé par Zookeeper.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement d’un ensemble Zookeeper nécessite l’élection d’un leader parmi les instances qui le composent. Lorsqu’un client écrit/modifie des données dans les ZNodes, c’est le leader qui effectue l’opération puis la transmet aux autres membres. Une fois qu’un certain nombre d’instances ont appliqué l’opération, cette dernière est considérée comme valide au sein de l’ensemble Zookeeper. &lt;br /&gt;
&lt;br /&gt;
Ledit nombre est appelé le quorum. Comme lors d’une élection au sein d’un groupe de personnes, le quorum représente le nombre minimum d’instances Zookeeper pour qu’une décision (typiquement, décider si la valeur affectée dans un ZNode est validée sur l’ensemble Zookeeper) soit prise par l’ensemble Zookeeper.&lt;br /&gt;
&lt;br /&gt;
Le calcul du quorum s’effectue selon la formule suivante : quorum = n/2&lt;br /&gt;
&lt;br /&gt;
avec n le nombre de serveurs présents dans l’ensemble Zookeeper&lt;br /&gt;
sachant que l’on arrondira toujours le résultat à la valeur supérieure (par exemple 3/2 = 1.5 =&amp;gt; quorum = 2)&lt;br /&gt;
on ajoute +1 si la valeur ne représente pas une majorité stricte (par exemple 2/2 = 1 =&amp;gt; quorum = 2)&lt;br /&gt;
&lt;br /&gt;
=== Installation en local d’un ensemble de 3 Zookeepers ===&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord, nous allons creer une instance standalone&lt;br /&gt;
&lt;br /&gt;
Après avoir créé un fichier config et choisi le port client tel que si dessous : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
tickTime=2000&lt;br /&gt;
//dataDir : attention changer avec votre path vers votre tmp qu’il faudra créer si vous le placez comme moi dans le répertoire d’installation de zookeeper //&lt;br /&gt;
dataDir=[chemin d&#039;acces]/zookeeper-3.4.6/tmp&lt;br /&gt;
clientPort=2181&lt;br /&gt;
&lt;br /&gt;
Il suffit de démarer le serveur à l&#039;aide de la commande&lt;br /&gt;
&lt;br /&gt;
./zkServer.sh start&lt;br /&gt;
&lt;br /&gt;
Puis de nous y connecter&lt;br /&gt;
&lt;br /&gt;
bin/zkCli.sh -server 127.0.0.1:2181&lt;br /&gt;
&lt;br /&gt;
Il faut maintenant creer un noeud et lui associer une valeur :&lt;br /&gt;
&lt;br /&gt;
create /xebia hello&lt;br /&gt;
&lt;br /&gt;
On obtient alors un Znode /xebia associé à la valeur hello&lt;br /&gt;
&lt;br /&gt;
[[File:Zookeeper.PNG]]&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Références=&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* http://blog.xebia.fr/2015/02/24/introduction-et-demystification-de-zookeeper/&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25126</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25126"/>
		<updated>2015-11-06T08:02:52Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Un exemple d’implémentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de algorithme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
un balot est de la forme : Paire &amp;lt;num, process_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le leader courant p choisit localement un numéro unique croissant :&lt;br /&gt;
–Si le dernier ballot connu est &amp;lt;n, q&amp;gt; alors p choisit &amp;lt;n+1, p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple d’exécution ==&lt;br /&gt;
&lt;br /&gt;
Il y a 3 phases lors de l’exécution de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
* Phase 1 : Préparation (Prepare)&lt;br /&gt;
**Objectif : demander à joindre le tour (ballot) courant et collecter les informations des décisions passées&lt;br /&gt;
&lt;br /&gt;
* Phase 2 : Acceptation&lt;br /&gt;
** Le leader reçoit une majorité de ACK avec et renvoie un accept à tous&lt;br /&gt;
** les autres process reçoivent le accept et le renvoie à tous&lt;br /&gt;
&lt;br /&gt;
*Phase 3 : Décision&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
*Il peut y avoir plusieurs leader concurrents&lt;br /&gt;
*Les numéros de ballot permettent de distinguer les valeurs proposées par les différents leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos1.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec 1 leader]]&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos2.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec un client]]&lt;br /&gt;
&lt;br /&gt;
= Lien avec Zookeeper =&lt;br /&gt;
&lt;br /&gt;
Zookeper utilise un protocole différent que Paxos mais il partage avec lui quelques aspect clés :&lt;br /&gt;
&lt;br /&gt;
* Un leader propose une valeur à tout les autres process&lt;br /&gt;
* le leader attend les ack d&#039;un maximum d&#039;autres process avant d&#039;envoyer un demande de changement de valeur&lt;br /&gt;
* l&#039;utilisation des Ballots&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
=== Principe ===&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Zookeeper fonctionne en fournissant un espace mémoire partagé par toutes les instances d’un même ensemble de serveurs Zookeeper. Cet espace mémoire est hiérarchique, à la manière d’un système de fichier composé de répertoires et de fichiers à la différence que, dans le cas de Zookeeper, on ne parle pas de répertoires et de fichiers mais de nœuds. Chaque nœud s’appelle un ZNode.&lt;br /&gt;
&lt;br /&gt;
Cette hiérarchie de nœuds va se répliquer et se synchroniser sur tous les serveurs créé par Zookeeper.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement d’un ensemble Zookeeper nécessite l’élection d’un leader parmi les instances qui le composent. Lorsqu’un client écrit/modifie des données dans les ZNodes, c’est le leader qui effectue l’opération puis la transmet aux autres membres. Une fois qu’un certain nombre d’instances ont appliqué l’opération, cette dernière est considérée comme valide au sein de l’ensemble Zookeeper. &lt;br /&gt;
&lt;br /&gt;
Ledit nombre est appelé le quorum. Comme lors d’une élection au sein d’un groupe de personnes, le quorum représente le nombre minimum d’instances Zookeeper pour qu’une décision (typiquement, décider si la valeur affectée dans un ZNode est validée sur l’ensemble Zookeeper) soit prise par l’ensemble Zookeeper.&lt;br /&gt;
&lt;br /&gt;
Le calcul du quorum s’effectue selon la formule suivante : quorum = n/2&lt;br /&gt;
&lt;br /&gt;
avec n le nombre de serveurs présents dans l’ensemble Zookeeper&lt;br /&gt;
sachant que l’on arrondira toujours le résultat à la valeur supérieure (par exemple 3/2 = 1.5 =&amp;gt; quorum = 2)&lt;br /&gt;
on ajoute +1 si la valeur ne représente pas une majorité stricte (par exemple 2/2 = 1 =&amp;gt; quorum = 2)&lt;br /&gt;
&lt;br /&gt;
=== Installation en local d’un ensemble de 3 Zookeepers ===&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord, nous allons creer une instance standalone&lt;br /&gt;
&lt;br /&gt;
Après avoir créé un fichier config et choisi le port client&lt;br /&gt;
&lt;br /&gt;
&amp;lt;note&amp;gt;&lt;br /&gt;
tickTime=2000&lt;br /&gt;
# dataDir : attention changer avec votre path vers votre tmp qu’il faudra créer si vous le placez&lt;br /&gt;
# comme moi dans le répertoire d’installation de zookeeper&lt;br /&gt;
dataDir=/Users/jbc/Developments/zktest/zookeeper-3.4.6/tmp&lt;br /&gt;
clientPort=2181&lt;br /&gt;
&amp;lt;/note&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Références=&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* http://blog.xebia.fr/2015/02/24/introduction-et-demystification-de-zookeeper/&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Zookeeper.PNG&amp;diff=25125</id>
		<title>File:Zookeeper.PNG</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Zookeeper.PNG&amp;diff=25125"/>
		<updated>2015-11-06T07:59:31Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Zookeeper1.PNG&amp;diff=25124</id>
		<title>File:Zookeeper1.PNG</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Zookeeper1.PNG&amp;diff=25124"/>
		<updated>2015-11-06T07:57:10Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25123</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25123"/>
		<updated>2015-11-06T07:35:00Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Lien avec Zookeeper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de algorithme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
un balot est de la forme : Paire &amp;lt;num, process_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le leader courant p choisit localement un numéro unique croissant :&lt;br /&gt;
–Si le dernier ballot connu est &amp;lt;n, q&amp;gt; alors p choisit &amp;lt;n+1, p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple d’exécution ==&lt;br /&gt;
&lt;br /&gt;
Il y a 3 phases lors de l’exécution de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
* Phase 1 : Préparation (Prepare)&lt;br /&gt;
**Objectif : demander à joindre le tour (ballot) courant et collecter les informations des décisions passées&lt;br /&gt;
&lt;br /&gt;
* Phase 2 : Acceptation&lt;br /&gt;
** Le leader reçoit une majorité de ACK avec et renvoie un accept à tous&lt;br /&gt;
** les autres process reçoivent le accept et le renvoie à tous&lt;br /&gt;
&lt;br /&gt;
*Phase 3 : Décision&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
*Il peut y avoir plusieurs leader concurrents&lt;br /&gt;
*Les numéros de ballot permettent de distinguer les valeurs proposées par les différents leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos1.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec 1 leader]]&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos2.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec un client]]&lt;br /&gt;
&lt;br /&gt;
= Lien avec Zookeeper =&lt;br /&gt;
&lt;br /&gt;
Zookeper utilise un protocole différent que Paxos mais il partage avec lui quelques aspect clés :&lt;br /&gt;
&lt;br /&gt;
* Un leader propose une valeur à tout les autres process&lt;br /&gt;
* le leader attend les ack d&#039;un maximum d&#039;autres process avant d&#039;envoyer un demande de changement de valeur&lt;br /&gt;
* l&#039;utilisation des Ballots&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Zookeeper fonctionne en fournissant un espace mémoire partagé par toutes les instances d’un même ensemble de serveurs Zookeeper. Cet espace mémoire est hiérarchique, à la manière d’un système de fichier composé de répertoires et de fichiers à la différence que, dans le cas de Zookeeper, on ne parle pas de répertoires et de fichiers mais de nœuds. Chaque nœud s’appelle un ZNode.&lt;br /&gt;
&lt;br /&gt;
Cette hiérarchie de nœuds va se répliquer et se synchroniser sur tous les serveurs créé par Zookeeper.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement d’un ensemble Zookeeper nécessite l’élection d’un leader parmi les instances qui le composent. Lorsqu’un client écrit/modifie des données dans les ZNodes, c’est le leader qui effectue l’opération puis la transmet aux autres membres. Une fois qu’un certain nombre d’instances ont appliqué l’opération, cette dernière est considérée comme valide au sein de l’ensemble Zookeeper. &lt;br /&gt;
&lt;br /&gt;
Ledit nombre est appelé le quorum. Comme lors d’une élection au sein d’un groupe de personnes, le quorum représente le nombre minimum d’instances Zookeeper pour qu’une décision (typiquement, décider si la valeur affectée dans un ZNode est validée sur l’ensemble Zookeeper) soit prise par l’ensemble Zookeeper.&lt;br /&gt;
&lt;br /&gt;
Le calcul du quorum s’effectue selon la formule suivante : quorum = n/2&lt;br /&gt;
&lt;br /&gt;
avec n le nombre de serveurs présents dans l’ensemble Zookeeper&lt;br /&gt;
sachant que l’on arrondira toujours le résultat à la valeur supérieure (par exemple 3/2 = 1.5 =&amp;gt; quorum = 2)&lt;br /&gt;
on ajoute +1 si la valeur ne représente pas une majorité stricte (par exemple 2/2 = 1 =&amp;gt; quorum = 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&lt;br /&gt;
=Conclusion=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Références=&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* http://blog.xebia.fr/2015/02/24/introduction-et-demystification-de-zookeeper/&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25122</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25122"/>
		<updated>2015-11-06T06:32:46Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Lien avec Zookeeper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de algorithme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
un balot est de la forme : Paire &amp;lt;num, process_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le leader courant p choisit localement un numéro unique croissant :&lt;br /&gt;
–Si le dernier ballot connu est &amp;lt;n, q&amp;gt; alors p choisit &amp;lt;n+1, p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple d’exécution ==&lt;br /&gt;
&lt;br /&gt;
Il y a 3 phases lors de l’exécution de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
* Phase 1 : Préparation (Prepare)&lt;br /&gt;
**Objectif : demander à joindre le tour (ballot) courant et collecter les informations des décisions passées&lt;br /&gt;
&lt;br /&gt;
* Phase 2 : Acceptation&lt;br /&gt;
** Le leader reçoit une majorité de ACK avec et renvoie un accept à tous&lt;br /&gt;
** les autres process reçoivent le accept et le renvoie à tous&lt;br /&gt;
&lt;br /&gt;
*Phase 3 : Décision&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
*Il peut y avoir plusieurs leader concurrents&lt;br /&gt;
*Les numéros de ballot permettent de distinguer les valeurs proposées par les différents leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos1.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec 1 leader]]&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos2.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec un client]]&lt;br /&gt;
&lt;br /&gt;
= Lien avec Zookeeper =&lt;br /&gt;
&lt;br /&gt;
Zookeper utilise un protocole différent que Paxos mais il partage avec lui quelques aspect clés :&lt;br /&gt;
&lt;br /&gt;
* Un leader propose une valeur à tout les autres process&lt;br /&gt;
*le leadear attend les ack d&#039;un maximum d&#039;autres process avant d&#039;envoyer un demande de changement de valeur&lt;br /&gt;
* l&#039;utilisation des Ballots&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25121</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25121"/>
		<updated>2015-11-06T06:22:32Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Exemple d’exécution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de algorithme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
un balot est de la forme : Paire &amp;lt;num, process_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le leader courant p choisit localement un numéro unique croissant :&lt;br /&gt;
–Si le dernier ballot connu est &amp;lt;n, q&amp;gt; alors p choisit &amp;lt;n+1, p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple d’exécution ==&lt;br /&gt;
&lt;br /&gt;
Il y a 3 phases lors de l’exécution de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
* Phase 1 : Préparation (Prepare)&lt;br /&gt;
**Objectif : demander à joindre le tour (ballot) courant et collecter les informations des décisions passées&lt;br /&gt;
&lt;br /&gt;
* Phase 2 : Acceptation&lt;br /&gt;
** Le leader reçoit une majorité de ACK avec et renvoie un accept à tous&lt;br /&gt;
** les autres process reçoivent le accept et le renvoie à tous&lt;br /&gt;
&lt;br /&gt;
*Phase 3 : Décision&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
*Il peut y avoir plusieurs leader concurrents&lt;br /&gt;
*Les numéros de ballot permettent de distinguer les valeurs proposées par les différents leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos1.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec 1 leader]]&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos2.PNG||600px|thumb|center|Fig. 1 : Exemple d’exécution avec un client]]&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25120</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25120"/>
		<updated>2015-11-06T06:20:51Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Exemple d’exécution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de algorithme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
un balot est de la forme : Paire &amp;lt;num, process_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le leader courant p choisit localement un numéro unique croissant :&lt;br /&gt;
–Si le dernier ballot connu est &amp;lt;n, q&amp;gt; alors p choisit &amp;lt;n+1, p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple d’exécution ==&lt;br /&gt;
&lt;br /&gt;
Il y a 3 phases lors de l’exécution de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
* Phase 1 : Préparation (Prepare)&lt;br /&gt;
**Objectif : demander à joindre le tour (ballot) courant et collecter les informations des décisions passées&lt;br /&gt;
&lt;br /&gt;
* Phase 2 : Acceptation&lt;br /&gt;
** Le leader reçoit une majorité de ACK avec et renvoie un accept à tous&lt;br /&gt;
** les autres process reçoivent le accept et le renvoie à tous&lt;br /&gt;
&lt;br /&gt;
*Phase 3 : Décision&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
*Il peut y avoir plusieurs leader concurrents&lt;br /&gt;
*Les numéros de ballot permettent de distinguer les valeurs proposées par les différents leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos1.PNG|500px|exemple d&#039;execution avec 1 leader]]&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25119</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25119"/>
		<updated>2015-11-06T06:20:26Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Exemple d’exécution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de algorithme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
un balot est de la forme : Paire &amp;lt;num, process_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le leader courant p choisit localement un numéro unique croissant :&lt;br /&gt;
–Si le dernier ballot connu est &amp;lt;n, q&amp;gt; alors p choisit &amp;lt;n+1, p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple d’exécution ==&lt;br /&gt;
&lt;br /&gt;
Il y a 3 phases lors de l’exécution de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
* Phase 1 : Préparation (Prepare)&lt;br /&gt;
**Objectif : demander à joindre le tour (ballot) courant et collecter les informations des décisions passées&lt;br /&gt;
&lt;br /&gt;
* Phase 2 : Acceptation&lt;br /&gt;
** Le leader reçoit une majorité de ACK avec et renvoie un accept à tous&lt;br /&gt;
** les autres process reçoivent le accept et le renvoie à tous&lt;br /&gt;
&lt;br /&gt;
*Phase 3 : Décision&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
*Il peut y avoir plusieurs leader concurrents&lt;br /&gt;
*Les numéros de ballot permettent de distinguer les valeurs proposées par les différents leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos1.PNG|exemple d&#039;execution avec 1 leader]]&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25118</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25118"/>
		<updated>2015-11-06T06:19:05Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Exemple d’exécution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de algorithme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
un balot est de la forme : Paire &amp;lt;num, process_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le leader courant p choisit localement un numéro unique croissant :&lt;br /&gt;
–Si le dernier ballot connu est &amp;lt;n, q&amp;gt; alors p choisit &amp;lt;n+1, p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple d’exécution ==&lt;br /&gt;
&lt;br /&gt;
Il y a 3 phases lors de l’exécution de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
* Phase 1 : Préparation (Prepare)&lt;br /&gt;
**Objectif : demander à joindre le tour (ballot) courant et collecter les informations des décisions passées&lt;br /&gt;
&lt;br /&gt;
* Phase 2 : Acceptation&lt;br /&gt;
** Le leader reçoit une majorité de ACK avec et renvoie un accept à tous&lt;br /&gt;
** les autres process reçoivent le accept et le renvoie à tous&lt;br /&gt;
&lt;br /&gt;
*Phase 3 : Décision&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
*Il peut y avoir plusieurs leader concurrents&lt;br /&gt;
*Les numéros de ballot permettent de distinguer les valeurs proposées par les différents leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos1.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25117</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25117"/>
		<updated>2015-11-06T06:18:09Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Exemple d’exécution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de algorithme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
un balot est de la forme : Paire &amp;lt;num, process_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le leader courant p choisit localement un numéro unique croissant :&lt;br /&gt;
–Si le dernier ballot connu est &amp;lt;n, q&amp;gt; alors p choisit &amp;lt;n+1, p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple d’exécution ==&lt;br /&gt;
&lt;br /&gt;
Il y a 3 phases lors de l’exécution de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
* Phase 1 : Préparation (Prepare)&lt;br /&gt;
**Objectif : demander à joindre le tour (ballot) courant et collecter les informations des décisions passées&lt;br /&gt;
&lt;br /&gt;
* Phase 2 : Acceptation&lt;br /&gt;
** Le leader reçoit une majorité de ACK avec et renvoie un accept à tous&lt;br /&gt;
** les autres process reçoivent le accept et le renvoie à tous&lt;br /&gt;
&lt;br /&gt;
*Phase 3 : Décision&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
*Il peut y avoir plusieurs leader concurrents&lt;br /&gt;
*Les numéros de ballot permettent de distinguer les valeurs proposées par les différents leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos.PNG]]&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25116</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25116"/>
		<updated>2015-11-06T06:17:58Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Exemple d’exécution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de algorithme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
un balot est de la forme : Paire &amp;lt;num, process_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le leader courant p choisit localement un numéro unique croissant :&lt;br /&gt;
–Si le dernier ballot connu est &amp;lt;n, q&amp;gt; alors p choisit &amp;lt;n+1, p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple d’exécution ==&lt;br /&gt;
&lt;br /&gt;
Il y a 3 phases lors de l’exécution de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
* Phase 1 : Préparation (Prepare)&lt;br /&gt;
**Objectif : demander à joindre le tour (ballot) courant et collecter les informations des décisions passées&lt;br /&gt;
&lt;br /&gt;
* Phase 2 : Acceptation&lt;br /&gt;
** Le leader reçoit une majorité de ACK avec et renvoie un accept à tous&lt;br /&gt;
** les autres process reçoivent le accept et le renvoie à tous&lt;br /&gt;
&lt;br /&gt;
*Phase 3 : Décision&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
*Il peut y avoir plusieurs leader concurrents&lt;br /&gt;
*Les numéros de ballot permettent de distinguer les valeurs proposées par les différents leader&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paxos.png]]&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Paxos2.PNG&amp;diff=25115</id>
		<title>File:Paxos2.PNG</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Paxos2.PNG&amp;diff=25115"/>
		<updated>2015-11-06T06:16:20Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Paxos1.PNG&amp;diff=25114</id>
		<title>File:Paxos1.PNG</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Paxos1.PNG&amp;diff=25114"/>
		<updated>2015-11-06T06:16:02Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25113</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25113"/>
		<updated>2015-11-06T06:15:29Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Exemple d’exécution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de algorithme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
un balot est de la forme : Paire &amp;lt;num, process_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le leader courant p choisit localement un numéro unique croissant :&lt;br /&gt;
–Si le dernier ballot connu est &amp;lt;n, q&amp;gt; alors p choisit &amp;lt;n+1, p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple d’exécution ==&lt;br /&gt;
&lt;br /&gt;
Il y a 3 phases lors de l’exécution de l’algorithme :&lt;br /&gt;
&lt;br /&gt;
* Phase 1 : Préparation (Prepare)&lt;br /&gt;
**Objectif : demander à joindre le tour (ballot) courant et collecter les informations des décisions passées&lt;br /&gt;
&lt;br /&gt;
* Phase 2 : Acceptation&lt;br /&gt;
** Le leader reçoit une majorité de ACK avec et renvoie un accept à tous&lt;br /&gt;
** les autres process reçoivent le accept et le renvoie à tous&lt;br /&gt;
&lt;br /&gt;
*Phase 3 : Décision&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
*Il peut y avoir plusieurs leader concurrents&lt;br /&gt;
*Les numéros de ballot permettent de distinguer les valeurs proposées par les différents leader&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25112</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25112"/>
		<updated>2015-11-06T05:59:56Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Principe de l&amp;#039;algorytme Paxos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de algorithme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
un balot est de la forme : Paire &amp;lt;num, process_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le leader courant p choisit localement un numéro unique croissant :&lt;br /&gt;
–Si le dernier ballot connu est &amp;lt;n, q&amp;gt; alors p choisit &amp;lt;n+1, p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple d’exécution ==&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25111</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25111"/>
		<updated>2015-11-06T05:56:19Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Exemple avec le cas de l&amp;#039;erreur ci dessus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Principe de l&#039;algorytme Paxos ==&lt;br /&gt;
&lt;br /&gt;
Repose sur un leader (utilisation d’un détecteur Ω)&lt;br /&gt;
*Le leader démarre un nouveau “ballot” (i.e.,ronde, vue, scrutin)&lt;br /&gt;
*Cherche à joindre une majorité d’agents&lt;br /&gt;
**Les agents rejoigne toujours les “ballots” les plus récents (ignore les “ballots” anciens)&lt;br /&gt;
**Deux phases :&lt;br /&gt;
***Collecter les résultats des scrutins (ballot) précédents de la part d’une majorité d’agent&lt;br /&gt;
***Puis proposer une nouvelle valeur, et obtenir une majorité pour l&#039;approuver&lt;br /&gt;
*L’algorithme s’arrête si il existe un leader unique pendant les 2 tours d’échanges avec une majorité de d’agents&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25090</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25090"/>
		<updated>2015-11-05T21:33:35Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation=&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
=Propriétés du Consensus=&lt;br /&gt;
&lt;br /&gt;
== Propriétés des Consensus ==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Mise en place de l&#039;Algorithme paxos =&lt;br /&gt;
&lt;br /&gt;
== Les hypothèses ==&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Exemple avec le cas de l&#039;erreur ci dessus ==&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25089</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25089"/>
		<updated>2015-11-05T21:32:02Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Mise en place de l&amp;#039;Algorithme paxos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation==&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
==Propriétés du Consensus==&lt;br /&gt;
&lt;br /&gt;
=== Propriétés des Consensus ===&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
=== Type de défaillance d&#039;un processus ===&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;Algorithme paxos ==&lt;br /&gt;
&lt;br /&gt;
=== Les hypothèses ===&lt;br /&gt;
&lt;br /&gt;
* Communication&lt;br /&gt;
**Asynchrone&lt;br /&gt;
**Pas d’altération de messages&lt;br /&gt;
**Possibilité de pertes&lt;br /&gt;
* Processus&lt;br /&gt;
**Nombre fixe&lt;br /&gt;
**Fautes franches avec possibilité de reprise (crash-recovery). Chaque processus possède un état persistant&lt;br /&gt;
&lt;br /&gt;
== Exemple avec le cas de l&#039;erreur ci dessus ==&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25088</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25088"/>
		<updated>2015-11-05T21:30:26Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation==&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
==Propriétés du Consensus==&lt;br /&gt;
&lt;br /&gt;
=== Propriétés des Consensus ===&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
=== Type de défaillance d&#039;un processus ===&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;Algorithme paxos ==&lt;br /&gt;
&lt;br /&gt;
== Exemple avec le cas de l&#039;erreur ci dessus ==&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25086</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25086"/>
		<updated>2015-11-05T21:27:00Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation==&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
==Propriétés du Consensus==&lt;br /&gt;
&lt;br /&gt;
*Accord : la valeur décidée est la même pour tous les processus corrects&lt;br /&gt;
&lt;br /&gt;
*Intégrité : tout processus décide au plus une fois (sa décision est définitive)&lt;br /&gt;
&lt;br /&gt;
*Validité : la valeur décidée est l’une des valeurs proposées&lt;br /&gt;
&lt;br /&gt;
*Terminaison : tout processus correct décide au bout d’un temps fini&lt;br /&gt;
&lt;br /&gt;
== Type de défaillance d&#039;un processus ==&lt;br /&gt;
&lt;br /&gt;
*Arrêt (crash failure ou panne franche) : le processus fonctionne correctement jusqu’à un point où il cesse définitivement d’agir.&lt;br /&gt;
&lt;br /&gt;
*Omission&lt;br /&gt;
**omission en émission : le processus omet certaines émissions qu’il aurait dû faire, ou cesse définitivement.&lt;br /&gt;
**omission en réception : le processus ignore certains messages en réception, ou cesse définitivement.&lt;br /&gt;
&lt;br /&gt;
*Arbitraire (byzantine failure) : le processus ment (par omission ou par contenu arbitraire des messages envoyés)&lt;br /&gt;
&lt;br /&gt;
== Exemple d&#039;une erreur ==&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;Algorithme paxos ==&lt;br /&gt;
&lt;br /&gt;
== Exemple avec le cas de l&#039;erreur ci dessus ==&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25069</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25069"/>
		<updated>2015-11-05T19:11:41Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Références */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation==&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
== Exemple d&#039;une erreur ==&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;Algorithme paxos ==&lt;br /&gt;
&lt;br /&gt;
== Exemple avec le cas de l&#039;erreur ci dessus ==&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
* https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
* https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
* http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
* https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25068</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25068"/>
		<updated>2015-11-05T19:10:36Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Références */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation==&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
== Exemple d&#039;une erreur ==&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;Algorithme paxos ==&lt;br /&gt;
&lt;br /&gt;
== Exemple avec le cas de l&#039;erreur ci dessus ==&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
- https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
- https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
- https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
- http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
- https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25067</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25067"/>
		<updated>2015-11-05T19:10:00Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Mise en place de l&amp;#039;algo paxos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation==&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
== Exemple d&#039;une erreur ==&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;Algorithme paxos ==&lt;br /&gt;
&lt;br /&gt;
== Exemple avec le cas de l&#039;erreur ci dessus ==&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25066</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=25066"/>
		<updated>2015-11-05T19:09:45Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* exemple d&amp;#039;une erreur */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation==&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
== Exemple d&#039;une erreur ==&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;algo paxos ==&lt;br /&gt;
&lt;br /&gt;
== Exemple avec le cas de l&#039;erreur ci dessus ==&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=24932</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=24932"/>
		<updated>2015-10-28T14:12:59Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation==&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
== exemple d&#039;une erreur ==&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;algo paxos ==&lt;br /&gt;
&lt;br /&gt;
== Exemple avec le cas de l&#039;erreur ci dessus ==&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
https://fr.wikipedia.org/wiki/Paxos_(informatique)&lt;br /&gt;
https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos&lt;br /&gt;
https://fr.wikipedia.org/wiki/Consensus_(informatique)&lt;br /&gt;
http://www.tcs.hut.fi/Studies/T-79.5001/reports/2012-deSouzaMedeiros.pdf&lt;br /&gt;
https://www-master.ufr-info-p6.jussieu.fr/2012/spip.php?action=acceder_document&amp;amp;arg=209&amp;amp;cle=c9f1b363ce1c738d7ca56551f12a02e50a01f020&amp;amp;file=pdf%2FConsensus-Paxos-ARA.pdf&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=24930</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=24930"/>
		<updated>2015-10-28T14:10:23Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Résumé */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation==&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus est peut-être le problème majeur en application répartie et possède un intérêt certain, autant sur le plan pratique que théorique.&lt;br /&gt;
&lt;br /&gt;
Le problème du consensus peut être rapidement définit, de manière informelle, de la façon suivante : «Soit un ensemble de processus, chacun proposant une valeur, trouver un protocole réparti afin de mettre tous les processus d’accord sur une des valeurs proposées initialement».&lt;br /&gt;
&lt;br /&gt;
L’intérêt d’un tel protocole vient du fait que, si nous étions capable de résoudre le problème du consensus, nous serions alors capable d’implémenter des services tolérants aux fautes. En pratique pour mettre en place un système tolérant aux fautes, il suffit de répartir le calcul sur plusieurs ordinateurs.&lt;br /&gt;
&lt;br /&gt;
Ainsi, si l’un d’entre eux vient à tomber en panne, le système continuera à marcher de manière transparente, les autres ordinateurs continuant à fournir le service. La principale difficulté d’un tel schéma, est qu’il est nécessaire de s’assurer de la cohérence du service, et pour cela tous les ordinateurs doivent effectuer les différents calculs dans le même ordre.&lt;br /&gt;
&lt;br /&gt;
== exemple d&#039;une erreur ==&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;algo paxos ==&lt;br /&gt;
&lt;br /&gt;
== Exemple avec le cas de l&#039;erreur ci dessus ==&lt;br /&gt;
&lt;br /&gt;
== Lien avec Zookeeper ==&lt;br /&gt;
Is Zab just a special implementation of Paxos?&lt;br /&gt;
No, Zab is a different protocol than Paxos, although it shares with it some key aspects, as for example:&lt;br /&gt;
A leader proposes values to the followers&lt;br /&gt;
Leaders wait for acknowledgements from a quorum of followers before considering a proposal committed (learned)&lt;br /&gt;
Proposals include epoch numbers, which are similar to ballot numbers in Paxos&lt;br /&gt;
The main conceptual difference between Zab and Paxos is that it is primarily designed for primary-backup systems, like Zookeeper, rather than for state machine replication.&lt;br /&gt;
&lt;br /&gt;
== Un exemple d’implémentation ==&lt;br /&gt;
&lt;br /&gt;
tuto zookeeper&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=24923</id>
		<title>Consesus Protocol</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Consesus_Protocol&amp;diff=24923"/>
		<updated>2015-10-28T12:24:27Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: Created page with &amp;quot;==Présentation==  Sujet : Consesus Protocol  Enseignants : D. Donsez, GP. Bonneau  Auteur : Rama CODAZZI  ==Résumé==  ==Abstract==  ==Synthèse==   ==Conclusion==  ==Réfé...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation==&lt;br /&gt;
&lt;br /&gt;
Sujet : Consesus Protocol&lt;br /&gt;
&lt;br /&gt;
Enseignants : D. Donsez, GP. Bonneau&lt;br /&gt;
&lt;br /&gt;
Auteur : Rama CODAZZI&lt;br /&gt;
&lt;br /&gt;
==Résumé==&lt;br /&gt;
&lt;br /&gt;
==Abstract==&lt;br /&gt;
&lt;br /&gt;
==Synthèse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2015&amp;diff=24922</id>
		<title>VT2015</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2015&amp;diff=24922"/>
		<updated>2015-10-28T12:22:59Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* 6 Novembre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[EA2014|&amp;lt;&amp;lt; Etudes 2014]] [[EA|Sommaire]] [[VT2016|Etudes 2016 &amp;gt;&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Veille Technologique et Stratégique=&lt;br /&gt;
* Enseignants: Georges-Pierre Bonneau, Didier Donsez&lt;br /&gt;
* UE/Module: EAM (HPRJ9R6B) et EAR (HPRJ9R4B) en RICM5&lt;br /&gt;
&lt;br /&gt;
L&#039;objectif des études approfondissement est de réaliser un travail de synthèse et d’évaluation sur une technologie / spécification / tendance&lt;br /&gt;
&lt;br /&gt;
Dans votre futur vie d&#039;ingénieur, vous aurez à d&#039;une part, vous former par vous-même sur une technologie émergente et d&#039;autre part à réaliser une veille technologique (et stratégique) par rapport à votre entreprise et projet.&lt;br /&gt;
Il s&#039;agira de réaliser&lt;br /&gt;
* le positionnement par rapport au marché&lt;br /&gt;
* d&#039;être critique&lt;br /&gt;
&lt;br /&gt;
Votre synthèse fait l&#039;objet d&#039;une présentation orale convaincante devant un auditoire (dans le futur, vos collègues, vos chefs ou vos clients) avec des transparents et un discours répété.&lt;br /&gt;
Pour finir de convaincre (Saint Thomas), vous ferez la présentation d&#039;une démonstration.&lt;br /&gt;
&lt;br /&gt;
Votre présentation sera noté et commenté par tous vos camarades via un formulaire (téléphone mobile). Leurs notes et leurs commentaires seront notés en fonction de leur exactitude de jugement.&lt;br /&gt;
&lt;br /&gt;
La présentation peut être réalisée avec [[reveal.js]]&lt;br /&gt;
&lt;br /&gt;
[[File:presentation-VT-RICM5-1516.pdf|transparents d&#039;introduction à l&#039;UE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ChoixSujetsVT2015.png|500px|center|Affectation des Sujets]]&lt;br /&gt;
&lt;br /&gt;
==Planning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====02 Octobre====&lt;br /&gt;
Didier DONSEZ&lt;br /&gt;
&lt;br /&gt;
Sujets : 1, 15,19,32&lt;br /&gt;
&lt;br /&gt;
* 1. Sébastien Toussaint, [https://securityblog.redhat.com/2015/09/02/factoring-rsa-keys-with-tls-perfect-forward-secrecy/ Factoring RSA Keys With TLS Perfect Forward Secrecy], démonstration d&#039;une attaque, [[VT2015_Factoring_RSA|Fiche de synthèse]], [[Media:VT2015_Factoring_RSA.pdf|Transparents]]&lt;br /&gt;
* 32. Géolocalisation Indoor : Google [[Eddystone]], Apple [[iBeacon]], [[AltBeacon]], [[VT2015_Geolocalisation_Indoor|Fiche de synthèse]], [[Media:VT2015_Geolocalisation_Indoor.pdf|Transparents]]&lt;br /&gt;
* 15. [[Graph Databases]], [[VT2015_Graph_Databases|Fiche de synthèse]], [[Media:VT2015_Graph_Databases.pdf|Transparents]]&lt;br /&gt;
* 19.  [[Software Forensics]] : cas d&#039;étude Linagora vs Bluemind (vous compléterez les pages en et fr de Wikipédia sur ce sujet).  , [[VT2015_Software_Forensics|Fiche de synthèse]], [[Media:VT2015_Software_Forensics.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====09 Octobre====&lt;br /&gt;
Georges-Pierre BONNEAU&lt;br /&gt;
&lt;br /&gt;
Sujets : 22, 13, 17, 25&lt;br /&gt;
* 13 : Xueyong Qian, Intelligent Personal Assistant, [[VT2015_Intelligent_Personal_Assistant|Fiche de synthèse]],[[Media:Intelligent_Personal_Assistant.pdf|Transparents]]&lt;br /&gt;
* 17 : Christophe Adam, Rendu Expressif, [[VT2015_Rendu_Expressif|Fiche de synthèse]], [[Media:Rendu_Expressif2.pdf|Transparents]]&lt;br /&gt;
* 25 : Vivien Michel, Visualisation de journaux : Kibana/Logstash, [[VT2015_Kibana_Logstash|Fiche de synthèse]], [[Media:Kibana_Logstash.pdf|Transparents]]&lt;br /&gt;
* 22: Sarah Aissanou, Reconnaissance de la parole, [[VT2015/Speech_Recognition|Fiche de synthèse]], [[Media:La_reconnaissance_de_la_parole.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====16 Octobre====&lt;br /&gt;
Didier DONSEZ&lt;br /&gt;
&lt;br /&gt;
Sujets : 7,8,12&lt;br /&gt;
&lt;br /&gt;
* Evolution(s) de HTTP : [[HTTP 2.0]], [[SPDY]], ... [[VT2015_HTTP20|Fiche de synthèse]],[[Media:VT2015_HTTP20.pdf|Transparents]]&lt;br /&gt;
* [[Quick UDP Internet Connection (QUIC)]] [[VT2015_QUIC|Fiche de synthèse]],[[Media:VT2015_QUIC.pdf|Transparents]]&lt;br /&gt;
* Simulateurs de Smart Cities : UrbanSIM, CanVis, Suicidator City Generator, [[Blended Cities]], ... [[VT2015_SimSmartCities|Fiche de synthèse]],[[Media:VT2015_SimSmartCities.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====23 Octobre====&lt;br /&gt;
Georges-Pierre BONNEAU&lt;br /&gt;
&lt;br /&gt;
Sujets : 14, 30, 6, 29&lt;br /&gt;
&lt;br /&gt;
* 14 : KLIPFFEL Tararaina : [Complex Event Processing] : [[VT2015_Complex_Event_Processing2|Fiche de synthèse]], [[File:Complex_Event_Processing.pdf|Slides de présentation]]&lt;br /&gt;
* 29 : BARTHELEMY Romain : The [[Rust]] Programming Language : [[VT2015_Rust_Programming_Language|Fiche de synthèse]], [[Media:Rust_Programming_Language.pdf|Transparents]]&lt;br /&gt;
* 30 : Kai Guo : SQL-on-Hadoop : [[SQL-on-Hadoop|Fiche de synthèse]],[[Media:VT2015 SQL-on-Hadoop.pdf|Transparents]]&lt;br /&gt;
* 6 : MESNIER Vincent : NewSQL : [[NewSQL|Fiche de synthèse]],[[Media:VT2015 NewSQL.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====6 Novembre====&lt;br /&gt;
Didier DONSEZ (seul)&lt;br /&gt;
&lt;br /&gt;
Sujets : 24, 26, 27, 10&lt;br /&gt;
* 24 EUDES Robin : Orchestration Tools : Puppet vs. Chef vs. Ansible vs. Salt ([[Orchestration_Tools|Fiche de synthèse]],[[Media:VT2015-Orchestration_Tools.pdf|Transparents]])&lt;br /&gt;
* 26 CODAZZI Rama : Protocoles de consensus (Paxos, Raft) et Canevas de consensus (Zookeeper, Curator, Etcd) : [[Consesus Protocol|Fiche de synthèse]],[[Media:VT:VT2015-protocol.pdf|Transparents]]&lt;br /&gt;
* 27 DAMOTTE Alan : Apache Mesos ([[Apache Mesos|Fiche de synthèse]],[[Media:VT:VT2015-Apache_Mesos.pdf|Transparents]])&lt;br /&gt;
* 10&lt;br /&gt;
&lt;br /&gt;
====13 Novembre====&lt;br /&gt;
Georges-Pierre BONNEAU&lt;br /&gt;
&lt;br /&gt;
Sujets : 2, 3, 20&lt;br /&gt;
* 2&lt;br /&gt;
* 3 TORCK Quentin : Structural Health Monitoring ([[structural health monitoring|Fiche de synthèse]],[[Media:VT:VT2015-Structural-Health-Monitoring.pdf|Transparents]])&lt;br /&gt;
* 20&lt;br /&gt;
&lt;br /&gt;
==Liste des Sujets==&lt;br /&gt;
# [https://securityblog.redhat.com/2015/09/02/factoring-rsa-keys-with-tls-perfect-forward-secrecy/ Factoring RSA Keys With TLS Perfect Forward Secrecy], démonstration d&#039;une attaque  --&amp;gt; Sébastien Toussaint (OBLIGATOIREMENT)&lt;br /&gt;
# [[Structural Health Monitoring]] &lt;br /&gt;
# [[CryptoMoney]] ([[BitCoin]], ...)&lt;br /&gt;
# [[Memcached]] : Usages, Patrons d&#039;arhitecture. Démonstration sur votre projet eCOM pour les ressources multimédia (images, videos, ...). Démonstration de l&#039;[http://dev.mysql.com/doc/ndbapi/en/ndbmemcache.html API Memcache API for MySQL Cluster] et de [[Redis.io]]&lt;br /&gt;
# [[In-Memory Databases]]&lt;br /&gt;
# [[NewSQL]]&lt;br /&gt;
# Evolution(s) de HTTP : [[HTTP 2.0]], [[SPDY]], ...&lt;br /&gt;
# [[Quick UDP Internet Connection (QUIC)]]&lt;br /&gt;
# [[Cloud Foundry]]&lt;br /&gt;
# [[OpenStack]]&lt;br /&gt;
# [[MicroServices]]&lt;br /&gt;
# Simulateurs de Smart Cities : UrbanSIM, CanVis, Suicidator City Generator, [[Blended Cities]], ...&lt;br /&gt;
# [[Digital Assistant]] : démonstration de UMich Sirius&lt;br /&gt;
# (Complex) [[Event Stream Processing]] : démonstration de [[Apache Storm]] et de [[Spark Streaming]] sur le cloud [[Azure]]. Démo supplémentaire du SaaS [[IFTTT]]&lt;br /&gt;
# [[Software Forensics]] : cas d&#039;étude Linagora vs Bluemind (vous compléterez les pages en et fr de Wikipédia sur ce sujet).&lt;br /&gt;
# [[Privacy policy guidelines]] : Démo: application à votre projet [[ECOM-RICM]]&lt;br /&gt;
# [[Rendu expressif]] ([[hatching surface rendering]])&lt;br /&gt;
# [[FPGA]]&lt;br /&gt;
# [[Graph Databases]]&lt;br /&gt;
# [[Akka]]&lt;br /&gt;
# [[Continuous Delivery]]&lt;br /&gt;
# [[Speech Recognition]]&lt;br /&gt;
# Protocoles, Formats et Plateformes pour le bâtiment intelligent : [[oBIX]], ... démonstration d&#039;[[IoTSys]]&lt;br /&gt;
# Orchestration Tools : Puppet vs. Chef vs. Ansible vs. Salt (pour 2)&lt;br /&gt;
# Visualisation de Journaux : démonstration de [[Kibana]] et [[Logstash]] : démonstration sur les logs de votre projet [[eCOM]]&lt;br /&gt;
# Protocoles de consensus et applications : [[Paxos]], [[Raft]] et Canevas de consensus : [[Zookeeper]], [[Curator]], [[Etcd]]&lt;br /&gt;
# [[Apache Mesos]], [[Borg]], [[Kubernete]], [[Alibaba Fuxi]] : démonstration sur le projet [[eCOM]]&lt;br /&gt;
# Cluster Management : [[Apache Helix]]&lt;br /&gt;
# The [[Rust]] Programming Language&lt;br /&gt;
# [[SQL-on-Hadoop]] : [[Pinot]]&lt;br /&gt;
# [[A/B Testing]] @ Internet Scale ([http://fr.slideshare.net/courseratalks/talkscoursera-ab-testing-internet-scale voir])&lt;br /&gt;
# Géolocalisation Indoor : Google [[Eddystone]], Apple [[iBeacon]], [[AltBeacon]]&lt;br /&gt;
# Performance Debugging : The [http://brendangregg.com/usemethod.html USE Method].&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2015&amp;diff=24921</id>
		<title>VT2015</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2015&amp;diff=24921"/>
		<updated>2015-10-28T12:22:44Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* 6 Novembre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[EA2014|&amp;lt;&amp;lt; Etudes 2014]] [[EA|Sommaire]] [[VT2016|Etudes 2016 &amp;gt;&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Veille Technologique et Stratégique=&lt;br /&gt;
* Enseignants: Georges-Pierre Bonneau, Didier Donsez&lt;br /&gt;
* UE/Module: EAM (HPRJ9R6B) et EAR (HPRJ9R4B) en RICM5&lt;br /&gt;
&lt;br /&gt;
L&#039;objectif des études approfondissement est de réaliser un travail de synthèse et d’évaluation sur une technologie / spécification / tendance&lt;br /&gt;
&lt;br /&gt;
Dans votre futur vie d&#039;ingénieur, vous aurez à d&#039;une part, vous former par vous-même sur une technologie émergente et d&#039;autre part à réaliser une veille technologique (et stratégique) par rapport à votre entreprise et projet.&lt;br /&gt;
Il s&#039;agira de réaliser&lt;br /&gt;
* le positionnement par rapport au marché&lt;br /&gt;
* d&#039;être critique&lt;br /&gt;
&lt;br /&gt;
Votre synthèse fait l&#039;objet d&#039;une présentation orale convaincante devant un auditoire (dans le futur, vos collègues, vos chefs ou vos clients) avec des transparents et un discours répété.&lt;br /&gt;
Pour finir de convaincre (Saint Thomas), vous ferez la présentation d&#039;une démonstration.&lt;br /&gt;
&lt;br /&gt;
Votre présentation sera noté et commenté par tous vos camarades via un formulaire (téléphone mobile). Leurs notes et leurs commentaires seront notés en fonction de leur exactitude de jugement.&lt;br /&gt;
&lt;br /&gt;
La présentation peut être réalisée avec [[reveal.js]]&lt;br /&gt;
&lt;br /&gt;
[[File:presentation-VT-RICM5-1516.pdf|transparents d&#039;introduction à l&#039;UE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ChoixSujetsVT2015.png|500px|center|Affectation des Sujets]]&lt;br /&gt;
&lt;br /&gt;
==Planning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====02 Octobre====&lt;br /&gt;
Didier DONSEZ&lt;br /&gt;
&lt;br /&gt;
Sujets : 1, 15,19,32&lt;br /&gt;
&lt;br /&gt;
* 1. Sébastien Toussaint, [https://securityblog.redhat.com/2015/09/02/factoring-rsa-keys-with-tls-perfect-forward-secrecy/ Factoring RSA Keys With TLS Perfect Forward Secrecy], démonstration d&#039;une attaque, [[VT2015_Factoring_RSA|Fiche de synthèse]], [[Media:VT2015_Factoring_RSA.pdf|Transparents]]&lt;br /&gt;
* 32. Géolocalisation Indoor : Google [[Eddystone]], Apple [[iBeacon]], [[AltBeacon]], [[VT2015_Geolocalisation_Indoor|Fiche de synthèse]], [[Media:VT2015_Geolocalisation_Indoor.pdf|Transparents]]&lt;br /&gt;
* 15. [[Graph Databases]], [[VT2015_Graph_Databases|Fiche de synthèse]], [[Media:VT2015_Graph_Databases.pdf|Transparents]]&lt;br /&gt;
* 19.  [[Software Forensics]] : cas d&#039;étude Linagora vs Bluemind (vous compléterez les pages en et fr de Wikipédia sur ce sujet).  , [[VT2015_Software_Forensics|Fiche de synthèse]], [[Media:VT2015_Software_Forensics.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====09 Octobre====&lt;br /&gt;
Georges-Pierre BONNEAU&lt;br /&gt;
&lt;br /&gt;
Sujets : 22, 13, 17, 25&lt;br /&gt;
* 13 : Xueyong Qian, Intelligent Personal Assistant, [[VT2015_Intelligent_Personal_Assistant|Fiche de synthèse]],[[Media:Intelligent_Personal_Assistant.pdf|Transparents]]&lt;br /&gt;
* 17 : Christophe Adam, Rendu Expressif, [[VT2015_Rendu_Expressif|Fiche de synthèse]], [[Media:Rendu_Expressif2.pdf|Transparents]]&lt;br /&gt;
* 25 : Vivien Michel, Visualisation de journaux : Kibana/Logstash, [[VT2015_Kibana_Logstash|Fiche de synthèse]], [[Media:Kibana_Logstash.pdf|Transparents]]&lt;br /&gt;
* 22: Sarah Aissanou, Reconnaissance de la parole, [[VT2015/Speech_Recognition|Fiche de synthèse]], [[Media:La_reconnaissance_de_la_parole.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====16 Octobre====&lt;br /&gt;
Didier DONSEZ&lt;br /&gt;
&lt;br /&gt;
Sujets : 7,8,12&lt;br /&gt;
&lt;br /&gt;
* Evolution(s) de HTTP : [[HTTP 2.0]], [[SPDY]], ... [[VT2015_HTTP20|Fiche de synthèse]],[[Media:VT2015_HTTP20.pdf|Transparents]]&lt;br /&gt;
* [[Quick UDP Internet Connection (QUIC)]] [[VT2015_QUIC|Fiche de synthèse]],[[Media:VT2015_QUIC.pdf|Transparents]]&lt;br /&gt;
* Simulateurs de Smart Cities : UrbanSIM, CanVis, Suicidator City Generator, [[Blended Cities]], ... [[VT2015_SimSmartCities|Fiche de synthèse]],[[Media:VT2015_SimSmartCities.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====23 Octobre====&lt;br /&gt;
Georges-Pierre BONNEAU&lt;br /&gt;
&lt;br /&gt;
Sujets : 14, 30, 6, 29&lt;br /&gt;
&lt;br /&gt;
* 14 : KLIPFFEL Tararaina : [Complex Event Processing] : [[VT2015_Complex_Event_Processing2|Fiche de synthèse]], [[File:Complex_Event_Processing.pdf|Slides de présentation]]&lt;br /&gt;
* 29 : BARTHELEMY Romain : The [[Rust]] Programming Language : [[VT2015_Rust_Programming_Language|Fiche de synthèse]], [[Media:Rust_Programming_Language.pdf|Transparents]]&lt;br /&gt;
* 30 : Kai Guo : SQL-on-Hadoop : [[SQL-on-Hadoop|Fiche de synthèse]],[[Media:VT2015 SQL-on-Hadoop.pdf|Transparents]]&lt;br /&gt;
* 6 : MESNIER Vincent : NewSQL : [[NewSQL|Fiche de synthèse]],[[Media:VT2015 NewSQL.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====6 Novembre====&lt;br /&gt;
Didier DONSEZ (seul)&lt;br /&gt;
&lt;br /&gt;
Sujets : 24, 26, 27, 10&lt;br /&gt;
* 24 EUDES Robin : Orchestration Tools : Puppet vs. Chef vs. Ansible vs. Salt ([[Orchestration_Tools|Fiche de synthèse]],[[Media:VT2015-Orchestration_Tools.pdf|Transparents]])&lt;br /&gt;
* 26 CODAZZI Rama : Protocoles de consensus (Paxos, Raft) et Canevas de consensus (Zookeeper, Curator, Etcd) : [[Consesus Protocol|Fiche de synthèse]],[[Media:VT:VT2015-protocol.pdf|Transparents]])&lt;br /&gt;
* 27 DAMOTTE Alan : Apache Mesos ([[Apache Mesos|Fiche de synthèse]],[[Media:VT:VT2015-Apache_Mesos.pdf|Transparents]])&lt;br /&gt;
* 10&lt;br /&gt;
&lt;br /&gt;
====13 Novembre====&lt;br /&gt;
Georges-Pierre BONNEAU&lt;br /&gt;
&lt;br /&gt;
Sujets : 2, 3, 20&lt;br /&gt;
* 2&lt;br /&gt;
* 3 TORCK Quentin : Structural Health Monitoring ([[structural health monitoring|Fiche de synthèse]],[[Media:VT:VT2015-Structural-Health-Monitoring.pdf|Transparents]])&lt;br /&gt;
* 20&lt;br /&gt;
&lt;br /&gt;
==Liste des Sujets==&lt;br /&gt;
# [https://securityblog.redhat.com/2015/09/02/factoring-rsa-keys-with-tls-perfect-forward-secrecy/ Factoring RSA Keys With TLS Perfect Forward Secrecy], démonstration d&#039;une attaque  --&amp;gt; Sébastien Toussaint (OBLIGATOIREMENT)&lt;br /&gt;
# [[Structural Health Monitoring]] &lt;br /&gt;
# [[CryptoMoney]] ([[BitCoin]], ...)&lt;br /&gt;
# [[Memcached]] : Usages, Patrons d&#039;arhitecture. Démonstration sur votre projet eCOM pour les ressources multimédia (images, videos, ...). Démonstration de l&#039;[http://dev.mysql.com/doc/ndbapi/en/ndbmemcache.html API Memcache API for MySQL Cluster] et de [[Redis.io]]&lt;br /&gt;
# [[In-Memory Databases]]&lt;br /&gt;
# [[NewSQL]]&lt;br /&gt;
# Evolution(s) de HTTP : [[HTTP 2.0]], [[SPDY]], ...&lt;br /&gt;
# [[Quick UDP Internet Connection (QUIC)]]&lt;br /&gt;
# [[Cloud Foundry]]&lt;br /&gt;
# [[OpenStack]]&lt;br /&gt;
# [[MicroServices]]&lt;br /&gt;
# Simulateurs de Smart Cities : UrbanSIM, CanVis, Suicidator City Generator, [[Blended Cities]], ...&lt;br /&gt;
# [[Digital Assistant]] : démonstration de UMich Sirius&lt;br /&gt;
# (Complex) [[Event Stream Processing]] : démonstration de [[Apache Storm]] et de [[Spark Streaming]] sur le cloud [[Azure]]. Démo supplémentaire du SaaS [[IFTTT]]&lt;br /&gt;
# [[Software Forensics]] : cas d&#039;étude Linagora vs Bluemind (vous compléterez les pages en et fr de Wikipédia sur ce sujet).&lt;br /&gt;
# [[Privacy policy guidelines]] : Démo: application à votre projet [[ECOM-RICM]]&lt;br /&gt;
# [[Rendu expressif]] ([[hatching surface rendering]])&lt;br /&gt;
# [[FPGA]]&lt;br /&gt;
# [[Graph Databases]]&lt;br /&gt;
# [[Akka]]&lt;br /&gt;
# [[Continuous Delivery]]&lt;br /&gt;
# [[Speech Recognition]]&lt;br /&gt;
# Protocoles, Formats et Plateformes pour le bâtiment intelligent : [[oBIX]], ... démonstration d&#039;[[IoTSys]]&lt;br /&gt;
# Orchestration Tools : Puppet vs. Chef vs. Ansible vs. Salt (pour 2)&lt;br /&gt;
# Visualisation de Journaux : démonstration de [[Kibana]] et [[Logstash]] : démonstration sur les logs de votre projet [[eCOM]]&lt;br /&gt;
# Protocoles de consensus et applications : [[Paxos]], [[Raft]] et Canevas de consensus : [[Zookeeper]], [[Curator]], [[Etcd]]&lt;br /&gt;
# [[Apache Mesos]], [[Borg]], [[Kubernete]], [[Alibaba Fuxi]] : démonstration sur le projet [[eCOM]]&lt;br /&gt;
# Cluster Management : [[Apache Helix]]&lt;br /&gt;
# The [[Rust]] Programming Language&lt;br /&gt;
# [[SQL-on-Hadoop]] : [[Pinot]]&lt;br /&gt;
# [[A/B Testing]] @ Internet Scale ([http://fr.slideshare.net/courseratalks/talkscoursera-ab-testing-internet-scale voir])&lt;br /&gt;
# Géolocalisation Indoor : Google [[Eddystone]], Apple [[iBeacon]], [[AltBeacon]]&lt;br /&gt;
# Performance Debugging : The [http://brendangregg.com/usemethod.html USE Method].&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2015&amp;diff=24920</id>
		<title>VT2015</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2015&amp;diff=24920"/>
		<updated>2015-10-28T12:22:11Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* 6 Novembre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[EA2014|&amp;lt;&amp;lt; Etudes 2014]] [[EA|Sommaire]] [[VT2016|Etudes 2016 &amp;gt;&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Veille Technologique et Stratégique=&lt;br /&gt;
* Enseignants: Georges-Pierre Bonneau, Didier Donsez&lt;br /&gt;
* UE/Module: EAM (HPRJ9R6B) et EAR (HPRJ9R4B) en RICM5&lt;br /&gt;
&lt;br /&gt;
L&#039;objectif des études approfondissement est de réaliser un travail de synthèse et d’évaluation sur une technologie / spécification / tendance&lt;br /&gt;
&lt;br /&gt;
Dans votre futur vie d&#039;ingénieur, vous aurez à d&#039;une part, vous former par vous-même sur une technologie émergente et d&#039;autre part à réaliser une veille technologique (et stratégique) par rapport à votre entreprise et projet.&lt;br /&gt;
Il s&#039;agira de réaliser&lt;br /&gt;
* le positionnement par rapport au marché&lt;br /&gt;
* d&#039;être critique&lt;br /&gt;
&lt;br /&gt;
Votre synthèse fait l&#039;objet d&#039;une présentation orale convaincante devant un auditoire (dans le futur, vos collègues, vos chefs ou vos clients) avec des transparents et un discours répété.&lt;br /&gt;
Pour finir de convaincre (Saint Thomas), vous ferez la présentation d&#039;une démonstration.&lt;br /&gt;
&lt;br /&gt;
Votre présentation sera noté et commenté par tous vos camarades via un formulaire (téléphone mobile). Leurs notes et leurs commentaires seront notés en fonction de leur exactitude de jugement.&lt;br /&gt;
&lt;br /&gt;
La présentation peut être réalisée avec [[reveal.js]]&lt;br /&gt;
&lt;br /&gt;
[[File:presentation-VT-RICM5-1516.pdf|transparents d&#039;introduction à l&#039;UE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ChoixSujetsVT2015.png|500px|center|Affectation des Sujets]]&lt;br /&gt;
&lt;br /&gt;
==Planning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====02 Octobre====&lt;br /&gt;
Didier DONSEZ&lt;br /&gt;
&lt;br /&gt;
Sujets : 1, 15,19,32&lt;br /&gt;
&lt;br /&gt;
* 1. Sébastien Toussaint, [https://securityblog.redhat.com/2015/09/02/factoring-rsa-keys-with-tls-perfect-forward-secrecy/ Factoring RSA Keys With TLS Perfect Forward Secrecy], démonstration d&#039;une attaque, [[VT2015_Factoring_RSA|Fiche de synthèse]], [[Media:VT2015_Factoring_RSA.pdf|Transparents]]&lt;br /&gt;
* 32. Géolocalisation Indoor : Google [[Eddystone]], Apple [[iBeacon]], [[AltBeacon]], [[VT2015_Geolocalisation_Indoor|Fiche de synthèse]], [[Media:VT2015_Geolocalisation_Indoor.pdf|Transparents]]&lt;br /&gt;
* 15. [[Graph Databases]], [[VT2015_Graph_Databases|Fiche de synthèse]], [[Media:VT2015_Graph_Databases.pdf|Transparents]]&lt;br /&gt;
* 19.  [[Software Forensics]] : cas d&#039;étude Linagora vs Bluemind (vous compléterez les pages en et fr de Wikipédia sur ce sujet).  , [[VT2015_Software_Forensics|Fiche de synthèse]], [[Media:VT2015_Software_Forensics.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====09 Octobre====&lt;br /&gt;
Georges-Pierre BONNEAU&lt;br /&gt;
&lt;br /&gt;
Sujets : 22, 13, 17, 25&lt;br /&gt;
* 13 : Xueyong Qian, Intelligent Personal Assistant, [[VT2015_Intelligent_Personal_Assistant|Fiche de synthèse]],[[Media:Intelligent_Personal_Assistant.pdf|Transparents]]&lt;br /&gt;
* 17 : Christophe Adam, Rendu Expressif, [[VT2015_Rendu_Expressif|Fiche de synthèse]], [[Media:Rendu_Expressif2.pdf|Transparents]]&lt;br /&gt;
* 25 : Vivien Michel, Visualisation de journaux : Kibana/Logstash, [[VT2015_Kibana_Logstash|Fiche de synthèse]], [[Media:Kibana_Logstash.pdf|Transparents]]&lt;br /&gt;
* 22: Sarah Aissanou, Reconnaissance de la parole, [[VT2015/Speech_Recognition|Fiche de synthèse]], [[Media:La_reconnaissance_de_la_parole.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====16 Octobre====&lt;br /&gt;
Didier DONSEZ&lt;br /&gt;
&lt;br /&gt;
Sujets : 7,8,12&lt;br /&gt;
&lt;br /&gt;
* Evolution(s) de HTTP : [[HTTP 2.0]], [[SPDY]], ... [[VT2015_HTTP20|Fiche de synthèse]],[[Media:VT2015_HTTP20.pdf|Transparents]]&lt;br /&gt;
* [[Quick UDP Internet Connection (QUIC)]] [[VT2015_QUIC|Fiche de synthèse]],[[Media:VT2015_QUIC.pdf|Transparents]]&lt;br /&gt;
* Simulateurs de Smart Cities : UrbanSIM, CanVis, Suicidator City Generator, [[Blended Cities]], ... [[VT2015_SimSmartCities|Fiche de synthèse]],[[Media:VT2015_SimSmartCities.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====23 Octobre====&lt;br /&gt;
Georges-Pierre BONNEAU&lt;br /&gt;
&lt;br /&gt;
Sujets : 14, 30, 6, 29&lt;br /&gt;
&lt;br /&gt;
* 14 : KLIPFFEL Tararaina : [Complex Event Processing] : [[VT2015_Complex_Event_Processing2|Fiche de synthèse]], [[File:Complex_Event_Processing.pdf|Slides de présentation]]&lt;br /&gt;
* 29 : BARTHELEMY Romain : The [[Rust]] Programming Language : [[VT2015_Rust_Programming_Language|Fiche de synthèse]], [[Media:Rust_Programming_Language.pdf|Transparents]]&lt;br /&gt;
* 30 : Kai Guo : SQL-on-Hadoop : [[SQL-on-Hadoop|Fiche de synthèse]],[[Media:VT2015 SQL-on-Hadoop.pdf|Transparents]]&lt;br /&gt;
* 6 : MESNIER Vincent : NewSQL : [[NewSQL|Fiche de synthèse]],[[Media:VT2015 NewSQL.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====6 Novembre====&lt;br /&gt;
Didier DONSEZ (seul)&lt;br /&gt;
&lt;br /&gt;
Sujets : 24, 26, 27, 10&lt;br /&gt;
* 24 EUDES Robin : Orchestration Tools : Puppet vs. Chef vs. Ansible vs. Salt ([[Orchestration_Tools|Fiche de synthèse]],[[Media:VT2015-Orchestration_Tools.pdf|Transparents]])&lt;br /&gt;
* 26 CODAZZI Rama : Protocoles de consensus: Paxos, Raft et Canevas de consensus : Zookeeper, Curator, Etcd ([[Consesus Protocol|Fiche de synthèse]],[[Media:VT:VT2015-protocol.pdf|Transparents]])&lt;br /&gt;
* 27 DAMOTTE Alan : Apache Mesos ([[Apache Mesos|Fiche de synthèse]],[[Media:VT:VT2015-Apache_Mesos.pdf|Transparents]])&lt;br /&gt;
* 10&lt;br /&gt;
&lt;br /&gt;
====13 Novembre====&lt;br /&gt;
Georges-Pierre BONNEAU&lt;br /&gt;
&lt;br /&gt;
Sujets : 2, 3, 20&lt;br /&gt;
* 2&lt;br /&gt;
* 3 TORCK Quentin : Structural Health Monitoring ([[structural health monitoring|Fiche de synthèse]],[[Media:VT:VT2015-Structural-Health-Monitoring.pdf|Transparents]])&lt;br /&gt;
* 20&lt;br /&gt;
&lt;br /&gt;
==Liste des Sujets==&lt;br /&gt;
# [https://securityblog.redhat.com/2015/09/02/factoring-rsa-keys-with-tls-perfect-forward-secrecy/ Factoring RSA Keys With TLS Perfect Forward Secrecy], démonstration d&#039;une attaque  --&amp;gt; Sébastien Toussaint (OBLIGATOIREMENT)&lt;br /&gt;
# [[Structural Health Monitoring]] &lt;br /&gt;
# [[CryptoMoney]] ([[BitCoin]], ...)&lt;br /&gt;
# [[Memcached]] : Usages, Patrons d&#039;arhitecture. Démonstration sur votre projet eCOM pour les ressources multimédia (images, videos, ...). Démonstration de l&#039;[http://dev.mysql.com/doc/ndbapi/en/ndbmemcache.html API Memcache API for MySQL Cluster] et de [[Redis.io]]&lt;br /&gt;
# [[In-Memory Databases]]&lt;br /&gt;
# [[NewSQL]]&lt;br /&gt;
# Evolution(s) de HTTP : [[HTTP 2.0]], [[SPDY]], ...&lt;br /&gt;
# [[Quick UDP Internet Connection (QUIC)]]&lt;br /&gt;
# [[Cloud Foundry]]&lt;br /&gt;
# [[OpenStack]]&lt;br /&gt;
# [[MicroServices]]&lt;br /&gt;
# Simulateurs de Smart Cities : UrbanSIM, CanVis, Suicidator City Generator, [[Blended Cities]], ...&lt;br /&gt;
# [[Digital Assistant]] : démonstration de UMich Sirius&lt;br /&gt;
# (Complex) [[Event Stream Processing]] : démonstration de [[Apache Storm]] et de [[Spark Streaming]] sur le cloud [[Azure]]. Démo supplémentaire du SaaS [[IFTTT]]&lt;br /&gt;
# [[Software Forensics]] : cas d&#039;étude Linagora vs Bluemind (vous compléterez les pages en et fr de Wikipédia sur ce sujet).&lt;br /&gt;
# [[Privacy policy guidelines]] : Démo: application à votre projet [[ECOM-RICM]]&lt;br /&gt;
# [[Rendu expressif]] ([[hatching surface rendering]])&lt;br /&gt;
# [[FPGA]]&lt;br /&gt;
# [[Graph Databases]]&lt;br /&gt;
# [[Akka]]&lt;br /&gt;
# [[Continuous Delivery]]&lt;br /&gt;
# [[Speech Recognition]]&lt;br /&gt;
# Protocoles, Formats et Plateformes pour le bâtiment intelligent : [[oBIX]], ... démonstration d&#039;[[IoTSys]]&lt;br /&gt;
# Orchestration Tools : Puppet vs. Chef vs. Ansible vs. Salt (pour 2)&lt;br /&gt;
# Visualisation de Journaux : démonstration de [[Kibana]] et [[Logstash]] : démonstration sur les logs de votre projet [[eCOM]]&lt;br /&gt;
# Protocoles de consensus et applications : [[Paxos]], [[Raft]] et Canevas de consensus : [[Zookeeper]], [[Curator]], [[Etcd]]&lt;br /&gt;
# [[Apache Mesos]], [[Borg]], [[Kubernete]], [[Alibaba Fuxi]] : démonstration sur le projet [[eCOM]]&lt;br /&gt;
# Cluster Management : [[Apache Helix]]&lt;br /&gt;
# The [[Rust]] Programming Language&lt;br /&gt;
# [[SQL-on-Hadoop]] : [[Pinot]]&lt;br /&gt;
# [[A/B Testing]] @ Internet Scale ([http://fr.slideshare.net/courseratalks/talkscoursera-ab-testing-internet-scale voir])&lt;br /&gt;
# Géolocalisation Indoor : Google [[Eddystone]], Apple [[iBeacon]], [[AltBeacon]]&lt;br /&gt;
# Performance Debugging : The [http://brendangregg.com/usemethod.html USE Method].&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2015&amp;diff=24919</id>
		<title>VT2015</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2015&amp;diff=24919"/>
		<updated>2015-10-28T12:21:13Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* 6 Novembre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[EA2014|&amp;lt;&amp;lt; Etudes 2014]] [[EA|Sommaire]] [[VT2016|Etudes 2016 &amp;gt;&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Veille Technologique et Stratégique=&lt;br /&gt;
* Enseignants: Georges-Pierre Bonneau, Didier Donsez&lt;br /&gt;
* UE/Module: EAM (HPRJ9R6B) et EAR (HPRJ9R4B) en RICM5&lt;br /&gt;
&lt;br /&gt;
L&#039;objectif des études approfondissement est de réaliser un travail de synthèse et d’évaluation sur une technologie / spécification / tendance&lt;br /&gt;
&lt;br /&gt;
Dans votre futur vie d&#039;ingénieur, vous aurez à d&#039;une part, vous former par vous-même sur une technologie émergente et d&#039;autre part à réaliser une veille technologique (et stratégique) par rapport à votre entreprise et projet.&lt;br /&gt;
Il s&#039;agira de réaliser&lt;br /&gt;
* le positionnement par rapport au marché&lt;br /&gt;
* d&#039;être critique&lt;br /&gt;
&lt;br /&gt;
Votre synthèse fait l&#039;objet d&#039;une présentation orale convaincante devant un auditoire (dans le futur, vos collègues, vos chefs ou vos clients) avec des transparents et un discours répété.&lt;br /&gt;
Pour finir de convaincre (Saint Thomas), vous ferez la présentation d&#039;une démonstration.&lt;br /&gt;
&lt;br /&gt;
Votre présentation sera noté et commenté par tous vos camarades via un formulaire (téléphone mobile). Leurs notes et leurs commentaires seront notés en fonction de leur exactitude de jugement.&lt;br /&gt;
&lt;br /&gt;
La présentation peut être réalisée avec [[reveal.js]]&lt;br /&gt;
&lt;br /&gt;
[[File:presentation-VT-RICM5-1516.pdf|transparents d&#039;introduction à l&#039;UE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ChoixSujetsVT2015.png|500px|center|Affectation des Sujets]]&lt;br /&gt;
&lt;br /&gt;
==Planning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====02 Octobre====&lt;br /&gt;
Didier DONSEZ&lt;br /&gt;
&lt;br /&gt;
Sujets : 1, 15,19,32&lt;br /&gt;
&lt;br /&gt;
* 1. Sébastien Toussaint, [https://securityblog.redhat.com/2015/09/02/factoring-rsa-keys-with-tls-perfect-forward-secrecy/ Factoring RSA Keys With TLS Perfect Forward Secrecy], démonstration d&#039;une attaque, [[VT2015_Factoring_RSA|Fiche de synthèse]], [[Media:VT2015_Factoring_RSA.pdf|Transparents]]&lt;br /&gt;
* 32. Géolocalisation Indoor : Google [[Eddystone]], Apple [[iBeacon]], [[AltBeacon]], [[VT2015_Geolocalisation_Indoor|Fiche de synthèse]], [[Media:VT2015_Geolocalisation_Indoor.pdf|Transparents]]&lt;br /&gt;
* 15. [[Graph Databases]], [[VT2015_Graph_Databases|Fiche de synthèse]], [[Media:VT2015_Graph_Databases.pdf|Transparents]]&lt;br /&gt;
* 19.  [[Software Forensics]] : cas d&#039;étude Linagora vs Bluemind (vous compléterez les pages en et fr de Wikipédia sur ce sujet).  , [[VT2015_Software_Forensics|Fiche de synthèse]], [[Media:VT2015_Software_Forensics.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====09 Octobre====&lt;br /&gt;
Georges-Pierre BONNEAU&lt;br /&gt;
&lt;br /&gt;
Sujets : 22, 13, 17, 25&lt;br /&gt;
* 13 : Xueyong Qian, Intelligent Personal Assistant, [[VT2015_Intelligent_Personal_Assistant|Fiche de synthèse]],[[Media:Intelligent_Personal_Assistant.pdf|Transparents]]&lt;br /&gt;
* 17 : Christophe Adam, Rendu Expressif, [[VT2015_Rendu_Expressif|Fiche de synthèse]], [[Media:Rendu_Expressif2.pdf|Transparents]]&lt;br /&gt;
* 25 : Vivien Michel, Visualisation de journaux : Kibana/Logstash, [[VT2015_Kibana_Logstash|Fiche de synthèse]], [[Media:Kibana_Logstash.pdf|Transparents]]&lt;br /&gt;
* 22: Sarah Aissanou, Reconnaissance de la parole, [[VT2015/Speech_Recognition|Fiche de synthèse]], [[Media:La_reconnaissance_de_la_parole.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====16 Octobre====&lt;br /&gt;
Didier DONSEZ&lt;br /&gt;
&lt;br /&gt;
Sujets : 7,8,12&lt;br /&gt;
&lt;br /&gt;
* Evolution(s) de HTTP : [[HTTP 2.0]], [[SPDY]], ... [[VT2015_HTTP20|Fiche de synthèse]],[[Media:VT2015_HTTP20.pdf|Transparents]]&lt;br /&gt;
* [[Quick UDP Internet Connection (QUIC)]] [[VT2015_QUIC|Fiche de synthèse]],[[Media:VT2015_QUIC.pdf|Transparents]]&lt;br /&gt;
* Simulateurs de Smart Cities : UrbanSIM, CanVis, Suicidator City Generator, [[Blended Cities]], ... [[VT2015_SimSmartCities|Fiche de synthèse]],[[Media:VT2015_SimSmartCities.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====23 Octobre====&lt;br /&gt;
Georges-Pierre BONNEAU&lt;br /&gt;
&lt;br /&gt;
Sujets : 14, 30, 6, 29&lt;br /&gt;
&lt;br /&gt;
* 14 : KLIPFFEL Tararaina : [Complex Event Processing] : [[VT2015_Complex_Event_Processing2|Fiche de synthèse]], [[File:Complex_Event_Processing.pdf|Slides de présentation]]&lt;br /&gt;
* 29 : BARTHELEMY Romain : The [[Rust]] Programming Language : [[VT2015_Rust_Programming_Language|Fiche de synthèse]], [[Media:Rust_Programming_Language.pdf|Transparents]]&lt;br /&gt;
* 30 : Kai Guo : SQL-on-Hadoop : [[SQL-on-Hadoop|Fiche de synthèse]],[[Media:VT2015 SQL-on-Hadoop.pdf|Transparents]]&lt;br /&gt;
* 6 : MESNIER Vincent : NewSQL : [[NewSQL|Fiche de synthèse]],[[Media:VT2015 NewSQL.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====6 Novembre====&lt;br /&gt;
Didier DONSEZ (seul)&lt;br /&gt;
&lt;br /&gt;
Sujets : 24, 26, 27, 10&lt;br /&gt;
* 24 EUDES Robin : Orchestration Tools : Puppet vs. Chef vs. Ansible vs. Salt ([[Orchestration_Tools|Fiche de synthèse]],[[Media:VT2015-Orchestration_Tools.pdf|Transparents]])&lt;br /&gt;
* 26 CODAZZI Rama : Protocoles de consensus: Paxos, Raft et Canevas de consensus : Zookeeper, Curator, Etcd ([[Consesus Protocol|Fiche de synthèse]],[[Media:|Transparents]])&lt;br /&gt;
* 27 DAMOTTE Alan : Apache Mesos ([[Apache Mesos|Fiche de synthèse]],[[Media:VT:VT2015-Apache_Mesos.pdf|Transparents]])&lt;br /&gt;
* 10&lt;br /&gt;
&lt;br /&gt;
====13 Novembre====&lt;br /&gt;
Georges-Pierre BONNEAU&lt;br /&gt;
&lt;br /&gt;
Sujets : 2, 3, 20&lt;br /&gt;
* 2&lt;br /&gt;
* 3 TORCK Quentin : Structural Health Monitoring ([[structural health monitoring|Fiche de synthèse]],[[Media:VT:VT2015-Structural-Health-Monitoring.pdf|Transparents]])&lt;br /&gt;
* 20&lt;br /&gt;
&lt;br /&gt;
==Liste des Sujets==&lt;br /&gt;
# [https://securityblog.redhat.com/2015/09/02/factoring-rsa-keys-with-tls-perfect-forward-secrecy/ Factoring RSA Keys With TLS Perfect Forward Secrecy], démonstration d&#039;une attaque  --&amp;gt; Sébastien Toussaint (OBLIGATOIREMENT)&lt;br /&gt;
# [[Structural Health Monitoring]] &lt;br /&gt;
# [[CryptoMoney]] ([[BitCoin]], ...)&lt;br /&gt;
# [[Memcached]] : Usages, Patrons d&#039;arhitecture. Démonstration sur votre projet eCOM pour les ressources multimédia (images, videos, ...). Démonstration de l&#039;[http://dev.mysql.com/doc/ndbapi/en/ndbmemcache.html API Memcache API for MySQL Cluster] et de [[Redis.io]]&lt;br /&gt;
# [[In-Memory Databases]]&lt;br /&gt;
# [[NewSQL]]&lt;br /&gt;
# Evolution(s) de HTTP : [[HTTP 2.0]], [[SPDY]], ...&lt;br /&gt;
# [[Quick UDP Internet Connection (QUIC)]]&lt;br /&gt;
# [[Cloud Foundry]]&lt;br /&gt;
# [[OpenStack]]&lt;br /&gt;
# [[MicroServices]]&lt;br /&gt;
# Simulateurs de Smart Cities : UrbanSIM, CanVis, Suicidator City Generator, [[Blended Cities]], ...&lt;br /&gt;
# [[Digital Assistant]] : démonstration de UMich Sirius&lt;br /&gt;
# (Complex) [[Event Stream Processing]] : démonstration de [[Apache Storm]] et de [[Spark Streaming]] sur le cloud [[Azure]]. Démo supplémentaire du SaaS [[IFTTT]]&lt;br /&gt;
# [[Software Forensics]] : cas d&#039;étude Linagora vs Bluemind (vous compléterez les pages en et fr de Wikipédia sur ce sujet).&lt;br /&gt;
# [[Privacy policy guidelines]] : Démo: application à votre projet [[ECOM-RICM]]&lt;br /&gt;
# [[Rendu expressif]] ([[hatching surface rendering]])&lt;br /&gt;
# [[FPGA]]&lt;br /&gt;
# [[Graph Databases]]&lt;br /&gt;
# [[Akka]]&lt;br /&gt;
# [[Continuous Delivery]]&lt;br /&gt;
# [[Speech Recognition]]&lt;br /&gt;
# Protocoles, Formats et Plateformes pour le bâtiment intelligent : [[oBIX]], ... démonstration d&#039;[[IoTSys]]&lt;br /&gt;
# Orchestration Tools : Puppet vs. Chef vs. Ansible vs. Salt (pour 2)&lt;br /&gt;
# Visualisation de Journaux : démonstration de [[Kibana]] et [[Logstash]] : démonstration sur les logs de votre projet [[eCOM]]&lt;br /&gt;
# Protocoles de consensus et applications : [[Paxos]], [[Raft]] et Canevas de consensus : [[Zookeeper]], [[Curator]], [[Etcd]]&lt;br /&gt;
# [[Apache Mesos]], [[Borg]], [[Kubernete]], [[Alibaba Fuxi]] : démonstration sur le projet [[eCOM]]&lt;br /&gt;
# Cluster Management : [[Apache Helix]]&lt;br /&gt;
# The [[Rust]] Programming Language&lt;br /&gt;
# [[SQL-on-Hadoop]] : [[Pinot]]&lt;br /&gt;
# [[A/B Testing]] @ Internet Scale ([http://fr.slideshare.net/courseratalks/talkscoursera-ab-testing-internet-scale voir])&lt;br /&gt;
# Géolocalisation Indoor : Google [[Eddystone]], Apple [[iBeacon]], [[AltBeacon]]&lt;br /&gt;
# Performance Debugging : The [http://brendangregg.com/usemethod.html USE Method].&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=VT2015&amp;diff=24918</id>
		<title>VT2015</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=VT2015&amp;diff=24918"/>
		<updated>2015-10-28T12:15:41Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* 6 Novembre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[EA2014|&amp;lt;&amp;lt; Etudes 2014]] [[EA|Sommaire]] [[VT2016|Etudes 2016 &amp;gt;&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Veille Technologique et Stratégique=&lt;br /&gt;
* Enseignants: Georges-Pierre Bonneau, Didier Donsez&lt;br /&gt;
* UE/Module: EAM (HPRJ9R6B) et EAR (HPRJ9R4B) en RICM5&lt;br /&gt;
&lt;br /&gt;
L&#039;objectif des études approfondissement est de réaliser un travail de synthèse et d’évaluation sur une technologie / spécification / tendance&lt;br /&gt;
&lt;br /&gt;
Dans votre futur vie d&#039;ingénieur, vous aurez à d&#039;une part, vous former par vous-même sur une technologie émergente et d&#039;autre part à réaliser une veille technologique (et stratégique) par rapport à votre entreprise et projet.&lt;br /&gt;
Il s&#039;agira de réaliser&lt;br /&gt;
* le positionnement par rapport au marché&lt;br /&gt;
* d&#039;être critique&lt;br /&gt;
&lt;br /&gt;
Votre synthèse fait l&#039;objet d&#039;une présentation orale convaincante devant un auditoire (dans le futur, vos collègues, vos chefs ou vos clients) avec des transparents et un discours répété.&lt;br /&gt;
Pour finir de convaincre (Saint Thomas), vous ferez la présentation d&#039;une démonstration.&lt;br /&gt;
&lt;br /&gt;
Votre présentation sera noté et commenté par tous vos camarades via un formulaire (téléphone mobile). Leurs notes et leurs commentaires seront notés en fonction de leur exactitude de jugement.&lt;br /&gt;
&lt;br /&gt;
La présentation peut être réalisée avec [[reveal.js]]&lt;br /&gt;
&lt;br /&gt;
[[File:presentation-VT-RICM5-1516.pdf|transparents d&#039;introduction à l&#039;UE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ChoixSujetsVT2015.png|500px|center|Affectation des Sujets]]&lt;br /&gt;
&lt;br /&gt;
==Planning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====02 Octobre====&lt;br /&gt;
Didier DONSEZ&lt;br /&gt;
&lt;br /&gt;
Sujets : 1, 15,19,32&lt;br /&gt;
&lt;br /&gt;
* 1. Sébastien Toussaint, [https://securityblog.redhat.com/2015/09/02/factoring-rsa-keys-with-tls-perfect-forward-secrecy/ Factoring RSA Keys With TLS Perfect Forward Secrecy], démonstration d&#039;une attaque, [[VT2015_Factoring_RSA|Fiche de synthèse]], [[Media:VT2015_Factoring_RSA.pdf|Transparents]]&lt;br /&gt;
* 32. Géolocalisation Indoor : Google [[Eddystone]], Apple [[iBeacon]], [[AltBeacon]], [[VT2015_Geolocalisation_Indoor|Fiche de synthèse]], [[Media:VT2015_Geolocalisation_Indoor.pdf|Transparents]]&lt;br /&gt;
* 15. [[Graph Databases]], [[VT2015_Graph_Databases|Fiche de synthèse]], [[Media:VT2015_Graph_Databases.pdf|Transparents]]&lt;br /&gt;
* 19.  [[Software Forensics]] : cas d&#039;étude Linagora vs Bluemind (vous compléterez les pages en et fr de Wikipédia sur ce sujet).  , [[VT2015_Software_Forensics|Fiche de synthèse]], [[Media:VT2015_Software_Forensics.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====09 Octobre====&lt;br /&gt;
Georges-Pierre BONNEAU&lt;br /&gt;
&lt;br /&gt;
Sujets : 22, 13, 17, 25&lt;br /&gt;
* 13 : Xueyong Qian, Intelligent Personal Assistant, [[VT2015_Intelligent_Personal_Assistant|Fiche de synthèse]],[[Media:Intelligent_Personal_Assistant.pdf|Transparents]]&lt;br /&gt;
* 17 : Christophe Adam, Rendu Expressif, [[VT2015_Rendu_Expressif|Fiche de synthèse]], [[Media:Rendu_Expressif2.pdf|Transparents]]&lt;br /&gt;
* 25 : Vivien Michel, Visualisation de journaux : Kibana/Logstash, [[VT2015_Kibana_Logstash|Fiche de synthèse]], [[Media:Kibana_Logstash.pdf|Transparents]]&lt;br /&gt;
* 22: Sarah Aissanou, Reconnaissance de la parole, [[VT2015/Speech_Recognition|Fiche de synthèse]], [[Media:La_reconnaissance_de_la_parole.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====16 Octobre====&lt;br /&gt;
Didier DONSEZ&lt;br /&gt;
&lt;br /&gt;
Sujets : 7,8,12&lt;br /&gt;
&lt;br /&gt;
* Evolution(s) de HTTP : [[HTTP 2.0]], [[SPDY]], ... [[VT2015_HTTP20|Fiche de synthèse]],[[Media:VT2015_HTTP20.pdf|Transparents]]&lt;br /&gt;
* [[Quick UDP Internet Connection (QUIC)]] [[VT2015_QUIC|Fiche de synthèse]],[[Media:VT2015_QUIC.pdf|Transparents]]&lt;br /&gt;
* Simulateurs de Smart Cities : UrbanSIM, CanVis, Suicidator City Generator, [[Blended Cities]], ... [[VT2015_SimSmartCities|Fiche de synthèse]],[[Media:VT2015_SimSmartCities.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====23 Octobre====&lt;br /&gt;
Georges-Pierre BONNEAU&lt;br /&gt;
&lt;br /&gt;
Sujets : 14, 30, 6, 29&lt;br /&gt;
&lt;br /&gt;
* 14 : KLIPFFEL Tararaina : [Complex Event Processing] : [[VT2015_Complex_Event_Processing2|Fiche de synthèse]], [[File:Complex_Event_Processing.pdf|Slides de présentation]]&lt;br /&gt;
* 29 : BARTHELEMY Romain : The [[Rust]] Programming Language : [[VT2015_Rust_Programming_Language|Fiche de synthèse]], [[Media:Rust_Programming_Language.pdf|Transparents]]&lt;br /&gt;
* 30 : Kai Guo : SQL-on-Hadoop : [[SQL-on-Hadoop|Fiche de synthèse]],[[Media:VT2015 SQL-on-Hadoop.pdf|Transparents]]&lt;br /&gt;
* 6 : MESNIER Vincent : NewSQL : [[NewSQL|Fiche de synthèse]],[[Media:VT2015 NewSQL.pdf|Transparents]]&lt;br /&gt;
&lt;br /&gt;
====6 Novembre====&lt;br /&gt;
Didier DONSEZ (seul)&lt;br /&gt;
&lt;br /&gt;
Sujets : 24, 26, 27, 10&lt;br /&gt;
* 24 EUDES Robin : Orchestration Tools : Puppet vs. Chef vs. Ansible vs. Salt ([[Orchestration_Tools|Fiche de synthèse]],[[Media:VT2015-Orchestration_Tools.pdf|Transparents]])&lt;br /&gt;
* 26 CODAZZI Rama : Protocoles de consensus et applications : Paxos, Raft et Canevas de consensus : Zookeeper, Curator, Etcd&lt;br /&gt;
* 27 DAMOTTE Alan : Apache Mesos ([[Apache Mesos|Fiche de synthèse]],[[Media:VT:VT2015-Apache_Mesos.pdf|Transparents]])&lt;br /&gt;
* 10&lt;br /&gt;
&lt;br /&gt;
====13 Novembre====&lt;br /&gt;
Georges-Pierre BONNEAU&lt;br /&gt;
&lt;br /&gt;
Sujets : 2, 3, 20&lt;br /&gt;
* 2&lt;br /&gt;
* 3 TORCK Quentin : Structural Health Monitoring ([[structural health monitoring|Fiche de synthèse]],[[Media:VT:VT2015-Structural-Health-Monitoring.pdf|Transparents]])&lt;br /&gt;
* 20&lt;br /&gt;
&lt;br /&gt;
==Liste des Sujets==&lt;br /&gt;
# [https://securityblog.redhat.com/2015/09/02/factoring-rsa-keys-with-tls-perfect-forward-secrecy/ Factoring RSA Keys With TLS Perfect Forward Secrecy], démonstration d&#039;une attaque  --&amp;gt; Sébastien Toussaint (OBLIGATOIREMENT)&lt;br /&gt;
# [[Structural Health Monitoring]] &lt;br /&gt;
# [[CryptoMoney]] ([[BitCoin]], ...)&lt;br /&gt;
# [[Memcached]] : Usages, Patrons d&#039;arhitecture. Démonstration sur votre projet eCOM pour les ressources multimédia (images, videos, ...). Démonstration de l&#039;[http://dev.mysql.com/doc/ndbapi/en/ndbmemcache.html API Memcache API for MySQL Cluster] et de [[Redis.io]]&lt;br /&gt;
# [[In-Memory Databases]]&lt;br /&gt;
# [[NewSQL]]&lt;br /&gt;
# Evolution(s) de HTTP : [[HTTP 2.0]], [[SPDY]], ...&lt;br /&gt;
# [[Quick UDP Internet Connection (QUIC)]]&lt;br /&gt;
# [[Cloud Foundry]]&lt;br /&gt;
# [[OpenStack]]&lt;br /&gt;
# [[MicroServices]]&lt;br /&gt;
# Simulateurs de Smart Cities : UrbanSIM, CanVis, Suicidator City Generator, [[Blended Cities]], ...&lt;br /&gt;
# [[Digital Assistant]] : démonstration de UMich Sirius&lt;br /&gt;
# (Complex) [[Event Stream Processing]] : démonstration de [[Apache Storm]] et de [[Spark Streaming]] sur le cloud [[Azure]]. Démo supplémentaire du SaaS [[IFTTT]]&lt;br /&gt;
# [[Software Forensics]] : cas d&#039;étude Linagora vs Bluemind (vous compléterez les pages en et fr de Wikipédia sur ce sujet).&lt;br /&gt;
# [[Privacy policy guidelines]] : Démo: application à votre projet [[ECOM-RICM]]&lt;br /&gt;
# [[Rendu expressif]] ([[hatching surface rendering]])&lt;br /&gt;
# [[FPGA]]&lt;br /&gt;
# [[Graph Databases]]&lt;br /&gt;
# [[Akka]]&lt;br /&gt;
# [[Continuous Delivery]]&lt;br /&gt;
# [[Speech Recognition]]&lt;br /&gt;
# Protocoles, Formats et Plateformes pour le bâtiment intelligent : [[oBIX]], ... démonstration d&#039;[[IoTSys]]&lt;br /&gt;
# Orchestration Tools : Puppet vs. Chef vs. Ansible vs. Salt (pour 2)&lt;br /&gt;
# Visualisation de Journaux : démonstration de [[Kibana]] et [[Logstash]] : démonstration sur les logs de votre projet [[eCOM]]&lt;br /&gt;
# Protocoles de consensus et applications : [[Paxos]], [[Raft]] et Canevas de consensus : [[Zookeeper]], [[Curator]], [[Etcd]]&lt;br /&gt;
# [[Apache Mesos]], [[Borg]], [[Kubernete]], [[Alibaba Fuxi]] : démonstration sur le projet [[eCOM]]&lt;br /&gt;
# Cluster Management : [[Apache Helix]]&lt;br /&gt;
# The [[Rust]] Programming Language&lt;br /&gt;
# [[SQL-on-Hadoop]] : [[Pinot]]&lt;br /&gt;
# [[A/B Testing]] @ Internet Scale ([http://fr.slideshare.net/courseratalks/talkscoursera-ab-testing-internet-scale voir])&lt;br /&gt;
# Géolocalisation Indoor : Google [[Eddystone]], Apple [[iBeacon]], [[AltBeacon]]&lt;br /&gt;
# Performance Debugging : The [http://brendangregg.com/usemethod.html USE Method].&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=ECOM_RICM5_Groupe2_2015&amp;diff=24608</id>
		<title>ECOM RICM5 Groupe2 2015</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=ECOM_RICM5_Groupe2_2015&amp;diff=24608"/>
		<updated>2015-10-19T08:44:28Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Charte Graphique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cette page wiki est la fiche de suivi du projet d’e-commerce du groupe 2 de la promotion RICM5 de 2015-2016. Le projet ECOM consiste à concevoir et réaliser une application de commerce électronique.&lt;br /&gt;
Elle est constituée de deux parties : la partie IHM et la partie Système. Elles seront toutes deux traitées en parallèle et ferons l’objet de soutenances séparées.&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
*[[ECOM_RICM5_Groupe2_2015/SRS|SRS]]&lt;br /&gt;
* Dépôt Git (privé, demander l&#039;accès au Chef de projet) : https://github.com/AlanDamotte/eCOM-RICM5-2015&lt;br /&gt;
&lt;br /&gt;
=Résumé du projet=&lt;br /&gt;
&lt;br /&gt;
=L’équipe=&lt;br /&gt;
L’équipe est constituée de cinq étudiants en cinquième année de RICM. Trois viennent de l’option Système et réseau, les deux autres viennent de l’option Communication multimédia.&lt;br /&gt;
* Chef de projet : Alan Damotte&lt;br /&gt;
* Scrum Master : Quentin Torck&lt;br /&gt;
* Responsable développement : Jérémy Hammerer&lt;br /&gt;
* Responsable graphique : Rama Codazzi&lt;br /&gt;
* Responsable utilisabilité : Kai Guo&lt;br /&gt;
* Développeur : Toute l’équipe&lt;br /&gt;
&lt;br /&gt;
=Motivations=&lt;br /&gt;
&lt;br /&gt;
=Utilisateurs cibles=&lt;br /&gt;
&lt;br /&gt;
Après étude de notre sondage, certains profils types se sont distingués : &lt;br /&gt;
* Notre clientèle sera principalement jeune même si le site est pour tout type d&#039;utilisateur&lt;br /&gt;
* 95% des sondés l’utiliseraient dans le cadre d&#039;un usage personnel&lt;br /&gt;
* L&#039;utilisation de notre site se fera principalement sur ordinateur&lt;br /&gt;
&lt;br /&gt;
[[Image:ptf-gp2-2015.png|center|thumb|600px|Plateforme utilisée pour les achats en ligne]]&lt;br /&gt;
&lt;br /&gt;
Notre interface sera donc épurée, pour les habitués d&#039;internet.&lt;br /&gt;
* Peu de détails.&lt;br /&gt;
* Couleurs assez claires.&lt;br /&gt;
* Interface très intuitive.&lt;br /&gt;
&lt;br /&gt;
En effet, nos utilisateurs principaux utilise souvent internet et dispose d&#039;une expérience utilisateur suffisante pour l&#039;utilisation d&#039;une interface claire et épurée.&lt;br /&gt;
[[Image:internet-gp2-2015.png|center|thumb|600px|Fréquence d&#039;utilisation d&#039;internet]]&lt;br /&gt;
&lt;br /&gt;
=Contexte D&#039;utilisation=&lt;br /&gt;
&lt;br /&gt;
L&#039;utilisation de notre site sera développé dans l&#039;optique d&#039;une utilisation&lt;br /&gt;
* où l&#039;utilisateur est chez lui, sur son ordinateur et passe sa commande.&lt;br /&gt;
* où l&#039;utilisateur est dans les transports en commun et consulte le site.&lt;br /&gt;
&lt;br /&gt;
=Analyse de la concurrence=&lt;br /&gt;
&lt;br /&gt;
[http://camaloon.fr Camaloon] : Le site dispose d’une interface clair et efficace. Son principal atout est la possibilité de personnaliser les stickers en ligne. Concernant l’expérience utilisateur, qu’on soit utilisateur novice ou utilisateur expert, le site est bien conçu. En effet, des bulles d’aides sont disponibles pour l’utilisateur qui le souhaite et ne sont par défaut pas visibles pour simplifier et épurer l’interface. Une commande est réalisée en une dizaine de clics (or personnalisation).&lt;br /&gt;
&lt;br /&gt;
[http://www.copytop.com Copytop] : Le site est relativement épuré, grâce notamment à l’utilisation de logos qui allège la page et rend l’expérience utilisateur plus simple. On pourrait toutefois noter la taille des menus un peu trop importante : on peut rapidement s’y perdre. Concernant la personnalisation de stickers, il n’y a pas de personnalisation en ligne. On ne peut qu’utiliser des formats prédéfinis ou importer nos propres images.&lt;br /&gt;
&lt;br /&gt;
[http://www.easyflyer.fr/sticker-adhesif/sticker-interieur.html Easyflyer] : Le site est très chargé, avec des promotions et des publicités dans tous les coins de la page. La densité informationnelle est trop importante et l’utilisateur est rapidement perdu. Pour accéder à la personnalisation d’un sticker il faut d’abord se familiariser avec l’interface, puis chercher ce dont on a besoin parmi des menus et sous menus interminables. La page se recharge à chaque clic, même lors de la personnalisation de stickers : pour un utilisateur dont la connexion internet est mauvaise, cela peut rapidement devenir un calvaire. Enfin, aucune réelle personnalisation n’est proposée.&lt;br /&gt;
&lt;br /&gt;
[http://www.decorecebo.fr/votre-texte-personnalise.html Decorecebo] : Site de personnalisation d’autocollant. Le service proposé n’intègre que la personnalisation de texte (pas d’images ou de logos). L’interface n’est pas responsive design et la densité informationnelle est trop importante : l’utilisateur est rapidement perdu, ou n’a pas envie de passer trop de temps dans la lecture de toutes les zones d’informations. De plus, pour accéder à certaines informations complémentaires quant à la personnalisation des autocollants, il faut contacter les gérants du site.&lt;br /&gt;
&lt;br /&gt;
=Plateformes=&lt;br /&gt;
Nous constatons que la plateforme la plus utilisée pour les achats en ligne est l&#039;ordinateur. C&#039;est donc cette plateforme qui nous occupera en premier. Nous ferons le reste ensuite :&lt;br /&gt;
* Ordinateur (1)&lt;br /&gt;
* Smartphone (2)&lt;br /&gt;
* Tablette (Android, Windows tablette et iPad) (3)&lt;br /&gt;
Concernant les principaux navigateurs sur lesquels nous allons nous concentrer : &lt;br /&gt;
* Chrome, Firefox&lt;br /&gt;
&lt;br /&gt;
[[Image:nav-gp2-2105.png|center|thumb|600px|Navigateur les plus utilisés]]&lt;br /&gt;
&lt;br /&gt;
=Services proposés=&lt;br /&gt;
&lt;br /&gt;
=Taches=&lt;br /&gt;
&lt;br /&gt;
Liste des taches triées par priorités&lt;br /&gt;
* Commander des stickers : (1)&lt;br /&gt;
** Stickers prédéfinis pour la V0 du site (1)&lt;br /&gt;
** Stickers personnalisés pour la V1 du site (4)&lt;br /&gt;
* Gérer le panier utilisateur et payer (2)&lt;br /&gt;
* Créer un compte utilisateur (3)&lt;br /&gt;
**Se connecter/Se déconnecter (3)&lt;br /&gt;
* Gérer son compte (5)&lt;br /&gt;
* Supprimer son compte (6)&lt;br /&gt;
&lt;br /&gt;
=Fonctionnalités=&lt;br /&gt;
* Réinitialisation de mot de passe en cas de perte de mot de passe et de demande de renvoi de celui-ci&lt;br /&gt;
* Edition d’un profil utilisateur&lt;br /&gt;
* Suppression d’un compte utilisateur&lt;br /&gt;
* Paiement en ligne ?&lt;br /&gt;
* Personnaliser un sticker&lt;br /&gt;
* Commander un sticker&lt;br /&gt;
* Gestion d’un panier ?&lt;br /&gt;
&lt;br /&gt;
=Base de données=&lt;br /&gt;
[[File:Bd_ecom.png|center|thumb|1000px|Schéma de notre base de données]]&lt;br /&gt;
&lt;br /&gt;
=IHM=&lt;br /&gt;
&lt;br /&gt;
==Charte Graphique==&lt;br /&gt;
[[File:Charte_graphique_My_stick_it.pdf|Charte Graphique]]&lt;br /&gt;
&lt;br /&gt;
==IHM abstraite==&lt;br /&gt;
[[Image:IHMabstraite.png|center|thumb|650px|IHM Abstraite]]&lt;br /&gt;
==Maquette IHM==&lt;br /&gt;
Voici la première maquette correspondant à la vue principale en arrivant sur notre site web :&lt;br /&gt;
[[Image:Maquette1.png|center|thumb|650px|Maquette home]]&lt;br /&gt;
&lt;br /&gt;
La maquette correspondant à la première étape de personnalisation d&#039;un sticker :&lt;br /&gt;
[[Image:Maquette2.png|center|thumb|650px|Maquette personnalisation stickers]]&lt;br /&gt;
&lt;br /&gt;
La maquette suivante présente la gestion du panier utilisateur :&lt;br /&gt;
[[Image:Maquette3.png|center|thumb|650px|Maquette gestion de panier]]&lt;br /&gt;
&lt;br /&gt;
=Extensions=&lt;br /&gt;
==Envisagées==&lt;br /&gt;
*Intégration continue (avec Jenkins)&lt;br /&gt;
*Cluster Management avec Apache Mesos&lt;br /&gt;
*Analyse de log avec ELK (Elasticsearch - Logstash - Kibana)&lt;br /&gt;
*Editeur graphique (Extension &amp;quot;Multimodalité et Mobilité&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Réalisées==&lt;br /&gt;
&lt;br /&gt;
=Scrum=&lt;br /&gt;
&lt;br /&gt;
Pour la partie Scrum nous avons décidé de faire des sprints d&#039;une durée de 2 semaines pour la partie conception de l&#039;architecture de notre site, car toutes les taches à effectuer sont globalement assez rapides, et cela nous permet d&#039;avoir un feedback assez rapidement sur le travail qui a été effectué, et par conséquent de  modifier les points qui ne sont pas corrects.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Voici le lien vers notre waffle :&#039;&#039;&#039; https://waffle.io/AlanDamotte/eCOM-RICM5-2015/&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mise en place de Poker-planing :&#039;&#039;&#039; à partir du 20 Octobre, avec périodicité de 3 semaines&lt;br /&gt;
&lt;br /&gt;
Les Poker-Plannings  permettent à notre équipe de se mettre en accord sur la difficulté des taches à réaliser, et par conséquent sur la durée des taches à effectuer. &lt;br /&gt;
Le déroulement est le suivant: nous avons une liste de taches que nous allons évaluer. Nous prenons la première tache. Chacun des membres du groupe possède un échantillon de cartes ( de 1 à 10) ce qui désigne le temps qu&#039;il faudrait passer pour cette tache. chacun des membres retourne simultanément la carte indiquant la difficulté et indique pour quel raison il a choisit d&#039;évaluer ainsi la tache. Pour terminer nous nous mettons en accord sur l&#039;évaluation de la tache.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sprint 1 : du 8 septembre au 21 Septembre ==&lt;br /&gt;
* Compréhension du sujet&lt;br /&gt;
* Répartition des tâches&lt;br /&gt;
* Début de la rédaction du cahier des charges&lt;br /&gt;
* Création et diffusion du questionnaire&lt;br /&gt;
* Choisir une idée de site web réalisable&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retrospective Sprint 1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; Pour ce premier sprint nous avons tous vécu ce sprint plutôt bien. Il a été nécessaire de se mettre d&#039;accord sur une idée de site web. Ensuite il a été nécessaire de se mettre d&#039;accord sur notre vision de l&#039;interface.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; Réalisation des attentes clients&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sprint 2 : du 22 septembre au 5 Octobre ==&lt;br /&gt;
* Analyse des résultats du questionnaire&lt;br /&gt;
* Liste fixes des fonctionnalités (priorité)&lt;br /&gt;
* Début du choix des technologies utilisées&lt;br /&gt;
* Réalisation des maquettes du site&lt;br /&gt;
* Rédaction de l&#039;ihm abstraite&lt;br /&gt;
* Rédaction du schéma de la base de données&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retrospective Sprint 2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; Bonne répartition des taches travail fluide et efficace nous permettant de rèaliser toutes les taches fixées avec succès  &lt;br /&gt;
&lt;br /&gt;
== Sprint 3 : du 6 Octobre au 20 Octobre ==&lt;br /&gt;
--&amp;gt; Le But de ce Sprint serait d&#039;avoir toute la partie Conception de terminée, pour pouvoir commencer à réaliser l&#039;implémentation lors du prochain Sprint.&lt;br /&gt;
* Création du SRS&lt;br /&gt;
* Rédaction d&#039;une charte graphique&lt;br /&gt;
* Rédaction du schéma de base de données&lt;br /&gt;
* Création Maquette IHM&lt;br /&gt;
* Schéma Relationnel de base de données&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retrospective Sprint 3&#039;&#039;&#039;&lt;br /&gt;
* A Venir&lt;br /&gt;
&lt;br /&gt;
== Sprint 4 : du 21 Octobre au 3 Novembre ==&lt;br /&gt;
* Design du site web : html et css&lt;br /&gt;
* Mise en place des Beans&lt;br /&gt;
* Mise en place de la base de donnée&lt;br /&gt;
* Implémentation système&lt;br /&gt;
&#039;&#039;&#039;Retrospective Sprint 4&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* A Venir&lt;br /&gt;
&lt;br /&gt;
== Sprint 5 : du 4 Novembre au 17 Novembre ==&lt;br /&gt;
&#039;&#039;&#039;Retrospective Sprint 5&#039;&#039;&#039;&lt;br /&gt;
* A Venir&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=ECOM_RICM5_Groupe2_2015&amp;diff=24606</id>
		<title>ECOM RICM5 Groupe2 2015</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=ECOM_RICM5_Groupe2_2015&amp;diff=24606"/>
		<updated>2015-10-19T08:43:19Z</updated>

		<summary type="html">&lt;p&gt;Rama.Codazzi: /* Charte Graphique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cette page wiki est la fiche de suivi du projet d’e-commerce du groupe 2 de la promotion RICM5 de 2015-2016. Le projet ECOM consiste à concevoir et réaliser une application de commerce électronique.&lt;br /&gt;
Elle est constituée de deux parties : la partie IHM et la partie Système. Elles seront toutes deux traitées en parallèle et ferons l’objet de soutenances séparées.&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
*[[ECOM_RICM5_Groupe2_2015/SRS|SRS]]&lt;br /&gt;
* Dépôt Git (privé, demander l&#039;accès au Chef de projet) : https://github.com/AlanDamotte/eCOM-RICM5-2015&lt;br /&gt;
&lt;br /&gt;
=Résumé du projet=&lt;br /&gt;
&lt;br /&gt;
=L’équipe=&lt;br /&gt;
L’équipe est constituée de cinq étudiants en cinquième année de RICM. Trois viennent de l’option Système et réseau, les deux autres viennent de l’option Communication multimédia.&lt;br /&gt;
* Chef de projet : Alan Damotte&lt;br /&gt;
* Scrum Master : Quentin Torck&lt;br /&gt;
* Responsable développement : Jérémy Hammerer&lt;br /&gt;
* Responsable graphique : Rama Codazzi&lt;br /&gt;
* Responsable utilisabilité : Kai Guo&lt;br /&gt;
* Développeur : Toute l’équipe&lt;br /&gt;
&lt;br /&gt;
=Motivations=&lt;br /&gt;
&lt;br /&gt;
=Utilisateurs cibles=&lt;br /&gt;
&lt;br /&gt;
Après étude de notre sondage, certains profils types se sont distingués : &lt;br /&gt;
* Notre clientèle sera principalement jeune même si le site est pour tout type d&#039;utilisateur&lt;br /&gt;
* 95% des sondés l’utiliseraient dans le cadre d&#039;un usage personnel&lt;br /&gt;
* L&#039;utilisation de notre site se fera principalement sur ordinateur&lt;br /&gt;
&lt;br /&gt;
[[Image:ptf-gp2-2015.png|center|thumb|600px|Plateforme utilisée pour les achats en ligne]]&lt;br /&gt;
&lt;br /&gt;
Notre interface sera donc épurée, pour les habitués d&#039;internet.&lt;br /&gt;
* Peu de détails.&lt;br /&gt;
* Couleurs assez claires.&lt;br /&gt;
* Interface très intuitive.&lt;br /&gt;
&lt;br /&gt;
En effet, nos utilisateurs principaux utilise souvent internet et dispose d&#039;une expérience utilisateur suffisante pour l&#039;utilisation d&#039;une interface claire et épurée.&lt;br /&gt;
[[Image:internet-gp2-2015.png|center|thumb|600px|Fréquence d&#039;utilisation d&#039;internet]]&lt;br /&gt;
&lt;br /&gt;
=Contexte D&#039;utilisation=&lt;br /&gt;
&lt;br /&gt;
L&#039;utilisation de notre site sera développé dans l&#039;optique d&#039;une utilisation&lt;br /&gt;
* où l&#039;utilisateur est chez lui, sur son ordinateur et passe sa commande.&lt;br /&gt;
* où l&#039;utilisateur est dans les transports en commun et consulte le site.&lt;br /&gt;
&lt;br /&gt;
=Analyse de la concurrence=&lt;br /&gt;
&lt;br /&gt;
[http://camaloon.fr Camaloon] : Le site dispose d’une interface clair et efficace. Son principal atout est la possibilité de personnaliser les stickers en ligne. Concernant l’expérience utilisateur, qu’on soit utilisateur novice ou utilisateur expert, le site est bien conçu. En effet, des bulles d’aides sont disponibles pour l’utilisateur qui le souhaite et ne sont par défaut pas visibles pour simplifier et épurer l’interface. Une commande est réalisée en une dizaine de clics (or personnalisation).&lt;br /&gt;
&lt;br /&gt;
[http://www.copytop.com Copytop] : Le site est relativement épuré, grâce notamment à l’utilisation de logos qui allège la page et rend l’expérience utilisateur plus simple. On pourrait toutefois noter la taille des menus un peu trop importante : on peut rapidement s’y perdre. Concernant la personnalisation de stickers, il n’y a pas de personnalisation en ligne. On ne peut qu’utiliser des formats prédéfinis ou importer nos propres images.&lt;br /&gt;
&lt;br /&gt;
[http://www.easyflyer.fr/sticker-adhesif/sticker-interieur.html Easyflyer] : Le site est très chargé, avec des promotions et des publicités dans tous les coins de la page. La densité informationnelle est trop importante et l’utilisateur est rapidement perdu. Pour accéder à la personnalisation d’un sticker il faut d’abord se familiariser avec l’interface, puis chercher ce dont on a besoin parmi des menus et sous menus interminables. La page se recharge à chaque clic, même lors de la personnalisation de stickers : pour un utilisateur dont la connexion internet est mauvaise, cela peut rapidement devenir un calvaire. Enfin, aucune réelle personnalisation n’est proposée.&lt;br /&gt;
&lt;br /&gt;
[http://www.decorecebo.fr/votre-texte-personnalise.html Decorecebo] : Site de personnalisation d’autocollant. Le service proposé n’intègre que la personnalisation de texte (pas d’images ou de logos). L’interface n’est pas responsive design et la densité informationnelle est trop importante : l’utilisateur est rapidement perdu, ou n’a pas envie de passer trop de temps dans la lecture de toutes les zones d’informations. De plus, pour accéder à certaines informations complémentaires quant à la personnalisation des autocollants, il faut contacter les gérants du site.&lt;br /&gt;
&lt;br /&gt;
=Plateformes=&lt;br /&gt;
Nous constatons que la plateforme la plus utilisée pour les achats en ligne est l&#039;ordinateur. C&#039;est donc cette plateforme qui nous occupera en premier. Nous ferons le reste ensuite :&lt;br /&gt;
* Ordinateur (1)&lt;br /&gt;
* Smartphone (2)&lt;br /&gt;
* Tablette (Android, Windows tablette et iPad) (3)&lt;br /&gt;
Concernant les principaux navigateurs sur lesquels nous allons nous concentrer : &lt;br /&gt;
* Chrome, Firefox&lt;br /&gt;
&lt;br /&gt;
[[Image:nav-gp2-2105.png|center|thumb|600px|Navigateur les plus utilisés]]&lt;br /&gt;
&lt;br /&gt;
=Services proposés=&lt;br /&gt;
&lt;br /&gt;
=Taches=&lt;br /&gt;
&lt;br /&gt;
Liste des taches triées par priorités&lt;br /&gt;
* Commander des stickers : (1)&lt;br /&gt;
** Stickers prédéfinis pour la V0 du site (1)&lt;br /&gt;
** Stickers personnalisés pour la V1 du site (4)&lt;br /&gt;
* Gérer le panier utilisateur et payer (2)&lt;br /&gt;
* Créer un compte utilisateur (3)&lt;br /&gt;
**Se connecter/Se déconnecter (3)&lt;br /&gt;
* Gérer son compte (5)&lt;br /&gt;
* Supprimer son compte (6)&lt;br /&gt;
&lt;br /&gt;
=Fonctionnalités=&lt;br /&gt;
* Réinitialisation de mot de passe en cas de perte de mot de passe et de demande de renvoi de celui-ci&lt;br /&gt;
* Edition d’un profil utilisateur&lt;br /&gt;
* Suppression d’un compte utilisateur&lt;br /&gt;
* Paiement en ligne ?&lt;br /&gt;
* Personnaliser un sticker&lt;br /&gt;
* Commander un sticker&lt;br /&gt;
* Gestion d’un panier ?&lt;br /&gt;
&lt;br /&gt;
=Base de données=&lt;br /&gt;
[[File:Bd_ecom.png|center|thumb|1000px|Schéma de notre base de données]]&lt;br /&gt;
&lt;br /&gt;
=IHM=&lt;br /&gt;
&lt;br /&gt;
==Charte Graphique==&lt;br /&gt;
[[File:Charte_graphique_My_stick_it.pdf]]&lt;br /&gt;
&lt;br /&gt;
==IHM abstraite==&lt;br /&gt;
[[Image:IHMabstraite.png|center|thumb|650px|IHM Abstraite]]&lt;br /&gt;
==Maquette IHM==&lt;br /&gt;
Voici la première maquette correspondant à la vue principale en arrivant sur notre site web :&lt;br /&gt;
[[Image:Maquette1.png|center|thumb|650px|Maquette home]]&lt;br /&gt;
&lt;br /&gt;
La maquette correspondant à la première étape de personnalisation d&#039;un sticker :&lt;br /&gt;
[[Image:Maquette2.png|center|thumb|650px|Maquette personnalisation stickers]]&lt;br /&gt;
&lt;br /&gt;
La maquette suivante présente la gestion du panier utilisateur :&lt;br /&gt;
[[Image:Maquette3.png|center|thumb|650px|Maquette gestion de panier]]&lt;br /&gt;
&lt;br /&gt;
=Extensions=&lt;br /&gt;
==Envisagées==&lt;br /&gt;
*Intégration continue (avec Jenkins)&lt;br /&gt;
*Cluster Management avec Apache Mesos&lt;br /&gt;
*Analyse de log avec ELK (Elasticsearch - Logstash - Kibana)&lt;br /&gt;
*Editeur graphique (Extension &amp;quot;Multimodalité et Mobilité&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Réalisées==&lt;br /&gt;
&lt;br /&gt;
=Scrum=&lt;br /&gt;
&lt;br /&gt;
Pour la partie Scrum nous avons décidé de faire des sprints d&#039;une durée de 2 semaines pour la partie conception de l&#039;architecture de notre site, car toutes les taches à effectuer sont globalement assez rapides, et cela nous permet d&#039;avoir un feedback assez rapidement sur le travail qui a été effectué, et par conséquent de  modifier les points qui ne sont pas corrects.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Voici le lien vers notre waffle :&#039;&#039;&#039; https://waffle.io/AlanDamotte/eCOM-RICM5-2015/&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mise en place de Poker-planing :&#039;&#039;&#039; à partir du 20 Octobre, avec périodicité de 3 semaines&lt;br /&gt;
&lt;br /&gt;
Les Poker-Plannings  permettent à notre équipe de se mettre en accord sur la difficulté des taches à réaliser, et par conséquent sur la durée des taches à effectuer. &lt;br /&gt;
Le déroulement est le suivant: nous avons une liste de taches que nous allons évaluer. Nous prenons la première tache. Chacun des membres du groupe possède un échantillon de cartes ( de 1 à 10) ce qui désigne le temps qu&#039;il faudrait passer pour cette tache. chacun des membres retourne simultanément la carte indiquant la difficulté et indique pour quel raison il a choisit d&#039;évaluer ainsi la tache. Pour terminer nous nous mettons en accord sur l&#039;évaluation de la tache.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sprint 1 : du 8 septembre au 21 Septembre ==&lt;br /&gt;
* Compréhension du sujet&lt;br /&gt;
* Répartition des tâches&lt;br /&gt;
* Début de la rédaction du cahier des charges&lt;br /&gt;
* Création et diffusion du questionnaire&lt;br /&gt;
* Choisir une idée de site web réalisable&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retrospective Sprint 1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; Pour ce premier sprint nous avons tous vécu ce sprint plutôt bien. Il a été nécessaire de se mettre d&#039;accord sur une idée de site web. Ensuite il a été nécessaire de se mettre d&#039;accord sur notre vision de l&#039;interface.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; Réalisation des attentes clients&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sprint 2 : du 22 septembre au 5 Octobre ==&lt;br /&gt;
* Analyse des résultats du questionnaire&lt;br /&gt;
* Liste fixes des fonctionnalités (priorité)&lt;br /&gt;
* Début du choix des technologies utilisées&lt;br /&gt;
* Réalisation des maquettes du site&lt;br /&gt;
* Rédaction de l&#039;ihm abstraite&lt;br /&gt;
* Rédaction du schéma de la base de données&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retrospective Sprint 2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; Bonne répartition des taches travail fluide et efficace nous permettant de rèaliser toutes les taches fixées avec succès  &lt;br /&gt;
&lt;br /&gt;
== Sprint 3 : du 6 Octobre au 20 Octobre ==&lt;br /&gt;
--&amp;gt; Le But de ce Sprint serait d&#039;avoir toute la partie Conception de terminée, pour pouvoir commencer à réaliser l&#039;implémentation lors du prochain Sprint.&lt;br /&gt;
* Création du SRS&lt;br /&gt;
* Rédaction d&#039;une charte graphique&lt;br /&gt;
* Rédaction du schéma de base de données&lt;br /&gt;
* Création Maquette IHM&lt;br /&gt;
* Schéma Relationnel de base de données&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retrospective Sprint 3&#039;&#039;&#039;&lt;br /&gt;
* A Venir&lt;br /&gt;
&lt;br /&gt;
== Sprint 4 : du 21 Octobre au 3 Novembre ==&lt;br /&gt;
* Design du site web : html et css&lt;br /&gt;
* Mise en place des Beans&lt;br /&gt;
* Mise en place de la base de donnée&lt;br /&gt;
* Implémentation système&lt;br /&gt;
&#039;&#039;&#039;Retrospective Sprint 4&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* A Venir&lt;br /&gt;
&lt;br /&gt;
== Sprint 5 : du 4 Novembre au 17 Novembre ==&lt;br /&gt;
&#039;&#039;&#039;Retrospective Sprint 5&#039;&#039;&#039;&lt;br /&gt;
* A Venir&lt;/div&gt;</summary>
		<author><name>Rama.Codazzi</name></author>
	</entry>
</feed>