<?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=Nicolas.Husson</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=Nicolas.Husson"/>
	<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php/Special:Contributions/Nicolas.Husson"/>
	<updated>2026-08-27T01:33:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/FicheSuivi&amp;diff=16581</id>
		<title>SmartCampus2014/FicheSuivi</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/FicheSuivi&amp;diff=16581"/>
		<updated>2014-03-28T16:33:52Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Demo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:SmartCampus-logo.png|400px|thumb|right]]&lt;br /&gt;
[[Image:SmartCampus-RICMTeam2014.jpg|400px|thumb|right|SmartCampus&#039;s Team]]&lt;br /&gt;
Encadrants : Didier Donsez et Vivien Quema &amp;lt;br&amp;gt;&lt;br /&gt;
Etudiants : (mailing list du projet : [mailto:smartcampus2014@googlegroups.com &amp;lt;smartcampus2014@googlegroups.com&amp;gt;])&lt;br /&gt;
* Nicolas Husson (chef de projet)&lt;br /&gt;
* Thomas Nunes&lt;br /&gt;
* Morgan Bidois&lt;br /&gt;
* Laurène Guelorget&lt;br /&gt;
* Simon Planès&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Les documents importants :&lt;br /&gt;
* Le dépôt Git se trouve [https://github.com/thomasNDS/SmartCampus2014 ici]&lt;br /&gt;
* Le cahier des charges se trouve [http://air.imag.fr/index.php/SmartCampus2014/CDC ici]&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/Maquette Des photos de la maquette]&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels Divers tutoriels maison], [http://air.imag.fr/index.php/SmartCampus2014/TutoArduino tutoriels Arduino] et [http://air.imag.fr/index.php/SmartCampus2014/TutoGalileo tutoriels Galileo]&lt;br /&gt;
* Le [[Media:flyer_SC.pdf | flyer]] et le [[Media:poster_SC.pdf | poster]] du projet&lt;br /&gt;
* Les [[Media:transparents_sc.pdf|slides de la présentation]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Présentation du projet =&lt;br /&gt;
Le projet a débuté le 28 janvier 2014 et va durer environ 2 mois. La page complète du projet se trouve [http://air.imag.fr/index.php/SmartCampus2014 ici] et le cahier des charges est consultable sur [http://air.imag.fr/index.php/SmartCampus2014/CDC cette page].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L’équipe est formée de 5 membres de RICM5, trois de l’option Communication Multimédia et deux de l’option Systèmes et Réseaux. Le chef de projet est Nicolas Husson.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durant ce projet innovant, nous utilisons la méthodologie Agile et le Scrum Master est Thomas Nunes. La durée d’un sprint a été déterminée à une semaine et nous avons également décidé de mettre en place des « Poker Planning ».&lt;br /&gt;
&lt;br /&gt;
= Progression du projet =&lt;br /&gt;
11 sous-projets ont été identifiés et décrits à travers ce diagramme :&lt;br /&gt;
[[File:gantt1.png | 1050px| center| thumb | Diagramme de Gantt prévisionnel]]&lt;br /&gt;
== Sprint 0 : du 28/01 au 02/02 ==&lt;br /&gt;
* compréhension du sujet&lt;br /&gt;
* recherche sur les technologies utilisables : openHAB, protocole MQTT (et ses implémentations) pour la communication M2M...&lt;br /&gt;
* premiers tutoriels : OpenHAB, mosquitto, etc. (voir le [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Mosquitto tutoriel dédié à Mosquitto])&lt;br /&gt;
* rencontres avec Didier Donsez pour préciser le cahier des charges et avec Jérôme Maisonnasse pour l&#039;accès à la fablab MJK (découpeuse laser, imprimante 3d, etc.)&lt;br /&gt;
* enquête auprès d&#039;utilisateurs potentiels (étudiants) de SmartCampus&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 1 : du 03/02 au 09/02 ==&lt;br /&gt;
[[File:Archi02.png | 450px| right| thumb | Architecture globale de SmartCampus (M : extrémité d&#039;une communication MQTT)]]&lt;br /&gt;
&#039;&#039;&#039;Tâches principales&#039;&#039;&#039;&lt;br /&gt;
* Génie Logiciel : finir l&#039;architecture du projet (1ère version)&lt;br /&gt;
** détailler le diagramme de classe&lt;br /&gt;
** diagramme contexte, use-cases, scenarii d&#039;utilisation, etc.&lt;br /&gt;
** mettre au propre les schémas&lt;br /&gt;
** finir le cahier des charges et rédiger MPI&lt;br /&gt;
&lt;br /&gt;
* Recherches et application des technologies&lt;br /&gt;
** voir si le couplage Arduino/OpenHab est possible (voir le [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Comment_se_connecter_en_SSH_.C3.A0_la_carte_Galileo tutoriel pour se connecter à la carte en SSH])&lt;br /&gt;
** faire un choix de techno : Titanium/PhoneGap en fonction de la RA&lt;br /&gt;
** petite démo de la techno choisie&lt;br /&gt;
&lt;br /&gt;
* Maquette&lt;br /&gt;
** plan papier de la maquette (nombre de bâtiments, localisation, etc.)&lt;br /&gt;
** plan SVG des pièces de base pour la découpeuse laser&lt;br /&gt;
** matériel externe (train LEGO, objets imprimante 3D, ...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tâches additionnelles&#039;&#039;&#039;&lt;br /&gt;
* Contacter CROUS, semitag, METRO pour l&#039;open data&lt;br /&gt;
* Recherche d&#039;une alternative à l&#039;arduino si il ne supporte pas openHAB (azure, Raspberry Pi)&lt;br /&gt;
* Petite démo d&#039;openHAB avec cette alternative&lt;br /&gt;
* Couplage de openHAB avec Mosquitto (voir le [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Comment_utiliser_openHAB_avec_Mosquitto_.3F tutoriel dédié])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:SmartCampusMaquette02.png | 450px| center | thumb | Plan de la maquette (3x2m)]]&lt;br /&gt;
&lt;br /&gt;
== Sprint 2 : du 10/02 au 16/02 ==&lt;br /&gt;
[[File:smart2014-prototype0.jpg | 200px| right| thumb | Premier prototype de bâtiment]]&lt;br /&gt;
*&#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** Installation d&#039;un OS sur Arduino Galileo avec une jvm et le système arduino	&lt;br /&gt;
** Openhab sur Arduino Galileo		&lt;br /&gt;
** Connexions avec des capteurs / ajout de shield arduino&lt;br /&gt;
** Mosquitto sur Arduino Galileo		&lt;br /&gt;
** Intégration du projet Smart Citizen	&lt;br /&gt;
	&lt;br /&gt;
* &#039;&#039;&#039;Serveur MQTT / http&#039;&#039;&#039;&lt;br /&gt;
** Recherche technologique (voir le tutoriel sur [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Mis_en_place_d.27une_base_de_donn.C3.A9e_mongodb_.28en_locale.29 mongodb], [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Mis_en_place_NodeJs_Mongoose Node.js Mongoose] et le [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Mis_en_place_NodeJs_Mongoose_MQTT couplage Mongoose/MQTT])&lt;br /&gt;
** Un prototype alliant serveur MQTT et HTTP	&lt;br /&gt;
** Schéma de base de donnée&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application Cliente de réalité augmentée&#039;&#039;&#039;&lt;br /&gt;
** Prototype avec lecture d’un QRcode et affichage du numéro lu	&lt;br /&gt;
** Design IHM de l’application : maquettes avec des traits tordus	&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Plans SVG d&#039;un prototype	&lt;br /&gt;
** Découpe d’un premier prototype&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 3 : du 17/02 au 23/02 ==&lt;br /&gt;
* &#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** OS sur Arduino Galileo / JVM / openHAB / Mosquitto&lt;br /&gt;
** Intégration avec le serveur&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application mobile&#039;&#039;&#039;&lt;br /&gt;
** Recherche technologique (bootstrap, map, pop-ups, plein-écran, etc.)&lt;br /&gt;
** Mise au propre sur wiki&lt;br /&gt;
** Petite démo : une map avec éléments cliquables (voir le [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Int.C3.A9grer_une_carte_Google_et_fixer_ses_limites tutoriel dédié])&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Plans de tous les bâtiments (planches de 60*40cm) --&amp;gt; Changement de la taille de la maquette&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tâches additionnelles&#039;&#039;&#039;&lt;br /&gt;
* Découpe de la moitié des bâtiments&lt;br /&gt;
* Montage des bâtiments (chercher de la colle à bois)&lt;br /&gt;
* Découpe routes, terrains, pistes cyclables&lt;br /&gt;
* Une cafetière dans la salle robotique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 4 : du 24/02 au 02/03 ==&lt;br /&gt;
* &#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** OS sur Arduino Galileo / JVM / openHAB / Mosquitto&lt;br /&gt;
** Capteurs : pression, température, humidité, NFC, leds, affichage, air quality, afficheur 7 segments, etc.&lt;br /&gt;
*** leds : chenillard, bouton poussoir&lt;br /&gt;
*** température : alerte led + speaker quand dépassement d&#039;un seuil, affichage sur 7 segments&lt;br /&gt;
*** compteur : BP + afficheur 7 segments&lt;br /&gt;
(voir les [http://air.imag.fr/index.php/SmartCampus2014/TutoArduino tutoriels dédiés])&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application mobile&#039;&#039;&#039;&lt;br /&gt;
** Finir design&lt;br /&gt;
** Présentation et validation du design (par le groupe)&lt;br /&gt;
** Petite démo : un mode plein écran + layout (menu top, barre de notifications et conteneurs)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Serveur&#039;&#039;&#039;&lt;br /&gt;
** Décision sur la méthode de remplissage de la BD&lt;br /&gt;
** Finir le serveur + README&lt;br /&gt;
** Simple interface admin SmartCampus (récupérer des données en ajax)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Refaire le plan de la maquette (changement de dimensions)&lt;br /&gt;
** Plans de tous les bâtiments (planches de 60*40cm)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Interface administrateur&#039;&#039;&#039;&lt;br /&gt;
** Design à gros grain : analyse des besoins et aspect général&lt;br /&gt;
** Recherche technologique (Ajax, template avec jade, approche modulaire (widgets), etc.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 5 : du 10/03 au 16/03 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** Sketch sur Galileo&lt;br /&gt;
** Mise en réseaux des Galileo&lt;br /&gt;
** Intégration aux autres sous-projets&lt;br /&gt;
** Capteurs + Mosquitto&lt;br /&gt;
** Capteurs de pression (tam tam en papier)&lt;br /&gt;
** Câblage électrique des Arduino&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application mobile&#039;&#039;&#039;&lt;br /&gt;
** Intégration avec le serveur : afficher des éléments&lt;br /&gt;
** Intégration avec le serveur : envoyer des éléments (crowdsourcing)&lt;br /&gt;
** Test avec GeckoView&lt;br /&gt;
** Test plus complet ChromeView&lt;br /&gt;
** Travailler le crowdsourcing&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Serveur&#039;&#039;&#039;&lt;br /&gt;
** Super admin SmartCampus : fonctionnalités (+ implémentation) et design interface&lt;br /&gt;
** Tuto pour ajouter une route personnalisée&lt;br /&gt;
** Documentation du serveur &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Plans de tous les bâtiments, qui rentrent sur des planches de 60*40cm&lt;br /&gt;
** Découpe laser de la moitié (ou plus) des bâtiments&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Interface administrateur&#039;&#039;&#039;&lt;br /&gt;
** Premier jet rudimentaire avec layouts + (système widgets)&lt;br /&gt;
** Intégration avec le serveur&lt;br /&gt;
** Ajout d’un système d’identification&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Robots&#039;&#039;&#039;&lt;br /&gt;
** Recherche techno&lt;br /&gt;
** Robots multi-langage ? (javascript, perl, C, scala, lua, ocaml, java ou autre…)&lt;br /&gt;
** Robot pour les menus du CROUS&lt;br /&gt;
** Robots pour les événements CROUS, EVE, UJF&lt;br /&gt;
** Robot pour le covoiturage : application mash-up de sites spécialisés&lt;br /&gt;
** COQP : prise de contact, étude du code&lt;br /&gt;
** Casier NFC : contact de l’équipe&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 6 : du 17/03 au 23/03 ==&lt;br /&gt;
[[Image:SmartCampus-LaserCuttedBuilding1.jpg|200px|thumb|right|Laser Cut Buildings for SmartCampus]]&lt;br /&gt;
[[Image:SmartCampus-LaserCuttedBuilding2.jpg|200px|thumb|right|Laser Cut Buildings for SmartCampus]][[Image:SmartCampus-LaserCuttedBuilding3.jpg|200px|thumb|right|Laser Cutted Building for SmartCampus]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** Recherche communication ino/python&lt;br /&gt;
** Dupliquer les OS Galileo&lt;br /&gt;
** Mise en réseaux des Galileo&lt;br /&gt;
&lt;br /&gt;
(voir les [http://air.imag.fr/index.php/SmartCampus2014/TutoGalileo tutoriels sur Galileo])&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application mobile&#039;&#039;&#039;&lt;br /&gt;
** Intégration avec le serveur&lt;br /&gt;
** Informations simple (lampadaire cassé)&lt;br /&gt;
** MAP&lt;br /&gt;
** Intégrer les différents éléments : applis, map, covoiturage, etc.&lt;br /&gt;
** Test avec GeckoView/ChromeView&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Serveur&#039;&#039;&#039;&lt;br /&gt;
** Charge la BD de mock data&lt;br /&gt;
** Super admin SmartCampus&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Montage des maquettes&lt;br /&gt;
** Découpe du terrain, routes, tram, etc.&lt;br /&gt;
** Disposer les QRcodes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Robots&#039;&#039;&#039;&lt;br /&gt;
** Robots pour EVE&lt;br /&gt;
** Intégration COQP&lt;br /&gt;
** Intégration Casier NFC (contact de l’équipe pour accès à leur BD, lancer le code sur nos machine)&lt;br /&gt;
** Robot pour la TAG/metro&lt;br /&gt;
** Horaires pour les arrêts de tram&lt;br /&gt;
** Événement (travaux, greves)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 7 : du 24/03 au 27/03 ==&lt;br /&gt;
* &#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** Dupliquer les OS Galileo&lt;br /&gt;
** Mettre à jour l&#039;interface d&#039;OpenHAB&lt;br /&gt;
** Préparer la démo (capteurs, OpenHAB, etc.)&lt;br /&gt;
&lt;br /&gt;
(voir les [http://air.imag.fr/index.php/SmartCampus2014/TutoGalileo tutoriels sur Galileo])&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application mobile&#039;&#039;&#039;&lt;br /&gt;
** Test de l&#039;application sur mobile pour la démo&lt;br /&gt;
** Retouches&lt;br /&gt;
** Intégrer les horaires de tram&lt;br /&gt;
** Mise à jour des descriptions&lt;br /&gt;
** Super admin SmartCampus (ajout item OpenHAB)&lt;br /&gt;
** Mise en production sur le cloud&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Disposer les QRcodes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Interface administrateur&#039;&#039;&#039;&lt;br /&gt;
** Terminer l’application&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Autres&#039;&#039;&#039;&lt;br /&gt;
** Casier NFC (projet Walid et Lotfi)&lt;br /&gt;
** Finir les READMEs et nettoyer le dépot&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Soutenance&#039;&#039;&#039;&lt;br /&gt;
** Diapos&lt;br /&gt;
** Flyer + poster&lt;br /&gt;
** Finir wiki Air&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Galerie =&lt;br /&gt;
[[Image:SmartCampus2014-001.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-002.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-003.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-004.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-005.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-006.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-007.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-008.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-009.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-010.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-011.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-012.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-013.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-014.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-015.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
&lt;br /&gt;
= Demo =&lt;br /&gt;
Vous trouverez ci-desous des liens youtube sur des vidéos d&#039;un partie de notre démo : &lt;br /&gt;
*[http://youtu.be/yzhQsh858uI Allumage+Extinction Leds via openhab avec Galileo sketch arduino]&lt;br /&gt;
*[https://www.youtube.com/watch?v=jeICG9IgD6E Visualisation de donnnées d&#039;un capteur d&#039;humidité et d&#039;un capteur de pollution via Openhab avec Galileo sketch arduino]&lt;br /&gt;
&lt;br /&gt;
= Documents et liens annexes =&lt;br /&gt;
* Le dépôt Git se trouve [https://github.com/LaureneGuelorget/SmartCampus2014 ici]&lt;br /&gt;
* Le cahier des charges se trouve [http://air.imag.fr/index.php/SmartCampus2014/CDC ici]&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels Tutoriels maison]&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/TutoArduino Tutoriels Arduino]&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/TutoGalileo Tutoriels Galileo]&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/FicheSuivi&amp;diff=16580</id>
		<title>SmartCampus2014/FicheSuivi</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/FicheSuivi&amp;diff=16580"/>
		<updated>2014-03-28T16:33:10Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Demo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:SmartCampus-logo.png|400px|thumb|right]]&lt;br /&gt;
[[Image:SmartCampus-RICMTeam2014.jpg|400px|thumb|right|SmartCampus&#039;s Team]]&lt;br /&gt;
Encadrants : Didier Donsez et Vivien Quema &amp;lt;br&amp;gt;&lt;br /&gt;
Etudiants : (mailing list du projet : [mailto:smartcampus2014@googlegroups.com &amp;lt;smartcampus2014@googlegroups.com&amp;gt;])&lt;br /&gt;
* Nicolas Husson (chef de projet)&lt;br /&gt;
* Thomas Nunes&lt;br /&gt;
* Morgan Bidois&lt;br /&gt;
* Laurène Guelorget&lt;br /&gt;
* Simon Planès&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Les documents importants :&lt;br /&gt;
* Le dépôt Git se trouve [https://github.com/thomasNDS/SmartCampus2014 ici]&lt;br /&gt;
* Le cahier des charges se trouve [http://air.imag.fr/index.php/SmartCampus2014/CDC ici]&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/Maquette Des photos de la maquette]&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels Divers tutoriels maison], [http://air.imag.fr/index.php/SmartCampus2014/TutoArduino tutoriels Arduino] et [http://air.imag.fr/index.php/SmartCampus2014/TutoGalileo tutoriels Galileo]&lt;br /&gt;
* Le [[Media:flyer_SC.pdf | flyer]] et le [[Media:poster_SC.pdf | poster]] du projet&lt;br /&gt;
* Les [[Media:transparents_sc.pdf|slides de la présentation]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Présentation du projet =&lt;br /&gt;
Le projet a débuté le 28 janvier 2014 et va durer environ 2 mois. La page complète du projet se trouve [http://air.imag.fr/index.php/SmartCampus2014 ici] et le cahier des charges est consultable sur [http://air.imag.fr/index.php/SmartCampus2014/CDC cette page].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L’équipe est formée de 5 membres de RICM5, trois de l’option Communication Multimédia et deux de l’option Systèmes et Réseaux. Le chef de projet est Nicolas Husson.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durant ce projet innovant, nous utilisons la méthodologie Agile et le Scrum Master est Thomas Nunes. La durée d’un sprint a été déterminée à une semaine et nous avons également décidé de mettre en place des « Poker Planning ».&lt;br /&gt;
&lt;br /&gt;
= Progression du projet =&lt;br /&gt;
11 sous-projets ont été identifiés et décrits à travers ce diagramme :&lt;br /&gt;
[[File:gantt1.png | 1050px| center| thumb | Diagramme de Gantt prévisionnel]]&lt;br /&gt;
== Sprint 0 : du 28/01 au 02/02 ==&lt;br /&gt;
* compréhension du sujet&lt;br /&gt;
* recherche sur les technologies utilisables : openHAB, protocole MQTT (et ses implémentations) pour la communication M2M...&lt;br /&gt;
* premiers tutoriels : OpenHAB, mosquitto, etc. (voir le [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Mosquitto tutoriel dédié à Mosquitto])&lt;br /&gt;
* rencontres avec Didier Donsez pour préciser le cahier des charges et avec Jérôme Maisonnasse pour l&#039;accès à la fablab MJK (découpeuse laser, imprimante 3d, etc.)&lt;br /&gt;
* enquête auprès d&#039;utilisateurs potentiels (étudiants) de SmartCampus&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 1 : du 03/02 au 09/02 ==&lt;br /&gt;
[[File:Archi02.png | 450px| right| thumb | Architecture globale de SmartCampus (M : extrémité d&#039;une communication MQTT)]]&lt;br /&gt;
&#039;&#039;&#039;Tâches principales&#039;&#039;&#039;&lt;br /&gt;
* Génie Logiciel : finir l&#039;architecture du projet (1ère version)&lt;br /&gt;
** détailler le diagramme de classe&lt;br /&gt;
** diagramme contexte, use-cases, scenarii d&#039;utilisation, etc.&lt;br /&gt;
** mettre au propre les schémas&lt;br /&gt;
** finir le cahier des charges et rédiger MPI&lt;br /&gt;
&lt;br /&gt;
* Recherches et application des technologies&lt;br /&gt;
** voir si le couplage Arduino/OpenHab est possible (voir le [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Comment_se_connecter_en_SSH_.C3.A0_la_carte_Galileo tutoriel pour se connecter à la carte en SSH])&lt;br /&gt;
** faire un choix de techno : Titanium/PhoneGap en fonction de la RA&lt;br /&gt;
** petite démo de la techno choisie&lt;br /&gt;
&lt;br /&gt;
* Maquette&lt;br /&gt;
** plan papier de la maquette (nombre de bâtiments, localisation, etc.)&lt;br /&gt;
** plan SVG des pièces de base pour la découpeuse laser&lt;br /&gt;
** matériel externe (train LEGO, objets imprimante 3D, ...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tâches additionnelles&#039;&#039;&#039;&lt;br /&gt;
* Contacter CROUS, semitag, METRO pour l&#039;open data&lt;br /&gt;
* Recherche d&#039;une alternative à l&#039;arduino si il ne supporte pas openHAB (azure, Raspberry Pi)&lt;br /&gt;
* Petite démo d&#039;openHAB avec cette alternative&lt;br /&gt;
* Couplage de openHAB avec Mosquitto (voir le [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Comment_utiliser_openHAB_avec_Mosquitto_.3F tutoriel dédié])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:SmartCampusMaquette02.png | 450px| center | thumb | Plan de la maquette (3x2m)]]&lt;br /&gt;
&lt;br /&gt;
== Sprint 2 : du 10/02 au 16/02 ==&lt;br /&gt;
[[File:smart2014-prototype0.jpg | 200px| right| thumb | Premier prototype de bâtiment]]&lt;br /&gt;
*&#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** Installation d&#039;un OS sur Arduino Galileo avec une jvm et le système arduino	&lt;br /&gt;
** Openhab sur Arduino Galileo		&lt;br /&gt;
** Connexions avec des capteurs / ajout de shield arduino&lt;br /&gt;
** Mosquitto sur Arduino Galileo		&lt;br /&gt;
** Intégration du projet Smart Citizen	&lt;br /&gt;
	&lt;br /&gt;
* &#039;&#039;&#039;Serveur MQTT / http&#039;&#039;&#039;&lt;br /&gt;
** Recherche technologique (voir le tutoriel sur [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Mis_en_place_d.27une_base_de_donn.C3.A9e_mongodb_.28en_locale.29 mongodb], [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Mis_en_place_NodeJs_Mongoose Node.js Mongoose] et le [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Mis_en_place_NodeJs_Mongoose_MQTT couplage Mongoose/MQTT])&lt;br /&gt;
** Un prototype alliant serveur MQTT et HTTP	&lt;br /&gt;
** Schéma de base de donnée&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application Cliente de réalité augmentée&#039;&#039;&#039;&lt;br /&gt;
** Prototype avec lecture d’un QRcode et affichage du numéro lu	&lt;br /&gt;
** Design IHM de l’application : maquettes avec des traits tordus	&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Plans SVG d&#039;un prototype	&lt;br /&gt;
** Découpe d’un premier prototype&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 3 : du 17/02 au 23/02 ==&lt;br /&gt;
* &#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** OS sur Arduino Galileo / JVM / openHAB / Mosquitto&lt;br /&gt;
** Intégration avec le serveur&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application mobile&#039;&#039;&#039;&lt;br /&gt;
** Recherche technologique (bootstrap, map, pop-ups, plein-écran, etc.)&lt;br /&gt;
** Mise au propre sur wiki&lt;br /&gt;
** Petite démo : une map avec éléments cliquables (voir le [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Int.C3.A9grer_une_carte_Google_et_fixer_ses_limites tutoriel dédié])&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Plans de tous les bâtiments (planches de 60*40cm) --&amp;gt; Changement de la taille de la maquette&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tâches additionnelles&#039;&#039;&#039;&lt;br /&gt;
* Découpe de la moitié des bâtiments&lt;br /&gt;
* Montage des bâtiments (chercher de la colle à bois)&lt;br /&gt;
* Découpe routes, terrains, pistes cyclables&lt;br /&gt;
* Une cafetière dans la salle robotique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 4 : du 24/02 au 02/03 ==&lt;br /&gt;
* &#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** OS sur Arduino Galileo / JVM / openHAB / Mosquitto&lt;br /&gt;
** Capteurs : pression, température, humidité, NFC, leds, affichage, air quality, afficheur 7 segments, etc.&lt;br /&gt;
*** leds : chenillard, bouton poussoir&lt;br /&gt;
*** température : alerte led + speaker quand dépassement d&#039;un seuil, affichage sur 7 segments&lt;br /&gt;
*** compteur : BP + afficheur 7 segments&lt;br /&gt;
(voir les [http://air.imag.fr/index.php/SmartCampus2014/TutoArduino tutoriels dédiés])&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application mobile&#039;&#039;&#039;&lt;br /&gt;
** Finir design&lt;br /&gt;
** Présentation et validation du design (par le groupe)&lt;br /&gt;
** Petite démo : un mode plein écran + layout (menu top, barre de notifications et conteneurs)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Serveur&#039;&#039;&#039;&lt;br /&gt;
** Décision sur la méthode de remplissage de la BD&lt;br /&gt;
** Finir le serveur + README&lt;br /&gt;
** Simple interface admin SmartCampus (récupérer des données en ajax)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Refaire le plan de la maquette (changement de dimensions)&lt;br /&gt;
** Plans de tous les bâtiments (planches de 60*40cm)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Interface administrateur&#039;&#039;&#039;&lt;br /&gt;
** Design à gros grain : analyse des besoins et aspect général&lt;br /&gt;
** Recherche technologique (Ajax, template avec jade, approche modulaire (widgets), etc.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 5 : du 10/03 au 16/03 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** Sketch sur Galileo&lt;br /&gt;
** Mise en réseaux des Galileo&lt;br /&gt;
** Intégration aux autres sous-projets&lt;br /&gt;
** Capteurs + Mosquitto&lt;br /&gt;
** Capteurs de pression (tam tam en papier)&lt;br /&gt;
** Câblage électrique des Arduino&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application mobile&#039;&#039;&#039;&lt;br /&gt;
** Intégration avec le serveur : afficher des éléments&lt;br /&gt;
** Intégration avec le serveur : envoyer des éléments (crowdsourcing)&lt;br /&gt;
** Test avec GeckoView&lt;br /&gt;
** Test plus complet ChromeView&lt;br /&gt;
** Travailler le crowdsourcing&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Serveur&#039;&#039;&#039;&lt;br /&gt;
** Super admin SmartCampus : fonctionnalités (+ implémentation) et design interface&lt;br /&gt;
** Tuto pour ajouter une route personnalisée&lt;br /&gt;
** Documentation du serveur &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Plans de tous les bâtiments, qui rentrent sur des planches de 60*40cm&lt;br /&gt;
** Découpe laser de la moitié (ou plus) des bâtiments&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Interface administrateur&#039;&#039;&#039;&lt;br /&gt;
** Premier jet rudimentaire avec layouts + (système widgets)&lt;br /&gt;
** Intégration avec le serveur&lt;br /&gt;
** Ajout d’un système d’identification&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Robots&#039;&#039;&#039;&lt;br /&gt;
** Recherche techno&lt;br /&gt;
** Robots multi-langage ? (javascript, perl, C, scala, lua, ocaml, java ou autre…)&lt;br /&gt;
** Robot pour les menus du CROUS&lt;br /&gt;
** Robots pour les événements CROUS, EVE, UJF&lt;br /&gt;
** Robot pour le covoiturage : application mash-up de sites spécialisés&lt;br /&gt;
** COQP : prise de contact, étude du code&lt;br /&gt;
** Casier NFC : contact de l’équipe&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 6 : du 17/03 au 23/03 ==&lt;br /&gt;
[[Image:SmartCampus-LaserCuttedBuilding1.jpg|200px|thumb|right|Laser Cut Buildings for SmartCampus]]&lt;br /&gt;
[[Image:SmartCampus-LaserCuttedBuilding2.jpg|200px|thumb|right|Laser Cut Buildings for SmartCampus]][[Image:SmartCampus-LaserCuttedBuilding3.jpg|200px|thumb|right|Laser Cutted Building for SmartCampus]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** Recherche communication ino/python&lt;br /&gt;
** Dupliquer les OS Galileo&lt;br /&gt;
** Mise en réseaux des Galileo&lt;br /&gt;
&lt;br /&gt;
(voir les [http://air.imag.fr/index.php/SmartCampus2014/TutoGalileo tutoriels sur Galileo])&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application mobile&#039;&#039;&#039;&lt;br /&gt;
** Intégration avec le serveur&lt;br /&gt;
** Informations simple (lampadaire cassé)&lt;br /&gt;
** MAP&lt;br /&gt;
** Intégrer les différents éléments : applis, map, covoiturage, etc.&lt;br /&gt;
** Test avec GeckoView/ChromeView&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Serveur&#039;&#039;&#039;&lt;br /&gt;
** Charge la BD de mock data&lt;br /&gt;
** Super admin SmartCampus&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Montage des maquettes&lt;br /&gt;
** Découpe du terrain, routes, tram, etc.&lt;br /&gt;
** Disposer les QRcodes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Robots&#039;&#039;&#039;&lt;br /&gt;
** Robots pour EVE&lt;br /&gt;
** Intégration COQP&lt;br /&gt;
** Intégration Casier NFC (contact de l’équipe pour accès à leur BD, lancer le code sur nos machine)&lt;br /&gt;
** Robot pour la TAG/metro&lt;br /&gt;
** Horaires pour les arrêts de tram&lt;br /&gt;
** Événement (travaux, greves)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 7 : du 24/03 au 27/03 ==&lt;br /&gt;
* &#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** Dupliquer les OS Galileo&lt;br /&gt;
** Mettre à jour l&#039;interface d&#039;OpenHAB&lt;br /&gt;
** Préparer la démo (capteurs, OpenHAB, etc.)&lt;br /&gt;
&lt;br /&gt;
(voir les [http://air.imag.fr/index.php/SmartCampus2014/TutoGalileo tutoriels sur Galileo])&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application mobile&#039;&#039;&#039;&lt;br /&gt;
** Test de l&#039;application sur mobile pour la démo&lt;br /&gt;
** Retouches&lt;br /&gt;
** Intégrer les horaires de tram&lt;br /&gt;
** Mise à jour des descriptions&lt;br /&gt;
** Super admin SmartCampus (ajout item OpenHAB)&lt;br /&gt;
** Mise en production sur le cloud&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Disposer les QRcodes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Interface administrateur&#039;&#039;&#039;&lt;br /&gt;
** Terminer l’application&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Autres&#039;&#039;&#039;&lt;br /&gt;
** Casier NFC (projet Walid et Lotfi)&lt;br /&gt;
** Finir les READMEs et nettoyer le dépot&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Soutenance&#039;&#039;&#039;&lt;br /&gt;
** Diapos&lt;br /&gt;
** Flyer + poster&lt;br /&gt;
** Finir wiki Air&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Galerie =&lt;br /&gt;
[[Image:SmartCampus2014-001.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-002.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-003.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-004.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-005.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-006.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-007.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-008.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-009.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-010.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-011.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-012.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-013.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-014.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-015.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
&lt;br /&gt;
= Demo =&lt;br /&gt;
[[http://youtu.be/yzhQsh858uI Allumage+Extinction Leds via openhab avec Galileo sketch arduino]]&lt;br /&gt;
[[https://www.youtube.com/watch?v=jeICG9IgD6E Visualisation de donnnées d&#039;un capteur d&#039;humidité et d&#039;un capteur de pollution via Openhab avec Galileo sketch arduino]]&lt;br /&gt;
&lt;br /&gt;
= Documents et liens annexes =&lt;br /&gt;
* Le dépôt Git se trouve [https://github.com/LaureneGuelorget/SmartCampus2014 ici]&lt;br /&gt;
* Le cahier des charges se trouve [http://air.imag.fr/index.php/SmartCampus2014/CDC ici]&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels Tutoriels maison]&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/TutoArduino Tutoriels Arduino]&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/TutoGalileo Tutoriels Galileo]&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=16579</id>
		<title>Projet biometrie-2013-2014</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=16579"/>
		<updated>2014-03-28T16:30:14Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Serrure vocale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projet biométrie 2013-2014&lt;br /&gt;
= Présentation=&lt;br /&gt;
==Sujet==&lt;br /&gt;
Application android de serrure vocale et faciale.&lt;br /&gt;
&lt;br /&gt;
Dépot git [https://github.com/thomasNDS/biometry-lock-facial-and-vocal]&lt;br /&gt;
&lt;br /&gt;
==Technologies ==&lt;br /&gt;
* Android&lt;br /&gt;
* OpenCV&lt;br /&gt;
* Lium&lt;br /&gt;
* Eclipse&lt;br /&gt;
* git&lt;br /&gt;
=Sous projets =&lt;br /&gt;
== IHM ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Walid&lt;br /&gt;
* Elisa&lt;br /&gt;
===Sujet ===&lt;br /&gt;
* Acquisition et comparaison de visages et voix avec la base de données&lt;br /&gt;
=== Technologies === &lt;br /&gt;
* Utilisation de [http://developer.android.com/tools/sdk/eclipse-adt.html ADT]&lt;br /&gt;
=== Etapes ===&lt;br /&gt;
==== Interface générale ====&lt;br /&gt;
* Création d&#039;une interface d&#039;accueil (choix enregistrement ou identification)&lt;br /&gt;
==== Acquisition des données ====&lt;br /&gt;
* Interface globale pour l&#039;acquisition de visage et de voix&lt;br /&gt;
** Ovale fixe sur l&#039;écran pour centrer la tête de l&#039;utilisateur&lt;br /&gt;
** Texte prédéfini à lire pendant l&#039;acquisition faciale&lt;br /&gt;
** Prise de photos en rafale pendant la lecture&lt;br /&gt;
* Enregistrement dans la base de données de l&#039;image et du fichier son&lt;br /&gt;
==== Identification ==== &lt;br /&gt;
* Interface de sélection de profil&lt;br /&gt;
** Nom et Prénom&lt;br /&gt;
* Bouton de déconnexion&lt;br /&gt;
&lt;br /&gt;
== Serrure vocale ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Nicolas&lt;br /&gt;
* Morgan&lt;br /&gt;
* Lotfi&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure vocale : &lt;br /&gt;
* Enrôlement du locuteur&lt;br /&gt;
* Identification du locuteur&lt;br /&gt;
=== Technologies === &lt;br /&gt;
* Utilisation de [http://www-lium.univ-lemans.fr/diarization/doku.php/welcome LIUM speaker]&lt;br /&gt;
=== Etapes ===&lt;br /&gt;
==== Enrôlement du locuteur ====&lt;br /&gt;
* Enregistrement de la parole du locuteur (création d&#039;un fichier wav contenant la parole du locuteur)&lt;br /&gt;
* Transcription du fichier wav en mfcc [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
* Puis [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
==== Identification du locuteur ==== &lt;br /&gt;
* Enregistrement de la parole du locuteur (récupération d&#039;un fichier wav)&lt;br /&gt;
* Transcription du fichier wav en seg [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
* Identification du locuteur [http://www-lium.univ-lemans.fr/diarization/doku.php/speaker_identification lienLyum]&lt;br /&gt;
&lt;br /&gt;
== Reconnaissance de visages ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Rebecca&lt;br /&gt;
* Thomas&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure faciale :&lt;br /&gt;
* Ajout d&#039;un individu dans la base de donnée&lt;br /&gt;
* Authentification d&#039;un individus&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
* Reconnaissance de visage avec OpenCV&lt;br /&gt;
&lt;br /&gt;
=== Tâches ===&lt;br /&gt;
*Identification de la personne (authentification, identif sans connaissance, classe de rejet)&lt;br /&gt;
*BD : avec tous les visages (plusieurs photos par personne (10 avec la même position))&lt;br /&gt;
*Authentification&lt;br /&gt;
*Présentation de la personne, choix entre plusieurs profils, ok ou rejet&lt;br /&gt;
*2 phases : apprentissage et évaluation&lt;br /&gt;
*Algo : entrainement des modèles et évaluation&lt;br /&gt;
*Capture du visage + extraction des points d’intérêt (openCV)&lt;br /&gt;
*Tester rejet avec utilisateur sans profil&lt;br /&gt;
*Verifier centrage du visage&lt;br /&gt;
===Etapes===&lt;br /&gt;
*Regarder projet de l’an passé&lt;br /&gt;
*Tuto de openCV/Android&lt;br /&gt;
*Commencer application : &lt;br /&gt;
*Saisie d’image (prise photo + BD)&lt;br /&gt;
*Points d’intérêt (openCV ?)&lt;br /&gt;
*Authentification (entrainement et évaluation)&lt;br /&gt;
*Intégration avec IHM&lt;br /&gt;
*Multi-image (si simple)&lt;br /&gt;
*Identification avec rejet&lt;br /&gt;
*Identification sans rejet&lt;br /&gt;
&lt;br /&gt;
===Tutoriel: installation du NDK et configuration avec Eclipse ===&lt;br /&gt;
* Téléchargement du NDK [http://developer.android.com/tools/sdk/ndk/index.html#Installing]&lt;br /&gt;
* Extraire le dossier&lt;br /&gt;
* Dans Eclipse : Window &amp;gt; Preferences &amp;gt; Android &amp;gt; NDK coller le path du lien vers le dossier d&#039;installation&lt;br /&gt;
* Dans le projet : clic droit sur le projet &amp;gt; project properties &amp;gt; C/C++ Build &amp;gt; Tool Chain Editor et selectionné Android Builder en tant que builder.&lt;br /&gt;
* Tuto pour installer OpenCV [http://www.seneschal.fr/index.php/recherches/84-installation-android-et-opencv-pour-android]&lt;br /&gt;
&lt;br /&gt;
=Projets des années passées =&lt;br /&gt;
* Reconnaissance faciale [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_RECONNAISSANCE_FACIALE]&lt;br /&gt;
* Reconnaissance de signatures [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_SIGNATURES]&lt;br /&gt;
&lt;br /&gt;
=Avancement=&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
* Constitution des groupes&lt;br /&gt;
* Prise en main du SDK android&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK et connexion nos téléphones&lt;br /&gt;
* Installation et configuration du NDK android&lt;br /&gt;
* Installation de la librairie OpenCV pour android&lt;br /&gt;
* Etude des projets des années passées&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK &lt;br /&gt;
* Installation de [http://developer.android.com/tools/help/adb.html adb]&lt;br /&gt;
* Connexion des téléphones via adb&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 3==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Configuration du système de gestion de version&lt;br /&gt;
* Premiers tests avec openCV&lt;br /&gt;
* Enregistrement d&#039;images dans l&#039;application en utilisant l&#039;appareil photo&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Téléchargement et pris en main de la librarie LIUM&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 4==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Recherche de projets similaires&lt;br /&gt;
* Etude de l&#039;existant&lt;br /&gt;
* Test de l&#039;application utilisant la comparaison de scènes&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Réalisation de scripts shell permettant la reconnaissance vocale&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 5==&lt;br /&gt;
&lt;br /&gt;
===Interruption pédagogique===&lt;br /&gt;
&lt;br /&gt;
==Semaine 6==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Premier test de l&#039;application utilisant HAAR&lt;br /&gt;
* Correction des bugs&lt;br /&gt;
* Configuration des environnements de développement&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Import de la librairie LIUM diarization dans android&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 7==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Finalisation de l&#039;application &lt;br /&gt;
* Documentation sur les algorithmes&lt;br /&gt;
* Intégration avec les autres parties&lt;br /&gt;
* Préparation de la soutenance&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Usage de la librairie jar LIUM pour android -&amp;gt; sans succès.&lt;br /&gt;
* Librairie LIUM non adapté à android.&lt;br /&gt;
* Code android pour concaténer les .wav&lt;br /&gt;
* Réalisation des slides&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=16578</id>
		<title>Projet biometrie-2013-2014</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=16578"/>
		<updated>2014-03-28T16:29:40Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Serrure vocale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projet biométrie 2013-2014&lt;br /&gt;
= Présentation=&lt;br /&gt;
==Sujet==&lt;br /&gt;
Application android de serrure vocale et faciale.&lt;br /&gt;
&lt;br /&gt;
Dépot git [https://github.com/thomasNDS/biometry-lock-facial-and-vocal]&lt;br /&gt;
&lt;br /&gt;
==Technologies ==&lt;br /&gt;
* Android&lt;br /&gt;
* OpenCV&lt;br /&gt;
* Lium&lt;br /&gt;
* Eclipse&lt;br /&gt;
* git&lt;br /&gt;
=Sous projets =&lt;br /&gt;
== IHM ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Walid&lt;br /&gt;
* Elisa&lt;br /&gt;
===Sujet ===&lt;br /&gt;
* Acquisition et comparaison de visages et voix avec la base de données&lt;br /&gt;
=== Technologies === &lt;br /&gt;
* Utilisation de [http://developer.android.com/tools/sdk/eclipse-adt.html ADT]&lt;br /&gt;
=== Etapes ===&lt;br /&gt;
==== Interface générale ====&lt;br /&gt;
* Création d&#039;une interface d&#039;accueil (choix enregistrement ou identification)&lt;br /&gt;
==== Acquisition des données ====&lt;br /&gt;
* Interface globale pour l&#039;acquisition de visage et de voix&lt;br /&gt;
** Ovale fixe sur l&#039;écran pour centrer la tête de l&#039;utilisateur&lt;br /&gt;
** Texte prédéfini à lire pendant l&#039;acquisition faciale&lt;br /&gt;
** Prise de photos en rafale pendant la lecture&lt;br /&gt;
* Enregistrement dans la base de données de l&#039;image et du fichier son&lt;br /&gt;
==== Identification ==== &lt;br /&gt;
* Interface de sélection de profil&lt;br /&gt;
** Nom et Prénom&lt;br /&gt;
* Bouton de déconnexion&lt;br /&gt;
&lt;br /&gt;
== Serrure vocale ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Nicolas&lt;br /&gt;
* Morgan&lt;br /&gt;
* Lotfi&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure vocale : &lt;br /&gt;
* Enrôlement du locuteur&lt;br /&gt;
* Identification du locuteur&lt;br /&gt;
=== Technologies === &lt;br /&gt;
* Utilisation de [http://www-lium.univ-lemans.fr/diarization/doku.php/welcome LIUM speaker]&lt;br /&gt;
=== Etapes ===&lt;br /&gt;
==== Enrôlement du locuteur ====&lt;br /&gt;
* Enregistrement de la parole du locuteur (création d&#039;un fichier wav contenant la parole du locuteur)&lt;br /&gt;
* Transcription du fichier wav en mfcc [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
* Puis [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
==== Identification du locuteur ==== &lt;br /&gt;
* Enregistrement de la parole du locuteur (récupération d&#039;un fichier wav)&lt;br /&gt;
* Transcription du fichier wav en seg [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
* Identification du locuteur [http://www-lium.univ-lemans.fr/diarization/doku.php/speaker_identification lienLyum]&lt;br /&gt;
&lt;br /&gt;
== Reconnaissance de visages ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Rebecca&lt;br /&gt;
* Thomas&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure faciale :&lt;br /&gt;
* Ajout d&#039;un individu dans la base de donnée&lt;br /&gt;
* Authentification d&#039;un individus&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
* Reconnaissance de visage avec OpenCV&lt;br /&gt;
&lt;br /&gt;
=== Tâches ===&lt;br /&gt;
*Identification de la personne (authentification, identif sans connaissance, classe de rejet)&lt;br /&gt;
*BD : avec tous les visages (plusieurs photos par personne (10 avec la même position))&lt;br /&gt;
*Authentification&lt;br /&gt;
*Présentation de la personne, choix entre plusieurs profils, ok ou rejet&lt;br /&gt;
*2 phases : apprentissage et évaluation&lt;br /&gt;
*Algo : entrainement des modèles et évaluation&lt;br /&gt;
*Capture du visage + extraction des points d’intérêt (openCV)&lt;br /&gt;
*Tester rejet avec utilisateur sans profil&lt;br /&gt;
*Verifier centrage du visage&lt;br /&gt;
===Etapes===&lt;br /&gt;
*Regarder projet de l’an passé&lt;br /&gt;
*Tuto de openCV/Android&lt;br /&gt;
*Commencer application : &lt;br /&gt;
*Saisie d’image (prise photo + BD)&lt;br /&gt;
*Points d’intérêt (openCV ?)&lt;br /&gt;
*Authentification (entrainement et évaluation)&lt;br /&gt;
*Intégration avec IHM&lt;br /&gt;
*Multi-image (si simple)&lt;br /&gt;
*Identification avec rejet&lt;br /&gt;
*Identification sans rejet&lt;br /&gt;
&lt;br /&gt;
===Tutoriel: installation du NDK et configuration avec Eclipse ===&lt;br /&gt;
* Téléchargement du NDK [http://developer.android.com/tools/sdk/ndk/index.html#Installing]&lt;br /&gt;
* Extraire le dossier&lt;br /&gt;
* Dans Eclipse : Window &amp;gt; Preferences &amp;gt; Android &amp;gt; NDK coller le path du lien vers le dossier d&#039;installation&lt;br /&gt;
* Dans le projet : clic droit sur le projet &amp;gt; project properties &amp;gt; C/C++ Build &amp;gt; Tool Chain Editor et selectionné Android Builder en tant que builder.&lt;br /&gt;
* Tuto pour installer OpenCV [http://www.seneschal.fr/index.php/recherches/84-installation-android-et-opencv-pour-android]&lt;br /&gt;
&lt;br /&gt;
=Projets des années passées =&lt;br /&gt;
* Reconnaissance faciale [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_RECONNAISSANCE_FACIALE]&lt;br /&gt;
* Reconnaissance de signatures [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_SIGNATURES]&lt;br /&gt;
&lt;br /&gt;
=Avancement=&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
* Constitution des groupes&lt;br /&gt;
* Prise en main du SDK android&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK et connexion nos téléphones&lt;br /&gt;
* Installation et configuration du NDK android&lt;br /&gt;
* Installation de la librairie OpenCV pour android&lt;br /&gt;
* Etude des projets des années passées&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK &lt;br /&gt;
* Installation de [http://developer.android.com/tools/help/adb.html adb]&lt;br /&gt;
* Connexion des téléphones via adb&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 3==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Configuration du système de gestion de version&lt;br /&gt;
* Premiers tests avec openCV&lt;br /&gt;
* Enregistrement d&#039;images dans l&#039;application en utilisant l&#039;appareil photo&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Téléchargement et pris en main de la librarie LIUM&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 4==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Recherche de projets similaires&lt;br /&gt;
* Etude de l&#039;existant&lt;br /&gt;
* Test de l&#039;application utilisant la comparaison de scènes&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Réalisation de scripts shell permettant la reconnaissance vocale&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 5==&lt;br /&gt;
&lt;br /&gt;
===Interruption pédagogique===&lt;br /&gt;
&lt;br /&gt;
==Semaine 6==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Premier test de l&#039;application utilisant HAAR&lt;br /&gt;
* Correction des bugs&lt;br /&gt;
* Configuration des environnements de développement&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Import de la librairie LIUM diarization dans android&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 7==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Finalisation de l&#039;application &lt;br /&gt;
* Documentation sur les algorithmes&lt;br /&gt;
* Intégration avec les autres parties&lt;br /&gt;
* Préparation de la soutenance&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Usage de la librairie jar LIUM pour android -&amp;gt; sans succès.&lt;br /&gt;
* Librairie LIUM non adapté à android.&lt;br /&gt;
* Réalisation des slides&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=16577</id>
		<title>Projet biometrie-2013-2014</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=16577"/>
		<updated>2014-03-28T16:23:12Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Serrure vocale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projet biométrie 2013-2014&lt;br /&gt;
= Présentation=&lt;br /&gt;
==Sujet==&lt;br /&gt;
Application android de serrure vocale et faciale.&lt;br /&gt;
&lt;br /&gt;
Dépot git [https://github.com/thomasNDS/biometry-lock-facial-and-vocal]&lt;br /&gt;
&lt;br /&gt;
==Technologies ==&lt;br /&gt;
* Android&lt;br /&gt;
* OpenCV&lt;br /&gt;
* Lium&lt;br /&gt;
* Eclipse&lt;br /&gt;
* git&lt;br /&gt;
=Sous projets =&lt;br /&gt;
== IHM ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Walid&lt;br /&gt;
* Elisa&lt;br /&gt;
===Sujet ===&lt;br /&gt;
* Acquisition et comparaison de visages et voix avec la base de données&lt;br /&gt;
=== Technologies === &lt;br /&gt;
* Utilisation de [http://developer.android.com/tools/sdk/eclipse-adt.html ADT]&lt;br /&gt;
=== Etapes ===&lt;br /&gt;
==== Interface générale ====&lt;br /&gt;
* Création d&#039;une interface d&#039;accueil (choix enregistrement ou identification)&lt;br /&gt;
==== Acquisition des données ====&lt;br /&gt;
* Interface globale pour l&#039;acquisition de visage et de voix&lt;br /&gt;
** Ovale fixe sur l&#039;écran pour centrer la tête de l&#039;utilisateur&lt;br /&gt;
** Texte prédéfini à lire pendant l&#039;acquisition faciale&lt;br /&gt;
** Prise de photos en rafale pendant la lecture&lt;br /&gt;
* Enregistrement dans la base de données de l&#039;image et du fichier son&lt;br /&gt;
==== Identification ==== &lt;br /&gt;
* Interface de sélection de profil&lt;br /&gt;
** Nom et Prénom&lt;br /&gt;
* Bouton de déconnexion&lt;br /&gt;
&lt;br /&gt;
== Serrure vocale ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Nicolas&lt;br /&gt;
* Morgan&lt;br /&gt;
* Lotfi&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure vocale : &lt;br /&gt;
* Enrôlement du locuteur&lt;br /&gt;
* Identification du locuteur&lt;br /&gt;
=== Technologies === &lt;br /&gt;
* Utilisation de [http://www-lium.univ-lemans.fr/diarization/doku.php/welcome LIUM speaker]&lt;br /&gt;
=== Etapes ===&lt;br /&gt;
==== Enrôlement du locuteur ====&lt;br /&gt;
* Enregistrement de la parole du locuteur (création d&#039;un fichier wav contenant la parole du locuteur)&lt;br /&gt;
* Transcription du fichier wav en mfcc [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
* Puis [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
==== Identification du locuteur ==== &lt;br /&gt;
* Enregistrement de la parole du locuteur (récupération d&#039;un fichier wav)&lt;br /&gt;
* Transcription du fichier wav en seg [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
* Identification du locuteur [http://www-lium.univ-lemans.fr/diarization/doku.php/speaker_identification lienLyum]&lt;br /&gt;
&lt;br /&gt;
== Reconnaissance de visages ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Rebecca&lt;br /&gt;
* Thomas&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure faciale :&lt;br /&gt;
* Ajout d&#039;un individu dans la base de donnée&lt;br /&gt;
* Authentification d&#039;un individus&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
* Reconnaissance de visage avec OpenCV&lt;br /&gt;
&lt;br /&gt;
=== Tâches ===&lt;br /&gt;
*Identification de la personne (authentification, identif sans connaissance, classe de rejet)&lt;br /&gt;
*BD : avec tous les visages (plusieurs photos par personne (10 avec la même position))&lt;br /&gt;
*Authentification&lt;br /&gt;
*Présentation de la personne, choix entre plusieurs profils, ok ou rejet&lt;br /&gt;
*2 phases : apprentissage et évaluation&lt;br /&gt;
*Algo : entrainement des modèles et évaluation&lt;br /&gt;
*Capture du visage + extraction des points d’intérêt (openCV)&lt;br /&gt;
*Tester rejet avec utilisateur sans profil&lt;br /&gt;
*Verifier centrage du visage&lt;br /&gt;
===Etapes===&lt;br /&gt;
*Regarder projet de l’an passé&lt;br /&gt;
*Tuto de openCV/Android&lt;br /&gt;
*Commencer application : &lt;br /&gt;
*Saisie d’image (prise photo + BD)&lt;br /&gt;
*Points d’intérêt (openCV ?)&lt;br /&gt;
*Authentification (entrainement et évaluation)&lt;br /&gt;
*Intégration avec IHM&lt;br /&gt;
*Multi-image (si simple)&lt;br /&gt;
*Identification avec rejet&lt;br /&gt;
*Identification sans rejet&lt;br /&gt;
&lt;br /&gt;
===Tutoriel: installation du NDK et configuration avec Eclipse ===&lt;br /&gt;
* Téléchargement du NDK [http://developer.android.com/tools/sdk/ndk/index.html#Installing]&lt;br /&gt;
* Extraire le dossier&lt;br /&gt;
* Dans Eclipse : Window &amp;gt; Preferences &amp;gt; Android &amp;gt; NDK coller le path du lien vers le dossier d&#039;installation&lt;br /&gt;
* Dans le projet : clic droit sur le projet &amp;gt; project properties &amp;gt; C/C++ Build &amp;gt; Tool Chain Editor et selectionné Android Builder en tant que builder.&lt;br /&gt;
* Tuto pour installer OpenCV [http://www.seneschal.fr/index.php/recherches/84-installation-android-et-opencv-pour-android]&lt;br /&gt;
&lt;br /&gt;
=Projets des années passées =&lt;br /&gt;
* Reconnaissance faciale [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_RECONNAISSANCE_FACIALE]&lt;br /&gt;
* Reconnaissance de signatures [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_SIGNATURES]&lt;br /&gt;
&lt;br /&gt;
=Avancement=&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
* Constitution des groupes&lt;br /&gt;
* Prise en main du SDK android&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK et connexion nos téléphones&lt;br /&gt;
* Installation et configuration du NDK android&lt;br /&gt;
* Installation de la librairie OpenCV pour android&lt;br /&gt;
* Etude des projets des années passées&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK &lt;br /&gt;
* Installation de [http://developer.android.com/tools/help/adb.html adb]&lt;br /&gt;
* Connexion des téléphones via adb&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 3==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Configuration du système de gestion de version&lt;br /&gt;
* Premiers tests avec openCV&lt;br /&gt;
* Enregistrement d&#039;images dans l&#039;application en utilisant l&#039;appareil photo&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Téléchargement et pris en main de la librarie LIUM&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 4==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Recherche de projets similaires&lt;br /&gt;
* Etude de l&#039;existant&lt;br /&gt;
* Test de l&#039;application utilisant la comparaison de scènes&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Réalisation de scripts shell permettant la reconnaissance vocale&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 5==&lt;br /&gt;
&lt;br /&gt;
===Interruption pédagogique===&lt;br /&gt;
&lt;br /&gt;
==Semaine 6==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Premier test de l&#039;application utilisant HAAR&lt;br /&gt;
* Correction des bugs&lt;br /&gt;
* Configuration des environnements de développement&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 7==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Finalisation de l&#039;application &lt;br /&gt;
* Documentation sur les algorithmes&lt;br /&gt;
* Intégration avec les autres parties&lt;br /&gt;
* Préparation de la soutenance&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Usage de la librairie jar LIUM pour android -&amp;gt; sans succès.&lt;br /&gt;
* Librairie LIUM non adapté à android.&lt;br /&gt;
* Réalisation des slides&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=16576</id>
		<title>Projet biometrie-2013-2014</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=16576"/>
		<updated>2014-03-28T16:20:34Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Serrure vocale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projet biométrie 2013-2014&lt;br /&gt;
= Présentation=&lt;br /&gt;
==Sujet==&lt;br /&gt;
Application android de serrure vocale et faciale.&lt;br /&gt;
&lt;br /&gt;
Dépot git [https://github.com/thomasNDS/biometry-lock-facial-and-vocal]&lt;br /&gt;
&lt;br /&gt;
==Technologies ==&lt;br /&gt;
* Android&lt;br /&gt;
* OpenCV&lt;br /&gt;
* Lium&lt;br /&gt;
* Eclipse&lt;br /&gt;
* git&lt;br /&gt;
=Sous projets =&lt;br /&gt;
== IHM ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Walid&lt;br /&gt;
* Elisa&lt;br /&gt;
===Sujet ===&lt;br /&gt;
* Acquisition et comparaison de visages et voix avec la base de données&lt;br /&gt;
=== Technologies === &lt;br /&gt;
* Utilisation de [http://developer.android.com/tools/sdk/eclipse-adt.html ADT]&lt;br /&gt;
=== Etapes ===&lt;br /&gt;
==== Interface générale ====&lt;br /&gt;
* Création d&#039;une interface d&#039;accueil (choix enregistrement ou identification)&lt;br /&gt;
==== Acquisition des données ====&lt;br /&gt;
* Interface globale pour l&#039;acquisition de visage et de voix&lt;br /&gt;
** Ovale fixe sur l&#039;écran pour centrer la tête de l&#039;utilisateur&lt;br /&gt;
** Texte prédéfini à lire pendant l&#039;acquisition faciale&lt;br /&gt;
** Prise de photos en rafale pendant la lecture&lt;br /&gt;
* Enregistrement dans la base de données de l&#039;image et du fichier son&lt;br /&gt;
==== Identification ==== &lt;br /&gt;
* Interface de sélection de profil&lt;br /&gt;
** Nom et Prénom&lt;br /&gt;
* Bouton de déconnexion&lt;br /&gt;
&lt;br /&gt;
== Serrure vocale ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Nicolas&lt;br /&gt;
* Morgan&lt;br /&gt;
* Lotfi&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure vocale : &lt;br /&gt;
* Enrôlement du locuteur&lt;br /&gt;
* Identification du locuteur&lt;br /&gt;
=== Technologies === &lt;br /&gt;
* Utilisation de [http://www-lium.univ-lemans.fr/diarization/doku.php/welcome LIUM speaker]&lt;br /&gt;
=== Etapes ===&lt;br /&gt;
==== Enrôlement du locuteur ====&lt;br /&gt;
* Enregistrement de la parole du locuteur (création d&#039;un fichier wav contenant la parole du locuteur)&lt;br /&gt;
* Transcription du fichier wav en mfcc [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
* Puis [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
==== Identification du locuteur ==== &lt;br /&gt;
* Enregistrement de la parole du locuteur (récupération d&#039;un fichier wav)&lt;br /&gt;
* Transcription du fichier wav en seg [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
* Identification du locuteur [http://www-lium.univ-lemans.fr/diarization/doku.php/speaker_identification lienLyum]&lt;br /&gt;
&lt;br /&gt;
== Reconnaissance de visages ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Rebecca&lt;br /&gt;
* Thomas&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure faciale :&lt;br /&gt;
* Ajout d&#039;un individu dans la base de donnée&lt;br /&gt;
* Authentification d&#039;un individus&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
* Reconnaissance de visage avec OpenCV&lt;br /&gt;
&lt;br /&gt;
=== Tâches ===&lt;br /&gt;
*Identification de la personne (authentification, identif sans connaissance, classe de rejet)&lt;br /&gt;
*BD : avec tous les visages (plusieurs photos par personne (10 avec la même position))&lt;br /&gt;
*Authentification&lt;br /&gt;
*Présentation de la personne, choix entre plusieurs profils, ok ou rejet&lt;br /&gt;
*2 phases : apprentissage et évaluation&lt;br /&gt;
*Algo : entrainement des modèles et évaluation&lt;br /&gt;
*Capture du visage + extraction des points d’intérêt (openCV)&lt;br /&gt;
*Tester rejet avec utilisateur sans profil&lt;br /&gt;
*Verifier centrage du visage&lt;br /&gt;
===Etapes===&lt;br /&gt;
*Regarder projet de l’an passé&lt;br /&gt;
*Tuto de openCV/Android&lt;br /&gt;
*Commencer application : &lt;br /&gt;
*Saisie d’image (prise photo + BD)&lt;br /&gt;
*Points d’intérêt (openCV ?)&lt;br /&gt;
*Authentification (entrainement et évaluation)&lt;br /&gt;
*Intégration avec IHM&lt;br /&gt;
*Multi-image (si simple)&lt;br /&gt;
*Identification avec rejet&lt;br /&gt;
*Identification sans rejet&lt;br /&gt;
&lt;br /&gt;
===Tutoriel: installation du NDK et configuration avec Eclipse ===&lt;br /&gt;
* Téléchargement du NDK [http://developer.android.com/tools/sdk/ndk/index.html#Installing]&lt;br /&gt;
* Extraire le dossier&lt;br /&gt;
* Dans Eclipse : Window &amp;gt; Preferences &amp;gt; Android &amp;gt; NDK coller le path du lien vers le dossier d&#039;installation&lt;br /&gt;
* Dans le projet : clic droit sur le projet &amp;gt; project properties &amp;gt; C/C++ Build &amp;gt; Tool Chain Editor et selectionné Android Builder en tant que builder.&lt;br /&gt;
* Tuto pour installer OpenCV [http://www.seneschal.fr/index.php/recherches/84-installation-android-et-opencv-pour-android]&lt;br /&gt;
&lt;br /&gt;
=Projets des années passées =&lt;br /&gt;
* Reconnaissance faciale [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_RECONNAISSANCE_FACIALE]&lt;br /&gt;
* Reconnaissance de signatures [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_SIGNATURES]&lt;br /&gt;
&lt;br /&gt;
=Avancement=&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
* Constitution des groupes&lt;br /&gt;
* Prise en main du SDK android&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK et connexion nos téléphones&lt;br /&gt;
* Installation et configuration du NDK android&lt;br /&gt;
* Installation de la librairie OpenCV pour android&lt;br /&gt;
* Etude des projets des années passées&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK &lt;br /&gt;
* Installation de [http://developer.android.com/tools/help/adb.html adb]&lt;br /&gt;
* Connexion des téléphones via adb&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 3==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Configuration du système de gestion de version&lt;br /&gt;
* Premiers tests avec openCV&lt;br /&gt;
* Enregistrement d&#039;images dans l&#039;application en utilisant l&#039;appareil photo&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Téléchargement et pris en main de la librarie LIUM&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 4==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Recherche de projets similaires&lt;br /&gt;
* Etude de l&#039;existant&lt;br /&gt;
* Test de l&#039;application utilisant la comparaison de scènes&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 5==&lt;br /&gt;
&lt;br /&gt;
===Interruption pédagogique===&lt;br /&gt;
&lt;br /&gt;
==Semaine 6==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Premier test de l&#039;application utilisant HAAR&lt;br /&gt;
* Correction des bugs&lt;br /&gt;
* Configuration des environnements de développement&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 7==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Finalisation de l&#039;application &lt;br /&gt;
* Documentation sur les algorithmes&lt;br /&gt;
* Intégration avec les autres parties&lt;br /&gt;
* Préparation de la soutenance&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Usage de la librairie jar LIUM pour android -&amp;gt; sans succès.&lt;br /&gt;
* Librairie LIUM non adapté à android.&lt;br /&gt;
* Réalisation des slides&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=16575</id>
		<title>Projet biometrie-2013-2014</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=16575"/>
		<updated>2014-03-28T16:18:35Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Serrure vocale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projet biométrie 2013-2014&lt;br /&gt;
= Présentation=&lt;br /&gt;
==Sujet==&lt;br /&gt;
Application android de serrure vocale et faciale.&lt;br /&gt;
&lt;br /&gt;
Dépot git [https://github.com/thomasNDS/biometry-lock-facial-and-vocal]&lt;br /&gt;
&lt;br /&gt;
==Technologies ==&lt;br /&gt;
* Android&lt;br /&gt;
* OpenCV&lt;br /&gt;
* Lium&lt;br /&gt;
* Eclipse&lt;br /&gt;
* git&lt;br /&gt;
=Sous projets =&lt;br /&gt;
== IHM ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Walid&lt;br /&gt;
* Elisa&lt;br /&gt;
===Sujet ===&lt;br /&gt;
* Acquisition et comparaison de visages et voix avec la base de données&lt;br /&gt;
=== Technologies === &lt;br /&gt;
* Utilisation de [http://developer.android.com/tools/sdk/eclipse-adt.html ADT]&lt;br /&gt;
=== Etapes ===&lt;br /&gt;
==== Interface générale ====&lt;br /&gt;
* Création d&#039;une interface d&#039;accueil (choix enregistrement ou identification)&lt;br /&gt;
==== Acquisition des données ====&lt;br /&gt;
* Interface globale pour l&#039;acquisition de visage et de voix&lt;br /&gt;
** Ovale fixe sur l&#039;écran pour centrer la tête de l&#039;utilisateur&lt;br /&gt;
** Texte prédéfini à lire pendant l&#039;acquisition faciale&lt;br /&gt;
** Prise de photos en rafale pendant la lecture&lt;br /&gt;
* Enregistrement dans la base de données de l&#039;image et du fichier son&lt;br /&gt;
==== Identification ==== &lt;br /&gt;
* Interface de sélection de profil&lt;br /&gt;
** Nom et Prénom&lt;br /&gt;
* Bouton de déconnexion&lt;br /&gt;
&lt;br /&gt;
== Serrure vocale ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Nicolas&lt;br /&gt;
* Morgan&lt;br /&gt;
* Lotfi&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure vocale : &lt;br /&gt;
* Enrôlement du locuteur&lt;br /&gt;
* Identification du locuteur&lt;br /&gt;
=== Technologies === &lt;br /&gt;
* Utilisation de [http://www-lium.univ-lemans.fr/diarization/doku.php/welcome LIUM speaker]&lt;br /&gt;
=== Etapes ===&lt;br /&gt;
==== Enrôlement du locuteur ====&lt;br /&gt;
* Enregistrement de la parole du locuteur (création d&#039;un fichier wav contenant la parole du locuteur)&lt;br /&gt;
* Transcription du fichier wav en mfcc [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
* Puis [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
==== Identification du locuteur ==== &lt;br /&gt;
* Enregistrement de la parole du locuteur (récupération d&#039;un fichier wav)&lt;br /&gt;
* Transcription du fichier wav en seg [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
* Identification du locuteur [http://www-lium.univ-lemans.fr/diarization/doku.php/speaker_identification lienLyum]&lt;br /&gt;
&lt;br /&gt;
== Reconnaissance de visages ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Rebecca&lt;br /&gt;
* Thomas&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure faciale :&lt;br /&gt;
* Ajout d&#039;un individu dans la base de donnée&lt;br /&gt;
* Authentification d&#039;un individus&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
* Reconnaissance de visage avec OpenCV&lt;br /&gt;
&lt;br /&gt;
=== Tâches ===&lt;br /&gt;
*Identification de la personne (authentification, identif sans connaissance, classe de rejet)&lt;br /&gt;
*BD : avec tous les visages (plusieurs photos par personne (10 avec la même position))&lt;br /&gt;
*Authentification&lt;br /&gt;
*Présentation de la personne, choix entre plusieurs profils, ok ou rejet&lt;br /&gt;
*2 phases : apprentissage et évaluation&lt;br /&gt;
*Algo : entrainement des modèles et évaluation&lt;br /&gt;
*Capture du visage + extraction des points d’intérêt (openCV)&lt;br /&gt;
*Tester rejet avec utilisateur sans profil&lt;br /&gt;
*Verifier centrage du visage&lt;br /&gt;
===Etapes===&lt;br /&gt;
*Regarder projet de l’an passé&lt;br /&gt;
*Tuto de openCV/Android&lt;br /&gt;
*Commencer application : &lt;br /&gt;
*Saisie d’image (prise photo + BD)&lt;br /&gt;
*Points d’intérêt (openCV ?)&lt;br /&gt;
*Authentification (entrainement et évaluation)&lt;br /&gt;
*Intégration avec IHM&lt;br /&gt;
*Multi-image (si simple)&lt;br /&gt;
*Identification avec rejet&lt;br /&gt;
*Identification sans rejet&lt;br /&gt;
&lt;br /&gt;
===Tutoriel: installation du NDK et configuration avec Eclipse ===&lt;br /&gt;
* Téléchargement du NDK [http://developer.android.com/tools/sdk/ndk/index.html#Installing]&lt;br /&gt;
* Extraire le dossier&lt;br /&gt;
* Dans Eclipse : Window &amp;gt; Preferences &amp;gt; Android &amp;gt; NDK coller le path du lien vers le dossier d&#039;installation&lt;br /&gt;
* Dans le projet : clic droit sur le projet &amp;gt; project properties &amp;gt; C/C++ Build &amp;gt; Tool Chain Editor et selectionné Android Builder en tant que builder.&lt;br /&gt;
* Tuto pour installer OpenCV [http://www.seneschal.fr/index.php/recherches/84-installation-android-et-opencv-pour-android]&lt;br /&gt;
&lt;br /&gt;
=Projets des années passées =&lt;br /&gt;
* Reconnaissance faciale [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_RECONNAISSANCE_FACIALE]&lt;br /&gt;
* Reconnaissance de signatures [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_SIGNATURES]&lt;br /&gt;
&lt;br /&gt;
=Avancement=&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
* Constitution des groupes&lt;br /&gt;
* Prise en main du SDK android&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK et connexion nos téléphones&lt;br /&gt;
* Installation et configuration du NDK android&lt;br /&gt;
* Installation de la librairie OpenCV pour android&lt;br /&gt;
* Etude des projets des années passées&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK &lt;br /&gt;
* Installation de [http://developer.android.com/tools/help/adb.html adb]&lt;br /&gt;
* Connexion des téléphones via adb&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 3==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Configuration du système de gestion de version&lt;br /&gt;
* Premiers tests avec openCV&lt;br /&gt;
* Enregistrement d&#039;images dans l&#039;application en utilisant l&#039;appareil photo&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 4==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Recherche de projets similaires&lt;br /&gt;
* Etude de l&#039;existant&lt;br /&gt;
* Test de l&#039;application utilisant la comparaison de scènes&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 5==&lt;br /&gt;
&lt;br /&gt;
===Interruption pédagogique===&lt;br /&gt;
&lt;br /&gt;
==Semaine 6==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Premier test de l&#039;application utilisant HAAR&lt;br /&gt;
* Correction des bugs&lt;br /&gt;
* Configuration des environnements de développement&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 7==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Finalisation de l&#039;application &lt;br /&gt;
* Documentation sur les algorithmes&lt;br /&gt;
* Intégration avec les autres parties&lt;br /&gt;
* Préparation de la soutenance&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Usage de la librairie jar LIUM pour android -&amp;gt; sans succès.&lt;br /&gt;
* Librairie LIUM non adapté à android.&lt;br /&gt;
* Réalisation des slides&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/FicheSuivi&amp;diff=16574</id>
		<title>SmartCampus2014/FicheSuivi</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/FicheSuivi&amp;diff=16574"/>
		<updated>2014-03-28T16:05:36Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:SmartCampus-logo.png|400px|thumb|right]]&lt;br /&gt;
[[Image:SmartCampus-RICMTeam2014.jpg|400px|thumb|right|SmartCampus&#039;s Team]]&lt;br /&gt;
Encadrants : Didier Donsez et Vivien Quema &amp;lt;br&amp;gt;&lt;br /&gt;
Etudiants : (mailing list du projet : [mailto:smartcampus2014@googlegroups.com &amp;lt;smartcampus2014@googlegroups.com&amp;gt;])&lt;br /&gt;
* Nicolas Husson (chef de projet)&lt;br /&gt;
* Thomas Nunes&lt;br /&gt;
* Morgan Bidois&lt;br /&gt;
* Laurène Guelorget&lt;br /&gt;
* Simon Planès&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Les documents importants :&lt;br /&gt;
* Le dépôt Git se trouve [https://github.com/thomasNDS/SmartCampus2014 ici]&lt;br /&gt;
* Le cahier des charges se trouve [http://air.imag.fr/index.php/SmartCampus2014/CDC ici]&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/Maquette Des photos de la maquette]&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels Divers tutoriels maison], [http://air.imag.fr/index.php/SmartCampus2014/TutoArduino tutoriels Arduino] et [http://air.imag.fr/index.php/SmartCampus2014/TutoGalileo tutoriels Galileo]&lt;br /&gt;
* Le [[Media:flyer_SC.pdf | flyer]] et le [[Media:poster_SC.pdf | poster]] du projet&lt;br /&gt;
* Les [[Media:transparents_sc.pdf|slides de la présentation]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Présentation du projet =&lt;br /&gt;
Le projet a débuté le 28 janvier 2014 et va durer environ 2 mois. La page complète du projet se trouve [http://air.imag.fr/index.php/SmartCampus2014 ici] et le cahier des charges est consultable sur [http://air.imag.fr/index.php/SmartCampus2014/CDC cette page].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
L’équipe est formée de 5 membres de RICM5, trois de l’option Communication Multimédia et deux de l’option Systèmes et Réseaux. Le chef de projet est Nicolas Husson.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durant ce projet innovant, nous utilisons la méthodologie Agile et le Scrum Master est Thomas Nunes. La durée d’un sprint a été déterminée à une semaine et nous avons également décidé de mettre en place des « Poker Planning ».&lt;br /&gt;
&lt;br /&gt;
= Progression du projet =&lt;br /&gt;
11 sous-projets ont été identifiés et décrits à travers ce diagramme :&lt;br /&gt;
[[File:gantt1.png | 1050px| center| thumb | Diagramme de Gantt prévisionnel]]&lt;br /&gt;
== Sprint 0 : du 28/01 au 02/02 ==&lt;br /&gt;
* compréhension du sujet&lt;br /&gt;
* recherche sur les technologies utilisables : openHAB, protocole MQTT (et ses implémentations) pour la communication M2M...&lt;br /&gt;
* premiers tutoriels : OpenHAB, mosquitto, etc. (voir le [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Mosquitto tutoriel dédié à Mosquitto])&lt;br /&gt;
* rencontres avec Didier Donsez pour préciser le cahier des charges et avec Jérôme Maisonnasse pour l&#039;accès à la fablab MJK (découpeuse laser, imprimante 3d, etc.)&lt;br /&gt;
* enquête auprès d&#039;utilisateurs potentiels (étudiants) de SmartCampus&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 1 : du 03/02 au 09/02 ==&lt;br /&gt;
[[File:Archi02.png | 450px| right| thumb | Architecture globale de SmartCampus (M : extrémité d&#039;une communication MQTT)]]&lt;br /&gt;
&#039;&#039;&#039;Tâches principales&#039;&#039;&#039;&lt;br /&gt;
* Génie Logiciel : finir l&#039;architecture du projet (1ère version)&lt;br /&gt;
** détailler le diagramme de classe&lt;br /&gt;
** diagramme contexte, use-cases, scenarii d&#039;utilisation, etc.&lt;br /&gt;
** mettre au propre les schémas&lt;br /&gt;
** finir le cahier des charges et rédiger MPI&lt;br /&gt;
&lt;br /&gt;
* Recherches et application des technologies&lt;br /&gt;
** voir si le couplage Arduino/OpenHab est possible (voir le [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Comment_se_connecter_en_SSH_.C3.A0_la_carte_Galileo tutoriel pour se connecter à la carte en SSH])&lt;br /&gt;
** faire un choix de techno : Titanium/PhoneGap en fonction de la RA&lt;br /&gt;
** petite démo de la techno choisie&lt;br /&gt;
&lt;br /&gt;
* Maquette&lt;br /&gt;
** plan papier de la maquette (nombre de bâtiments, localisation, etc.)&lt;br /&gt;
** plan SVG des pièces de base pour la découpeuse laser&lt;br /&gt;
** matériel externe (train LEGO, objets imprimante 3D, ...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tâches additionnelles&#039;&#039;&#039;&lt;br /&gt;
* Contacter CROUS, semitag, METRO pour l&#039;open data&lt;br /&gt;
* Recherche d&#039;une alternative à l&#039;arduino si il ne supporte pas openHAB (azure, Raspberry Pi)&lt;br /&gt;
* Petite démo d&#039;openHAB avec cette alternative&lt;br /&gt;
* Couplage de openHAB avec Mosquitto (voir le [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Comment_utiliser_openHAB_avec_Mosquitto_.3F tutoriel dédié])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:SmartCampusMaquette02.png | 450px| center | thumb | Plan de la maquette (3x2m)]]&lt;br /&gt;
&lt;br /&gt;
== Sprint 2 : du 10/02 au 16/02 ==&lt;br /&gt;
[[File:smart2014-prototype0.jpg | 200px| right| thumb | Premier prototype de bâtiment]]&lt;br /&gt;
*&#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** Installation d&#039;un OS sur Arduino Galileo avec une jvm et le système arduino	&lt;br /&gt;
** Openhab sur Arduino Galileo		&lt;br /&gt;
** Connexions avec des capteurs / ajout de shield arduino&lt;br /&gt;
** Mosquitto sur Arduino Galileo		&lt;br /&gt;
** Intégration du projet Smart Citizen	&lt;br /&gt;
	&lt;br /&gt;
* &#039;&#039;&#039;Serveur MQTT / http&#039;&#039;&#039;&lt;br /&gt;
** Recherche technologique (voir le tutoriel sur [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Mis_en_place_d.27une_base_de_donn.C3.A9e_mongodb_.28en_locale.29 mongodb], [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Mis_en_place_NodeJs_Mongoose Node.js Mongoose] et le [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Mis_en_place_NodeJs_Mongoose_MQTT couplage Mongoose/MQTT])&lt;br /&gt;
** Un prototype alliant serveur MQTT et HTTP	&lt;br /&gt;
** Schéma de base de donnée&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application Cliente de réalité augmentée&#039;&#039;&#039;&lt;br /&gt;
** Prototype avec lecture d’un QRcode et affichage du numéro lu	&lt;br /&gt;
** Design IHM de l’application : maquettes avec des traits tordus	&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Plans SVG d&#039;un prototype	&lt;br /&gt;
** Découpe d’un premier prototype&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 3 : du 17/02 au 23/02 ==&lt;br /&gt;
* &#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** OS sur Arduino Galileo / JVM / openHAB / Mosquitto&lt;br /&gt;
** Intégration avec le serveur&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application mobile&#039;&#039;&#039;&lt;br /&gt;
** Recherche technologique (bootstrap, map, pop-ups, plein-écran, etc.)&lt;br /&gt;
** Mise au propre sur wiki&lt;br /&gt;
** Petite démo : une map avec éléments cliquables (voir le [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels#Int.C3.A9grer_une_carte_Google_et_fixer_ses_limites tutoriel dédié])&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Plans de tous les bâtiments (planches de 60*40cm) --&amp;gt; Changement de la taille de la maquette&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Tâches additionnelles&#039;&#039;&#039;&lt;br /&gt;
* Découpe de la moitié des bâtiments&lt;br /&gt;
* Montage des bâtiments (chercher de la colle à bois)&lt;br /&gt;
* Découpe routes, terrains, pistes cyclables&lt;br /&gt;
* Une cafetière dans la salle robotique&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 4 : du 24/02 au 02/03 ==&lt;br /&gt;
* &#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** OS sur Arduino Galileo / JVM / openHAB / Mosquitto&lt;br /&gt;
** Capteurs : pression, température, humidité, NFC, leds, affichage, air quality, afficheur 7 segments, etc.&lt;br /&gt;
*** leds : chenillard, bouton poussoir&lt;br /&gt;
*** température : alerte led + speaker quand dépassement d&#039;un seuil, affichage sur 7 segments&lt;br /&gt;
*** compteur : BP + afficheur 7 segments&lt;br /&gt;
(voir les [http://air.imag.fr/index.php/SmartCampus2014/TutoArduino tutoriels dédiés])&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application mobile&#039;&#039;&#039;&lt;br /&gt;
** Finir design&lt;br /&gt;
** Présentation et validation du design (par le groupe)&lt;br /&gt;
** Petite démo : un mode plein écran + layout (menu top, barre de notifications et conteneurs)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Serveur&#039;&#039;&#039;&lt;br /&gt;
** Décision sur la méthode de remplissage de la BD&lt;br /&gt;
** Finir le serveur + README&lt;br /&gt;
** Simple interface admin SmartCampus (récupérer des données en ajax)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Refaire le plan de la maquette (changement de dimensions)&lt;br /&gt;
** Plans de tous les bâtiments (planches de 60*40cm)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Interface administrateur&#039;&#039;&#039;&lt;br /&gt;
** Design à gros grain : analyse des besoins et aspect général&lt;br /&gt;
** Recherche technologique (Ajax, template avec jade, approche modulaire (widgets), etc.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 5 : du 10/03 au 16/03 ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** Sketch sur Galileo&lt;br /&gt;
** Mise en réseaux des Galileo&lt;br /&gt;
** Intégration aux autres sous-projets&lt;br /&gt;
** Capteurs + Mosquitto&lt;br /&gt;
** Capteurs de pression (tam tam en papier)&lt;br /&gt;
** Câblage électrique des Arduino&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application mobile&#039;&#039;&#039;&lt;br /&gt;
** Intégration avec le serveur : afficher des éléments&lt;br /&gt;
** Intégration avec le serveur : envoyer des éléments (crowdsourcing)&lt;br /&gt;
** Test avec GeckoView&lt;br /&gt;
** Test plus complet ChromeView&lt;br /&gt;
** Travailler le crowdsourcing&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Serveur&#039;&#039;&#039;&lt;br /&gt;
** Super admin SmartCampus : fonctionnalités (+ implémentation) et design interface&lt;br /&gt;
** Tuto pour ajouter une route personnalisée&lt;br /&gt;
** Documentation du serveur &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Plans de tous les bâtiments, qui rentrent sur des planches de 60*40cm&lt;br /&gt;
** Découpe laser de la moitié (ou plus) des bâtiments&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Interface administrateur&#039;&#039;&#039;&lt;br /&gt;
** Premier jet rudimentaire avec layouts + (système widgets)&lt;br /&gt;
** Intégration avec le serveur&lt;br /&gt;
** Ajout d’un système d’identification&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Robots&#039;&#039;&#039;&lt;br /&gt;
** Recherche techno&lt;br /&gt;
** Robots multi-langage ? (javascript, perl, C, scala, lua, ocaml, java ou autre…)&lt;br /&gt;
** Robot pour les menus du CROUS&lt;br /&gt;
** Robots pour les événements CROUS, EVE, UJF&lt;br /&gt;
** Robot pour le covoiturage : application mash-up de sites spécialisés&lt;br /&gt;
** COQP : prise de contact, étude du code&lt;br /&gt;
** Casier NFC : contact de l’équipe&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 6 : du 17/03 au 23/03 ==&lt;br /&gt;
[[Image:SmartCampus-LaserCuttedBuilding1.jpg|200px|thumb|right|Laser Cut Buildings for SmartCampus]]&lt;br /&gt;
[[Image:SmartCampus-LaserCuttedBuilding2.jpg|200px|thumb|right|Laser Cut Buildings for SmartCampus]][[Image:SmartCampus-LaserCuttedBuilding3.jpg|200px|thumb|right|Laser Cutted Building for SmartCampus]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** Recherche communication ino/python&lt;br /&gt;
** Dupliquer les OS Galileo&lt;br /&gt;
** Mise en réseaux des Galileo&lt;br /&gt;
&lt;br /&gt;
(voir les [http://air.imag.fr/index.php/SmartCampus2014/TutoGalileo tutoriels sur Galileo])&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application mobile&#039;&#039;&#039;&lt;br /&gt;
** Intégration avec le serveur&lt;br /&gt;
** Informations simple (lampadaire cassé)&lt;br /&gt;
** MAP&lt;br /&gt;
** Intégrer les différents éléments : applis, map, covoiturage, etc.&lt;br /&gt;
** Test avec GeckoView/ChromeView&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Serveur&#039;&#039;&#039;&lt;br /&gt;
** Charge la BD de mock data&lt;br /&gt;
** Super admin SmartCampus&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Montage des maquettes&lt;br /&gt;
** Découpe du terrain, routes, tram, etc.&lt;br /&gt;
** Disposer les QRcodes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Robots&#039;&#039;&#039;&lt;br /&gt;
** Robots pour EVE&lt;br /&gt;
** Intégration COQP&lt;br /&gt;
** Intégration Casier NFC (contact de l’équipe pour accès à leur BD, lancer le code sur nos machine)&lt;br /&gt;
** Robot pour la TAG/metro&lt;br /&gt;
** Horaires pour les arrêts de tram&lt;br /&gt;
** Événement (travaux, greves)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprint 7 : du 24/03 au 27/03 ==&lt;br /&gt;
* &#039;&#039;&#039;Arduino Galileo&#039;&#039;&#039;&lt;br /&gt;
** Dupliquer les OS Galileo&lt;br /&gt;
** Mettre à jour l&#039;interface d&#039;OpenHAB&lt;br /&gt;
** Préparer la démo (capteurs, OpenHAB, etc.)&lt;br /&gt;
&lt;br /&gt;
(voir les [http://air.imag.fr/index.php/SmartCampus2014/TutoGalileo tutoriels sur Galileo])&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Application mobile&#039;&#039;&#039;&lt;br /&gt;
** Test de l&#039;application sur mobile pour la démo&lt;br /&gt;
** Retouches&lt;br /&gt;
** Intégrer les horaires de tram&lt;br /&gt;
** Mise à jour des descriptions&lt;br /&gt;
** Super admin SmartCampus (ajout item OpenHAB)&lt;br /&gt;
** Mise en production sur le cloud&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Maquette&#039;&#039;&#039;&lt;br /&gt;
** Disposer les QRcodes&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Interface administrateur&#039;&#039;&#039;&lt;br /&gt;
** Terminer l’application&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Autres&#039;&#039;&#039;&lt;br /&gt;
** Casier NFC (projet Walid et Lotfi)&lt;br /&gt;
** Finir les READMEs et nettoyer le dépot&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Soutenance&#039;&#039;&#039;&lt;br /&gt;
** Diapos&lt;br /&gt;
** Flyer + poster&lt;br /&gt;
** Finir wiki Air&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Galerie =&lt;br /&gt;
[[Image:SmartCampus2014-001.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-002.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-003.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-004.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-005.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-006.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-007.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-008.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-009.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-010.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-011.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-012.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-013.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-014.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
[[Image:SmartCampus2014-015.jpg|200px|Smart Campus 2014]]&lt;br /&gt;
&lt;br /&gt;
= Demo =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Documents et liens annexes =&lt;br /&gt;
* Le dépôt Git se trouve [https://github.com/LaureneGuelorget/SmartCampus2014 ici]&lt;br /&gt;
* Le cahier des charges se trouve [http://air.imag.fr/index.php/SmartCampus2014/CDC ici]&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/Tutoriels Tutoriels maison]&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/TutoArduino Tutoriels Arduino]&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/TutoGalileo Tutoriels Galileo]&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16104</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16104"/>
		<updated>2014-03-11T11:30:03Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Installation d&amp;#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Installation d&#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Avoir mis à jour le firmware.&lt;br /&gt;
&lt;br /&gt;
== Traitement sur sa carte SD == &lt;br /&gt;
&lt;br /&gt;
Suivre le tuto [https://communities.intel.com/thread/45852 ici] afin que la carte SD respecte le bon format.&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Linux sur la carte SD == &lt;br /&gt;
&lt;br /&gt;
[[Attention à l&#039;heure actuelle, en utilisant cette solution l&#039;IDE Arduino Galileo ne reconnaitra pas la carte Galileo]]. &lt;br /&gt;
&lt;br /&gt;
Il existe deux solutions possibles pour installer un linux sur votre OS. La première consiste à créer votre propose OS sur mesure avec Yocto Project cela demande plus de 4h avec une machine ayant un i7 haswell (4700hq). Une autre solution, est de télécharger les images pré-buildées qui pourraient correspondre à vos besoin. &lt;br /&gt;
&lt;br /&gt;
=== Créer votre propre OS sur mesure ===&lt;br /&gt;
&lt;br /&gt;
Grâce à ce pdf, pas à pas, il est expliqué comment réaliser son propre OS basé sur Linux.&lt;br /&gt;
[[File:IntelAcademic_IoT_26_IntelInside_Rebuild_Yocto_Reviewed.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== OS pré-buildé ===&lt;br /&gt;
&lt;br /&gt;
Des OS pré-buildé sont également disponible [http://ccc.ntu.edu.tw/index.php/en/news/40 ici] selon ce que vous voulez faire.&lt;br /&gt;
Une fois l&#039;une des archives téléchargées il suffit de le dézipper, et de le copier dans sa carte mini-sd. &lt;br /&gt;
Une fois ces commandes effectuées il est possible d&#039;utiliser la carte en suivant ces instructions : &lt;br /&gt;
* Brancher le cable ethernet au routeur &lt;br /&gt;
* Mettre la mini carte SD&lt;br /&gt;
* Brancher la carte au secteur&lt;br /&gt;
Sur la carte Galileo, l&#039;adresse IP de la carte Galileo est setter grâce au protocole DHCP, ce qui permet ainsi d&#039;y accéder en ssh une fois que l&#039;on a trouvé l&#039;adresse IP donné à sa carte Galileo.&lt;br /&gt;
&lt;br /&gt;
=== Utilisation des sketches ===&lt;br /&gt;
&lt;br /&gt;
La solution pour lancer des sketches sur Galileo il faut utiliser les GPIO (General Purpose Input/Output) de la carte, via un langage de programmation.&lt;br /&gt;
Exemeple : &lt;br /&gt;
*[https://github.com/agnathan/iot-mwc-samples langageC] &lt;br /&gt;
*[http://wiki.ros.org/IntelGalileo/IntelGalileoGPIO python].&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Debian ==&lt;br /&gt;
&lt;br /&gt;
Nous n&#039;avons pas testé l&#039;utilisation d&#039;un OS Debian car selon la communauté intel, cela rendrait la carte trop lente.&lt;br /&gt;
&lt;br /&gt;
== Utilisation de Java, Openhab, Mosquitto ==&lt;br /&gt;
&lt;br /&gt;
*Effectuer ce qui est indiqué dans OS-prébuildé en téléchargeant le lien &amp;quot;Yocto Project Linux image w/ Clanton-full kernel + general SDKs + OpenJDK-6&amp;quot;.&lt;br /&gt;
*Se connecter en ssh à la carte Galileo&lt;br /&gt;
*Ajuster la date de la carte à celle de votre ordinateur avec la commande : &amp;quot;date DateSurOrdi&amp;quot; &lt;br /&gt;
*Depuis une autre console copié le dossier openhab runtime sur la carte galileo : &amp;quot;scp -r openhabruntime root@ipAdressGalileo:.&amp;quot;&lt;br /&gt;
*Télécharger les sources de mosquitto [http://mosquitto.org/download/ ici] &lt;br /&gt;
*Copié les sources mosquitto sur Galileo&lt;br /&gt;
*Les décompresser depuis ssh&lt;br /&gt;
*Accéder à ce dossier&lt;br /&gt;
*make &lt;br /&gt;
* Accéder à src/mosquitto.conf avec vi (votre éditeur préféré) ajouté “user root”&lt;br /&gt;
*Lancer mosquitto “./src/mosquitto -c src/mosquitto.conf&lt;br /&gt;
*Lancer openhab “sh start.sh”&lt;br /&gt;
*Aprés l’affichage de “started classic UI at /openhab.app” vous pouvez accéder à http://@ipGalileo:8080/openhab.app?sitemap=demo et admirer la superbe interface&lt;br /&gt;
&lt;br /&gt;
=Création d&#039;une route personnalisée avec Express (framework node.js)  =&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16103</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16103"/>
		<updated>2014-03-11T11:21:09Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Installation d&amp;#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Installation d&#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Avoir mis à jour le firmware.&lt;br /&gt;
&lt;br /&gt;
== Traitement sur sa carte SD == &lt;br /&gt;
&lt;br /&gt;
Suivre le tuto [https://communities.intel.com/thread/45852 ici] afin que la carte SD respecte le bon format.&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Linux sur la carte SD == &lt;br /&gt;
&lt;br /&gt;
[[Attention à l&#039;heure actuelle, en utilisant cette solution l&#039;IDE Arduino Galileo ne reconnaitra pas la carte Galileo]]. &lt;br /&gt;
&lt;br /&gt;
Il existe deux solutions possibles pour installer un linux sur votre OS. La première consiste à créer votre propose OS sur mesure avec Yocto Project cela demande plus de 4h avec une machine ayant un i7 haswell (4700hq). Une autre solution, est de télécharger les images pré-buildées qui pourraient correspondre à vos besoin. &lt;br /&gt;
&lt;br /&gt;
=== Créer votre propre OS sur mesure ===&lt;br /&gt;
&lt;br /&gt;
Grâce à ce pdf, pas à pas, il est expliqué comment réaliser son propre OS basé sur Linux.&lt;br /&gt;
[[File:IntelAcademic_IoT_26_IntelInside_Rebuild_Yocto_Reviewed.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== OS pré-buildé ===&lt;br /&gt;
&lt;br /&gt;
Des OS pré-buildé sont également disponible [http://ccc.ntu.edu.tw/index.php/en/news/40 ici] selon ce que vous voulez faire.&lt;br /&gt;
Une fois l&#039;une des archives téléchargées il suffit de le dézipper, et de le copier dans sa carte mini-sd. &lt;br /&gt;
Une fois ces commandes effectuées il est possible d&#039;utiliser la carte en suivant ces instructions : &lt;br /&gt;
* Brancher le cable ethernet au routeur &lt;br /&gt;
* Mettre la mini carte SD&lt;br /&gt;
* Brancher la carte au secteur&lt;br /&gt;
Sur la carte Galileo, l&#039;adresse IP de la carte Galileo est setter grâce au protocole DHCP, ce qui permet ainsi d&#039;y accéder en ssh une fois que l&#039;on a trouvé l&#039;adresse IP donné à sa carte Galileo.&lt;br /&gt;
&lt;br /&gt;
=== Utilisation des sketches ===&lt;br /&gt;
&lt;br /&gt;
La solution pour lancer des sketches sur Galileo il faut utiliser les GPIO (General Purpose Input/Output) de la carte, via un langage de programmation.&lt;br /&gt;
Exemeple : &lt;br /&gt;
*[https://github.com/agnathan/iot-mwc-samples langageC] &lt;br /&gt;
*[http://wiki.ros.org/IntelGalileo/IntelGalileoGPIO python].&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Debian ==&lt;br /&gt;
&lt;br /&gt;
Nous n&#039;avons pas testé l&#039;utilisation d&#039;un OS Debian car selon la communauté intel, cela rendrait la carte trop lente.&lt;br /&gt;
&lt;br /&gt;
== Utilisation de Java, Openhab, Mosquitto ==&lt;br /&gt;
&lt;br /&gt;
=Création d&#039;une route personnalisée avec Express (framework node.js)  =&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16102</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16102"/>
		<updated>2014-03-11T11:20:06Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Utilisation des sketches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Installation d&#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Avoir mis à jour le firmware.&lt;br /&gt;
&lt;br /&gt;
== Traitement sur sa carte SD == &lt;br /&gt;
&lt;br /&gt;
Suivre le tuto [https://communities.intel.com/thread/45852 ici] afin que la carte SD respecte le bon format.&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Linux sur la carte SD == &lt;br /&gt;
&lt;br /&gt;
[[Attention à l&#039;heure actuelle, en utilisant cette solution l&#039;IDE Arduino Galileo ne reconnaitra pas la carte Galileo]]. &lt;br /&gt;
&lt;br /&gt;
Il existe deux solutions possibles pour installer un linux sur votre OS. La première consiste à créer votre propose OS sur mesure avec Yocto Project cela demande plus de 4h avec une machine ayant un i7 haswell (4700hq). Une autre solution, est de télécharger les images pré-buildées qui pourraient correspondre à vos besoin. &lt;br /&gt;
&lt;br /&gt;
=== Créer votre propre OS sur mesure ===&lt;br /&gt;
&lt;br /&gt;
Grâce à ce pdf, pas à pas, il est expliqué comment réaliser son propre OS basé sur Linux.&lt;br /&gt;
[[File:IntelAcademic_IoT_26_IntelInside_Rebuild_Yocto_Reviewed.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== OS pré-buildé ===&lt;br /&gt;
&lt;br /&gt;
Des OS pré-buildé sont également disponible [http://ccc.ntu.edu.tw/index.php/en/news/40 ici] selon ce que vous voulez faire.&lt;br /&gt;
Une fois l&#039;une des archives téléchargées il suffit de le dézipper, et de le copier dans sa carte mini-sd. &lt;br /&gt;
Une fois ces commandes effectuées il est possible d&#039;utiliser la carte en suivant ces instructions : &lt;br /&gt;
* Brancher le cable ethernet au routeur &lt;br /&gt;
* Mettre la mini carte SD&lt;br /&gt;
* Brancher la carte au secteur&lt;br /&gt;
Sur la carte Galileo, l&#039;adresse IP de la carte Galileo est setter grâce au protocole DHCP, ce qui permet ainsi d&#039;y accéder en ssh une fois que l&#039;on a trouvé l&#039;adresse IP donné à sa carte Galileo.&lt;br /&gt;
&lt;br /&gt;
=== Utilisation des sketches ===&lt;br /&gt;
&lt;br /&gt;
La solution pour lancer des sketches sur Galileo il faut utiliser les GPIO (General Purpose Input/Output) de la carte, via un langage de programmation.&lt;br /&gt;
Exemeple : &lt;br /&gt;
*[https://github.com/agnathan/iot-mwc-samples langageC] &lt;br /&gt;
*[http://wiki.ros.org/IntelGalileo/IntelGalileoGPIO python].&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Debian ==&lt;br /&gt;
&lt;br /&gt;
Nous n&#039;avons pas testé l&#039;utilisation d&#039;un OS Debian car selon la communauté intel, cela rendrait la carte trop lente.&lt;br /&gt;
&lt;br /&gt;
=Création d&#039;une route personnalisée avec Express (framework node.js)  =&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16101</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16101"/>
		<updated>2014-03-11T11:19:53Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Installation d&amp;#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Installation d&#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Avoir mis à jour le firmware.&lt;br /&gt;
&lt;br /&gt;
== Traitement sur sa carte SD == &lt;br /&gt;
&lt;br /&gt;
Suivre le tuto [https://communities.intel.com/thread/45852 ici] afin que la carte SD respecte le bon format.&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Linux sur la carte SD == &lt;br /&gt;
&lt;br /&gt;
[[Attention à l&#039;heure actuelle, en utilisant cette solution l&#039;IDE Arduino Galileo ne reconnaitra pas la carte Galileo]]. &lt;br /&gt;
&lt;br /&gt;
Il existe deux solutions possibles pour installer un linux sur votre OS. La première consiste à créer votre propose OS sur mesure avec Yocto Project cela demande plus de 4h avec une machine ayant un i7 haswell (4700hq). Une autre solution, est de télécharger les images pré-buildées qui pourraient correspondre à vos besoin. &lt;br /&gt;
&lt;br /&gt;
=== Créer votre propre OS sur mesure ===&lt;br /&gt;
&lt;br /&gt;
Grâce à ce pdf, pas à pas, il est expliqué comment réaliser son propre OS basé sur Linux.&lt;br /&gt;
[[File:IntelAcademic_IoT_26_IntelInside_Rebuild_Yocto_Reviewed.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== OS pré-buildé ===&lt;br /&gt;
&lt;br /&gt;
Des OS pré-buildé sont également disponible [http://ccc.ntu.edu.tw/index.php/en/news/40 ici] selon ce que vous voulez faire.&lt;br /&gt;
Une fois l&#039;une des archives téléchargées il suffit de le dézipper, et de le copier dans sa carte mini-sd. &lt;br /&gt;
Une fois ces commandes effectuées il est possible d&#039;utiliser la carte en suivant ces instructions : &lt;br /&gt;
* Brancher le cable ethernet au routeur &lt;br /&gt;
* Mettre la mini carte SD&lt;br /&gt;
* Brancher la carte au secteur&lt;br /&gt;
Sur la carte Galileo, l&#039;adresse IP de la carte Galileo est setter grâce au protocole DHCP, ce qui permet ainsi d&#039;y accéder en ssh une fois que l&#039;on a trouvé l&#039;adresse IP donné à sa carte Galileo.&lt;br /&gt;
&lt;br /&gt;
=== Utilisation des sketches ===&lt;br /&gt;
&lt;br /&gt;
La solution pour lancer des sketches sur Galileo il faut utiliser les GPIO (General Purpose Input/Output) de la carte, via un langage de programmation.&lt;br /&gt;
Exemeple : *[https://github.com/agnathan/iot-mwc-samples langage C] &lt;br /&gt;
*[http://wiki.ros.org/IntelGalileo/IntelGalileoGPIO python]. &lt;br /&gt;
== Utilisation d&#039;un Debian ==&lt;br /&gt;
&lt;br /&gt;
Nous n&#039;avons pas testé l&#039;utilisation d&#039;un OS Debian car selon la communauté intel, cela rendrait la carte trop lente.&lt;br /&gt;
&lt;br /&gt;
=Création d&#039;une route personnalisée avec Express (framework node.js)  =&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16100</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16100"/>
		<updated>2014-03-11T11:15:11Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Installation d&amp;#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Installation d&#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Avoir mis à jour le firmware.&lt;br /&gt;
&lt;br /&gt;
== Traitement sur sa carte SD == &lt;br /&gt;
&lt;br /&gt;
Suivre le tuto [https://communities.intel.com/thread/45852 ici] afin que la carte SD respecte le bon format.&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Linux sur la carte SD == &lt;br /&gt;
&lt;br /&gt;
[[Attention à l&#039;heure actuelle, en utilisant cette solution l&#039;IDE Arduino Galileo ne reconnaitra pas la carte Galileo]]. &lt;br /&gt;
&lt;br /&gt;
Il existe deux solutions possibles pour installer un linux sur votre OS. La première consiste à créer votre propose OS sur mesure avec Yocto Project cela demande plus de 4h avec une machine ayant un i7 haswell (4700hq). Une autre solution, est de télécharger les images pré-buildées qui pourraient correspondre à vos besoin. &lt;br /&gt;
&lt;br /&gt;
=== Créer votre propre OS sur mesure ===&lt;br /&gt;
&lt;br /&gt;
Grâce à ce pdf, pas à pas, il est expliqué comment réaliser son propre OS basé sur Linux.&lt;br /&gt;
[[File:IntelAcademic_IoT_26_IntelInside_Rebuild_Yocto_Reviewed.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== OS pré-buildé ===&lt;br /&gt;
&lt;br /&gt;
Des OS pré-buildé sont également disponible [http://ccc.ntu.edu.tw/index.php/en/news/40 ici] selon ce que vous voulez faire.&lt;br /&gt;
Une fois l&#039;une des archives téléchargées il suffit de le dézipper, et de le copier dans sa carte mini-sd. &lt;br /&gt;
Une fois ces commandes effectuées il est possible d&#039;utiliser la carte en suivant ces instructions : &lt;br /&gt;
* Brancher le cable ethernet au routeur &lt;br /&gt;
* Mettre la mini carte SD&lt;br /&gt;
* Brancher la carte au secteur&lt;br /&gt;
Sur la carte Galileo, l&#039;adresse IP de la carte Galileo est setter grâce au protocole DHCP, ce qui permet ainsi d&#039;y accéder en ssh une fois que l&#039;on a trouvé l&#039;adresse IP donné à sa carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Debian ==&lt;br /&gt;
&lt;br /&gt;
Nous n&#039;avons pas testé l&#039;utilisation d&#039;un OS Debian car selon la communauté intel, cela rendrait la carte trop lente.&lt;br /&gt;
&lt;br /&gt;
=Création d&#039;une route personnalisée avec Express (framework node.js)  =&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16099</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16099"/>
		<updated>2014-03-11T11:05:18Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Installation d&amp;#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Installation d&#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Avoir mis à jour le firmware.&lt;br /&gt;
&lt;br /&gt;
== Traitement sur sa carte SD == &lt;br /&gt;
&lt;br /&gt;
Suivre le tuto [https://communities.intel.com/thread/45852 ici] afin que la carte SD respecte le bon format.&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Linux sur la carte SD == &lt;br /&gt;
&lt;br /&gt;
[[Attention à l&#039;heure actuelle, en utilisant cette solution l&#039;IDE Arduino Galileo ne reconnaitra pas la carte Galileo]]. &lt;br /&gt;
&lt;br /&gt;
Il existe deux solutions possibles pour installer un linux sur votre OS. La première consiste à créer votre propose OS sur mesure avec Yocto Project cela demande plus de 4h avec une machine ayant un i7 haswell (4700hq). Une autre solution, est de télécharger les images pré-buildées qui pourraient correspondre à vos besoin. &lt;br /&gt;
&lt;br /&gt;
=== Créer votre propre OS sur mesure ===&lt;br /&gt;
&lt;br /&gt;
Grâce à ce pdf, pas à pas, il est expliqué comment réaliser son propre OS basé sur Linux.&lt;br /&gt;
[[File:IntelAcademic_IoT_26_IntelInside_Rebuild_Yocto_Reviewed.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== OS pré-buildé ===&lt;br /&gt;
&lt;br /&gt;
Des OS pré-buildé sont également disponible [http://ccc.ntu.edu.tw/index.php/en/news/40 ici] selon ce que vous voulez faire.&lt;br /&gt;
Une fois l&#039;une des archives téléchargées il suffit de le dézipper, et de le copier dans sa carte mini-sd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Debian ==&lt;br /&gt;
&lt;br /&gt;
Nous n&#039;avons pas testé l&#039;utilisation d&#039;un OS Debian car selon la communauté intel, cela rendrait la carte trop lente.&lt;br /&gt;
&lt;br /&gt;
=Création d&#039;une route personnalisée avec Express (framework node.js)  =&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16098</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16098"/>
		<updated>2014-03-11T11:04:30Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Traitement sur sa carte SD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Installation d&#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Avoir mis à jour le firmware.&lt;br /&gt;
&lt;br /&gt;
== Traitement sur sa carte SD == &lt;br /&gt;
&lt;br /&gt;
Suivre le tuto [https://communities.intel.com/thread/45852 ici]&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Linux sur la carte SD == &lt;br /&gt;
&lt;br /&gt;
[[Attention à l&#039;heure actuelle, en utilisant cette solution l&#039;IDE Arduino Galileo ne reconnaitra pas la carte Galileo]]. &lt;br /&gt;
&lt;br /&gt;
Il existe deux solutions possibles pour installer un linux sur votre OS. La première consiste à créer votre propose OS sur mesure avec Yocto Project cela demande plus de 4h avec une machine ayant un i7 haswell (4700hq). Une autre solution, est de télécharger les images pré-buildées qui pourraient correspondre à vos besoin. &lt;br /&gt;
&lt;br /&gt;
=== Créer votre propre OS sur mesure ===&lt;br /&gt;
&lt;br /&gt;
Grâce à ce pdf, pas à pas, il est expliqué comment réaliser son propre OS basé sur Linux.&lt;br /&gt;
[[File:IntelAcademic_IoT_26_IntelInside_Rebuild_Yocto_Reviewed.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== OS pré-buildé ===&lt;br /&gt;
&lt;br /&gt;
Des OS pré-buildé sont également disponible [http://ccc.ntu.edu.tw/index.php/en/news/40 ici] selon ce que vous voulez faire.&lt;br /&gt;
Une fois l&#039;une des archives téléchargées il suffit de le dézipper, et de le copier dans sa carte mini-sd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Debian ==&lt;br /&gt;
&lt;br /&gt;
Nous n&#039;avons pas testé l&#039;utilisation d&#039;un OS Debian car selon la communauté intel, cela rendrait la carte trop lente.&lt;br /&gt;
&lt;br /&gt;
=Création d&#039;une route personnalisée avec Express (framework node.js)  =&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16097</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16097"/>
		<updated>2014-03-11T11:04:19Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Installation d&amp;#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Installation d&#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Avoir mis à jour le firmware.&lt;br /&gt;
&lt;br /&gt;
== Traitement sur sa carte SD == &lt;br /&gt;
&lt;br /&gt;
Suivre le tuto [[https://communities.intel.com/thread/45852 ici]]&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Linux sur la carte SD == &lt;br /&gt;
&lt;br /&gt;
[[Attention à l&#039;heure actuelle, en utilisant cette solution l&#039;IDE Arduino Galileo ne reconnaitra pas la carte Galileo]]. &lt;br /&gt;
&lt;br /&gt;
Il existe deux solutions possibles pour installer un linux sur votre OS. La première consiste à créer votre propose OS sur mesure avec Yocto Project cela demande plus de 4h avec une machine ayant un i7 haswell (4700hq). Une autre solution, est de télécharger les images pré-buildées qui pourraient correspondre à vos besoin. &lt;br /&gt;
&lt;br /&gt;
=== Créer votre propre OS sur mesure ===&lt;br /&gt;
&lt;br /&gt;
Grâce à ce pdf, pas à pas, il est expliqué comment réaliser son propre OS basé sur Linux.&lt;br /&gt;
[[File:IntelAcademic_IoT_26_IntelInside_Rebuild_Yocto_Reviewed.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== OS pré-buildé ===&lt;br /&gt;
&lt;br /&gt;
Des OS pré-buildé sont également disponible [http://ccc.ntu.edu.tw/index.php/en/news/40 ici] selon ce que vous voulez faire.&lt;br /&gt;
Une fois l&#039;une des archives téléchargées il suffit de le dézipper, et de le copier dans sa carte mini-sd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Debian ==&lt;br /&gt;
&lt;br /&gt;
Nous n&#039;avons pas testé l&#039;utilisation d&#039;un OS Debian car selon la communauté intel, cela rendrait la carte trop lente.&lt;br /&gt;
&lt;br /&gt;
=Création d&#039;une route personnalisée avec Express (framework node.js)  =&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16096</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16096"/>
		<updated>2014-03-11T11:02:44Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Installation d&amp;#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Installation d&#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Avoir mis à jour le firmware.&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Linux sur la carte SD == &lt;br /&gt;
&lt;br /&gt;
[[Attention à l&#039;heure actuelle, en utilisant cette solution l&#039;IDE Arduino Galileo ne reconnaitra pas la carte Galileo]].&lt;br /&gt;
&lt;br /&gt;
Il existe deux solutions possibles pour installer un linux sur votre OS. La première consiste à créer votre propose OS sur mesure avec Yocto Project cela demande plus de 4h avec une machine ayant un i7 haswell (4700hq). Une autre solution, est de télécharger les images pré-buildées qui pourraient correspondre à vos besoin. &lt;br /&gt;
&lt;br /&gt;
=== Créer votre propre OS sur mesure ===&lt;br /&gt;
&lt;br /&gt;
Grâce à ce pdf, pas à pas, il est expliqué comment réaliser son propre OS basé sur Linux.&lt;br /&gt;
[[File:IntelAcademic_IoT_26_IntelInside_Rebuild_Yocto_Reviewed.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== OS pré-buildé ===&lt;br /&gt;
&lt;br /&gt;
Des OS pré-buildé sont également disponible [http://ccc.ntu.edu.tw/index.php/en/news/40 ici] selon ce que vous voulez faire.&lt;br /&gt;
Une fois l&#039;une des archives téléchargées il suffit de le dézipper, et de le copier dans sa carte mini-sd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Debian ==&lt;br /&gt;
&lt;br /&gt;
Nous n&#039;avons pas testé l&#039;utilisation d&#039;un OS Debian car selon la communauté intel, cela rendrait la carte trop lente.&lt;br /&gt;
&lt;br /&gt;
=Création d&#039;une route personnalisée avec Express (framework node.js)  =&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16095</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16095"/>
		<updated>2014-03-11T11:02:06Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Installation d&amp;#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Installation d&#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Avoir mis à jour le firmware.&lt;br /&gt;
&lt;br /&gt;
=== Mis à jour du firmware ===&lt;br /&gt;
&lt;br /&gt;
# Brancher la carte au secteur&lt;br /&gt;
# Brancher le cable usb/micro usb à l&#039;ordinateur (brancher le micro-usb sur &amp;quot;usb client&amp;quot; de la galileo)&lt;br /&gt;
# Lancer l&#039;IDE télécharger précédemment ( éxécutable &amp;quot;arduino&amp;quot; )&lt;br /&gt;
# Sélectionner le port série via Outils -&amp;gt; Port Série&lt;br /&gt;
# Aide -&amp;gt; Firmware Update. Cela devrait prendre plusieurs minutes.&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Linux sur la carte SD == &lt;br /&gt;
&lt;br /&gt;
[[Attention à l&#039;heure actuelle, en utilisant cette solution l&#039;IDE Arduino Galileo ne reconnaitra pas la carte Galileo]].&lt;br /&gt;
&lt;br /&gt;
Il existe deux solutions possibles pour installer un linux sur votre OS. La première consiste à créer votre propose OS sur mesure avec Yocto Project cela demande plus de 4h avec une machine ayant un i7 haswell (4700hq). Une autre solution, est de télécharger les images pré-buildées qui pourraient correspondre à vos besoin. &lt;br /&gt;
&lt;br /&gt;
=== Créer votre propre OS sur mesure ===&lt;br /&gt;
&lt;br /&gt;
Grâce à ce pdf, pas à pas, il est expliqué comment réaliser son propre OS basé sur Linux.&lt;br /&gt;
[[File:IntelAcademic_IoT_26_IntelInside_Rebuild_Yocto_Reviewed.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== OS pré-buildé ===&lt;br /&gt;
&lt;br /&gt;
Des OS pré-buildé sont également disponible [http://ccc.ntu.edu.tw/index.php/en/news/40 ici] selon ce que vous voulez faire.&lt;br /&gt;
Une fois l&#039;une des archives téléchargées il suffit de le dézipper, et de le copier dans sa carte mini-sd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Debian ==&lt;br /&gt;
&lt;br /&gt;
Nous n&#039;avons pas testé l&#039;utilisation d&#039;un OS Debian car selon la communauté intel, cela rendrait la carte trop lente.&lt;br /&gt;
&lt;br /&gt;
=Création d&#039;une route personnalisée avec Express (framework node.js)  =&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16094</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16094"/>
		<updated>2014-03-11T10:58:43Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Installation d&amp;#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Installation d&#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Avoir mis à jour le firmware.&lt;br /&gt;
&lt;br /&gt;
=== Mis à jour du firmware ===&lt;br /&gt;
&lt;br /&gt;
# Brancher la carte au secteur&lt;br /&gt;
# Brancher le cable usb/micro usb à l&#039;ordinateur (brancher le micro-usb sur &amp;quot;usb client&amp;quot; de la galileo)&lt;br /&gt;
# Lancer l&#039;IDE télécharger précédemment ( éxécutable &amp;quot;arduino&amp;quot; )&lt;br /&gt;
# Sélectionner le port série via Outils -&amp;gt; Port Série&lt;br /&gt;
# Aide -&amp;gt; Firmware Update. Cela devrait prendre plusieurs minutes.&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un LSB (Linux Standard Base) == &lt;br /&gt;
&lt;br /&gt;
[[Attention à l&#039;heure actuelle, en utilisant cette solution l&#039;IDE Arduino Galileo ne reconnaitra pas la carte Galileo]].&lt;br /&gt;
&lt;br /&gt;
Il existe deux solutions possibles pour installer un linux sur votre OS. La première consiste à créer votre propose OS sur mesure avec Yocto Project cela demande plus de 4h avec une machine ayant un i7 haswell (4700hq). Une autre solution, est de télécharger les images pré-buildées qui pourraient correspondre à vos besoin. &lt;br /&gt;
&lt;br /&gt;
=== Créer votre propre OS sur mesure ===&lt;br /&gt;
&lt;br /&gt;
Grâce à ce pdf, pas à pas, il est expliqué comment réaliser son propre OS basé sur Linux.&lt;br /&gt;
[[File:IntelAcademic_IoT_26_IntelInside_Rebuild_Yocto_Reviewed.pdf]]&lt;br /&gt;
&lt;br /&gt;
=== OS pré-buildé ===&lt;br /&gt;
&lt;br /&gt;
Des OS pré-buildé sont également disponible [http://ccc.ntu.edu.tw/index.php/en/news/40 ici]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Debian ==&lt;br /&gt;
&lt;br /&gt;
Nous n&#039;avons pas testé l&#039;utilisation d&#039;un OS Debian car selon la communauté intel, cela rendrait la carte trop lente.&lt;br /&gt;
&lt;br /&gt;
=Création d&#039;une route personnalisée avec Express (framework node.js)  =&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:IntelAcademic_IoT_26_IntelInside_Rebuild_Yocto_Reviewed.pdf&amp;diff=16093</id>
		<title>File:IntelAcademic IoT 26 IntelInside Rebuild Yocto Reviewed.pdf</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:IntelAcademic_IoT_26_IntelInside_Rebuild_Yocto_Reviewed.pdf&amp;diff=16093"/>
		<updated>2014-03-11T10:54:24Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: Recréer votre os sur mesure avec yocto pour les galileo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Recréer votre os sur mesure avec yocto pour les galileo&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16092</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16092"/>
		<updated>2014-03-11T10:53:04Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Installation d&amp;#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Installation d&#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Avoir mis à jour le firmware.&lt;br /&gt;
&lt;br /&gt;
=== Mis à jour du firmware ===&lt;br /&gt;
&lt;br /&gt;
# Brancher la carte au secteur&lt;br /&gt;
# Brancher le cable usb/micro usb à l&#039;ordinateur (brancher le micro-usb sur &amp;quot;usb client&amp;quot; de la galileo)&lt;br /&gt;
# Lancer l&#039;IDE télécharger précédemment ( éxécutable &amp;quot;arduino&amp;quot; )&lt;br /&gt;
# Sélectionner le port série via Outils -&amp;gt; Port Série&lt;br /&gt;
# Aide -&amp;gt; Firmware Update. Cela devrait prendre plusieurs minutes.&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un LSB (Linux Standard Base) == &lt;br /&gt;
&lt;br /&gt;
[[Attention à l&#039;heure actuelle, en utilisant cette solution l&#039;IDE Arduino Galileo ne reconnaitra pas la carte Galileo]].&lt;br /&gt;
&lt;br /&gt;
Il existe deux solutions possibles pour installer un linux sur votre OS. La première consiste à créer votre propose OS sur mesure avec Yocto Project cela demande plus de 4h avec une machine ayant un i7 haswell (4700hq). Une autre solution, est de télécharger les images pré-buildées qui pourraient correspondre à vos besoin. &lt;br /&gt;
&lt;br /&gt;
=== Créer votre propre OS sur mesure ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OS pré-buildé ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Debian ==&lt;br /&gt;
&lt;br /&gt;
Nous n&#039;avons pas testé l&#039;utilisation d&#039;un OS Debian car selon la communauté intel, cela rendrait la carte trop lente.&lt;br /&gt;
&lt;br /&gt;
=Création d&#039;une route personnalisée avec Express (framework node.js)  =&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16090</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16090"/>
		<updated>2014-03-11T10:48:32Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Installation d&#039;un OS basé sur Linux (LSB - Linux Standard Base) sur Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Avoir mis à jour le firmware.&lt;br /&gt;
&lt;br /&gt;
=== Mis à jour du firmware ===&lt;br /&gt;
&lt;br /&gt;
# Brancher la carte au secteur&lt;br /&gt;
# Brancher le cable usb/micro usb à l&#039;ordinateur&lt;br /&gt;
# Lancer l&#039;IDE télécharger précédemment ( éxécutable &amp;quot;arduino&amp;quot; )&lt;br /&gt;
# Sélectionner le port série via Outils -&amp;gt; Port Série&lt;br /&gt;
# Aide -&amp;gt; Firmware Update. Cela devrait prendre plusieurs minutes.&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un LSB (Linux Standard Base) == &lt;br /&gt;
&lt;br /&gt;
[[Attention à l&#039;heure actuelle, en utilisant cette solution l&#039;IDE Arduino Galileo ne reconnaitra pas la carte Galileo]]&lt;br /&gt;
&lt;br /&gt;
Il existe deux solutions possibles pour installer un linux sur votre OS. La première consiste à créer votre propose OS sur mesure avec Yocto Project cela demande plus de 4h avec une machine ayant un i7 haswell (4700hq). Une autre solution, est de télécharger les images pré-buildées qui pourraient correspondre à vos besoin. &lt;br /&gt;
&lt;br /&gt;
=== Créer votre propre OS sur mesure ===&lt;br /&gt;
&lt;br /&gt;
=== OS pré-buildé ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Debian ==&lt;br /&gt;
&lt;br /&gt;
Nous n&#039;avons pas testé l&#039;utilisation d&#039;un OS Debian car selon la communauté intel, cela rendrait la carte trop lente.&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16089</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16089"/>
		<updated>2014-03-11T10:40:55Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
[[SOUS LINUX]]&lt;br /&gt;
&lt;br /&gt;
Télécharger l&#039;IDE Arduino sur le site :&lt;br /&gt;
Décompresser l&#039;archive (le dossier &amp;quot;arduino-1.5.3&amp;quot; devrait être présent avec l&#039;éxécutable &amp;quot;arduino&amp;quot; à l&#039;intérieur)&lt;br /&gt;
&lt;br /&gt;
=== Mis à jour du firmware ===&lt;br /&gt;
&lt;br /&gt;
# Brancher la carte au secteur&lt;br /&gt;
# Brancher le cable usb/micro usb à l&#039;ordinateur&lt;br /&gt;
# Lancer l&#039;IDE télécharger précédemment ( éxécutable &amp;quot;arduino&amp;quot; )&lt;br /&gt;
# Sélectionner le port série via Outils -&amp;gt; Port Série&lt;br /&gt;
# Aide -&amp;gt; Firmware Update. Cela devrait prendre plusieurs minutes.&lt;br /&gt;
&lt;br /&gt;
== Utilisation du tinyOS == &lt;br /&gt;
&lt;br /&gt;
#Télécharger l&#039;archive contenant le tinyOS sur ce site :&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un LSB (Linux Standard Base) ==&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un Debian ==&lt;br /&gt;
&lt;br /&gt;
Nous n&#039;avons pas testé l&#039;utilisation d&#039;un OS Debian car selon la communauté intel, cela rendrait la carte trop lente.&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16088</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16088"/>
		<updated>2014-03-11T10:37:53Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
[[SOUS LINUX]]&lt;br /&gt;
&lt;br /&gt;
Télécharger l&#039;IDE Arduino sur le site :&lt;br /&gt;
Décompresser l&#039;archive (le dossier &amp;quot;arduino-1.5.3&amp;quot; devrait être présent avec l&#039;éxécutable &amp;quot;arduino&amp;quot; à l&#039;intérieur)&lt;br /&gt;
&lt;br /&gt;
=== Mis à jour du firmware ===&lt;br /&gt;
&lt;br /&gt;
# Brancher la carte au secteur&lt;br /&gt;
# Brancher le cable usb/micro usb à l&#039;ordinateur&lt;br /&gt;
# Lancer l&#039;IDE télécharger précédemment ( éxécutable &amp;quot;arduino&amp;quot; )&lt;br /&gt;
# Sélectionner le port série via Outils -&amp;gt; Port Série&lt;br /&gt;
# Aide -&amp;gt; Firmware Update. Cela devrait prendre plusieurs minutes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation du tinyOS ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un LSB (Linux Standard Base) ==&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16087</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16087"/>
		<updated>2014-03-11T10:35:17Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
[[SOUS LINUX]]&lt;br /&gt;
&lt;br /&gt;
Télécharger l&#039;IDE Arduino sur le site :&lt;br /&gt;
Décompresser l&#039;archive (le dossier &amp;quot;arduino-1.5.3&amp;quot; devrait être présent avec l&#039;éxécutable &amp;quot;arduino&amp;quot; à l&#039;intérieur)&lt;br /&gt;
&lt;br /&gt;
=== Mis à jour du firmware (internet nécessaire) ===&lt;br /&gt;
&lt;br /&gt;
# Brancher la carte au secteur&lt;br /&gt;
# Brancher le cable usb/micro usb à l&#039;ordinateur&lt;br /&gt;
# Lancer l&#039;IDE télécharger précédemment ( éxécutable &amp;quot;arduino&amp;quot; )&lt;br /&gt;
# Sélectionner le port série via Outils -&amp;gt; Port Série&lt;br /&gt;
# Aide Firmware Update&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation du tinyOS ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un LSB (Linux Standard Base) ==&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16086</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16086"/>
		<updated>2014-03-11T10:24:57Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Télécharger l&#039;IDE Arduino sur le site :&lt;br /&gt;
=== Mis à jour du firewire ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation du tinyOS ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un LSB (Linux Standard Base) ==&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16085</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16085"/>
		<updated>2014-03-11T10:23:25Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Intel Galileo =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation du tinyOS ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&#039;un LSB (Linux Standard Base) ==&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16084</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16084"/>
		<updated>2014-03-11T10:20:38Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Intel Galileo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Intel Galileo =&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16083</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=16083"/>
		<updated>2014-03-11T10:20:22Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
[[File:logo_mqtt.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher. Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
[[File:logo_openhab.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
[[File:logo_arduino.png | 100px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
  system(&amp;quot;route add default gw 169.254.1.2&amp;quot;); // le PC devient passerelle par défaut&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire.&lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
* Configurer le PC en mode routeur (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysctl net.ipv4.ip_forward=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Activer le NAT sur le PC (en root sous Linux) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE&lt;br /&gt;
iptables -A FORWARD -i wlan0 -o eth0:avahi -m state --state RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
iptables -A FORWARD -i eth0:avahi -o wlan0 -j ACCEPT&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Sur Galileo, si la résolution d&#039;adresse ne fonctionne pas (e.g. ping www.google.com ne marche pas), configurer le DNS en ajoutant à /etc/resolv.conf :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
domain grenet.fr&lt;br /&gt;
search grenet.fr&lt;br /&gt;
nameserver 130.190.190.4&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;lt;b&amp;gt;Attention&amp;lt;/b&amp;gt; : les domaines ci-dessus sont valables seulement pour un PC connecté à wifi-campus. Sur un autre réseau, il suffit (sur un système UNIX) de copier le contenu de /etc/resolv.conf&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en local) =&lt;br /&gt;
[[File:logo_mongodb.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mongod --rest&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur, accéder à l&#039;URL :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install express mongoose mongoose-schema-extend express-restify-mongoose&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
* Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
* On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Création du modèle&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
  if (err) { throw err; }&lt;br /&gt;
  console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
  // On se déconnecte de MongoDB maintenant&lt;br /&gt;
  mongoose.connection.close();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mise en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrait apparaître sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;br /&gt;
&lt;br /&gt;
= Carte interactive =&lt;br /&gt;
&lt;br /&gt;
== Google Maps ==&lt;br /&gt;
[[File:logo_maps.png | 75px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Voir la [https://developers.google.com/maps/documentation/javascript/reference?hl=FR documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
            html { height: 100% }&lt;br /&gt;
            body { height: 100%; margin: 0; padding: 0 }&lt;br /&gt;
            #map-canvas { height: 100% }&lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&lt;br /&gt;
            src=&amp;quot;http://maps.google.com/maps/api/js?sensor=false&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
            function initialize() {&lt;br /&gt;
                var mapOptions = {&lt;br /&gt;
                    center: new google.maps.LatLng(45.19091427, 5.76828361), // centrer sur le campus de SMH&lt;br /&gt;
                    zoom: 15,&lt;br /&gt;
                    mapTypeId: google.maps.MapTypeId.ROADMAP&lt;br /&gt;
                };&lt;br /&gt;
                var map = new google.maps.Map(document.getElementById(&amp;quot;map-canvas&amp;quot;),&lt;br /&gt;
                        mapOptions);&lt;br /&gt;
&lt;br /&gt;
                // bounds of the desired area&lt;br /&gt;
                var allowedBounds = new google.maps.LatLngBounds( // limites du campus&lt;br /&gt;
                  new google.maps.LatLng(45.18575736, 5.75114965),&lt;br /&gt;
                  new google.maps.LatLng(45.20112086, 5.78054667)&lt;br /&gt;
                );&lt;br /&gt;
                var boundLimits = {&lt;br /&gt;
                    maxLat : allowedBounds.getNorthEast().lat(),&lt;br /&gt;
                    maxLng : allowedBounds.getNorthEast().lng(),&lt;br /&gt;
                    minLat : allowedBounds.getSouthWest().lat(),&lt;br /&gt;
                    minLng : allowedBounds.getSouthWest().lng()&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var lastValidCenter = map.getCenter();&lt;br /&gt;
                var newLat, newLng;&lt;br /&gt;
                google.maps.event.addListener(map, &#039;center_changed&#039;, function() {&lt;br /&gt;
                    center = map.getCenter();&lt;br /&gt;
                    if (allowedBounds.contains(center)) {&lt;br /&gt;
                        // still within valid bounds, so save the last valid position&lt;br /&gt;
                        lastValidCenter = map.getCenter();&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    newLat = lastValidCenter.lat();&lt;br /&gt;
                    newLng = lastValidCenter.lng();&lt;br /&gt;
                    if(center.lng() &amp;gt; boundLimits.minLng &amp;amp;&amp;amp; center.lng() &amp;lt; boundLimits.maxLng){&lt;br /&gt;
                        newLng = center.lng();&lt;br /&gt;
                    }&lt;br /&gt;
                    if(center.lat() &amp;gt; boundLimits.minLat &amp;amp;&amp;amp; center.lat() &amp;lt; boundLimits.maxLat){&lt;br /&gt;
                        newLat = center.lat();&lt;br /&gt;
                    }&lt;br /&gt;
                    map.panTo(new google.maps.LatLng(newLat, newLng));&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            google.maps.event.addDomListener(window, &#039;load&#039;, initialize);&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;map-canvas&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ajouter un POI et une infobulle :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var latLng = new google.maps.LatLng(45.187778,5.726945);&lt;br /&gt;
&lt;br /&gt;
var marker = new google.maps.Marker({&lt;br /&gt;
    position : latLng,&lt;br /&gt;
    map      : map,&lt;br /&gt;
    title    : &amp;quot;titre&amp;quot;&lt;br /&gt;
    //icon     : &amp;quot;marker.gif&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var infoWindow = new google.maps.InfoWindow({&lt;br /&gt;
    content  : &#039;infobulle&#039;,&lt;br /&gt;
    position : latLng&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Leaflet ==&lt;br /&gt;
&lt;br /&gt;
[[File:Leaflet_logo.png | 200px| left]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voir la [http://leafletjs.com/reference.html documentation de l&#039;API].&lt;br /&gt;
&lt;br /&gt;
* Intégrer la carte (+ marqueurs et popups) :&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Leaflet Example&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        var map = L.map(&#039;map&#039;).setView([45.19091427, 5.76828361], 14);&lt;br /&gt;
	L.tileLayer(&#039;http://{s}.tile.cloudmade.com/ec5901144ac74caeb0bf17aeaeea442f/997/256/{z}/{x}/{y}.png&#039;, {&lt;br /&gt;
            attribution: &#039;Map data &amp;amp;copy; &amp;lt;a href=&amp;quot;http://openstreetmap.org&amp;quot;&amp;gt;OpenStreetMap&amp;lt;/a&amp;gt; contributors, &lt;br /&gt;
                         &amp;lt;a href=&amp;quot;http://creativecommons.org/licenses/by-sa/2.0/&amp;quot;&amp;gt;CC-BY-SA&amp;lt;/a&amp;gt;,&lt;br /&gt;
                         Imagery © &amp;lt;a href=&amp;quot;http://cloudmade.com&amp;quot;&amp;gt;CloudMade&amp;lt;/a&amp;gt;&#039;,&lt;br /&gt;
            maxZoom: 18&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a marker&lt;br /&gt;
        var marker = L.marker([45.19, 5.77]).addTo(map);&lt;br /&gt;
        &lt;br /&gt;
        // add a circle&lt;br /&gt;
        var circle = L.circle([45.20, 5.76], 300, {&lt;br /&gt;
            color: &#039;red&#039;,&lt;br /&gt;
            fillColor: &#039;#f03&#039;,&lt;br /&gt;
            fillOpacity: 0.5&lt;br /&gt;
        }).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add a polygon&lt;br /&gt;
        var polygon = L.polygon([&lt;br /&gt;
            [45.189, 5.765],&lt;br /&gt;
            [45.193, 5.762],&lt;br /&gt;
            [45.192, 5.750]&lt;br /&gt;
        ]).addTo(map);&lt;br /&gt;
&lt;br /&gt;
        // add popups        &lt;br /&gt;
        marker.bindPopup(&amp;quot;&amp;lt;b&amp;gt;Hello world!&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;I am a popup.&amp;quot;).openPopup();&lt;br /&gt;
        circle.bindPopup(&amp;quot;I am a circle.&amp;quot;);&lt;br /&gt;
        polygon.bindPopup(&amp;quot;I am a polygon.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        // add a standalone popup&lt;br /&gt;
        var popup = L.popup()&lt;br /&gt;
            .setLatLng([45.185, 5.775])&lt;br /&gt;
            .setContent(&amp;quot;I am a standalone popup.&amp;quot;)&lt;br /&gt;
            .openOn(map);         &lt;br /&gt;
            &lt;br /&gt;
        // event&lt;br /&gt;
        function onMapClick(e) {&lt;br /&gt;
            popup&lt;br /&gt;
                .setLatLng(e.latlng)&lt;br /&gt;
                .setContent(&amp;quot;You clicked the map at &amp;quot; + e.latlng.toString())&lt;br /&gt;
                .openOn(map);&lt;br /&gt;
        }&lt;br /&gt;
        map.on(&#039;click&#039;, onMapClick);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Intel Galileo ==&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15398</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15398"/>
		<updated>2014-02-12T16:16:50Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Utilisation de NodeJS Mongoose MQTT et Mosquitto */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher.&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire. &lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en locale) =&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo mongod --rest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur accédé à l&#039;url :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mongoose&lt;br /&gt;
npm install express&lt;br /&gt;
npm install express-restify-mongoose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Création du modèle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
 if (err) { throw err; }&lt;br /&gt;
 console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
 // On se déconnecte de MongoDB maintenant&lt;br /&gt;
 mongoose.connection.close();&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrai apparaitre sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout d&#039;un objet JSON contenant en paramètre &#039;temp&#039; à 25.&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15395</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15395"/>
		<updated>2014-02-12T16:15:46Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher.&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire. &lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en locale) =&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo mongod --rest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur accédé à l&#039;url :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mongoose&lt;br /&gt;
npm install express&lt;br /&gt;
npm install express-restify-mongoose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Création du modèle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
 if (err) { throw err; }&lt;br /&gt;
 console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
 // On se déconnecte de MongoDB maintenant&lt;br /&gt;
 mongoose.connection.close();&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrai apparaitre sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/temperatures/ vous devriez apercevoir l&#039;ajout de l&#039;objet JSON contenant sa temperature = 25°C.&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15394</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15394"/>
		<updated>2014-02-12T16:15:15Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher.&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire. &lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en locale) =&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo mongod --rest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur accédé à l&#039;url :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mongoose&lt;br /&gt;
npm install express&lt;br /&gt;
npm install express-restify-mongoose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Création du modèle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
 if (err) { throw err; }&lt;br /&gt;
 console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
 // On se déconnecte de MongoDB maintenant&lt;br /&gt;
 mongoose.connection.close();&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrai apparaitre sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperatures&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/Temperature/ vous devriez apercevoir l&#039;ajout de l&#039;objet JSON contenant sa temperature = 25°C.&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15390</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15390"/>
		<updated>2014-02-12T16:07:53Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher.&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire. &lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en locale) =&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo mongod --rest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur accédé à l&#039;url :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mongoose&lt;br /&gt;
npm install express&lt;br /&gt;
npm install express-restify-mongoose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Création du modèle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
 if (err) { throw err; }&lt;br /&gt;
 console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
 // On se déconnecte de MongoDB maintenant&lt;br /&gt;
 mongoose.connection.close();&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrai apparaitre sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/Temperature/ vous devriez apercevoir l&#039;ajout de l&#039;objet JSON contenant sa temperature = 25°C.&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15389</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15389"/>
		<updated>2014-02-12T16:06:45Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher.&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire. &lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en locale) =&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo mongod --rest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur accédé à l&#039;url :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mongoose&lt;br /&gt;
npm install express&lt;br /&gt;
npm install express-restify-mongoose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Création du modèle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
 if (err) { throw err; }&lt;br /&gt;
 console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
 // On se déconnecte de MongoDB maintenant&lt;br /&gt;
 mongoose.connection.close();&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrai apparaitre sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&lt;br /&gt;
var query = TemperatureModel.findOne({_id: 123}, function(err, tempFind) {&lt;br /&gt;
    if (err)&lt;br /&gt;
        return handleError(err);&lt;br /&gt;
    console.log(&#039;Temp find : %d&#039;, tempFind.temp)&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t temperature -m &amp;quot;25&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/Temperature/ vous devriez apercevoir l&#039;ajout de l&#039;objet JSON contenant sa temperature = 25°C.&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15388</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15388"/>
		<updated>2014-02-12T16:04:45Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Utilisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher.&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire. &lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en locale) =&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo mongod --rest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur accédé à l&#039;url :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mongoose&lt;br /&gt;
npm install express&lt;br /&gt;
npm install express-restify-mongoose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Création du modèle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
 if (err) { throw err; }&lt;br /&gt;
 console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
 // On se déconnecte de MongoDB maintenant&lt;br /&gt;
 mongoose.connection.close();&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;temperature&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrai apparaitre sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&lt;br /&gt;
var query = TemperatureModel.findOne({_id: 123}, function(err, tempFind) {&lt;br /&gt;
    if (err)&lt;br /&gt;
        return handleError(err);&lt;br /&gt;
    console.log(&#039;Temp find : %d&#039;, tempFind.temp)&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t light -m &amp;quot;25°C&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/Temperature/ vous devriez apercevoir l&#039;ajout de l&#039;objet JSON contenant sa temperature = 25°C.&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15387</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15387"/>
		<updated>2014-02-12T16:04:28Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher.&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire. &lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en locale) =&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo mongod --rest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur accédé à l&#039;url :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mongoose&lt;br /&gt;
npm install express&lt;br /&gt;
npm install express-restify-mongoose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Création du modèle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
 if (err) { throw err; }&lt;br /&gt;
 console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
 // On se déconnecte de MongoDB maintenant&lt;br /&gt;
 mongoose.connection.close();&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;light&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.subscribe(&#039;light&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrai apparaitre sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&lt;br /&gt;
var query = TemperatureModel.findOne({_id: 123}, function(err, tempFind) {&lt;br /&gt;
    if (err)&lt;br /&gt;
        return handleError(err);&lt;br /&gt;
    console.log(&#039;Temp find : %d&#039;, tempFind.temp)&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;temperature&#039;);&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t light -m &amp;quot;25°C&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/Temperature/ vous devriez apercevoir l&#039;ajout de l&#039;objet JSON contenant sa temperature = 25°C.&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15386</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15386"/>
		<updated>2014-02-12T16:03:26Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher.&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire. &lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en locale) =&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo mongod --rest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur accédé à l&#039;url :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mongoose&lt;br /&gt;
npm install express&lt;br /&gt;
npm install express-restify-mongoose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Création du modèle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
 if (err) { throw err; }&lt;br /&gt;
 console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
 // On se déconnecte de MongoDB maintenant&lt;br /&gt;
 mongoose.connection.close();&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;light&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.subscribe(&#039;light&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrai apparaitre sur votre console.&lt;br /&gt;
&lt;br /&gt;
= Utilisation de NodeJS Mongoose MQTT et Mosquitto =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Suivre le tuto sur mosquitto, NodeJS Mongoose MQTT et Mosquitto.&lt;br /&gt;
Lancer MongoDB.&lt;br /&gt;
Ajouter une DB dans mongo &amp;quot;Client&amp;quot; (cf tuto NodeJS Mongoose MQTT).&lt;br /&gt;
&lt;br /&gt;
== Test == &lt;br /&gt;
&lt;br /&gt;
Dans le .js Node ajouter le code suivant : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var http = require(&#039;http&#039;);&lt;br /&gt;
var express = require(&#039;express&#039;);&lt;br /&gt;
var mongoose = require(&#039;mongoose&#039;);&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
var Schema = mongoose.Schema;&lt;br /&gt;
var restify = require(&#039;express-restify-mongoose&#039;)&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MONGODB  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfCollection&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
//Creation of the model&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&lt;br /&gt;
var query = TemperatureModel.findOne({_id: 123}, function(err, tempFind) {&lt;br /&gt;
    if (err)&lt;br /&gt;
        return handleError(err);&lt;br /&gt;
    console.log(&#039;Temp find : %d&#039;, tempFind.temp)&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////&lt;br /&gt;
/////// MQTT  //////////////////&lt;br /&gt;
//////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&lt;br /&gt;
client.subscribe(&#039;light&#039;);&lt;br /&gt;
var i = 0;&lt;br /&gt;
client.on(&#039;message&#039;, function(topic, message) {&lt;br /&gt;
    console.log(message);&lt;br /&gt;
    var myTemperatureModel = new TemperatureModel({_id: i++, temp: message});&lt;br /&gt;
    myTemperatureModel.save(function(err) {&lt;br /&gt;
        if (err) {&lt;br /&gt;
            throw err;&lt;br /&gt;
        }&lt;br /&gt;
        console.log(&#039;Température ajouté à la BD avec succès !&#039;);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var app = express();&lt;br /&gt;
app.configure(function() {&lt;br /&gt;
    app.use(express.bodyParser());&lt;br /&gt;
    app.use(express.methodOverride());&lt;br /&gt;
    restify.serve(app, TemperatureModel);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Run the server&lt;br /&gt;
http.createServer(app).listen(4242, function() {&lt;br /&gt;
    console.log(&amp;quot;Express server listening on port 4242&amp;quot;);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lancer ceci avec Node.&lt;br /&gt;
&lt;br /&gt;
Lancer mosquitto et publier sur le topic &#039;light&#039; : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto&lt;br /&gt;
mosquitto_pub  -t light -m &amp;quot;25°C&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par la suite, vous devriez voir le message &amp;quot;25°C&amp;quot; dans la console. &lt;br /&gt;
De plus, à l&#039;adresse http://localhost:28017/Client/Temperature/ vous devriez apercevoir l&#039;ajout de l&#039;objet JSON contenant sa temperature = 25°C.&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15385</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15385"/>
		<updated>2014-02-12T15:51:58Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Utilisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher.&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire. &lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en locale) =&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo mongod --rest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur accédé à l&#039;url :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mongoose&lt;br /&gt;
npm install express&lt;br /&gt;
npm install express-restify-mongoose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Création du modèle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
 if (err) { throw err; }&lt;br /&gt;
 console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
 // On se déconnecte de MongoDB maintenant&lt;br /&gt;
 mongoose.connection.close();&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
On fait appel à la librairie mqtt : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var mqtt = require(&#039;mqtt&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Connexion au broker sur le port 1883 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client = mqtt.createClient(1883, &#039;localhost&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On subscribe au topic &#039;light&#039;, et à chaque réception de ce topic on affiche ce qui a été reçu dans la console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.subscribe(&#039;light&#039;);&lt;br /&gt;
client.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
  console.log(message);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut également publier sur le topic &#039;light&#039; l&#039;info &#039;On&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client.publish(&#039;light&#039;, &#039;On&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
En lançant ces commandes le texte &#039;On&#039; devrai apparaitre sur votre console.&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15382</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15382"/>
		<updated>2014-02-12T15:45:39Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Prérequis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher.&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire. &lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en locale) =&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo mongod --rest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur accédé à l&#039;url :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mongoose&lt;br /&gt;
npm install express&lt;br /&gt;
npm install express-restify-mongoose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Création du modèle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
 if (err) { throw err; }&lt;br /&gt;
 console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
 // On se déconnecte de MongoDB maintenant&lt;br /&gt;
 mongoose.connection.close();&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Utilisation =&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15381</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15381"/>
		<updated>2014-02-12T15:45:09Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Mis en place NodeJs Mongoose MQTT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher.&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire. &lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en locale) =&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo mongod --rest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur accédé à l&#039;url :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mongoose&lt;br /&gt;
npm install express&lt;br /&gt;
npm install express-restify-mongoose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Création du modèle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
 if (err) { throw err; }&lt;br /&gt;
 console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
 // On se déconnecte de MongoDB maintenant&lt;br /&gt;
 mongoose.connection.close();&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
= Prérequis =&lt;br /&gt;
&lt;br /&gt;
Installation de mqtt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mqtt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Utilisation =&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15380</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15380"/>
		<updated>2014-02-12T15:43:58Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Prérequis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher.&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire. &lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en locale) =&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo mongod --rest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur accédé à l&#039;url :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent&lt;br /&gt;
Lancer les commandes :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
npm install mongoose&lt;br /&gt;
npm install express&lt;br /&gt;
npm install express-restify-mongoose&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Création du modèle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
 if (err) { throw err; }&lt;br /&gt;
 console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
 // On se déconnecte de MongoDB maintenant&lt;br /&gt;
 mongoose.connection.close();&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
En cours de construction&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets_2013-2014&amp;diff=15378</id>
		<title>Projets 2013-2014</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets_2013-2014&amp;diff=15378"/>
		<updated>2014-02-12T15:35:48Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* RICM5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt;[[Projets 2012-2013]] [[Projets|^Projets^]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=RICM5=&lt;br /&gt;
Responsable: Didier Donsez&lt;br /&gt;
&amp;lt;br&amp;gt;Démarrage : Lundi 27/01/2014 à 9H00 salle AIR (P259)&lt;br /&gt;
&amp;lt;br&amp;gt;Soutenance : Jeudi 27/03/2014 de 8H00 à 16H30 salle AIR (P259)&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM5 2013-2014&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[V(ery)MMORPG]]&lt;br /&gt;
 | Marion Dalle, Rémi Piotaix&lt;br /&gt;
 | Jacques Léger&lt;br /&gt;
 | [[V(ery)MMORPG/FicheSuivi|fiche de suivi]]&lt;br /&gt;
 | Non Open-Source&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[Analyse d’opinion « temps réel » à partir de Twitter]]&lt;br /&gt;
 | Jordan Calvi, Mame Daba Diouf, Xu Feng&lt;br /&gt;
 | Fatoumata Camara (Objet Direct)&lt;br /&gt;
 | [[Analyse d’opinion « temps réel » à partir de Twitter/FicheSuivi|fiche de suivi]]&lt;br /&gt;
 | Non Open-Source&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[SmartCampus2014]]&lt;br /&gt;
 | Morgan Bidois, Laurène Guelorget, Nicolas Husson, Thomas Nunes, Simon Planes&lt;br /&gt;
 | Didier Donsez &amp;amp; Vivien Quema&lt;br /&gt;
 | [[SmartCampus2014/FicheSuivi|fiche de suivi]]&lt;br /&gt;
 | dépôt [https://github.com/thomasNDS/SmartCampus2014]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Extensions XBMC]]&lt;br /&gt;
 | Nicolas Afonso, Jean-François Bianco, Pierre Lartigue, Elisa Martinez, Rebecca Poustis&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [[Extensions XBMC/FicheSuivi|fiche de suivi]]&lt;br /&gt;
 | à venir&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[SmartSelfService]]&lt;br /&gt;
 | Walid Bibi, Lotfi Manseur&lt;br /&gt;
 | Didier Donsez &amp;amp; Jérome Maisonnasse&lt;br /&gt;
 | [[SmartSelfService/FicheSuivi|fiche de suivi]]&lt;br /&gt;
 | à venir&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[RobAIR2014]] (Extension de Visioconférence [[MConf]])&lt;br /&gt;
 | NON CHOISI&lt;br /&gt;
 | Didier Donsez + UFRGS&lt;br /&gt;
 | &lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | Réseaux de capteurs&lt;br /&gt;
 | Reporté 2015&lt;br /&gt;
 | Bernard Tourancheau&lt;br /&gt;
 | &lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Le projet se déroule en parallèle de l&#039;UE MPI (Management de Projets Innovants) avec Stéphanie Diligent et Emmanuelle Tréhoust : &lt;br /&gt;
* Mardi 28/01 matin&lt;br /&gt;
* Lundi 3/02 matin&lt;br /&gt;
* Vendredi 7/02 matin&lt;br /&gt;
* Lundi 17/02 après-midi&lt;br /&gt;
* Mardi 18/03 matin.&lt;br /&gt;
&lt;br /&gt;
== projet biométrie ==&lt;br /&gt;
Application android de serrure vocale et faciale [http://air.imag.fr/index.php/Projet_biometrie-2013-2014#Serrure_faciale]&lt;br /&gt;
&lt;br /&gt;
=RICM4=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A FAIRE pour le lundi 20/01:&#039;&#039;&#039;&lt;br /&gt;
* Création des fiches par groupe (cliquer sur la fiche correspondante)&lt;br /&gt;
* Création de projet sur github  par projet/groupe&lt;br /&gt;
* Ecriture du journal de bord dans la fiche correspondante   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Plein temps du 7 au 10 Avril.&lt;br /&gt;
&amp;lt;br&amp;gt;Soutenance : ?? Avril.&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets RICM4 2013-2014&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[COQP]]&lt;br /&gt;
 | Flavien PEYRE, Clément VALENTIN&lt;br /&gt;
 | Didier Donsez, Pierre Dubois&lt;br /&gt;
 | [[Proj-2013-2014-COQP| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/peyref/COQP &#039;&#039;&#039;projet&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[RobAIR | RobAIR 1]]&lt;br /&gt;
 | Augustin HUSSON, Jérôme BARBIER&lt;br /&gt;
 | Didier Donsez, Amr Alyafi&lt;br /&gt;
 | [[Proj-2013-2014-RobAIR-1| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]/[[Proj-2013-2014-RobAIR-1-SRS| &#039;&#039;&#039;Fiche SRS&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/Nexucis/Rob-Air &#039;&#039;&#039;projet&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[RobAIR | RobAIR 2]]&lt;br /&gt;
 | Paul	MARIAGE, David LEVAYER&lt;br /&gt;
 | Didier Donsez, Amr Alyafi&lt;br /&gt;
 | [[Proj-2013-2014-RobAIR-2| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/DavidLevayer/robAIR &#039;&#039;&#039;projet&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Sign2Speech]]&lt;br /&gt;
 | Arthur CLERC-GHERARDI, Patrick Alexandre PEREA&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[Proj-2013-2014-Sign2Speech| &#039;&#039;&#039;Fiche (FR)&#039;&#039;&#039;]],[[Proj-2013-2014-Sign2Speech-English| &#039;&#039;&#039;Fiche (EN)&#039;&#039;&#039;]],[[Proj-2013-2014-Sign2Speech-Spanish| &#039;&#039;&#039;Fiche (SP)&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com &#039;&#039;&#039;projet&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[StartAIR |StartAIR]]&lt;br /&gt;
 | William BOBO, Corentin RICOU&lt;br /&gt;
 | Fabrice Dubost&lt;br /&gt;
 | [[Proj-2013-2014-StartAIR-2| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/will421/StartAir_Safe &#039;&#039;&#039;projet&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[Scanner 3D volant de batiments]]&lt;br /&gt;
 | SUN Xuan, GUO Kai, ZHANG Zhengmeng&lt;br /&gt;
 | Didier Donsez, Vivien Quema &lt;br /&gt;
 | [[Proj-2013-2014-flying-3Dscan| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com &#039;&#039;&#039;projet&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | [[CannonBall de voitures autonomes]]&lt;br /&gt;
 | Benoît PERRUCHE, Jules LEGROS &lt;br /&gt;
 | Didier Donsez, Vivien Quema &lt;br /&gt;
 | [[Proj-2013-2014-Cannonball-de-Voitures-Autonomes| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/jules0legros/CannonBall_de_voitures_autonomes &#039;&#039;&#039;projet&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[Serious Game: Handicap, parole et geste]]&lt;br /&gt;
 | Mehdi NAIT-SIDOUS, Pierre-Henri GINOUX&lt;br /&gt;
 | Olivier Richard, Marion Dohen et Estelle Gillet-perret, Amelie Rochet-Capellan&lt;br /&gt;
 | [[Proj-2013-2014-SeriousGame-Parole-et-Geste| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/MehdiNS/SeriousGame &#039;&#039;&#039;projet&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
 | [[Python sur STM32F4]]&lt;br /&gt;
 | Xavier XIA Ye, Isabelle TAO Xinxiu&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [[Proj-2013-2014-Python-STM32F4| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/qazxiaye/Python_sur_STM32 &#039;&#039;&#039;projet&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
 | [[SmartCitizen 2014]]&lt;br /&gt;
 | Rodolphe FREBY, Paul	LABAT&lt;br /&gt;
 | Didier Donsez, Jérome Maisonnasse&lt;br /&gt;
 | [[Proj-2013-2014-SmartCitizen2014| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/PaulLabat/SmartCitizen &#039;&#039;&#039;projet&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 !scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
 | [[Open DynDNS]]&lt;br /&gt;
 | Tianming GUO (RED), Lionel BOEY&lt;br /&gt;
 | Jacques Lemordant, Bruno Marmol, Didier Donsez&lt;br /&gt;
 | [[Proj-2013-2014-Open_DynDNS| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/umpri5450/Open_DynDNS &#039;&#039;&#039;projet&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 12&lt;br /&gt;
 | [[Bras Robotique Handicap | Bras robotique à commande gestuelle pour le handicap 1]]&lt;br /&gt;
 | El Hadji Malick FALL, Adji Ndeye Ndate SAMBE&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [[Proj-2013-2014-BrasRobot-Handicap-1| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com &#039;&#039;&#039;projet&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 13&lt;br /&gt;
 | [[Bras Robotique Handicap | Bras robotique à commande gestuelle pour le handicap 2]]&lt;br /&gt;
 | Adam	TIAMIOU, Radhoane BEN YOUNES&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [[Proj-2013-2014-BrasRobot-Handicap-2| &#039;&#039;&#039;Fiche&#039;&#039;&#039;]]&lt;br /&gt;
 | [https://github.com/zeld4/ProjetRobot &#039;&#039;&#039;projet&#039;&#039;&#039;]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=3I4=&lt;br /&gt;
* [[STM32 Lego Mindstorm Brick]] : Didier Donsez&lt;br /&gt;
* [[Base de recharge autonome pour les robots RobAIR]]&lt;br /&gt;
&lt;br /&gt;
=M2PGI UE PM2M=&lt;br /&gt;
L&#039;UE [[Projets M2PGI Services Machine-to-Machine]] a pour objectif de prototyper une application [[Machine-to-Machine]] (M2M)&lt;br /&gt;
&amp;lt;br&amp;gt;Démarrage : semaine du 25/02/2014 (18 étudiants en 9 groupes)&lt;br /&gt;
&lt;br /&gt;
* [[Client MQTT pour OBD]] sur Android&lt;br /&gt;
* Capteur DIY avec [[Arduino]] dans [[OpenHAB]]&lt;br /&gt;
* [[SmartCity2014]]&lt;br /&gt;
* [[SmartCitizen 2014]]&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=Année A définir=&lt;br /&gt;
* [[Open DynDNS]]&lt;br /&gt;
* [[IllumiRoom]]&lt;br /&gt;
* [[Emergency mobile app]] Nicolas Palix pour TIS, PRI et RICM&lt;br /&gt;
* [[OwnPOI]] ownCloud plugin and osmand plugin to share POI and favorite positions. Nicolas Palix.&lt;br /&gt;
* [[OwnList]] ownCloud plugin and Android app to share a TODO list. Nicolas Palix.&lt;br /&gt;
* [[XBMC Reflexive Remote]] Dynamic remote control for XBMC. Nicolas Palix.&lt;br /&gt;
* [[Bracelet électronique de monitoriing de l&#039;alcoolémie]]&lt;br /&gt;
* [[Oxymètre DIY]]&lt;br /&gt;
* [[PinSound]]&lt;br /&gt;
* [[Extension du support STM32Fx-Discovery dans libopencm3]] : Olivier Richard&lt;br /&gt;
* [[Arduino et libopencm3]] : Olivier Richard&lt;br /&gt;
* [[Data Acquisition System et Stm32f4-Discovery]] : Olivier Richard&lt;br /&gt;
* [[Distributed Data Storage System]] : Olivier Richard&lt;br /&gt;
* [[Dashboard based on w2ui]]&lt;br /&gt;
* [[Environnement logiciel pour FabLab]] : Olivier Richard&lt;br /&gt;
* [[Environnement logiciel pour le Live Programming]] : Olivier Richard&lt;br /&gt;
* [[VirtualPinball]]&lt;br /&gt;
* Tondeuse dessinatrice&lt;br /&gt;
* [[ImmersiveDog]] Nicolas Glade, Didier Donsez&lt;br /&gt;
* Projet avec [[OpenROV]] ???? : Didier Donsez&lt;br /&gt;
* [[Sphero]] malin (Michael Périn) (2 etudiants)&lt;br /&gt;
&lt;br /&gt;
=Réserve (boite à idées)=&lt;br /&gt;
&lt;br /&gt;
# [[Tag et Paint Ball en réalité augmentée]] (Michaël Périn) &lt;br /&gt;
# [[Passe moi ton fichier]] (Michaël Périn) &lt;br /&gt;
# [[Extensions à Fab Server]] (Jean-Michel Molenaar) sous reserve (CM ou SR)&lt;br /&gt;
# [[Table multijeux de café 2.0]]&lt;br /&gt;
# [[ GPIO_Qemu_RasPI| Emulation des GPIO dans QEMU pour le carte Raspberry Pi]] (Olivier Richard)&lt;br /&gt;
# [[ Qemu et STM32F0-Discovery ]] (Olivier Richard)&lt;br /&gt;
# [[Serrure à clé MIDI multifactorielle]] (Didier Donsez)&lt;br /&gt;
# [[Table interactive musicale]] (Didier Donsez)&lt;br /&gt;
# [[iMailbox]] (Didier Donsez)&lt;br /&gt;
# [[AmILight]] (eclairage d&#039;ambience intelligent) (Didier Donsez)&lt;br /&gt;
# [[PDAmeetPDA]] (synchronisation d&#039;agenda) (Michaël Périn)&lt;br /&gt;
# [[1 000 000 VMs]] (expérimentation d&#039;application distribuée à très grande échelle) (Olivier Richard) (2-3 RICM4)&lt;br /&gt;
# [[Multiple Kinect]] (utilisation simultanée de plusieurs Kinect) (Olivier Richard) (RICM ou 3I)&lt;br /&gt;
# [[Kinect musicale]] (Didier Donsez) (RICM)&lt;br /&gt;
# [[Ktechlab Simavr Arduino | Ktechlab et integration de Simavr(Arduino)]] (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# Ocaml on AVR (Arduino)&lt;br /&gt;
# Ocaml on Cortex-M3&lt;br /&gt;
# [[Arduino on STM32 Discovery]]&lt;br /&gt;
# [[Reverse Geocache Puzzle Box]]&lt;br /&gt;
# [[OSGi ME]] (Didier Donsez)&lt;br /&gt;
# [[Affichage Etudiant à Polytech]]&lt;br /&gt;
# Synthèse 3D + motion capture Kinect&lt;br /&gt;
# Logiciel d&#039;[[apprentissage du calcul]] sur tablette Android (reconnaissance de chiffres manuscrits)&lt;br /&gt;
# Plancher de verre (saint gobain) à la [http://www.wat.tv/video/mickael-jackson-billie-jean-oewj_2ey2h_.html Mickael Jackson dans Billie Jean] ! woo&lt;br /&gt;
# [[Ktechlab Simavr Arduino | Ktechlab et integration de Simavr(Arduino)]] (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# [[CNC]]&lt;br /&gt;
# [[Idées en Vrac]]&lt;br /&gt;
# Scheme Everywhere (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# [[Projet Station Météo]]&lt;br /&gt;
# Ocaml on AVR (Arduino)&lt;br /&gt;
# [[Table interactive musicale]] (Didier Donsez)&lt;br /&gt;
# [[AmILight]] (eclairage d&#039;amnbience intelligent) (Didier Donsez)&lt;br /&gt;
# [[Cube pointeur]] d&#039;activité ingénieur&lt;br /&gt;
# [http://www.instructables.com/id/Puppeteer-Motion-Capture-Costume/ Puppeteer Motion-Capture Costume]&lt;br /&gt;
# [[Musical Staircase]] @ Polytech (Didier Donsez, 1 RICM4 + 1 3I4)&lt;br /&gt;
# [[Total Recall]] (Didier Donsez)&lt;br /&gt;
# [[SoundMachine]]&lt;br /&gt;
# [[IGN-OSM|Importation de données IGN publiques dans OSM]]&lt;br /&gt;
# [[Speed-limit-OSM|Analyse de traces GPX pour déterminer les limitations de vitesse]]&lt;br /&gt;
# [[Multi perceptual cameras]] (Didier Donsez)&lt;br /&gt;
# [[Photomaton 3D]] (Didier Donsez)&lt;br /&gt;
# [[ArduCopter]]&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15377</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15377"/>
		<updated>2014-02-12T15:28:49Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Mis en place NodeJs Mongoose */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher.&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire. &lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en locale) =&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo mongod --rest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur accédé à l&#039;url :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Effectuer le point précédent &lt;br /&gt;
&lt;br /&gt;
== Connexion à la BD ==&lt;br /&gt;
&lt;br /&gt;
Afin de se connecter à la BD réalisée précédemment :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Connection to the a mongodb database path localhost:port/nameOfDB&lt;br /&gt;
mongoose.connect(&amp;quot;mongodb://localhost:27017/Client&amp;quot;, function(err) {&lt;br /&gt;
    if (err) {&lt;br /&gt;
        throw err;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On définit le schéma d&#039;une collection en définissant son id et un champs &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Definition of a schema&lt;br /&gt;
var Temperature = new Schema({&lt;br /&gt;
    _id: Number,&lt;br /&gt;
    temp: Number&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Création du modèle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var TemperatureModel = mongoose.model(&#039;temperature&#039;, Temperature);&lt;br /&gt;
&lt;br /&gt;
//Creation of an object which respect the model define before&lt;br /&gt;
var myTemperatureModel = new TemperatureModel({_id: 1473, temp: 16});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;un élèment dans la base de donnée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//saved the temperature in the mongodb database&lt;br /&gt;
myTemperatureModel.save(function(err){&lt;br /&gt;
 if (err) { throw err; }&lt;br /&gt;
 console.log(&#039;Commentaire ajouté avec succès !&#039;);&lt;br /&gt;
 // On se déconnecte de MongoDB maintenant&lt;br /&gt;
 mongoose.connection.close();&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
En cours de construction&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15368</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15368"/>
		<updated>2014-02-12T14:49:43Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher.&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire. &lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en locale) =&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo mongod --rest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur accédé à l&#039;url :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose =&lt;br /&gt;
&lt;br /&gt;
En cours de construction&lt;br /&gt;
&lt;br /&gt;
= Mis en place NodeJs Mongoose MQTT =&lt;br /&gt;
&lt;br /&gt;
En cours de construction&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15367</id>
		<title>SmartCampus2014/Tutoriels</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=SmartCampus2014/Tutoriels&amp;diff=15367"/>
		<updated>2014-02-12T14:45:51Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Liens =&lt;br /&gt;
&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014 Présentation] du projet SmartCampus&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/FicheSuivi Fiche de suivi] du projet&lt;br /&gt;
* [http://air.imag.fr/index.php/SmartCampus2014/CDC Cahier des charges]&lt;br /&gt;
&lt;br /&gt;
= Mosquitto =&lt;br /&gt;
&lt;br /&gt;
Mosquitto est une implémentation de MQTT, un protocole de M2M de type publish-subscribe.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
* Documentation officielle : [http://mosquitto.org/documentation/]&lt;br /&gt;
* Pour Debian/Ubuntu et dérivés: [http://mosquitto.org/2013/01/mosquitto-debian-repository/]&lt;br /&gt;
* Ensuite télécharger le client en ligne de commande:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install mosquitto python-mosquitto&lt;br /&gt;
sudo apt-get install mosquitto-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemple de communication ==&lt;br /&gt;
* Dans un premier terminal on lance le broker :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;mosquitto&lt;br /&gt;
1391181009: mosquitto version 1.2.3 (build date 2013-12-04 21:22:55+0000) starting&lt;br /&gt;
1391181009: Using default config.&lt;br /&gt;
1391181009: Opening ipv4 listen socket on port 1883.&lt;br /&gt;
1391181009: Opening ipv6 listen socket on port 1883.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur certaines distributions, mosquitto peut se trouver dans /usr/sbin/.&lt;br /&gt;
&lt;br /&gt;
* Dans un second terminal on crée un topic &amp;quot;toto&amp;quot; sur lequel on publie des messages.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dans un dernier terminal on publie sur le topic &amp;quot;toto&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_pub  -t toto -m &amp;quot;Hello world &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour communiquer entre différents devices, il faut lancer le broker sur chacun d&#039;eux, puis indiquer lors du subscribe l&#039;adresse IP du publisher.&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mosquitto_sub -d -h 192.168.0.1 -t toto &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Comment utiliser openHAB avec Mosquitto ? =&lt;br /&gt;
&lt;br /&gt;
== Requis ==&lt;br /&gt;
Il faut en premier lieu ajouter le bundle MQTT bindings (disponible [http://code.google.com/p/openhab/downloads/detail?name=openhab-addons-1.3.1.zip&amp;amp;can=2&amp;amp;q= ici]) dans le dossier &amp;quot;addons&amp;quot; du runtime openHAB.&lt;br /&gt;
&lt;br /&gt;
Ne pas oublier de lancer le broker Mosquitto (commande mosquitto).&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL du broker dans le fichier de configuration d&#039;openHAB (e.g. openhab.cfg) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mqtt:mosquitto.url=tcp://localhost:1883&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Subscribe ==&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, et l&#039;action effectuée sur openHAB sur réception des messages :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;lt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
où &amp;lt;type&amp;gt; est soit &amp;quot;command&amp;quot; soit &amp;quot;state&amp;quot; (pour l&#039;update), et où &amp;lt;transformation&amp;gt; est &amp;quot;default&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number Temperature_GF_Corridor 	&amp;quot;Temperature [%.1f °C]&amp;quot;	&amp;lt;temperature&amp;gt;	(Temperature, GF_Corridor) { mqtt=&amp;quot;[mosquitto:temperature:state:default]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut alors publier avec &amp;quot;mosquitto_pub&amp;quot; sur le topic défini (e.g. &amp;quot;temperature&amp;quot;) et voir le changement dans l&#039;interface openHAB.&lt;br /&gt;
&lt;br /&gt;
== Publish ==&lt;br /&gt;
&lt;br /&gt;
Le principe  est relativement semblable. On lance &amp;quot;mosquitto_sub&amp;quot; sur le topic voulu (e.g. &amp;quot;light&amp;quot;).&lt;br /&gt;
Lier un item à un topic en indiquant l&#039;alias du broker, le type des messages transmis, le déclencheur de l&#039;envoi de message, et la transformation :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{ mqtt=&amp;quot;&amp;gt;[&amp;lt;broker&amp;gt;:&amp;lt;topic&amp;gt;:&amp;lt;type&amp;gt;:&amp;lt;trigger&amp;gt;:&amp;lt;transformation&amp;gt;]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch Light_Outdoor_Garage &amp;quot;Garage&amp;quot; (Outdoor, Lights)  { mqtt=&amp;quot;&amp;gt;[mosquitto:light:command:ON:1],&amp;gt;[mosquitto:light:command:OFF:0]&amp;quot; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ici, lorsque l&#039;interrupteur de la lumière du garage est actionné, le subscriber Mosquitto reçoit 0 ou 1.&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, voir le wiki officiel [https://github.com/openhab/openhab/wiki/MQTT-Binding ici].&lt;br /&gt;
&lt;br /&gt;
= Comment se connecter en SSH à la carte Galileo =&lt;br /&gt;
Voir le tutoriel officiel d&#039;Intel : [[Media:Galileo_GettingStarted.pdf | Galileo_GettingStarted.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Configuration de la carte Galileo ==&lt;br /&gt;
* Avant tout, il est important de toujours alimenter la carte Galileo avant de la brancher à l’ordinateur !&lt;br /&gt;
* Connecter le Galileo à l’ordinateur avec le câble USB (port USB client de la carte).&amp;lt;br&amp;gt;&lt;br /&gt;
* Lancer l&#039;IDE Arduino et sélectionner le port série (Outils &amp;gt; Port série). Si le port série n&#039;est pas reconnu, essayez de relancer l&#039;IDE en Administrateur.&lt;br /&gt;
* Updater le firmware via l’IDE Arduino (Aide &amp;gt; Firmware Update). Cette étape est primordiale pour pouvoir se connecter en SSH. Il est aussi important de ne pas lancer de sketchs avant ou pendant la mise à jour.&lt;br /&gt;
* Créer un nouveau sketch :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  // put your setup code here, to run once:&lt;br /&gt;
  system(&amp;quot;telnetd -l /bin/sh&amp;quot;);&lt;br /&gt;
  system(&amp;quot;ifconfig eth0 169.254.1.1 netmask 255.255.0.0 up&amp;quot;); //adapter l’adresse ip et le masque&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // put your main code here, to run repeatedly: &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attention, il faut garder la boucle &#039;&#039;loop&#039;&#039; dans le code, même vide, pour ne pas avoir d&#039;erreur.  Dans cet exemple, nous lançons le service Telnet mais si on utilise seulement SSH, cette ligne n&#039;est pas nécessaire. &lt;br /&gt;
&lt;br /&gt;
* Flasher ce code sur la carte Galileo.&lt;br /&gt;
&lt;br /&gt;
== Connexion en SSH ==&lt;br /&gt;
* Relier le Galileo à l’ordinateur avec le câble Ethernet.&lt;br /&gt;
* Sur windows la connexion se fera automatiquement, mais sur Linux il faut changer l’adresse IP de la carte Ethernet pour être sur le même réseau que le Galileo :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ifconfig eth0 169.254.1.2 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Faire un ping vers l’adresse ip 169.254.1.1 pour vérifier que la connexion fonctionne (si cela ne marche pas, il peut être judicieux de déconnecter la prise secteur de la carte et de la rebrancher).&lt;br /&gt;
&lt;br /&gt;
* Lorsque le ping fonctionne, il est possible de se connecter en root à la carte Galileo, soit en utilisant un client SSH de type PuTTY, ou via la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@169.254.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mis en place d&#039;une base de donnée mongodb (en locale) =&lt;br /&gt;
&lt;br /&gt;
== [http://docs.mongodb.org/manual/installation/ Installation et lancement] == &lt;br /&gt;
&lt;br /&gt;
Par la suite il est possible d&#039;accéder à différentes informations de votre BD via l&#039;url : &lt;br /&gt;
* http://localhost:28017/&lt;br /&gt;
&lt;br /&gt;
== Accéder au contenu ==&lt;br /&gt;
&lt;br /&gt;
Pour accéder au contenu d&#039;une collection de votre base de donnée, lancer la base de donnée en utilisant la commande :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo mongod --rest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis dans votre navigateur accédé à l&#039;url :&lt;br /&gt;
* http://localhost:28017/nomDeVotreBD/nomDeVotreCollection/&lt;br /&gt;
&lt;br /&gt;
== Ajouter une base de donnée == &lt;br /&gt;
&lt;br /&gt;
Pour ajouter une base de donnée lancer mongo en version shell :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mongo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser l&#039;ensemble des bases de données :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
show dbs&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
Afin de créer une base de donnée ou se connecter à l&#039;une d&#039;elle : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use nomBD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=15292</id>
		<title>Projet biometrie-2013-2014</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=15292"/>
		<updated>2014-02-10T14:22:05Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Serrure vocale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projet biométrie 2013-2014&lt;br /&gt;
= Présentation=&lt;br /&gt;
==Sujet==&lt;br /&gt;
Application android de serrure vocale et faciale.&lt;br /&gt;
&lt;br /&gt;
Dépot git [https://github.com/thomasNDS/biometry-lock-facial-and-vocal]&lt;br /&gt;
&lt;br /&gt;
==Technologies ==&lt;br /&gt;
* Android&lt;br /&gt;
* OpenCV&lt;br /&gt;
* Lium&lt;br /&gt;
* Eclipse&lt;br /&gt;
* git&lt;br /&gt;
=Sous projets =&lt;br /&gt;
== IHM ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Walid&lt;br /&gt;
* Elisa&lt;br /&gt;
===Sujet ===&lt;br /&gt;
== Serrure vocale ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Nicolas&lt;br /&gt;
* Morgan&lt;br /&gt;
* Lotfi&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure vocale : &lt;br /&gt;
* Enrôlement du locuteur&lt;br /&gt;
* Identification du locuteur&lt;br /&gt;
=== Technologies === &lt;br /&gt;
* Utilisation de [http://www-lium.univ-lemans.fr/diarization/doku.php/welcome LIUM speaker]&lt;br /&gt;
=== Etapes ===&lt;br /&gt;
==== Enrôlement du locuteur ====&lt;br /&gt;
* Enregistrement de la parole du locuteur (création d&#039;un fichier wav contenant la parole du locuteur)&lt;br /&gt;
* Transcription du fichier wav en mfcc [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
* Puis [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
==== Identification du locuteur ==== &lt;br /&gt;
* Enregistrement de la parole du locuteur (récupération d&#039;un fichier wav)&lt;br /&gt;
* Transcription du fichier wav en seg [http://www-lium.univ-lemans.fr/diarization/doku.php/feature_set lienLIUM]&lt;br /&gt;
* Identification du locuteur [http://www-lium.univ-lemans.fr/diarization/doku.php/speaker_identification lienLyum]&lt;br /&gt;
&lt;br /&gt;
== Reconnaissance de visages ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Rebecca&lt;br /&gt;
* Thomas&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure faciale :&lt;br /&gt;
* Ajout d&#039;un individu dans la base de donnée&lt;br /&gt;
* Authentification d&#039;un individus&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
* Reconnaissance de visage avec OpenCV&lt;br /&gt;
&lt;br /&gt;
=== Tâches ===&lt;br /&gt;
*Identification de la personne (authentification, identif sans connaissance, classe de rejet)&lt;br /&gt;
*BD : avec tous les visages (plusieurs photos par personne (10 avec la même position))&lt;br /&gt;
*Authentification&lt;br /&gt;
*Présentation de la personne, choix entre plusieurs profils, ok ou rejet&lt;br /&gt;
*2 phases : apprentissage et évaluation&lt;br /&gt;
*Algo : entrainement des modèles et évaluation&lt;br /&gt;
*Capture du visage + extraction des points d’intérêt (openCV)&lt;br /&gt;
*Tester rejet avec utilisateur sans profil&lt;br /&gt;
*Verifier centrage du visage&lt;br /&gt;
===Etapes===&lt;br /&gt;
*Regarder projet de l’an passé&lt;br /&gt;
*Tuto de openCV/Android&lt;br /&gt;
*Commencer application : &lt;br /&gt;
*Saisie d’image (prise photo + BD)&lt;br /&gt;
*Points d’intérêt (openCV ?)&lt;br /&gt;
*Authentification (entrainement et évaluation)&lt;br /&gt;
*Intégration avec IHM&lt;br /&gt;
*Multi-image (si simple)&lt;br /&gt;
*Identification avec rejet&lt;br /&gt;
*Identification sans rejet&lt;br /&gt;
&lt;br /&gt;
===Tutoriel: installation du NDK et configuration avec Eclipse ===&lt;br /&gt;
* Téléchargement du NDK [http://developer.android.com/tools/sdk/ndk/index.html#Installing]&lt;br /&gt;
* Extraire le dossier&lt;br /&gt;
* Dans Eclipse : Window &amp;gt; Preferences &amp;gt; Android &amp;gt; NDK coller le path du lien vers le dossier d&#039;installation&lt;br /&gt;
* Dans le projet : clic droit sur le projet &amp;gt; project properties &amp;gt; C/C++ Build &amp;gt; Tool Chain Editor et selectionné Android Builder en tant que builder.&lt;br /&gt;
* Tuto pour installer OpenCV [http://www.seneschal.fr/index.php/recherches/84-installation-android-et-opencv-pour-android]&lt;br /&gt;
&lt;br /&gt;
=Projets des années passées =&lt;br /&gt;
* Reconnaissance faciale [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_RECONNAISSANCE_FACIALE]&lt;br /&gt;
* Reconnaissance de signatures [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_SIGNATURES]&lt;br /&gt;
&lt;br /&gt;
=Avancement=&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
* Constitution des groupes&lt;br /&gt;
* Prise en main du SDK android&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK et connexion nos téléphones&lt;br /&gt;
* Installation et configuration du NDK android&lt;br /&gt;
* Installation de la librairie OpenCV pour android&lt;br /&gt;
* Etude des projets des années passées&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK &lt;br /&gt;
* Installation de [http://developer.android.com/tools/help/adb.html adb]&lt;br /&gt;
* Connexion des téléphones via adb&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 3==&lt;br /&gt;
==Semaine 4==&lt;br /&gt;
==Semaine 5==&lt;br /&gt;
==Semaine 6==&lt;br /&gt;
==Semaine 7==&lt;br /&gt;
==Semaine 8==&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=15289</id>
		<title>Projet biometrie-2013-2014</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=15289"/>
		<updated>2014-02-10T14:11:27Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Serrure vocale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projet biométrie 2013-2014&lt;br /&gt;
= Présentation=&lt;br /&gt;
==Sujet==&lt;br /&gt;
Application android de serrure vocale et faciale.&lt;br /&gt;
&lt;br /&gt;
Dépot git [https://github.com/thomasNDS/biometry-lock-facial-and-vocal]&lt;br /&gt;
&lt;br /&gt;
==Technologies ==&lt;br /&gt;
* Android&lt;br /&gt;
* OpenCV&lt;br /&gt;
* Lium&lt;br /&gt;
* Eclipse&lt;br /&gt;
* git&lt;br /&gt;
=Sous projets =&lt;br /&gt;
== IHM ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Walid&lt;br /&gt;
* Elisa&lt;br /&gt;
===Sujet ===&lt;br /&gt;
== Serrure vocale ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Nicolas&lt;br /&gt;
* Morgan&lt;br /&gt;
* Lotfi&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure vocale : &lt;br /&gt;
* Enrôlement du locuteur&lt;br /&gt;
* Identification du locuteur&lt;br /&gt;
=== Technologies === &lt;br /&gt;
* Utilisation de [http://www-lium.univ-lemans.fr/diarization/doku.php/welcome LIUM speaker]&lt;br /&gt;
&lt;br /&gt;
== Reconnaissance de visages ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Rebecca&lt;br /&gt;
* Thomas&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure faciale :&lt;br /&gt;
* Ajout d&#039;un individu dans la base de donnée&lt;br /&gt;
* Authentification d&#039;un individus&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
* Reconnaissance de visage avec OpenCV&lt;br /&gt;
&lt;br /&gt;
=== Tâches ===&lt;br /&gt;
*Identification de la personne (authentification, identif sans connaissance, classe de rejet)&lt;br /&gt;
*BD : avec tous les visages (plusieurs photos par personne (10 avec la même position))&lt;br /&gt;
*Authentification&lt;br /&gt;
*Présentation de la personne, choix entre plusieurs profils, ok ou rejet&lt;br /&gt;
*2 phases : apprentissage et évaluation&lt;br /&gt;
*Algo : entrainement des modèles et évaluation&lt;br /&gt;
*Capture du visage + extraction des points d’intérêt (openCV)&lt;br /&gt;
*Tester rejet avec utilisateur sans profil&lt;br /&gt;
*Verifier centrage du visage&lt;br /&gt;
===Etapes===&lt;br /&gt;
*Regarder projet de l’an passé&lt;br /&gt;
*Tuto de openCV/Android&lt;br /&gt;
*Commencer application : &lt;br /&gt;
*Saisie d’image (prise photo + BD)&lt;br /&gt;
*Points d’intérêt (openCV ?)&lt;br /&gt;
*Authentification (entrainement et évaluation)&lt;br /&gt;
*Intégration avec IHM&lt;br /&gt;
*Multi-image (si simple)&lt;br /&gt;
*Identification avec rejet&lt;br /&gt;
*Identification sans rejet&lt;br /&gt;
&lt;br /&gt;
===Tutoriel: installation du NDK et configuration avec Eclipse ===&lt;br /&gt;
* Téléchargement du NDK [http://developer.android.com/tools/sdk/ndk/index.html#Installing]&lt;br /&gt;
* Extraire le dossier&lt;br /&gt;
* Dans Eclipse : Window &amp;gt; Preferences &amp;gt; Android &amp;gt; NDK coller le path du lien vers le dossier d&#039;installation&lt;br /&gt;
* Dans le projet : clic droit sur le projet &amp;gt; project properties &amp;gt; C/C++ Build &amp;gt; Tool Chain Editor et selectionné Android Builder en tant que builder.&lt;br /&gt;
* Tuto pour installer OpenCV [http://www.seneschal.fr/index.php/recherches/84-installation-android-et-opencv-pour-android]&lt;br /&gt;
&lt;br /&gt;
=Projets des années passées =&lt;br /&gt;
* Reconnaissance faciale [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_RECONNAISSANCE_FACIALE]&lt;br /&gt;
* Reconnaissance de signatures [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_SIGNATURES]&lt;br /&gt;
&lt;br /&gt;
=Avancement=&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
* Constitution des groupes&lt;br /&gt;
* Prise en main du SDK android&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK et connexion nos téléphones&lt;br /&gt;
* Installation et configuration du NDK android&lt;br /&gt;
* Installation de la librairie OpenCV pour android&lt;br /&gt;
* Etude des projets des années passées&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK &lt;br /&gt;
* Installation de [http://developer.android.com/tools/help/adb.html adb]&lt;br /&gt;
* Connexion des téléphones via adb&lt;br /&gt;
&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 3==&lt;br /&gt;
==Semaine 4==&lt;br /&gt;
==Semaine 5==&lt;br /&gt;
==Semaine 6==&lt;br /&gt;
==Semaine 7==&lt;br /&gt;
==Semaine 8==&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=15288</id>
		<title>Projet biometrie-2013-2014</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=15288"/>
		<updated>2014-02-10T14:10:35Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Semaine 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projet biométrie 2013-2014&lt;br /&gt;
= Présentation=&lt;br /&gt;
==Sujet==&lt;br /&gt;
Application android de serrure vocale et faciale.&lt;br /&gt;
&lt;br /&gt;
Dépot git [https://github.com/thomasNDS/biometry-lock-facial-and-vocal]&lt;br /&gt;
&lt;br /&gt;
==Technologies ==&lt;br /&gt;
* Android&lt;br /&gt;
* OpenCV&lt;br /&gt;
* Lium&lt;br /&gt;
* Eclipse&lt;br /&gt;
* git&lt;br /&gt;
=Sous projets =&lt;br /&gt;
== IHM ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Walid&lt;br /&gt;
* Elisa&lt;br /&gt;
===Sujet ===&lt;br /&gt;
== Serrure vocale ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Nicolas&lt;br /&gt;
* Morgan&lt;br /&gt;
* Lotfi&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure vocale : &lt;br /&gt;
* Enrôlement du locuteur&lt;br /&gt;
* Identification du locuteur&lt;br /&gt;
=== Technologies === &lt;br /&gt;
* Utilisation de [http://www-lium.univ-lemans.fr/diarization/doku.php/welcome LIUM speaker]&lt;br /&gt;
&lt;br /&gt;
== Reconnaissance de visages ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Rebecca&lt;br /&gt;
* Thomas&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure faciale :&lt;br /&gt;
* Ajout d&#039;un individu dans la base de donnée&lt;br /&gt;
* Authentification d&#039;un individus&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
* Reconnaissance de visage avec OpenCV&lt;br /&gt;
&lt;br /&gt;
=== Tâches ===&lt;br /&gt;
*Identification de la personne (authentification, identif sans connaissance, classe de rejet)&lt;br /&gt;
*BD : avec tous les visages (plusieurs photos par personne (10 avec la même position))&lt;br /&gt;
*Authentification&lt;br /&gt;
*Présentation de la personne, choix entre plusieurs profils, ok ou rejet&lt;br /&gt;
*2 phases : apprentissage et évaluation&lt;br /&gt;
*Algo : entrainement des modèles et évaluation&lt;br /&gt;
*Capture du visage + extraction des points d’intérêt (openCV)&lt;br /&gt;
*Tester rejet avec utilisateur sans profil&lt;br /&gt;
*Verifier centrage du visage&lt;br /&gt;
===Etapes===&lt;br /&gt;
*Regarder projet de l’an passé&lt;br /&gt;
*Tuto de openCV/Android&lt;br /&gt;
*Commencer application : &lt;br /&gt;
*Saisie d’image (prise photo + BD)&lt;br /&gt;
*Points d’intérêt (openCV ?)&lt;br /&gt;
*Authentification (entrainement et évaluation)&lt;br /&gt;
*Intégration avec IHM&lt;br /&gt;
*Multi-image (si simple)&lt;br /&gt;
*Identification avec rejet&lt;br /&gt;
*Identification sans rejet&lt;br /&gt;
&lt;br /&gt;
===Tutoriel: installation du NDK et configuration avec Eclipse ===&lt;br /&gt;
* Téléchargement du NDK [http://developer.android.com/tools/sdk/ndk/index.html#Installing]&lt;br /&gt;
* Extraire le dossier&lt;br /&gt;
* Dans Eclipse : Window &amp;gt; Preferences &amp;gt; Android &amp;gt; NDK coller le path du lien vers le dossier d&#039;installation&lt;br /&gt;
* Dans le projet : clic droit sur le projet &amp;gt; project properties &amp;gt; C/C++ Build &amp;gt; Tool Chain Editor et selectionné Android Builder en tant que builder.&lt;br /&gt;
* Tuto pour installer OpenCV [http://www.seneschal.fr/index.php/recherches/84-installation-android-et-opencv-pour-android]&lt;br /&gt;
&lt;br /&gt;
=Projets des années passées =&lt;br /&gt;
* Reconnaissance faciale [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_RECONNAISSANCE_FACIALE]&lt;br /&gt;
* Reconnaissance de signatures [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_SIGNATURES]&lt;br /&gt;
&lt;br /&gt;
=Avancement=&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
* Constitution des groupes&lt;br /&gt;
* Prise en main du SDK android&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK et connexion nos téléphones&lt;br /&gt;
* Installation et configuration du NDK android&lt;br /&gt;
* Installation de la librairie OpenCV pour android&lt;br /&gt;
* Etude des projets des années passées&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK et connexion nos téléphones&lt;br /&gt;
* Installation de [http://developer.android.com/tools/help/adb.html adb]&lt;br /&gt;
===IHM===&lt;br /&gt;
&lt;br /&gt;
==Semaine 3==&lt;br /&gt;
==Semaine 4==&lt;br /&gt;
==Semaine 5==&lt;br /&gt;
==Semaine 6==&lt;br /&gt;
==Semaine 7==&lt;br /&gt;
==Semaine 8==&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=15285</id>
		<title>Projet biometrie-2013-2014</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projet_biometrie-2013-2014&amp;diff=15285"/>
		<updated>2014-02-10T14:05:17Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: /* Serrure vocale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projet biométrie 2013-2014&lt;br /&gt;
= Présentation=&lt;br /&gt;
==Sujet==&lt;br /&gt;
Application android de serrure vocale et faciale.&lt;br /&gt;
&lt;br /&gt;
Dépot git [https://github.com/thomasNDS/biometry-lock-facial-and-vocal]&lt;br /&gt;
&lt;br /&gt;
==Technologies ==&lt;br /&gt;
* Android&lt;br /&gt;
* OpenCV&lt;br /&gt;
* Lium&lt;br /&gt;
* Eclipse&lt;br /&gt;
* git&lt;br /&gt;
=Sous projets =&lt;br /&gt;
== IHM ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Walid&lt;br /&gt;
* Elisa&lt;br /&gt;
===Sujet ===&lt;br /&gt;
== Serrure vocale ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Nicolas&lt;br /&gt;
* Morgan&lt;br /&gt;
* Lotfi&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure vocale : &lt;br /&gt;
* Enrôlement du locuteur&lt;br /&gt;
* Identification du locuteur&lt;br /&gt;
=== Technologies === &lt;br /&gt;
* Utilisation de [http://www-lium.univ-lemans.fr/diarization/doku.php/welcome LIUM speaker]&lt;br /&gt;
&lt;br /&gt;
== Reconnaissance de visages ==&lt;br /&gt;
===Equipe===&lt;br /&gt;
* Rebecca&lt;br /&gt;
* Thomas&lt;br /&gt;
===Sujet ===&lt;br /&gt;
Serrure faciale :&lt;br /&gt;
* Ajout d&#039;un individu dans la base de donnée&lt;br /&gt;
* Authentification d&#039;un individus&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
* Reconnaissance de visage avec OpenCV&lt;br /&gt;
&lt;br /&gt;
=== Tâches ===&lt;br /&gt;
*Identification de la personne (authentification, identif sans connaissance, classe de rejet)&lt;br /&gt;
*BD : avec tous les visages (plusieurs photos par personne (10 avec la même position))&lt;br /&gt;
*Authentification&lt;br /&gt;
*Présentation de la personne, choix entre plusieurs profils, ok ou rejet&lt;br /&gt;
*2 phases : apprentissage et évaluation&lt;br /&gt;
*Algo : entrainement des modèles et évaluation&lt;br /&gt;
*Capture du visage + extraction des points d’intérêt (openCV)&lt;br /&gt;
*Tester rejet avec utilisateur sans profil&lt;br /&gt;
*Verifier centrage du visage&lt;br /&gt;
===Etapes===&lt;br /&gt;
*Regarder projet de l’an passé&lt;br /&gt;
*Tuto de openCV/Android&lt;br /&gt;
*Commencer application : &lt;br /&gt;
*Saisie d’image (prise photo + BD)&lt;br /&gt;
*Points d’intérêt (openCV ?)&lt;br /&gt;
*Authentification (entrainement et évaluation)&lt;br /&gt;
*Intégration avec IHM&lt;br /&gt;
*Multi-image (si simple)&lt;br /&gt;
*Identification avec rejet&lt;br /&gt;
*Identification sans rejet&lt;br /&gt;
&lt;br /&gt;
===Tutoriel: installation du NDK et configuration avec Eclipse ===&lt;br /&gt;
* Téléchargement du NDK [http://developer.android.com/tools/sdk/ndk/index.html#Installing]&lt;br /&gt;
* Extraire le dossier&lt;br /&gt;
* Dans Eclipse : Window &amp;gt; Preferences &amp;gt; Android &amp;gt; NDK coller le path du lien vers le dossier d&#039;installation&lt;br /&gt;
* Dans le projet : clic droit sur le projet &amp;gt; project properties &amp;gt; C/C++ Build &amp;gt; Tool Chain Editor et selectionné Android Builder en tant que builder.&lt;br /&gt;
* Tuto pour installer OpenCV [http://www.seneschal.fr/index.php/recherches/84-installation-android-et-opencv-pour-android]&lt;br /&gt;
&lt;br /&gt;
=Projets des années passées =&lt;br /&gt;
* Reconnaissance faciale [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_RECONNAISSANCE_FACIALE]&lt;br /&gt;
* Reconnaissance de signatures [http://air.imag.fr/index.php/PAGE_WIKI_ETUDIANTS_2012-13_SIGNATURES]&lt;br /&gt;
&lt;br /&gt;
=Avancement=&lt;br /&gt;
==Semaine 1==&lt;br /&gt;
* Constitution des groupes&lt;br /&gt;
* Prise en main du SDK android&lt;br /&gt;
&lt;br /&gt;
==Semaine 2==&lt;br /&gt;
===Serrure faciale===&lt;br /&gt;
* Définitions des tâches&lt;br /&gt;
* Installation et configuration du SDK et connexion nos téléphones&lt;br /&gt;
* Installation et configuration du NDK android&lt;br /&gt;
* Installation de la librairie OpenCV pour android&lt;br /&gt;
* Etude des projets des années passées&lt;br /&gt;
&lt;br /&gt;
===Serrure vocale===&lt;br /&gt;
===IHM===&lt;br /&gt;
==Semaine 3==&lt;br /&gt;
==Semaine 4==&lt;br /&gt;
==Semaine 5==&lt;br /&gt;
==Semaine 6==&lt;br /&gt;
==Semaine 7==&lt;br /&gt;
==Semaine 8==&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:TISensorTagPremiereUtilisation2.png&amp;diff=13922</id>
		<title>File:TISensorTagPremiereUtilisation2.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:TISensorTagPremiereUtilisation2.png&amp;diff=13922"/>
		<updated>2013-11-25T23:17:50Z</updated>

		<summary type="html">&lt;p&gt;Nicolas.Husson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nicolas.Husson</name></author>
	</entry>
</feed>