PM2M-2016-Presence/Suivi
Capteurs de présence en WiFi
Etudiants M2PGI PM2M: Etudiants
Liens de la présentation : présentation
Dépôt Git : github
Documents : Rapport - Transparents - Flyer - Video
Contexte
Dans le context de notre projet M2M, nous avons mis en place une architecture pour la visualisation et la supervision en temps réel des consommations d'énergie dans une maison. Cette architecture permet la supervision des consommations de chaque appareil dans le but d'avoir un suivi plus détaillé. Cela permettra d'entamer des analyses et des traitements intéressants tels que classer les appareils par ordre de consommation (l'appareil le plus énergivore); alertes en cas de surconsommation; alertes en cas de consommation anormale.
Objectif du projet
L'objectif du projet est de mesurer les consommations d'énergie des appareils électriques.
Collecte de donnée
Pour atteindre notre objectif, nous avons un micro contrôller permettant de se connecter à un réseau wifi. Nous utiliserons l'outil EMoncms pour la manipulation des feeds et la visualisation en direct des consommations.
Matériel utilisé
- ESP8266 : un microcontrôleur produit par la société chinoise Espressif intégrant un module Wifi.
- SCT-013 Current Clamp : Capteur de courant alternatif auto-alimenté.
Technologies utilisées
Mosquitto- Node-RED : outil (serveur Web) développé par IBM consommant peu de ressources, capable de fonctionner sur un Raspberry Pi qui permet très rapidement de concevoir et déployer des scénarios d'automatisation dans une maison.
- AWS EC2 : service Web qui fournit une capacité de calcul redimensionnable dans le cloud.
- OpenEnergyMonitor : projet visant à développer des outils open-source de suivi énergétique pour nous aider à appréhender notre utilisation de l'énergie, nos systèmes énergétiques, et le défi de l'énergie soutenable.
- Arduino
Plan de développement
Devellopement du code embarqué
Cette partie consiste à faire tourner du code sur le microcontroleur esp8266 dans le but de mettre en place un client http capable de connecter à un eborne wifi et d'envoyer une requête HTTP (GET) sur le cloud avec les valeurs de consommation collectés. Nous avons utilisé la librairie ESP8266WiFi pour la mise en place du client Wifi et la librairie emonlib pour la transformation automatiquement des entrées analogiques en valeurs exploitables. Ci-dessous le flux de données :
Ci-dessous le code source déployé sur le microcontroleur esp8266 :
#include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino
//needed for library
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <stdlib.h>
#include "EmonLib.h" // Include Emon Library
EnergyMonitor emon1; // Create an instance
const int ANALOG_PIN = A0; // The only analog pin on the Thing
const char host[] = "ec2-52-29-210-27.eu-central-1.compute.amazonaws.com";
const int port = 80;
const char nodename[] = "sct013";
const char apiKey[] = "&apikey=7af3b1772fa1b624ef73925ba117d562";
//const char* ssid = "Livebox-3294";
//const char* password = "E9D45C9A35245222FDE9DCD973";
const char* ssid = "Xperia Z1_b5d9";
const char* password = "dadoudidou";
// Use WiFiClient class to create TCP connections
WiFiClient client;
void setup()
{
Serial.begin(115200);
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
emon1.current(A0, 29.1); // Current: input pin, calibration.
}
void loop()
{
Serial.print("waiting a delay\n");
delay(5000);
Serial.print("connecting to ");
Serial.println(host);
double Irms = emon1.calcIrms(1480); // Calculate Irms only
Serial.println("begin loop");
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
// This will send the request to the server
const String url = "/input/post.json?node=" + String(nodename) + "&json={power:" + String(Irms * 1.414 * 235 / 10) + "}" + String(apiKey);
client.print("GET " + url + " HTTP/1.1\r\n" +
"Host:" + host + "\r\n" +
"Connection: close\r\n\r\n");
Serial.print("Requesting URL: ");
Serial.println(url);
delay(10);
// Read all the lines of the reply from server and print them to Serial
while (client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line);
}
Serial.println();
Serial.println("closing connection");
}