The DashBoard is hosted on Railway at https://smartwatch-production.up.railway.app/
The API is hosted on Railway at https://smartwatch-production.up.railway.app/api
/**************Events**************/
app.get("/api/events", DB.getAllEvents);
app.post("/api/events/add", DB.addEvent);
app.get("/api/events/:id/delete", DB.deleteEvent);
/*************Users**************/
app.post("/api/connect", DB.connect);
app.get("/api/users", DB.getAllUsers);
app.get("/api/users/:id/delete", DB.deleteUser);
/**************Types**************/
app.get("/api/types", DB.getAllEventTypes);
app.post("/api/types/add", DB.addEventType);
app.get("/api/types/:id/delete", DB.deleteEventType);
Nous avons utiliser l'emulateur Wear Os Small Round API 30 sur Android Studio.
La montre fonctionne sur batterie et on la charge par induction. Notre application n’est pas prévue pour une utilisation prolongée sans recharger la montre car celle-ci envoi des données vers notre API et récupère sa position de manière constante ce qui réduit considérablement la durée de la batterie. Nous avons fait le choix de ne pas passer par le téléphone pour que la montre puisse être utilisée indépendamment de celui-ci.
Nous stockons seulement les layouts et quelques variables ce qui fait que l’application nécessite peu de ressources.
Notre application nécessite de rester active en fond pour envoyer des informations à l’api à intervalles régulières mais cela n’impacte pas négativement l’utilisation de la montre.
Nous n’utilisons pas de communications Bluetooth entre la montre et le téléphone car nous voulions que celle-ci reste indépendante et donc elle effectue elle-même les requêtes http GET et POST vers notre API.
Le seul capteur de la montre que nous utilisons et la géolocalisation, celui-ci étant suffisant pour le type d’application que nous voulions créer.
L’application permet à l’utilisateur de démarrer la géolocalisation et de la stopper, il peut aussi régler la fréquence de celle-ci. De plus il est aussi possible de d’envoyer des évènements manuellement ce qui permet à l’utilisateur de signaler des éléments intéressant lors de son trajet en envoyant leurs types, leurs positions et leurs dates.
Nous avons utilisé Android Studio et nous avons testé notre application depuis l’émulateur Wear Os Small Round API 30 sous Windows/linux et mac.
Evidement notre application nécessite l’accès au réseau et une montre pouvant utiliser la géolocalisation.
Le but de notre application est de permettre à un utilisateur de notifier les autres utilisateurs d’évènements qu’il considère importants lors de son trajet. Pour cela notre application envoi a Intervalle régulière sa position vers une API distance qui se charge d’agréger les données de tous les utilisateurs dans une base de donnée et les affiche dans un Dashboard. Certains des types d’événements sont des bouchons, des travaux sur le bord de la route, des déchets … L’utilisateur peut choisir la fréquence a laquelle sa position est envoyé automatiquement vers l’API et de stopper cet envoi. L’application fonctionne en arrière-plan grâce a une notification permanente.
- La géolocalisation de la montre.
- L'id unique de la montre
- L’heure et la data de chaque évènement.
L’utilisation d’un id unique peut poser un problème car si celui est récupéré par un pirate il permettrais à celui-ci d’identifier la montre en permanence car ce numéro est inchangeable. Nous avons opté pour cette approche qui nous évitais de devoir réaliser un système d’identifiants de connexion avec pseudo et mot de passe.
- On affiche les évènements dans une carte interactive.
- On affiche les types évènements dans un histogramme.
- On affiche les types évènements dans un digramme circulaire.
Toutes ces données sont visibles depuis notre Dashboard.
- Ces données sont transmises en utilisant le protocole http vers l’API qui se charge de les stocker dans une base de données SQL.
- Elle sont stockées dans une base de données SQL dans 3 tables différentes, une pour les utilisateurs, une pour les types d’évènements et une pour les évènements eux même. Un utilisateur et un type peuvent avoir plusieurs événements.
Du fait que la fonction principale de notre application est la géolocalisation, on se doit d’envoyer des informations vers l’API à intervalles réguliers. Notre application étant une démonstration nous n’avons pas pris en compte les contraintes de bande passante et de consommation d’Energie.
Pour améliorer ses deux points il serait possible de stocker les données en local dans la montre et de les envoyer de façon journalière.
Start Docker
and then run:
cd server
npm i
npm run docker:build #Build images and containers
npm start
You should have the address of the api displayed in the console. Otherwise you will need to run ipconfig
and look for your IPv4 address.
To be sure the server is running open the address you got in the previous step in your browser (it should be something like http://192.168.0.134:3000) and you should see the dashboard.
Open the folder application
with Android Studio
and then open app/build.gradle
. You might need to change the address in the line:
buildConfigField "String", "API_URL", "\"https://smartwatch-production.up.railway.app/api\""
with the ip address you got in step 1.
You can run the application from Android Studio
in the emulator and everything should be working as intented.
ERROR 2002 (HY000): Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2)
This error mean that the mariadb container is not ready yet and you should wait about 10s.
error during connect: this error may indicate that the docker daemon is not running: Get "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.project%3Dserver%22%3Atrue%7D%7D": open //./pipe/docker_engine: The system cannot find the file specified.
Unable to connect to the database: SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:3306
These errors mean that docker in not running, to fix it simply start it.