Repo made for Iot lab 2021
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
cs171062 d55a631ec6 Update 'README.md' 3 years ago
LICENSE Initial commit 3 years ago
README.md Update 'README.md' 3 years ago
Screenshot_1.png Upload files to '' 3 years ago
add_field.png Upload files to '' 3 years ago
atmos-device.py Upload files to '' 3 years ago
atmos-server.py Upload files to '' 3 years ago
dashboard_copy.png Upload files to '' 3 years ago
data_source.png Upload files to '' 3 years ago
database_name.png Upload files to '' 3 years ago
db_select.png Upload files to '' 3 years ago
final_1.png Upload files to '' 3 years ago
final_2.png Upload files to '' 3 years ago
final_3.png Upload files to '' 3 years ago
final_4.png Upload files to '' 3 years ago
gmail_credentials.txt Upload files to '' 3 years ago
google_security.png Upload files to '' 3 years ago
influx_config.png Upload files to '' 3 years ago
influxdb.png Upload files to '' 3 years ago
logo.png Upload files to '' 3 years ago
min_time.png Upload files to '' 3 years ago
remove_group.png Upload files to '' 3 years ago
select.png Upload files to '' 3 years ago
select_field.png Upload files to '' 3 years ago
start-device.sh Upload files to '' 3 years ago
start-server.sh Upload files to '' 3 years ago
webapp.html Upload files to '' 3 years ago

README.md

Εργασία εξαμήνου για το εργαστήριο Iot

Το project αποτελεί προσομοίωση ενός mini μετεωρολογικού σταθμού.

Λειτουργία

Ο σταθμός αποτελείται από την συσκευή, η οποία παράγει δεδομένα, έναν κεντρικό server που τα επεργάζεται, μια βάση δεδομένων που τα αποθηκεύει και ένα απλό website για την γραφική απεικόνιση τους προς τον χρήστη.

Συσκευή

Η συσκευή ανά 30 δευτερόλεπτα παράγει τυχαία δεδομένα (περιορισμένα σε ένα ρεαλιστικό εύρος) των παρακάτω καιρικών συνθηκών:

  • θερμοκρασία
  • ταχύτητα ανέμου
  • υγρασία αέρα
  • υγρασία εδάφους

, τα οποία ελέγχονται τοπικά για τυχόν μεταβολές. Στη περίπτωση που παρατηρηθεί μια μεταβολή του +-10% σε κάποιο καιρικό στοιχείο (σε σχέση με την ακριβώς προηγούμενη μέτρηση) τότε οι τρέχουσες συνθήκες αποστέλλονται στον server για περαιτέρω μελέτη. Επίσης σε περίπτωση που δεν έχει αποσταλλεί κάποια μέτρηση στο χρονικό διάστημα των 5 λεπτών τότε αποστέλλονται οι τρέχουσες συνθήκες.

Server

Ο server του project είναι υπεύθυνος για την συλλογή δεδομένων από τις συσκευές καθώς και για την real-time επεξεργασία τους βάσει ενός πρωτοκόλλου. Συγκεκριμένα, αν κατά την επεξεργασία διαπιστωθεί ότι η θερμοκρασία περιβάλλοντος αυξηθεί κατά 40% και η υγρασία αέρα μειωθεί κατά 50% τα τελευταία πέντε λεπτά τότε θα πρέπει να αποστέλλει ένα mail στον χρήστη και να τον ειδοποιεί για την αλλαγή αυτή.

Υλοποίηση

Η υλοποίηση μου για την εργασία έγινε αποκλειστικά σε software και όχι σε κάποια πλατφόρμα Raspberry PI όπως αρχικά ήταν σχεδιασμένο από τον υπεύθυνο καθηγητή.

https://git.swarmlab.io:3000/cs171062/atmos-iotlab/raw/branch/master/logo.png

Τo project ονομάστηκε ATMOS και ο κώδικας είναι αρκετά απλός.

Technologies

Η υλοποίηση έγινε με τα εξής εργαλεία:

  • Python 3
  • yagmail (python librayry για την αποστολή mail)
  • InfluxDB (βάση δεδομένων)
  • Grafana (γραφική απεικόνιση των δεδομένων)

Installation

Πρωτού τρέξετε οποιοδήποτε αρχείο, θα χρειαστείτε στο σύστημα σας τα εξής:

Python

για την εγκατάσταση της Python στο σύστημά σας, στο τερματικό τρέξτε τις παρακάτω εντολές:

$ sudo apt-get update

$ sudo apt-get install python3

Pip3

θα χρειαστούμε το εργαλείο pip3 για την εγκατάσταση του yagmail. Δίνουμε την εντολή:

$ sudo apt install python3-pip

Yagmail

στην συνέχεια για την εγκατάσταση του yagmail στο σύστημά σας, στο τερματικό τρέξτε την παρακάτω εντολή:

$ pip3 install yagmail

InfluxDB

Προσοχή!: οι παρακάτω εντολές είναι για συστήματα Ubuntu. Σε περίπτωση που έχετε Debian, ανατρέξτε [εδώ](sudo service influxdb start) και ακολουθήστε την παρόμοια διαδικασία.

στο τερματικό τρέξτε τις παρακάτω εντολές:

$ wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add -

$ source /etc/lsb-release

$ echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

και τέλος

$ sudo apt-get update && sudo apt-get install influxdb $ pip3 install influxdb

και

$ sudo service influxdb start

, για να ξεκινήσει το service της βάσης

Grafana

αρχικά τρέξτε τις εντολές:

$ sudo apt-get install -y apt-transport-https

$ sudo apt-get install -y software-properties-common wget

$ wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

$ echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

εφόσον έγινε η προσθήκη των repositories τρέξτε τις παρακάτω εντολές για την εγκατάσταση του εργαλείου:

$ sudo apt-get update

$ sudo apt-get install grafana

και

$ sudo systemctl daemon-reload

$ sudo systemctl start grafana-server

$ sudo systemctl status grafana-server

με την τελευταία εντολή επιβεβαιώνετε ότι το service της Grafana είναι ενεργό και μπορείτε να προχωρήσετε στην παραμετροποίηση κάποιων απαραίτητων αρχείων

Configuration

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

$ influx -precision rfc3339

και έπειτα

create database atmos

και στη συνέχεια κλείνετε το παράθυρο

Επόμενο βήμα είναι το σετάρισμα της Grafana. Σε ένα browser μπείτε στη διεύθυνση http://localhost:3000/. Στα στοιχεία εισόδου συμπληρώστε admin για username και password και στη συνέχεια βάλτε έναν νέο κωδικό. Πρώτο μέλημα είναι η δημιουργία ενός data source.

κάνετε κλικ στο 'Add your first data source'

https://git.swarmlab.io:3000/cs171062/atmos-iotlab/raw/branch/master/data_source.png

επιλέξτε την InfluxDb

https://git.swarmlab.io:3000/cs171062/atmos-iotlab/raw/branch/master/influxdb.png

στο Name συμπληρώστε:

AtmosDB

στο URL συμπληρώστε:

http://localhost:3000

στο πεδιο Database της ενότητας InfluxDB Details συμπληρώστε:

atmos

και τέλος στο πεδίο Min Time Interval συμπληρώστε:

30

Δεύτερο μέλημα είναι η δημιουργία ενός dashboard. Στην αρχική του Grafana επιλέξτε το 'Create your first dashboard'

https://git.swarmlab.io:3000/cs171062/atmos-iotlab/raw/branch/master/select.png

στη συνέχεια κάτω αριστερά επιλέξτε την βάση που μόλις δημιουργήσατε

https://git.swarmlab.io:3000/cs171062/atmos-iotlab/raw/branch/master/db_select.png

Στο query μετα το 'default' επιλέξτε την επιλογή tablePython στο 'field' και κάτω προσθέστε τα υπόλοιπα fields

https://git.swarmlab.io:3000/cs171062/atmos-iotlab/raw/branch/master/add_field.png

Διαγράψτε την εντολή 'Group' και στη συνέχεια κατευθυνθείτε πάνω δεξιά και κάντε 'Save' το dashboard που δημιουργήσατε.

Εμφάνιση dashboard στο site

Για να είναι το dashboard visible στο site πρέπει να αλλάξετε το .ini file της Grafana. Σε ενα terminal τρέξτε την εντολή:

$ sudo nano /etc/grafana/grafana.ini

βρείτε τα πεδία allow_embedding και auth.anonymous και θέστε με την τιμή true και διαγράψτε το ερωτηματικό (;) μπροστά

allow_embedded = true

[auth.anonymous]

enabled = true

Αποστολή mail σε κρίσιμη περίπτωση

Για να μπορέσει η εφαρμογή να στείλει κάποιο mail στον χρήστη θα πρέπει να κάνετε config το gmail_credentials.txt έναν λογαριασμό Gmail.

Στη πρώτη γραμμή πρέπει να συμπληρώσετε το username του email σας, στη δεύτερη το password του λογαριασμού και στο στην τρίτη τον παραλήπτη του email

πχ. άρα εάν η διεύθυνσης σας είναι abc123@gmail.com, ο κωδικός σας 1234567890 και παραλήπτης xyz@domain.com, το αρχείο πρέπει να είναι έτσι:

gmail_credentials.txt

abc123

1234567890

xyz@domain.com

Στη συνέχεια πρέπει να κάνετε log-in στον λογαριασμό Google και να επισκεφτείτε τον σύνδεσμο

Στη συνέχεια κάνετε enable την επιλογή 'Να επιτρέπονται οι λιγότερο ασφαλείς εφαρμογές: ΕΝΕΡΓΟ'

https://git.swarmlab.io:3000/cs171062/atmos-iotlab/raw/branch/master/google_security.png

Εκτέλεση

Για να τρέξετε τα προγράμματα ανοίγτε δύο τερματικά. Στο πρώτο τρέχετε το start-server.sh με την εντολή:

./start-server.sh

και στο δεύτερο:

./start-device.sh

Τέλος ανοίγετε το webapp.html σε έναν browser και πλέον μπορείτε να κάνετε monitor τα δεδομένα που στέλνει η συσκευή

Screenshots

https://git.swarmlab.io:3000/cs171062/atmos-iotlab/raw/branch/master/final_1.png

https://git.swarmlab.io:3000/cs171062/atmos-iotlab/raw/branch/master/final_2.png

Spammed myself enough for those tests :)

https://git.swarmlab.io:3000/cs171062/atmos-iotlab/raw/branch/master/final_3.png

https://git.swarmlab.io:3000/cs171062/atmos-iotlab/raw/branch/master/final_4.png