Taula de continguts:

Monitorització de casa DIY amb RaspberryPi i Cloud4Rpi: 5 passos
Monitorització de casa DIY amb RaspberryPi i Cloud4Rpi: 5 passos

Vídeo: Monitorització de casa DIY amb RaspberryPi i Cloud4Rpi: 5 passos

Vídeo: Monitorització de casa DIY amb RaspberryPi i Cloud4Rpi: 5 passos
Vídeo: ✅ Sensor de Distancia (proximidad) hasta 5 metros / HC-SR04 y ARDUINO 2024, Desembre
Anonim
Monitoratge de casa DIY amb RaspberryPi i Cloud4Rpi
Monitoratge de casa DIY amb RaspberryPi i Cloud4Rpi

Un cap de setmana d’hivern vaig anar a la meva casa de camp i em vaig assabentar que allà feia molt de fred. Alguna cosa havia passat amb l’electricitat i l’interruptor RCD l’havia apagat i la calefacció també es va apagar. Vaig tenir la sort d'arribar-hi, en cas contrari en diversos dies tot hauria estat congelat, cosa que és molt dolent per a les canonades i els radiadors.

Tenia diversos Raspberry Pi al voltant i un sensor tèrmic, així que vaig pensar: per què no faig un simple dispositiu de control? Les instruccions següents suposen que teniu configurat un Raspberry Pi amb Raspbian i una connexió de xarxa. En el meu cas, es tracta de Raspberry Pi B + amb Raspbian (2018-06-27-raspbian-stretch-lite).

Pas 1: control de la temperatura

Monitorització de la temperatura
Monitorització de la temperatura
Monitorització de la temperatura
Monitorització de la temperatura

Com connectar un sensor de temperatura DS18B20? Només cal que feu google com fer-ho i veureu moltes imatges com aquesta:

En el meu cas tenia cables negres, grocs i vermells. El negre està connectat a terra, passa al pin de terra, el vermell és alimentat (passa a pin de 3,3 v i el groc és dades) hauria d’anar al pin GPIO4, amb una resistència de 4,7 kOm connectada entre dades i alimentació. Tingueu en compte que podeu connectar diversos sensors en paral·lel (són digitals i tenen adreces diferents), només necessiteu una resistència. Després de connectar el sensor, heu d’habilitar 1Wire al raspi-config:

sudo raspi-config

Aneu a 5 opcions d’interfície, activeu P7 1-Wire i reinicieu.

A continuació, podeu provar si podeu veure el sensor:

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

Hauríeu de veure alguna cosa així:

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

28–00044eae2dff és el nostre sensor de temperatura.

El maquinari està a punt. Ara he de configurar la part de supervisió. Necessito alguna cosa que em mostri les dades i em notifiqui si el dispositiu està desconnectat durant un temps o si no hi ha alimentació o la temperatura és baixa. Viouslybviament, això no pot ser el mateix raspberry pi, hi hauria d’haver algun servidor o servei a Internet que supervisi el meu dispositiu.

Puc crear un servidor senzill, obtenir un allotjament i configurar-ho tot, però de veritat, no vull. Per sort, algú ja hi ha pensat i ha creat cloud4rpi.io, un tauler de control del núvol per al vostre dispositiu.

Pas 2: Configuració de Cloud4Rpi.io

Configuració de Cloud4Rpi.io
Configuració de Cloud4Rpi.io

Cloud4Rpi proporciona un servei que permet al vostre dispositiu enviar i rebre dades mitjançant protocols MQTT o HTTP. Tenen una biblioteca client per a Python, així que faré servir Python.

Els exemples de Python que inclou el servei Cloud4Rpi ja contenen codi per al sensor de temperatura DS18B20.

Així que vaig anar a https://cloud4rpi.io, vaig crear un compte i hi vaig afegir un dispositiu nou. La pàgina del dispositiu té un testimoni: una cadena que identifica el dispositiu i que s’hauria d’especificar al programa que envia dades.

Per començar, sempre és una bona idea actualitzar un gestor de paquets i actualitzar els paquets (nota: pot trigar hores si no l’heu actualitzat durant un temps):

sudo apt-get update && sudo apt-get upgrade

A continuació, instal·leu git, Python i el seu gestor de paquets Pip:

sudo apt-get install git python python-pip

A continuació, instal·leu la biblioteca Python cloud4rpi:

sudo pip instal·la cloud4rpi

Finalment, estic preparat per escriure el meu programa de control. Començo de l'exemple disponible a

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

El fitxer principal del programa és control.py: he de modificar-lo segons les meves necessitats. Primer, editeu el programa i enganxeu un testimoni:

sudo nano control.py

Cerqueu una línia DEVICE_TOKEN = '…'] i especifiqueu-hi un testimoni de dispositiu. Després, simplement puc executar el programa: Funciona i informa de la temperatura de la variable RoomTemp:

sudo python control.py

Funciona i informa d'una temperatura a la variable RoomTemp.

Tingueu en compte que descobreix tots els sensors onewire ds18b20

ds_sensors = ds18b20. DS18B20.find_all ()

i utilitza el primer sensor trobat:

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

D’acord, va ser fàcil, perquè el programa d’exemple té tot el necessari per treballar amb el sensor ds18b20 a Raspberry Pi. Ara he de trobar la manera d'informar de l'estat de la potència.

Pas 3: supervisió del SAI

Monitorització de SAI
Monitorització de SAI

El següent que vull controlar és l'estat del SAI, de manera que si hi ha un tall de corrent, ho sabré abans que tot es desconnecti.

Tinc un SAI APC amb control USB, així que vaig buscar ràpidament a Google i vaig trobar que necessitava apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Vaig provar diverses vegades d'instal·lar-lo mitjançant apt-get i no funcionava per a mi per diversos motius. Mostraré com instal·lar-lo des de les fonts.

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

Després edito apcupsd.conf per connectar-me al meu SAI mitjançant usb.

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

Ara puc connectar el cable USB de l'UPS a RaspberryPi i provar si es trobaria l'UPS.

sudo apctest

No us ha de donar cap missatge d'error.

Ara s'hauria d'iniciar sevice apcupsd:

sudo systemctl iniciar apcupsd

Per consultar l'estat del SAI, puc utilitzar una ordre d'estat:

estat sudo /etc/init.d/apcupsd

I sortiria alguna cosa així:

APC: 001, 035, 0855 DATA: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSIÓ: 3.14.14 (31 de maig de 2016) debian UPSNAME: vcontrol CABLE: Cable USB DRIVER: USB UPS Driver UPSMODE: Stand Alone HORA D'INICI: 2018-10-14 16:54:28 +0300 MODEL: Còpia de seguretat UPS XS 650CI ESTAT: LINEV EN LÍNIA: 238,0 volts LOADPCT: 0,0 Percent BCHARGE: 100,0 Percentatge TIMELEFT: 293,3 Minuts MBATTCHG: 5 Percentatge MINTIMEL: 3 Minuts MÀXIMA: 0 segons SENSE: Mitjà LOTRANS: 140,0 volts HITRANS: 300,0 volts ALARMDEL: 30 segons BATTV: 14,2 volts LASTXFER: No hi ha transferències des del turnó NUMXFERS: 0 TONBATT: 0 segons CUMONBATT: 0 segons XOFFBATT: N / A STATFLAG: 0x0500: 0x0500: 0x0500: 2014-06-10 NOMINV: 230 volts NOMBATTV: 12,0 volts NOMPOWER: 390 watts FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Necessito un estat, que és la línia "ESTAT:".

La biblioteca Cloud4rpi conté un mòdul ‘rpy.py’ que retorna paràmetres del sistema Raspberry Pi, com ara el nom d’amfitrió o la temperatura de la CPU. Com que tots aquests paràmetres són el resultat d’executar algunes ordres i analitzar la sortida, també conté una pràctica funció ‘parse_output’ que fa exactament el que necessito. Aquesta és la manera d'obtenir l'estat del meu SAI:

def ups_status (): result = rpi.parse_output (r'STATUS / s +: / s + (S +) ', [' /etc/init.d/apcupsd ',' status ']) if result: return result else: return "DESCONEGUT"

Per enviar aquest estat a cloud4rpi, he de declarar una variable UPSStatus i vincular-la a la meva funció ups_status: Ara puc executar el meu programa:

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

I immediatament puc veure la meva variable a la pàgina del dispositiu cloud4rpi.

Pas 4: Preparació per a la "producció"

Preparació per a la "producció"
Preparació per a la "producció"

Tot està funcionant i ara he de preparar el dispositiu al mode sense vigilància.

Per començar, ajustaré els intervals de temps. L’interval d’enquesta defineix la freqüència amb què el programa comprova la temperatura i l’estat del SAI; establiu-lo a un segon.

Els resultats s’envien al núvol cada 5 minuts i la informació de diagnòstic cada hora.

# ConstantsDATA_SENDING_INTERVAL = 300 # s DIAG_SENDING_INTERVAL = 3600 # s POLL_INTERVAL = 1 # s

Quan canvia l’estat del SAI, no vull que el meu dispositiu esperi 5 minuts i enviï dades immediatament. Així que he modificat lleugerament el bucle principal i té el següent aspecte:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' mentre és True: newUPS = ups_status () if (data_timer <= 0) or (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

Prova: executeu l'script:

sudo python control.py

I puc veure l’estat del SAI a la pàgina del meu dispositiu.

Si apago l’alimentació del SAI, l’estat canvia en un parell de segons, de manera que tot funciona. Ara he de començar apcupsd i el meu control.py a l’arrencada del sistema. El servei Apcupsd és antic i per iniciar-lo en raspbian modern, hauria de modificar el fitxer /etc/init.d/apcupsd, afegint aquestes línies en algun lloc de la part superior:

### BEGIN INIT INFO # Proporciona: apcupsd # Required-Start: $ all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short Description: APC UPS daemon … ### END INIT INFO #

A continuació, activeu el servei:

sudo systemctl habilita apcupsd

A continuació, inicieu el servei:

sudo systemctl iniciar apcupsd

Ara apcupsd s'iniciarà a l'inici del sistema.

Per instal·lar control.py com a servei, he utilitzat l'script service_install.sh subministrat:

sudo bash service_install.sh ~ / cloud4rpi / control.py

Ara s’inicia el servei i sobreviu a un reinici.

Pas 5: Configuració d'un tauler de control

Configuració d'un tauler de control
Configuració d'un tauler de control

Cloud4rpi em permet configurar un tauler de control per al meu dispositiu. Podeu afegir "ginys" i enllaçar-los a les variables del dispositiu.

El meu dispositiu proporciona dues variables de només lectura: RoomTemp i UPSStatus:

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

He afegit 3 ginys: número per RoomTemp, text per UPSStatus i un gràfic per RoomTemp.

Puc configurar alertes, de manera que rebo un missatge de correu electrònic quan la temperatura està fora del rang especificat, el SAI es desconnecta o el dispositiu en si no envia dades quan cal. Ara puc estar segur que la meva casa de camp està bé i puc rebre notificacions quan alguna cosa no funciona, així que puc trucar als veïns i demanar-los que comprovin què passa. Aquí teniu el codi real de control.py.

Recomanat: