From e49af8c9f91680d2c6c29b675b14f9c711b9c40b Mon Sep 17 00:00:00 2001 From: Evangelos Oulis Date: Wed, 22 Jan 2020 03:03:16 +0200 Subject: [PATCH] Update v1.3 --- Photos/screenshot_web_ui.png | Bin 0 -> 162497 bytes project.adoc | 183 +++++++++++++++------- project.html | 284 ++++++++++++++++++++++++----------- serverNode/DB.sql | 9 ++ 4 files changed, 338 insertions(+), 138 deletions(-) create mode 100644 Photos/screenshot_web_ui.png diff --git a/Photos/screenshot_web_ui.png b/Photos/screenshot_web_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..3bb450f18f47b32c110b2ce4115ccbc62afd0e52 GIT binary patch literal 162497 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
ZrJU_M_Fq`h8~yirwOF?U;q~1sYi6xTcoKzpu;q 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διαθεσιμότητα 0 ή 1>. Ύστερα αποκωδικοποιεί την πληροφορία η οποία περιγράφει τον κωδικό της θέσης +την μορφή <κωδικός θέσης>#<διαθεσιμότητα 0 ή 1>. Ύστερα αποκωδικοποιεί αυτή την πληροφορία, η οποία περιγράφει τον κωδικό της θέσης και την διαθεσιμότητα της, και την αποστέλει μέσω ενός REST API με την μέθοδο POST σε έναν WEB Server. Για να αποσταλεί η πληροφορία -στον WEB Server πρέπει να πάρει την μορφή JSON (JavaScript Object Notation). +στον WEB Server πρέπει να πάρει την μορφή JSON (JavaScript Object Notation) και να έχει αυθεντικοποιηθεί από αυτό (** βλέπε παρακάτω). -Η μέθοδος του POST γίνεται στην περίπτωσή που η κατάσταση του Parking μεταβληθεί. Σε αντίθετη περίπτωση ο Server δεν ενημερώνεται. +Η μέθοδος του [POST] γίνεται στην περίπτωσή που η κατάσταση του Parking μεταβληθεί. Σε αντίθετη περίπτωση ο Server δεν ενημερώνεται. -Στον ίδιο φάκελο του κώδικα βρίσκεται ένα configuration αρχείο το οποίο περιέχει ένα JSON με την μορφή: +Στον ίδιο φάκελο του κώδικα βρίσκεται ένα configuration αρχείο το οποίο περιέχει κάποιες ρυθμίσεις του κόμβουσε μορφή JSON. +Οι ρυθμίσεις αυτές αφορούν ουσιαστικά την IP και την πόρτα του WEB Server που ένας τέτοιος κόμβος θα πρέπει να επικοινωνεί, +τα στοιχεία αυθεντικοποίησής του καθώς και τον κωδικό της θέσης του parking που εξυπηρετεί. Το αρχείο θα έχει τη μορφή: [source, JSON] ---- { "ip": "iot-smart-parking.herokuapp.com", - "port": "443" + "port": "443", + "username": "root", + "password": "root", + "device": 1 } ---- -Το αρχείο αυτό περιέχει ρυθμίσεις που αφορά τη σύνδεσή του με τον WEB Server την διευθυνδή του δηλαδή και την πόρτα -που ακούει. + +==== Προγραμματισμός Κόμβου +Ο επικοινωνία και ο προγραμματισμός του κόμβου αυτού, που είναι βασισμένος σε ένα Raspberry Pi 1, έγινε με σύνδεση (ssh) +έχοντας βέβαια και οι δύο (Raspberry και εμείς) πρόσβαση στο ίδιο δίκτυο. Η γλώσσα που χρησιμοποιήσαμε για τον έλεγχο +της σειριακής θύρας και την επικοινωνία του με ένα REST WEB Server ήταν η Python (version 3). ==== Διασύνδεηση στο Διαδίκτυο Ο κόμβος Gateway έχει διασύνδεση με το διαδίκτυο μέσω ενός καλωδίου Ethernet (UTP) έτσι ώστε να μπορέσει -να στείλει την πληροφορία στο διαδίκτυο, δηλαδή στον WEB Server. +να στείλει την πληροφορία που παράγει από τα δεδομένα του μικροελεγκτή Arduino (Σενσορ) στο διαδίκτυο, δηλαδή +στον REST WEB Server. Από την άλλη επικοινωνεί με το Arduino με μία σειριακή σύνδεση. -== Server Node (3~ο~ μέρος - Κεντρικός Server όπου κρατά την κατάσταση της κάθε θέσης του Parking) +=== Server Node (3~ο~ μέρος - Κεντρικός Server όπου κρατά την κατάσταση της κάθε θέσης του Parking) Ο κόμβος αυτός υλοποιεί ένα process γραμμένο σε γλώσσα προγραμματισμού Python (v3). Αυτό το process υλοποιεί ένα REST API έτσι ώστε να μπορούν να επικοινωνούν εύκολα οι Gateway κόμβοι μας με αυτόν. Στην είσοδό του και στην έξοδό του η πληροφορία έχει την μορφή JSON. -Ο server αποθηκεύει όλα τα απαραίτητα δεδομένα σε μία σχεσιακή βάση δεδομένων MySQL, η οποία διαθέτει έναν πίνακα. +Ο Server αποθηκεύει όλα τα απαραίτητα δεδομένα σε μία σχεσιακή βάση δεδομένων MySQL, η οποία διαθέτει έναν πίνακα. Ο πίνακας κρατά όλα τα απαραίτητα πεδία που είναι: * Τον κωδικό της θέσης parking * Την διαθεσιμότητά της αντίστοιχης θέση (0 ή 1) -=== Εκτέλεση του Process στο Cloud +Ακόμα υπάρχει και ένας δεύτερος πίνακας σε αυτή που έχει καταχωρημένα στοιχεία αυθεντικοποίησης που μπορεί να +χρησιμοποιήσει ένας κόμβος (Gateway Node) για να μπορεί να ενημερώνει την κατάσταση μίας θέσης Parking. Ο πίνακας +αυτός έχει τα απαραίτητα πεδία: + + * Τον κωδικό του χρήστη. + * Το όνομα χρήστη (username). + * Έναν κωδικό πρόσβασης (password). + +[source, sql] +---- +CREATE TABLE IF NOT EXISTS PARKING ( + PARKING_CODE INT(4) NOT NULL UNIQUE, + PARKING_STATUS BOOLEAN NOT NULL +); + +CREATE TABLE IF NOT EXISTS USERS ( + USER_NO INT(4) AUTO_INCREMENT, + USER_NAME VARCHAR(40) NOT NULL UNIQUE, + USER_PASS VARCHAR(40) NOT NULL, + PRIMARY KEY(USER_NO) +); +---- + +==== Υλοποίηση Κόμβου +Για τον προγραμματισμό του κόμβου επιλέχθηκε η γλώσσα προγραμματισμού Python (version 3). Για την υλοποίηση του WEB Server +χρησιμοποιήσαμε ένα WSGI και συγκεκριμένα το FLASK module της Python. Για την εκτέλεσή του έχουμε δύο υλοποιήσεις. Τη μία +που είναι με το FLASK όπου η εκτέλεση θα πραγματοποιηθεί σε έναν από τους υπολογιστές μας και η άλλη που είναι με gunicorn- +WEB Server στη Python όπου η εκτέλεση θα πραγματοποιηθεί σε μία υπηρεσία του Heroku. + + +==== Προγραμματισμός REST API WEB Server +Το REST API ενεργοποιεί δύο (τρεις) υπηρεσίες. Αυτές είναι: + +* / [GET]: επιστρέφει ένα Array από JSON objects, ένα JSON για κάθε θέση του parking αν είναι διαθέσιμη ή όχι κωδικοποιημένα με 0 ή 1. +Τα δεδομένα που επιστρέφει γίνονται fetch από τη βάση δεδομένων. + +Για παράδειγμα: + +[source, json] +---- +[{"no": 1, "status": false}, {"no": 2, "status": false}, {"no": 3, "status": false}, {"no": 4, "status": true}, {"no": 5, "status": false}, {"no": 6, "status": false}, {"no": 7, "status": false}, {"no": 8, "status": false}] +---- + +* /parkingStatus [POST] (content-type = "application/json"): που μας επιτρέπει να αλλάξουμε την κατάσταση μίας θέσης parking. Στο POST τα δεδομένα +ορίζονται στο body σε αναπαράσταση JSON, έτσι ώστε ο Server να είναι ικανός να τα επεξεργαστεί και να τα αποθηκεύσει +στη βάση δεδομένων που χρησιμοποιούμε. + +Για παράδειγμα: + +[source, json] +---- +{"no": 2, "status": false} +---- + +Ακόμα το REST API υλοποιεί μηχανιμσό αυθεντικοποίησης έτσι ώστε οι μεταβολές-ενημερώσεις των θέσεων του parking +να γίνονται μόνο από τους εξουσιοδοτημένους κόμβους του συστήματος. Αυτό επιτυγχάνεται με την ενεργοποίηση μίας +υπηρεσίας όπως περιγράφεται παρακάτω: + +* /authentication [POST] (content-type = "application/json): Η υπηρεσία αυτή κάνει register ένα Session σε κάθε +εξουσιοδοτημένο κόμβο ο οποίος αυθεντικοποιείται από τον Server με username και password. Όταν ο server αυθεντικοποιήσει +έναν κόμβο τότε ορίζει για αυτόν ένα χαρακτηριστικό που είναι ο κωδικός της θέσης που βρίσκεται, και ο Server του γυρνάει +ένα Session_id. Με βάση αυτό το κλειδί μπορεί ο κάθε (εξουσιοδοτημένος) κόμβος να χρησιμοποιήσει μία τέτοια υπηρεσία +όπως αυτή της καταχώρησης της διαθεσιμότητας κάθε θέσης από τους κόμβους αντίστοιχα. + + +==== Εκτέλεση του Process στο Cloud Για την εκτέλεση του process χρησιμοποιούμε μία πλατφόρμα IAAS (Infrastructure as a Service) - link:++https://www.heroku.com/platform++[Heroku], για την οποιά μπορούμε να βρούμε περεταίρω πληροφορίες στον σύνδεσμο παραπάνω. +Η πλατφόρμα μας επιτρέπει να ανεβάσουμε τον κώδικα του Server μας (Python) και να τον εκτελέσουμε στο Cloud. + Στην δωρεάν έκδοσή του δεν έχουμε περιορισμούς στο τμήμα του HTTP service που εκτελούμε, ενώ στη βάση δεδομένων -υπάρχουν περιοριμοί στις συνδέδεις που μπορούν να γίνουν ανα κάποιο χρονικό διάστημα (περίπου 10 συνδέσει ανα 1 ώρα). +υπάρχουν περιοριμοί στις συνδέδεις που μπορούν να γίνουν ανα κάποιο χρονικό διάστημα (περίπου 10 συνδέσει ανα 1 ώρα) και ένας +αριθμός Query (~3500) ανά 1~2 ώρες. + +Στα πλαίσια της άσκησης δεν θα δημιουργηθεί κάποιο πρόβλημα όσων αφορά την εκτέλεση του κεντρικού Server στο Cloud. [.float-group] -- @@ -182,9 +270,8 @@ image::Photos/itops-pizza_as_a_service.png[1000,800] εγκαθισούμε στο project που μόλις φτιάξαμε μία MySQL βάση δεδομένων για να μπορούμε να αποθηκεύσουμε τα δεδομένα μας. ==== Deployment -* Το πρώτο πράγμα που χρειαζόμαστε είναι όλες οι απαραίτητες βιβλιοθήκες που χρησιμοποιεί ο κώδικας, έτσι -ώστε να γνωρίζει το Heroku τι να μας προσφέρει. Αυτό επιτυγχάνεται με την αρχειοθέτηση αυτών σε ένα αρχείο -ονόματι requirements.txt . +* Το πρώτο πράγμα που χρειαζόμαστε είναι όλες οι απαραίτητες βιβλιοθήκες που χρησιμοποιεί ο κώδικας, έτσι ώστε να γνωρίζει +το Heroku τι να μας προσφέρει. Αυτό επιτυγχάνεται με την αρχειοθέτηση αυτών σε ένα αρχείο με όνομα requirements.txt . Το αρχείο που περιέχει όλα τα απαραίτητα modules για τον κώδικά μας είναι: @@ -199,12 +286,12 @@ mysql-connector * Έπειτα την δημιουργία ενός αρχείου που περιγράφει το που βρίσκεται η κύρια συνάρτηση μας (main) για την έναρξη του process. Αυτό το αρχείο ονομάζεται Procfile . Στο αρχείο αυτό αναφέτεται ένα gunicorn module. -Ο gunicorn είναι ένας Python HTTP WEB server. Αυτό ουσιαστικά είναι ο ο πυρήνας για την εκτέλεση του API μας. +Το gunicorn είναι ένα Python HTTP WEB server. Αυτό ουσιαστικά είναι ο πυρήνας για την εκτέλεση του REST API μας. * Έπειτα με μια απομακρυσμένη σύνδεση στη βάση μας της οποίας τα στοιχεία πρόσβασης γίνονται στο Heroku, πραγματοποιούμε μία σύνδεση και δημιουργούμε τον πίνακά μας για την αποθήκευση. -Το αρχείο αυτό έχει τη μορφή αυτή: +* Τέλος το αρχείο Procfile το οποίο περιέχει το αρχείο το οποίο φορτώσει το gunicorn το οποίο έχει τη μορφή: [source, conf] ---- @@ -235,48 +322,29 @@ export FLASK_DEBUG=1 flask run --host=[IP-v4] --port=8080 ---- -==== Περιγραφή REST API -Το REST API ουσιαστικά σηκώνει δύο υπηρεσίες. Αυτές είναι: - -* / [GET]: επιστρέφει ένα Array από JSON objects, ένα JSON για κάθε θέση του parking αν είναι διαθέσιμη ή όχι κωδικοποιημένα με 0 ή 1. -Τα δεδομένα που επιστρέφει γίνονται fetch από τη βάση δεδομένων. - -Για παράδειγμα: - -[source, json] ----- -[{"no": 1, "status": false}, {"no": 2, "status": false}, {"no": 3, "status": false}, {"no": 4, "status": true}, {"no": 5, "status": false}, {"no": 6, "status": false}, {"no": 7, "status": false}, {"no": 8, "status": false}] ----- - -* /parkingStatus [POST] (content-type = "application/json"): που μας επιτρέπει να αλλάξουμε την κατάσταση μίας θέσης parking. Στο POST τα δεδομένα -ορίζονται στο body σε αναπαράσταση JSON, έτσι ώστε ο Server να είναι ικανός να τα επεξεργαστεί και να τα αποθηκεύσει -στη βάση δεδομένων που χρησιμοποιούμε. - -Για παράδειγμα: -[source, json] ----- -{"no": 2, "status": false} ----- -Ακόμα το REST API υποστυρίζει μηχανιμσό αυθεντικοποίησης έτσι ώστε οι μεταβολές-ενημερώσεις των θέσεων του parking -να γίνονται μόνο από τους εξουσιοδοτημένους κόμβους του συστήματος. Αυτό επιτυγχάνεται με την ενεργοποίηση μίας -υπηρεσίας όπως περιγράφεται παρακάτω: +=== Διεπαφή Χρήστη (4~ο~ μέρος) +==== Η διεπαφή του χρήστη +Η διεπαφή του χρήστη αποτελείται από μία HTML σελίδα η οποία ενσωματώνει δύο JavaScript Processes. +Σκοπός αυτής είναι η αναπαράσταση της κατάστασης του Parking σε ένα γραφικό, φιλικό προς τον χρήστη περιβάλλον. +Η σελίδα λοιπόν επεικονίζει για κάθε θέση parking με χρώμα κόκκινο την "μη ελεύθεση" και με πράσινο την "ελεύθερη". -* /authentication [POST] (content-type = "application/json): +Ένα παράδειγμα μέσω στιγμιοτύπου παρουσιάζεται παρακάτω. -== Διεπαφή Χρήστη (4~ο~ μέρος) -=== Η διεπαφή του χρήστη -Η διεπαφή του χρήστη αποτελείται από μία HTML σελίδα η οποία ενσωματώνει δύο JavaScript Processes. -Σκοπός αυτής είναι η αναπαράσταση της κατάστασης του Parking. Η σελίδα λοιπόν επεικονίζει για κάθε θέση -parking με χρώμα κόκκινο την "μη ελεύθεση" και με πράσινο την "ελεύθερη". +[.float-group] +-- +[.center] +.Στιγμιότυπο παραδείγματος εκτέλεσης της διεπαφής χρήστη. +image::Photos/screenshot_web_ui.png[1000,800] +-- == Autonomous Parking -Το αυτότομο πρκάριμα αποτελείται από το όχημα με εγκατεστημένους τους απάραίτητους αισθητήρες και ελεγκτές -καθώς και έναν μικροελεγκτή (Arduino) για τον έλεγχο αυτών των ελεγκτών. Σκοπός είναι το όχημα να μπορεί +Το αυτόνομο πρκάριμα αποτελείται από το όχημα με εγκατεστημένους τους απάραίτητους αισθητήρες και ελεγκτές +καθώς, έναν μικροελεγκτή (Arduino) για τον έλεγχο αυτών των ελεγκτών και ένα Raspberry Pi1. Σκοπός είναι το όχημα να μπορεί να μάθει μέσω του διαδικτύου το "Status" του parking και να παρκάρει στην 1η διαθέσιμη θέση εφ' όσων -υπάρχει μία τουλάχιστων διαθέσιμη θέση στον χώρο στάθμευσης. +υπάρχει μία τουλάχιστoν διαθέσιμη θέση στον χώρο στάθμευσης. *Η υλοποίηση του αυτόνομου parking χωρίζεται σε δύο βασικά μέρη.* @@ -286,7 +354,7 @@ parking με χρώμα κόκκινο την "μη ελεύθεση" και μ * Το 2~ο~ μέρος αποτείται από τον κόμβο ο οποίος θα έχει πρόσβαση στο διαδίκτυο, όπου αφού ελέγξει αν υπάρχει διαθέσιμη θέση και γνωρίζει ποια είναι η πρώτη ελεύθερη θέση, να δώσει εντολή στον μικροελεγκτή να παρκάρει σε αυτή. -=== Microcotroller and Car +=== Microcotroller and Car (1~ο~ Μέρος) ==== Υλικά Κόμβου * 1 x Arduino Uno @@ -299,7 +367,7 @@ parking με χρώμα κόκκινο την "μη ελεύθεση" και μ * 1 x Car * 1 x Raspberry Pi -==== Υλοποίηση και Προγραμματισμός +==== Υλοποίηση Microcontroller on Car Ο motor driver, το Servo motor καθώς και ο Ultrasonic αισθητήρας κουμπώνουν στον μικροελεγκτή Arduino Uno που χρησιμοποιούμε, τον οποίο τον εγκαθηστούμε πάνω στο καλούπι του οχήματος το οποίο έχει εγκατεστημένα 4 τροχούς. Οι τροχοί οδηοούνται από 4 moters τα οποία τροφοδοτούνται από τον motor driver. @@ -314,6 +382,13 @@ image::Photos/diagram.png[1000,800] -- +=== Gateway Κόμβος (2~ο~ Μέρος) +Ο Gateway κόμβος του αυτόνομου οχήματος που θα έρθει στην θέση να παρκάρει μόνο του στο parking (ΙοΤ), είναι υπεύθυνος +για την διασύνδεση του οχήματος με το διαδίκτυο. Γι' αυτό το λόγο το process που σχεδιάσαμε να τρέχει σε αυτό το σημείο +είναι υπεύθυνο για την αναζήτηση της πληροφορίας ποια είναι η πρώτη ελεύθερη για να παρκάρει το όχημα και στη συνέχεια +να αποστέλει τον αριθμό της θέσης στον μικροελεγκτή Arduino ο οποίος είναι υπεύθυνος να πάρει αυτή την τιμή και να κατευθύνει +το όχημα. + .Reminder [NOTE] diff --git a/project.html b/project.html index 132013e..dbb451c 100644 --- a/project.html +++ b/project.html @@ -630,7 +630,20 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
-

1.1.3. Λειτουργία του Parking Sensor

+

1.1.3. Προγραμματισμός Κόμβου

+
+

Για τον πτογραμματισμό του Arduino Uno χρησιμοποιήσαμε μία σειριακή σύνδεση του μικροελγκτή με τον +υπολογιστή μας ο οποίος έφερε εγκατεστημένο το IDE του Arduino στον οποίο υπήρχαν όλες οι απαραότητες +βιβλιοθήκες για την υλοποίησή του. Η διαδικασία "καψήματος" ενός μικροελεγκτή Arduino είναι πολύ απλή. +Το μόνο που χρειάζεται να κάνει κανείς είναι να δώσει δικαιώματα γραψήματος και ανάγνωσης στην συσκευή +ttyACM0 που βρίσκεται στο directory (/dev/ στα linux) και λίγες γνώσεις από κώδικα.

+
+
+

Η γλώσσα του Arduino είναι γλώσσα που μοιάζει πάρα πολύ με τη C.

+
+
+
+

1.1.4. Λειτουργία του Parking Sensor

Κάθε κόμβος στέλνει στην σειριακή του τον κωδικό της θέσης, με τον οποίο έχει προγραμματιστεί το Arduino, και την κατάσταση του parking, κωδικοποιημένα με τον διαχωριστή "#". Για την κατάσταση του parking ορίζουμε @@ -642,7 +655,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b

-

1.1.4. Διασύνδεση Κόμβου

+

1.1.5. Διασύνδεση Κόμβου

Ο κόμβος αυτός συνδέεται με ένας "Gateway" κόμβο (βασισμένος σε Raspberry Pi) ο οποίος είναι υπεύθυνος για την μετάδοση της πληροφορίας στο διαδίκτυο. Η πληροφορία αυτή λαμβάνεται στον "Gateway" κόμβο ο οποίος στη συνέχεια @@ -675,53 +688,60 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b

-

1.2.2. Υλοποίηση και Προγραμματισμός

+

1.2.2. Υλοποίηση Gateway Κόμβου

Η υλοποίηση αποτελείται από την εγκατάσταση του Raspbian OS (light version) στο Raspberry και τη δημιουργία ενός proccess σε γλώσσα Python (v3). Το process αυτό διαβάζει από την σειριακή θύρα του την πληροφορία που λαμβάνει από ένα Arduino Uno με -την μορφή <κωδικός θέσης>#<διαθεσιμότητα 0 ή 1>. Ύστερα αποκωδικοποιεί την πληροφορία η οποία περιγράφει τον κωδικό της θέσης +την μορφή <κωδικός θέσης>#<διαθεσιμότητα 0 ή 1>. Ύστερα αποκωδικοποιεί αυτή την πληροφορία, η οποία περιγράφει τον κωδικό της θέσης και την διαθεσιμότητα της, και την αποστέλει μέσω ενός REST API με την μέθοδο POST σε έναν WEB Server. Για να αποσταλεί η πληροφορία -στον WEB Server πρέπει να πάρει την μορφή JSON (JavaScript Object Notation).

+στον WEB Server πρέπει να πάρει την μορφή JSON (JavaScript Object Notation) και να έχει αυθεντικοποιηθεί από αυτό (** βλέπε παρακάτω).

-

Η μέθοδος του POST γίνεται στην περίπτωσή που η κατάσταση του Parking μεταβληθεί. Σε αντίθετη περίπτωση ο Server δεν ενημερώνεται.

+

Η μέθοδος του [POST] γίνεται στην περίπτωσή που η κατάσταση του Parking μεταβληθεί. Σε αντίθετη περίπτωση ο Server δεν ενημερώνεται.

-

Στον ίδιο φάκελο του κώδικα βρίσκεται ένα configuration αρχείο το οποίο περιέχει ένα JSON με την μορφή:

+

Στον ίδιο φάκελο του κώδικα βρίσκεται ένα configuration αρχείο το οποίο περιέχει κάποιες ρυθμίσεις του κόμβουσε μορφή JSON. +Οι ρυθμίσεις αυτές αφορούν ουσιαστικά την IP και την πόρτα του WEB Server που ένας τέτοιος κόμβος θα πρέπει να επικοινωνεί, +τα στοιχεία αυθεντικοποίησής του καθώς και τον κωδικό της θέσης του parking που εξυπηρετεί. Το αρχείο θα έχει τη μορφή:

{
     "ip": "iot-smart-parking.herokuapp.com",
-    "port": "443"
+    "port": "443",
+    "username": "root",
+    "password": "root",
+    "device": 1
 }
+
+
+

1.2.3. Προγραμματισμός Κόμβου

-

Το αρχείο αυτό περιέχει ρυθμίσεις που αφορά τη σύνδεσή του με τον WEB Server την διευθυνδή του δηλαδή και την πόρτα -που ακούει.

+

Ο επικοινωνία και ο προγραμματισμός του κόμβου αυτού, που είναι βασισμένος σε ένα Raspberry Pi 1, έγινε με σύνδεση (ssh) +έχοντας βέβαια και οι δύο (Raspberry και εμείς) πρόσβαση στο ίδιο δίκτυο. Η γλώσσα που χρησιμοποιήσαμε για τον έλεγχο +της σειριακής θύρας και την επικοινωνία του με ένα REST WEB Server ήταν η Python (version 3).

-

1.2.3. Διασύνδεηση στο Διαδίκτυο

+

1.2.4. Διασύνδεηση στο Διαδίκτυο

Ο κόμβος Gateway έχει διασύνδεση με το διαδίκτυο μέσω ενός καλωδίου Ethernet (UTP) έτσι ώστε να μπορέσει -να στείλει την πληροφορία στο διαδίκτυο, δηλαδή στον WEB Server.

-
+να στείλει την πληροφορία που παράγει από τα δεδομένα του μικροελεγκτή Arduino (Σενσορ) στο διαδίκτυο, δηλαδή +στον REST WEB Server. Από την άλλη επικοινωνεί με το Arduino με μία σειριακή σύνδεση.

- -
-

2. Server Node (3ο μέρος - Κεντρικός Server όπου κρατά την κατάσταση της κάθε θέσης του Parking)

-
+
+

1.3. Server Node (3ο μέρος - Κεντρικός Server όπου κρατά την κατάσταση της κάθε θέσης του Parking)

Ο κόμβος αυτός υλοποιεί ένα process γραμμένο σε γλώσσα προγραμματισμού Python (v3). Αυτό το process υλοποιεί ένα REST API έτσι ώστε να μπορούν να επικοινωνούν εύκολα οι Gateway κόμβοι μας με αυτόν. Στην είσοδό του και στην έξοδό του η πληροφορία έχει την μορφή JSON.

-

Ο server αποθηκεύει όλα τα απαραίτητα δεδομένα σε μία σχεσιακή βάση δεδομένων MySQL, η οποία διαθέτει έναν πίνακα. +

Ο Server αποθηκεύει όλα τα απαραίτητα δεδομένα σε μία σχεσιακή βάση δεδομένων MySQL, η οποία διαθέτει έναν πίνακα. Ο πίνακας κρατά όλα τα απαραίτητα πεδία που είναι:

@@ -734,16 +754,120 @@ REST API έτσι ώστε να μπορούν να επικοινωνούν ε
-
-

2.1. Εκτέλεση του Process στο Cloud

+
+

Ακόμα υπάρχει και ένας δεύτερος πίνακας σε αυτή που έχει καταχωρημένα στοιχεία αυθεντικοποίησης που μπορεί να +χρησιμοποιήσει ένας κόμβος (Gateway Node) για να μπορεί να ενημερώνει την κατάσταση μίας θέσης Parking. Ο πίνακας +αυτός έχει τα απαραίτητα πεδία:

+
+
+
    +
  • +

    Τον κωδικό του χρήστη.

    +
  • +
  • +

    Το όνομα χρήστη (username).

    +
  • +
  • +

    Έναν κωδικό πρόσβασης (password).

    +
  • +
+
+
+
+
CREATE TABLE IF NOT EXISTS PARKING (
+    PARKING_CODE INT(4) NOT NULL UNIQUE,
+    PARKING_STATUS BOOLEAN NOT NULL
+);
+
+CREATE TABLE IF NOT EXISTS USERS (
+	USER_NO INT(4) AUTO_INCREMENT,
+	USER_NAME VARCHAR(40) NOT NULL UNIQUE,
+	USER_PASS VARCHAR(40) NOT NULL,
+	PRIMARY KEY(USER_NO)
+);
+
+
+
+

1.3.1. Υλοποίηση Κόμβου

+
+

Για τον προγραμματισμό του κόμβου επιλέχθηκε η γλώσσα προγραμματισμού Python (version 3). Για την υλοποίηση του WEB Server +χρησιμοποιήσαμε ένα WSGI και συγκεκριμένα το FLASK module της Python. Για την εκτέλεσή του έχουμε δύο υλοποιήσεις. Τη μία +που είναι με το FLASK όπου η εκτέλεση θα πραγματοποιηθεί σε έναν από τους υπολογιστές μας και η άλλη που είναι με gunicorn- +WEB Server στη Python όπου η εκτέλεση θα πραγματοποιηθεί σε μία υπηρεσία του Heroku.

+
+
+
+

1.3.2. Προγραμματισμός REST API WEB Server

+
+

Το REST API ενεργοποιεί δύο (τρεις) υπηρεσίες. Αυτές είναι:

+
+
+
    +
  • +

    / [GET]: επιστρέφει ένα Array από JSON objects, ένα JSON για κάθε θέση του parking αν είναι διαθέσιμη ή όχι κωδικοποιημένα με 0 ή 1. +Τα δεδομένα που επιστρέφει γίνονται fetch από τη βάση δεδομένων.

    +
  • +
+
+
+

Για παράδειγμα:

+
+
+
+
[{"no": 1, "status": false}, {"no": 2, "status": false}, {"no": 3, "status": false}, {"no": 4, "status": true}, {"no": 5, "status": false}, {"no": 6, "status": false}, {"no": 7, "status": false}, {"no": 8, "status": false}]
+
+
+
+
    +
  • +

    /parkingStatus [POST] (content-type = "application/json"): που μας επιτρέπει να αλλάξουμε την κατάσταση μίας θέσης parking. Στο POST τα δεδομένα +ορίζονται στο body σε αναπαράσταση JSON, έτσι ώστε ο Server να είναι ικανός να τα επεξεργαστεί και να τα αποθηκεύσει +στη βάση δεδομένων που χρησιμοποιούμε.

    +
  • +
+
+
+

Για παράδειγμα:

+
+
+
+
{"no": 2, "status": false}
+
+
+
+

Ακόμα το REST API υλοποιεί μηχανιμσό αυθεντικοποίησης έτσι ώστε οι μεταβολές-ενημερώσεις των θέσεων του parking +να γίνονται μόνο από τους εξουσιοδοτημένους κόμβους του συστήματος. Αυτό επιτυγχάνεται με την ενεργοποίηση μίας +υπηρεσίας όπως περιγράφεται παρακάτω:

+
+
+
    +
  • +

    /authentication [POST] (content-type = "application/json): Η υπηρεσία αυτή κάνει register ένα Session σε κάθε +εξουσιοδοτημένο κόμβο ο οποίος αυθεντικοποιείται από τον Server με username και password. Όταν ο server αυθεντικοποιήσει +έναν κόμβο τότε ορίζει για αυτόν ένα χαρακτηριστικό που είναι ο κωδικός της θέσης που βρίσκεται, και ο Server του γυρνάει +ένα Session_id. Με βάση αυτό το κλειδί μπορεί ο κάθε (εξουσιοδοτημένος) κόμβος να χρησιμοποιήσει μία τέτοια υπηρεσία +όπως αυτή της καταχώρησης της διαθεσιμότητας κάθε θέσης από τους κόμβους αντίστοιχα.

    +
  • +
+
+
+
+

1.3.3. Εκτέλεση του Process στο Cloud

Για την εκτέλεση του process χρησιμοποιούμε μία πλατφόρμα IAAS (Infrastructure as a Service) - Heroku, για την οποιά μπορούμε να βρούμε περεταίρω πληροφορίες στον σύνδεσμο παραπάνω.

+

Η πλατφόρμα μας επιτρέπει να ανεβάσουμε τον κώδικα του Server μας (Python) και να τον εκτελέσουμε στο Cloud.

+
+

Στην δωρεάν έκδοσή του δεν έχουμε περιορισμούς στο τμήμα του HTTP service που εκτελούμε, ενώ στη βάση δεδομένων -υπάρχουν περιοριμοί στις συνδέδεις που μπορούν να γίνουν ανα κάποιο χρονικό διάστημα (περίπου 10 συνδέσει ανα 1 ώρα).

+υπάρχουν περιοριμοί στις συνδέδεις που μπορούν να γίνουν ανα κάποιο χρονικό διάστημα (περίπου 10 συνδέσει ανα 1 ώρα) και ένας +αριθμός Query (~3500) ανά 1~2 ώρες.

+
+
+

Στα πλαίσια της άσκησης δεν θα δημιουργηθεί κάποιο πρόβλημα όσων αφορά την εκτέλεση του κεντρικού Server στο Cloud.

@@ -761,14 +885,14 @@ REST API έτσι ώστε να μπορούν να επικοινωνούν ε , περισσότερα για το deployment εδώ. Ακόμα εγκαθισούμε στο project που μόλις φτιάξαμε μία MySQL βάση δεδομένων για να μπορούμε να αποθηκεύσουμε τα δεδομένα μας.

+
-

2.1.1. Deployment

+

1.3.4. Deployment

  • -

    Το πρώτο πράγμα που χρειαζόμαστε είναι όλες οι απαραίτητες βιβλιοθήκες που χρησιμοποιεί ο κώδικας, έτσι -ώστε να γνωρίζει το Heroku τι να μας προσφέρει. Αυτό επιτυγχάνεται με την αρχειοθέτηση αυτών σε ένα αρχείο -ονόματι requirements.txt .

    +

    Το πρώτο πράγμα που χρειαζόμαστε είναι όλες οι απαραίτητες βιβλιοθήκες που χρησιμοποιεί ο κώδικας, έτσι ώστε να γνωρίζει +το Heroku τι να μας προσφέρει. Αυτό επιτυγχάνεται με την αρχειοθέτηση αυτών σε ένα αρχείο με όνομα requirements.txt .

@@ -789,13 +913,17 @@ mysql-connector
  • Έπειτα την δημιουργία ενός αρχείου που περιγράφει το που βρίσκεται η κύρια συνάρτηση μας (main) για την έναρξη του process. Αυτό το αρχείο ονομάζεται Procfile . Στο αρχείο αυτό αναφέτεται ένα gunicorn module. -Ο gunicorn είναι ένας Python HTTP WEB server. Αυτό ουσιαστικά είναι ο ο πυρήνας για την εκτέλεση του API μας.

    +Το gunicorn είναι ένα Python HTTP WEB server. Αυτό ουσιαστικά είναι ο πυρήνας για την εκτέλεση του REST API μας.

    +
  • +
  • +

    Έπειτα με μια απομακρυσμένη σύνδεση στη βάση μας της οποίας τα στοιχεία πρόσβασης γίνονται στο Heroku, +πραγματοποιούμε μία σύνδεση και δημιουργούμε τον πίνακά μας για την αποθήκευση.

    +
  • +
  • +

    Τέλος το αρχείο Procfile το οποίο περιέχει το αρχείο το οποίο φορτώσει το gunicorn το οποίο έχει τη μορφή:

  • -
    -

    Το αρχείο αυτό έχει τη μορφή αυτή:

    -
    web: gunicorn serv:app --preload --timeout 150000
    @@ -822,80 +950,62 @@ mysql-connector
    • -<<<<<<< HEAD -

      Έπειτα με μια απομακρυσμένη σύνδεση στη βάση μας της οποίας τα στοιχεία πρόσβασης γίνονται στο Heroku, -πραγματοποιούμε μία σύνδεση και δημιουργούμε τον πίνακά μας για την αποθήκευση.

      -=======

      Έπειτα με μια απομακρυσμένη σύνδεση στη βάση μας της οποίας τα στοιχεία πρόσβασης δίνονται από Heroku, πραγματοποιούμε μία σύνδεση και δημιουργούμε τον πίνακά μας για την αποθήκευση των δεδομένων.

      ->>>>>>> 6cae23e4eeddcdfcc8a558241aeb46b4de0153df
    -

    2.1.2. REST API

    -
    -

    Το REST API ουσιαστικά σηκώνει δύο υπηρεσίες. Αυτές είναι:

    -
    -
    -
      -
    • -

      / [GET]: επιστρέφει ένα Array από JSON objects, ένα JSON για κάθε θέση του parking αν είναι διαθέσιμη ή όχι κωδικοποιημένα με 0 ή 1. -Τα δεδομένα που επιστρέφει γίνονται fetch από τη βάση δεδομένων.

      -
    • -
    -
    +

    1.3.5. Σε άλλη περίπτωση Deployment στο Localhost

    -

    Για παράδειγμα:

    +

    Στην περίπτωση όπου η πλατφόρμα Heroku μας περιορίζει στα ερωτήματα στη βάση δεδομένων που χρησιμοποιούμε +κάνουμε deploy της εφαρμογής στον localhost. Για να το επιτύχουμε αυτό θα εκτελέσουμε τις εξής εντολές στο +terminal.

    -
    [{"no": 1, "status": false}, {"no": 2, "status": false}, {"no": 3, "status": false}, {"no": 4, "status": true}, {"no": 5, "status": false}, {"no": 6, "status": false}, {"no": 7, "status": false}, {"no": 8, "status": false}]
    +
    export FLASK_APP=serv
    +export FLASK_DEBUG=1
    +flask run --host=[IP-v4] --port=8080
    -
    -
      -
    • -

      /parkingStatus [POST]: που μας επιτρέπει να αλλάξουμε την κατάσταση μίας θέσης parking. Στο POST τα δεδομένα -ορίζονται στο body σε αναπαράσταση JSON, έτσι ώστε ο Server να είναι ικανός να τα επεξεργαστεί και να τα αποθηκεύσει -στη βάση δεδομένων που χρησιμοποιούμε.

      -
    • -
    -
    -

    Για παράδειγμα:

    -
    -
    -
    {"no": 2, "status": false}
    +
    +

    1.4. Διεπαφή Χρήστη (4ο μέρος)

    +
    +

    1.4.1. Η διεπαφή του χρήστη

    +
    +

    Η διεπαφή του χρήστη αποτελείται από μία HTML σελίδα η οποία ενσωματώνει δύο JavaScript Processes. +Σκοπός αυτής είναι η αναπαράσταση της κατάστασης του Parking σε ένα γραφικό, φιλικό προς τον χρήστη περιβάλλον. +Η σελίδα λοιπόν επεικονίζει για κάθε θέση parking με χρώμα κόκκινο την "μη ελεύθεση" και με πράσινο την "ελεύθερη".

    +
    +

    Ένα παράδειγμα μέσω στιγμιοτύπου παρουσιάζεται παρακάτω.

    +
    +
    +
    +
    +1000
    +
    Figure 4. Στιγμιότυπο παραδείγματος εκτέλεσης της διεπαφής χρήστη.
    -
    -

    3. Διεπαφή Χρήστη (4ο μέρος)

    -
    -
    -

    3.1. Η διεπαφή του χρήστη

    -
    -

    Η διεπαφή του χρήστη αποτελείται από μία HTML σελίδα η οποία ενσωματώνει και δύο JavaScript Processes. -Σκοπός αυτής είναι η ανααπαράσταση της κατάστασης του Parking. Η σελίδα λοιπόν ενσωματώνει για κάθε θέση -parking

    -

    4. Autonomous Parking

    +

    2. Autonomous Parking

    -

    Το αυτότομο πρκάριμα αποτελείται από το όχημα με εγκατεστημένους τους απάραίτητους αισθητήρες και ελεγκτές -καθώς και έναν μικροελεγκτή (Arduino) για τον έλεγχο αυτών των ελεγκτών. Σκοπός είναι το όχημα να μπορεί +

    Το αυτόνομο πρκάριμα αποτελείται από το όχημα με εγκατεστημένους τους απάραίτητους αισθητήρες και ελεγκτές +καθώς, έναν μικροελεγκτή (Arduino) για τον έλεγχο αυτών των ελεγκτών και ένα Raspberry Pi1. Σκοπός είναι το όχημα να μπορεί να μάθει μέσω του διαδικτύου το "Status" του parking και να παρκάρει στην 1η διαθέσιμη θέση εφ' όσων -υπάρχει μία τουλάχιστων διαθέσιμη θέση στον χώρο στάθμευσης.

    +υπάρχει μία τουλάχιστoν διαθέσιμη θέση στον χώρο στάθμευσης.

    Η υλοποίηση του αυτόνομου parking χωρίζεται σε δύο βασικά μέρη.

    @@ -913,9 +1023,9 @@ parking

    -

    4.1. Microcotroller and Car

    +

    2.1. Microcotroller and Car (1ο Μέρος)

    -

    4.1.1. Υλικά Κόμβου

    +

    2.1.1. Υλικά Κόμβου

    • @@ -949,7 +1059,7 @@ parking

    -

    4.1.2. Υλοποίηση και Προγραμματισμός

    +

    2.1.2. Υλοποίηση Microcontroller on Car

    Ο motor driver, το Servo motor καθώς και ο Ultrasonic αισθητήρας κουμπώνουν στον μικροελεγκτή Arduino Uno που χρησιμοποιούμε, τον οποίο τον εγκαθηστούμε πάνω στο καλούπι του οχήματος το οποίο έχει εγκατεστημένα 4 τροχούς. Οι τροχοί οδηοούνται από 4 moters @@ -964,10 +1074,21 @@ parking

    1000
    -
    Figure 4. Συνδεσμολογία moter, motor driver, arduino, ultrasonic sensor και servo motor.
    +
    Figure 5. Συνδεσμολογία moter, motor driver, arduino, ultrasonic sensor και servo motor.
    +
    +
    +
    +

    2.2. Gateway Κόμβος (2ο Μέρος)

    +
    +

    Ο Gateway κόμβος του αυτόνομου οχήματος που θα έρθει στην θέση να παρκάρει μόνο του στο parking (ΙοΤ), είναι υπεύθυνος +για την διασύνδεση του οχήματος με το διαδίκτυο. Γι' αυτό το λόγο το process που σχεδιάσαμε να τρέχει σε αυτό το σημείο +είναι υπεύθυνο για την αναζήτηση της πληροφορίας ποια είναι η πρώτη ελεύθερη για να παρκάρει το όχημα και στη συνέχεια +να αποστέλει τον αριθμό της θέσης στον μικροελεγκτή Arduino ο οποίος είναι υπεύθυνος να πάρει αυτή την τιμή και να κατευθύνει +το όχημα.

    +
    @@ -985,14 +1106,9 @@ SLOW SUCCESS BUILDS CHARACTER, FAST SUCCESS BUILDS EGO. - diff --git a/serverNode/DB.sql b/serverNode/DB.sql index 61a2b60..c5b8235 100644 --- a/serverNode/DB.sql +++ b/serverNode/DB.sql @@ -1,7 +1,16 @@ DROP TABLE IF EXISTS PARKING; +DROP TABLE IF EXISTS USERS; CREATE TABLE IF NOT EXISTS PARKING ( PARKING_CODE INT(4) NOT NULL UNIQUE, PARKING_STATUS BOOLEAN NOT NULL ); +CREATE TABLE IF NOT EXISTS USERS ( + USER_NO INT(4) AUTO_INCREMENT, + USER_NAME VARCHAR(40) NOT NULL UNIQUE, + USER_PASS VARCHAR(40) NOT NULL, + PRIMARY KEY(USER_NO) +); + +INSERT INTO USERS(USER_NAME, USER_PASS) VALUES("root", "root");