Πίνακας περιεχομένων:

DIY House Monitoring With RaspberryPi και Cloud4Rpi: 5 Βήματα
DIY House Monitoring With RaspberryPi και Cloud4Rpi: 5 Βήματα

Βίντεο: DIY House Monitoring With RaspberryPi και Cloud4Rpi: 5 Βήματα

Βίντεο: DIY House Monitoring With RaspberryPi και Cloud4Rpi: 5 Βήματα
Βίντεο: How to Make a Raspberry Pi Smart Mirror 2024, Νοέμβριος
Anonim
DIY House Monitoring With RaspberryPi και Cloud4Rpi
DIY House Monitoring With RaspberryPi και Cloud4Rpi

Ένα χειμερινό Σαββατοκύριακο πήγα στο εξοχικό μου και διαπίστωσα ότι έκανε πολύ κρύο εκεί. Κάτι είχε συμβεί με την ηλεκτρική ενέργεια και ο διακόπτης RCD τον είχε απενεργοποιήσει και η θέρμανση έσβησε επίσης. Wasμουν τυχερός που ήρθα εκεί, αλλιώς σε αρκετές ημέρες όλα θα είχαν παγώσει, κάτι που είναι πολύ κακό για τους σωλήνες και τα καλοριφέρ.

Είχα αρκετά Raspberry Pi και έναν θερμικό αισθητήρα, οπότε σκέφτηκα - γιατί δεν φτιάχνω μια απλή συσκευή παρακολούθησης; Οι παρακάτω οδηγίες υποθέτουν ότι έχετε ρυθμίσει ένα Raspberry Pi με Raspbian και σύνδεση δικτύου. Στην περίπτωσή μου είναι το Raspberry Pi B+ με Raspbian (2018–06–27-raspbian-stretch-lite).

Βήμα 1: Παρακολούθηση θερμοκρασίας

Παρακολούθηση θερμοκρασίας
Παρακολούθηση θερμοκρασίας
Παρακολούθηση θερμοκρασίας
Παρακολούθηση θερμοκρασίας

Πώς να συνδέσετε έναν αισθητήρα θερμοκρασίας DS18B20; Απλώς κάντε google πώς να το κάνετε αυτό και θα δείτε πολλές εικόνες όπως αυτή:

Στην περίπτωσή μου είχα μαύρα, κίτρινα και κόκκινα καλώδια. Το μαύρο είναι αλεσμένο, πηγαίνει στην καρφίτσα γείωσης, το κόκκινο είναι ισχύς - πηγαίνει στον ακροδέκτη 3,3v και το κίτρινο είναι δεδομένα - πρέπει να μεταβεί στην καρφίτσα GPIO4, με αντίσταση 4,7 kOm συνδεδεμένη μεταξύ δεδομένων και ισχύος. Σημείωση, μπορείτε να συνδέσετε πολλούς αισθητήρες παράλληλα (είναι ψηφιακές και έχουν διαφορετικές διευθύνσεις), χρειάζεστε μόνο μία αντίσταση. Αφού συνδέσετε τον αισθητήρα σας, θα πρέπει να ενεργοποιήσετε το 1Wire στο raspi-config:

sudo raspi-config

Μεταβείτε στις 5 επιλογές διασύνδεσης, ενεργοποιήστε το P7 1-Wire και επανεκκινήστε.

Στη συνέχεια, μπορείτε να δοκιμάσετε αν μπορείτε να δείτε τον αισθητήρα:

sudo modprobe w1-gpiosudo modprobe w1-thermls/sys/bus/w1/devices/

Θα πρέπει να δείτε κάτι σαν αυτό:

pi@vcontrol: ~ $ ls/sys/bus/w1/devices/28–00044eae2dff w1_bus_master1

28–00044eae2dff είναι ο αισθητήρας θερμοκρασίας μας.

Το υλικό είναι έτοιμο. Τώρα πρέπει να δημιουργήσω το τμήμα παρακολούθησης. Χρειάζομαι κάτι που θα μου έδειχνε τα δεδομένα και θα με ειδοποιούσε εάν η συσκευή αποσυνδεθεί για λίγο ή δεν υπάρχει ρεύμα ή η θερμοκρασία είναι χαμηλή. Προφανώς αυτό δεν μπορεί να είναι το ίδιο το raspberry pi, θα πρέπει να υπάρχει κάποιος διακομιστής ή υπηρεσία στο διαδίκτυο που παρακολουθεί τη συσκευή μου.

Μπορώ να δημιουργήσω έναν απλό διακομιστή, να πάρω μια φιλοξενία και να τα ρυθμίσω όλα, αλλά γοργά, δεν το θέλω. Ευτυχώς, κάποιος το έχει σκεφτεί ήδη και έχει δημιουργήσει το cloud4rpi.io - έναν πίνακα ελέγχου cloud για τη συσκευή σας.

Βήμα 2: Ρύθμιση του Cloud4Rpi.io

Ρύθμιση του Cloud4Rpi.io
Ρύθμιση του Cloud4Rpi.io

Το Cloud4Rpi παρέχει μια υπηρεσία που επιτρέπει στη συσκευή σας να στέλνει και να λαμβάνει δεδομένα χρησιμοποιώντας πρωτόκολλα MQTT ή HTTP. Έχουν μια βιβλιοθήκη πελάτη για την Python, οπότε θα χρησιμοποιήσω την Python.

Τα παραδείγματα Python που συνοδεύουν την υπηρεσία Cloud4Rpi περιέχουν ήδη κωδικό για τον αισθητήρα θερμοκρασίας DS18B20.

Πήγα λοιπόν στο https://cloud4rpi.io, δημιούργησα έναν λογαριασμό και πρόσθεσα μια νέα συσκευή εκεί. Η σελίδα της συσκευής έχει ένα διακριτικό - μια συμβολοσειρά που προσδιορίζει τη συσκευή και η οποία πρέπει να καθοριστεί στο πρόγραμμα που στέλνει δεδομένα.

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

sudo apt-get ενημέρωση && sudo apt-get αναβάθμιση

Στη συνέχεια, εγκαταστήστε το git, Python και το διαχειριστή πακέτων Pip:

sudo apt-get install git python python-pip

Στη συνέχεια, εγκαταστήστε τη βιβλιοθήκη cloud4rpi Python:

sudo pip εγκατάσταση cloud4rpi

Τέλος, είμαι έτοιμος να γράψω το πρόγραμμα ελέγχου μου. Ξεκινώ από το διαθέσιμο παράδειγμα στη διεύθυνση

git clone https://github.com/cloud4rpi/cloud4rpi-raspberrypi… cloud4rpicd cloud4rpi

Το κύριο αρχείο προγράμματος είναι control.py - πρέπει να το τροποποιήσω για τις ανάγκες μου. Αρχικά, επεξεργαστείτε το πρόγραμμα και επικολλήστε ένα διακριτικό:

sudo nano control.py

Βρείτε μια γραμμή DEVICE_TOKEN = '…'] και καθορίστε ένα διακριτικό συσκευής εκεί. Μετά από αυτό, μπορώ απλά να εκτελέσω το πρόγραμμα: Λειτουργεί και αναφέρει μια θερμοκρασία στη μεταβλητή RoomTemp:

sudo python control.py

Λειτουργεί και αναφέρει μια θερμοκρασία στη μεταβλητή RoomTemp.

Σημειώστε ότι ανακαλύπτει όλους τους onewire αισθητήρες ds18b20

ds_sensors = ds18b20. DS18B20.find_all ()

και χρησιμοποιεί τον πρώτο εντοπισμένο αισθητήρα:

RoomTemp ': {' type ':' numeric ',' bind ': ds_sensors [0] if ds_sensors else None}

Εντάξει, ήταν εύκολο, επειδή το δείγμα προγράμματος έχει όλα όσα απαιτούνται για να λειτουργήσει με αισθητήρα ds18b20 στο Raspberry Pi. Τώρα πρέπει να βρω τον τρόπο να αναφέρω την κατάσταση ισχύος.

Βήμα 3: Παρακολούθηση UPS

Παρακολούθηση UPS
Παρακολούθηση UPS

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

Έχω ένα APC UPS με χειριστήριο USB, οπότε έψαξα γρήγορα στο Google και διαπίστωσα ότι χρειάζομαι apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Προσπάθησα αρκετές φορές να το εγκαταστήσω μέσω του apt-get και δεν λειτουργούσε για μένα για διάφορους λόγους. Θα δείξω πώς να το εγκαταστήσετε από τις πηγές.

wget https://sourceforge.net/projects/apcupsd/files/ap…tar xvf apcupsd-3.14.14.tar.gz cd apcupsd-3.14.14./configure --enable-usb sudo make sudo make install

Στη συνέχεια, επεξεργάζομαι το apcupsd.conf για σύνδεση στο UPS μου μέσω usb.

sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE smart UPSCABLE usb ##UPSTYPE apcsmart #DEVICE/dev/ttyS0 UPSTYPE usb DEVICE

Τώρα μπορώ να συνδέσω το καλώδιο USB από το UPS στο RaspberryPi και να δοκιμάσω αν θα βρεθεί UPS.

sudo apctest

Δεν πρέπει να σας δίνει μηνύματα σφάλματος.

Τώρα η υπηρεσία apcupsd πρέπει να ξεκινήσει:

sudo systemctl εκκίνηση apcupsd

Για να ρωτήσω την κατάσταση του UPS, μπορώ να χρησιμοποιήσω μια εντολή κατάστασης:

sudo /etc/init.d/apcupsd κατάσταση

Και θα έβγαινε κάπως έτσι:

APC: 001, 035, 0855 ΗΜΕΡΟΜΗΝΙΑ: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSION: 3.14.14 (31 Μαΐου 2016) debian UPSNAME: vcontrol CABLE: USB Cable DRIVER: USB UPS Driver UPSMODE: Stand Alone ΧΡΟΝΟΣ ΕΝΑΡΞΗΣ: 2018-10-14 16:54:28 +0300 ΜΟΝΤΕΛΟ: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238.0 Volts LOADPCT: 0.0 Percent BCHARGE: 100.0 Percent TIMELEFT: 293.3 Minutes MBATTCHG: 5 Percent MINTIMEL: 3 Minutes MAX 0 Δευτερόλεπτα ΑΙΣΘΗΣΗ: Μεσαίο LOTRANS: 140.0 Volts HITRANS: 300.0 Volts ALARMDEL: 30 Seconds BATTV: 14.2 Volts LASTXFER: No Transfers since turnon NUMXFERS: 0 TONBATT: 0 Seconds CUMONBATT: 0 Seconds XOFFBATT00: 2014-06-10 NOMINV: 230 Volts NOMBATTV: 12.0 Volts NOMPOWER: 390 Watt FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Χρειάζομαι μια κατάσταση - η οποία είναι η γραμμή "STATUS:".

Η βιβλιοθήκη Cloud4rpi περιέχει μια ενότητα «rpy.py» που επιστρέφει τις παραμέτρους του συστήματος Raspberry Pi, όπως το όνομα κεντρικού υπολογιστή ή τη θερμοκρασία του cpu. Δεδομένου ότι όλα αυτά τα παράθυρα είναι αποτελέσματα εκτέλεσης ορισμένων εντολών και ανάλυσης εξόδου, περιέχει επίσης μια εύχρηστη λειτουργία "parse_output" που κάνει ακριβώς αυτό που χρειάζομαι. Αυτός είναι ο τρόπος για να αποκτήσω την κατάσταση του UPS μου:

def ups_status (): result = rpi.parse_output (r'STATUS / s+: / s+(S+) ', [' /etc/init.d/apcupsd ',' status '])) εάν αποτέλεσμα: επιστροφή άλλου αποτελέσματος: επιστροφή 'ΑΓΝΩΣΤΟΣ'

Για να στείλω αυτήν την κατάσταση στο cloud4rpi, πρέπει να δηλώσω μια μεταβλητή UPSStatus και να την συνδέσω με τη λειτουργία ups_status: Τώρα μπορώ να εκτελέσω το πρόγραμμά μου:

variables = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}

Και μπορώ να δω αμέσως τη μεταβλητή μου στη σελίδα της συσκευής cloud4rpi.

Βήμα 4: Προετοιμασία για «παραγωγή»

Προετοιμασία για «παραγωγή»
Προετοιμασία για «παραγωγή»

Όλα λειτουργούν και τώρα πρέπει να προετοιμάσω τη συσκευή μου σε λειτουργία χωρίς επίβλεψη.

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

Τα αποτελέσματα αποστέλλονται στο cloud κάθε 5 λεπτά και διαγνωστικές πληροφορίες - κάθε ώρα.

# ConstantsDATA_SENDING_INTERVAL = 300 # δευτ. DIAG_SENDING_INTERVAL = 3600 # δευτερόλεπτο POLL_INTERVAL = 1 # δευτ.

Όταν αλλάζει η κατάσταση του UPS - δεν θέλω η συσκευή μου να περιμένει για 5 λεπτά και στέλνω δεδομένα αμέσως. Έτσι, έχω τροποποιήσει ελαφρώς τον κύριο βρόχο και μοιάζει με αυτό:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' ενώ True: newUPS = ups_status () if (data_timer <= 0) ή (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = new_timer: device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL sleep (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

Δοκιμή: εκτέλεση σεναρίου:

sudo python control.py

Και μπορώ να παρακολουθώ την κατάσταση του UPS στη σελίδα της συσκευής μου.

Εάν απενεργοποιήσω το UPS, η κατάσταση αλλάζει σε μερικά δευτερόλεπτα, οπότε όλα λειτουργούν. Τώρα πρέπει να ξεκινήσω το apcupsd και το control.py μου κατά την εκκίνηση του συστήματος. Η υπηρεσία Apcupsd είναι παλιά και για να την ξεκινήσω σε σύγχρονο raspbian, θα πρέπει να τροποποιήσω το αρχείο /etc/init.d/apcupsd, προσθέτοντας αυτές τις γραμμές κάπου στο επάνω μέρος:

### ΕΚΚΙΝΗΣΗ ΠΛΗΡΟΦΟΡΙΩΝ # Παρέχει: apcupsd # Απαιτείται-Έναρξη: $ all # Απαιτείται-Διακοπή: # Προεπιλογή-Έναρξη: 2 3 4 5 # Προεπιλογή-Διακοπή: # Σύντομη περιγραφή: Δαίμονας APC UPS… ### ΤΕΛΟΣ ΕΝΑΡΞΗ ΠΛΗΡΟΦΟΡΙΕΣ#

Στη συνέχεια, ενεργοποιήστε την υπηρεσία:

sudo systemctl ενεργοποίηση apcupsd

Στη συνέχεια, ξεκινήστε την υπηρεσία:

sudo systemctl εκκίνηση apcupsd

Τώρα θα ξεκινήσει το apcupsd κατά την εκκίνηση του συστήματος.

Για να εγκαταστήσω το control.py ως υπηρεσία, χρησιμοποίησα το σενάριο service_install.sh που παρέχεται:

sudo bash service_install.sh/cloud4rpi/control.py

Τώρα η υπηρεσία έχει ξεκινήσει και θα επιβιώσει από μια επανεκκίνηση.

Βήμα 5: Δημιουργία πίνακα ελέγχου

Ρύθμιση Πίνακα Ελέγχου
Ρύθμιση Πίνακα Ελέγχου

Το Cloud4rpi μου επιτρέπει να δημιουργήσω έναν πίνακα ελέγχου για τη συσκευή μου. Μπορείτε να προσθέσετε "widgets" και να τα συνδέσετε σε μεταβλητές συσκευής.

Η συσκευή μου παρέχει δύο μεταβλητές μόνο για ανάγνωση - RoomTemp και UPSStatus:

variables = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}

Πρόσθεσα 3 widget - Αριθμός για RoomTemp, Κείμενο για UPSStatus και Διάγραμμα για RoomTemp.

Μπορώ να ρυθμίσω ειδοποιήσεις, οπότε λαμβάνω ένα μήνυμα ηλεκτρονικού ταχυδρομείου όταν η θερμοκρασία είναι εκτός του καθορισμένου εύρους, το UPS είναι εκτός σύνδεσης ή η ίδια η συσκευή δεν στέλνει δεδομένα όταν πρέπει. Τώρα μπορώ να είμαι σίγουρος ότι το εξοχικό μου είναι εντάξει και μπορώ να ειδοποιηθώ όταν κάτι δεν πάει καλά, έτσι μπορώ να τηλεφωνήσω στους γείτονες και να τους ζητήσω να ελέγξουν τι συμβαίνει. Εδώ είναι ο πραγματικός κώδικας του control.py.

Συνιστάται: