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.
 
 
 

6.6 KiB

Τελική εργασία για το εργαστήριο ΙοΤ

Ένας εικονικός περιβαλλοντικός σταθμός που περιοδικά παράγει μετρήσεις θερμοκρασίας, υγρασίας αέρος, υγρασίας εδάφους και έντασης αέρος. Στη συνέχεια ελέγχει τις τιμές και αν αυτές διαφέρουν πάνω από 10% αποστέλλονται στο Server. Αν περάσει χρονικό διάστημα πέντε λεπτών από την τελευταία αποστολή δεδομένων, αποστέλλονται οι τρέχουσες τιμές.

Ο Server επεξεργάζεται τα δεδομένα που καταφθάνουν και αν διαπιστωθεί ότι η θερμοκρασία περιβάλλοντος αυξήθηκε κατα 40% και η υγρασία αέρα μειώθηκε κατα 50% τα τελευταία πέντε λεπτά, αποστέλλει ειδοποίηση με email στο χρήστη. Τέλος αποθηκεύει τα δεδομένα σε βάση δεδομένων και παράγει γραφήματα με τις μετρήσεις.


Αρχιτεκτονική Server

Ο server είναι ένα multi-container Docker πρόγραμμα που χρησιμοποιεί τις παρακάτω τεχνολογίες:

  • InfluxDB - time series database.
  • Python3 - Programming language.
  • Flask - Web development framework.
  • Grafana - visualization UI for InfluxDB.

Αρχιτεκτονική Client

O client είναι πρόγραμμα γραμμένο σε Python3 σχεδιασμένο για να τρέχει σε RaspberryPi και μπορεί να παράγει μέτρησης (random) ή να τις διαβάζει από αρχείο JSON (fake_weather.json).

Overview

Untitled Diagram


Οδηγός εγκατάστασης λογισμικού

Για να ξεκινήσει ο Server:

  1. Θα πρέπει να έχουμε εγκατεστημένο το docker-compose στο docker host.
  2. Αντιγράφουμε το φάκελο server του repo στο host.
  3. Αν θέλουμε μπορούμε να αλλάξουμε τους κωδικούς της βάσης, του Grafana και του mail(.env)
  4. Πληκτρολογούμε την παρακάτω εντολή από root του server:
docker-compose up -d

Για να το σταματήσουμε πληκτρολογούμε την παρακάτω εντολή από root του server:

docker-compose down


Για να ξεκινήσει ο Client:

  1. Θα πρέπει να έχουμε εγκατεστημένη την Python3. Να εγκαταστήσουμε την βιβλιοθήκη requests
pip install -r requirements.txt 
  1. Αντιγράφουμε το φάκελο client του repo στο RaspberyPi.
  2. Πληκτρολογούμε την παρακάτω εντολή από root του server:
python3 client.py
  1. Στη συνέχεια θα πρέπει να εισάγουμε την IP του server (Χωρίς την πόρτα, καθώς αυτή ορίζεται αυτόματα ως 5000) και να επιλέξουμε τον επιθυμητό τρόπο λειτουργίας

Ports

Υπηρεσίες του Server τρέχουν στις παρακάτω πόρτες:

| Host Port | Service |

| 3000 | Grafana |

| 8086 | InfluxDB |

| 127.0.0.1:5000 | Flask WebApp |

Σημείωση: H πόρτα τις Ιnflux δεν είναι προσβάσιμη έξω από το Docker, αν θέλουμε να το αλλάξουμε αυτό αρκεί να πάμε στο Docker-Compose.yml και να κάνουμε un-comment τη σχετική εντολή.

Volumes

Το πρόγραμμα δημιουργεί τα παρακάτω volumes, έτσι ώστε τα δεδομένα να μην χάνονται όταν σταματάει.

  • influxdata
  • grafanadata

Users

Δημιουργούνται τρεις χρήστες, ένας flask με δικαιώματα στη βάση που δημιουργούμε για τις μετρήσεις και δυο admin για την InfluxDB και το Grafana. Αν θέλουμε να αλλάξουμε τους κωδικούς ή τα ονόματα θα πρέπει να αλλάξουμε στο αρχείο .env:

  • InfluxAdminUser
  • InfluxAdminPass
  • InfluxUser
  • InfluxUserPass
  • GRAFANA_USERNAME
  • GRAFANA_PASSWORD

Επίσης υπάρχει λογαριασμός για το email (ο οποίος έχει δημιουργηθεί για τις ανάγκες της ασκήσης). Αν θελουμε να προσθέσουμε δικό μας email θα πρέπει να ενεργοποιήσουμε την λειτουργία Less secure app access και να αλλάξουμε στο αρχείο .env:

  • MailUser
  • MailPass

Database

Το πρόγραμμα δημιουργεί μια βάση στην InfluxDB με όνομα env_data.

Data Sources

Δημιουργείται ένα data source που ονομάζεται Rpi_EnvSensor_Data και συνδέεται στη βάση που δημιουργούμε (δλδ. env_data).

Αν θελουμε να προσθέσουμε περισσότερα data sources θα πρέπει να κοιτάξουμε το εγχειρίδιο του Grafana και να προσθέσουμε το αρχείο στο ./grafana-provisioning/datasources/ πριν ξεκινήσουμε το server.

Dashboards

Αυτόματα το πρόγραμμα δημιουργεί ένα Dashboard στο Grafana με όνομα grafana_panel.json που βρίσκεται στο ./grafana-provisioning/dashboards και έχει όνομα Pi.

Αν θέλουμε να προσθέσουμε περισσότερα Dashboard θα πρέπει να κοιτάξουμε το εγχειρίδιο του Grafana και να προσθέσουμε το αρχείο στο ./grafana-provisioning/datasources/ πριν ξεκινήσουμε το server.