Sisukord:

DIY maja jälgimine RaspberryPi ja Cloud4Rpi abil: 5 sammu
DIY maja jälgimine RaspberryPi ja Cloud4Rpi abil: 5 sammu

Video: DIY maja jälgimine RaspberryPi ja Cloud4Rpi abil: 5 sammu

Video: DIY maja jälgimine RaspberryPi ja Cloud4Rpi abil: 5 sammu
Video: ZEITGEIST: MOVING FORWARD | OFFICIAL RELEASE | 2011 2024, November
Anonim
DIY maja jälgimine RaspberryPi ja Cloud4Rpi abil
DIY maja jälgimine RaspberryPi ja Cloud4Rpi abil

Ühel talvisel nädalavahetusel läksin maamajja ja sain teada, et seal on väga külm. Midagi oli juhtunud elektriga ja RCD kaitselüliti oli selle välja lülitanud ning ka küte läks välja. Mul vedas, et tulin sinna, muidu oleks mitme päevaga kõik külmunud, mis on torudele ja radiaatoritele väga halb.

Mul oli mitu Raspberry Pi -d ja termoandur, nii et mõtlesin - miks ma ei tee lihtsat jälgimisseadet? Allpool toodud juhised eeldavad, et teil on Raspberry Pi koos Raspbiani ja võrguühendusega. Minu puhul on see Raspberry Pi B+ koos Raspbianiga (2018–06–27-raspbian-stretch-lite).

Samm: temperatuuri jälgimine

Temperatuuri jälgimine
Temperatuuri jälgimine
Temperatuuri jälgimine
Temperatuuri jälgimine

Kuidas ühendada temperatuuriandur DS18B20? Lihtsalt googeldage, kuidas seda teha, ja näete palju selliseid pilte:

Minu puhul olid mul mustad, kollased ja punased juhtmed. Must on maandatud, läheb maandusnõelale, punane on toide - läheb 3,3 -voldisele ja kollane on andmed - peaks minema GPIO4 kontaktile, andmete ja toite vahel on ühendatud 4,7 kOm takisti. Märkus. Saate ühendada mitu andurit paralleelselt (need on digitaalsed ja neil on erinevad aadressid) vajate ainult ühte takistit. Pärast anduri ühendamist peaksite lubama 1Wire raspi-konfiguratsioonis:

sudo raspi-config

Minge 5 liidesevaliku juurde, lubage P7 1-Wire ja taaskäivitage.

Seejärel saate testida, kas näete andurit:

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

Peaksite nägema midagi sellist:

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

28–00044eae2dff on meie temperatuuriandur.

Riistvara on valmis. Nüüd pean seadistama jälgimisosa. Mul on vaja midagi, mis näitaks mulle andmeid ja teavitaks mind, kui seade on mõneks ajaks lahti ühendatud, toide puudub või temperatuur on madal. Ilmselgelt ei saa see olla raspberry pi ise, Internetis peaks olema mõni server või teenus, mis jälgib minu seadet.

Ma võin luua lihtsa serveri, hankida hostimise ja kõik seadistada, kuid ma ei taha seda teha. Õnneks on keegi sellele juba mõelnud ja loonud teie seadme jaoks pilvjuhtimispaneeli cloud4rpi.io.

2. toiming: Cloud4Rpi.io seadistamine

Cloud4Rpi.io seadistamine
Cloud4Rpi.io seadistamine

Cloud4Rpi pakub teenust, mis võimaldab teie seadmel andmeid saata ja vastu võtta, kasutades MQTT- või HTTP -protokolle. Neil on Pythoni jaoks klienditeek, nii et ma kasutan Pythoni.

Cloud4Rpi teenusega kaasnevad Pythoni näited sisaldavad juba koodi DS18B20 temperatuuriandurit.

Niisiis läksin aadressile https://cloud4rpi.io, lõin konto ja lisasin sinna uue seadme. Seadme lehel on žetoon - string, mis tuvastab seadme ja mis tuleks andmeid saatvas programmis täpsustada.

Alustuseks on alati hea mõte paketihaldurit värskendada ja pakette uuendada (märkus: kui te pole mõnda aega uuendanud, võib see võtta tunde):

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

Seejärel installige git, Python ja selle paketihaldur Pip:

sudo apt-get install git python python-pip

Seejärel installige cloud4rpi Pythoni teek:

sudo pip installige cloud4rpi

Lõpuks olen valmis oma juhtimisprogrammi kirjutama. Alustan näitest, mis on saadaval aadressil

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

Peamine programmifail on control.py - pean seda oma vajaduste järgi muutma. Esmalt muutke programmi ja kleepige märk:

sudo nano control.py

Leidke rida DEVICE_TOKEN = '…'] ja määrake seal seadme tunnus. Pärast seda saan programmi lihtsalt käivitada: see töötab ja teatab RoomTemp muutuja temperatuurist:

sudo python control.py

See töötab ja teatab RoomTemp muutuja temperatuurist.

Pange tähele, et see avastab kõik ühe juhtmega ds18b20 andurid

ds_sensors = ds18b20. DS18B20.find_all ()

ja kasutab esimest leitud andurit:

RoomTemp ': {' type ':' numbriline ',' siduv ': ds_sensors [0] kui ds_sensors else Puudub}

Ok, see oli lihtne, sest näidisprogrammis on kõik, mis on vajalik Raspberry Pi ds18b20 anduriga töötamiseks. Nüüd pean leidma viisi, kuidas toite olekust teatada.

3. samm: UPS -i jälgimine

UPS -i jälgimine
UPS -i jälgimine

Järgmine asi, mida tahan jälgida, on UPS -i olek, nii et elektrikatkestuse korral saan sellest teada enne, kui kõik katkeb.

Mul on USB -juhtimisega APC UPS, seega googeldasin kiiresti ja leidsin, et vajan apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Proovisin seda mitu korda installida rakenduse apt-get kaudu ja see ei töötanud minu jaoks erinevatel põhjustel. Näitan, kuidas seda allikatest installida.

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

Seejärel redigeerin apcupsd.conf, et ühendada oma UPS -iga usb kaudu.

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

Nüüd saan ühendada USB -kaabli UPS -ist RaspberryPi -ga ja testida, kas UPS -i leitakse.

sudo apctest

See ei tohiks teile veateateid anda.

Nüüd tuleks teenust apcupsd käivitada:

sudo systemctl käivitage apcupsd

UPS -i oleku küsimiseks saan kasutada olekukäsku:

olek sudo /etc/init.d/apcupsd

Ja see annaks midagi sellist:

APC: 001, 035, 0855DATE: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSIOON: 3.14.14 (31. mai 2016) debian UPSNAME: vcontrol KAABEL: USB-kaabli draiver: USB UPS-draiveri UPSMODE: eraldi STARTTIME: 2018-10-14 16:54:28 +0300 Mudel: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238.0 Volts LOADPCT: 0.0 Protsent BCHARGE: 100.0 Protsenti TIMELEFT: 293.3 minutit MBATTCHG: 5 protsenti MINTIMEL: 3 minutit MAXTIME: 0 sekundit SENSE: Keskmine LOTRANS: 140,0 volti HITRANS: 300,0 volti ALARMDEL: 30 sekundit BATTV: 14,2 volti LASTXFER: ülekandeid pole pärast pöörde lõppu: 2014-06-10 NOMINV: 230 volti NOMBATTV: 12,0 volti NOMPOWER: 390 vatti FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Vajan olekut - see on rida „OLEK:“.

Cloud4rpi teek sisaldab moodulit „rpy.py”, mis tagastab Raspberry Pi süsteemi parameetrid, näiteks hostinime või protsessori temperatuuri. Kuna kõik need parameetrid on mõne käsu käivitamise ja väljundi sõelumise tulemus, sisaldab see ka käepärast funktsiooni „parsimise_väljund”, mis teeb täpselt seda, mida vajan. UPS -i oleku vaatamiseks toimige järgmiselt.

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

Selle oleku saatmiseks pilv4rpi -le pean deklareerima muutuja UPSStatus ja siduma selle funktsiooniga ups_status: Nüüd saan oma programmi käivitada:

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

Ja ma näen kohe oma muutujat cloud4rpi seadme lehel.

Samm: valmistamiseks valmistumine

Ettevalmistus "tootmiseks"
Ettevalmistus "tootmiseks"

Kõik töötab ja nüüd pean oma seadme järelevalveta režiimi ette valmistama.

Alustuseks kohandan ajavahemikke. Küsitlusintervall määrab, kui sageli programm kontrollib temperatuuri ja UPS -i olekut - määrake see üheks sekundiks.

Tulemused saadetakse pilve iga 5 minuti järel ja diagnostiline teave - iga tund.

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

Kui UPS -i olek muutub - ma ei taha, et mu seade ootaks 5 minutit ja saadan andmed kohe. Nii et olen põhiahelat veidi muutnud ja see näeb välja selline:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE', samas kui True: newUPS = ups_status () if (data_timer <= 0) või (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS <diag device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL unerežiim (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

Testimine: käivitage skript:

sudo python control.py

Ja ma saan oma seadme lehel vaadata UPS -i olekut.

Kui lülitan UPS -i toite välja, muutub olek mõne sekundi jooksul, nii et kõik töötab. Nüüd pean süsteemi käivitamisel käivitama apcupsd ja oma control.py. Apcupsdi teenus on vana ja selle käivitamiseks kaasaegsel raspbianil peaksin faili /etc/init.d/apcupsd muutma, lisades need read kuskile ülaossa:

### ALGATUSINFO # Pakub: apcupsd # Nõutav-Start: $ kõik # Nõutav-seiskamine: # Vaikimisi algus: 2 3 4 5 # Vaikepeatus: # Lühikirjeldus: APC UPS-i deemon… ### END INIT INFO#

Seejärel lubage teenus:

sudo systemctl lubab apcupsd

Seejärel käivitage teenus:

sudo systemctl käivitage apcupsd

Nüüd käivitatakse süsteemi käivitamisel apcupsd.

Control.py installimiseks teenusena kasutasin kaasasolevat skripti service_install.sh:

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

Nüüd on teenus käivitatud ja see peab taaskäivituse üle elama.

Samm: juhtpaneeli seadistamine

Juhtpaneeli seadistamine
Juhtpaneeli seadistamine

Cloud4rpi võimaldab mul seadistada oma seadmele juhtpaneeli. Saate lisada vidinaid ja siduda need seadme muutujatega.

Minu seade pakub kahte kirjutuskaitstud muutujat - RoomTemp ja UPSStatus:

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

Lisasin 3 vidinat - RoomTemp'i number, UPSStatus'i teksti ja RoomTemp'i diagrammi.

Ma saan seadistada märguandeid, nii et ma saan meili, kui temperatuur on määratud vahemikust väljas, UPS läks võrguühenduseta või seade ise ei saada andmeid, kui peaks. Nüüd võin olla kindel, et mu maakodu on korras ja mind saab teavitada kui midagi on valesti, siis saan helistada naabritele ja paluda neil toimuvat kontrollida. Siin on kontroll.py tegelik kood.

Soovitan: