====== Wifi Locator ====== ==== Présentation du projet ==== * Nom 1 : Chebaane Meriem * Créneau (AM ou PM) : AM * Nom 2 : Meimari Sherif * Créneau (AM ou PM) : AM * Nom du Projet : Wifi Locator === L'idée principale du Projet === De nos jours, être connecté est désormais une nécessité et la preuve est dans la croissance des souscriptions aux réseaux téléphoniques et l’achat de Smartphones. En effet tout est en ligne. Grâce à notre connexion Internet, nous sommes reliés au monde: nos contacts, nos réseaux sociaux, nos sites commerciaux, notre e-mail et ainsi de suite. Le monde est devenu dépendant d’Internet au point que même les choses les plus traditionnels nous les faisons également en ligne. C'est alors dans le but de répondre à ces besoins qu'on souhaite réaliser une application mobile en Android qui permet, via le GPS et le détecteur de wifi, d'afficher une carte qui représente la région avec le meilleur signal des réseaux Wifi "publics" disponibles aux alentours de l'utilisateur. En effet grâce à une base de données, ces résultats ne sont pas limités au périmètre du Smartphone de l'utilisateur mais il aura à tout moment une vision complète de toutes les connexions wifi publics possibles sur une seule carte (grâce à l'affichage de toutes les connexions de tous les utilisateurs de l'application sur une seule carte utilisant Google Maps API). === Un scénario d'illustration du Projet === Avec ce scénario on présente l'efficacité de notre application d'une façon claire: * Bob est un touriste qui vient d'arriver à Nice il a une connexion très lente alors qu'il a besoin d'accéder au wifi pour partager des vidéos des lieux visités avec sa famille. C'est dans ce cas que notre application intervient: * Bob clique sur le bouton de recherche pour savoir les localisations des connexions wifi publics disponibles à Nice. D'où une carte qui sera affichée présentant la région avec le meilleur signal de chaque wifi public dans la région publique qu'il examine. Grâce à ce système, le touriste est capable de détecter les meilleures connnexions (en terme de force de signal) même s'ils sont à 50 mètres plus loin de sa position (limite maximal de chaque détecteur). ==== Matériel disponbile ==== * Référence du SmartPhone : http://www.gsmarena.com/sony_xperia_z1_compact-5753.php * Tout au long de ce projet on va utiliser : Sony Xperia Z1 Compact Fiche technique * Ecran: - Taille: 4.3 pouces - Résolution: 720 x 1280 pixels - 16 millions de couleurs - IPS LCD Tactile, multipoints (plus de 10 multitouches), capacitive - Protection: Shatter proof glass, affichage trilumineux & X-Reality Engine * Multimédia: - Appareil photo 20.7 megapixels avec Flash LED + autofocus - Vidéo: 1920x1080 pixels (1080p@30fps) avec plage dynamique élevée HDR (High dynamic Range) - 1 / 2.3 "taille du capteur, géo-tagging, mise au point tactile, le visage / détection de sourire, panorama * Communication/Réseaux: - GSM/HSPA/LTE (2G, 3G, 4G) - Speed: HSPA 42.2/5.76 Mbps, LTE Cat4 150/50 Mbps - GPRS (plus de 107 kbps) - EDGE (plus de 296 kbps) - Wi-Fi 802.11 a/b/g/n/ac, dual-band, Wi-Fi Direct, DLNA, hotspot - Bluetooth: v4.0, A2DP, aptX - NFC * Capteurs: - GPS intégré(A-GPS, GLONASS) - Accéléromètre - Gyroscope - Détecteur de proximité - Boussole numérique - Détecteur du visage/sourire - Détecteur de luminosité ambiante * OS et environnements logiciels pour développer: Android OS, SDK v4.3 (Jelly Bean), upgradable to v5.1 (Lollipop) ==== Ressources utilisées dans le Projet ==== * Capteurs: - GPS (A-GPS, GLONASS) (localisation) - Capteur Wifi (pour obtenir les SSID et les infos des wifi à proximité) * SDK et API: - Google Maps API : https://enterprise.google.com/intl/fr/maps/?utm_source=google&utm_medium=cpc&utm_campaign=2016-geo-emea-endor-gmedia-search-fr-&utm_content=fr%7Cfr%7Chybr%7C1001878%7C%7Cbk%7Cbrand%7C%7C&gclid=CjwKEAjwhILABRDwo8mlqt6ug38SJACNSq_kVxMTZtVUhbB56M5KAJpula7TEeArjE5B3kRkJcdH4hoCpXjw_wcB - Android Wifi Manager API https://developer.android.com/reference/android/net/wifi/WifiManager.html * Environnement de logiciel: Android Studio 2015 * Version OS: Android 4.3 (Jelly Bean) ==== Algorithme ==== L'idée de l'application c'est qu'elle ne cherche pas seulement les connexions Wifi et l'affiche pour l'utilisateur mais, elle lui présente, pour chaque région, tous les connexions wifi publics par leurs SSIDs et lui affiche pour chaque connexion le spot dans lequel se présente le meilleur signal. Donc, elle donne à l'utilisateur la possibilité de trouver les Wifis publics, les plus rapides et les plus comfortables avec la localisation du meilleur signal. Or, afin de trouver les régions avec le meilleur signal, on a besoin d'un algorithme qui va analyser les données qu'on lui donne, et par la suite, il va regrouper beaucoup de positions (Latitude et Longitude) et de force de signaux ensemble, formant différents clusters parmi lesquels on trouvera le cluster des positions avec la force de signal la plus élevé: c'est donc le Clustering K-means non-supervisé qui prend place. En effet, l'algorithme traitera les données suivantes: * La force du signal présentée par le "level" de chaque scanResult du Wifimanager API * Les coordonnées GPS de chaque utilisateur On estime donc que pour chaque connexion wifi, on va trouver trois clusters d'objets d'une classe "accessPoint" présentant les trois données traités (Latitude, Longitude et level), dont on récupèrera le groupe avec le centroide présentant la moyenne de level la plus élevée présentant ainsi la région avec le meilleur signal de cette connexion wifi. ==== Conclusion sur la Faisabilité du Projet==== Selon une étude approfondie, le projet est réalisable mais il faut prendre en soin de bien retenir les SSID des connexions WiFi (en étudiant le cas d'avoir des SSID du même nom et évitant leur réplication dans la base de données) et les bien localiser et enregistrer dans une base de données tout en distinguant entre ceux qui ont un accès public et ceux qui utilisent la technique de portail captif. En plus notre application sera plus efficace plus qu'on a des utilisateurs. C'est dans ce cadre qu'on va tout d’abord commencer par une petite région (Polytech Nice), puis de plus en plus répandue (Sophia et Antibes) jusqu’à Nice. Avec chaque utilisateur, un nouveau WiFi s’enregistre dans la base de données et par suite s’affiche sur la carte. Pour assurer nos objectifs, il est essentiel de bien gérer notre base de données et d'essayer d'avoir la région exacte du meilleur signal de chaque connexion WiFi en appliquant bien les algorithmes. ==== Rendu Final==== __**Code Source**__ Voici notre code final du Wifi Locator. Vous trouvez le code dans le lien suivant: https://github.com/meriemchebaane/elimwifilocator __**Architecture Globale**__ Nous procédons à concevoir et à développer notre application en adoptant l’architecture suivante: * Coté Client : notre application mobile * Coté Serveur: Cloud basé sur Google App Engine * Gestion de base de donne en utilisant FireBase {{ :cours:plim:projet16_17:gr13:aa.png?500 |}} == Conception de notre base de données == Notre proposition consiste à stocker la position de l’utilisateur ainsi que la valeur de débit des Wifis autour de lui. Dans ce contexte et devant les contraintes actuelles de notre application, notre base de données doit permettre à l’utilisateur d’accéder aux données dans un temps réel et d'une manière synchrone et asynchrone à la fois. Pour que nos données soient accessibles facilement et synchronisées en temps réel sur tous les appareils connectés, nous avons utilisés Firebase. Ce service se charge d’héberger les informations de wifis sous forme dun objet JSON. Nous avons utilisé aussi le système d’authentification offert par firebase. L’idée est qu’il propose un service prêt emploi qui ne va pas stocker les identifiants, mais assure le mécanisme de l’authetification elle-même. Firebase permet aussi un cache pour anticiper sur des communications intermittentes et asynchrones. == Coté Serveur == Notre application envoie une requète POST sous forme d’une liste des points d’accès(la valeur de latitude,longitude et le level) des wifis sélectionnés au Servlet (notre serveur Cloud). Suite à cette demande, le serveur fait appel à notre algorithme K-means de 3 dimensions qui permet de grouper les données en K groupes selon la proximité des valeurs. Ce résultat sera trié selon le débit du centroid de chaque cluster obtenu afin d’avoir les meilleurs signaux à renvoyer au client. == Coté Client == * Installation obligatoire Puisque notre serveur et notre base de données sont déployés sur le cloud il va vous falloir d’installer l’application sur votre smartphone Android. Télécharger et installer l’APK suivant sur votre smartphone :https://github.com/meriemchebaane/elimapk Pour le bon fonctionnement de l’application, n’oubliez pas d’activer la localisation. {{ :cours:plim:projet16_17:gr13:localisation.png?200 |}} * Utilisation de l’application mobile Suite à l’authentification, une map sera affiché au dessus d’une liste des wifis autour du l’utilisateur. {{:cours:plim:projet16_17:gr13:16833193_1854991001410115_246472487_o.png?200|}} {{:cours:plim:projet16_17:gr13:n.png?200|}} {{:cours:plim:projet16_17:gr13:i.png?200|}} Pour rajouter les nouvelles valeurs des wifis présentes, vous auriez besoin de cliquer sur le bouton plus. Le deusième bouton sert a afficher la liste des regions. {{:cours:plim:projet16_17:gr13:regions.png?200|}} {{:cours:plim:projet16_17:gr13:pub.png?200|}} L’amélioration effectuée tout au long de ce projet c’est qu’au lieu d’éffectuer un cluster sur un seul wifi dans une region bien précise, on envoie tout les wifis de la même region et on effectue le clustering pour rassurer le bon fonctionnement de K-means. En effet, dans la premiere version nous avons eu des clusters videos alors que lors du changement effectué nous avons réçu tout les clusters bien définis. Prenons le cas de 5 clusters ce que nous aurons en background comme ci-dessous: {{ :cours:plim:projet16_17:gr13:0.png?700 |}} {{:cours:plim:projet16_17:gr13:1.png?150|}} {{:cours:plim:projet16_17:gr13:2.png?150|}} {{:cours:plim:projet16_17:gr13:3.png?150|}} {{:cours:plim:projet16_17:gr13:4.png?150|}} {{:cours:plim:projet16_17:gr13:5.png?150|}} Finalement, nous affichons les meilleurs signaux sur notre map: {{ :cours:plim:projet16_17:gr13:final.png?250 |}}