Sadržaj:

Kućni nadzor "uradi sam" s RaspberryPi i Cloud4Rpi: 5 koraka
Kućni nadzor "uradi sam" s RaspberryPi i Cloud4Rpi: 5 koraka

Video: Kućni nadzor "uradi sam" s RaspberryPi i Cloud4Rpi: 5 koraka

Video: Kućni nadzor
Video: ПОЧЕМУ Я ЖДУ L4D3 2024, Studeni
Anonim
Kućni nadzor "uradi sam" s RaspberryPi i Cloud4Rpi
Kućni nadzor "uradi sam" s 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, a prekidač za isključenje sklopke ga je isključio, a i grijanje je nestalo. Imao sam sreću što sam došao tamo, 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+ s 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 guglajte kako to učiniti, i vidjet ćete mnogo ovakvih 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 od 3,3 V, a žuto je na podatku - trebalo bi ići na pin GPIO4, s otpornikom od 4,7 kOm spojenim između podataka i napajanja. Napomena: možete spojiti nekoliko senzora paralelno (digitalni su i imaju različite adrese) potreban vam je samo jedan otpornik. Nakon povezivanja senzora, trebate omogućiti 1Wire u raspi-config:

sudo raspi-config

Idite na 5 mogućnosti sučelja, omogućite P7 1-Wire i ponovno pokrenite sustav.

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 bi mi pokazalo podatke i obavijestilo me ako je uređaj na neko vrijeme isključen ili nema napajanja, ili je temperatura niska. Očito ovo ne može biti malina pi, trebao bi postojati neki poslužitelj ili usluga na internetu koja nadzire moj uređaj.

Mogu stvoriti jednostavan poslužitelj, dobiti hosting i sve postaviti, ali iskreno, ne želim. Srećom, netko je već razmišljao o ovome i stvorio cloud4rpi.io - upravljačku ploču u oblaku za vaš uređaj.

Korak 2: Postavljanje Cloud4Rpi.io

Postavljanje Cloud4Rpi.io
Postavljanje Cloud4Rpi.io

Cloud4Rpi pruža uslugu koja vašem uređaju omogućuje slanje i primanje podataka pomoću MQTT ili HTTP protokola. Oni imaju knjižnicu klijenata 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 bi trebao biti naveden 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 instalirajte cloud4rpi

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

git klon 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 redak 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 onewire ds18b20 senzore

ds_senzori = 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 jednostavno, jer ogledni program ima sve što je potrebno za rad sa senzorom ds18b20 na Raspberry Pi. Sada moram pronaći način da prijavim stanje napajanja.

Korak 3: Nadzor UPS -a

UPS Monitoring
UPS Monitoring

Sljedeće što želim pratiti je stanje UPS -a, pa ako dođe do nestanka struje, ja ću to znati 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 ga pokušao instalirati putem apt-get-a, ali mi iz različitih razloga nije uspio. 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 s 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 pogrešci.

Sada bi trebalo pokrenuti sevice apcupsd:

sudo systemctl start apcupsd

Za upitni status UPS -a mogu upotrijebiti 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. svibnja 2016.) debian UPSNAME: vcontrol KABEL: 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: srednji 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 STAL0B00B0BT0B003B004B004: 2014-06-10 NOMINV: 230 V NOMBATTV: 12,0 V NOMPOWER: 390 WAT FIRMA: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Trebam status - a to je redak "STATUS:".

Knjižnica Cloud4rpi sadrži modul ‘rpy.py’ koji vraća parametre sustava Raspberry Pi, poput imena hosta ili temperature procesora. Budući da su svi ti parametri rezultati 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 dobiti status UPS -a:

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

Da bih poslao ovaj status cloud4rpi, moram deklarirati varijablu UPSStatus i povezati je sa svojom 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 ispitivanja određuje 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, tako da sve radi. Sada moram pokrenuti apcupsd i svoj control.py pri pokretanju sustava. Apcupsd usluga je stara i da bih je 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: # Kratki opis: APC UPS demon … ### END INIT INFO#

Zatim omogućite uslugu:

sudo systemctl omogućiti apcupsd

Zatim pokrenite uslugu:

sudo systemctl start apcupsd

Sada će se apcupsd pokrenuti pri pokretanju sustava.

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 usluga pokrenuta i treba preživjeti ponovno podizanje sustava.

Korak 5: Postavljanje upravljačke ploče

Postavljanje upravljačke ploče
Postavljanje upravljačke ploče

Cloud4rpi mi omogućuje postavljanje upravljačke 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, pa dobivam 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 susjede i zamoliti ih da provjere što se događa. Evo stvarnog koda control.py.

Preporučeni: