Kazalo:

Domači nadzor doma z RaspberryPi in Cloud4Rpi: 5 korakov
Domači nadzor doma z RaspberryPi in Cloud4Rpi: 5 korakov

Video: Domači nadzor doma z RaspberryPi in Cloud4Rpi: 5 korakov

Video: Domači nadzor doma z RaspberryPi in Cloud4Rpi: 5 korakov
Video: 97% Owned: The Money System | Finance Documentary Film (Netflix) 2024, November
Anonim
Naredite hišni nadzor z RaspberryPi in Cloud4Rpi
Naredite hišni nadzor z RaspberryPi in Cloud4Rpi

Nekega zimskega vikenda sem šel na svojo podeželsko hišo in ugotovil, da je tam zelo hladno. Nekaj se je zgodilo z elektriko in RCD ga je izklopil, ogrevanje pa je tudi izginilo. Imel sem srečo, da sem prišel tja, sicer bi bilo v nekaj dneh vse zmrznjeno, kar je zelo slabo za cevi in radiatorje.

V bližini sem imel več Raspberry Pi in termični senzor, zato sem pomislil - zakaj ne bi naredil preproste nadzorne naprave? Spodnja navodila predvidevajo, da imate Raspberry Pi z nastavljeno Raspbian in omrežno povezavo. V mojem primeru je to Raspberry Pi B+ z Raspbian (2018–06–27-raspbian-stretch-lite).

1. korak: Nadzor temperature

Nadzor temperature
Nadzor temperature
Nadzor temperature
Nadzor temperature

Kako priključiti temperaturni senzor DS18B20? Samo poiščite, kako to storite, in videli boste veliko podobnih slik:

V mojem primeru sem imel črne, rumene in rdeče žice. Črna je ozemljena, gre na ozemljitveni zatič, rdeča za napajanje - preide na 3.3v pin, rumena pa za podatke - bi morala iti na pin GPIO4, z uporom 4,7 kOm med podatki in napajanjem. vzporedno (digitalni so in imajo različne naslove) potrebujete le en upor. Ko priključite senzor, morate v raspi-config omogočiti 1Wire:

sudo raspi-config

Pojdite na 5 možnosti vmesnika, omogočite P7 1-Wire in znova zaženite.

Nato lahko preizkusite, ali vidite senzor:

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

Morali bi videti nekaj takega:

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

28–00044eae2dff je naš temperaturni senzor.

Strojna oprema je pripravljena. Zdaj moram nastaviti nadzorni del. Potrebujem nekaj, kar bi mi pokazalo podatke in me obvestilo, če je naprava za nekaj časa odklopljena ali ni električne energije ali je temperatura nizka. Očitno to ne more biti malinovo pi, sam internetni strežnik ali storitev bi morala spremljati mojo napravo.

Lahko ustvarim preprost strežnik, dobim gostovanje in vse nastavim, ampak iskreno, nočem. Na srečo je o tem že kdo razmišljal in ustvaril cloud4rpi.io - nadzorno ploščo v oblaku za vašo napravo.

2. korak: Nastavitev Cloud4Rpi.io

Nastavitev Cloud4Rpi.io
Nastavitev Cloud4Rpi.io

Cloud4Rpi ponuja storitev, ki vaši napravi omogoča pošiljanje in sprejemanje podatkov z uporabo protokolov MQTT ali HTTP. Imajo knjižnico odjemalcev za Python, zato bom uporabil Python.

Primeri Pythona, ki so priloženi storitvi Cloud4Rpi, že vsebujejo kodo za senzor temp. DS18B20.

Tako sem šel na https://cloud4rpi.io, ustvaril račun in tam dodal novo napravo. Na strani naprave je žeton - niz, ki identificira napravo, in ga je treba navesti v programu, ki pošilja podatke.

Za začetek je vedno dobro posodobiti upravitelja paketov in nadgraditi pakete (opomba: lahko traja nekaj ur, če nekaj časa niste nadgradili):

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

Nato namestite git, Python in njegov upravitelj paketov Pip:

sudo apt-get install git python python-pip

Nato namestite knjižnico Python cloud4rpi:

sudo pip namestite cloud4rpi

Končno sem pripravljen napisati svoj nadzorni program. Izhajam iz primera, ki je na voljo na

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

Glavna programska datoteka je control.py - za svoje potrebe jo moram spremeniti. Najprej uredite program in prilepite žeton:

sudo nano control.py

Poiščite vrstico DEVICE_TOKEN = '…'] in tam podajte žeton naprave. Po tem lahko preprosto zaženem program: deluje in poroča o temperaturi v spremenljivki RoomTemp:

sudo python control.py

Deluje in poroča o temperaturi v spremenljivki RoomTemp.

Upoštevajte, da odkriva vse senzorje onewire ds18b20

ds_sensors = ds18b20. DS18B20.find_all ()

in uporablja prvi najdeni senzor:

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

V redu, to je bilo enostavno, saj ima vzorčni program vse, kar je potrebno za delo s senzorjem ds18b20 na Raspberry Pi. Zdaj moram najti način za poročanje o stanju napajanja.

3. korak: Nadzor UPS

Nadzor UPS
Nadzor UPS

Naslednja stvar, ki jo želim spremljati, je stanje UPS, zato bom, če pride do izpada električne energije, to izvedel, preden se vse prekine.

Imam APC UPS z USB krmiljenjem, zato sem hitro pobrskal in ugotovil, da potrebujem apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Večkrat sem ga poskusil namestiti prek apt-get in mi iz različnih razlogov ni delovalo. Pokazal bom, kako ga namestiti iz virov.

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

Nato uredim apcupsd.conf, da se povežem z UPS prek usb.

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

Zdaj lahko priključim kabel USB iz UPS v RaspberryPi in preizkusim, če bi našli UPS.

sudo apctest

Ne bi smel sporočiti nobenih sporočil o napakah.

Zdaj je treba zagnati aplikacijo sevice apcupsd:

sudo systemctl zaženite apcupsd

Za zahtevno stanje UPS -a lahko uporabim ukaz za stanje:

sudo /etc/init.d/apcupsd status

In prikazalo bi se nekaj takega:

APC: 001, 035, 0855DATE: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERZIJA: 3.14.14 (31. maj 2016) debian UPSNAME: vcontrol CABLE: USB kabel DRIVER: USB UPS Driver UPSMODE: Stand Alone STARTTIME: 2018-10-14 16:54:28 +0300 MODEL: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238,0 voltov LOADPCT: 0,0 odstotka BCHARGE: 100,0 odstotka TIMEELEFT: 293,3 minute MBATTCHG: 5 odstotkov MINTIMEL: 3 minute MAXTIME 0 sekund SENSE: srednji LOTRANS: 140,0 voltov HITRANS: 300,0 voltov ALARMDEL: 30 sekund BATTV: 14,2 voltov LASTXFER: od preklopa ni prenosov NUMXFERS: 0 TONBATT: 0 sekund CUMONBATT: 0 sekund XOFFBATT: N/A STATX0BT0B00B004: 2014-06-10 NOMINV: 230 V NOMBATTV: 12,0 V NOMPOWER: 390 W FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Potrebujem status - to je vrstica "STATUS:".

Knjižnica Cloud4rpi vsebuje modul ‘rpy.py’, ki vrne sistemske parametre Raspberry Pi, kot sta ime gostitelja ali temperatura procesorja. Ker so vsi ti parametri rezultat izvajanja nekaterih ukazov in razčlenitve izhoda, vsebuje tudi priročno funkcijo 'parse_output', ki naredi točno tisto, kar potrebujem. Tako dobim svoj status UPS:

def ups_status (): result = rpi.parse_output (r'STATUS / s+: / s+( S+) ', [' /etc/init.d/apcupsd ',' status ']) če je rezultat: return result else: return 'NEPOZNATO'

Če želite poslati to stanje v cloud4rpi, moram razglasiti spremenljivko UPSStatus in jo povezati z mojo funkcijo ups_status: Zdaj lahko zaženem svoj program:

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

Svojo spremenljivko lahko takoj vidim na strani naprave cloud4rpi.

4. korak: Priprava na "proizvodnjo"

Priprava na "proizvodnjo"
Priprava na "proizvodnjo"

Vse deluje, zdaj pa moram svojo napravo pripraviti na način brez nadzora.

Za začetek bom prilagodil časovne intervale. Interval ankete določa, kako pogosto program preverja temperaturo in stanje UPS - nastavite ga na eno sekundo.

Rezultati se pošljejo v oblak vsakih 5 minut, diagnostični podatki pa vsako uro.

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

Ko se stanje UPS spremeni - ne želim, da moja naprava čaka 5 minut, in podatke pošljem takoj. Zato sem nekoliko spremenil glavno zanko in izgleda tako:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' medtem ko je True: newUPS = ups_status () if (data_timer <= 0) ali (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS če diag_timer < device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL spanje (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

Testiranje: zaženi skript:

sudo python control.py

In stanje UPS lahko spremljam na strani svoje naprave.

Če izklopim napajanje UPS, se stanje spremeni v nekaj sekundah, tako da vse deluje. Zdaj moram ob zagonu sistema zagnati apcupsd in moj control.py. Storitev Apcupsd je stara in za zagon v sodobnem raspbianu bi morala spremeniti datoteko /etc/init.d/apcupsd, tako da nekje na vrhu dodam te vrstice:

### BEGIN INIT INFO # Zagotavlja: apcupsd # Zahtevan-začetek: $ all # Zahtevan-Stop: # Privzeti zagon: 2 3 4 5 # Default-Stop: # Kratek opis: demon APC UPS… ### END INIT INFO#

Nato omogočite storitev:

sudo systemctl omogoči apcupsd

Nato zaženite storitev:

sudo systemctl zaženite apcupsd

Zdaj se bo program apcupsd zagnal ob zagonu sistema.

Za namestitev control.py kot storitve sem uporabil priloženi skript service_install.sh:

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

Zdaj je storitev zagnana in mora preživeti ponovni zagon.

5. korak: Nastavitev nadzorne plošče

Nastavitev nadzorne plošče
Nastavitev nadzorne plošče

Cloud4rpi mi omogoča nastavitev nadzorne plošče za mojo napravo. Dodate lahko »pripomočke« in jih povežete s spremenljivkami naprave.

Moja naprava ponuja dve spremenljivki samo za branje - RoomTemp in UPSStatus:

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

Dodal sem 3 pripomočke - številko za RoomTemp, Besedilo za UPSStatus in grafikon za RoomTemp.

Lahko nastavim opozorila, zato prejmem e -poštno sporočilo, ko je temperatura zunaj določenega območja, UPS je bil brez povezave ali pa naprava sama ne pošilja podatkov, ko bi morala. Zdaj sem lahko prepričan, da je moja hiša v redu, in me lahko obvestijo ko je kaj narobe, lahko pokličem sosede in jih prosim, naj preverijo, kaj se dogaja. Tukaj je dejanska koda control.py.

Priporočena: