Kućni nadzor „uradi sam“sa RaspberryPi i Cloud4Rpi: 5 koraka
Kućni nadzor „uradi sam“sa RaspberryPi i Cloud4Rpi: 5 koraka
Anonim
Kućni nadzor "uradi sam" sa RaspberryPi i Cloud4Rpi
Kućni nadzor "uradi sam" sa RaspberryPi i Cloud4Rpi

Jednog zimskog vikenda otišao sam u svoju seosku kuću i otkrio da je tamo jako hladno. Nešto se dogodilo s električnom energijom i sklopka je isključena, pa je i grijanje nestalo. Imao sam sreću da sam došao, inače bi za nekoliko dana sve bilo smrznuto, što je jako loše za cijevi i radijatore.

U blizini sam imao nekoliko Raspberry Pi i termalni senzor, pa sam pomislio - zašto ne napravim jednostavan uređaj za nadzor? Upute u nastavku pretpostavljaju da imate Raspberry Pi s postavljenom Raspbian i mrežnom vezom. U mom slučaju to je Raspberry Pi B+ sa Raspbian-om (2018–06–27-raspbian-stretch-lite).

Korak 1: Nadzor temperature

Nadzor temperature
Nadzor temperature
Nadzor temperature
Nadzor temperature

Kako spojiti senzor temperature DS18B20? Samo poguglajte kako to učiniti, i vidjet ćete mnogo sličnih slika:

U mom slučaju imao sam crnu, žutu i crvenu žicu. Crno je uzemljeno, ide na pin za uzemljenje, crveno je na napajanju - ide na pin 3.3V, a žuto je na podacima - trebalo bi ići na pin GPIO4, s otpornikom od 4,7 kOm spojenim na podatke i napajanje. Napomena: možete spojiti nekoliko senzora paralelno (digitalni su i imaju različite adrese) potreban vam je samo jedan otpornik. Nakon povezivanja senzora, trebali biste omogućiti 1Wire u raspi-config:

sudo raspi-config

Idite na 5 opcija povezivanja, omogućite P7 1-Wire i ponovo pokrenite sistem.

Zatim možete testirati možete li vidjeti senzor:

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

Trebali biste vidjeti ovako nešto:

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

28–00044eae2dff je naš senzor temperature.

Hardver je spreman. Sada moram postaviti dio za nadzor. Trebam nešto što će mi pokazati podatke i obavijestiti me ako je uređaj na neko vrijeme isključen ili nema napajanja, ili je temperatura niska. Očigledno ovo ne može biti malina pi, trebao bi postojati neki server ili usluga na internetu koja nadgleda moj uređaj.

Mogu stvoriti jednostavan server, nabaviti hosting i sve postaviti, ali iskreno, ne želim. Srećom, netko je već razmišljao o ovome i stvorio cloud4rpi.io - oblačnu kontrolnu ploču za vaš uređaj.

Korak 2: Postavljanje Cloud4Rpi.io

Postavljanje Cloud4Rpi.io
Postavljanje Cloud4Rpi.io

Cloud4Rpi pruža uslugu koja omogućava vašem uređaju da šalje i prima podatke pomoću MQTT ili HTTP protokola. Imaju klijentsku biblioteku za Python, pa ću koristiti Python.

Primjeri Pythona koji dolazi s Cloud4Rpi uslugom već sadrže kod za senzor temperature DS18B20.

Pa sam otišao na https://cloud4rpi.io, stvorio račun i tamo dodao novi uređaj. Stranica uređaja ima token - niz koji identificira uređaj i koji treba navesti u programu koji šalje podatke.

Za početak, uvijek je dobra ideja ažurirati upravitelja paketa i nadograditi pakete (napomena: mogu proći sati ako niste nadograđivali neko vrijeme):

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

Zatim instalirajte git, Python i njegov upravitelj paketa Pip:

sudo apt-get install git python python-pip

Zatim instalirajte biblioteku cloud4rpi Python:

sudo pip install cloud4rpi

Konačno, spreman sam za pisanje svog kontrolnog programa. Polazim od primjera dostupnog na

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

Glavna programska datoteka je control.py - moram je izmijeniti za svoje potrebe. Prvo uredite program i zalijepite token:

sudo nano control.py

Pronađite liniju DEVICE_TOKEN = '…'] i tamo navedite token uređaja. Nakon toga mogu jednostavno pokrenuti program: On radi i izvještava o temperaturi u varijabli RoomTemp:

sudo python control.py

Radi i prijavljuje temperaturu u varijabli RoomTemp.

Imajte na umu da otkriva sve jednožične ds18b20 senzore

ds_sensors = ds18b20. DS18B20.find_all ()

i koristi prvi pronađeni senzor:

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

U redu, to je bilo lako, jer ogledni program ima sve što je potrebno za rad sa ds18b20 senzorom na Raspberry Pi. Sada moram pronaći način da prijavim status napajanja.

Korak 3: Nadzor UPS -a

UPS Monitoring
UPS Monitoring

Sljedeća stvar koju želim nadzirati je status UPS -a, pa ako dođe do nestanka struje, znat ću za to prije nego se sve prekine.

Imam APC UPS sa USB kontrolom, pa sam brzo proguglao i otkrio da mi treba apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Nekoliko puta sam pokušao da ga instaliram putem apt-get-a, ali mi nije uspio iz različitih razloga. Pokazat ću kako ga instalirati iz izvora.

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

Zatim uređujem apcupsd.conf za povezivanje sa UPS -om putem USB -a.

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

Sada mogu priključiti USB kabel iz UPS -a u RaspberryPi i testirati hoće li se pronaći UPS.

sudo apctest

Ne bi vam trebao slati poruke o grešci.

Sada bi trebalo pokrenuti sevice apcupsd:

sudo systemctl pokrenite apcupsd

Za upitan status UPS -a mogu koristiti naredbu statusa:

sudo /etc/init.d/apcupsd status

I ispisalo bi nešto ovako:

APC: 001, 035, 0855DATUM: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERZIJA: 3.14.14 (31. maj 2016.) debian UPSNAME: vcontrol KABL: USB kabel DRIVER: USB UPS upravljački program UPSMODE: Samostalno STARTTIME: 2018-10-14 16:54:28 +0300 MODEL: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238,0 volti LOADPCT: 0,0 posto BCHARGE: 100,0 posto TIMEELEFT: 293,3 minute MBATTCHG: 5 posto MINTIMEL: 3 minute MAXTIME 0 sekundi SENSE: Srednje LOTRANI: 140,0 Volti HITRANS: 300,0 Volti ALARMDEL: 30 sekundi BATTV: 14,2 Volti POSLJEDNJI: Nema prijenosa od okreta NUMXFERS: 0 TONBATT: 0 Sekundi CUMONBATT: 0 Sekundi XOFFBATT: N/A STATBOJ0B0BT0B00B0BT0B00B0BT0B00B000B004: 2014-06-10 NOMINV: 230 V NOMBATTV: 12,0 V NOMPOWER: 390 W FIRMA: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Treba mi status - a to je red "STATUS:".

Biblioteka Cloud4rpi sadrži modul ‘rpy.py’ koji vraća sistemske parametre Raspberry Pi -a, poput imena hosta ili temperature procesora. Budući da su svi ti parametri rezultat pokretanja nekih naredbi i raščlanjivanja izlaza, oni također sadrže zgodnu funkciju ‘parse_output’ koja radi upravo ono što mi treba. Evo kako da dobijem svoj UPS status:

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

Da bih poslao ovaj status cloud4rpi, moram deklarirati varijablu UPSStatus i povezati je sa mojom funkcijom ups_status: Sada mogu pokrenuti svoj program:

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

I odmah mogu vidjeti svoju varijablu na stranici uređaja cloud4rpi.

Korak 4: Priprema za "proizvodnju"

Priprema za "proizvodnju"
Priprema za "proizvodnju"

Sve funkcionira i sada moram svoj uređaj pripremiti na način rada bez nadzora.

Za početak ću prilagoditi vremenske intervale. Interval ankete definira koliko često program provjerava temperaturu i stanje UPS -a - postavite ga na jednu sekundu.

Rezultati se šalju u oblak svakih 5 minuta, a dijagnostičke informacije - svaki sat.

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

Kad se status UPS -a promijeni - ne želim da moj uređaj čeka 5 minuta i odmah šaljem podatke. Pa sam malo izmijenio glavnu petlju i izgleda ovako:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' dok je True: newUPS = ups_status () if (data_timer <= 0) ili (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = new = UPS ako je diag_timer device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL spavanje (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

Testiranje: pokrenite skriptu:

sudo python control.py

I mogu gledati stanje UPS -a na stranici svog uređaja.

Ako isključim napajanje UPS -a, status se promijeni za nekoliko sekundi, pa sve radi. Sada moram pokrenuti apcupsd i moj control.py pri pokretanju sistema. Apcupsd servis je star i da bih ga pokrenuo na modernom raspbianu, trebao bih izmijeniti /etc/init.d/apcupsd datoteku dodavanjem ovih redaka negdje pri vrhu:

### BEGIN INIT INFO # Pruža: apcupsd # Obavezno-početak: $ all # Obavezno-zaustavljanje: # Zadano-pokretanje: 2 3 4 5 # Zadano-zaustavljanje: # Kratak opis: APC UPS demon … ### END INIT INFO#

Zatim omogućite uslugu:

sudo systemctl enable apcupsd

Zatim pokrenite uslugu:

sudo systemctl pokrenite apcupsd

Sada će se apcupsd pokrenuti pri pokretanju sistema.

Da bih instalirao control.py kao uslugu, upotrijebio sam priloženu skriptu service_install.sh:

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

Sada je servis pokrenut i treba preživjeti ponovno pokretanje.

Korak 5: Postavljanje kontrolne ploče

Postavljanje kontrolne ploče
Postavljanje kontrolne ploče

Cloud4rpi mi omogućuje postavljanje kontrolne ploče za moj uređaj. Možete dodati „widgete“i povezati ih s varijablama uređaja.

Moj uređaj nudi dvije varijable samo za čitanje - RoomTemp i UPSStatus:

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

Dodao sam 3 widgeta - broj za RoomTemp, Tekst za UPSStatus i grafikon za RoomTemp.

Mogu postaviti upozorenja, tako da primam e -poruku kada je temperatura izvan navedenog raspona, UPS se isključio ili sam uređaj ne šalje podatke kada bi trebao. Sada mogu biti siguran da je moja seoska kuća u redu i mogu biti obaviješten kad nešto nije u redu, mogu nazvati komšije i zamoliti ih da provjere šta se dešava. Evo stvarnog koda control.py.

Preporučuje se: