Sommario:
- Passaggio 1: monitoraggio della temperatura
- Passaggio 2: configurazione di Cloud4Rpi.io
- Passaggio 3: monitoraggio dell'UPS
- Passaggio 4: preparazione alla "produzione"
- Passaggio 5: configurazione di un pannello di controllo
Video: Monitoraggio della casa fai da te con RaspberryPi e Cloud4Rpi: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
Un fine settimana invernale sono andato nella mia casa di campagna e ho scoperto che lì faceva molto freddo. Era successo qualcosa con l'elettricità e l'interruttore RCD l'aveva spento, e anche il riscaldamento si era spento. Sono stato fortunato a venire lì, altrimenti in diversi giorni si sarebbe tutto congelato, il che è molto negativo per i tubi e i radiatori.
Avevo diversi Raspberry Pi in giro e un sensore termico, quindi ho pensato: perché non creare un semplice dispositivo di monitoraggio? Le istruzioni seguenti presuppongono che tu abbia un Raspberry Pi con Raspbian e una connessione di rete configurata. Nel mio caso è Raspberry Pi B+ con Raspbian (2018–06–27-raspbian-stretch-lite).
Passaggio 1: monitoraggio della temperatura
Come collegare un sensore di temperatura DS18B20? Cerca su Google come fare e vedrai molte immagini come questa:
Nel mio caso avevo fili neri, gialli e rossi. Il nero è massa, va al pin Ground, il rosso è alimentazione - va al pin 3.3v e il giallo è dati - dovrebbe andare al pin GPIO4, con un resistore da 4,7 kOm collegato tra dati e alimentazione. Nota, è possibile collegare diversi sensori in parallelo (sono digitali, e hanno indirizzi diversi), è necessaria una sola resistenza. Dopo aver collegato il sensore, dovresti abilitare 1Wire nel raspi-config:
sudo raspi-config
Vai a 5 Opzioni di interfaccia, abilita P7 1-Wire e riavvia.
Quindi puoi testare se riesci a vedere il sensore:
sudo modprobe w1-gpiosudo modprobe w1-thermls /sys/bus/w1/devices/
Dovresti vedere qualcosa del genere:
pi@vcontrol:~ $ ls /sys/bus/w1/devices/28–00044eae2dff w1_bus_master1
28–00044eae2dff è il nostro sensore di temperatura.
L'hardware è pronto. Ora devo impostare la parte di monitoraggio. Ho bisogno di qualcosa che mi mostri i dati e mi avvisi se il dispositivo è scollegato per un po' o non c'è alimentazione o la temperatura è bassa. Ovviamente questo non può essere lo stesso raspberry pi, dovrebbe esserci un server o un servizio in Internet che monitora il mio dispositivo.
Posso creare un server semplice, ottenere un hosting e configurare tutto, ma onestamente non voglio. Fortunatamente, qualcuno ci ha già pensato e ha creato cloud4rpi.io, un pannello di controllo cloud per il tuo dispositivo.
Passaggio 2: configurazione di Cloud4Rpi.io
Cloud4Rpi fornisce un servizio che consente al tuo dispositivo di inviare e ricevere dati utilizzando i protocolli MQTT o HTTP. Hanno una libreria client per Python, quindi userò Python.
Gli esempi Python forniti con il servizio Cloud4Rpi contengono già il codice per il sensore di temperatura DS18B20.
Quindi sono andato su https://cloud4rpi.io, ho creato un account e ho aggiunto un nuovo dispositivo lì. La pagina del dispositivo ha un token, una stringa che identifica il dispositivo e che dovrebbe essere specificata nel programma che invia i dati.
Per cominciare, è sempre una buona idea aggiornare un gestore di pacchetti e aggiornare i pacchetti (nota: possono volerci ore se non esegui l'aggiornamento da un po' di tempo):
sudo apt-get update && sudo apt-get upgrade
Quindi, installa git, Python e il suo gestore di pacchetti Pip:
sudo apt-get install git python python-pip
Quindi, installa la libreria Python cloud4rpi:
sudo pip install cloud4rpi
Finalmente sono pronto per scrivere il mio programma di controllo. Parto da un esempio disponibile su
git clone https://github.com/cloud4rpi/cloud4rpi-raspberrypi… cloud4rpicd cloud4rpi
Il file del programma principale è control.py - devo modificarlo per le mie esigenze. Innanzitutto, modifica il programma e incolla un token:
sudo nano control.py
Trova una riga DEVICE_TOKEN='…'] e specifica lì un token del dispositivo. Dopodiché posso semplicemente eseguire il programma: funziona e riporta una temperatura nella variabile RoomTemp:
sudo python control.py
Funziona e riporta una temperatura nella variabile RoomTemp.
Nota che scopre tutti i sensori onewire ds18b20
ds_sensors = ds18b20. DS18B20.find_all()
e usa il primo sensore trovato:
RoomTemp': { 'type': 'numeric', 'bind': ds_sensors[0] if ds_sensors else Nessuno }
Ok, è stato facile, perché il programma di esempio ha tutto ciò che è necessario per funzionare con il sensore ds18b20 su Raspberry Pi. Ora devo trovare il modo di segnalare lo stato di alimentazione.
Passaggio 3: monitoraggio dell'UPS
La prossima cosa che voglio monitorare è lo stato dell'UPS, quindi se c'è un'interruzione di corrente, lo saprò prima che tutto si disconnetta.
Ho un UPS APC con controllo USB, quindi ho cercato rapidamente su Google e ho scoperto che avevo bisogno di apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Ho provato più volte a installarlo tramite apt-get e non funzionava per me per vari motivi. Mostrerò come installarlo dai sorgenti.
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
Quindi modifico apcupsd.conf per connettermi al mio UPS tramite USB.
sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE smart UPSCABLE usb # #UPSTYPE apcsmart #DEVICE /dev/ttyS0 UPSTYPE usb DEVICE
Ora posso collegare il cavo USB da UPS a RaspberryPi e verificare se l'UPS viene trovato.
sudo aptest
Non dovrebbe darti messaggi di errore.
Ora dovrebbe essere avviato il servizio apcupsd:
sudo systemctl start apcupsd
Per interrogare lo stato dell'UPS posso utilizzare un comando di stato:
sudo /etc/init.d/apcupsd status
E produrrebbe qualcosa del genere:
APC: 001, 035, 0855 DATA: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSIONE: 3.14.14 (31 maggio 2016) debian UPSNAME: vcontrol CAVO: Cavo USB DRIVER: USB UPS Driver MODALITÀ UPS: Stand Alone STARTTIME: 2018-10-14 16:54:28 +0300 MODEL: Back-UPS XS 650CI STATO: ONLINE LINEV: 238.0 Volt LOADPCT: 0.0 Percent BCHARGE: 100.0 Percent TIMELEFT: 293,3 Minuti MBATTCHG: 5 Percent MINTIMEL: 3 Minuti MAXTIME: 0 Secondi SENSE: Medio LOTRANS: 140.0 Volt HITRANS: 300.0 Volt ALARMDEL: 30 Secondi BATTV: 14,2 Volt LASTXFER: Nessun trasferimento dall'accensione NUMXFERS: 0 TONBATT: 0 Secondi CUMONBATT: 0 Secondi XOFFBATT: N/A BATTNOX STATFLAG0294508 314050000X: 2014-06-10 NOMINV: 230 Volt NOMBATTV: 12.0 Volt NOMPOWER: 390 Watt FIRMWARE: 892. R3. I USB FW:R3 END APC: 2018-10-14 16:55:38 +0300
Ho bisogno di uno stato, che è la riga "STATUS:".
La libreria Cloud4rpi contiene un modulo "rpy.py" che restituisce i parametri di sistema di Raspberry Pi come il nome host o la temperatura della CPU. Poiché tutti questi parametri sono risultati dell'esecuzione di alcuni comandi e dell'analisi dell'output, contiene anche una pratica funzione "parse_output" che fa esattamente ciò di cui ho bisogno. Ecco come ottenere lo stato del mio UPS:
def ups_status(): result = rpi.parse_output(r'STATUS\s+:\s+(S+)', ['/etc/init.d/apcupsd', 'status']) if risultato: return risultato else: return 'SCONOSCIUTO'
Per inviare questo stato a cloud4rpi, devo dichiarare una variabile UPSStatus e associarla alla mia funzione ups_status: Ora posso eseguire il mio programma:
variabili = { 'RoomTemp': { 'type': 'numeric', 'bind': ds_sensors[0] }, 'UPSStatus': { 'type': 'string', 'bind': ups_status } }
E posso vedere immediatamente la mia variabile nella pagina del dispositivo cloud4rpi.
Passaggio 4: preparazione alla "produzione"
Tutto funziona e ora devo preparare il mio dispositivo alla modalità non presidiata.
Per cominciare, regolerò gli intervalli di tempo. L'intervallo di polling definisce la frequenza con cui il programma controlla la temperatura e lo stato dell'UPS - impostalo su un secondo.
I risultati vengono inviati al cloud ogni 5 minuti e le informazioni diagnostiche ogni ora.
# ConstantsDATA_SENDING_INTERVAL = 300 # sec DIAG_SENDING_INTERVAL = 3600 # sec POLL_INTERVAL = 1 # sec
Quando lo stato dell'UPS cambia, non voglio che il mio dispositivo aspetti 5 minuti e invio i dati immediatamente. Quindi ho leggermente modificato il ciclo principale e sembra così:
data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' while True: newUPS = ups_status() if (data_timer <= 0) o (newUPS != prevUPS): device.publish_data() data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS if diag_timer <= 0: device.publish_diag() diag_timer = DIAG_SENDING_INTERVAL sleep(POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL
Test: esegui lo script:
sudo python control.py
E posso controllare lo stato dell'UPS sulla pagina del mio dispositivo.
Se spengo l'alimentazione dell'UPS, lo stato cambia in un paio di secondi, quindi tutto funziona. Ora devo avviare apcupsd e il mio control.py all'avvio del sistema. Il servizio Apcupsd è vecchio e per avviarlo su un moderno raspbian, dovrei modificare il file /etc/init.d/apcupsd, aggiungendo queste righe da qualche parte in alto:
### BEGIN INIT INFO# Fornisce: apcupsd # Required-Start: $all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Breve descrizione: APC UPS daemon… ### END INIT INFORMAZIONI#
Quindi abilita il servizio:
sudo systemctl abilita apcupsd
Quindi avvia il servizio:
sudo systemctl start apcupsd
Ora apcupsd verrà avviato all'avvio del sistema.
Per installare control.py come servizio, ho utilizzato lo script service_install.sh fornito:
sudo bash service_install.sh ~/cloud4rpi/control.py
Ora il servizio è avviato e dovrebbe sopravvivere a un riavvio.
Passaggio 5: configurazione di un pannello di controllo
Cloud4rpi mi consente di configurare un pannello di controllo per il mio dispositivo. Puoi aggiungere "widget" e associarli alle variabili del dispositivo.
Il mio dispositivo fornisce due variabili di sola lettura: RoomTemp e UPSStatus:
variabili = { 'RoomTemp': { 'type': 'numeric', 'bind': ds_sensors[0] }, 'UPSStatus': { 'type': 'string', 'bind': ups_status } }
Ho aggiunto 3 widget: Numero per RoomTemp, Testo per UPSStatus e Grafico per RoomTemp.
Posso impostare avvisi, quindi ricevo un'e-mail quando la temperatura è fuori dall'intervallo specificato, UPS è andato offline o il dispositivo stesso non invia dati quando dovrebbe. Ora posso essere sicuro che la mia casa di campagna è a posto e posso essere avvisato quando qualcosa non va, così posso telefonare ai vicini e chiedere loro di controllare cosa sta succedendo. Ecco il codice effettivo di control.py.
Consigliato:
Monitoraggio della temperatura della piscina MQTT: 7 passaggi (con immagini)
MQTT Swimming Pool Temperature Monitor: questo progetto è un compagno dei miei altri progetti di automazione domestica Smart Data-Logging Geyser Controller e Multi-purpose-Room-Lighting and Appliance Controller. È un monitor montato a lato della piscina che misura la temperatura dell'acqua della piscina, l'aria ambiente
Kit per auto di monitoraggio robot intelligente fai-da-te Monitoraggio fotosensibile dell'auto: 7 passaggi
Fai da te Smart Robot Tracking Car Kit Tracking Car Photosensitive: Design by SINONING ROBOTÈ possibile acquistare da tracking robot carTheoryLM393 chip confrontare i due fotoresistori, quando c'è un LED fotoresistore laterale su BIANCO il lato del motore si fermerà immediatamente, l'altro lato del motore girare, in modo che
Monitoraggio dell'umidità e della temperatura della casa: 11 passaggi
Monitoraggio dell'umidità e della temperatura della casa: ciao ragazzi! Per iniziare nel migliore dei modi, un piccolo racconto sul progetto. Mi sono recentemente laureato e mi sono trasferito in Austria per la mia prima posizione come ingegnere. Il paese è bellissimo ma molto freddo & umido nella stagione invernale. Ho iniziato velocemente
Automazione e monitoraggio della casa controllati da voce/Internet fai da te utilizzando ESP8266 e Google Home Mini: 6 passaggi
Automazione e monitoraggio della casa controllati da voce/Internet fai da te utilizzando ESP8266 e Google Home Mini: Ehi!! Dopo una lunga pausa sono qui che tutti noi dobbiamo fare qualcosa di noioso per guadagnare. Dopo tutti gli articoli di DOMOTICA che ho scritto da BLUETOOTH, IR, Local WIFI, Cloud cioè quelli difficili, *ORA* arriva il il più semplice ma il più efficiente
Monitoraggio della casa intelligente con Alexa e Arduino: 9 passaggi (con immagini)
Monitoraggio della casa intelligente utilizzando Alexa e Arduino: nel mondo attuale le persone trascorrono più tempo sul posto di lavoro piuttosto che a casa. Quindi c'è bisogno di un sistema di monitoraggio domestico in cui le persone possono conoscere le condizioni della casa mentre sono al lavoro. Sarebbe ancora meglio se uno c