5okin
8af4dfc028
|
4 years ago | |
---|---|---|
client | 4 years ago | |
server | 4 years ago | |
LICENSE | 4 years ago | |
README.md | 4 years ago |
README.md
Τελική εργασία για το εργαστήριο ΙοΤ
Ένας εικονικός περιβαλλοντικός σταθμός που περιοδικά παράγει μετρήσεις θερμοκρασίας, υγρασίας αέρος, υγρασίας εδάφους και έντασης αέρος. Στη συνέχεια ελέγχει τις τιμές και αν αυτές διαφέρουν πάνω από 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
Οδηγός εγκατάστασης λογισμικού
Για να ξεκινήσει ο Server:
- Θα πρέπει να έχουμε εγκατεστημένο το docker-compose στο docker host.
- Αντιγράφουμε το φάκελο server του repo στο host.
- Αν θέλουμε μπορούμε να αλλάξουμε τους κωδικούς της βάσης, του Grafana και του mail(.env)
- Πληκτρολογούμε την παρακάτω εντολή από root του server:
docker-compose up -d
Για να το σταματήσουμε πληκτρολογούμε την παρακάτω εντολή από root του server:
docker-compose down
Για να ξεκινήσει ο Client:
- Θα πρέπει να έχουμε εγκατεστημένη την Python3. Να εγκαταστήσουμε την βιβλιοθήκη requests
pip install -r requirements.txt
- Αντιγράφουμε το φάκελο client του repo στο RaspberyPi.
- Πληκτρολογούμε την παρακάτω εντολή από root του server:
python3 client.py
- Στη συνέχεια θα πρέπει να εισάγουμε την 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.