SlideShare a Scribd company logo
1 of 70
Download to read offline
INTERNET OF THINGS,
THE NEXT BIG THING.
Του σπουδαστή,
Κυριάκου Παπαχρήστου, 23/11
Τμήμα Εφαρμοσμένης Πληροφορικής
Πανεπιστήμιο Μακεδονίας, Θεσσαλονίκη
Έτος:2015/2016
ΠΕΡΙΕΧΟΜΕΝΑ
1. Εισαγωγή…………………………………………………………………………….………….σελ. 4
2. Περιγραφή του Προβλήματος
2.1 Μάθηση και Σκέψη μέσω του Internet of Things………………………...σελ.8
2.2 Αρχιτεκτονική ως Διεπαφή………………………………………………………….σελ.9
2.3 Επίπεδα Αναζήτησης…………………………………………………………………..σελ.11
2.4 Περιγραφή του UoM Greenhouse……………………………………………….σελ.13
3. Βασική Γνώση και Τεχνολογίες που χρησιμοποιήθηκαν…..…σελ. 15
4. Περιγραφή της προτεινόμενης λύσης
4.1 Ρύθμιση Πλατφόρμας…………………………………………………………………σελ. 22
4.2 Εισάγοντας το Kura στο Περιβάλλον Χρήστη………………………………σελ. 25
4.3 OSGi Project με το Kura………………………………………………………………σελ. 27
4.4 Δημιουργία ενός Deployment Package……………………………………...σελ. 36
5. Τεχνική Ανάλυση της λύσης
5.1 Ετοιμάζοντας το Hardware………………………………………………………..σελ. 38
5.2 Συναρμολόγηση του Raspberry Pi και των Αισθητήρων…………….σελ. 42
5.3 Αναπτύσσοντας ένα Έξυπνο Θερμοκήπιο………………………………….σελ. 50
5.4 Κάνοντας το Θερμοκήπιο “Εξυπνότερο”……………………………………σελ. 54
6. Πιθανές επεκτάσεις και σενάρια εφαρμογής
6.1 Χρήση Επιπλέον I2C Αισθητήρων……………………………………………..σελ. 61
6.2 Χρήση Διαφορετικής Υπηρεσίας Cloud……………………………….…….σελ. 62
6.3 Σύνδεση Αισθητήρων στο Διαδίκτυο………………………………………..σελ. 63
6.4 myDevices Cayenne Builder………………………………………………………σελ. 64
6.5 Reactive Blocks………………………………………………………………………….σελ. 66
7. Συμπεράσματα……………………………………………………………………..…….σελ. 68
8. Παράρτημα
8.1 Βιβλιογραφία και Αναφορές…………………………………………….………σελ.69
1. Εισαγωγή
“Internet Of Things (IoT)”: ένα σύνολο συσκευών (αντικειμένων ή “πραγμάτων”) με
ενσωματωμένες σε αυτά δικτυακές διεπαφές, λογισμικό, αισθητήρες, ηλεκτρονικά
και ηλεκτρομηχανικά εξαρτήματα όπου μέσω της συνέργειας αυτών των
παραγόντων και της σύνδεσης στο διαδίκτυο μπορεί να επιτευχθεί ανταλλαγή
πληροφοριών με τον κατασκευαστή, τον χρήστη ή/και με άλλες συνδεδεμένες
συσκευές. Κάθε “πράγμα” είναι μοναδικά αναγνωρίσιμο μέσω των ενσωματωμένων
υπολογιστικών συστημάτων του και είναι σε θέση να διαλειτουργεί μέσα στην
υπάρχουσα υποδομή του Διαδικτύου. [1]
Το Internet Of Things χαρακτηρίζεται ως ‘’η επόμενη Βιομηχανική επανάσταση’’
λόγω του τρόπου που θα επηρεάσει τον τρόπο που οι άνθρωποι ζούνε, εργάζονται,
ψυχαγωγούνται και ταξιδεύουν, καθώς και του τρόπου όπου οι κυβερνήσεις και οι
επιχειρήσεις θα αλληλεπιδρούν με τον κόσμο. Στην πραγματικότητα η επανάσταση
έχει ήδη ξεκινήσει.
Το καινούριο αυτοκίνητο που έρχεται εφοδιασμένο με μία πληθώρα εφαρμογών;
Internet Of Things! Οι έξυπνες οικιακές συσκευές που σου επιτρέπουν να χειριστείς
το θερμοστάτη και να παίξεις μουσική απλά με μία φωνητική εντολή; Internet Of
Things! Τα wearables που φοράς στον καρπό σου και μπορούν να ενημερώνουν
τους φίλους σου και την οικογένεια σου για το επίπεδο αντοχής σου; Νομίζω
καταλάβατε που το πηγαίνω.
Αλλά αυτή είναι μόνο η αρχή….
Η υπηρεσία έρευνας της Business Insider, παρακολούθησε την ανάπτυξη του ΙοΤ για
τα τελευταία 2 χρόνια, και ιδιαίτερα το πως οι καταναλωτές, οι επιχειρήσεις και οι
κυβερνήσεις χειρίζονται το ΙοΤ οικοσύστημα.
Το ΙοΤ Οικοσύστημα[13]
Φωτ.1: Κύκλος ζωής IoT, Business Insider
Στο συγκεκριμένο οικοσύστημα, μία οντότητα χρησιμοποιεί μία απομακρυσμένη
συσκευή (remote), δηλαδή ένα smartphone, tablet κ.τ.λ. για να στείλει μία εντολή ή
μία αίτηση για πληροφορία, πάνω σε ένα δίκτυο (Internet Network) για μία
συσκευή ΙοΤ (IoT Device). Η συσκευή τότε εκτελεί την εντολή ή/και στέλνει την
πληροφορία πίσω μέσω του ίδιου δικτύου για να αναλυθεί και απεικονιστεί στην
απομακρυσμένη συσκευή. Υπάρχουν πολλαπλές τοποθεσίες όπου μπορούν να
αναλυθούν και αποθηκευτούν τα δεδομένα που παράχθηκαν από την ΙοΤ συσκευή,
όπως το cloud, μία τοπική βάση δεδομένων, ακόμα και στην ίδια την ΙοΤ συσκευή.
Η κινητήρια δύναμη της αγοράς για την τεχνολογία ΙοΤ, προέρχεται κυρίως από την
επέκταση της συνδεσιμότητας στο διαδίκτυο, από την υψηλή προσαρμοστικότητα
στις κινητές συσκευές, από το χαμηλό κόστος των αισθητήρων αλλά και από τις
μεγάλες επενδύσεις σε αυτόν τον τομέα. Από την άλλη πλευρά η τροχοπέδη είναι
τα θέματα πολιτικών ασφάλειας , ιδιωτικότητας και τεχνολογικού
κατακερματισμού. Όσον αφορά τώρα τους τομείς των επενδύσεων, αυτοί θα
αφορούν αφενός την ανάπτυξη εφαρμογών για ΙοΤ καθώς και συσκευών hardware
που αναμένεται να φτάσει εως το 2020 το ποσό των 5 τρις.! και αφετέρου την
σχεδίαση συστημάτων ενσωμάτωσης, αποθήκευσης δεδομένων, ζητημάτων
ασφαλείας και συνδεσιμότητας, οι οποίες επενδύσεις θα ανέρχονται στο 1 τρις.
Έπειτα από αυτή τη σύντομη εισαγωγή θα ήταν σωστό να τονίσουμε τον σκοπό
αυτής της εργασίας καθώς και το λόγο που επέλεξα το συγκεκριμένο θέμα. Αρχικά,
σκοπός της εργασίας είναι να εισάγουμε τις βασικές έννοιες και τεχνολογίες που
μπορούμε να χρησιμοποιήσουμε στο Internet of Things καθώς και να μελετήσουμε,
να υλοποιήσουμε και να αναπτύξουμε παραπέρα μία εφαρμογή επίδειξης του
Eclipse για την ενσωμάτωση ενός Internet of Things κλειστού δικτύου σε ένα
εικονικό θερμοκήπιο. Αφού μελετήσουμε τα τεχνικά του στοιχεία και εν τέλει
εφόσον κατανοήσουμε κάθε διαφορετικό κομμάτι της λειτουργίας του, να
προσθέσουμε κάποιες επιπλέον δυνατότητες σε αυτή την εφαρμογή και να την
δοκιμάσουμε μέσω μιας διεπιφάνειας ιστού προσαρμοσμένη στα μέτρα μας .
Ελπίζω πως το αναμενόμενο εκπαιδευτικό αποτέλεσμα θα είναι η κατανόηση της
αρχιτεκτονικής μιας εφαρμογής που χρησιμοποιεί την συγκεκριμένη τεχνολογία, της
λειτουργίας και της επικοινωνίας μεταξύ των συνδεδεμένων συσκευών και
πλατφορμών, και πως η παραλλαγή της εφαρμογής μας θα εξηγήσει περαιτέρω
στον χρήστη τις διαφοροποιήσεις που θα χρειαστεί ο λειτουργικός κώδικας της
εφαρμογής ώστε να μπορεί να αποκτήσει περισσότερες δυνατότητες. Επιπλέον, θα
αναδείξουμε τις δυνατότητες του hardware και συγκεκριμένα του Raspberry Pi,
ώστε αυτό να μπορεί να συνδέεται με επιτυχία με τους αισθητήρες και να μπορεί
να λαμβάνει, κωδικοποιεί και αναλύει τα δεδομένα σε πραγματικό χρόνο. Η
παραπάνω τεχνολογία συγχέεται με αυτή του Internet of Things, του Ubiquitous και
Pervasive Computing, με τους οποίους όρους θα ασχοληθούμε αμέσως.
Ubiquitous Computing: είναι μία έννοια στην τεχνολογία λογισμικού και την
επιστήμη των υπολογιστών όπου η χρήση υπολογιστών είναι πανταχού παρούσα
χρησιμοποιώντας οποιαδήποτε συσκευή σε οποιαδήποτε τοποθεσία σε
οποιαδήποτε μορφή. Με λίγα λόγια ένας χρήστης ενεργεί με μία διεπαφή του
υπολογιστή , ο οποίος μπορεί να λαμβάνει κάποια μορφή, όπως φορητός
υπολογιστής, tablet, smartphone, καθώς και τερματικό σε καθημερινά αντικείμενα
όπως μία λάμπα ή ένα ραδιόφωνο. Ο κύριος στόχος της πανταχού παρούσας
υπολογιστικής είναι η δημιουργίας έξυπνων πακέτων που είναι συνδεδεμένα,
κάνοντας έτσι την επικοινωνία αλλά και την ανταλλαγή δεδομένων ευκολότερη και
πιο υποφερτή. Τα βασικά χαρακτηριστικά της περιλαμβάνουν:
● Την αναγνώριση του ανθρώπινου παράγοντα δηλαδή την ανάπτυξη της
εφαρμογής και της διεπαφής με βάση το ανθρώπινο και όχι το
υπολογιστικό περιβάλλον,
● Την χρήση οικονομικών επεξεργαστών, μειώνοντας τις απαιτήσεις μνήμης
και αποθήκευσης,
● Την ανάκτηση δεδομένων σε πραγματικό χρόνο,
● Την ολοκληρωτική διασύνδεση και τις συνεχώς διαθέσιμες υπολογιστικές
συσκευές,
● Την εστίαση σε σχέσεις πολλά-προς-πολλά, αντί για ένα-προς-ένα στο
περιβάλλον, σε συνδυασμό με την τεχνολογία η οποία είναι πάντα
παρούσα,
● Την χρήση τοπικών/παγκόσμιων, δημόσιων/ιδιωτικών, ορατών/αόρατων
χαρακτηριστικών για την δημιουργία γνώσης και διάδοσης της
πληροφορίας,
● Την σύγκλιση του διαδικτύου, της ασύρματης τεχνολογίας και των
προηγμένων ηλεκτρονικών συσκευών,
● Την αυξημένη επιτήρηση και τον ενδεχόμενο περιορισμό ανάμειξης στην
ιδιωτικότητα του χρήστη, καθώς οι συσκευές είναι συνεχώς συνδεδεμένες
[2]
Η πανταχού παρούσα υπολογιστική είναι περίπου το αντίθετο της εικονικής
πραγματικότητας διότι ενώ η εικονική πραγματικότητα βάζει τους ανθρώπους μέσα
σε μία πραγματικότητα δημιουργημένη από τον υπολογιστή η πανταχού παρούσα
υπολογιστική ωθεί τους υπολογιστές να συνυπάρξουν με την ανθρωπότητα.
Pervasive Computing: είτε στα ελληνικά “διάχυτη υπολογιστική” αναφέρεται στην
σύγκλιση και στην σύνθεση των υπαρχόντων τεχνολογιών. Κυρίως ακολουθεί την
ιδέα ότι η τεχνολογία κινείται πέρα από τον προσωπικό υπολογιστή σε καθημερινές
συσκευές με την ενσωματωμένη τεχνολογία και συνδεσιμότητα καθώς οι
υπολογιστικές συσκευές γίνονται μικρότερες και πιο ισχυρές. Η Διάχυτη
υπολογιστική πηγαίνει πέρα από τη σφαίρα των προσωπικών υπολογιστών: είναι η
ιδέα ότι σχεδόν οποιαδήποτε συσκευή, από ρούχα, εργαλεία, αυτοκίνητα, σπίτια,
το ανθρώπινο σώμα ως μια κούπα του καφέ, μπορεί να ενσωματωθεί με τσιπ για να
συνδεθεί αυτή η συσκευή σε ένα άπειρο δίκτυο άλλων συσκευών. Ο στόχος της
Pervasive computing, η οποία συνδυάζει τις τρέχουσες τεχνολογίες δικτύου με
φορητούς υπολογιστές, την αναγνώριση φωνής, την ικανότητα του Διαδικτύου και
την τεχνητή νοημοσύνη, είναι να δημιουργήσει ένα περιβάλλον όπου η σύνδεση
των συσκευών είναι ενσωματωμένη με ένα τέτοιο τρόπο ώστε η συνδεσιμότητα να
είναι διακριτική και πάντα στη διάθεσή μας. [3]
2. Περιγραφή του προβλήματος
2.1 ΜΑΘΗΣΗ ΚΑΙ ΣΚΕΨΗ ΜΕΣΩ ΤΟΥ INTERNET OF THINGS
Τα οφέλη του ηλεκτρονικού υπολογιστή έχουν και το αντίτιμό τους, δηλαδή πρέπει
να μάθουμε πως να αλληλεπιδρούμε με αυτές τις συσκευές με τρόπο ο οποίος θα
έμοιαζε τόσο ξένος προς τους προγόνους μας: ποντίκι, πληκτρολόγιο, περίεργες
χειρονομίες, περίεργες συσκευές και λειτουργίες συσκευών. Αλλά τι μας
επιφυλάσσει το μέλλον για την μάθηση και την τεχνολογία; Υπάρχει άραγε κάποιος
τρόπος να συμβιβάσουμε τον διαχωρισμό μεταξύ όλων των ψηφιακών στοιχείων
και το ευρύ φάσμα των αλληλεπιδράσεων που είναι δυνατό να δημιουργήσει το
σώμα μας; Και πως αλλάζει ο ρόλος ενός χρήστη όταν έχει να κάνει με έξυπνες και
πιθανόν δυνητικά ευέλικτες συσκευές; Αν ρίξουμε μία ματιά στις τάσεις της
τεχνολογίας και ιδιαιτέρως σε ότι είναι συνυφασμένο με απτές συσκευές, δηλαδή
φυσικά αντικείμενα διασυνδεδεμένα με υπολογιστές, θα δούμε πως υποδηλώνουν
ένα μέλλον όπου οι αλληλεπιδράσεις με ψηφιακή πληροφορία “έρχονται” πίσω
από το γυαλί ώστε να γίνουν πράγματα που κυριολεκτικά μπορούμε να πιάσουμε.
Εδώ βέβαια προκύπτει και το εξής ερώτημα που θα αναλύσουμε αμέσως. Υπάρχει
κάποια εξήγηση στο “γιατί” μπορούμε να επωφεληθούμε από αυτές τις απτές
συσκευές ιδιαιτέρως εκεί όπου ο σκοπός μας είναι η ίδια η κατανόηση; Πριν
απαντήσουμε σε αυτό το ερώτημα πρέπει να καταργήσουμε τον αστικό μύθο ότι η
σκέψη προέρχεται αποκλειστικά από τον εγκέφαλο. Ο εγκέφαλος είναι ένα όργανο
σκέψης, το οποίο δέχεται ένα εξωτερικό ερέθισμα ως είσοδο, επεξεργάζεται αυτό
το ερέθισμα και κατευθύνει το σώμα να αντιδράσει. Στην ουσία έχουμε την
διαδικασία, “σκέψη και μετά πράξη”. Αλλά, μία πρόσφατη και αναπτυσσόμενη
άποψη της γνώσης απορρίπτει αυτή την έννοια του δυισμού του νου και σώματος.
Ίσως τελικά σκεφτόμαστε ενώ πράττουμε.
Ας πάρουμε ως παράδειγμα το παιχνίδι σκάκι. Πολλές φορές τυγχάνει να
σηκώσουμε ένα πιόνι και να το μετακινήσουμε σε μία θέση μόνο και μόνο για να
δούμε ποιο θα μπορούσε να είναι το αποτέλεσμα. Για όλες αυτές τις μετακινήσεις
δεν υπάρχει πραγματική αλλαγή στο παιχνίδι, αλλά μας βοηθά να σκεφτούμε
πρακτικά την κίνησή μας. Από αυτό συμπεραίνουμε ότι χρησιμοποιούμε το
περιβάλλον μας για να επεκτείνουμε τις ικανότητες της σκέψης μας.
Περιπλανώμενοι μεταξύ διαφορετικών επιλογών, είμαστε ικανοί να δούμε καθαρά
πιθανά αποτελέσματα, δηλαδή η διαδικασία “σκέψη μέσω της πράξης”.
2.2 ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΩΣ ΔΙΕΠΑΦΗ
Η ανάγκη του ανθρώπου για διάχυτη συνδεσιμότητα μας οδήγησε να
ενσωματώσουμε στην ζωή μας το Διαδίκτυο, και να επιμείνουμε στο ότι όλοι οι
χώροι που μπορεί να βρισκόμαστε μας συνδέουν με τις φορητές συσκευές μας
όπου όλα τα περιβάλλοντα είναι διασυνδεδεμένα Internet - Enabled συσκευές
“εισχωρούν” μέσα στους χώρους που κατοικούμε και μας ειδοποιούν για συνθήκες
που αφορούν το φως, την ακτινοβολία, την ποιότητα του αέρα και την
θερμοκρασία, την ανίχνευση εισβολέων και παραβιάσεων της ασφάλειας και μας
επιτρέπουν να ανοίγουμε κλειδωμένες πόρτες απομακρυσμένα, χρησιμοποιώντας
κινητές συσκευές. Καταλαβαίνουμε λοιπόν πως υπάρχει πληθώρα τρόπων
αλληλεπιδράσεων, συγκέντρωση εκτενούς πληροφορίας, κατανόησης, διαβίβασης,
χειρισμού και αποθήκευσης της πληροφορίας. Τέτοιοι τρόποι αλληλεπιδράσεων
είναι οι εξής [4]:
1. Επίγνωση: τι μπορούμε να μετρήσουμε, τι μπορούμε να μάθουμε.
Σε ένα θεμελιώδες επίπεδο, οι αισθητήρες ανιχνεύουν μία κατάσταση στο
περιβάλλον και μπορούν να αναφέρουν την παρουσία ή κίνηση ενός ατόμου
ή αντικειμένου σε κάποιο χώρο. Μπορούνε επίσης να ορίσουν την
θερμοκρασία, την ένταση του φωτός, ή να ανιχνεύσουν υγρασία. Η
επίγνωση, λοιπόν, μιας κατάστασης είναι θεμελιώδης βήμα που χρειάζεται
για την αναφορά και την απόφαση.
2. Ανάλυση: με ποια χρήσιμη γνώση μπορούμε να συλλέξουμε από τα δεδομένα.
Όταν ανιχνεύεται περιβαλλοντική κατάσταση, το διασυνδεδεμένο
περιβάλλον μπορεί να επωφεληθεί από αυτή την πληροφορία
χρησιμοποιώντας έναν προκαθορισμένο αλγόριθμο, ο οποίος οργανώνει τα
δεδομένα για την κατάσταση κρίνοντας σχετικά με τις συνέπειες αυτής της
κατάστασης. Αν π.χ. οι αισθητήρες αναφέρουν φως, ο αλγόριθμος μπορεί να
συγκρίνει την συγκεκριμένη κατάσταση με δεδομένα από πρόσφατες
καιρικές συνθήκες, την ώρα, ή την ηλιακή θέση. Ας δημιουργήσουμε την
υπόθεση ότι είναι βράδυ, το γραφείο είναι κλειστό και στο γραφείο ξαφνικά
εκπέμπει φως. Αυτό μπορεί να σημαίνει πως κάποιος εισήλθε απροσδόκητα
στον χώρο. Ο τρόπος αλληλεπίδρασης της “Ανάλυσης” μπορεί να περιέχει
πιο εξελιγμένους αλγόριθμους, λόγου χάρη να υπολογίζουν την ενέργεια
που χρησιμοποιείται από το φως, ή την θερμότητα την οποία θα μπορούσε
προβλέψιμα να παράγει.
3. Επικοινωνία: πως θα πρέπει να αναφερθεί η διορατικότητα του συστήματος.
Η απόφαση που απορρέει από τον τρόπο αλληλεπίδρασης “Ανάλυση” θα
ενεργοποιούσε τη αμέσως επόμενη στην αλληλουχία, την Επικοινωνία.
Συνεχίζοντας το προηγούμενο παράδειγμα, αν ο φωτισμός δεν αναμένεται,
η επόμενη αλληλεπίδραση είναι να σταλεί ένα μήνυμα ή να ενεργοποιηθεί
συναγερμός σε ένα σύστημα, το οποίο επιβλέπει τη κατάσταση του
περιβάλλοντος. Τα μηνύματα θα απευθύνονται σε ανθρώπους ή άλλες
συσκευές. Ένα σύστημα από ενσωματωμένους αισθητήρες, εκτιμήσεις και
καλή επικοινωνία μπορεί να σχεδιαστεί ώστε να παράγει ένα περίπλοκο
σύνολο αποτελεσμάτων βάσει των καταστάσεων και των αντιδράσεων.
4. Πράξη: ποια πράξη μπορεί ένα σύστημα να εκκινήσει βασισμένο στην
διορατικότητα
Εκτός από την “Επικοινωνία”, χιλιάδες Πράξεις θα μπορούσαν να
ενσωματωθούν σε ένα σύστημα αίτιου και αποτελέσματος. Τέτοιες πράξεις
πιθανόν να έχουν αντίκτυπο στον χώρο στον οποίο παρατηρείται μία
κατάσταση. Παραδείγματος χάρη, ένα αναπάντεχο φως μπορεί να αναλυθεί
και να βρεθεί ότι παράγει εκτενή θερμότητα στο χώρο, το οποίο θα
ενεργοποιούσε τις κουρτίνες για επανατοποθέτηση, ή το σύστημα
κλιματισμού.
5. Σχόλια: πώς μπορούμε να αξιολογήσουμε τον αντίκτυπο και να αποκτήσουμε
γνώση μέσα από αυτή την πράξη.
Τελικά, ο εντοπισμός, η ανάλυση και ο “βρόχος” της πράξης φτάνει σε ένα
σημείο όπου τα σχόλια , σε μια συστηματική κλίμακα, μπορούν να αποβούν
χρήσιμα. Έπειτα από εκτενή παρατήρηση και ανάλυση, η αξιολόγηση δύναται να
ορίσει ένα σχέδιο ώστε τα φώτα για ανοιγοκλείνουν περιοδικά. Κατάλληλες
αποφάσεις θα μπορούσαν να παρθούν και πράξεις να υλοποιηθούν, βασισμένοι σε
αυτή την πιο καθολική αξιολόγηση. Συνεχής αξιολόγηση και παρατεταμένη
αλληλεπίδραση θα μπορούσε να βελτιώσει τη λήψη αποφάσεων και να προτείνει
τις πιο κατάλληλες ενέργειες ώστε ο χώρος να βρίσκεται στην ιδανική κατάσταση.
6. Μνήμη: πως μπορούμε να διατηρήσουμε την γνώση για μετέπειτα πρόσβαση.
Καθώς το σύστημα προχωρά μέσα στους κύκλους της αλληλεπίδρασης, θα
υπάρξει κάποιο κόστος στην συντήρηση ενός αρχείου παρατηρήσεων και
αλλαγών. Αποθηκεύοντας τις πληροφορίες και οργανώνοντας τα δεδομένα
σε αλληλουχίες παρέχει έναν πόρο, ο οποίος μπορεί να αξιοποιηθεί για την
βελτίωση της νοημοσύνης και της απόδοσης του συνολικού συστήματος
καθώς εξελίσσεται.
2.3 ΕΠΙΠΕΔΑ ΑΝΑΖΗΤΗΣΗΣ
Για όλους τους τρόπους αλληλεπίδρασης, τα τρία επίπεδα διερεύνησης
περιγράφουν τους διαφορετικούς στόχους που έχουμε, για την κατανόηση ή την
μετατροπή του κόσμου μέσω φυσικών ή ανθρωπίνων συστημάτων. Ως
προγραμματιστές και σχεδιαστές εργαλείων, η επιθεώρηση των ευκαιριών μέσα
από τον φακό των στόχων μας βοηθά στο να προτείνουμε την εξέχουσα αγορά για
τα εργαλεία βασισμένοι στα διασυνδεδεμένα περιβάλλοντα.
1. Περιβαλλοντικό: πως μπορούμε να βελτιστοποιήσουμε και
ελαχιστοποιήσουμε την χρήση των φυσικών πόρων για την δημιουργία
καταλλήλων συνθηκών, συνδυάζοντας δεδομένα που έχουν συλλεχθεί από
την παρακολούθηση μέσω εξωτερικών πηγών δεδομένων.
2. Συμπεριφοράς: πως μπορούμε να προβλέψουμε επιθυμητές συμπεριφορές,
και αν μπορούμε να παρακολουθήσουμε την ανθρώπινη συμπεριφορά και
να παραλλάξουμε τις συνθήκες βάσει της γνώσης των προτιμήσεών του.
3. Κοινωνικότητας: πως μπορούμε να παράγουμε μία βασισμένη-σε-δίκτυο
επικοινωνία και δράση μέσω της κοινωνικής δικτύωσης και πως μπορούμε
να παραλλάξουμε τις ρυθμίσεις για να συμβάλλουν στην ανάδραση με τους
ανθρώπους.
Συνοψίζοντας όλα τα παραπάνω σε έναν πίνακα θα έχουμε το εξής συμπυκνωμένο
αποτέλεσμα [5]:
Αλληλεπίδραση
Αναζήτηση
Επίγνωση Ανάλυση Επικοινωνία Πράξη Σχόλια Μνήμη
Περιβαλλοντικό
Αίσθηση
επιπέδου
θορύβου,
Αλλαγές
θερμοκρασίας
Ανάλυση
περιβαλλοντικής
επίδοσης
Αναφορές Τροποποίηση
του
συστήματος
μέσω κάποιας
διεπαφής
Παροχή
σχολίων στον
αντίκτυπο της
επίδοσης
Αποθήκευση
της
μεθοδολογίας.
Συμπεριφοράς
Αίσθηση
συμπεριφοράς
και κίνησης.
Ανάλυση
συμπεριφοράς
Αναφορές Ώθηση
προτιμώμενης
συμπεριφοράς
Παροχή
σχολίων στον
αντίκτυπο της
επίδοσης
Αποθήκευση
της
μεθοδολογίας.
Κοινωνικότητας
Αίσθηση
κοινωνικής
συμπεριφοράς
Ανάλυση του
αντίκτυπου της
κοινωνικής
αλληλεπίδρασης
Αναφορά σε
αλληλεπιδράσεις
κοινωνικών
δικτύων.
Ώθηση
προτιμώμενης
συμπεριφοράς
Παροχή
σχολίων στον
αντίκτυπο της
επίδοσης
Αποθήκευση
της
μεθοδολογίας.
Πίνακας 1: Συνδεδεμένα Περιβάλλοντα με τομή της αρχιτεκτονικής και των επιπέδων αναζήτησης,
Designing for the Internet of Things, O’Reilly
2.4 ΠΕΡΙΓΡΑΦΗ ΤΟΥ UoM GREENHOUSE
Λαμβάνοντας όλα τα παραπάνω δεδομένα, είναι πλέον ευκολότερο να μπορέσουμε
να εξηγήσουμε το πρόβλημα που θα χρειαστεί να επιλύσουμε. Στην συγκεκριμένη
περίπτωση, αναφέρομαι στην δημιουργία μίας μικρογραφίας ενός θερμοκηπίου,
που φυσικά μπορεί να προσαρμοστεί στα πλαίσια ενός σε πραγματική κλίμακα, το
οποίο θα μας πληροφορεί ανά πάσα στιγμή, για κάποιες συγκεκριμένες συνθήκες
που επικρατούν σε αυτό και βάσει αυτών θα λαμβάνει κάποιες αποφάσεις για την
βελτιστοποίησή του. Ειδικότερα θα χρησιμοποιήσουμε ένα αισθητήρα
θερμοκρασίας και υγρασίας, ο οποίος θα λαμβάνει κάποιες τιμές-εισόδους, που θα
αποσκοπούν στην ανάλυση τους ώστε να μεταβάλλεται βάσει των συνθηκών μας
ένας ενεργοποιητής (actuator), που στην περίπτωσή μας θα είναι ένας λαμπτήρας
LED, και θα ανάβει ή σβήνει ανάλογα με την θερμοκρασία στο περιβάλλον.
Η αναβάθμιση σε ένα πραγματικών διαστάσεων θερμοκήπιο θα απαιτούσε αφενός
κατασκευαστική προσπάθεια και αφετέρου μεγαλύτερη δαπάνη. Μια
ολοκληρωμένη λύση θα απαιτούσε μηχανισμούς που σε περίπτωση χαμηλής
θερμοκρασίας θα ενεργοποιούνταν το σύστημα θέρμανσης, όπου στην λύση μας το
εξυπηρετεί ο λαμπτήρας LED, ενώ σε περίπτωση υψηλής θερμοκρασίας θα άνοιγαν
κάποια τεχνητά στέγαστρα. Όσον αφορά την υγρασία τώρα, οι συνθήκες θα
ρυθμίζονταν με την λειτουργεία ή μη ενός ψεκαστικού μηχανισμού.
Η ιδέα όμως είναι να αντιληφθούμε πόσο πολλά μπορούμε να πραγματοποιήσουμε
με τόσο λίγο εξοπλισμό εφόσον ο κορμός της εφαρμογής είναι λειτουργικός και
μπορεί να επεκταθεί χωρίς δυσκολία σε λύσεις πραγματικών διαστάσεων. Ο
εξοπλισμός που θα χρησιμοποιήσουμε κοστίζει γύρω στα 80 ευρώ και παρόλα αυτά
μας επιτρέπει, μέσω και της τεχνολογίας, να δημιουργήσουμε ένα καθόλου
ευκαταφρόνητο θερμοκήπιο με βασική γραφική διεπιφάνεια διαχείρισης.
Χρησιμοποιώντας την πλατφόρμα του Eclipse, που μας προσφέρει την δυνατότητα
να δημιουργήσουμε επεκτάσεις (plugins) για εφαρμογές ΙοΤ αλλά και ολόκληρα
πακέτα ανάπτυξης (Deployment Packages), αφού πρώτα την ρυθμίσουμε
κατάλληλα, θα μπορέσουμε να γράψουμε κώδικα που θα «αγκαλιάζει» την
σύνδεση του αισθητήρα και του ενεργοποιητή με το διαδίκτυο ή το cloud,
μεταφέροντας τα δεδομένα μέσω “ελαφριών” πρωτοκόλλων
Παρομοίως, μετά από μία μικρή αναζήτηση στο hackster.io, η οποία είναι ένας
ιστοχώρος Ανοιχτού Κώδικα που περιέχει διάφορα έργα (projects) σχετικά με την
τεχνολογία ΙοΤ, μπορέσαμε να βρούμε μια λύση πάνω σε ένα αυτοδιαχειριζόμενο
θερμοκήπιο, το οποίο όμως χρησιμοποιεί διαφορετική τεχνολογία από ότι θα
χρησιμοποιήσουμε εμείς. Όταν λέω διαφορετική τεχνολογία, εννοώ διαφορετικό
hardware, διαφορετικές εφαρμογές λογισμικού, καθώς και online υπηρεσίες. Στο
συγκεκριμένο παράδειγμα χρησιμοποιήθηκε ένας μικροεπεξεργαστής της Intel, o
Intel Edison, και οι υπηρεσίες της Amazon χρησιμοποιώντας γλώσσα
προγραμματισμού Node.js (αυτή μπορεί να διαβάσει ο Intel Edison), η οποία
ενδείκνυται για την δημιουργία εφαρμογών Ιστού από την πλευρά του διακομιστή.
Εμείς από την πλευρά μας θα χρησιμοποιήσουμε τον μικροεπεξεργαστή της
Raspberry, το Raspberry Pi 2 και τις υπηρεσίες της Eclipse χρησιμοποιώντας κώδικα
Java για την διαχείριση των ασύγχρονων Ι/Ο.
Σε αυτή την ενότητα όμως, μας ενδιαφέρει περισσότερο η αρχιτεκτονική που θα
χρησιμοποιηθεί, η οποία παραμένει η ίδια και στην περίπτωση μας. Μελετώντας το
αυτόδιαχειριζόμενο θερμοκήπιο καταλήγουμε στο συμπέρασμα ότι χρησιμοποιεί
αυτή την λογική:
i. Οι αισθητήρες και οι ενεργοποιητές, συνδέονται με τον μικροεπεξεργαστή
Intel Edison.
ii. O μικροεπεξεργαστής στέλνει τα δεδομένα και δέχεται τις εντολές από
κέντρο ελέγχου που βρίσκεται στο cloud της Amazon.
iii. Οι χρήστες μπορούν να παραμετροποιήσουν το έξυπνο θερμοκήπιο μέσω
μιας διεπιφάνειας Ιστού ή μία εφαρμογή για smartphone/tablet.
Φωτ. 2: Αρχιτεκτονική αυτό διαχειριζόμενου θερμοκηπίου, hackster.io
Με την βοήθεια και του παραπάνω σχήματος μας είναι πλέον κατανοητός, ο κύκλος
ζωής της ΙοΤ εφαρμογής. Συνοψίζοντας, ο μικροεπεξεργαστής Intel Edison
«μαζεύει» τα δεδομένα μέσω των αισθητήρων που παρέχονται στο παράδειγμα και
έπειτα χρησιμοποιεί την υπηρεσία cloud της Amazon ώστε να μπορέσει αφενός να
λάβει τα δεδομένα που συλλέξαν οι αισθητήρες και να ενεργοποιήσει κάποια
αντίδραση, π.χ. το άνοιγμα του ανεμιστήρα, και αφενός να μπορέσει να
δημοσιοποιήσει αυτά τα δεδομένα σε διάφορα τερματικά, σε πραγματικό χρόνο.
3. Βασική Γνώση και Τεχνολογίες
που χρησιμοποιήθηκαν
APIs
Ένα Application Programming Interface (API) είναι ένα σύνολο από εργαλεία και
πρωτόκολλα για την ανάπτυξη εφαρμογών λογισμικού και όχι μόνο. Ένα χρήσιμο
API δηλαδή διευκολύνει έναν προγραμματιστή να συνθέσει μια εφαρμογή,
παρέχοντας του τα δομικά της στοιχεία. Αυτό μπορεί να αναφέρεται σε συστήματα
βασισμένα σε υπηρεσίες Ιστού, σε λειτουργικά συστήματα ή σε συστήματα βάσεων
δεδομένων και έρχεται σε μορφή βιβλιοθηκών που περιέχουν κάποιες
προδιαγραφές για δομές δεδομένων, κλάσεις αντικειμένων κτλ.
OSGi Framework
Ο σκελετός OSGi αναφέρεται σε μία Open Services Gateway initiative η οποία είναι
ένα σύνολο από προσδιορισμούς που δηλώνουν μία δυναμική συνιστώσα
υπηρεσιών για την Java. Αυτοί οι προσδιορισμοί επιτρέπουν την δημιουργία ενός
μοντέλου ανάπτυξης, όπου οι εφαρμογές συνθέτονται δυναμικά από πολλά και
διαφορετικά επαναχρησιμοποιήσιμα στοιχεία. Οι εφαρμογές ή τα στοιχεία, που
έρχονται σε μορφή “bundles for deployment”, μπορούν να εγκατασταθούν,
ξεκινήσουν, σταματήσουν, ενημερωθούν και να απεγκατασταθούν απομακρυσμένα
χωρίς να χρειαστεί κάποια επανεκκίνηση. Αν μπορούσαμε να το απεικονίσουμε σε
ένα τμηματικό μοντέλο, αυτό θα ήταν:
Φωτ. 3: Τμηματικό Μοντέλο OSGi, OSGi Alliance
● Bundles – συστατικά του OSGi που δημιουργούνται από τους
προγραμματιστές
● Services – οι υπηρεσίες συνδέουν τα bundles με έναν δυναμικό τρόπο
προσφέροντας ένα μοντέλο δημοσίευσης – εύρεσης – σύνδεσης για
αντικείμενα Java
● Life Cycle – Το API για την εγκατάσταση, εκκίνηση, τερματισμό, ενημέρωση
και απεγκατάσταση των bundles.
● Modules – ενότητες για τον προσδιορισμό της εισαγωγής και εξαγωγής
κώδικα από ένα bundle.
● Security – υπεύθυνο για θέματα ασφαλείας
● Execution Environment – περιβάλλον για τον προσδιορισμό των μεθόδων
και των κλάσεων που είναι διαθέσιμες σε κάποια συγκεκριμένη πλατφόρμα.
[6]
Bundles
Τα συγκεκριμένα συστατικά, είναι μία ομάδα από κλάσεις Java (αρχεία jar),
εξοπλισμένες με ένα αρχείο τύπου MANIFEST.MF, όπου βρίσκονται και όλες οι
λεπτομέρειες για τα περιεχόμενά τους καθώς και για τον κύκλο ζωής τους, όπως
βλέπουμε και στο παρακάτω σχήμα
Φωτ. 4: Κύκλος ζωής bundles, Wikipedia:Bundles
Η κύρια χρήση τους είναι η δυνατότητα που παρέχουν σε μία ομάδα από κλάσεις
Java, ώστε να είναι συνολικά πιο πολύπλοκη η συμπεριφορά ενός στοιχείου OSGi.
Kura & Kura API
Η ανάπτυξη και ρύθμιση μίας συσκευής, ώστε να λειτουργεί ως κόμβος στο Internet
Of Things είναι σχετικά εύκολη. Το να γίνει όμως το ίδιο για πολλές συσκευές δεν
είναι κάτι το τόσο εύκολο. Εδώ έρχεται να μας βοηθήσει το νέο πρόγραμμα της
Eclipse, το Kura. Το Kura μαζί τα Kura APIs προσφέρει είσοδο στο υποκείμενο
hardware, στην διαχείριση των ρυθμίσεων δικτύου, στην επικοινωνία με
πλατφόρμες ενσωμάτωσης συσκευών καθώς και στην διαχείριση των πυλών
εισόδου. Στην ουσία το Kura προσφέρει μία πλατφόρμα η οποία υπάρχει στο όριο
μεταξύ του ιδιωτικού δικτύου της συσκευής μας και του τοπικού δικτύου ή του
δημόσιου διαδικτύου παρέχοντας μία διαχειρίσιμη πύλη εισόδου για αυτό το όριο,
ικανό να τρέχει εφαρμογές που συλλέγουν πληροφορίες και να τις διαμοιράζει με
ασφάλεια στο cloud ή στον μεσάζων (broker) που έχουμε ορίσει εμείς.
[7]
M2M Platform: Everyware Cloud
To Everyware Cloud της Eurotech είναι μία πλατφόρμα ενσωμάτωσης Μηχανή-
προς-Μηχανή (M2M), όπως φαίνεται και στο παρακάτω σχήμα, που απλοποιεί την
διαχείριση της συσκευής και των δεδομένων, συνδέοντας κατανεμημένες συσκευές
μέσω ασφαλών υπηρεσιών cloud.
[15]
Φωτ. 5: Διάγραμμα σύνδεσης συσκευών και αισθητήρων στο cloud της Eurotech, M2M Eurotech
Paho MQTT
Χρησιμοποιώντας την βιβλιοθήκη Paho MQTT (πρωτόκολλο MQ Telemetry
Transport), το Kura παρέχει μία υπηρεσία αποθήκευσης-και-προώθησης (store-
and-forward) για τις εφαρμογές που παίρνουν την πληροφορία από τις τοπικά
συνδεδεμένες συσκευές ή τις συσκευές που είναι συνδεδεμένες μέσω ενός δικτύου,
στέλνοντας αυτά τα δεδομένα σε μεσάζοντες (brokers) MQTT και άλλες υπηρεσίες
cloud, όπως το Everyware Cloud. Ένας μεσάζων στο δικό μας παράδειγμα θα είναι η
ανοιχτή θύρα στο “tcp://iot.eclipse.org:1883”.
[8]
CoAP API
Τα αρχικά προέρχονται από το Constrained Application Protocol και είναι ένα
πρωτόκολλο που έχει σκοπό να χρησιμοποιηθεί σε πολύ απλές ηλεκτρονικές
συσκευές και να τους επιτρέψει να επικοινωνήσουν δυναμικά μέσω του
διαδικτύου. Στην ουσία είναι ένα πρωτόκολλο μεταφοράς όπως και το HTTP με την
εξής μεγάλη διαφορά: Τα πακέτα του CoAP, ακριβώς επειδή είναι προσαρμοσμένα
σε συνδεδεμένες συσκευές ή αισθητήρες με λίγη μνήμη και χαμηλή δυνατότητα
τροφοδοσίας, είναι πολύ μικρότερα από τα αντίστοιχα πακέτα HTTP και TCP.
Αντίστοιχα περιορισμένες είναι και οι ροές ελέγχου του πρωτοκόλλου. Αυτό έχει ως
αποτέλεσμα το CoAΡ να εκτελείται πάνω από πρωτόκολλο UDP και όχι TCP, δηλαδή
ένα connectionless πρωτόκολλο που είναι καλύτερα προσαρμοσμένο στις ανάγκες
του IoT μιας και το συγκεκριμένο στέλνει πακέτα από ένα πρόγραμμα σε κάποιο
άλλο και αυτό σημαίνει το τέλος της συνεργασίας τους. Επιτυγχάνεται δηλαδή η
γρήγορη και αποδοτική σύνδεση.
[9]
I2C Protocol
Το συγκεκριμένο (Inter-Integrated Circuit) σειριακό πρωτόκολλο είναι υπεύθυνο για
την σύνδεση περιφερειακών συσκευών και αισθητήρων με χαμηλή ταχύτητα στα
ενσωματωμένα συστήματα.
Φωτ. 6: Δίαυλοι Επικοινωνίας I2C, www.byteparadigm.com
Βλέπουμε πως το I2C χρησιμοποιεί δύο διαύλους: το SCL (Serial Clock) και το SDA
(Serial Data) τα οποία συνδέονται με μία αντίσταση (Rp) στην τάση(+Vdd). Για να
γίνει η επικοινωνία μέσω του I2C, χρησιμοποιούνται 8 bits για την μεταφορά. Κάθε
slave συσκευή έχει μία διεύθυνση 7-bits η οποία πρέπει να είναι μοναδική στον
δίαυλο. Αυτή αντιπροσωπεύει τα bits 7 μέχρι 1, ενώ το bit 0 χρησιμοποιείται για να
αποδώσει το READ ή WRITE από και προς την συσκευή. Αν δηλαδή το bit “0” έχει
καθοριστεί να έχει την τιμή 1 τότε η master συσκευή θα διαβάσει από την slave I2C
συσκευή.
To Ι2C μπορεί να χρησιμοποιήσει αργούς μικροεπεξεργαστές με ακροδέκτες GPIOs
(General Purpose Input Outputs) μιας και θέλει μόνο να δημιουργήσει Start and
Stop καταστάσεις για να στείλει και λάβει εντολές. Έτσι το πρωτόκολλο μπορεί να
έχει τις εξής καταστάσεις:
Φωτ. 7: Καταστάσεις Πρωτοκόλλου I2C, www.robot-electronics.co.uk
Σε μία φυσιολογική κατάσταση οι SCL και SDA είναι high και έτσι η επικοινωνία
ξεκινά από την master συσκευή. Έπειτα ενεργοποιείται η κατάσταση Start (S)
ακολουθούμενη από την διεύθυνση της slave συσκευής Β1. Αν τότε το bit 0 από το
byte διεύθυνσης έχει την τιμή 0, η master συσκευή θα γράψει στην slave συσκευή
Β2. Αν από την άλλη πάρει την τιμή 1, το επόμενο byte θα εγγραφεί από την slave
συσκευή. Όταν όλα τα bytes γράψουν ή εγγραφούν (Βn), τότε η master συσκευή
ενεργοποιεί την Stop κατάσταση (P) και πλέον ο συγκεκριμένος δίαυλος μπορεί να
χρησιμοποιηθεί από άλλη συσκευή. [10]
SSH
Το SSH, ή αλλιώς Secure Shell (Ασφαλές Κέλυφος), είναι μία ευρύτατα
χρησιμοποιούμενη εφαρμογή για ασφαλή επικοινωνία στο διαδίκτυο. Κάθε φορά
που στέλνονται δεδομένα από κάποιον υπολογιστή στο δίκτυο, το SSH το
κρυπτογραφεί αυτομάτως. Παρομοίως, όταν τα δεδομένα φτάσουν στον αποδέκτη,
το SSH αυτομάτως τα αποκρυπτογραφεί. Το αποτέλεσμα είναι η διαφανής
κρυπτογράφηση, δηλαδή οι χρήστες δρουν κανονικά, χωρίς να γνωρίζουν ότι οι
επικοινωνίες τους κρυπτογραφούνται με ασφάλεια στο δίκτυο.
Το SSH χρησιμοποιεί μία αρχιτεκτονική πελάτη-διακομιστή, όπως φαίνεται και στο
παρακάτω σχήμα, όπου ένας διακομιστής SSH, δέχεται ή απορρίπτει εισερχόμενες
συνδέσεις στον υπολογιστή που τον φιλοξενεί. Οι χρήστες, ως SSH πελάτες, κάνουν
αιτήσεις από άλλους υπολογιστές στον διακομιστή του τύπου “Log me in”, “Send
me a file”, “Execute this command”. Όλες οι επικοινωνίες μεταξύ των πελατών και
των διακομιστών είναι κρυπτογραφημένα με ασφάλεια και προστατεύονται από
τροποποιήσεις. [18]
Φωτ. 8: Διάγραμμα διακομιστή-πελάτη SSH, SSH, The Secure Shell
Dependencies
Κάθε φορά που μια κλάση Χ χρησιμοποιεί μία άλλη κλάση ή μια διεπιφάνεια Υ, τότε
η Χ εξαρτάται από την Υ. Η Χ δεν μπορεί να τρέξει χωρίς την Υ και δεν μπορεί να
επαναχρησιμοποιηθεί χωρίς να επαναχρησιμοποιήσει την Υ. Σε αυτή την περίπτωση
η κλάση Χ είναι η εξαρτημένη και η κλάση ή διεπιφάνεια Υ ονομάζεται
“dependency”χωρίς αυτό να είναι αμφίδρομο!
4. Περιγραφή της προτεινόμενης
λύσης
4.1 ΡΥΘΜΙΣΗ ΠΛΑΤΦΟΡΜΑΣ [11]
Η προετοιμασία για την δημιουργία μιας IoT εφαρμογής προϋποθέτει την σωστή
εγκατάσταση διάφορων πλατφόρμων και plugins. Τα πρωταρχικά βήματα ,λοιπόν,
για να ρυθμίσουμε το περιβάλλον ανάπτυξης του Kura είναι τα εξής τρία:
● JVM (Java JDK SE 8 ή η τρέχουσα έκδοση)
● Eclipse IDE
● Kura Workspace Setup
Το περιβάλλον ανάπτυξης του Kura μπορεί να εγκατασταθεί σε Windows, Mac OS,
καθώς και σε Linux, η οποία εγκατάσταση μπορεί να διαφέρει ελάχιστα όσον αφορά
τα ιδιαίτερα χαρακτηριστικά του εκάστοτε λογισμικού.
Εγκατάσταση JVM
Το μόνο που χρειάζεται να κάνουμε είναι να μπούμε στο site της Oracle και να
κατεβάσουμε και εγκαταστήσουμε το JDK SE 8 στο παρακάτω σύνδεσμο βάσει του
λογισμικού που χρησιμοποιούμε: JDK SE 8u65.
ECLIPSE IDE
Το ECLIPSE IDE είναι ένα εργαλείο ανάπτυξης ανοιχτού κώδικα το οποίο αποτελείται
από ένα αναβαθμισμένο περιβάλλον ανάπτυξης, IDE δηλαδή, και από ένα σύστημα
“plug-in” για να διαχειρίζεται επεκτάσεις. ΠΟΛΥ ΣΗΜΑΝΤΙΚΟ είναι να διαλέξουμε
αρχικά προσεκτικά την διεύθυνση τοποθεσίας του περιβάλλοντος εργασίας του
Eclipse. Και αυτό διότι εφόσον εγκατασταθεί και δημιουργηθούν τα περιβάλλοντα
εργασίας του, δεν πρέπει ΠΟΤΕ να μετακινηθούν σε άλλη διεύθυνση.
Ξεκινώντας, θα χρειαστεί να κατεβάσουμε την τρέχουσα έκδοση του Eclipse IDE for
Java EE Developers για το εκάστοτε λειτουργικό σύστημα (στην προκειμένη
περίπτωση χρησιμοποιώ Windows 10) από το παρακάτω σύνδεσμο: Eclipse IDE.
Έπειτα, έχοντας κατεβάσει το συμπιεσμένο αρχείο του Eclipse, πρέπει να το
αποσυμπιέσουμε στην διεύθυνση εγκατάστασης του Eclipse. Στην δικιά μου
περίπτωση το έκανα εξαγωγή στην διεύθυνση των “εγγράφων”,
C:UsersBonafideDocumentseclipse.
Φωτ. 9: Εξαγωγή του Eclipse στα έγγραφα
Εγκατάσταση του mToolkit
Ένα επιπλέον plugin, το mToolkit, χρειάζεται για να επιτρέψει την
απομακρυσμένη σύνδεση σε έναν “σκελετό” Open Services Gateway initiative ,
σε μια συσκευή που λειτουργεί με το Kura. Για να εγκαταστήσουμε το mToolkit
στο περιβάλλον του Eclipse, πρέπει να διεκπεραιώσουμε τα επόμενα βήματα:
● Κατεβάζουμε το mToolkit plugin σε “archive format” από αυτόν τον
σύνδεσμο: mToolkit 3.1 Stable.
● Δημιουργούμε μία mToolkit διεύθυνση κάτω από την διεύθυνση
“dropin” όπου έχουμε εγκαταστήσει το Eclipse
(…..eclipsedropinsmToolkit)
● Αντιγράφουμε το συμπιεσμένο αρχείο στην νέα μας διεύθυνση και
εξάγουμε το περιεχόμενο του στον φάκελο mToolkit, ώστε στο τέλος να
υπάρχει μία μορφή του τύπου:
C:UsersBonafideDocumentseclipsedropinsmToolkiteclipsefeatures και
C:UsersBonafideDocumentseclipsedropinsmToolkiteclipseplugins
Αν έχουμε ορθώς εγκαταστήσει το plugin τότε θεωρητικά στην καρτέλα
Window|ShowView|Other, θα πρέπει να υπάρχει η επιλογή mToolkit|Frameworks
Φωτ. 10: Εισαγωγή του plugin mToolkit στο Eclipse
Δημιουργία Περιβάλλοντος Εργασίας
Εκτελώντας το Eclipse για πρώτη φορά θα μας δοθεί η δυνατότητα να επιλέξουμε το
περιβάλλον εργασίας μας, το οποίο συνήθως περιέχει όλο τον κώδικα Java, τα
projects και τα πακέτα (bundles). Επιλέγουμε λοιπόν το περιβάλλον μας όπως
φαίνεται και εδώ
Φωτ. 11: Επιλογή Περιβάλλοντος Εργασίας στο Eclipse
Και ΞΕΚΙΝΑΜΕ!
Αν θέλουμε για κάποιο λόγο να δημιουργήσουμε ή να ανοίξουμε διαφορετικό
περιβάλλον, αυτό θα γίνει μέσω του File|Switch Workspace|Other.
4.2 Εισάγοντας το Kura στο περιβάλλον χρήστη
Αρχικά, για να δημιουργήσουμε το περιβάλλον για το project Kura, θα χρειαστεί να
κατεβάσουμε το “Kura User Workspace archive” από την επίσημη ιστοσελίδα του.
Έπειτα, από το Eclipse File menu, θα επιλέξουμε την επιλογή “Import”, και
επεκτείνοντας την καρτέλα “General”, θα επιλέξουμε το “Existing Projects into
Workspace” και θα προχωρήσουμε με το “Next”.
Φωτ. 12: Προετοιμασία για εισαγωγή του Kura στο Eclipse
Εν συνεχεία επιλέγοντας το κουμπί “Select archive file option”, και βρίσκοντας το
συμπιεσμένο αρχείο που έχουμε ήδη κατεβάσει, που θα είναι της της μορφής
“user_workspace_archive_(CURRENT EDITION).zip , θα έχουμε σχεδόν τελειώσει με
την εισαγωγή των Kura projects.
Φωτ. 13: Εισαγωγή του Kura στο Eclipse
Αυτή την στιγμή θα αντιληφθούμε ότι έχουν ανοίξει τέσσερα διαφορετικά projects
στον Project Explorer:
1. Org.eclipse.kura.api: Αυτό είναι το κυρίως Kura API.
2. Org.eclipse.kura.demo.heater: Αυτό είναι ένα υπόδειγμα project που
μπορούμε να χρησιμοποιήσουμε ως σημείο εκκίνησης για την δημιουργία
του δικού μας πακέτου(bundle).
3. Org.eclipse.kura.emulator: Αυτό είναι το project - προσομοιωτής για να
τρέξουμε το Kura στο Eclipse (σε Linux/Mac ΜΟΝΟ)
4. Target-definition: Αυτό είναι ένα σύνολο από απαραίτητα πακέτα (bundles)
και εξαρτήσεις (dependencies) των APIs και του Kura.
Το Eclipse θα αναφέρει σε αυτό το σημείο κάποια λάθη. Για να τα διορθώσουμε, θα
εργαστούμε ως εξής:
Θα επιλέξουμε το “target-definition project” στο περιβάλλον εργασίας μας και θα
κάνουμε διπλό κλικ στο kura-equinox_3.8.1.target για να το ανοίξουμε.
Φωτ. 14: Επαναφορά της πλατφόρμας-στόχου
Στο παράθυρο που θα μας εμφανίσει, θα επιλέξουμε στον σύνδεσμο “Set as Target
Platform”. Με αυτή μας την κίνηση θα επαναφέρουμε την πλατφόρμα-στόχο (
target-platform), θα χτίσουμε από την αρχή τα Kura projects, και θα καθαρίσουμε
τα λάθη που μας παρουσιάστηκαν. Πλέον είμαστε ΕΤΟΙΜΟΙ για να ξεκινήσουμε να
αναπτύσσουμε Kura-βασισμένες εφαρμογές για την πλατφόρμα-στόχο μας.
4.3 OSGi Project με το Kura
Πλέον έχουμε στήσει το περιβάλλον για να δουλέψει το Kura στο Eclipse IDE και
μπορούμε να δούμε πως θα δημιουργήσουμε ένα απλό Kura OSGi Project με το
Eclipse.
Με αυτό το παράδειγμα, θα πρέπει να μάθουμε πώς να χειριζόμαστε τις παρακάτω
διαδικασίες:
● Δημιουργία ενός plugin project,
● Κατανάλωση της υπηρεσίας Kura Logger,
● Ανάπτυξη ενός OSGi Activator,
● Εξαγωγή ενός μοναδικού OSGi πακέτου (plugin),
● Δημιουργία ενός Deployment πακέτου.
Στο Eclipse, δημιουργούμε ένα νέο Plug-in Project επιλέγοντας το File|New|Project
και έπειτα Plug-in Development|Plug-in Project .
Φωτ. 15: Δημιουργία ενός νέου plugin project
Στο επόμενο παράθυρο που θα εμφανιστεί θα εισάγουμε το όνομα του project μας,
π.χ. στο παράδειγμά μας θα το ονομάσουμε “org.eclipse.kura.example.hello_osgi”.
Κάτω από το πεδίο “Target Platform”, είναι σημαντικό να επιλέξουμε το κουμπί “an
OSGi framework”, και να ρυθμίσουμε την μεταβλητή ως “standard”.
Φωτ. 16: Ρύθμιση του plugin project
Εν συνεχεία, στο επόμενο, παράθυρο, στο πεδίο “Name” θα επιλέξουμε μία
περιγραφική ονομασία , όπως Hello World Example, θα δούμε ότι η JVM έκδοση
είναι η ίδια με την συσκευή – στόχο μας , στην προκειμένη JavaSE-1.8, και θα
απενεργοποιήσουμε την επιλογή “Generate an activator, a Java class that controls
the plug-in’s life cycle”, για λόγους του συγκεκριμένου παραδείγματος, διότι θα
χρησιμοποιήσουμε μόνο μία κλάση, με την οποία θα εκκινούμε αλλά και
τερματίζουμε όλα τα πακέτα μας.
Ήδη πρέπει να βλέπουμε το project που δημιουργήσαμε και με την ονομασία που
του δώσαμε, καθώς και κάποια αρχεία που δημιουργήθηκαν αυτόματα, όπως το
MANIFEST.MF και το OSGi πακέτο , το οποίο είναι ένα κανονικό Java .jar αρχείο που
περιέχει κώδικα Java, πηγές (resources) , ένα custom Manifest και έναν Activator.
Εισαγωγή Dependencies στο Manifest
Αρχικά, θα χρησιμοποιήσουμε τον συντάκτη του Manifest στο Eclipse για να
προσθέσουμε μερικά dependencies.
Φωτ. 17: Διαχείριση Εξαρτήσεων στο Eclipse
Όπως βλέπουμε και στο παραπάνω screenshot, από την καρτέλα “Dependencies”,
θα βρούμε το “Automated management of Dependencies”, και θα προσθέσουμε το
εξής plugin για OSGi υπηρεσίες (org.eclipse.osgi.services). Βλέπουμε πως η
διαδικασία που κάνουμε μοιάζει αρκετά με αυτή της πρόσθεσης των μεμονωμένων
jars στο μονοπάτι του project, με την διαφορά πως σε αυτή την περίπτωση , λέμε
εμείς στο Eclipse που να βρει τα dependencies με τον “OSGi τρόπο”, ώστε να
γνωρίζει εκ των προτέρων τον χρόνο που θα χρειαστεί για να κάνει compile.
Φωτ. 18: Εισαγωγή plugin για OSGi υπηρεσίες
Στην συνέχεια με τον ίδιο ακριβώς τρόπο θα προσθέσουμε και το slf4j.api, ένα APΙ
που επιτρέπει στον τελικό-χρήση να συνδέσει το επιθυμητό πλαίσιο καταγραφής
σφαλμάτων σε όποιο επίπεδο θέλει ο ίδιος, τα οποία επίπεδα θα αναφερθούν εν
συνεχεία.
Δημιουργία Java Κλάσης
Έχοντας τελειώσει με την “προθέρμανση” και την ρύθμιση κάποιων βασικών
παραμέτρων, πλέον είμαστε έτοιμοι να γράψουμε μια απλή Java κλάση. Θα
εφαρμόσουμε ότι γνωρίζουμε για την δημιουργία μιας νέας κλάσης με τον συνήθη
τρόπο, δηλαδή θα δημιουργήσουμε μια νέα κλάση “HelloOsgi” στο project
“org.eclipse.kura.example.hello_osgi”.
Φωτ. 19: Δημιουργία νέας κλάσης Java για OSGi
Στη συνέχεια θα βάλουμε στην νέα μας κλάση το κώδικα που θα δανειστούμε από
ένα παράδειγμα κώδικα στο επίσημο site της Kura: HelloOSGi
package org.eclipse.kura.example.hello_osgi;
public class HelloOsgi {
private static final Logger s_logger = LoggerFactory.getLogger(HelloOsgi.class);
private static final String APP_ID = "org.eclipse.kura.example.hello_osgi";
protected void activate(ComponentContext componentContext) {
s_logger.info("Bundle " + APP_ID + " has started!");
s_logger.debug(APP_ID + ": This is a debug message.");
}
protected void deactivate(ComponentContext componentContext) {
s_logger.info("Bundle " + APP_ID + " has stopped!");
}
}
Πίνακας 2: Κλάση Java HelloOsgi
Η μέθοδος activate() είναι το σημείο εισόδου κατά την εκκίνηση του πακέτου. Από
την άλλη η μέθοδος deactivate() είναι το σημείο εισόδου όταν το πακέτο τερματίζει.
Ας παρατηρήσουμε τώρα την χρήση της private LoggerFactory.getLogger() μεθόδου.
Αν η συγκεκριμένη μέθοδος τρέχει στον σκελετό του OSGi και έχει εκκινήσει το
hello_osgi πακέτο, τότε καλείται η activate() μέθοδος και μπορούμε απλά να έχουμε
πρόσβαση στην υπηρεσία καλώντας την μέθοδο getLogger().
Εδώ πρέπει να τονίσουμε ότι τα επίπεδα σφαλμάτων debugging της μεθόδου
Logger έχουν την εξής ιεραρχία:
● ERROR – χρειάζεται προσοχή από τον διαχειριστή του συστήματος.
● WARNING – μία κατάσταση πρέπει να ελεγχθεί και ίσως να χρειάζεται μια
ενέργεια πριν το λάθος παρέμβει.
● INFO – αναφορά ενός φυσιολογικού συμβάντος
● DEBUG – χρησιμοποιείται κυρίως για επίλυση προβλημάτων καθώς και
έλεγχο της απόδοσης του κώδικα
● TRACE – πιο λεπτομερής έξοδος για διαγνωστικούς σκοπούς
Κανονικοποίηση των Dependencies
Σε αυτό το σημείο, υπάρχουν ήδη κάποια λάθη στον κώδικα μας για κάποιους
αδιευκρίνιστους λόγους έως τώρα.
Για να τα ξεδιαλύνουμε, θα επιλέξουμε από το μενού Source|Organize Imports και
θα εισάγουμε τον slf4j Logger.
Φωτ. 20: Εισαγωγή του slf4j Logger για καθαρισμό λαθών
Εφαρμόζοντας αυτά τα βήματα , θα δούμε πως πλέον ο κώδικάς μας θα είναι
“καθαρός” από λάθη.
Μία τελευταία ενέργεια πριν προχωρήσουμε στο επόμενο βήμα, είναι
επιστρέψουμε πάλι πίσω στο Manifest Editor, να βεβαιωθούμε ότι έχουμε
επιλεγμένο το Import-Package και να αποθηκεύσουμε τις αλλαγές στο Manifest
πατώντας τον “add dependencies” σύνδεσμο για να προστεθούν αυτόματα τα
πακέτα στην λίστα των dependencies.
Δημιουργία της κλάσης Component
Αντίστοιχα με πριν, θα δημιουργήσουμε την κλάση ακολουθώντας την διαδικασία
New|Other έπειτα Plug-in Development|Component Definition και θα
προχωρήσουμε.
Φωτ. 21: Δημιουργία κλάσης Component
Στην συνέχεια θα κάνουμε αναζήτηση μέσω του “Browse” και θα εισάγουμε ως
κλάση Component αυτή που πριν λίγο δημιουργήσαμε, δηλαδή την HelloOsgi.
Φωτ. 22: Μετατροπή της κλάσης HelloOsgi ως κλάση Component
και προχωρώντας στην διαδικασία θα προσθέσουμε στο “select parent folder field”
τον όρο “/OSGI-INF” για πρακτικούς λόγους που θα δούμε στην συνέχεια.
Φωτ. 23: Παραμετροποίηση της έννοιας Component
Αφού δημιουργήσαμε την Component κλάση, θα εμφανιστεί στην επιφάνεια
εργασίας του Eclipse το αρχείο XML της, το οποίο πρέπει να το ρυθμίσουμε ώστε το
Όνομα και η Κλάση να βλέπουν στην Java κλάση μας, πράγμα που πρέπει ήδη να
είναι αυτόματα ρυθμισμένο, καθώς και να θέσουμε τα πεδία Activate και
Deactivate στις αντίστοιχες μεθόδους που δημιουργήσαμε στην κλάση HelloOsgi
(activate, deactivate) ώστε να γνωρίζει το component που βρίσκονται αυτές οι OSGi
κλάσεις ενεργοποίησης.
Ανάπτυξη του Plug-in
Στα επόμενα 2 τμήματα θα περιγράψουμε την δημιουργία ενός μεμονωμένου
αρχείου JAR ως ένα αναπτυσσόμενο OSGi plug-in και ενός πακέτου ανάπτυξης
(Deployment Package) με δυνατότητα εγκατάστασης.
Ένα OSGi πακέτο(bundle) είναι ένα αρχείο φακέλου της Java με κώδικα Java, πηγές
και ένα Manifest. Από την άλλη ένα πακέτο ανάπτυξης είναι ένα σύνολο από πηγές,
κατηγοριοποιημένες σε ένα μόνο πακέτο, το οποίο μπορεί να αναπτυχθεί σε OSGi
σκελετό μέσω την υπηρεσίας “Deployment Admin” και μπορεί να περιέχει ένα ή
περισσότερα πακέτα, αντικείμενα διαχείρισης κτλ.
Εξαγωγή του OSGi πακέτου
Το πακέτο μας, όπως είπαμε, μπορεί να χτιστεί ως ένα μεμονωμένο OSGi plug-in.
Για να γίνει αυτό θα χρειαστεί να κάνουμε δεξί-κλικ στο project και να επιλέξουμε
το “Export”. Αυτό είναι το αντίστοιχο του compilation για το project. Από το
εμφανιζόμενο παράθυρο θα επιλέξουμε Plug-in Development |Deployable plug-ins
and fragments.
Κάτω από το παράθυρο που ανοίξαμε, πρέπει να βεβαιωθούμε ότι είναι επιλεγμένο
το νεο-δημιουργηθεν plug-in και επίσης πρέπει να επιλέξουμε και μία διεύθυνση
όπου θα αποθηκεύσουμε το JAR αρχείο την οποία πρέπει να θυμόμαστε.
Φωτ. 24: Compile του plugin
4.4 Δημιουργία ενός πακέτου Ανάπτυξης (Deployment Package)
Από το να δημιουργούμε συνεχώς μεμονωμένα plug-ins, μπορούμε επίσης να
δημιουργήσουμε ένα Πακέτο Ανάπτυξης που περιέχει πολλαπλά πακέτα, τα οποία
μπορούν να αναπτυχθούν σε ένα OSGi σκελετό. Σε αυτό το παράδειγμα, απλώς θα
δημιουργήσουμε ένα Deployment Package που θα περιέχει το “hello_osgi” πακέτο.
Να τονίσουμε πως αυτό το βήμα χρειάζεται το mToolkit να είναι εγκατεστημένο, για
το οποίο μιλήσαμε παραπάνω.
Ξεκινώντας θα επιλέξουμε New| Folder και θα επιλέξουμε το hello_osgi project με
όνομα φακέλου “resources”.
Φωτ. 25: Επιλογή του HelloOsgi project για δημιουργία ενός πακέτου ανάπτυξης
Έπειτα θα κάνουμε το ίδιο, δημιουργώντας έναν φάκελο ”dp” κάτω από το φάκελο
“resources”, για την αποθήκευση του Deployment Package.
Συνεχίζοντας θα επιλέξουμε File | New | Other -> OSGi | Deployment package
Definition. Πρέπει να βεβαιωθούμε ότι ο Target Folder θα δείχνει στον “dp”
φάκελο που δημιουργήσαμε και ότι το όνομα θα έχει να κάνει με το όνομα του
project, εδώ “hello_osgi”.
Φωτ. 26: Παραμετροποίηση του πακέτου ανάπτυξης
Αυτό που δημιουργήσαμε μόλις είναι ένα project .dpp το οποίο παρέχει
πληροφορίες που χρειάζονται για την δημιουργία του Πακέτου Ανάπτυξης, όπως η
διεύθυνση εξόδου του, το αρχείο ant build κτλ.
Τώρα θα επιλέξουμε την καρτέλα “Bundle” και θα δημιουργήσουμε ένα νέο Bundle
με την διεύθυνση είτε του project είτε του JAR που δημιουργήσαμε πριν.
Φωτ. 27: Δημιουργία ενός bundle για το πακέτο ανάπτυξης
Εν συνεχεία, εφόσον σώσουμε τις αλλαγές, θα κάνουμε δεξί κλικ στο .dpp αρχείο
μας και θα επιλέξουμε “Quick Build”, με την οποία πράξη θα δημιουργηθεί ένα νέο
.dp αρχείο στην ίδια διεύθυνση. Αυτό, εν τέλει, είναι το τελικό Πακέτο Ανάπτυξης ,
το οποίο μπορεί να εγκατασταθεί σε ένα απομακρυσμένο σύστημα – στόχο. Με την
ίδια τεχνική θα μπορέσουμε να δημιουργήσουμε και επεξεργαστούμε το πακέτο
ανάπτυξης για το UoM Greenhouse, και να το εισάγουμε στο Kura ώστε να μπορεί
να επικοινωνήσει με τον μικροεπεξεργαστή Raspberry Pi.
Στην τελική ανάλυση, αυτό που πέτυχαμε στο παραπάνω παράδειγμα ήταν να
εγκλιματιστούμε λίγο με την επιρροή του Kura στο Eclipse IDE και να
δημιουργήσουμε ένα καινούριο πακέτο (bundle) από την αρχή, να συντάξουμε
κώδικα Java με τον Activator του, να τροποποιήσουμε το Manifest κατά τον τρόπο
που μας εξυπηρετεί και να χτίσουμε το plug-in και/ή το Πακέτο Ανάπτυξης που
μπορεί να χρησιμοποιηθεί στο περιβάλλον του Kura. Στην ουσία το έξυπνο
θερμοκήπιο που θα δημιουργήσουμε θα στηρίζεται σε ένα Deployment Package
από Java resources το οποίο θα στηρίζεται ακριβώς στα παραπάνω βήματα για την
υλοποίησή του.
5. Τεχνική Ανάλυση της λύσης
Smart Greenhouse
Όταν μιλάμε για κάποιον κλάδο όπου το IoT είναι σχετικό, η βασική αρχή είναι
πάντοτε η ίδια: θέλουμε να συνδέσουμε μία έξυπνη συσκευή, η οποία είναι σε
ζεύξη με αισθητήρες και ενεργοποιητές, στο διαδίκτυο, ώστε οι αισθητήρες και οι
ενεργοποιητές να μπορούν να παρακολουθούνται και να υφίστανται χειρισμό από
απόσταση.
Μία απλουστευμένη έκδοση τέτοιας έξυπνης συσκευής θα μπορούσε να ήταν ένα
συνδεδεμένο θερμοκήπιο, το οποίο επιτρέπει σε κάποιον να παρακολουθήσει την
τρέχουσα θερμοκρασία από οποιοδήποτε απόσταση, καθώς και να χειριστεί το
άνοιγμα/ κλείσιμο ενός τεχνητού φωτός. Αυτό ακριβώς θα προσπαθήσουμε να
κάνουμε βήμα- βήμα, με διάφορα εργαλεία που θα χρησιμοποιήσουμε.
5.1 Ετοιμάζοντας το hardware [12]
To βασικό hardware που θα χρειαστούμε, για το οποίο δεν χρειάζονται ειδικές
γνώσεις πάνω στα ηλεκτρονικά, για να δημιουργηθεί το θερμοκήπιο είναι το εξής:
● Raspberry Pi 2 Model B ή B+ και μία κάρτα SD (min. 4GB),
● Αισθητήρας Θερμοκρασίας & υγρασίας Grove
● Grove LED
● 4 καλώδια Grove από Female Jumper σε καλώδια μετατροπής, όπως
φαίνεται στην εικόνα παρακάτω.
● Και ένα καλώδιο Ethernet
1. 2. 3. 4. 5.
Φωτ. 28: Το hardware για την προτεινόμενη λύση, www.seeedstudio.com
Το Raspberry Pi είναι ένας φθηνός και υπολογιστής – πλακέτα, ο οποίος μπορεί να
εκτελέσει διάφορα ήδη λογισμικού που εμείς θα επιλέξουμε. Για την ιστορία, και
τους λεπτολόγους, ο επεξεργαστής του είναι τετραπύρηνος ARM Cortex-A7, στα 900
MHz , η RAM στο 1GB, η χωρητικότητα του ‘δίσκου’ του εξαρτάρται από την SD
κάρτα που θα χρησιμοποιήσουμε, καλύτερα θα ήταν από 8GB και άνω, και εν τέλει
τροφοδοτείται από τροφοδοτικό 4.0 W.
Για να ξεκινήσουμε με το Raspberry Pi χρειαζόμαστε λειτουργικό σύστημα. Το
NOOBS (New Out Of the Box Software) είναι ένας installer λογισμικού που περιέχει
το λειτουργικό σύστημα Raspbian (Raspberry Debian) καθώς και εναλλακτικά
λογισμικά σε περίπτωση που θέλουμε να χρησιμοποιήσουμε κάποιο άλλο. Για να το
εγκαταστήσουμε και να το λειτουργήσουμε θα ακολουθήσουμε τα εξής βήματα:
Κατέβασμα του NOOBS
Από την επίσημη σελίδα του Raspberry Pi και τον ακόλουθο σύνδεσμο, ΝΟΟBS, θα
κατεβάσουμε την τρέχουσα έκδοση του κατά προτίμηση σε μορφή torrent.
Φωτ. 29: Ο εγκαταστάτης λογισμικού Debian, https://www.raspberrypi.org/downloads/noobs/
Διαμόρφωση της κάρτας SD
Για να μεταφέρουμε το περιεχόμενο του NOOBS αρχείου που κατεβάσαμε θα
χρειαστεί να μορφοποιήσουμε και να αδειάσουμε μία SD κάρτα 4GB χωρητικότητας
και άνω.
1. Θα επισκεφτούμε, λοιπόν, το εξής σύνδεσμο SD Formatter 4.0 και
ακολουθώντας τις οδηγίες θα διαμορφώσουμε την SD κάρτα μας.
2. Θα εισάγουμε την SD κάρτα στην εσοχή του laptop ή στον card reader και θα
δούμε σε ποιον δίσκο δεσμεύεται, π.χ. G:/, Ι:/ κτλ.
3. Στο αρχείο που μόλις κατεβάσαμε( SD Formatter) θα επιλέξουμε τον δίσκο
δέσμευσης της κάρτας SD και θα τον διαμορφώσουμε.
Drag and Drop των NOOBS αρχείων
1. Αφού έχει διαμορφωθεί η κάρτα SD, θα σύρουμε όλα τα αρχεία από τον
φάκελο NOOBS και θα τα «ρίξουμε» στον δίσκο της κάρτας SD.
2. Με αυτό τον τρόπο θα μεταφερθούν όλα τα απαραίτητα αρχεία στην SD
κάρτα μας.
3. Εφόσον τελειώσουμε και με αυτή την διαδικασία, θα εισάγουμε την SD
κάρτα μας στην πλακέτα Raspberry Pi.
Η πρώτη εκκίνηση
1. Πρώτα από όλα, συνδέουμε το πληκτρολόγιο, το ποντίκι και τα καλώδια
παρακολούθησης στους ακροδέκτες GPIO του Pi.
2. Έπειτα συνδέουμε το USB καλώδιο που τροφοδοτεί το Pi.
3. Σε αυτή την περίπτωση το Raspberry θα εκκινήσει, και θα εμφανιστεί ένα
παράθυρο με μία λίστα από διαφορετικά λογισμικά που μπορούν να
εγκατασταθούν. Σε αυτή την περίπτωση, για λόγους του συγκεκριμένου
παραδείγματος, θα επιλέξουμε το λειτουργικό σύστημα Raspbian.
4. Εν συνεχεία θα χρειαστεί να αναμένουμε για την διαδικασία εγκατάστασης
του λογισμικού που πρόκειται να διαρκέσει κάποιο σημαντικό χρονικό
διάστημα.
5. Όταν η διαδικασία εγκατάστασης ολοκληρωθεί, θα φορτώσει το μενού
ρυθμίσεων του του Raspberry Pi (raspi-config). Εδώ θα ρυθμίσουμε κάποιες
παραμέτρους όπως την ημερομηνία, την ενεργοποίηση της κάρτας κάμερας
του Raspberry Pi, ακόμα και την δημιουργία χρηστών. Ολοκληρώνουμε αυτή
την διαδικασία πατώντας TAB και εκτελώντας το Finish.
Φωτ. 30: Επιλογή λογισμικού κατά την εκκίνηση του Raspberry Pi
Σύνδεση και πρόσβαση στην επιφάνεια χρήστη
Αν χρειαστεί κάποιο username για την σύνδεση στο Raspbian, οι προεπιλεγμένες
ρυθμίσεις για αυτό είναι:
username: pi
password: raspberry
Για λόγους ασφάλειας του Linux κατά την πληκτρολόγηση του κωδικού, δεν θα
εμφανίζεται ότι πληκτρολογείται κάτι.
Για να φορτώσει τη γραφική επιφάνεια χρήστη αρκεί να πληκτρολογήσουμε startx.
5.2 ΣΥΝΑΡΜΟΛΟΓΗΣΗ ΤΟΥ RASPBERRY Pi ΚΑΙ ΤΩΝ ΑΙΣΘΗΤΗΡΩΝ [12]
Όπως αναφέραμε προηγουμένως, η ρύθμιση του hardware δεν θα πάρει πάνω από
μερικά λεπτά. Πριν όμως συνδέσουμε τα καλώδια στους αισθητήρες, καλό θα ήταν
να κάνουμε μια μικρή εισαγωγή στο πως μπορεί το Raspberry Pi να “διευρυνθεί” με
εξωτερικούς αισθητήρες. Η σειρά των ακροδεκτών, κατά μήκος της άκρης της
πλακέτας, είναι προγραμματιζόμενη από το σύστημα Linux και μας επιτρέπει να
αλληλεπιδρούμε με μία πληθώρα συνδεδεμένων αισθητήρων. Ας το σκεφτούμε
έτσι. Οι GPIOs είναι διακόπτες που μπορούμε να τους ελέγξουμε από το Raspberry
Pi ως εξόδους (outputs), ή μπορούν να ελεγχθούν από τους αισθητήρες ως είσοδοι
(inputs). Κάποιοι από τους ακροδέκτες είναι πιο πολύπλοκοι και επιτρέπουν την
χρήση πρωτοκόλλων υψηλότερου επιπέδου για την ανταλλαγή περισσοτέρων
σημάτων από αυτά των on/off. Τέτοια πρωτόκολλα περιέχουν τα SPI, I2C ή UART
και εμείς, όντως, θα χρησιμοποιήσουμε ένα I2C αισθητήρα θερμοκρασίας -
υγρασίας σε αυτό το παράδειγμα.
Μία άποψη της κατανομής των ακροδεκτών του Raspberry ακολουθεί στην
παρακάτω εικόνα.
Φωτ. 31: Ακροδέκτες εισόδου-εξόδου στον μικροεπεξεργαστή Raspberry Pi,
https://www.raspberrypi.org/documentation/usage/gpio/
Φωτ. 32: Ιδιότητες κάθε ακροδέκτη, https://www.raspberrypi.org/documentation/usage/gpio/
Οι είσοδοι δεν χρειάζεται να προέρχονται από έναν απτό διακόπτη, μπορούν να
είναι είσοδοι από έναν αισθητήρα ή από ένα σήμα από κάποιον άλλο υπολογιστή ή
συσκευή παραδείγματος χάρη. Οι έξοδοι μπορούν επίσης να κάνουν τα πάντα, από
το να ενεργοποιήσουν ένα LED μέχρι το να στείλουν δεδομένα σε μία άλλη
συνδεδεμένη συσκευή. Αν το Raspberry Pi είναι συνδεδεμένο σε κάποιο δίκτυο,
μπορούμε να διαχειριστούμε τις συσκευές που είναι που είναι σε ζεύξη με αυτό
από οπουδήποτε και αυτές οι συσκευές μπορούν να στείλουν πίσω δεδομένα. Στην
ουσία, δεν γίνεται να τις διαχειριστούμε από οπουδήποτε, μιας και χρειαζόμαστε
πρώτον: πρόσβαση σε αυτό το δίκτυο, δεύτερον: μια συσκευή ικανή να συνδεθεί σε
ένα τέτοιο δίκτυο και τρίτον: ηλεκτρικό ρεύμα. Η συνδεσιμότητα και ο χειρισμός
τέτοιων συσκευών , μέσω του διαδικτύου, είναι μία ενθουσιώδης εμπειρία , και το
Raspberry Pi είναι το ιδανικό για κάτι τέτοιο.
Λειτουργία Ακροδεκτών GPIO
Το να συνδέσει κανείς, τυχαία, καλώδια είτε πηγές τροφοδοσίας στο Pi, μπορεί να
δημιουργήσει προβλήματα τόσο στη συσκευή όσο και στο χρήστη. Το ίδιο μπορεί
να συμβεί και σε περίπτωση που προσπαθήσουμε να συνδέσουμε στο Pi συσκευές
που καταναλώνουν πολλή ενέργεια. Σε αυτή την περίπτωση τα LED δεν θα έχουν
κάποιο πρόβλημα αλλά κάποιος κινητήρας, πιθανόν να έχει. Τότε απαιτείται
τροφοδοτικό μεγαλύτερης ισχύος.
Αφήνοντας στην άκρη το Pi για μια στιγμή, ένα από τα πιο απλά ηλεκτρικά
κυκλώματα που μπορούμε να χτίσουμε είναι μία μπαταρία συνδεδεμένη με μία
πηγή φωτός και έναν διακόπτη, με μία αντίσταση να προστατεύει το LED.
Φωτ. 33: Μια διάταξη ενός απλού κυκλώματος, https://www.raspberrypi.org/documentation/usage/gpio/
Όταν χρησιμοποιούμε έναν ακροδέκτη GPIO ως έξοδο, το Raspberry Pi αντικαθιστά
τον διακόπτη και την μπαταρία στο παραπάνω διάγραμμα. Κάθε καρφίο μπορεί να
ενεργοποιηθεί ή απενεργοποιηθεί, ή να πάει HIGH ή LOW, δηλαδή να έχει έξοδο
HIGH=3.3 volts ή να μην έχει καθόλου έξοδο, LOW=0ν.
To ίδιο κύκλωμα, χρησιμοποιώντας το Raspberry Pi, θα έχει συνδεδεμένο το LED στο
GPIO καρφίο (που μπορεί να έχει ως έξοδο +3.3volts) και στο καρφίο γείωσης (που
είναι 0ν και λειτουργεί ως αρνητικό τερματικό για την μπαταρία).
Φωτ.34: Εφαρμογή ενός λαμπτήρα LED στα καρφία, https://www.raspberrypi.org/documentation/usage/gpio/
Σε αυτά που αναφερθήκαμε μέχρι στιγμής, είχαν να κάνουν με GPIO εξόδους οι
οποίες μπορούν να είναι όπως είπαμε είτε HIGH είτε LOW, πράγμα που τις κάνει
εύκολες στην κατανόηση και στην χρήση τους. Από την άλλη, οι είσοδοι είναι πιο
πολύπλοκες λόγω του τρόπου λειτουργίας των ψηφιακών συσκευών. Παρόλο που
φαίνεται φυσιολογικό το να συνδέσουμε, απλά, ένα κουμπί σε έναν ακροδέκτη
εισόδου και έναν ακροδέκτη γείωσης, ίσως αυτή η κίνηση να προκαλέσει σύγχυση
στο Pi ως προς το αν αυτό το κουμπί είναι εργοστασιακά ρυθμισμένο on ή off. Με
λίγα λόγια υπάρχει περίπτωση να λειτουργήσει, αλλά και το αντίθετο. Μπορούμε
να το παρομοιάσουμε με την αιώρηση στο διάστημα, διότι χωρίς ένα σημείο
αναφοράς θα ήταν πολύ δύσκολο να πει κανείς αν αιωρείται προς τα πάνω ή προς
τα κάτω, ή στην τελική τι ακριβώς σημαίνει το πάνω και το κάτω!
Σύνδεση των αισθητήρων
Πλέον έφτασε η στιγμή για να αγκιστρώσουμε τον αισθητήρα θερμοκρασίας -
υγρασίας και το LED στο Raspberry Pi. Οι ακροδέκτες GPIO είναι αριθμημένοι όπως
στην εικόνα “Raspberry Pi B+ J8 Header” που χρησιμοποιήσαμε παραπάνω.
Θα συνδέσουμε λοιπόν τα καλώδια Grove στον αισθητήρα θερμοκρασίας -
υγρασίας και στο LED αφού πρώτα βεβαιωθούμε ότι το Raspberry Pi δεν είναι σε
λειτουργία. Για το κάθε διαφορετικό καλώδιο θα κάνουμε την εξής σύνδεση:
Αισθητήρας θερμοκρασίας:
● Το μαύρο καλώδιο θα συνδεθεί με το PIN#06 (γείωσης)
● Το κόκκινο καλώδιο με το ΡΙΝ#01 (τροφοδοσίας)
● Το κίτρινο καλώδιο με το ΡΙΝ#05 ( SCL i2c Clock)
● Το λευκό καλώδιο με το ΡΙΝ#03 ( SDA i2c Data)
LED:
● To μαύρο καλώδιο θα συνδεθεί με το ΡΙΝ#14 (γείωσης)
● Το κόκκινο καλώδιο με το ΡΙΝ#02 (τροφοδοσίας)
● Το κίτρινο με το ΡΙΝ#11 ( καρφίο γενικής χρήσεως)
● Το λευκό καλώδιο, μιας και το μόνο που χρειαζόμαστε για το παράδειγμα
είναι να αναβοσβήνει το LED, δεν θα το χρησιμοποιήσουμε ή απλά θα το
συνδέσουμε με ένα καρφίο γείωσης
Εφόσον εκτελέσουμε αυτές τις συνδέσεις, έπειτα θα συνδέσουμε το Raspberry Pi
στον οικιακό δρομολογητή μας χρησιμοποιώντας το καλώδιο Ethernet ή για
απλούστευση της διαδικασίας θα ακολουθήσουμε τον προσωπικό μου οδηγό για
σύνδεση στο διαδίκτυο και χειρισμό του Raspberry Pi μέσω του Tutorial Video που
έχω αναρτημένο στον προσωπικό μου λογαριασμό στο YouTube.
Εν συνεχεία θα εκκινήσουμε το Pi και επιλέγοντας το “Expand Filesystem” θα
βεβαιωθούμε ότι όλη η χωρητικότητα της SD κάρτας είναι διαθέσιμη.
Φωτ. 35: Επέκταση του συστήματος για μέγιστη χωρητικότητα
Για να λειτουργήσει σωστά ο αισθητήρας θερμοκρασίας θα πρέπει να
ενεργοποιήσουμε το i2c, το οποίο θα επιτρέψει το ένα chip να επικοινωνεί με
κάποιο άλλο. Άρα, εφόσον το Raspberry Pi μπορεί να “μιλήσει” το πρωτόκολλο I2C
μπορούμε να το συνδέσουμε σε μία πληθώρα από ολοκληρωμένα κυκλώματα
(συσκευές) που αντιλαμβάνονται το I2C. Αυτό χρειάζεται μία διαδικασία.
Ο δίαυλος I2C επιτρέπει σε πολλαπλές συσκευές να είναι συνδεδεμένες στο
Raspberry Pi, κάθε μία με μοναδική διεύθυνση, και είναι πολύ χρήσιμο στο να
μπορούμε να γνωρίζουμε ανά πάσα στιγμή, πόσες και ποιες συσκευές είναι
συνδεδεμένες σε αυτό, ώστε να σιγουρευόμαστε πως όλα βαίνουν καλώς. Για να το
πετύχουμε αυτό θα εκτελέσουμε τις εξής εντολές στο τερματικό, εγκαθιστώντας
έτσι το i2c-tools.
1. sudo apt-get install python-smbus
2. sudo apt-get install i2c-tools
Επιπρόσθετα, τρέχοντας το sudo raspi-config, θα βρεθούμε ξανά στο μενού
ρυθμίσεων του Pi, όπου , με βάση τα παρακάτω screenshots θα εγκαταστήσουμε
και την υποστήριξη I2C για τον ARM core και τον πυρήνα linux. Αν δεν νιώθουμε
οικία στο να χειριζόμαστε το τερματικό μπορούμε κάλλιστα να κάνουμε τις
παραπάνω αλλαγές μέσω των ρυθμίσεων από την γραφική διεπιφάνεια μετά την
έναρξη του λογισμικού.
[a]
[b]
[c]
Φωτ. 36,[a],[b],[c]: Ενεργοποίηση υποστήριξης διαύλου I2C
Και το μόνο που μας μένει είναι μία επανεκκίνηση του συστήματος.
Εγκατάσταση του Eclipse Kura στο Raspberry Pi
Η εγκατάσταση του Kura είναι αρκετά εύκολη. Βασικά είναι τόσο εύκολη όσο η
εγκατάσταση κάθε πακέτου Debian. Υποθέτοντας πως είμαστε στο μενού
ρυθμίσεων του Raspberry Pi, θα πληκτρολογήσουμε το εξής:
cd ~
sudo apt-get update
wget
https://s3.amazonaws.com/kura_downloads/raspbian/release/1.4.0/kura_1.4.0_r
aspberry-pi-2_installer.deb
sudo dpkg -i kura_1.4.0_raspberry-pi-2_installer.deb
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things
Creating a Smart Greenhouse with Internet of Things

More Related Content

Viewers also liked

Internet of Things (IoT) - We Are at the Tip of An Iceberg
Internet of Things (IoT) - We Are at the Tip of An IcebergInternet of Things (IoT) - We Are at the Tip of An Iceberg
Internet of Things (IoT) - We Are at the Tip of An IcebergDr. Mazlan Abbas
 
What exactly is the "Internet of Things"?
What exactly is the "Internet of Things"?What exactly is the "Internet of Things"?
What exactly is the "Internet of Things"?Dr. Mazlan Abbas
 
Smart Cities and Big Data - Research Presentation
Smart Cities and Big Data - Research PresentationSmart Cities and Big Data - Research Presentation
Smart Cities and Big Data - Research Presentationannegalang
 
What is the Internet of Things?
What is the Internet of Things?What is the Internet of Things?
What is the Internet of Things?Felix Grovit
 
THE INTERNET OF THINGS
THE INTERNET OF THINGSTHE INTERNET OF THINGS
THE INTERNET OF THINGSRamana Reddy
 
Internet of Things and its applications
Internet of Things and its applicationsInternet of Things and its applications
Internet of Things and its applicationsPasquale Puzio
 
Internet of Things
Internet of ThingsInternet of Things
Internet of ThingsVala Afshar
 
Internet-of-things- (IOT) - a-seminar - ppt - by- mohan-kumar-g
Internet-of-things- (IOT) - a-seminar - ppt - by- mohan-kumar-gInternet-of-things- (IOT) - a-seminar - ppt - by- mohan-kumar-g
Internet-of-things- (IOT) - a-seminar - ppt - by- mohan-kumar-gMohan Kumar G
 
IoT - IT 423 ppt
IoT - IT 423 pptIoT - IT 423 ppt
IoT - IT 423 pptMhae Lyn
 

Viewers also liked (13)

PPT on SMART city
PPT on SMART cityPPT on SMART city
PPT on SMART city
 
Smart city presentation
Smart city presentationSmart city presentation
Smart city presentation
 
Smart city
Smart citySmart city
Smart city
 
Internet of Things (IoT) - We Are at the Tip of An Iceberg
Internet of Things (IoT) - We Are at the Tip of An IcebergInternet of Things (IoT) - We Are at the Tip of An Iceberg
Internet of Things (IoT) - We Are at the Tip of An Iceberg
 
Internet of Things
Internet of ThingsInternet of Things
Internet of Things
 
What exactly is the "Internet of Things"?
What exactly is the "Internet of Things"?What exactly is the "Internet of Things"?
What exactly is the "Internet of Things"?
 
Smart Cities and Big Data - Research Presentation
Smart Cities and Big Data - Research PresentationSmart Cities and Big Data - Research Presentation
Smart Cities and Big Data - Research Presentation
 
What is the Internet of Things?
What is the Internet of Things?What is the Internet of Things?
What is the Internet of Things?
 
THE INTERNET OF THINGS
THE INTERNET OF THINGSTHE INTERNET OF THINGS
THE INTERNET OF THINGS
 
Internet of Things and its applications
Internet of Things and its applicationsInternet of Things and its applications
Internet of Things and its applications
 
Internet of Things
Internet of ThingsInternet of Things
Internet of Things
 
Internet-of-things- (IOT) - a-seminar - ppt - by- mohan-kumar-g
Internet-of-things- (IOT) - a-seminar - ppt - by- mohan-kumar-gInternet-of-things- (IOT) - a-seminar - ppt - by- mohan-kumar-g
Internet-of-things- (IOT) - a-seminar - ppt - by- mohan-kumar-g
 
IoT - IT 423 ppt
IoT - IT 423 pptIoT - IT 423 ppt
IoT - IT 423 ppt
 

Similar to Creating a Smart Greenhouse with Internet of Things

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ-THESIS "CREATION OF ANDROID APPLICATION USING ECLIPSE IDE"
ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ-THESIS "CREATION OF ANDROID APPLICATION USING ECLIPSE IDE"ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ-THESIS "CREATION OF ANDROID APPLICATION USING ECLIPSE IDE"
ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ-THESIS "CREATION OF ANDROID APPLICATION USING ECLIPSE IDE"Elpida Stefanidi
 
ΘΜΔ - ΕΡΓ.3 - ΟΜΑΔΑ 11
ΘΜΔ - ΕΡΓ.3 - ΟΜΑΔΑ 11ΘΜΔ - ΕΡΓ.3 - ΟΜΑΔΑ 11
ΘΜΔ - ΕΡΓ.3 - ΟΜΑΔΑ 11Omada11TEI
 
2- IoT - 4th Industrial Revolution.ppt
2- IoT - 4th Industrial Revolution.ppt2- IoT - 4th Industrial Revolution.ppt
2- IoT - 4th Industrial Revolution.pptAlex420296
 
Ο Υπολογιστής στήν καθημερινή μας ζωή
Ο Υπολογιστής στήν καθημερινή μας ζωήΟ Υπολογιστής στήν καθημερινή μας ζωή
Ο Υπολογιστής στήν καθημερινή μας ζωήKonstantinos Kalaras Lafkiotis
 
Informatic notes a
Informatic notes aInformatic notes a
Informatic notes aorfeasaefr
 
Informatic notes a
Informatic notes aInformatic notes a
Informatic notes aorfeasaefr
 
Kef2 111110110114-phpapp01
Kef2 111110110114-phpapp01Kef2 111110110114-phpapp01
Kef2 111110110114-phpapp01eleni210606
 
Ενότητα 1 Κεφάλαιο 1
Ενότητα 1 Κεφάλαιο 1Ενότητα 1 Κεφάλαιο 1
Ενότητα 1 Κεφάλαιο 1Nikos Koulouridis
 
δραστηριότητα εικονικό μουσείο
δραστηριότητα εικονικό μουσείοδραστηριότητα εικονικό μουσείο
δραστηριότητα εικονικό μουσείοarmekka
 
Παρουσίαση για ημερίδα ΕΚΟ (Τζανής)
Παρουσίαση για ημερίδα ΕΚΟ (Τζανής)Παρουσίαση για ημερίδα ΕΚΟ (Τζανής)
Παρουσίαση για ημερίδα ΕΚΟ (Τζανής)Dimitrios Tzanis
 
Τεχνολογία Επικοινωνιών-Κεφάλαιο2c
Τεχνολογία Επικοινωνιών-Κεφάλαιο2cΤεχνολογία Επικοινωνιών-Κεφάλαιο2c
Τεχνολογία Επικοινωνιών-Κεφάλαιο2cNikos Michailidis
 
Τεχνολογία Επικοινωνιών: Κεφάλαιο2a
Τεχνολογία Επικοινωνιών: Κεφάλαιο2aΤεχνολογία Επικοινωνιών: Κεφάλαιο2a
Τεχνολογία Επικοινωνιών: Κεφάλαιο2aNikos Michailidis
 
VET4SBO Level 2 module 6 - unit 4 - v1.0 gr
VET4SBO Level 2   module 6 - unit 4  - v1.0 grVET4SBO Level 2   module 6 - unit 4  - v1.0 gr
VET4SBO Level 2 module 6 - unit 4 - v1.0 grKarel Van Isacker
 
A2-M2 Computer Types
A2-M2 Computer TypesA2-M2 Computer Types
A2-M2 Computer Typespapettas
 
οδηγός ασφαλούς χρήσης Internet
οδηγός ασφαλούς χρήσης Internetοδηγός ασφαλούς χρήσης Internet
οδηγός ασφαλούς χρήσης Internet10odskaterinis1
 
Mobile Commerce: Framework, Marketing and Security & Payment Issues
Mobile Commerce: Framework, Marketing and Security & Payment IssuesMobile Commerce: Framework, Marketing and Security & Payment Issues
Mobile Commerce: Framework, Marketing and Security & Payment Issuesakargas
 

Similar to Creating a Smart Greenhouse with Internet of Things (20)

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ-THESIS "CREATION OF ANDROID APPLICATION USING ECLIPSE IDE"
ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ-THESIS "CREATION OF ANDROID APPLICATION USING ECLIPSE IDE"ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ-THESIS "CREATION OF ANDROID APPLICATION USING ECLIPSE IDE"
ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ-THESIS "CREATION OF ANDROID APPLICATION USING ECLIPSE IDE"
 
Grid computing
Grid computingGrid computing
Grid computing
 
ΘΜΔ - ΕΡΓ.3 - ΟΜΑΔΑ 11
ΘΜΔ - ΕΡΓ.3 - ΟΜΑΔΑ 11ΘΜΔ - ΕΡΓ.3 - ΟΜΑΔΑ 11
ΘΜΔ - ΕΡΓ.3 - ΟΜΑΔΑ 11
 
ECDL.docx
ECDL.docxECDL.docx
ECDL.docx
 
2- IoT - 4th Industrial Revolution.ppt
2- IoT - 4th Industrial Revolution.ppt2- IoT - 4th Industrial Revolution.ppt
2- IoT - 4th Industrial Revolution.ppt
 
Ο Υπολογιστής στήν καθημερινή μας ζωή
Ο Υπολογιστής στήν καθημερινή μας ζωήΟ Υπολογιστής στήν καθημερινή μας ζωή
Ο Υπολογιστής στήν καθημερινή μας ζωή
 
Informatic notes a
Informatic notes aInformatic notes a
Informatic notes a
 
Informatic notes a
Informatic notes aInformatic notes a
Informatic notes a
 
Kef2 111110110114-phpapp01
Kef2 111110110114-phpapp01Kef2 111110110114-phpapp01
Kef2 111110110114-phpapp01
 
Ενότητα 1 Κεφάλαιο 1
Ενότητα 1 Κεφάλαιο 1Ενότητα 1 Κεφάλαιο 1
Ενότητα 1 Κεφάλαιο 1
 
δραστηριότητα εικονικό μουσείο
δραστηριότητα εικονικό μουσείοδραστηριότητα εικονικό μουσείο
δραστηριότητα εικονικό μουσείο
 
ΔΙΑΔΙΚΤΥΟ
ΔΙΑΔΙΚΤΥΟΔΙΑΔΙΚΤΥΟ
ΔΙΑΔΙΚΤΥΟ
 
Παρουσίαση για ημερίδα ΕΚΟ (Τζανής)
Παρουσίαση για ημερίδα ΕΚΟ (Τζανής)Παρουσίαση για ημερίδα ΕΚΟ (Τζανής)
Παρουσίαση για ημερίδα ΕΚΟ (Τζανής)
 
Τεχνολογία Επικοινωνιών-Κεφάλαιο2c
Τεχνολογία Επικοινωνιών-Κεφάλαιο2cΤεχνολογία Επικοινωνιών-Κεφάλαιο2c
Τεχνολογία Επικοινωνιών-Κεφάλαιο2c
 
Τεχνολογία Επικοινωνιών: Κεφάλαιο2a
Τεχνολογία Επικοινωνιών: Κεφάλαιο2aΤεχνολογία Επικοινωνιών: Κεφάλαιο2a
Τεχνολογία Επικοινωνιών: Κεφάλαιο2a
 
Teenagers and internet
Teenagers and internetTeenagers and internet
Teenagers and internet
 
VET4SBO Level 2 module 6 - unit 4 - v1.0 gr
VET4SBO Level 2   module 6 - unit 4  - v1.0 grVET4SBO Level 2   module 6 - unit 4  - v1.0 gr
VET4SBO Level 2 module 6 - unit 4 - v1.0 gr
 
A2-M2 Computer Types
A2-M2 Computer TypesA2-M2 Computer Types
A2-M2 Computer Types
 
οδηγός ασφαλούς χρήσης Internet
οδηγός ασφαλούς χρήσης Internetοδηγός ασφαλούς χρήσης Internet
οδηγός ασφαλούς χρήσης Internet
 
Mobile Commerce: Framework, Marketing and Security & Payment Issues
Mobile Commerce: Framework, Marketing and Security & Payment IssuesMobile Commerce: Framework, Marketing and Security & Payment Issues
Mobile Commerce: Framework, Marketing and Security & Payment Issues
 

Creating a Smart Greenhouse with Internet of Things

  • 1. INTERNET OF THINGS, THE NEXT BIG THING. Του σπουδαστή, Κυριάκου Παπαχρήστου, 23/11 Τμήμα Εφαρμοσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας, Θεσσαλονίκη Έτος:2015/2016
  • 2. ΠΕΡΙΕΧΟΜΕΝΑ 1. Εισαγωγή…………………………………………………………………………….………….σελ. 4 2. Περιγραφή του Προβλήματος 2.1 Μάθηση και Σκέψη μέσω του Internet of Things………………………...σελ.8 2.2 Αρχιτεκτονική ως Διεπαφή………………………………………………………….σελ.9 2.3 Επίπεδα Αναζήτησης…………………………………………………………………..σελ.11 2.4 Περιγραφή του UoM Greenhouse……………………………………………….σελ.13 3. Βασική Γνώση και Τεχνολογίες που χρησιμοποιήθηκαν…..…σελ. 15 4. Περιγραφή της προτεινόμενης λύσης 4.1 Ρύθμιση Πλατφόρμας…………………………………………………………………σελ. 22 4.2 Εισάγοντας το Kura στο Περιβάλλον Χρήστη………………………………σελ. 25 4.3 OSGi Project με το Kura………………………………………………………………σελ. 27 4.4 Δημιουργία ενός Deployment Package……………………………………...σελ. 36 5. Τεχνική Ανάλυση της λύσης 5.1 Ετοιμάζοντας το Hardware………………………………………………………..σελ. 38 5.2 Συναρμολόγηση του Raspberry Pi και των Αισθητήρων…………….σελ. 42 5.3 Αναπτύσσοντας ένα Έξυπνο Θερμοκήπιο………………………………….σελ. 50 5.4 Κάνοντας το Θερμοκήπιο “Εξυπνότερο”……………………………………σελ. 54 6. Πιθανές επεκτάσεις και σενάρια εφαρμογής 6.1 Χρήση Επιπλέον I2C Αισθητήρων……………………………………………..σελ. 61 6.2 Χρήση Διαφορετικής Υπηρεσίας Cloud……………………………….…….σελ. 62 6.3 Σύνδεση Αισθητήρων στο Διαδίκτυο………………………………………..σελ. 63 6.4 myDevices Cayenne Builder………………………………………………………σελ. 64 6.5 Reactive Blocks………………………………………………………………………….σελ. 66 7. Συμπεράσματα……………………………………………………………………..…….σελ. 68 8. Παράρτημα 8.1 Βιβλιογραφία και Αναφορές…………………………………………….………σελ.69
  • 3.
  • 4. 1. Εισαγωγή “Internet Of Things (IoT)”: ένα σύνολο συσκευών (αντικειμένων ή “πραγμάτων”) με ενσωματωμένες σε αυτά δικτυακές διεπαφές, λογισμικό, αισθητήρες, ηλεκτρονικά και ηλεκτρομηχανικά εξαρτήματα όπου μέσω της συνέργειας αυτών των παραγόντων και της σύνδεσης στο διαδίκτυο μπορεί να επιτευχθεί ανταλλαγή πληροφοριών με τον κατασκευαστή, τον χρήστη ή/και με άλλες συνδεδεμένες συσκευές. Κάθε “πράγμα” είναι μοναδικά αναγνωρίσιμο μέσω των ενσωματωμένων υπολογιστικών συστημάτων του και είναι σε θέση να διαλειτουργεί μέσα στην υπάρχουσα υποδομή του Διαδικτύου. [1] Το Internet Of Things χαρακτηρίζεται ως ‘’η επόμενη Βιομηχανική επανάσταση’’ λόγω του τρόπου που θα επηρεάσει τον τρόπο που οι άνθρωποι ζούνε, εργάζονται, ψυχαγωγούνται και ταξιδεύουν, καθώς και του τρόπου όπου οι κυβερνήσεις και οι επιχειρήσεις θα αλληλεπιδρούν με τον κόσμο. Στην πραγματικότητα η επανάσταση έχει ήδη ξεκινήσει. Το καινούριο αυτοκίνητο που έρχεται εφοδιασμένο με μία πληθώρα εφαρμογών; Internet Of Things! Οι έξυπνες οικιακές συσκευές που σου επιτρέπουν να χειριστείς το θερμοστάτη και να παίξεις μουσική απλά με μία φωνητική εντολή; Internet Of Things! Τα wearables που φοράς στον καρπό σου και μπορούν να ενημερώνουν τους φίλους σου και την οικογένεια σου για το επίπεδο αντοχής σου; Νομίζω καταλάβατε που το πηγαίνω. Αλλά αυτή είναι μόνο η αρχή…. Η υπηρεσία έρευνας της Business Insider, παρακολούθησε την ανάπτυξη του ΙοΤ για τα τελευταία 2 χρόνια, και ιδιαίτερα το πως οι καταναλωτές, οι επιχειρήσεις και οι κυβερνήσεις χειρίζονται το ΙοΤ οικοσύστημα.
  • 5. Το ΙοΤ Οικοσύστημα[13] Φωτ.1: Κύκλος ζωής IoT, Business Insider Στο συγκεκριμένο οικοσύστημα, μία οντότητα χρησιμοποιεί μία απομακρυσμένη συσκευή (remote), δηλαδή ένα smartphone, tablet κ.τ.λ. για να στείλει μία εντολή ή μία αίτηση για πληροφορία, πάνω σε ένα δίκτυο (Internet Network) για μία συσκευή ΙοΤ (IoT Device). Η συσκευή τότε εκτελεί την εντολή ή/και στέλνει την πληροφορία πίσω μέσω του ίδιου δικτύου για να αναλυθεί και απεικονιστεί στην απομακρυσμένη συσκευή. Υπάρχουν πολλαπλές τοποθεσίες όπου μπορούν να αναλυθούν και αποθηκευτούν τα δεδομένα που παράχθηκαν από την ΙοΤ συσκευή, όπως το cloud, μία τοπική βάση δεδομένων, ακόμα και στην ίδια την ΙοΤ συσκευή. Η κινητήρια δύναμη της αγοράς για την τεχνολογία ΙοΤ, προέρχεται κυρίως από την επέκταση της συνδεσιμότητας στο διαδίκτυο, από την υψηλή προσαρμοστικότητα στις κινητές συσκευές, από το χαμηλό κόστος των αισθητήρων αλλά και από τις μεγάλες επενδύσεις σε αυτόν τον τομέα. Από την άλλη πλευρά η τροχοπέδη είναι τα θέματα πολιτικών ασφάλειας , ιδιωτικότητας και τεχνολογικού κατακερματισμού. Όσον αφορά τώρα τους τομείς των επενδύσεων, αυτοί θα αφορούν αφενός την ανάπτυξη εφαρμογών για ΙοΤ καθώς και συσκευών hardware που αναμένεται να φτάσει εως το 2020 το ποσό των 5 τρις.! και αφετέρου την σχεδίαση συστημάτων ενσωμάτωσης, αποθήκευσης δεδομένων, ζητημάτων ασφαλείας και συνδεσιμότητας, οι οποίες επενδύσεις θα ανέρχονται στο 1 τρις. Έπειτα από αυτή τη σύντομη εισαγωγή θα ήταν σωστό να τονίσουμε τον σκοπό αυτής της εργασίας καθώς και το λόγο που επέλεξα το συγκεκριμένο θέμα. Αρχικά, σκοπός της εργασίας είναι να εισάγουμε τις βασικές έννοιες και τεχνολογίες που μπορούμε να χρησιμοποιήσουμε στο Internet of Things καθώς και να μελετήσουμε, να υλοποιήσουμε και να αναπτύξουμε παραπέρα μία εφαρμογή επίδειξης του Eclipse για την ενσωμάτωση ενός Internet of Things κλειστού δικτύου σε ένα
  • 6. εικονικό θερμοκήπιο. Αφού μελετήσουμε τα τεχνικά του στοιχεία και εν τέλει εφόσον κατανοήσουμε κάθε διαφορετικό κομμάτι της λειτουργίας του, να προσθέσουμε κάποιες επιπλέον δυνατότητες σε αυτή την εφαρμογή και να την δοκιμάσουμε μέσω μιας διεπιφάνειας ιστού προσαρμοσμένη στα μέτρα μας . Ελπίζω πως το αναμενόμενο εκπαιδευτικό αποτέλεσμα θα είναι η κατανόηση της αρχιτεκτονικής μιας εφαρμογής που χρησιμοποιεί την συγκεκριμένη τεχνολογία, της λειτουργίας και της επικοινωνίας μεταξύ των συνδεδεμένων συσκευών και πλατφορμών, και πως η παραλλαγή της εφαρμογής μας θα εξηγήσει περαιτέρω στον χρήστη τις διαφοροποιήσεις που θα χρειαστεί ο λειτουργικός κώδικας της εφαρμογής ώστε να μπορεί να αποκτήσει περισσότερες δυνατότητες. Επιπλέον, θα αναδείξουμε τις δυνατότητες του hardware και συγκεκριμένα του Raspberry Pi, ώστε αυτό να μπορεί να συνδέεται με επιτυχία με τους αισθητήρες και να μπορεί να λαμβάνει, κωδικοποιεί και αναλύει τα δεδομένα σε πραγματικό χρόνο. Η παραπάνω τεχνολογία συγχέεται με αυτή του Internet of Things, του Ubiquitous και Pervasive Computing, με τους οποίους όρους θα ασχοληθούμε αμέσως. Ubiquitous Computing: είναι μία έννοια στην τεχνολογία λογισμικού και την επιστήμη των υπολογιστών όπου η χρήση υπολογιστών είναι πανταχού παρούσα χρησιμοποιώντας οποιαδήποτε συσκευή σε οποιαδήποτε τοποθεσία σε οποιαδήποτε μορφή. Με λίγα λόγια ένας χρήστης ενεργεί με μία διεπαφή του υπολογιστή , ο οποίος μπορεί να λαμβάνει κάποια μορφή, όπως φορητός υπολογιστής, tablet, smartphone, καθώς και τερματικό σε καθημερινά αντικείμενα όπως μία λάμπα ή ένα ραδιόφωνο. Ο κύριος στόχος της πανταχού παρούσας υπολογιστικής είναι η δημιουργίας έξυπνων πακέτων που είναι συνδεδεμένα, κάνοντας έτσι την επικοινωνία αλλά και την ανταλλαγή δεδομένων ευκολότερη και πιο υποφερτή. Τα βασικά χαρακτηριστικά της περιλαμβάνουν: ● Την αναγνώριση του ανθρώπινου παράγοντα δηλαδή την ανάπτυξη της εφαρμογής και της διεπαφής με βάση το ανθρώπινο και όχι το υπολογιστικό περιβάλλον, ● Την χρήση οικονομικών επεξεργαστών, μειώνοντας τις απαιτήσεις μνήμης και αποθήκευσης, ● Την ανάκτηση δεδομένων σε πραγματικό χρόνο, ● Την ολοκληρωτική διασύνδεση και τις συνεχώς διαθέσιμες υπολογιστικές συσκευές, ● Την εστίαση σε σχέσεις πολλά-προς-πολλά, αντί για ένα-προς-ένα στο περιβάλλον, σε συνδυασμό με την τεχνολογία η οποία είναι πάντα παρούσα, ● Την χρήση τοπικών/παγκόσμιων, δημόσιων/ιδιωτικών, ορατών/αόρατων χαρακτηριστικών για την δημιουργία γνώσης και διάδοσης της πληροφορίας,
  • 7. ● Την σύγκλιση του διαδικτύου, της ασύρματης τεχνολογίας και των προηγμένων ηλεκτρονικών συσκευών, ● Την αυξημένη επιτήρηση και τον ενδεχόμενο περιορισμό ανάμειξης στην ιδιωτικότητα του χρήστη, καθώς οι συσκευές είναι συνεχώς συνδεδεμένες [2] Η πανταχού παρούσα υπολογιστική είναι περίπου το αντίθετο της εικονικής πραγματικότητας διότι ενώ η εικονική πραγματικότητα βάζει τους ανθρώπους μέσα σε μία πραγματικότητα δημιουργημένη από τον υπολογιστή η πανταχού παρούσα υπολογιστική ωθεί τους υπολογιστές να συνυπάρξουν με την ανθρωπότητα. Pervasive Computing: είτε στα ελληνικά “διάχυτη υπολογιστική” αναφέρεται στην σύγκλιση και στην σύνθεση των υπαρχόντων τεχνολογιών. Κυρίως ακολουθεί την ιδέα ότι η τεχνολογία κινείται πέρα από τον προσωπικό υπολογιστή σε καθημερινές συσκευές με την ενσωματωμένη τεχνολογία και συνδεσιμότητα καθώς οι υπολογιστικές συσκευές γίνονται μικρότερες και πιο ισχυρές. Η Διάχυτη υπολογιστική πηγαίνει πέρα από τη σφαίρα των προσωπικών υπολογιστών: είναι η ιδέα ότι σχεδόν οποιαδήποτε συσκευή, από ρούχα, εργαλεία, αυτοκίνητα, σπίτια, το ανθρώπινο σώμα ως μια κούπα του καφέ, μπορεί να ενσωματωθεί με τσιπ για να συνδεθεί αυτή η συσκευή σε ένα άπειρο δίκτυο άλλων συσκευών. Ο στόχος της Pervasive computing, η οποία συνδυάζει τις τρέχουσες τεχνολογίες δικτύου με φορητούς υπολογιστές, την αναγνώριση φωνής, την ικανότητα του Διαδικτύου και την τεχνητή νοημοσύνη, είναι να δημιουργήσει ένα περιβάλλον όπου η σύνδεση των συσκευών είναι ενσωματωμένη με ένα τέτοιο τρόπο ώστε η συνδεσιμότητα να είναι διακριτική και πάντα στη διάθεσή μας. [3]
  • 8. 2. Περιγραφή του προβλήματος 2.1 ΜΑΘΗΣΗ ΚΑΙ ΣΚΕΨΗ ΜΕΣΩ ΤΟΥ INTERNET OF THINGS Τα οφέλη του ηλεκτρονικού υπολογιστή έχουν και το αντίτιμό τους, δηλαδή πρέπει να μάθουμε πως να αλληλεπιδρούμε με αυτές τις συσκευές με τρόπο ο οποίος θα έμοιαζε τόσο ξένος προς τους προγόνους μας: ποντίκι, πληκτρολόγιο, περίεργες χειρονομίες, περίεργες συσκευές και λειτουργίες συσκευών. Αλλά τι μας επιφυλάσσει το μέλλον για την μάθηση και την τεχνολογία; Υπάρχει άραγε κάποιος τρόπος να συμβιβάσουμε τον διαχωρισμό μεταξύ όλων των ψηφιακών στοιχείων και το ευρύ φάσμα των αλληλεπιδράσεων που είναι δυνατό να δημιουργήσει το σώμα μας; Και πως αλλάζει ο ρόλος ενός χρήστη όταν έχει να κάνει με έξυπνες και πιθανόν δυνητικά ευέλικτες συσκευές; Αν ρίξουμε μία ματιά στις τάσεις της τεχνολογίας και ιδιαιτέρως σε ότι είναι συνυφασμένο με απτές συσκευές, δηλαδή φυσικά αντικείμενα διασυνδεδεμένα με υπολογιστές, θα δούμε πως υποδηλώνουν ένα μέλλον όπου οι αλληλεπιδράσεις με ψηφιακή πληροφορία “έρχονται” πίσω από το γυαλί ώστε να γίνουν πράγματα που κυριολεκτικά μπορούμε να πιάσουμε. Εδώ βέβαια προκύπτει και το εξής ερώτημα που θα αναλύσουμε αμέσως. Υπάρχει κάποια εξήγηση στο “γιατί” μπορούμε να επωφεληθούμε από αυτές τις απτές συσκευές ιδιαιτέρως εκεί όπου ο σκοπός μας είναι η ίδια η κατανόηση; Πριν απαντήσουμε σε αυτό το ερώτημα πρέπει να καταργήσουμε τον αστικό μύθο ότι η σκέψη προέρχεται αποκλειστικά από τον εγκέφαλο. Ο εγκέφαλος είναι ένα όργανο σκέψης, το οποίο δέχεται ένα εξωτερικό ερέθισμα ως είσοδο, επεξεργάζεται αυτό το ερέθισμα και κατευθύνει το σώμα να αντιδράσει. Στην ουσία έχουμε την διαδικασία, “σκέψη και μετά πράξη”. Αλλά, μία πρόσφατη και αναπτυσσόμενη άποψη της γνώσης απορρίπτει αυτή την έννοια του δυισμού του νου και σώματος. Ίσως τελικά σκεφτόμαστε ενώ πράττουμε. Ας πάρουμε ως παράδειγμα το παιχνίδι σκάκι. Πολλές φορές τυγχάνει να σηκώσουμε ένα πιόνι και να το μετακινήσουμε σε μία θέση μόνο και μόνο για να δούμε ποιο θα μπορούσε να είναι το αποτέλεσμα. Για όλες αυτές τις μετακινήσεις δεν υπάρχει πραγματική αλλαγή στο παιχνίδι, αλλά μας βοηθά να σκεφτούμε πρακτικά την κίνησή μας. Από αυτό συμπεραίνουμε ότι χρησιμοποιούμε το περιβάλλον μας για να επεκτείνουμε τις ικανότητες της σκέψης μας. Περιπλανώμενοι μεταξύ διαφορετικών επιλογών, είμαστε ικανοί να δούμε καθαρά πιθανά αποτελέσματα, δηλαδή η διαδικασία “σκέψη μέσω της πράξης”.
  • 9. 2.2 ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΩΣ ΔΙΕΠΑΦΗ Η ανάγκη του ανθρώπου για διάχυτη συνδεσιμότητα μας οδήγησε να ενσωματώσουμε στην ζωή μας το Διαδίκτυο, και να επιμείνουμε στο ότι όλοι οι χώροι που μπορεί να βρισκόμαστε μας συνδέουν με τις φορητές συσκευές μας όπου όλα τα περιβάλλοντα είναι διασυνδεδεμένα Internet - Enabled συσκευές “εισχωρούν” μέσα στους χώρους που κατοικούμε και μας ειδοποιούν για συνθήκες που αφορούν το φως, την ακτινοβολία, την ποιότητα του αέρα και την θερμοκρασία, την ανίχνευση εισβολέων και παραβιάσεων της ασφάλειας και μας επιτρέπουν να ανοίγουμε κλειδωμένες πόρτες απομακρυσμένα, χρησιμοποιώντας κινητές συσκευές. Καταλαβαίνουμε λοιπόν πως υπάρχει πληθώρα τρόπων αλληλεπιδράσεων, συγκέντρωση εκτενούς πληροφορίας, κατανόησης, διαβίβασης, χειρισμού και αποθήκευσης της πληροφορίας. Τέτοιοι τρόποι αλληλεπιδράσεων είναι οι εξής [4]: 1. Επίγνωση: τι μπορούμε να μετρήσουμε, τι μπορούμε να μάθουμε. Σε ένα θεμελιώδες επίπεδο, οι αισθητήρες ανιχνεύουν μία κατάσταση στο περιβάλλον και μπορούν να αναφέρουν την παρουσία ή κίνηση ενός ατόμου ή αντικειμένου σε κάποιο χώρο. Μπορούνε επίσης να ορίσουν την θερμοκρασία, την ένταση του φωτός, ή να ανιχνεύσουν υγρασία. Η επίγνωση, λοιπόν, μιας κατάστασης είναι θεμελιώδης βήμα που χρειάζεται για την αναφορά και την απόφαση. 2. Ανάλυση: με ποια χρήσιμη γνώση μπορούμε να συλλέξουμε από τα δεδομένα. Όταν ανιχνεύεται περιβαλλοντική κατάσταση, το διασυνδεδεμένο περιβάλλον μπορεί να επωφεληθεί από αυτή την πληροφορία χρησιμοποιώντας έναν προκαθορισμένο αλγόριθμο, ο οποίος οργανώνει τα δεδομένα για την κατάσταση κρίνοντας σχετικά με τις συνέπειες αυτής της κατάστασης. Αν π.χ. οι αισθητήρες αναφέρουν φως, ο αλγόριθμος μπορεί να συγκρίνει την συγκεκριμένη κατάσταση με δεδομένα από πρόσφατες καιρικές συνθήκες, την ώρα, ή την ηλιακή θέση. Ας δημιουργήσουμε την υπόθεση ότι είναι βράδυ, το γραφείο είναι κλειστό και στο γραφείο ξαφνικά εκπέμπει φως. Αυτό μπορεί να σημαίνει πως κάποιος εισήλθε απροσδόκητα
  • 10. στον χώρο. Ο τρόπος αλληλεπίδρασης της “Ανάλυσης” μπορεί να περιέχει πιο εξελιγμένους αλγόριθμους, λόγου χάρη να υπολογίζουν την ενέργεια που χρησιμοποιείται από το φως, ή την θερμότητα την οποία θα μπορούσε προβλέψιμα να παράγει. 3. Επικοινωνία: πως θα πρέπει να αναφερθεί η διορατικότητα του συστήματος. Η απόφαση που απορρέει από τον τρόπο αλληλεπίδρασης “Ανάλυση” θα ενεργοποιούσε τη αμέσως επόμενη στην αλληλουχία, την Επικοινωνία. Συνεχίζοντας το προηγούμενο παράδειγμα, αν ο φωτισμός δεν αναμένεται, η επόμενη αλληλεπίδραση είναι να σταλεί ένα μήνυμα ή να ενεργοποιηθεί συναγερμός σε ένα σύστημα, το οποίο επιβλέπει τη κατάσταση του περιβάλλοντος. Τα μηνύματα θα απευθύνονται σε ανθρώπους ή άλλες συσκευές. Ένα σύστημα από ενσωματωμένους αισθητήρες, εκτιμήσεις και καλή επικοινωνία μπορεί να σχεδιαστεί ώστε να παράγει ένα περίπλοκο σύνολο αποτελεσμάτων βάσει των καταστάσεων και των αντιδράσεων. 4. Πράξη: ποια πράξη μπορεί ένα σύστημα να εκκινήσει βασισμένο στην διορατικότητα Εκτός από την “Επικοινωνία”, χιλιάδες Πράξεις θα μπορούσαν να ενσωματωθούν σε ένα σύστημα αίτιου και αποτελέσματος. Τέτοιες πράξεις πιθανόν να έχουν αντίκτυπο στον χώρο στον οποίο παρατηρείται μία κατάσταση. Παραδείγματος χάρη, ένα αναπάντεχο φως μπορεί να αναλυθεί και να βρεθεί ότι παράγει εκτενή θερμότητα στο χώρο, το οποίο θα ενεργοποιούσε τις κουρτίνες για επανατοποθέτηση, ή το σύστημα κλιματισμού. 5. Σχόλια: πώς μπορούμε να αξιολογήσουμε τον αντίκτυπο και να αποκτήσουμε γνώση μέσα από αυτή την πράξη. Τελικά, ο εντοπισμός, η ανάλυση και ο “βρόχος” της πράξης φτάνει σε ένα σημείο όπου τα σχόλια , σε μια συστηματική κλίμακα, μπορούν να αποβούν χρήσιμα. Έπειτα από εκτενή παρατήρηση και ανάλυση, η αξιολόγηση δύναται να ορίσει ένα σχέδιο ώστε τα φώτα για ανοιγοκλείνουν περιοδικά. Κατάλληλες αποφάσεις θα μπορούσαν να παρθούν και πράξεις να υλοποιηθούν, βασισμένοι σε αυτή την πιο καθολική αξιολόγηση. Συνεχής αξιολόγηση και παρατεταμένη
  • 11. αλληλεπίδραση θα μπορούσε να βελτιώσει τη λήψη αποφάσεων και να προτείνει τις πιο κατάλληλες ενέργειες ώστε ο χώρος να βρίσκεται στην ιδανική κατάσταση. 6. Μνήμη: πως μπορούμε να διατηρήσουμε την γνώση για μετέπειτα πρόσβαση. Καθώς το σύστημα προχωρά μέσα στους κύκλους της αλληλεπίδρασης, θα υπάρξει κάποιο κόστος στην συντήρηση ενός αρχείου παρατηρήσεων και αλλαγών. Αποθηκεύοντας τις πληροφορίες και οργανώνοντας τα δεδομένα σε αλληλουχίες παρέχει έναν πόρο, ο οποίος μπορεί να αξιοποιηθεί για την βελτίωση της νοημοσύνης και της απόδοσης του συνολικού συστήματος καθώς εξελίσσεται. 2.3 ΕΠΙΠΕΔΑ ΑΝΑΖΗΤΗΣΗΣ Για όλους τους τρόπους αλληλεπίδρασης, τα τρία επίπεδα διερεύνησης περιγράφουν τους διαφορετικούς στόχους που έχουμε, για την κατανόηση ή την μετατροπή του κόσμου μέσω φυσικών ή ανθρωπίνων συστημάτων. Ως προγραμματιστές και σχεδιαστές εργαλείων, η επιθεώρηση των ευκαιριών μέσα από τον φακό των στόχων μας βοηθά στο να προτείνουμε την εξέχουσα αγορά για τα εργαλεία βασισμένοι στα διασυνδεδεμένα περιβάλλοντα. 1. Περιβαλλοντικό: πως μπορούμε να βελτιστοποιήσουμε και ελαχιστοποιήσουμε την χρήση των φυσικών πόρων για την δημιουργία καταλλήλων συνθηκών, συνδυάζοντας δεδομένα που έχουν συλλεχθεί από την παρακολούθηση μέσω εξωτερικών πηγών δεδομένων. 2. Συμπεριφοράς: πως μπορούμε να προβλέψουμε επιθυμητές συμπεριφορές, και αν μπορούμε να παρακολουθήσουμε την ανθρώπινη συμπεριφορά και να παραλλάξουμε τις συνθήκες βάσει της γνώσης των προτιμήσεών του. 3. Κοινωνικότητας: πως μπορούμε να παράγουμε μία βασισμένη-σε-δίκτυο επικοινωνία και δράση μέσω της κοινωνικής δικτύωσης και πως μπορούμε να παραλλάξουμε τις ρυθμίσεις για να συμβάλλουν στην ανάδραση με τους ανθρώπους.
  • 12. Συνοψίζοντας όλα τα παραπάνω σε έναν πίνακα θα έχουμε το εξής συμπυκνωμένο αποτέλεσμα [5]: Αλληλεπίδραση Αναζήτηση Επίγνωση Ανάλυση Επικοινωνία Πράξη Σχόλια Μνήμη Περιβαλλοντικό Αίσθηση επιπέδου θορύβου, Αλλαγές θερμοκρασίας Ανάλυση περιβαλλοντικής επίδοσης Αναφορές Τροποποίηση του συστήματος μέσω κάποιας διεπαφής Παροχή σχολίων στον αντίκτυπο της επίδοσης Αποθήκευση της μεθοδολογίας. Συμπεριφοράς Αίσθηση συμπεριφοράς και κίνησης. Ανάλυση συμπεριφοράς Αναφορές Ώθηση προτιμώμενης συμπεριφοράς Παροχή σχολίων στον αντίκτυπο της επίδοσης Αποθήκευση της μεθοδολογίας. Κοινωνικότητας Αίσθηση κοινωνικής συμπεριφοράς Ανάλυση του αντίκτυπου της κοινωνικής αλληλεπίδρασης Αναφορά σε αλληλεπιδράσεις κοινωνικών δικτύων. Ώθηση προτιμώμενης συμπεριφοράς Παροχή σχολίων στον αντίκτυπο της επίδοσης Αποθήκευση της μεθοδολογίας. Πίνακας 1: Συνδεδεμένα Περιβάλλοντα με τομή της αρχιτεκτονικής και των επιπέδων αναζήτησης, Designing for the Internet of Things, O’Reilly
  • 13. 2.4 ΠΕΡΙΓΡΑΦΗ ΤΟΥ UoM GREENHOUSE Λαμβάνοντας όλα τα παραπάνω δεδομένα, είναι πλέον ευκολότερο να μπορέσουμε να εξηγήσουμε το πρόβλημα που θα χρειαστεί να επιλύσουμε. Στην συγκεκριμένη περίπτωση, αναφέρομαι στην δημιουργία μίας μικρογραφίας ενός θερμοκηπίου, που φυσικά μπορεί να προσαρμοστεί στα πλαίσια ενός σε πραγματική κλίμακα, το οποίο θα μας πληροφορεί ανά πάσα στιγμή, για κάποιες συγκεκριμένες συνθήκες που επικρατούν σε αυτό και βάσει αυτών θα λαμβάνει κάποιες αποφάσεις για την βελτιστοποίησή του. Ειδικότερα θα χρησιμοποιήσουμε ένα αισθητήρα θερμοκρασίας και υγρασίας, ο οποίος θα λαμβάνει κάποιες τιμές-εισόδους, που θα αποσκοπούν στην ανάλυση τους ώστε να μεταβάλλεται βάσει των συνθηκών μας ένας ενεργοποιητής (actuator), που στην περίπτωσή μας θα είναι ένας λαμπτήρας LED, και θα ανάβει ή σβήνει ανάλογα με την θερμοκρασία στο περιβάλλον. Η αναβάθμιση σε ένα πραγματικών διαστάσεων θερμοκήπιο θα απαιτούσε αφενός κατασκευαστική προσπάθεια και αφετέρου μεγαλύτερη δαπάνη. Μια ολοκληρωμένη λύση θα απαιτούσε μηχανισμούς που σε περίπτωση χαμηλής θερμοκρασίας θα ενεργοποιούνταν το σύστημα θέρμανσης, όπου στην λύση μας το εξυπηρετεί ο λαμπτήρας LED, ενώ σε περίπτωση υψηλής θερμοκρασίας θα άνοιγαν κάποια τεχνητά στέγαστρα. Όσον αφορά την υγρασία τώρα, οι συνθήκες θα ρυθμίζονταν με την λειτουργεία ή μη ενός ψεκαστικού μηχανισμού. Η ιδέα όμως είναι να αντιληφθούμε πόσο πολλά μπορούμε να πραγματοποιήσουμε με τόσο λίγο εξοπλισμό εφόσον ο κορμός της εφαρμογής είναι λειτουργικός και μπορεί να επεκταθεί χωρίς δυσκολία σε λύσεις πραγματικών διαστάσεων. Ο εξοπλισμός που θα χρησιμοποιήσουμε κοστίζει γύρω στα 80 ευρώ και παρόλα αυτά μας επιτρέπει, μέσω και της τεχνολογίας, να δημιουργήσουμε ένα καθόλου ευκαταφρόνητο θερμοκήπιο με βασική γραφική διεπιφάνεια διαχείρισης. Χρησιμοποιώντας την πλατφόρμα του Eclipse, που μας προσφέρει την δυνατότητα να δημιουργήσουμε επεκτάσεις (plugins) για εφαρμογές ΙοΤ αλλά και ολόκληρα πακέτα ανάπτυξης (Deployment Packages), αφού πρώτα την ρυθμίσουμε κατάλληλα, θα μπορέσουμε να γράψουμε κώδικα που θα «αγκαλιάζει» την σύνδεση του αισθητήρα και του ενεργοποιητή με το διαδίκτυο ή το cloud, μεταφέροντας τα δεδομένα μέσω “ελαφριών” πρωτοκόλλων Παρομοίως, μετά από μία μικρή αναζήτηση στο hackster.io, η οποία είναι ένας ιστοχώρος Ανοιχτού Κώδικα που περιέχει διάφορα έργα (projects) σχετικά με την τεχνολογία ΙοΤ, μπορέσαμε να βρούμε μια λύση πάνω σε ένα αυτοδιαχειριζόμενο θερμοκήπιο, το οποίο όμως χρησιμοποιεί διαφορετική τεχνολογία από ότι θα χρησιμοποιήσουμε εμείς. Όταν λέω διαφορετική τεχνολογία, εννοώ διαφορετικό hardware, διαφορετικές εφαρμογές λογισμικού, καθώς και online υπηρεσίες. Στο συγκεκριμένο παράδειγμα χρησιμοποιήθηκε ένας μικροεπεξεργαστής της Intel, o Intel Edison, και οι υπηρεσίες της Amazon χρησιμοποιώντας γλώσσα προγραμματισμού Node.js (αυτή μπορεί να διαβάσει ο Intel Edison), η οποία
  • 14. ενδείκνυται για την δημιουργία εφαρμογών Ιστού από την πλευρά του διακομιστή. Εμείς από την πλευρά μας θα χρησιμοποιήσουμε τον μικροεπεξεργαστή της Raspberry, το Raspberry Pi 2 και τις υπηρεσίες της Eclipse χρησιμοποιώντας κώδικα Java για την διαχείριση των ασύγχρονων Ι/Ο. Σε αυτή την ενότητα όμως, μας ενδιαφέρει περισσότερο η αρχιτεκτονική που θα χρησιμοποιηθεί, η οποία παραμένει η ίδια και στην περίπτωση μας. Μελετώντας το αυτόδιαχειριζόμενο θερμοκήπιο καταλήγουμε στο συμπέρασμα ότι χρησιμοποιεί αυτή την λογική: i. Οι αισθητήρες και οι ενεργοποιητές, συνδέονται με τον μικροεπεξεργαστή Intel Edison. ii. O μικροεπεξεργαστής στέλνει τα δεδομένα και δέχεται τις εντολές από κέντρο ελέγχου που βρίσκεται στο cloud της Amazon. iii. Οι χρήστες μπορούν να παραμετροποιήσουν το έξυπνο θερμοκήπιο μέσω μιας διεπιφάνειας Ιστού ή μία εφαρμογή για smartphone/tablet. Φωτ. 2: Αρχιτεκτονική αυτό διαχειριζόμενου θερμοκηπίου, hackster.io Με την βοήθεια και του παραπάνω σχήματος μας είναι πλέον κατανοητός, ο κύκλος ζωής της ΙοΤ εφαρμογής. Συνοψίζοντας, ο μικροεπεξεργαστής Intel Edison «μαζεύει» τα δεδομένα μέσω των αισθητήρων που παρέχονται στο παράδειγμα και έπειτα χρησιμοποιεί την υπηρεσία cloud της Amazon ώστε να μπορέσει αφενός να λάβει τα δεδομένα που συλλέξαν οι αισθητήρες και να ενεργοποιήσει κάποια αντίδραση, π.χ. το άνοιγμα του ανεμιστήρα, και αφενός να μπορέσει να δημοσιοποιήσει αυτά τα δεδομένα σε διάφορα τερματικά, σε πραγματικό χρόνο.
  • 15. 3. Βασική Γνώση και Τεχνολογίες που χρησιμοποιήθηκαν APIs Ένα Application Programming Interface (API) είναι ένα σύνολο από εργαλεία και πρωτόκολλα για την ανάπτυξη εφαρμογών λογισμικού και όχι μόνο. Ένα χρήσιμο API δηλαδή διευκολύνει έναν προγραμματιστή να συνθέσει μια εφαρμογή, παρέχοντας του τα δομικά της στοιχεία. Αυτό μπορεί να αναφέρεται σε συστήματα βασισμένα σε υπηρεσίες Ιστού, σε λειτουργικά συστήματα ή σε συστήματα βάσεων δεδομένων και έρχεται σε μορφή βιβλιοθηκών που περιέχουν κάποιες προδιαγραφές για δομές δεδομένων, κλάσεις αντικειμένων κτλ.
  • 16. OSGi Framework Ο σκελετός OSGi αναφέρεται σε μία Open Services Gateway initiative η οποία είναι ένα σύνολο από προσδιορισμούς που δηλώνουν μία δυναμική συνιστώσα υπηρεσιών για την Java. Αυτοί οι προσδιορισμοί επιτρέπουν την δημιουργία ενός μοντέλου ανάπτυξης, όπου οι εφαρμογές συνθέτονται δυναμικά από πολλά και διαφορετικά επαναχρησιμοποιήσιμα στοιχεία. Οι εφαρμογές ή τα στοιχεία, που έρχονται σε μορφή “bundles for deployment”, μπορούν να εγκατασταθούν, ξεκινήσουν, σταματήσουν, ενημερωθούν και να απεγκατασταθούν απομακρυσμένα χωρίς να χρειαστεί κάποια επανεκκίνηση. Αν μπορούσαμε να το απεικονίσουμε σε ένα τμηματικό μοντέλο, αυτό θα ήταν: Φωτ. 3: Τμηματικό Μοντέλο OSGi, OSGi Alliance ● Bundles – συστατικά του OSGi που δημιουργούνται από τους προγραμματιστές ● Services – οι υπηρεσίες συνδέουν τα bundles με έναν δυναμικό τρόπο προσφέροντας ένα μοντέλο δημοσίευσης – εύρεσης – σύνδεσης για αντικείμενα Java ● Life Cycle – Το API για την εγκατάσταση, εκκίνηση, τερματισμό, ενημέρωση και απεγκατάσταση των bundles. ● Modules – ενότητες για τον προσδιορισμό της εισαγωγής και εξαγωγής κώδικα από ένα bundle. ● Security – υπεύθυνο για θέματα ασφαλείας ● Execution Environment – περιβάλλον για τον προσδιορισμό των μεθόδων και των κλάσεων που είναι διαθέσιμες σε κάποια συγκεκριμένη πλατφόρμα. [6]
  • 17. Bundles Τα συγκεκριμένα συστατικά, είναι μία ομάδα από κλάσεις Java (αρχεία jar), εξοπλισμένες με ένα αρχείο τύπου MANIFEST.MF, όπου βρίσκονται και όλες οι λεπτομέρειες για τα περιεχόμενά τους καθώς και για τον κύκλο ζωής τους, όπως βλέπουμε και στο παρακάτω σχήμα Φωτ. 4: Κύκλος ζωής bundles, Wikipedia:Bundles Η κύρια χρήση τους είναι η δυνατότητα που παρέχουν σε μία ομάδα από κλάσεις Java, ώστε να είναι συνολικά πιο πολύπλοκη η συμπεριφορά ενός στοιχείου OSGi. Kura & Kura API Η ανάπτυξη και ρύθμιση μίας συσκευής, ώστε να λειτουργεί ως κόμβος στο Internet Of Things είναι σχετικά εύκολη. Το να γίνει όμως το ίδιο για πολλές συσκευές δεν είναι κάτι το τόσο εύκολο. Εδώ έρχεται να μας βοηθήσει το νέο πρόγραμμα της Eclipse, το Kura. Το Kura μαζί τα Kura APIs προσφέρει είσοδο στο υποκείμενο hardware, στην διαχείριση των ρυθμίσεων δικτύου, στην επικοινωνία με πλατφόρμες ενσωμάτωσης συσκευών καθώς και στην διαχείριση των πυλών εισόδου. Στην ουσία το Kura προσφέρει μία πλατφόρμα η οποία υπάρχει στο όριο μεταξύ του ιδιωτικού δικτύου της συσκευής μας και του τοπικού δικτύου ή του δημόσιου διαδικτύου παρέχοντας μία διαχειρίσιμη πύλη εισόδου για αυτό το όριο, ικανό να τρέχει εφαρμογές που συλλέγουν πληροφορίες και να τις διαμοιράζει με ασφάλεια στο cloud ή στον μεσάζων (broker) που έχουμε ορίσει εμείς. [7]
  • 18. M2M Platform: Everyware Cloud To Everyware Cloud της Eurotech είναι μία πλατφόρμα ενσωμάτωσης Μηχανή- προς-Μηχανή (M2M), όπως φαίνεται και στο παρακάτω σχήμα, που απλοποιεί την διαχείριση της συσκευής και των δεδομένων, συνδέοντας κατανεμημένες συσκευές μέσω ασφαλών υπηρεσιών cloud. [15] Φωτ. 5: Διάγραμμα σύνδεσης συσκευών και αισθητήρων στο cloud της Eurotech, M2M Eurotech Paho MQTT Χρησιμοποιώντας την βιβλιοθήκη Paho MQTT (πρωτόκολλο MQ Telemetry Transport), το Kura παρέχει μία υπηρεσία αποθήκευσης-και-προώθησης (store- and-forward) για τις εφαρμογές που παίρνουν την πληροφορία από τις τοπικά συνδεδεμένες συσκευές ή τις συσκευές που είναι συνδεδεμένες μέσω ενός δικτύου, στέλνοντας αυτά τα δεδομένα σε μεσάζοντες (brokers) MQTT και άλλες υπηρεσίες cloud, όπως το Everyware Cloud. Ένας μεσάζων στο δικό μας παράδειγμα θα είναι η ανοιχτή θύρα στο “tcp://iot.eclipse.org:1883”. [8]
  • 19. CoAP API Τα αρχικά προέρχονται από το Constrained Application Protocol και είναι ένα πρωτόκολλο που έχει σκοπό να χρησιμοποιηθεί σε πολύ απλές ηλεκτρονικές συσκευές και να τους επιτρέψει να επικοινωνήσουν δυναμικά μέσω του διαδικτύου. Στην ουσία είναι ένα πρωτόκολλο μεταφοράς όπως και το HTTP με την εξής μεγάλη διαφορά: Τα πακέτα του CoAP, ακριβώς επειδή είναι προσαρμοσμένα σε συνδεδεμένες συσκευές ή αισθητήρες με λίγη μνήμη και χαμηλή δυνατότητα τροφοδοσίας, είναι πολύ μικρότερα από τα αντίστοιχα πακέτα HTTP και TCP. Αντίστοιχα περιορισμένες είναι και οι ροές ελέγχου του πρωτοκόλλου. Αυτό έχει ως αποτέλεσμα το CoAΡ να εκτελείται πάνω από πρωτόκολλο UDP και όχι TCP, δηλαδή ένα connectionless πρωτόκολλο που είναι καλύτερα προσαρμοσμένο στις ανάγκες του IoT μιας και το συγκεκριμένο στέλνει πακέτα από ένα πρόγραμμα σε κάποιο άλλο και αυτό σημαίνει το τέλος της συνεργασίας τους. Επιτυγχάνεται δηλαδή η γρήγορη και αποδοτική σύνδεση. [9] I2C Protocol Το συγκεκριμένο (Inter-Integrated Circuit) σειριακό πρωτόκολλο είναι υπεύθυνο για την σύνδεση περιφερειακών συσκευών και αισθητήρων με χαμηλή ταχύτητα στα ενσωματωμένα συστήματα. Φωτ. 6: Δίαυλοι Επικοινωνίας I2C, www.byteparadigm.com Βλέπουμε πως το I2C χρησιμοποιεί δύο διαύλους: το SCL (Serial Clock) και το SDA (Serial Data) τα οποία συνδέονται με μία αντίσταση (Rp) στην τάση(+Vdd). Για να γίνει η επικοινωνία μέσω του I2C, χρησιμοποιούνται 8 bits για την μεταφορά. Κάθε slave συσκευή έχει μία διεύθυνση 7-bits η οποία πρέπει να είναι μοναδική στον δίαυλο. Αυτή αντιπροσωπεύει τα bits 7 μέχρι 1, ενώ το bit 0 χρησιμοποιείται για να
  • 20. αποδώσει το READ ή WRITE από και προς την συσκευή. Αν δηλαδή το bit “0” έχει καθοριστεί να έχει την τιμή 1 τότε η master συσκευή θα διαβάσει από την slave I2C συσκευή. To Ι2C μπορεί να χρησιμοποιήσει αργούς μικροεπεξεργαστές με ακροδέκτες GPIOs (General Purpose Input Outputs) μιας και θέλει μόνο να δημιουργήσει Start and Stop καταστάσεις για να στείλει και λάβει εντολές. Έτσι το πρωτόκολλο μπορεί να έχει τις εξής καταστάσεις: Φωτ. 7: Καταστάσεις Πρωτοκόλλου I2C, www.robot-electronics.co.uk Σε μία φυσιολογική κατάσταση οι SCL και SDA είναι high και έτσι η επικοινωνία ξεκινά από την master συσκευή. Έπειτα ενεργοποιείται η κατάσταση Start (S) ακολουθούμενη από την διεύθυνση της slave συσκευής Β1. Αν τότε το bit 0 από το byte διεύθυνσης έχει την τιμή 0, η master συσκευή θα γράψει στην slave συσκευή Β2. Αν από την άλλη πάρει την τιμή 1, το επόμενο byte θα εγγραφεί από την slave συσκευή. Όταν όλα τα bytes γράψουν ή εγγραφούν (Βn), τότε η master συσκευή ενεργοποιεί την Stop κατάσταση (P) και πλέον ο συγκεκριμένος δίαυλος μπορεί να χρησιμοποιηθεί από άλλη συσκευή. [10] SSH Το SSH, ή αλλιώς Secure Shell (Ασφαλές Κέλυφος), είναι μία ευρύτατα χρησιμοποιούμενη εφαρμογή για ασφαλή επικοινωνία στο διαδίκτυο. Κάθε φορά που στέλνονται δεδομένα από κάποιον υπολογιστή στο δίκτυο, το SSH το κρυπτογραφεί αυτομάτως. Παρομοίως, όταν τα δεδομένα φτάσουν στον αποδέκτη, το SSH αυτομάτως τα αποκρυπτογραφεί. Το αποτέλεσμα είναι η διαφανής κρυπτογράφηση, δηλαδή οι χρήστες δρουν κανονικά, χωρίς να γνωρίζουν ότι οι επικοινωνίες τους κρυπτογραφούνται με ασφάλεια στο δίκτυο. Το SSH χρησιμοποιεί μία αρχιτεκτονική πελάτη-διακομιστή, όπως φαίνεται και στο παρακάτω σχήμα, όπου ένας διακομιστής SSH, δέχεται ή απορρίπτει εισερχόμενες συνδέσεις στον υπολογιστή που τον φιλοξενεί. Οι χρήστες, ως SSH πελάτες, κάνουν αιτήσεις από άλλους υπολογιστές στον διακομιστή του τύπου “Log me in”, “Send me a file”, “Execute this command”. Όλες οι επικοινωνίες μεταξύ των πελατών και
  • 21. των διακομιστών είναι κρυπτογραφημένα με ασφάλεια και προστατεύονται από τροποποιήσεις. [18] Φωτ. 8: Διάγραμμα διακομιστή-πελάτη SSH, SSH, The Secure Shell Dependencies Κάθε φορά που μια κλάση Χ χρησιμοποιεί μία άλλη κλάση ή μια διεπιφάνεια Υ, τότε η Χ εξαρτάται από την Υ. Η Χ δεν μπορεί να τρέξει χωρίς την Υ και δεν μπορεί να επαναχρησιμοποιηθεί χωρίς να επαναχρησιμοποιήσει την Υ. Σε αυτή την περίπτωση η κλάση Χ είναι η εξαρτημένη και η κλάση ή διεπιφάνεια Υ ονομάζεται “dependency”χωρίς αυτό να είναι αμφίδρομο!
  • 22. 4. Περιγραφή της προτεινόμενης λύσης 4.1 ΡΥΘΜΙΣΗ ΠΛΑΤΦΟΡΜΑΣ [11] Η προετοιμασία για την δημιουργία μιας IoT εφαρμογής προϋποθέτει την σωστή εγκατάσταση διάφορων πλατφόρμων και plugins. Τα πρωταρχικά βήματα ,λοιπόν, για να ρυθμίσουμε το περιβάλλον ανάπτυξης του Kura είναι τα εξής τρία: ● JVM (Java JDK SE 8 ή η τρέχουσα έκδοση) ● Eclipse IDE ● Kura Workspace Setup Το περιβάλλον ανάπτυξης του Kura μπορεί να εγκατασταθεί σε Windows, Mac OS, καθώς και σε Linux, η οποία εγκατάσταση μπορεί να διαφέρει ελάχιστα όσον αφορά τα ιδιαίτερα χαρακτηριστικά του εκάστοτε λογισμικού. Εγκατάσταση JVM Το μόνο που χρειάζεται να κάνουμε είναι να μπούμε στο site της Oracle και να κατεβάσουμε και εγκαταστήσουμε το JDK SE 8 στο παρακάτω σύνδεσμο βάσει του λογισμικού που χρησιμοποιούμε: JDK SE 8u65. ECLIPSE IDE Το ECLIPSE IDE είναι ένα εργαλείο ανάπτυξης ανοιχτού κώδικα το οποίο αποτελείται από ένα αναβαθμισμένο περιβάλλον ανάπτυξης, IDE δηλαδή, και από ένα σύστημα “plug-in” για να διαχειρίζεται επεκτάσεις. ΠΟΛΥ ΣΗΜΑΝΤΙΚΟ είναι να διαλέξουμε αρχικά προσεκτικά την διεύθυνση τοποθεσίας του περιβάλλοντος εργασίας του Eclipse. Και αυτό διότι εφόσον εγκατασταθεί και δημιουργηθούν τα περιβάλλοντα εργασίας του, δεν πρέπει ΠΟΤΕ να μετακινηθούν σε άλλη διεύθυνση. Ξεκινώντας, θα χρειαστεί να κατεβάσουμε την τρέχουσα έκδοση του Eclipse IDE for Java EE Developers για το εκάστοτε λειτουργικό σύστημα (στην προκειμένη περίπτωση χρησιμοποιώ Windows 10) από το παρακάτω σύνδεσμο: Eclipse IDE.
  • 23. Έπειτα, έχοντας κατεβάσει το συμπιεσμένο αρχείο του Eclipse, πρέπει να το αποσυμπιέσουμε στην διεύθυνση εγκατάστασης του Eclipse. Στην δικιά μου περίπτωση το έκανα εξαγωγή στην διεύθυνση των “εγγράφων”, C:UsersBonafideDocumentseclipse. Φωτ. 9: Εξαγωγή του Eclipse στα έγγραφα Εγκατάσταση του mToolkit Ένα επιπλέον plugin, το mToolkit, χρειάζεται για να επιτρέψει την απομακρυσμένη σύνδεση σε έναν “σκελετό” Open Services Gateway initiative , σε μια συσκευή που λειτουργεί με το Kura. Για να εγκαταστήσουμε το mToolkit στο περιβάλλον του Eclipse, πρέπει να διεκπεραιώσουμε τα επόμενα βήματα: ● Κατεβάζουμε το mToolkit plugin σε “archive format” από αυτόν τον σύνδεσμο: mToolkit 3.1 Stable. ● Δημιουργούμε μία mToolkit διεύθυνση κάτω από την διεύθυνση “dropin” όπου έχουμε εγκαταστήσει το Eclipse (…..eclipsedropinsmToolkit) ● Αντιγράφουμε το συμπιεσμένο αρχείο στην νέα μας διεύθυνση και εξάγουμε το περιεχόμενο του στον φάκελο mToolkit, ώστε στο τέλος να υπάρχει μία μορφή του τύπου: C:UsersBonafideDocumentseclipsedropinsmToolkiteclipsefeatures και C:UsersBonafideDocumentseclipsedropinsmToolkiteclipseplugins
  • 24. Αν έχουμε ορθώς εγκαταστήσει το plugin τότε θεωρητικά στην καρτέλα Window|ShowView|Other, θα πρέπει να υπάρχει η επιλογή mToolkit|Frameworks Φωτ. 10: Εισαγωγή του plugin mToolkit στο Eclipse Δημιουργία Περιβάλλοντος Εργασίας Εκτελώντας το Eclipse για πρώτη φορά θα μας δοθεί η δυνατότητα να επιλέξουμε το περιβάλλον εργασίας μας, το οποίο συνήθως περιέχει όλο τον κώδικα Java, τα projects και τα πακέτα (bundles). Επιλέγουμε λοιπόν το περιβάλλον μας όπως φαίνεται και εδώ Φωτ. 11: Επιλογή Περιβάλλοντος Εργασίας στο Eclipse
  • 25. Και ΞΕΚΙΝΑΜΕ! Αν θέλουμε για κάποιο λόγο να δημιουργήσουμε ή να ανοίξουμε διαφορετικό περιβάλλον, αυτό θα γίνει μέσω του File|Switch Workspace|Other. 4.2 Εισάγοντας το Kura στο περιβάλλον χρήστη Αρχικά, για να δημιουργήσουμε το περιβάλλον για το project Kura, θα χρειαστεί να κατεβάσουμε το “Kura User Workspace archive” από την επίσημη ιστοσελίδα του. Έπειτα, από το Eclipse File menu, θα επιλέξουμε την επιλογή “Import”, και επεκτείνοντας την καρτέλα “General”, θα επιλέξουμε το “Existing Projects into Workspace” και θα προχωρήσουμε με το “Next”. Φωτ. 12: Προετοιμασία για εισαγωγή του Kura στο Eclipse Εν συνεχεία επιλέγοντας το κουμπί “Select archive file option”, και βρίσκοντας το συμπιεσμένο αρχείο που έχουμε ήδη κατεβάσει, που θα είναι της της μορφής “user_workspace_archive_(CURRENT EDITION).zip , θα έχουμε σχεδόν τελειώσει με την εισαγωγή των Kura projects.
  • 26. Φωτ. 13: Εισαγωγή του Kura στο Eclipse Αυτή την στιγμή θα αντιληφθούμε ότι έχουν ανοίξει τέσσερα διαφορετικά projects στον Project Explorer: 1. Org.eclipse.kura.api: Αυτό είναι το κυρίως Kura API. 2. Org.eclipse.kura.demo.heater: Αυτό είναι ένα υπόδειγμα project που μπορούμε να χρησιμοποιήσουμε ως σημείο εκκίνησης για την δημιουργία του δικού μας πακέτου(bundle). 3. Org.eclipse.kura.emulator: Αυτό είναι το project - προσομοιωτής για να τρέξουμε το Kura στο Eclipse (σε Linux/Mac ΜΟΝΟ) 4. Target-definition: Αυτό είναι ένα σύνολο από απαραίτητα πακέτα (bundles) και εξαρτήσεις (dependencies) των APIs και του Kura. Το Eclipse θα αναφέρει σε αυτό το σημείο κάποια λάθη. Για να τα διορθώσουμε, θα εργαστούμε ως εξής: Θα επιλέξουμε το “target-definition project” στο περιβάλλον εργασίας μας και θα κάνουμε διπλό κλικ στο kura-equinox_3.8.1.target για να το ανοίξουμε.
  • 27. Φωτ. 14: Επαναφορά της πλατφόρμας-στόχου Στο παράθυρο που θα μας εμφανίσει, θα επιλέξουμε στον σύνδεσμο “Set as Target Platform”. Με αυτή μας την κίνηση θα επαναφέρουμε την πλατφόρμα-στόχο ( target-platform), θα χτίσουμε από την αρχή τα Kura projects, και θα καθαρίσουμε τα λάθη που μας παρουσιάστηκαν. Πλέον είμαστε ΕΤΟΙΜΟΙ για να ξεκινήσουμε να αναπτύσσουμε Kura-βασισμένες εφαρμογές για την πλατφόρμα-στόχο μας. 4.3 OSGi Project με το Kura Πλέον έχουμε στήσει το περιβάλλον για να δουλέψει το Kura στο Eclipse IDE και μπορούμε να δούμε πως θα δημιουργήσουμε ένα απλό Kura OSGi Project με το Eclipse. Με αυτό το παράδειγμα, θα πρέπει να μάθουμε πώς να χειριζόμαστε τις παρακάτω διαδικασίες: ● Δημιουργία ενός plugin project, ● Κατανάλωση της υπηρεσίας Kura Logger, ● Ανάπτυξη ενός OSGi Activator, ● Εξαγωγή ενός μοναδικού OSGi πακέτου (plugin), ● Δημιουργία ενός Deployment πακέτου. Στο Eclipse, δημιουργούμε ένα νέο Plug-in Project επιλέγοντας το File|New|Project και έπειτα Plug-in Development|Plug-in Project .
  • 28. Φωτ. 15: Δημιουργία ενός νέου plugin project Στο επόμενο παράθυρο που θα εμφανιστεί θα εισάγουμε το όνομα του project μας, π.χ. στο παράδειγμά μας θα το ονομάσουμε “org.eclipse.kura.example.hello_osgi”. Κάτω από το πεδίο “Target Platform”, είναι σημαντικό να επιλέξουμε το κουμπί “an OSGi framework”, και να ρυθμίσουμε την μεταβλητή ως “standard”. Φωτ. 16: Ρύθμιση του plugin project
  • 29. Εν συνεχεία, στο επόμενο, παράθυρο, στο πεδίο “Name” θα επιλέξουμε μία περιγραφική ονομασία , όπως Hello World Example, θα δούμε ότι η JVM έκδοση είναι η ίδια με την συσκευή – στόχο μας , στην προκειμένη JavaSE-1.8, και θα απενεργοποιήσουμε την επιλογή “Generate an activator, a Java class that controls the plug-in’s life cycle”, για λόγους του συγκεκριμένου παραδείγματος, διότι θα χρησιμοποιήσουμε μόνο μία κλάση, με την οποία θα εκκινούμε αλλά και τερματίζουμε όλα τα πακέτα μας. Ήδη πρέπει να βλέπουμε το project που δημιουργήσαμε και με την ονομασία που του δώσαμε, καθώς και κάποια αρχεία που δημιουργήθηκαν αυτόματα, όπως το MANIFEST.MF και το OSGi πακέτο , το οποίο είναι ένα κανονικό Java .jar αρχείο που περιέχει κώδικα Java, πηγές (resources) , ένα custom Manifest και έναν Activator. Εισαγωγή Dependencies στο Manifest Αρχικά, θα χρησιμοποιήσουμε τον συντάκτη του Manifest στο Eclipse για να προσθέσουμε μερικά dependencies. Φωτ. 17: Διαχείριση Εξαρτήσεων στο Eclipse Όπως βλέπουμε και στο παραπάνω screenshot, από την καρτέλα “Dependencies”, θα βρούμε το “Automated management of Dependencies”, και θα προσθέσουμε το εξής plugin για OSGi υπηρεσίες (org.eclipse.osgi.services). Βλέπουμε πως η διαδικασία που κάνουμε μοιάζει αρκετά με αυτή της πρόσθεσης των μεμονωμένων jars στο μονοπάτι του project, με την διαφορά πως σε αυτή την περίπτωση , λέμε εμείς στο Eclipse που να βρει τα dependencies με τον “OSGi τρόπο”, ώστε να γνωρίζει εκ των προτέρων τον χρόνο που θα χρειαστεί για να κάνει compile.
  • 30. Φωτ. 18: Εισαγωγή plugin για OSGi υπηρεσίες Στην συνέχεια με τον ίδιο ακριβώς τρόπο θα προσθέσουμε και το slf4j.api, ένα APΙ που επιτρέπει στον τελικό-χρήση να συνδέσει το επιθυμητό πλαίσιο καταγραφής σφαλμάτων σε όποιο επίπεδο θέλει ο ίδιος, τα οποία επίπεδα θα αναφερθούν εν συνεχεία. Δημιουργία Java Κλάσης Έχοντας τελειώσει με την “προθέρμανση” και την ρύθμιση κάποιων βασικών παραμέτρων, πλέον είμαστε έτοιμοι να γράψουμε μια απλή Java κλάση. Θα εφαρμόσουμε ότι γνωρίζουμε για την δημιουργία μιας νέας κλάσης με τον συνήθη τρόπο, δηλαδή θα δημιουργήσουμε μια νέα κλάση “HelloOsgi” στο project “org.eclipse.kura.example.hello_osgi”.
  • 31. Φωτ. 19: Δημιουργία νέας κλάσης Java για OSGi Στη συνέχεια θα βάλουμε στην νέα μας κλάση το κώδικα που θα δανειστούμε από ένα παράδειγμα κώδικα στο επίσημο site της Kura: HelloOSGi package org.eclipse.kura.example.hello_osgi; public class HelloOsgi { private static final Logger s_logger = LoggerFactory.getLogger(HelloOsgi.class); private static final String APP_ID = "org.eclipse.kura.example.hello_osgi"; protected void activate(ComponentContext componentContext) { s_logger.info("Bundle " + APP_ID + " has started!"); s_logger.debug(APP_ID + ": This is a debug message."); } protected void deactivate(ComponentContext componentContext) { s_logger.info("Bundle " + APP_ID + " has stopped!"); } } Πίνακας 2: Κλάση Java HelloOsgi
  • 32. Η μέθοδος activate() είναι το σημείο εισόδου κατά την εκκίνηση του πακέτου. Από την άλλη η μέθοδος deactivate() είναι το σημείο εισόδου όταν το πακέτο τερματίζει. Ας παρατηρήσουμε τώρα την χρήση της private LoggerFactory.getLogger() μεθόδου. Αν η συγκεκριμένη μέθοδος τρέχει στον σκελετό του OSGi και έχει εκκινήσει το hello_osgi πακέτο, τότε καλείται η activate() μέθοδος και μπορούμε απλά να έχουμε πρόσβαση στην υπηρεσία καλώντας την μέθοδο getLogger(). Εδώ πρέπει να τονίσουμε ότι τα επίπεδα σφαλμάτων debugging της μεθόδου Logger έχουν την εξής ιεραρχία: ● ERROR – χρειάζεται προσοχή από τον διαχειριστή του συστήματος. ● WARNING – μία κατάσταση πρέπει να ελεγχθεί και ίσως να χρειάζεται μια ενέργεια πριν το λάθος παρέμβει. ● INFO – αναφορά ενός φυσιολογικού συμβάντος ● DEBUG – χρησιμοποιείται κυρίως για επίλυση προβλημάτων καθώς και έλεγχο της απόδοσης του κώδικα ● TRACE – πιο λεπτομερής έξοδος για διαγνωστικούς σκοπούς Κανονικοποίηση των Dependencies Σε αυτό το σημείο, υπάρχουν ήδη κάποια λάθη στον κώδικα μας για κάποιους αδιευκρίνιστους λόγους έως τώρα. Για να τα ξεδιαλύνουμε, θα επιλέξουμε από το μενού Source|Organize Imports και θα εισάγουμε τον slf4j Logger. Φωτ. 20: Εισαγωγή του slf4j Logger για καθαρισμό λαθών
  • 33. Εφαρμόζοντας αυτά τα βήματα , θα δούμε πως πλέον ο κώδικάς μας θα είναι “καθαρός” από λάθη. Μία τελευταία ενέργεια πριν προχωρήσουμε στο επόμενο βήμα, είναι επιστρέψουμε πάλι πίσω στο Manifest Editor, να βεβαιωθούμε ότι έχουμε επιλεγμένο το Import-Package και να αποθηκεύσουμε τις αλλαγές στο Manifest πατώντας τον “add dependencies” σύνδεσμο για να προστεθούν αυτόματα τα πακέτα στην λίστα των dependencies. Δημιουργία της κλάσης Component Αντίστοιχα με πριν, θα δημιουργήσουμε την κλάση ακολουθώντας την διαδικασία New|Other έπειτα Plug-in Development|Component Definition και θα προχωρήσουμε. Φωτ. 21: Δημιουργία κλάσης Component Στην συνέχεια θα κάνουμε αναζήτηση μέσω του “Browse” και θα εισάγουμε ως κλάση Component αυτή που πριν λίγο δημιουργήσαμε, δηλαδή την HelloOsgi.
  • 34. Φωτ. 22: Μετατροπή της κλάσης HelloOsgi ως κλάση Component και προχωρώντας στην διαδικασία θα προσθέσουμε στο “select parent folder field” τον όρο “/OSGI-INF” για πρακτικούς λόγους που θα δούμε στην συνέχεια. Φωτ. 23: Παραμετροποίηση της έννοιας Component Αφού δημιουργήσαμε την Component κλάση, θα εμφανιστεί στην επιφάνεια εργασίας του Eclipse το αρχείο XML της, το οποίο πρέπει να το ρυθμίσουμε ώστε το Όνομα και η Κλάση να βλέπουν στην Java κλάση μας, πράγμα που πρέπει ήδη να είναι αυτόματα ρυθμισμένο, καθώς και να θέσουμε τα πεδία Activate και
  • 35. Deactivate στις αντίστοιχες μεθόδους που δημιουργήσαμε στην κλάση HelloOsgi (activate, deactivate) ώστε να γνωρίζει το component που βρίσκονται αυτές οι OSGi κλάσεις ενεργοποίησης. Ανάπτυξη του Plug-in Στα επόμενα 2 τμήματα θα περιγράψουμε την δημιουργία ενός μεμονωμένου αρχείου JAR ως ένα αναπτυσσόμενο OSGi plug-in και ενός πακέτου ανάπτυξης (Deployment Package) με δυνατότητα εγκατάστασης. Ένα OSGi πακέτο(bundle) είναι ένα αρχείο φακέλου της Java με κώδικα Java, πηγές και ένα Manifest. Από την άλλη ένα πακέτο ανάπτυξης είναι ένα σύνολο από πηγές, κατηγοριοποιημένες σε ένα μόνο πακέτο, το οποίο μπορεί να αναπτυχθεί σε OSGi σκελετό μέσω την υπηρεσίας “Deployment Admin” και μπορεί να περιέχει ένα ή περισσότερα πακέτα, αντικείμενα διαχείρισης κτλ. Εξαγωγή του OSGi πακέτου Το πακέτο μας, όπως είπαμε, μπορεί να χτιστεί ως ένα μεμονωμένο OSGi plug-in. Για να γίνει αυτό θα χρειαστεί να κάνουμε δεξί-κλικ στο project και να επιλέξουμε το “Export”. Αυτό είναι το αντίστοιχο του compilation για το project. Από το εμφανιζόμενο παράθυρο θα επιλέξουμε Plug-in Development |Deployable plug-ins and fragments. Κάτω από το παράθυρο που ανοίξαμε, πρέπει να βεβαιωθούμε ότι είναι επιλεγμένο το νεο-δημιουργηθεν plug-in και επίσης πρέπει να επιλέξουμε και μία διεύθυνση όπου θα αποθηκεύσουμε το JAR αρχείο την οποία πρέπει να θυμόμαστε. Φωτ. 24: Compile του plugin
  • 36. 4.4 Δημιουργία ενός πακέτου Ανάπτυξης (Deployment Package) Από το να δημιουργούμε συνεχώς μεμονωμένα plug-ins, μπορούμε επίσης να δημιουργήσουμε ένα Πακέτο Ανάπτυξης που περιέχει πολλαπλά πακέτα, τα οποία μπορούν να αναπτυχθούν σε ένα OSGi σκελετό. Σε αυτό το παράδειγμα, απλώς θα δημιουργήσουμε ένα Deployment Package που θα περιέχει το “hello_osgi” πακέτο. Να τονίσουμε πως αυτό το βήμα χρειάζεται το mToolkit να είναι εγκατεστημένο, για το οποίο μιλήσαμε παραπάνω. Ξεκινώντας θα επιλέξουμε New| Folder και θα επιλέξουμε το hello_osgi project με όνομα φακέλου “resources”. Φωτ. 25: Επιλογή του HelloOsgi project για δημιουργία ενός πακέτου ανάπτυξης Έπειτα θα κάνουμε το ίδιο, δημιουργώντας έναν φάκελο ”dp” κάτω από το φάκελο “resources”, για την αποθήκευση του Deployment Package. Συνεχίζοντας θα επιλέξουμε File | New | Other -> OSGi | Deployment package Definition. Πρέπει να βεβαιωθούμε ότι ο Target Folder θα δείχνει στον “dp” φάκελο που δημιουργήσαμε και ότι το όνομα θα έχει να κάνει με το όνομα του
  • 37. project, εδώ “hello_osgi”. Φωτ. 26: Παραμετροποίηση του πακέτου ανάπτυξης Αυτό που δημιουργήσαμε μόλις είναι ένα project .dpp το οποίο παρέχει πληροφορίες που χρειάζονται για την δημιουργία του Πακέτου Ανάπτυξης, όπως η διεύθυνση εξόδου του, το αρχείο ant build κτλ. Τώρα θα επιλέξουμε την καρτέλα “Bundle” και θα δημιουργήσουμε ένα νέο Bundle με την διεύθυνση είτε του project είτε του JAR που δημιουργήσαμε πριν. Φωτ. 27: Δημιουργία ενός bundle για το πακέτο ανάπτυξης Εν συνεχεία, εφόσον σώσουμε τις αλλαγές, θα κάνουμε δεξί κλικ στο .dpp αρχείο μας και θα επιλέξουμε “Quick Build”, με την οποία πράξη θα δημιουργηθεί ένα νέο .dp αρχείο στην ίδια διεύθυνση. Αυτό, εν τέλει, είναι το τελικό Πακέτο Ανάπτυξης , το οποίο μπορεί να εγκατασταθεί σε ένα απομακρυσμένο σύστημα – στόχο. Με την
  • 38. ίδια τεχνική θα μπορέσουμε να δημιουργήσουμε και επεξεργαστούμε το πακέτο ανάπτυξης για το UoM Greenhouse, και να το εισάγουμε στο Kura ώστε να μπορεί να επικοινωνήσει με τον μικροεπεξεργαστή Raspberry Pi. Στην τελική ανάλυση, αυτό που πέτυχαμε στο παραπάνω παράδειγμα ήταν να εγκλιματιστούμε λίγο με την επιρροή του Kura στο Eclipse IDE και να δημιουργήσουμε ένα καινούριο πακέτο (bundle) από την αρχή, να συντάξουμε κώδικα Java με τον Activator του, να τροποποιήσουμε το Manifest κατά τον τρόπο που μας εξυπηρετεί και να χτίσουμε το plug-in και/ή το Πακέτο Ανάπτυξης που μπορεί να χρησιμοποιηθεί στο περιβάλλον του Kura. Στην ουσία το έξυπνο θερμοκήπιο που θα δημιουργήσουμε θα στηρίζεται σε ένα Deployment Package από Java resources το οποίο θα στηρίζεται ακριβώς στα παραπάνω βήματα για την υλοποίησή του. 5. Τεχνική Ανάλυση της λύσης Smart Greenhouse Όταν μιλάμε για κάποιον κλάδο όπου το IoT είναι σχετικό, η βασική αρχή είναι πάντοτε η ίδια: θέλουμε να συνδέσουμε μία έξυπνη συσκευή, η οποία είναι σε ζεύξη με αισθητήρες και ενεργοποιητές, στο διαδίκτυο, ώστε οι αισθητήρες και οι ενεργοποιητές να μπορούν να παρακολουθούνται και να υφίστανται χειρισμό από απόσταση. Μία απλουστευμένη έκδοση τέτοιας έξυπνης συσκευής θα μπορούσε να ήταν ένα συνδεδεμένο θερμοκήπιο, το οποίο επιτρέπει σε κάποιον να παρακολουθήσει την τρέχουσα θερμοκρασία από οποιοδήποτε απόσταση, καθώς και να χειριστεί το άνοιγμα/ κλείσιμο ενός τεχνητού φωτός. Αυτό ακριβώς θα προσπαθήσουμε να κάνουμε βήμα- βήμα, με διάφορα εργαλεία που θα χρησιμοποιήσουμε. 5.1 Ετοιμάζοντας το hardware [12] To βασικό hardware που θα χρειαστούμε, για το οποίο δεν χρειάζονται ειδικές γνώσεις πάνω στα ηλεκτρονικά, για να δημιουργηθεί το θερμοκήπιο είναι το εξής: ● Raspberry Pi 2 Model B ή B+ και μία κάρτα SD (min. 4GB), ● Αισθητήρας Θερμοκρασίας & υγρασίας Grove ● Grove LED
  • 39. ● 4 καλώδια Grove από Female Jumper σε καλώδια μετατροπής, όπως φαίνεται στην εικόνα παρακάτω. ● Και ένα καλώδιο Ethernet 1. 2. 3. 4. 5. Φωτ. 28: Το hardware για την προτεινόμενη λύση, www.seeedstudio.com Το Raspberry Pi είναι ένας φθηνός και υπολογιστής – πλακέτα, ο οποίος μπορεί να εκτελέσει διάφορα ήδη λογισμικού που εμείς θα επιλέξουμε. Για την ιστορία, και τους λεπτολόγους, ο επεξεργαστής του είναι τετραπύρηνος ARM Cortex-A7, στα 900 MHz , η RAM στο 1GB, η χωρητικότητα του ‘δίσκου’ του εξαρτάρται από την SD κάρτα που θα χρησιμοποιήσουμε, καλύτερα θα ήταν από 8GB και άνω, και εν τέλει τροφοδοτείται από τροφοδοτικό 4.0 W. Για να ξεκινήσουμε με το Raspberry Pi χρειαζόμαστε λειτουργικό σύστημα. Το NOOBS (New Out Of the Box Software) είναι ένας installer λογισμικού που περιέχει το λειτουργικό σύστημα Raspbian (Raspberry Debian) καθώς και εναλλακτικά λογισμικά σε περίπτωση που θέλουμε να χρησιμοποιήσουμε κάποιο άλλο. Για να το εγκαταστήσουμε και να το λειτουργήσουμε θα ακολουθήσουμε τα εξής βήματα: Κατέβασμα του NOOBS Από την επίσημη σελίδα του Raspberry Pi και τον ακόλουθο σύνδεσμο, ΝΟΟBS, θα κατεβάσουμε την τρέχουσα έκδοση του κατά προτίμηση σε μορφή torrent. Φωτ. 29: Ο εγκαταστάτης λογισμικού Debian, https://www.raspberrypi.org/downloads/noobs/
  • 40. Διαμόρφωση της κάρτας SD Για να μεταφέρουμε το περιεχόμενο του NOOBS αρχείου που κατεβάσαμε θα χρειαστεί να μορφοποιήσουμε και να αδειάσουμε μία SD κάρτα 4GB χωρητικότητας και άνω. 1. Θα επισκεφτούμε, λοιπόν, το εξής σύνδεσμο SD Formatter 4.0 και ακολουθώντας τις οδηγίες θα διαμορφώσουμε την SD κάρτα μας. 2. Θα εισάγουμε την SD κάρτα στην εσοχή του laptop ή στον card reader και θα δούμε σε ποιον δίσκο δεσμεύεται, π.χ. G:/, Ι:/ κτλ. 3. Στο αρχείο που μόλις κατεβάσαμε( SD Formatter) θα επιλέξουμε τον δίσκο δέσμευσης της κάρτας SD και θα τον διαμορφώσουμε. Drag and Drop των NOOBS αρχείων 1. Αφού έχει διαμορφωθεί η κάρτα SD, θα σύρουμε όλα τα αρχεία από τον φάκελο NOOBS και θα τα «ρίξουμε» στον δίσκο της κάρτας SD. 2. Με αυτό τον τρόπο θα μεταφερθούν όλα τα απαραίτητα αρχεία στην SD κάρτα μας. 3. Εφόσον τελειώσουμε και με αυτή την διαδικασία, θα εισάγουμε την SD κάρτα μας στην πλακέτα Raspberry Pi. Η πρώτη εκκίνηση 1. Πρώτα από όλα, συνδέουμε το πληκτρολόγιο, το ποντίκι και τα καλώδια παρακολούθησης στους ακροδέκτες GPIO του Pi. 2. Έπειτα συνδέουμε το USB καλώδιο που τροφοδοτεί το Pi. 3. Σε αυτή την περίπτωση το Raspberry θα εκκινήσει, και θα εμφανιστεί ένα παράθυρο με μία λίστα από διαφορετικά λογισμικά που μπορούν να εγκατασταθούν. Σε αυτή την περίπτωση, για λόγους του συγκεκριμένου παραδείγματος, θα επιλέξουμε το λειτουργικό σύστημα Raspbian. 4. Εν συνεχεία θα χρειαστεί να αναμένουμε για την διαδικασία εγκατάστασης του λογισμικού που πρόκειται να διαρκέσει κάποιο σημαντικό χρονικό διάστημα. 5. Όταν η διαδικασία εγκατάστασης ολοκληρωθεί, θα φορτώσει το μενού ρυθμίσεων του του Raspberry Pi (raspi-config). Εδώ θα ρυθμίσουμε κάποιες παραμέτρους όπως την ημερομηνία, την ενεργοποίηση της κάρτας κάμερας του Raspberry Pi, ακόμα και την δημιουργία χρηστών. Ολοκληρώνουμε αυτή την διαδικασία πατώντας TAB και εκτελώντας το Finish.
  • 41. Φωτ. 30: Επιλογή λογισμικού κατά την εκκίνηση του Raspberry Pi Σύνδεση και πρόσβαση στην επιφάνεια χρήστη Αν χρειαστεί κάποιο username για την σύνδεση στο Raspbian, οι προεπιλεγμένες ρυθμίσεις για αυτό είναι: username: pi password: raspberry Για λόγους ασφάλειας του Linux κατά την πληκτρολόγηση του κωδικού, δεν θα εμφανίζεται ότι πληκτρολογείται κάτι. Για να φορτώσει τη γραφική επιφάνεια χρήστη αρκεί να πληκτρολογήσουμε startx.
  • 42. 5.2 ΣΥΝΑΡΜΟΛΟΓΗΣΗ ΤΟΥ RASPBERRY Pi ΚΑΙ ΤΩΝ ΑΙΣΘΗΤΗΡΩΝ [12] Όπως αναφέραμε προηγουμένως, η ρύθμιση του hardware δεν θα πάρει πάνω από μερικά λεπτά. Πριν όμως συνδέσουμε τα καλώδια στους αισθητήρες, καλό θα ήταν να κάνουμε μια μικρή εισαγωγή στο πως μπορεί το Raspberry Pi να “διευρυνθεί” με εξωτερικούς αισθητήρες. Η σειρά των ακροδεκτών, κατά μήκος της άκρης της πλακέτας, είναι προγραμματιζόμενη από το σύστημα Linux και μας επιτρέπει να αλληλεπιδρούμε με μία πληθώρα συνδεδεμένων αισθητήρων. Ας το σκεφτούμε έτσι. Οι GPIOs είναι διακόπτες που μπορούμε να τους ελέγξουμε από το Raspberry Pi ως εξόδους (outputs), ή μπορούν να ελεγχθούν από τους αισθητήρες ως είσοδοι (inputs). Κάποιοι από τους ακροδέκτες είναι πιο πολύπλοκοι και επιτρέπουν την χρήση πρωτοκόλλων υψηλότερου επιπέδου για την ανταλλαγή περισσοτέρων σημάτων από αυτά των on/off. Τέτοια πρωτόκολλα περιέχουν τα SPI, I2C ή UART και εμείς, όντως, θα χρησιμοποιήσουμε ένα I2C αισθητήρα θερμοκρασίας - υγρασίας σε αυτό το παράδειγμα. Μία άποψη της κατανομής των ακροδεκτών του Raspberry ακολουθεί στην παρακάτω εικόνα. Φωτ. 31: Ακροδέκτες εισόδου-εξόδου στον μικροεπεξεργαστή Raspberry Pi, https://www.raspberrypi.org/documentation/usage/gpio/
  • 43. Φωτ. 32: Ιδιότητες κάθε ακροδέκτη, https://www.raspberrypi.org/documentation/usage/gpio/ Οι είσοδοι δεν χρειάζεται να προέρχονται από έναν απτό διακόπτη, μπορούν να είναι είσοδοι από έναν αισθητήρα ή από ένα σήμα από κάποιον άλλο υπολογιστή ή συσκευή παραδείγματος χάρη. Οι έξοδοι μπορούν επίσης να κάνουν τα πάντα, από το να ενεργοποιήσουν ένα LED μέχρι το να στείλουν δεδομένα σε μία άλλη συνδεδεμένη συσκευή. Αν το Raspberry Pi είναι συνδεδεμένο σε κάποιο δίκτυο, μπορούμε να διαχειριστούμε τις συσκευές που είναι που είναι σε ζεύξη με αυτό από οπουδήποτε και αυτές οι συσκευές μπορούν να στείλουν πίσω δεδομένα. Στην ουσία, δεν γίνεται να τις διαχειριστούμε από οπουδήποτε, μιας και χρειαζόμαστε πρώτον: πρόσβαση σε αυτό το δίκτυο, δεύτερον: μια συσκευή ικανή να συνδεθεί σε ένα τέτοιο δίκτυο και τρίτον: ηλεκτρικό ρεύμα. Η συνδεσιμότητα και ο χειρισμός τέτοιων συσκευών , μέσω του διαδικτύου, είναι μία ενθουσιώδης εμπειρία , και το Raspberry Pi είναι το ιδανικό για κάτι τέτοιο.
  • 44. Λειτουργία Ακροδεκτών GPIO Το να συνδέσει κανείς, τυχαία, καλώδια είτε πηγές τροφοδοσίας στο Pi, μπορεί να δημιουργήσει προβλήματα τόσο στη συσκευή όσο και στο χρήστη. Το ίδιο μπορεί να συμβεί και σε περίπτωση που προσπαθήσουμε να συνδέσουμε στο Pi συσκευές που καταναλώνουν πολλή ενέργεια. Σε αυτή την περίπτωση τα LED δεν θα έχουν κάποιο πρόβλημα αλλά κάποιος κινητήρας, πιθανόν να έχει. Τότε απαιτείται τροφοδοτικό μεγαλύτερης ισχύος. Αφήνοντας στην άκρη το Pi για μια στιγμή, ένα από τα πιο απλά ηλεκτρικά κυκλώματα που μπορούμε να χτίσουμε είναι μία μπαταρία συνδεδεμένη με μία πηγή φωτός και έναν διακόπτη, με μία αντίσταση να προστατεύει το LED. Φωτ. 33: Μια διάταξη ενός απλού κυκλώματος, https://www.raspberrypi.org/documentation/usage/gpio/ Όταν χρησιμοποιούμε έναν ακροδέκτη GPIO ως έξοδο, το Raspberry Pi αντικαθιστά τον διακόπτη και την μπαταρία στο παραπάνω διάγραμμα. Κάθε καρφίο μπορεί να ενεργοποιηθεί ή απενεργοποιηθεί, ή να πάει HIGH ή LOW, δηλαδή να έχει έξοδο HIGH=3.3 volts ή να μην έχει καθόλου έξοδο, LOW=0ν. To ίδιο κύκλωμα, χρησιμοποιώντας το Raspberry Pi, θα έχει συνδεδεμένο το LED στο GPIO καρφίο (που μπορεί να έχει ως έξοδο +3.3volts) και στο καρφίο γείωσης (που είναι 0ν και λειτουργεί ως αρνητικό τερματικό για την μπαταρία). Φωτ.34: Εφαρμογή ενός λαμπτήρα LED στα καρφία, https://www.raspberrypi.org/documentation/usage/gpio/
  • 45. Σε αυτά που αναφερθήκαμε μέχρι στιγμής, είχαν να κάνουν με GPIO εξόδους οι οποίες μπορούν να είναι όπως είπαμε είτε HIGH είτε LOW, πράγμα που τις κάνει εύκολες στην κατανόηση και στην χρήση τους. Από την άλλη, οι είσοδοι είναι πιο πολύπλοκες λόγω του τρόπου λειτουργίας των ψηφιακών συσκευών. Παρόλο που φαίνεται φυσιολογικό το να συνδέσουμε, απλά, ένα κουμπί σε έναν ακροδέκτη εισόδου και έναν ακροδέκτη γείωσης, ίσως αυτή η κίνηση να προκαλέσει σύγχυση στο Pi ως προς το αν αυτό το κουμπί είναι εργοστασιακά ρυθμισμένο on ή off. Με λίγα λόγια υπάρχει περίπτωση να λειτουργήσει, αλλά και το αντίθετο. Μπορούμε να το παρομοιάσουμε με την αιώρηση στο διάστημα, διότι χωρίς ένα σημείο αναφοράς θα ήταν πολύ δύσκολο να πει κανείς αν αιωρείται προς τα πάνω ή προς τα κάτω, ή στην τελική τι ακριβώς σημαίνει το πάνω και το κάτω! Σύνδεση των αισθητήρων Πλέον έφτασε η στιγμή για να αγκιστρώσουμε τον αισθητήρα θερμοκρασίας - υγρασίας και το LED στο Raspberry Pi. Οι ακροδέκτες GPIO είναι αριθμημένοι όπως στην εικόνα “Raspberry Pi B+ J8 Header” που χρησιμοποιήσαμε παραπάνω. Θα συνδέσουμε λοιπόν τα καλώδια Grove στον αισθητήρα θερμοκρασίας - υγρασίας και στο LED αφού πρώτα βεβαιωθούμε ότι το Raspberry Pi δεν είναι σε λειτουργία. Για το κάθε διαφορετικό καλώδιο θα κάνουμε την εξής σύνδεση: Αισθητήρας θερμοκρασίας: ● Το μαύρο καλώδιο θα συνδεθεί με το PIN#06 (γείωσης) ● Το κόκκινο καλώδιο με το ΡΙΝ#01 (τροφοδοσίας) ● Το κίτρινο καλώδιο με το ΡΙΝ#05 ( SCL i2c Clock) ● Το λευκό καλώδιο με το ΡΙΝ#03 ( SDA i2c Data) LED: ● To μαύρο καλώδιο θα συνδεθεί με το ΡΙΝ#14 (γείωσης) ● Το κόκκινο καλώδιο με το ΡΙΝ#02 (τροφοδοσίας) ● Το κίτρινο με το ΡΙΝ#11 ( καρφίο γενικής χρήσεως) ● Το λευκό καλώδιο, μιας και το μόνο που χρειαζόμαστε για το παράδειγμα είναι να αναβοσβήνει το LED, δεν θα το χρησιμοποιήσουμε ή απλά θα το συνδέσουμε με ένα καρφίο γείωσης Εφόσον εκτελέσουμε αυτές τις συνδέσεις, έπειτα θα συνδέσουμε το Raspberry Pi στον οικιακό δρομολογητή μας χρησιμοποιώντας το καλώδιο Ethernet ή για απλούστευση της διαδικασίας θα ακολουθήσουμε τον προσωπικό μου οδηγό για σύνδεση στο διαδίκτυο και χειρισμό του Raspberry Pi μέσω του Tutorial Video που έχω αναρτημένο στον προσωπικό μου λογαριασμό στο YouTube.
  • 46. Εν συνεχεία θα εκκινήσουμε το Pi και επιλέγοντας το “Expand Filesystem” θα βεβαιωθούμε ότι όλη η χωρητικότητα της SD κάρτας είναι διαθέσιμη. Φωτ. 35: Επέκταση του συστήματος για μέγιστη χωρητικότητα Για να λειτουργήσει σωστά ο αισθητήρας θερμοκρασίας θα πρέπει να ενεργοποιήσουμε το i2c, το οποίο θα επιτρέψει το ένα chip να επικοινωνεί με κάποιο άλλο. Άρα, εφόσον το Raspberry Pi μπορεί να “μιλήσει” το πρωτόκολλο I2C μπορούμε να το συνδέσουμε σε μία πληθώρα από ολοκληρωμένα κυκλώματα (συσκευές) που αντιλαμβάνονται το I2C. Αυτό χρειάζεται μία διαδικασία. Ο δίαυλος I2C επιτρέπει σε πολλαπλές συσκευές να είναι συνδεδεμένες στο Raspberry Pi, κάθε μία με μοναδική διεύθυνση, και είναι πολύ χρήσιμο στο να μπορούμε να γνωρίζουμε ανά πάσα στιγμή, πόσες και ποιες συσκευές είναι συνδεδεμένες σε αυτό, ώστε να σιγουρευόμαστε πως όλα βαίνουν καλώς. Για να το πετύχουμε αυτό θα εκτελέσουμε τις εξής εντολές στο τερματικό, εγκαθιστώντας έτσι το i2c-tools. 1. sudo apt-get install python-smbus 2. sudo apt-get install i2c-tools
  • 47. Επιπρόσθετα, τρέχοντας το sudo raspi-config, θα βρεθούμε ξανά στο μενού ρυθμίσεων του Pi, όπου , με βάση τα παρακάτω screenshots θα εγκαταστήσουμε και την υποστήριξη I2C για τον ARM core και τον πυρήνα linux. Αν δεν νιώθουμε οικία στο να χειριζόμαστε το τερματικό μπορούμε κάλλιστα να κάνουμε τις παραπάνω αλλαγές μέσω των ρυθμίσεων από την γραφική διεπιφάνεια μετά την έναρξη του λογισμικού. [a] [b]
  • 48. [c] Φωτ. 36,[a],[b],[c]: Ενεργοποίηση υποστήριξης διαύλου I2C Και το μόνο που μας μένει είναι μία επανεκκίνηση του συστήματος. Εγκατάσταση του Eclipse Kura στο Raspberry Pi Η εγκατάσταση του Kura είναι αρκετά εύκολη. Βασικά είναι τόσο εύκολη όσο η εγκατάσταση κάθε πακέτου Debian. Υποθέτοντας πως είμαστε στο μενού ρυθμίσεων του Raspberry Pi, θα πληκτρολογήσουμε το εξής: cd ~ sudo apt-get update wget https://s3.amazonaws.com/kura_downloads/raspbian/release/1.4.0/kura_1.4.0_r aspberry-pi-2_installer.deb sudo dpkg -i kura_1.4.0_raspberry-pi-2_installer.deb