Projets-2015-2016-OpenSmartCampus

From air
Jump to: navigation, search

Contents

Présentation du Projet

Introduction

Le projet nommé smart Campus est un projet étudiant visant à rendre un domaine universitaire intelligent. Il a vu le jour il y a 3 ans et il a comme but principal de rendre plus pratique la vie sur le campus ainsi que la gestion de celui-ci.

Le projet en 2014-2015 : SmartCampus2014-2015

Le projet en 2013-2014 : SmartCampus2013-2014

Tutoriel de déploiement de l'application sur Raspberry Pi Tutoriel installation

Le tutoriel ci-dessus est un résumé des étapes décrites dans les sprint ci-dessous. Grâce à ce tutoriel on obtient rapidement le flux créé sur node-red les cartes dans l'état nécessaire au fonctionnement de l'application. Après l'édition du fichier settings.json, la carte est prête à envoyer des données via MQTT.

Tutoriel de déploiement de l'application sur serveur(s) Ubuntu 14.04 Tutoriel installation

Tutoriel de déploiement de l'application coté client via Meteor Tutoriel installation

L'équipe

RICM5 :

  • Quentin Torck
  • Vivien Michel
  • Jérémy Hammerer
  • Rama Codazzi
  • Zhengmeng Zhang

DUT :

  • Andréas Gillet-Pascal

Encadrants :

  • Didier Donsez
  • Vivien Quéma

Organisation du Projet

Dans le but de mener à bien notre projet, nous avons décider d'utiliser la méthode agile Scrum. Le projet étant à faire dans un court intervalle de temps (2 mois), nous avons décidé de faire des sprints d'une semaine chacun.

Sprint 1 (du 25 Janvier au 31 Janvier)

Matériel récupéré:

Travail effectué:

    • Etude de l'existant
    • Etude des données de la métro de Grenoble, savoir si l'on peut leur apporter de nouvelles données ou non.

A voir

Sprint 2 (du 1 Février au 7 Février)

Architecture réalisée avec Didier Donsez :

Architecture SmartCampus 2016.png

L'utilisation de Météor avec une base de donnée MongoDB est possible . Une alternative à explorer est Sails.js. Étant donné le caractère exploratoire de ce sprint, l'architecture peut être amenée à changer. Notamment en ce qui concerne l'utilisation de Météor ou la base de donnée MongoDB.

Taches :

  • Explorer l'utilisation de Météor et de Kadira à travers des tutoriels. Installation locale pour l'instant.
  • Installer un serveur Mosquito/MQTT(S) pour les communications avec les cartes

Tutoriel pour connecter Node-Red avec serveur MQTT. Ceci est à adapter suivant la configuration dans settings.json

Regarder ce flux existant proposant un envoie sécurisé sur le serveur

Regarder ce flux existant pour envoyer des données reçues par la Z-Wave

  • Explorer l'utilisation de Twilio pour l'envoie de sms automatique depuis les cartes. Technologies JavaScript utilisable sur serveur Node.js

Prendre en main sa rasberry pi à distance

http://www.framboise314.fr/prenez-la-main-a-distance-sur-votre-raspberry-pi-avec-vnc/

Installation sur Rasberry Pi Wheezy

  • Lancer node-red sur la rasberry-pi B+ grâce aux commandes suivantes dans un script. Sur l'OS Debian wheezy.
#!/bin/bash
#install nodered
sudo apt-get  remove nodered
wget http://node-arm.herokuapp.com/node_archive_armhf.deb
sudo dpkg -i node_archive_armhf.deb
sudo apt-get install build-essential python-dev python-rpi.gpio
# install Node-red
sudo npm install -g --unsafe-perm node-red
echo  nmp--------------------->[OK]

Tentatives de démarrer le serveur au boot de la carte sur l'OS Wheezy. Malgré plusieurs tentatives (utilisation de update.rc, de PM2) le serveur ne démarre pas au lancement.

Utilisation de la plateforme AWS d'Amazon

  • Création d'un compte gratuit sur Amazon d'une validité d'un an.
  • Création d'une machine virtuelle Ubuntu sur la plateforme.
  • Installation et mise en marche d'un serveur Mosquitto (broker) sur la machine virtuelle. (voir installation)

Sur l'OS Debian Jessie : Une version de node-red est pré-installée.

Pour passer de Wheezy à Jessie (solution adoptée) : installation de NOOBS puis de Debian Jessie via cet utilitaire. Il est nécessaire d'avoir une carte SD vierge ou de la formater.

Mise à jour des logiciels :

sudo apt-get update
sudo apt-get upgrade

le système pré-installé sur Jessie permet de lancer au démarrage et, en cas de panne, de relancer le serveur node-red grâce à nodered.service.

Pour l'activer, taper la commande :

sudo systemctl enable nodered.service

Installation des noeuds RFXcom pour le récepteur 433 Mhz et du noeud pour le récepteur Zwave

Il est nécessaire d'installer npm pour ajouter des noeuds à node-red:

sudo apt-get install npm

Les noeuds sont à installer dans le dossier $HOME/.node-red/ pour qu'un seul utilisateur y ai accès. La commande npm sans -g installera le noeud dans le dossier courant. Sinon avec l'option -g et les droits root dans le dossier node_module/node-red. Pour que le noeud apparaisse, il faut redémarrer node-red.

Téléchargement du noeud RFXcom

Noeud RfxCom

Installation des noeuds Zwave

Noeud Zwave

Ce noeud dépend d'une version d'Openzwave avec nodejs : node-openzave. Il faut donc installer la librairie OpenZwave.

Téléchargement de la version 1.4 OpenZwave 1.4 en zip.

Dans le répertoire décompressé.

make
sudo make install

La commande make, provoquant la compilation, peut mettre du temps. Il est possible qu'une librairie soit manquante et provoque une erreur.

Pour y remédier :

sudo apt-get install libudev-dev

La commande make install copie les librairies openzwave dans /usr/local/lib. Si node-red n'est pas dans /usr/local/lib/node_modules/ il faut déplacer les librairies dans /usr/lib/.

Pour vérifier la bonne installation, lors de lancement de node-red, un noeud Zwave in et Zwave out sont respectivement dans Input et Output.

L'installation du noeud peut provoquer une erreur si la version de nodejs est inférieure ou égale à 0.10.29

Configuration des ports

http://www.latelierdugeek.fr/2015/02/02/domotique-partie-8-ajout-du-support-du-z-wave-dans-domoticz/

Mettre à jour nodejs

sudo apt-get remove nodered
sudo apt-get remove nodejs nodejs-legacy
sudo apt-get remove npm
Raspberry Pi 2
curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -
sudo apt-get install -y build-essential python-dev python-rpi.gpio nodejs
Raspberry Pi
wget http://node-arm.herokuapp.com/node_archive_armhf.deb
sudo dpkg -i node_archive_armhf.deb
sudo apt-get install build-essential python-dev python-rpi.gpio

Une fois nodejs mis à jour(nodejs -v > 0.12.x ou 4.2.x)

sudo npm cache clean
sudo npm install -g --unsafe-perm  node-red
Remettre les scripts de lancement et de démarrage
sudo wget https://raw.githubusercontent.com/quentin74/Smartcampus/master/node-red/nodered.service -O /lib/systemd/system/nodered.service
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop
sudo chmod +x /usr/bin/node-red-st*
sudo systemctl daemon-reload

Sprint 3 (du 8 Février au 14 Février)

Mise en place d'un VPN

Dans le but de pouvoir avancer plus facilement dans le projet, nous avons dû mettre en place un serveur VPN car les ports utilisés par MQTT sont bloqués sur le réseau de l'université. Il est donc impossible pour une Raspberry Pi de communiquer avec un serveur mosquitto basé sur la plateforme AWS sans passer par un VPN (en utilisant le réseau de l'université). L'avantage d'utiliser un VPN est aussi de sécuriser les communications entre les Raspberry pi et le serveur mosquitto. Les étapes de la mise en place de notre VPN sont les suivantes :

  • Création d'une nouvelle machine virtuelle dans le but d'installer un serveur VPN openVPN dans le cluster d'amazon (voir installation).
  • Installation d'un client VPN sur une Raspberry

Mise en place d'une base de donnée InfluxDB

Installation sur le serveur amazone d'une base InfluxDB:

wget https://s3.amazonaws.com/influxdb/influxdb_0.10.1-1_amd64.deb
sudo dpkg -i influxdb_0.10.1-1_amd64.deb

Installation de Grafana

Connexion avec la base InfluxDB et première visualisation de données émises par les capteurs météorologiques. Avec ce Framework, nous pouvons visualiser l'occupation d'une salle ou non, en fonction des capteurs de présence.

Grafana.png


  • Nous pouvons également afficher des graphique pour voir les variations de température au cours du temps.

Grafana2.png

Modification du flow Node-red

Récupération d'informations depuis le récepteur RfxCom et envoie vers le broker mqtt.

Sprint 4 (du 15 Février au 21 Février)

Mise en place de Meteor

Installation des différents paquets nécessaires à la mise en place de l'application

# curl https://install.meteor.com/ | sh
# meteor add meteorhacks:npm
# npm install mqtt --save
# sudo npm install fs

Meteor.png

Mise en place de Leaflet

# meteor add bevanhunt:leaflet

Leaflet.png

Cliquer sur une des 2 salles équipées et obtenir les informations en temps réels

Passage en MQTTS

Changement du port de configuration sur le flow node-red : 1883 -> 8883 Activation du cryptage tls/ssl et désactivation de la vérification du certificat du serveur. En effet, tous les certificats générés sont auto-signés. Afin que la connexion puisse se faire il faut, soit un certificat signé par une autorité reconnue, soit désactiver la vérification.

Pour Telegraf (voir installation ci-dessous)

Changement du port et définition de la clé et du certificat pour la communication cryptée dans le fichier de configuration.

Pour le broker mosquitto, nous avons changé le fichier config dans le but de pouvoir utiliser TLS/SSL. Le fichier config est complété comme suivant :

# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
pid_file /var/run/mosquitto.pid
#TLS
require_certificate false
listener 8883
cafile /etc/mosquitto/ca_certificates/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
#
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
allow_anonymous true
password_file /etc/mosquitto/passwd

Passage en MQTTS coté Meteor

Il faut modifier le fichier settings.json

#"mqtt_options" : {
#		"port": <your port>,
#		"host": "<your host>",
#		"clientId": "GEST",
#		"username": "<your username>",
#		"password": "<your password>",
#		"qos":1,
#		"keepalive": 60,
#		"reconnectPeriod": 1000,
#		"protocol": "mqtts",
#		"protocolVersion": 4,
#		"clean": true,
#		"encoding": "utf8",
#		"key" : "<your key>",
#		"ca" : "<your ca>",
#		"rejectUnauthorized": false,
#		"cert" :"<your cert>"
#	}

Installation de Telegraf

La dernière release précompilée pour Ubuntu(0.10.2) ne contient pas le plugin "mqtt_consumer". Elle ne sera disponible que dans la release 0.10.3. Il faut donc l'installer depuis les sources si la version n'est pas supérieur à 0.10.3. Afin de faciliter le démarrage automatique de Telegraf, on installe via le package debian puis on remplacera l'exécutable par une version plus récente:

Dernière version disponible actuellement

Installation de GO

Sur AWS, une version de go est pré-existante mais non fonctionnelle car non à jour.

sudo rm /usr/bin/go

Choisir la dernière version de go : GO

Décompresser l'archive:

tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz

Ajouter dans /etc/profile ou $HOME/.profile. L'exemple ci-dessous n'est fonctionnel que si vous avez décompréssé dans /usr/local:

export PATH=$PATH:/usr/local/go/bin

Créer la variable GOPATH:

 export GOPATH=<YOUR_PATH>

Télécharger les sources:

go get github.com/influxdata/telegraf

Aller dans le dossier de téléchargements:

cd $GOPATH/src/github.com/influxdata/telegraf
make
sudo cp telegraf /usr/bin/

Configuration de Telegraf

Un exemple de fichier de configuration est obtenu via la commande suivante :

telegraf -sample-config -input-filter mqtt_consumer -output-filter influxdb > YOUR_FILE.conf

Exemple configuration mqtt

Changez l'adresse et le port du broker mqtt et de la base influxDB. Choissez les topics auxquels souscrire, le format des données reçu de la part du broker (json,influx...)

Si vous utilisez des certificats auto-signés ne pas oublier

skip_verify_ssl = true

Le fichier de configuration lu au démarrage se situe dans :

/etc/telegraf

Pour renommer le fichier de configuration lu au démarrage :

sudo nano /etc/init.d/telegraf

Changer la ligne avec la variable confile=/etc/telegraf/YOUR_FILE.conf

Passage d'influxDB en https

Dans le fichier /etc/influxdb/infludb.conf :

Modifier les attributs de [admin] et [http] en mettant https = true et le chemin vers la clé/certificat pour influxDB. Une subtilité est à retenir pour influxDB ssl. En effet, la clé et le certificat doivent être dans le même fichier :

cat key.pem crt.pem > key_crt.pem

Sprint 5 (du 29 Février au 6 Mars)

Ajout de Widget dans grafana integrant cartographie leaflet

Attention --> cette tache ne sera pas réalisée car sur le forum de grafana ou d'autres nous avons vu qu'intégrer de la cartographie était dans les projet à venir de grafana, par consequent il est inutile de perdre du temps sur une tache qui sera prochainement réalisée.

Mise en place d'une PKI

Une PKI (Public Key Infrastructure) permet de gérer la création, la récupération et la révocation de certificats. Nous avons, dans le cadre de la sécurisation de notre plateforme, d'en créer une dans le but de fournir des certificats à nos différentes machines. Nous avons décider de suivre le tutoriel suivant :

Nous avons donc commencé à travailler sur ce tutoriel. Cependant, celui-ci semble être obsolète (certaines technologies semblent avoir évoluées depuis et donc certaines actions du tutoriel ne fonctionnent plus). Nous avons perdu beaucoup de temps à essayer de résoudre ces problèmes.

Configuration d'OpenVPN, dans le but d'ajouter de nouveaux utilisateurs

Au départ, nous avions alloué une instance Amazon dédiée à OpenVPN. Plus précisément, c'était une image dans laquelle OpenVPN était préinstallé. Nous n'arrivions pas à ajouter de nouveaux utilisateurs pour ce VPN avec cette instance. Nous avons donc décidé de supprimer l'instance Amazon d'OpenVPN et de l'installer par nous même sur notre instance principale. Après avoir fait cela, nous arrivions à créer différents utilisateurs pour notre VPN. Cependant, nous avons remarqué qu'OpenVPN limite le nombre de connexions à deux utilisateurs maximum (en même temps).

Sprint 6 (du 7 Mars au 13 Mars)

Equipement des salles avec les raspberry pi , les capteurs enocean, les capteurs Zwave

Ajout de fichier de configuration dans l'application meteor, pour faciliter le déploiement. Ajout par exemple de chemins génériques.

Intégration Kadira à l'application Meteor, Dashboard disponible pour l'administrateur

Installation du package :

# meteor add meteorhacks:kadira

Ajout au settings.json

#"kadira": { 
# "appId": "<your id>", 
# "appSecret": "<your app>" 
#}

Kadira.PNG

Sprint 7 (du 14 Mars au 17 Mars)

  • Pour lancer l'application Meteor : lancer le script deploy_meteor.sh : attention à modifier le Host pour deployer sur votre serveur
  • Equipement des salles air et fablab avec les capteurs Zwave, Rfxcom
  • Contact des administrateurs réseaux de Polytech pour pouvoir débloquer les ports