@ -5,21 +5,21 @@
Η υλοποίηση αυτή μεταξύ άλλων προσθέτει λειτουργίες όπως, η εγγραφή των ληφθέντων τιμών σε μια βάση με σκοπό την απεικόνισή τους και την αποστολή των ίδιων τιμών σε έναν απομακρυσμένο server για την περαιτέρω επεξεργασία τους.
Η υλοποίηση αυτή μεταξύ άλλων προσθέτει λειτουργίες όπως, η εγγραφή των ληφθέντων τιμών σε μια βάση με σκοπό την απεικόνισή τους και την αποστολή των ίδιων τιμών σε έναν απομακρυσμένο server για την περαιτέρω επεξεργασία τους.
## Αρχιτεκτονική
## Αρχιτεκτονική
Η αρχιτεκτονική χωρίζεται σε 5 μεγάλα κομμάτια :
Η αρχιτεκτονική χωρίζεται σε 5 μεγάλα κομμάτια :
1) Τον producer όπου παράγει και στέλνει τις τιμές του αισθητήρα.
1) Τον producer όπου παράγει και στέλνει τις τιμές του αισθητήρα.
2) Τον [**RabbitMQ broker** ](https://www.rabbitmq.com/ ) όπου αποθηκεύει προσωρινά τις τιμές που στέλνει ο producer.
2) Τον [**RabbitMQ broker** ](https://www.rabbitmq.com/ ) όπου αποθηκεύει προσωρινά τις τιμές που στέλνει ο producer.
3) Τον consumer που καταναλώνει τις αποθηκευμένες απο τον broker τιμές.
3) Τον consumer που καταναλώνει τις αποθηκευμένες απο τον broker τιμές.
4) Την βάση και το monitoring tool , όπου αποθηκεύονται και προβάλλονται οι τιμές.
4) Την βάση και το monitoring tool , όπου αποθηκεύονται και προβάλλονται οι τιμές.
5) Τον απομακρυσμένο server όπου αποστέλλονται οι τιμές για περαιτέρω επεξεργασία.
5) Τον απομακρυσμένο server όπου αποστέλλονται οι τιμές για περαιτέρω επεξεργασία.
Πιο συγκεκριμένα η αρχιτεκτονική είναι η εξής:
Πιο συγκεκριμένα η αρχιτεκτονική είναι η εξής:
![Αρχικτορνική ](https://previews.dropbox.com/p/thumb/ABADkdXK27XKuAFdxgXL3LmTTmqWBLf3SaibtjjFx_aM0-tJSBcFAujv6Pe7lNU4hhbjI-o1S_lXhVmYWSryXxIhUSBHHDnnioy9QljxQFiYert3uUu0zx-cb0M8zkJ1-GRE_YTqSZCNUWB4u1sGegh72SsPXmDI4hv7Vp-r8wYadZ368mHvEWTGJzsGxoti-g5QgjSO1_JEE8_YVyqqutI88O1QQ_INOzK04dBsi8VyVlqWazaZX-qMsiltoRlCEkNbDFiHOGQL0yFd53H9DW7pS0gpOUDu4OpibdgofakaJYW2Xu05YfMrp1y2H9vPWZrnpFXFHUdbVJuuqkabfRW34-GyFxRF1sXBnmyhOZTpyQ/p.png?fv_content=true&size_mode=5 )
![Αρχικτορνική ](https://previews.dropbox.com/p/thumb/ABADkdXK27XKuAFdxgXL3LmTTmqWBLf3SaibtjjFx_aM0-tJSBcFAujv6Pe7lNU4hhbjI-o1S_lXhVmYWSryXxIhUSBHHDnnioy9QljxQFiYert3uUu0zx-cb0M8zkJ1-GRE_YTqSZCNUWB4u1sGegh72SsPXmDI4hv7Vp-r8wYadZ368mHvEWTGJzsGxoti-g5QgjSO1_JEE8_YVyqqutI88O1QQ_INOzK04dBsi8VyVlqWazaZX-qMsiltoRlCEkNbDFiHOGQL0yFd53H9DW7pS0gpOUDu4OpibdgofakaJYW2Xu05YfMrp1y2H9vPWZrnpFXFHUdbVJuuqkabfRW34-GyFxRF1sXBnmyhOZTpyQ/p.png?fv_content=true&size_mode=5 )
## Υλικά
- Arduino Uno
- TMP36Gz temp sensor
- Raspberry Pi 3
- Desktop PC with Docker
# Στήσιμο του project
# Στήσιμο του project
@ -135,16 +135,12 @@
Μπορούμε απο εδώ να κάνουμε **overview** την διαδικασία του **produce** και **consume** βλέποντας τα γραφήματα, τις ταχύτητες **consume** και **produce** στο **tab Queues** , τα **connection** που έχουμε και τα **channels** .
Μπορούμε απο εδώ να κάνουμε **overview** την διαδικασία του **produce** και **consume** βλέποντας τα γραφήματα, τις ταχύτητες **consume** και **produce** στο **tab Queues** , τα **connection** που έχουμε και τα **channels** .
Επιπλέον μπορούμε αν θέλουμε να φτιάξουμε έναν δικό μας χρήστη στο **tab Admin** .
Επιπλέον μπορούμε αν θέλουμε να φτιάξουμε έναν δικό μας χρήστη στο **tab Admin** .
H διαδικασία είναι η εξής:
H διαδικασία είναι η εξής:
1) Μεταβένουμε στο tab Admin.
1) Μεταβένουμε στο tab Admin.
2) Στο **drop down menu Add a User** βάζουμε τα στοιχεία που επιθυμούμε , στην επιλογή **Tag** επιλέγουμε **Admin** και πατάμε το κουμπί **Add User** .
2) Στο **drop down menu Add a User** βάζουμε τα στοιχεία που επιθυμούμε , στην επιλογή **Tag** επιλέγουμε **Admin** και πατάμε το κουμπί **Add User** .
3) Στη συνέχεια επιλέγουμε τον χρήστη που φτιάξαμε και το **panel Set permission** , στην επιλογή **Virtual Host** επιλέγουμε ** "/"** ώστε να γίνει **admin** ο χρήστης και πατάμε το κουμπί **Set permission** .
3) Στη συνέχεια επιλέγουμε τον χρήστη που φτιάξαμε και το **panel Set permission** , στην επιλογή **Virtual Host** επιλέγουμε ** "/"** ώστε να γίνει **admin** ο χρήστης και πατάμε το κουμπί **Set permission** .
### Grafana & InfluxDB
### Grafana & InfluxDB
Σε αυτό το σημείο εκτός απο τα **images** του **Grafana** και της **InfluxDB** θα χρειαστούμε και ένα **δίκτυο** προκειμένου να μπορεί να δει αυτόματα το **Grafana** τη βάση.
Σε αυτό το σημείο εκτός απο τα **images** του **Grafana** και της **InfluxDB** θα χρειαστούμε και ένα **δίκτυο** προκειμένου να μπορεί να δει αυτόματα το **Grafana** τη βάση.
Η δομή που θέλουμε να πετύχουμε είναι η παρακάτω:
Η δομή που θέλουμε να πετύχουμε είναι η παρακάτω:
![enter image description here ](https://previews.dropbox.com/p/thumb/ABDq1QjTqZ_NB8BGIikkG25QdZ7aS1CZo3DmLRLClLzrWCtbDzPnHh7Ggwkzz2KGwGvQchEfQnKwFqXRj7P-sOcZe9yejyYZaTm_rUewl73btPO85J19_P2T3llJRPcY6MpTBKd-DJBcW_OSQickIeg6uUVsdW2v476PmOMglVC0vTvMEUCzyjoJnhIJVUmKEl9MWdMTzUtuBvubAVu0v4xGsvpclkQlxlwhx9pmaMm4Lnl9GosHsyRyIaC_4h0DiP_ZyQmrWxjuxm2IcCm3HC2YkkardHKWsZyzAgF6on80AhE5EhVO_Dnre6ZWPLC5g0V-Bu4HZyuoX8I5NO06QuG85ayYr85TKjnnqTh_o7DSrQ/p.png?fv_content=true&size_mode=5 )
![enter image description here ](https://previews.dropbox.com/p/thumb/ABDq1QjTqZ_NB8BGIikkG25QdZ7aS1CZo3DmLRLClLzrWCtbDzPnHh7Ggwkzz2KGwGvQchEfQnKwFqXRj7P-sOcZe9yejyYZaTm_rUewl73btPO85J19_P2T3llJRPcY6MpTBKd-DJBcW_OSQickIeg6uUVsdW2v476PmOMglVC0vTvMEUCzyjoJnhIJVUmKEl9MWdMTzUtuBvubAVu0v4xGsvpclkQlxlwhx9pmaMm4Lnl9GosHsyRyIaC_4h0DiP_ZyQmrWxjuxm2IcCm3HC2YkkardHKWsZyzAgF6on80AhE5EhVO_Dnre6ZWPLC5g0V-Bu4HZyuoX8I5NO06QuG85ayYr85TKjnnqTh_o7DSrQ/p.png?fv_content=true&size_mode=5 )
@ -165,7 +161,7 @@ H διαδικασία είναι η εξής:
Επόμενο βήμα είναι να μεταβούμε στο φάκελο **InfluxDB&Grafana compose** και να τρέξουμε την εντολή:
Επόμενο βήμα είναι να μεταβούμε στο φάκελο **InfluxDB&Grafana compose** και να τρέξουμε την εντολή:
docker-compose up -d
docker-compose up -d
Η συγκεκριμένη εντολή θα υλοποιήσει τα περιεχόμενα του docker-compose.yml αρχείου.
Η συγκεκριμένη εντολή θα υλοποιήσει τα περιεχόμενα του docker-compose.yml αρχείου.
![enter image description here ](https://previews.dropbox.com/p/thumb/ABA5bZDX2RhypXtboUwjeCW-Zkq1uAqNtO6KoJYxdCpDmGJVjPZgc8jw69KV0zpUwjnvNQAOA6Nem7Smxp7AKBX-njJIXNMpwV8sVOWP0JgPRwyqb6bwoeIgo49yEg70CFGmo-abKLCjeH4_xSsMWcdTu_6-fBSjJhUlfV6GT46Sb-z6BGxsIwP26Bno8cS2nClmRkaqMne7k-MZ7DuBlvKQmICN5jETYbaVN1ZuK3I-mxN3bQyaH3ZgBroQnnzCtM8p95rN-KOopV8JWsTPZKmRrmRoUiDwv0qbca0wwKrlv4p71Wvfrom3b73BokXqLoekVkWOfIbMK8pKR5SAJhyudoy4Di8-qAjZ0cWPa7a76w/p.png?size=2048x1536&size_mode=3 )
![enter image description here ](https://previews.dropbox.com/p/thumb/ABA5bZDX2RhypXtboUwjeCW-Zkq1uAqNtO6KoJYxdCpDmGJVjPZgc8jw69KV0zpUwjnvNQAOA6Nem7Smxp7AKBX-njJIXNMpwV8sVOWP0JgPRwyqb6bwoeIgo49yEg70CFGmo-abKLCjeH4_xSsMWcdTu_6-fBSjJhUlfV6GT46Sb-z6BGxsIwP26Bno8cS2nClmRkaqMne7k-MZ7DuBlvKQmICN5jETYbaVN1ZuK3I-mxN3bQyaH3ZgBroQnnzCtM8p95rN-KOopV8JWsTPZKmRrmRoUiDwv0qbca0wwKrlv4p71Wvfrom3b73BokXqLoekVkWOfIbMK8pKR5SAJhyudoy4Di8-qAjZ0cWPa7a76w/p.png?size=2048x1536&size_mode=3 )
@ -213,105 +209,63 @@ Tα αρχικά στοιχεία για username και password είναι **a
## producer.js
## producer.js
![enter image description here ](https://previews.dropbox.com/p/thumb/ABCWduxeg5MRo2lm41Z2IygPqcP3ihoDStLcjO0TFW11rx9TaN0TeY2sRY54pnm-4hgEAJP3DRZiszUDMFLSha15WkfUpBsuZJGKQnabRdyM_yjT5adHUneJ7rC7AFCvb29ThWutHHR2IPYZowoRpx5Pe_4gyDvNLOWSPBN_K2DtMHwpdkNBzrcNftbuowlF0cr3OXB8HPludlT209e426ziFqsC7USdY3s0asluGrko-qVy786Rypae6eOszuAn0cN3OF5F7UpSBOdD3o2WLoTP4uUzTbNE8dX22uzhHzrWCBOlkTTKQylMF7uuoHtIUzDJdc6JbHKFEIrwOGdJdyqr-z8qo9Le446wLO_zt_CQ0g/p.png?fv_content=true&size_mode=5 )
![enter image description here ](https://previews.dropbox.com/p/thumb/ABCWduxeg5MRo2lm41Z2IygPqcP3ihoDStLcjO0TFW11rx9TaN0TeY2sRY54pnm-4hgEAJP3DRZiszUDMFLSha15WkfUpBsuZJGKQnabRdyM_yjT5adHUneJ7rC7AFCvb29ThWutHHR2IPYZowoRpx5Pe_4gyDvNLOWSPBN_K2DtMHwpdkNBzrcNftbuowlF0cr3OXB8HPludlT209e426ziFqsC7USdY3s0asluGrko-qVy786Rypae6eOszuAn0cN3OF5F7UpSBOdD3o2WLoTP4uUzTbNE8dX22uzhHzrWCBOlkTTKQylMF7uuoHtIUzDJdc6JbHKFEIrwOGdJdyqr-z8qo9Le446wLO_zt_CQ0g/p.png?fv_content=true&size_mode=5 )
1) Εισαγωγή δύο απαραίτητων module για την λειτουργία του producer.
1) Εισαγωγή δύο απαραίτητων module για την λειτουργία του producer.
2) Έναρξη επικοινωνίας με το Arduino μέσο της σειριακής πόρτας (σε ρυθμό 9600).
2) Έναρξη επικοινωνίας με το Arduino μέσο της σειριακής πόρτας (σε ρυθμό 9600).
3) Αρχικοποίηση των ρυθμίσεων του RabbitMQ ώστε να ξέρω που θα στείλω τα δεδομένα μου (που να γίνει το send to queue).
3) Αρχικοποίηση των ρυθμίσεων του RabbitMQ ώστε να ξέρω που θα στείλω τα δεδομένα μου (που να γίνει το send to queue).
![enter image description here ](https://previews.dropbox.com/p/thumb/ABABPab_U8tOiA_lYjCi4pEEOup_GsFwcDkr7wfAtsGg0O-UBNgphAQLDbdkRKT3nYoPOEDC9aK1YuTgOCxZB2pGOyuyHV2PgAK4yVxoRFaK-C00375pqeZa19ygcFBAVL2muUxmKoE06x45cdCMlO7J-kuFIM1nWtMzroDGprYCTy-3Tbcb1LzLc17OZ00xrqqsRHzAxgJImj-KXQ3FBDkHlUbXfizlW6XhNtP3GLvKwVVQxsm73B5Z0IpD-oHgnbsCBfgZMMVP7gDrELPS9Mu94K8yZY4cTxjxzt98XgzDuPtsn1tnLOWZ3q0slE57TrMq6eLg6h1-xCVL7rhD2zgc4XqYDXwb6TnT_0Xb9eBVtQ/p.png?fv_content=true&size_mode=5 )
![enter image description here ](https://previews.dropbox.com/p/thumb/ABABPab_U8tOiA_lYjCi4pEEOup_GsFwcDkr7wfAtsGg0O-UBNgphAQLDbdkRKT3nYoPOEDC9aK1YuTgOCxZB2pGOyuyHV2PgAK4yVxoRFaK-C00375pqeZa19ygcFBAVL2muUxmKoE06x45cdCMlO7J-kuFIM1nWtMzroDGprYCTy-3Tbcb1LzLc17OZ00xrqqsRHzAxgJImj-KXQ3FBDkHlUbXfizlW6XhNtP3GLvKwVVQxsm73B5Z0IpD-oHgnbsCBfgZMMVP7gDrELPS9Mu94K8yZY4cTxjxzt98XgzDuPtsn1tnLOWZ3q0slE57TrMq6eLg6h1-xCVL7rhD2zgc4XqYDXwb6TnT_0Xb9eBVtQ/p.png?fv_content=true&size_mode=5 )
1) Ορισμός ονόματος queue
1) Ορισμός ονόματος queue
2) Δημιουργία connection, channel και queue για το RabbitMQ
2) Δημιουργία connection, channel και queue για το RabbitMQ
3) Ανάγνωση της σειριακής θύρας
3) Ανάγνωση της σειριακής θύρας
4) Δημιουργεία ενός κενού javascript object με σκοπό να το γεμίσουμε με το όνομα του αισθητήρα και της τιμή που διαβάστηκε απο την σειριακή πόρτα (εφαρμογή της μεθόδου slice για να κόψουμε το "\r" απο τα δεδομένα που διαβάζονται στην σειριακή πόρτα).
4) Δημιουργεία ενός κενού javascript object με σκοπό να το γεμίσουμε με το όνομα του αισθητήρα και της τιμή που διαβάστηκε απο την σειριακή πόρτα (εφαρμογή της μεθόδου slice για να κόψουμε το "\r" απο τα δεδομένα που διαβάζονται στην σειριακή πόρτα).
5) Μετατροπή του javascript object σε JSON αποστολή του στη queue (JSON γιατί είναι απαιτούμενο του RabbitMQ).
5) Μετατροπή του javascript object σε JSON αποστολή του στη queue (JSON γιατί είναι απαιτούμενο του RabbitMQ).
6) Εφαρμογή της συνάρτησης.
6) Εφαρμογή της συνάρτησης.
## consumer.js
## consumer.js
![enter image description here ](https://previews.dropbox.com/p/thumb/ABDroOmdmJ8r_t2bvVkTQ0d0spwpoF5hH17AmhLade907K3DyYrw9swIJFsAa0Ti8BToRA_L9OR0oNcmMemGv6mRs7fcrhUUI69CG5JQibVx5bZYOsJLyN5n9yxYSRP-9M5oJLWYJFvZyeeHeoyoBcYulQyWo_Hezt060P01zmdarRrfgJkW719UpMr1pd-cnV1xAF4RKtJH-oTzyRzJXk6SHaKZ-4-bZFtLKJscqH5BDo-QTVTlEO0eUZjtKCGgSTej-1tWlUxS1ca2Is3WRneNKspw7J1IGwQYFmB5AWbYoM1d5fYNMgtK3oG73HUWufsikM2xzw-MsJ8Hlm_T7y-yi7cMi9lxkSs35btPkozNXw/p.png?size=2048x1536&size_mode=3 )
![enter image description here ](https://previews.dropbox.com/p/thumb/ABDroOmdmJ8r_t2bvVkTQ0d0spwpoF5hH17AmhLade907K3DyYrw9swIJFsAa0Ti8BToRA_L9OR0oNcmMemGv6mRs7fcrhUUI69CG5JQibVx5bZYOsJLyN5n9yxYSRP-9M5oJLWYJFvZyeeHeoyoBcYulQyWo_Hezt060P01zmdarRrfgJkW719UpMr1pd-cnV1xAF4RKtJH-oTzyRzJXk6SHaKZ-4-bZFtLKJscqH5BDo-QTVTlEO0eUZjtKCGgSTej-1tWlUxS1ca2Is3WRneNKspw7J1IGwQYFmB5AWbYoM1d5fYNMgtK3oG73HUWufsikM2xzw-MsJ8Hlm_T7y-yi7cMi9lxkSs35btPkozNXw/p.png?size=2048x1536&size_mode=3 )
1) Εισαγωγή 4 απαραίτητων module για την λειτουργία του consumer.
1) Εισαγωγή 4 απαραίτητων module για την λειτουργία του consumer.
2) Aρχικοποίηση των ρυθμίσεων για την υπηρεσία του mail.
2) Aρχικοποίηση των ρυθμίσεων για την υπηρεσία του mail.
3) Αρχικοποίηση των επιλογών για την υπηρεσία του mail.
3) Αρχικοποίηση των επιλογών για την υπηρεσία του mail.
4) Αρχικοποίηση της σύνδεσης με τον εξωτερικό server που θα σταλούν τα δεδομένα για περαιτέρω επεξεργασία.
4) Αρχικοποίηση της σύνδεσης με τον εξωτερικό server που θα σταλούν τα δεδομένα για περαιτέρω επεξεργασία.
Αποστολή του event "join_Temp_room" σε σκοπό την εισαγωγή στο room που επεξεργάζονται οι θερμοκρασίες.
Αποστολή του event "join_Temp_room" σε σκοπό την εισαγωγή στο room που επεξεργάζονται οι θερμοκρασίες.
Αν η εισαγωγή στο room ήταν επιτυχής ή αποτυχής γίνεται εκτύπωση του αντίστοιχου μηνύματος.
Αν η εισαγωγή στο room ήταν επιτυχής ή αποτυχής γίνεται εκτύπωση του αντίστοιχου μηνύματος.
![enter image description here ](https://previews.dropbox.com/p/thumb/ABCzUteXi6r4H1KU9W2w8hyI7_wDGT5Y3p_Nk2btjW3qwc2NZ2LbYICJojmwghoK9lKonp9V2nsHSPjdo_GuIZ7W_Bz-GTDpp35hEgv48qMES6QDcrbnBCMihJyPQuZ4iWq8Gh9rk40_EOABsZftKKBvej052C826HhjToWDdjyWWgDz-uODUa4rNhZEHdRbDjrUpWtYxX0kgD7yCz_gstxdnTxnoI2_9cOjdwJtTIUqGJNH6qX33UAiEBn9rUv0JD-l1GkddJdzC2tfHGcG-sgK37ZZqKvnW6rNwgCqrNlGFqNUolwtHVkpUVCvJcsy8FxlCmXdMRsRXGhAJsOdd8BiMp-mn5RWEpQKyUGUIBkNCw/p.png?size=2048x1536&size_mode=3 )
![enter image description here ](https://previews.dropbox.com/p/thumb/ABCzUteXi6r4H1KU9W2w8hyI7_wDGT5Y3p_Nk2btjW3qwc2NZ2LbYICJojmwghoK9lKonp9V2nsHSPjdo_GuIZ7W_Bz-GTDpp35hEgv48qMES6QDcrbnBCMihJyPQuZ4iWq8Gh9rk40_EOABsZftKKBvej052C826HhjToWDdjyWWgDz-uODUa4rNhZEHdRbDjrUpWtYxX0kgD7yCz_gstxdnTxnoI2_9cOjdwJtTIUqGJNH6qX33UAiEBn9rUv0JD-l1GkddJdzC2tfHGcG-sgK37ZZqKvnW6rNwgCqrNlGFqNUolwtHVkpUVCvJcsy8FxlCmXdMRsRXGhAJsOdd8BiMp-mn5RWEpQKyUGUIBkNCw/p.png?size=2048x1536&size_mode=3 )
1) Αρχικοποίηση των ρυθμίσεων της βάσης με σκοπό να μπορώ να γράψω και να διαβάσω απο αυτή.
1) Αρχικοποίηση των ρυθμίσεων της βάσης με σκοπό να μπορώ να γράψω και να διαβάσω απο αυτή.
Οι τιμές που καταγράφονται στη βάση έχουν το measurement temp , είναι τύπου float και περιγράφονται απο το tag sensor (θα μπορούσε το tag να έχει πολλές τιμές π.χ. building1 , floor2 , room55 με σκοπό να προσδιορίσουμε ακριβώς τη θέση της προερχόμενης τιμής).
Οι τιμές που καταγράφονται στη βάση έχουν το measurement temp , είναι τύπου float και περιγράφονται απο το tag sensor (θα μπορούσε το tag να έχει πολλές τιμές π.χ. building1 , floor2 , room55 με σκοπό να προσδιορίσουμε ακριβώς τη θέση της προερχόμενης τιμής).
2) Αρχικοποίηση των ρυθμίσεων του RabbitMQ ώστε να ξέρω απο που θα πάρω τα δεδομένα μου (που να γίνει το consume from queue).
2) Αρχικοποίηση των ρυθμίσεων του RabbitMQ ώστε να ξέρω απο που θα πάρω τα δεδομένα μου (που να γίνει το consume from queue).
![enter image description here ](https://previews.dropbox.com/p/thumb/ABDqpnw4ZYW0IyZbdKm4irmL36Who6zvZzbMCzfk9VBEgErx97x1NE4A3Wrb_TIHPp4he6p1uzFHB70FC2joXOvpl-fQJXHIJRV0ZG7rM9ciNcOPQq0evks-fMBb4TcRac1yJCvmUALFhJ5xMISjyMiDJiyW7ssGpWJ7HgYxj-XTNTldR4wqKnZ22uD8svH774YgxYbaiHz7_RXLOhdzqx2cvC4YpTVVZR4aJS_91alYt3XJK8Gg8kHAOEnh-8yiZb3j03W3I6xCqCHmUqSLVQOxCuJ3B6N0PxUYmluhPlS9Y75Tl3-kTKy_hyaeCwxvujjl-XhF_VqBQj9DXL2fBnn5QWT3TC-kjmdEtScj7rPzmA/p.png?size=2048x1536&size_mode=3 )
![enter image description here ](https://previews.dropbox.com/p/thumb/ABDqpnw4ZYW0IyZbdKm4irmL36Who6zvZzbMCzfk9VBEgErx97x1NE4A3Wrb_TIHPp4he6p1uzFHB70FC2joXOvpl-fQJXHIJRV0ZG7rM9ciNcOPQq0evks-fMBb4TcRac1yJCvmUALFhJ5xMISjyMiDJiyW7ssGpWJ7HgYxj-XTNTldR4wqKnZ22uD8svH774YgxYbaiHz7_RXLOhdzqx2cvC4YpTVVZR4aJS_91alYt3XJK8Gg8kHAOEnh-8yiZb3j03W3I6xCqCHmUqSLVQOxCuJ3B6N0PxUYmluhPlS9Y75Tl3-kTKy_hyaeCwxvujjl-XhF_VqBQj9DXL2fBnn5QWT3TC-kjmdEtScj7rPzmA/p.png?size=2048x1536&size_mode=3 )
1) Ανάθεση του ονόματος της queue και του ονόματος του αισθητήρα.
1) Ανάθεση του ονόματος της queue και του ονόματος του αισθητήρα.
2) Δημιουργία connection, channel και queue για το RabbitMQ.
2) Δημιουργία connection, channel και queue για το RabbitMQ.
3) Consume και μετατροπή του JSON σε javascript object για την επεξεργασία του.
3) Consume και μετατροπή του JSON σε javascript object για την επεξεργασία του.
4) Έλεγχος του ονόματος του αισθητήρα με σκοπό να αποφύγω να πάρω τιμή άλλου μεγέθους (π.χ. υγρασία).
4) Έλεγχος του ονόματος του αισθητήρα με σκοπό να αποφύγω να πάρω τιμή άλλου μεγέθους (π.χ. υγρασία).
5) Acknowledge του μυνήματος που έκανα consume με σκοπό να σβηστεί απο την queue.
5) Acknowledge του μυνήματος που έκανα consume με σκοπό να σβηστεί απο την queue.
6) Αποστολή της τιμής μαζί με το όνομα του αισθητήρα στη βάση.
6) Αποστολή της τιμής μαζί με το όνομα του αισθητήρα στη βάση.
7) Μετατροπή του javascript object σε JSON και αποστολή του στον εξωτερικό server για επεξεργασία.
7) Μετατροπή του javascript object σε JSON και αποστολή του στον εξωτερικό server για επεξεργασία.
8) Εκτύπωση μηνύματος αν το όνομα του αισθητήρα δεν είναι το ήδη ορισμένο.
8) Εκτύπωση μηνύματος αν το όνομα του αισθητήρα δεν είναι το ήδη ορισμένο.
![enter image description here ](https://previews.dropbox.com/p/thumb/ABAXvHUZnqjsMgE7Kp5pvXZzjtvRKC1XufNpyIdZEwLEWsdt2E-EayBdzB_sBqnvt0xAwsnpO4c8udcH-jmUfFBc80jinavV6Y4ueMWipX5G23EIJL06XmXYsZA4NFzeWYTifM3j0edlkjgEjhMxso34tEF1W3v9qZ3ewkCvtLWHLzm3VJw799pFKFjsBamKdk31u3Jw23tBzfi0tfZKfrVGDrxbFAbelE0ZSFfTbSdywUmou9-0ykTwAhm0a30-4AK8FOSlQmBcqH74r-SkiLaB1yd__6bKBcnJQXAeRJRE4yCuJIj-rM84tnmvILgXNUU669JNSXX3NT3wNut91nLoqBMF17NMsyMzQ2otE0vSWQ/p.png?fv_content=true&size_mode=5 )
![enter image description here ](https://previews.dropbox.com/p/thumb/ABAXvHUZnqjsMgE7Kp5pvXZzjtvRKC1XufNpyIdZEwLEWsdt2E-EayBdzB_sBqnvt0xAwsnpO4c8udcH-jmUfFBc80jinavV6Y4ueMWipX5G23EIJL06XmXYsZA4NFzeWYTifM3j0edlkjgEjhMxso34tEF1W3v9qZ3ewkCvtLWHLzm3VJw799pFKFjsBamKdk31u3Jw23tBzfi0tfZKfrVGDrxbFAbelE0ZSFfTbSdywUmou9-0ykTwAhm0a30-4AK8FOSlQmBcqH74r-SkiLaB1yd__6bKBcnJQXAeRJRE4yCuJIj-rM84tnmvILgXNUU669JNSXX3NT3wNut91nLoqBMF17NMsyMzQ2otE0vSWQ/p.png?fv_content=true&size_mode=5 )
1) ** (6)** ανά 5 λεπτά γίνεται ένα query στη βάση και επιστρέφει όλες τις τιμές των τελευταίων 5 λεπτών.
1) ** (6)** ανά 5 λεπτά γίνεται ένα query στη βάση και επιστρέφει όλες τις τιμές των τελευταίων 5 λεπτών.
2) Αποθήκευση τιμών σε ένα array.
2) Αποθήκευση τιμών σε ένα array.
3) Προσπέλαση όλου του array.
3) Προσπέλαση όλου του array.
4) Έλεγχος των τιμών ανά ζευγάρια των δύο και υπολογισμός αν υπάρχει ποσοστιαία αύξηση ή μείωση αντίστοιχα μεταξύ των τιμών. Αν υπάρχει , τροποποιείται σε αντίστοιχη μορφή το κείμενο του mail.
4) Έλεγχος των τιμών ανά ζευγάρια των δύο και υπολογισμός αν υπάρχει ποσοστιαία αύξηση ή μείωση αντίστοιχα μεταξύ των τιμών. Αν υπάρχει , τροποποιείται σε αντίστοιχη μορφή το κείμενο του mail.
5) Αποστολή του mail ειδοποίησης.
5) Αποστολή του mail ειδοποίησης.
6) Ορισμός χρονόμετρου.
6) Ορισμός χρονόμετρου.
## server.js
## server.js
![enter image description here ](https://previews.dropbox.com/p/thumb/ABAzdllF7H6WUVKBkA8l3bzKsmjCu3lcR34kIgdjHKMXGevnPnF2mPSPdAODJVYemAk3mPX6MlkzggYsXz_pVxW48Envm_De73UWnLS_1FGHZ3jxHHhOIRTs_GFnMSMfMYEWmw-poGdf2qeWOWYcMr4O-b0UZJ7IkL564RxgegERFkxIXu4jqVUUqjFAD8EDsuxuN9_jYxilq3_cIFERjGYK4H-I5xym_xjlpDnb1RGXiyUY1x6qfr5obKH_CTA_5EfEL8x5q3EAy7sNLYquB5CUFfRJFmU8HH_ctHxbFURm0hW_CvwbwW5ytQJ-UVUP9steYfzzbBkIkuuGFiCEYLBiVBNs36cFWsiro5FS2WWuMg/p.png?fv_content=true&size_mode=5 )
![enter image description here ](https://previews.dropbox.com/p/thumb/ABAzdllF7H6WUVKBkA8l3bzKsmjCu3lcR34kIgdjHKMXGevnPnF2mPSPdAODJVYemAk3mPX6MlkzggYsXz_pVxW48Envm_De73UWnLS_1FGHZ3jxHHhOIRTs_GFnMSMfMYEWmw-poGdf2qeWOWYcMr4O-b0UZJ7IkL564RxgegERFkxIXu4jqVUUqjFAD8EDsuxuN9_jYxilq3_cIFERjGYK4H-I5xym_xjlpDnb1RGXiyUY1x6qfr5obKH_CTA_5EfEL8x5q3EAy7sNLYquB5CUFfRJFmU8HH_ctHxbFURm0hW_CvwbwW5ytQJ-UVUP9steYfzzbBkIkuuGFiCEYLBiVBNs36cFWsiro5FS2WWuMg/p.png?fv_content=true&size_mode=5 )
1) Εισαγωγή 4 απαραίτητων module για την λειτουργία του server.
1) Εισαγωγή 4 απαραίτητων module για την λειτουργία του server.
2) Αρχικοποίηση του server και του socket.
2) Αρχικοποίηση του server και του socket.
3) Array διαθέσιμων room.
3) Array διαθέσιμων room.
![enter image description here ](https://previews.dropbox.com/p/thumb/ABDvlK89ufFhq7cGGSSIfOADuPQyH63iuCCfJVhFh-cwIwHKjswJk3JlkznJd7_HNkxrmabtdGa5RmQ3nhZeTpaKHkbQ3E3djN2EzS_DbzL7YlW_uGAHliVBaLjPL7okAog6l4Rpn6DXic6LlK2-r67TLqvKwgQnzB3rhi8BQvyT5AHUtzJUsHveNEdtfVHCm7F_K_d848XPAFfC5JNuCGgKwcJlhQDWZ87tTuqbNslQjVqiyeCxB6WCBQgASkGHiNG_qHF6Rt6Ren35NGpiMBjeeHHwpww7TwtIqsTZDCOV7eSk9BxDqqIWQ6xKKBliaBxolBy8vPMA6xATPEI02cjkpdMBUUuycLgVsHij1cm97Q/p.png?size=2048x1536&size_mode=3 )
![enter image description here ](https://previews.dropbox.com/p/thumb/ABDvlK89ufFhq7cGGSSIfOADuPQyH63iuCCfJVhFh-cwIwHKjswJk3JlkznJd7_HNkxrmabtdGa5RmQ3nhZeTpaKHkbQ3E3djN2EzS_DbzL7YlW_uGAHliVBaLjPL7okAog6l4Rpn6DXic6LlK2-r67TLqvKwgQnzB3rhi8BQvyT5AHUtzJUsHveNEdtfVHCm7F_K_d848XPAFfC5JNuCGgKwcJlhQDWZ87tTuqbNslQjVqiyeCxB6WCBQgASkGHiNG_qHF6Rt6Ren35NGpiMBjeeHHwpww7TwtIqsTZDCOV7eSk9BxDqqIWQ6xKKBliaBxolBy8vPMA6xATPEI02cjkpdMBUUuycLgVsHij1cm97Q/p.png?size=2048x1536&size_mode=3 )
1) Έναρξη server.
1) Έναρξη server.
2) Αναμονή για συνδέσεις.
2) Αναμονή για συνδέσεις.
3) Ενεργοποίηση του event "join_Temp_room".
3) Ενεργοποίηση του event "join_Temp_room".
4) Έλεγχος αν το δωμάτιο που έστειλε ο consumer είναι υπαρκτό (αν είναι γινεται η εισαγωγή του consumer στο συγκεκριμένο δωμάτιο).
4) Έλεγχος αν το δωμάτιο που έστειλε ο consumer είναι υπαρκτό (αν είναι γινεται η εισαγωγή του consumer στο συγκεκριμένο δωμάτιο).
5) Ενεργοποίηση του event "handleData".
5) Ενεργοποίηση του event "handleData".
6) Μετατροπή του JSON σε javascript object.
6) Μετατροπή του JSON σε javascript object.
7) Εγγραγή των δεδομένων που έλαβε ο server στο αρχείο tempValues.txt για την περεταίρω επεξεργασία.
7) Εγγραγή των δεδομένων που έλαβε ο server στο αρχείο tempValues.txt για την περεταίρω επεξεργασία.
# Ενδεικτικό τρέξιμο
# Ενδεικτικό τρέξιμο
@ -319,7 +273,8 @@ Tα αρχικά στοιχεία για username και password είναι **a
## Αναμονή για δεδομένα απο τον producer
## Αναμονή για δεδομένα απο τον producer
![enter image description here ](https://previews.dropbox.com/p/thumb/ABBZHfzNC7YzdNwkjRCYRmWwlJtZ2trzmmpS5KZp43_C5DNxW9eC-nB34Cf_jmesZSq0rj7mAy-CkE9dsSCo8d1sEcoGmlzuQSOH_tNrUonKMDmfiBLiI_UcIV4h0_WSuBb8kFsCAC2xbFeeqLqiNeC5qE9SSdVDG1n71Umh_tURHnz4302pVP01eWEWJCPHdQL2HnIB8OFc22CXjZJ7tuFUoH-42DXYhBUcZ3jqkuxzE-WALzjK1Fg2tEaX-g_04Jgwoeyq0DrQP7aCiSmxCAO5x7O4nh4ZOJPe62Krs6DHWRcmRIbY13nycZKAsMlnm97hZ1Jzi8_L9TH_67OWX2PzhBmWshI3FGLM-Rd4fVt6mA/p.png?size=2048x1536&size_mode=3 )
![enter image description here ](https://previews.dropbox.com/p/thumb/ABBZHfzNC7YzdNwkjRCYRmWwlJtZ2trzmmpS5KZp43_C5DNxW9eC-nB34Cf_jmesZSq0rj7mAy-CkE9dsSCo8d1sEcoGmlzuQSOH_tNrUonKMDmfiBLiI_UcIV4h0_WSuBb8kFsCAC2xbFeeqLqiNeC5qE9SSdVDG1n71Umh_tURHnz4302pVP01eWEWJCPHdQL2HnIB8OFc22CXjZJ7tuFUoH-42DXYhBUcZ3jqkuxzE-WALzjK1Fg2tEaX-g_04Jgwoeyq0DrQP7aCiSmxCAO5x7O4nh4ZOJPe62Krs6DHWRcmRIbY13nycZKAsMlnm97hZ1Jzi8_L9TH_67OWX2PzhBmWshI3FGLM-Rd4fVt6mA/p.png?size=2048x1536&size_mode=3 )
## Αύξηση θερμοκρασίας πάνω απο 40%
## Αύξηση θερμοκρασίας πάνω απο 40%
![enter image description here ](https://previews.dropbox.com/p/thumb/ABAU6rYgOjHvXXdjbpgqyX-QLb7fNd0qI_mT1QVCAvtoDtHcJnPQ-xVnz3i1Q8r-5y2H6gxf9F8tQ8TmyV1v0m1aL0ytqhEs55G_QhfBeB5IajqCGfBrIs-W6F1MaJ-MIjaPv-5uY33miIVJUcdJWoyrhziD-MEhcHEgnDQHqEFFc-TbIz2IJWSJW2epW4KvT9b7TOpHwzXH9I3w43vjejGszweP5CdRWUJvlalLCDNBiPV5TbHAUgrXv4IRXrDF1bCW5WsevbYJWDrAKjhIYoJXmjhod02WZa0qINPvhURQ4DS1tvJ0Piy3VXAT_Ll3lsjYYp0Tezw--LpidvcZEVp9QmNeOnGDZ9cMgbFiRJ3RJg/p.png?size=2048x1536&size_mode=3 )
![enter image description here ](https://lh3.googleusercontent.com/seQy0W5rIsWJsMgR_dZ9xSArddemVYo25zp3CDPyzYqPrP4pM87WLcuX2nQhV0S9ZzwrwvdFCyfo8ZO4qgAhf4IKK74UfGuO7mghzm2FaKioEZOcV6tbH2CB4kl5YTO-32eDcehxrZLQC7M4mG9Fw23o7BY6oTQDLIT3Iy6og03BbCuopKGY7wnu4BMATTm8aLLoUZt8pSOvvRmfPhAGBkgCr6w90aA4pNCnCoiHWeo425d5pTQX-Cdr6c9stZOvR8uf4_RagI_2nIleoVS4KBmfqpv93xmFDR4s-0-17x_E6iA9EpkiEvjOzKaGD4AoyyujFiMvAiLNmezpIBVg5u8hAacRPFJ5f0dSXl_afrtc1jF4UA_ZvA2GHhrYU52TgdmBa9v0MyycY9DP0SNjho64upa4OyXgFgZaEEt8-T6LNjlDDdW7hGMGEQYVlF6j_5G60KB0G89AMcbbzQhe3UmVTl0ghiMDmFK05EPrnNVxul61PlxSF2fT2BtbBp4p0Vn7Zq9vyv6EpTwEwxHQprICJYOzCD9eAQATw0nBTzA44QJLlTH8h6pKvdREvS9j-czfKSiUAK3I0AZ9SJLa8I8kzvVjn6Y45SNACIsxeKf3b9kacaogvEDQ-jjLSTHMm0gKIoGSmi4QrJipxK6SqkaRRba8MyHPWrLLQDLYy2h_wa-ZKZKlrmfQJZuLxg=w410-h231-no?authuser=0 )
## Ειδοποίηση χρήστη
## Ειδοποίηση χρήστη
![enter image description here ](https://previews.dropbox.com/p/thumb/ABBaXl8y0oSd4KOKnQjFYYyHKr_ljMFBWMCzNsS-oY5PeAKkNLcPa5Ip7medBSWfGVv2a3oeorUfewYIvfD1KGyPUkYqRSWzy3zY1QfyzCNdXF3i4DCcyVDnIg-E0lADNpbD_szFkUgLJAyAgXlwAuVnSaaR8yRc2sN8ulCkrYOyrjVKF_gideDZtTnOmnM_sBqGRlU0q2BQY2HO8dcEFQ2wAq1P11djWYYlCt2YGorR2LJaGg7yiytPZHXoonXhIOVX4vyKZoWH2n-lnLvOI2bn21tCqcQD-ZxEGL7qHeoEO4GUzHntmmiZMuGt97GSxZQaplH51NGEUVOnQH7d8uhArBPQ2Ogz3xP0O2ew2fISWg/p.jpeg?fv_content=true&size_mode=5 )
![enter image description here ](https://lh3.googleusercontent.com/DFffNtHP-SXWrNbMYCrxULCXcyp5i_uM_OpVxl4RlYZpIJZYh_jq7VdLzmvhYvefoHdNKxHgkgD_33RXtJNwePPRRlo5H51Yz_96JeUYkPlVuxG5sOfDjrxzjUJyeKsok8lM2Q-uq_1BDTuFLPlk7g9MJOVKPhGzohc7zFWoUP-f0L-1oMZk9iCCjfKKYP9jBpiRoHyHtxJ6Fk8gp540unY8R-gB1cWpeOZOkHhJCO-R1GeHu6eKzinASMXZ6J_s9PcrQQu6rJey9gQSwr9GNCOeEsex9yqc7kHt1AKUhXP3FaqwT7eEgAOd-FlaSGrdR-bQRhjTyJxA7iou75ZXm4SJ0KIhDh48C17R-7yrmvpdLgJxhGdpA26gDw4MYxvnk8UATrATH_e0wonuaFMDyg_SMkmRTHF9PFnVFMd8Uw1Q-H7WtxLU-wPJhDjPX9P-Lc1329RPzh-YC6zkD4V_K8n5agnbDyHKmT2Zu4NCX4DBSVzR5MI5m0kM8fjTYaT9lzNo4dl7ljKA6C3plpA9NYvFsj13uGyfUa1S-3oLn7ETIGDA4pdV6cCJCOtjvdoIR39i1EV-VTdxUwpg4bhA-uOdIDXqrBqk4Fnh5QGqfJMV6934qvsPzgBPyVsfF_lqZWdn_k57Nkmsy74PGxRO_I43OKSvkVkXGDu_fgMm_odu6mdenngIqPahf5QsUw=w573-h1272-no?authuser=0 )