==== Présentation du projet ==== Yann SEREE - Créneau matin – //yann.seree@gmail.com// \\ Kaiwen YU - Créneau matin \\ __Nom du projet__ : Économiseur de batterie ==== Description et scénario ==== Le but de l’application est de permettre à l’utilisateur d’économiser sa batterie en fonction de son emplacement et de ses habitudes d’utilisation. \\ L’application permet de cartographier la consommation de la batterie du smartphone de l’utilisateur.\\ Trois clusters se dégageront de cette carte : les lieux où on ne consomme pas beaucoup de batterie, les lieux où on en consomme moyennement et ceux où on consomme beaucoup.\\ Ainsi l’utilisateur pourra consulter cette carte et ainsi déterminer ou non s’il doit recharger son smartphone en fonction de l’endroit qu’il souhaite se rendre.\\ Ainsi en fonction de la position de l’utilisateur, on lui conseillera de recharger ou non son téléphone.\\ ==== Matériel disponible ==== __Nom du smartphone__ : OnePlus 3 \\ __Caractéristiques techniques__ : https://oneplus.net/fr/3/specs \\ __Résumé des fiches techniques en termes de ressource__ : \\ * Capteurs : * capteur d’empreinte digitale * capteur Hall * accéléromètre, * gyroscope * capteur de proximité * capteur de luminosité ambiante * boussole électronique *Localisation * GPS * GLONASS * BeiDou __OS__ : Android 6.0.1 \\ __Environnement logiciel__ : *Android Studio (dernière version) *Projet GitHub ==== Ressources utilisées dans le projet ==== __Capteurs et data collectés par le mobile__ : *Coordonnées GPS *Consommation de la batterie __Liste des SDK et API__ : cf. Faisabilité du projet __Cible mobile__: la cible mobile sera les smartphones tournant sous Android 4.1 (//Jelly Bean//) ou supérieur couvrant ainsi 97,1 % des terminaux Android. ==== Algorithme ==== Avec les données récoltées nous recherchons à faire 3 clusters : les lieux où on ne consomme pas beaucoup de batterie, les lieux où on en consomme moyennement et ceux où on consomme beaucoup.\\ Un algorithme **non supervisé** de type **Clustering** comme **K-means** sera donc utilisé. ==== Faisabilité du projet ==== Le projet est faisable, en effet les données sont facilement récupérables.\\ Pour la géolocalisation de l'utilisateur, Google recommande d’utiliser l’API Google Play services location\\ [[https://developer.android.com/training/location/index.html?hl=fr]]\\ L’API Google Maps sera utilisée pour afficher la carte à l’utilisateur\\ [[https://developers.google.com/maps/documentation/android-api/?hl=fr]]\\ Le SDK d’Android nous permet d’avoir accès au pourcentage de batterie courante \\ [[https://developer.android.com/training/monitoring-device-state/battery-monitoring.html]]. ===== Rendu final ===== ====Version SEREE==== ===Code=== {{:cours:plim:projet16_17:gr2:smartbatteryseree.zip|apk de l'application Android}} \\ {{:cours:plim:projet16_17:gr2:kmeanseree.zip|serveur (jar)}} ===Code source=== {{:cours:plim:projet16_17:gr2:serveur_source_seree.zip|Code source du serveur}}\\ [[https://mega.nz/#!385xGbyB!8BcT37Qehw9UQWvaKO1OzvKxcvNdKszIH11tSCh0KWk|Code source de l'application Android]] ===Serveur=== ==Lancement du serveur== Pour lancer le serveur télécharger le .zip du serveur ci-dessus (section Code). \\ Extraire le .zip puis lancer //**start.bat**// qui permettra d'exécuter le jar.\\ Le serveur tourne sur le port 3456, veuillez vous assurer que le port n'est pas pris par un autre processus. \\ Le fichier //values.json// contient les données collectées, le kmean est exécuté à partir des données contenues dans ce fichier. Ce fichier json est mis automatiquement à jour lorsque de nouvelles données collectées sont reçues par le serveur. ===Application Android=== ==Capture d'écran== {{:cours:plim:projet16_17:gr2:ip.png?250|}} {{:cours:plim:projet16_17:gr2:map.png?250|}}{{:cours:plim:projet16_17:gr2:liste.png?250|}} \\ ==Lancement de l'application Android== \\ * Télécharger le zip contenant l'apk (lien ci-dessus) * Extraire le zip et lancer l'installation de l'apk sur le smartphone * Rentrez tout d'abord l'adresse IP de la machine qui exécute le serveur (comme sur la première capture d'écran ci-dessus) et cliquez sur le bouton //START// * Acceptez ensuite la permission pour la localisation * Cliquer sur le bouton //REFRESH KMEAN// pour obtenir le Kmean du serveur, comme sur la seconde capture d'écran ci-dessus, vous obtiendrez les centroids ainsi que les points correspondants aux clusters (vert correspondant à une consommation de batterie faible, bleu à une consommation moyenne et rouge à une consommation forte). \\ L'utilisateur peut afficher uniquement certain cluster en cochant/décochant les chekbox (faible/moyenne/forte) \\ Il est également possible de consulter tout les points en cliquant sur l'onglet //Liste// (la consommation affichée correspond au pourcentage de batterie utilisé par heure). ==Notes techniques de l'application== \\ L'application utilise un //**AlarmManager**// ([[https://developer.android.com/reference/android/app/AlarmManager.html|]]) permettant ainsi de lancer la collecte des données toutes les **15** minutes, ce qui évite d'avoir un //service// ou un //asynctask// tournant en continu en arrière plan. De ce fait l'application consomme très peu de batterie et n'influence donc pas sur les données collectées de la consommation de batterie. \\ Les données collectées sont stockés directement dans un **fichier interne** ([[https://developer.android.com/guide/topics/data/data-storage.html#filesInternal|doc]]) sous format JSON afin de pouvoir utiliser l'application en **hors-connexion**. \\ Si une connexion internet est présente (le smartphone et le serveur devant être sur le même WiFi), le contenu de ce fichier est envoyé au serveur. \\ Du côté du serveur, les données reçues sont automatiquement placées dans un fichier JSON (//values.json//). \\ Lorsque l'utilisateur actionne le bouton //REFRESH KMEAN//, une requête est envoyé au serveur : \\ * le serveur exécute l'algorithme du **Kmean** depuis les données contenues dans son fichier //values.json // * le résultat de ce Kmean est stocké dans un autre fichier JSON (//kmean.json//) * le contenu de ce fichier est envoyé à l'application Android.\\ Une fois le kmean reçu, l'application le stocke dans un fichier interne. Ainsi les différents clusters du kmean sont également accessibles hors-connexion. ====Version YU====