Përmbajtje:

Monitorimi i shtëpisë DIY me RaspberryPi dhe Cloud4Rpi: 5 hapa
Monitorimi i shtëpisë DIY me RaspberryPi dhe Cloud4Rpi: 5 hapa

Video: Monitorimi i shtëpisë DIY me RaspberryPi dhe Cloud4Rpi: 5 hapa

Video: Monitorimi i shtëpisë DIY me RaspberryPi dhe Cloud4Rpi: 5 hapa
Video: The Choice is Ours (2016) Official Full Version 2024, Nëntor
Anonim
Monitorimi i shtëpisë DIY me RaspberryPi dhe Cloud4Rpi
Monitorimi i shtëpisë DIY me RaspberryPi dhe Cloud4Rpi

Një fundjavë dimri shkova në shtëpinë time dhe zbulova se atje ishte shumë ftohtë. Diçka kishte ndodhur me energjinë elektrike dhe ndërprerësi RCD e kishte fikur atë, dhe ngrohja gjithashtu u fik. Isha me fat që erdha atje, përndryshe brenda disa ditësh gjithçka do të ishte ngrirë, gjë që është shumë e keqe për tubat dhe radiatorët.

Unë kisha disa Raspberry Pi përreth, dhe një sensor termik, kështu që mendova - pse nuk bëj një pajisje të thjeshtë monitorimi? Udhëzimet më poshtë supozojnë se keni një Raspberry Pi me Raspbian dhe lidhje rrjeti të konfiguruar. Në rastin tim është Raspberry Pi B+ me Raspbian (2018–06–27-raspbian-stretch-lite).

Hapi 1: Monitorimi i temperaturës

Monitorimi i Temperaturës
Monitorimi i Temperaturës
Monitorimi i Temperaturës
Monitorimi i Temperaturës

Si të lidhni një sensor të temperaturës DS18B20? Thjesht google si ta bëni këtë dhe do të shihni shumë fotografi si kjo:

Në rastin tim kisha tela të Zi, të Verdhë dhe të Kuq. E zeza është e bluar, shkon në pin Ground, e kuqja është fuqi - shkon në pin 3.3v, dhe e verdha është e dhëna - duhet të shkojë në pin GPIO4, me rezistencë 4.7 kOm të lidhur midis të dhënave dhe fuqisë. Shënim, mund të lidhni disa sensorë paralelisht (ato janë dixhitale dhe kanë adresa të ndryshme), ju nevojitet vetëm një rezistencë. Pas lidhjes së sensorit tuaj, duhet të aktivizoni 1Wire në konfigurimin raspi:

sudo raspi-config

Shkoni te 5 opsionet e ndërlidhjes, aktivizoni P7 1-Wire dhe ristartoni.

Pastaj mund të provoni nëse mund ta shihni sensorin:

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

Ju duhet të shihni diçka si kjo:

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

28–00044eae2dff është sensori ynë i temperaturës.

Hardware është gati. Tani më duhet të krijoj pjesën e monitorimit. Kam nevojë për diçka që do të më tregonte të dhënat dhe do të më njoftonte nëse pajisja është shkëputur për një kohë ose nuk ka energji, ose temperatura është e ulët. Natyrisht që kjo nuk mund të jetë mjedër pi vetë, duhet të ketë një server ose shërbim në internet që monitoron pajisjen time.

Unë mund të krijoj një server të thjeshtë, të marr një host dhe të vendos gjithçka, por me honezi, nuk dua. Për fat të mirë, dikush ka menduar tashmë për këtë dhe krijoi cloud4rpi.io - një panel kontrolli cloud për pajisjen tuaj.

Hapi 2: Konfigurimi i Cloud4Rpi.io

Konfigurimi i Cloud4Rpi.io
Konfigurimi i Cloud4Rpi.io

Cloud4Rpi siguron një shërbim që lejon pajisjen tuaj të dërgojë dhe të marrë të dhëna duke përdorur protokollet MQTT ose HTTP. Ata kanë një bibliotekë klienti për Python, kështu që unë do të përdor Python.

Shembujt Python që vijnë me shërbimin Cloud4Rpi tashmë përmbajnë kod për sensorin e temperaturës DS18B20.

Kështu që unë shkova në https://cloud4rpi.io, krijova një llogari dhe shtova një pajisje të re atje. Faqja e pajisjes ka një shenjë - një varg që identifikon pajisjen, dhe i cili duhet të specifikohet në programin që dërgon të dhëna.

Për të filluar, është gjithmonë një ide e mirë të përditësoni një menaxher të paketave dhe të azhurnoni paketat (vini re: mund të duhen orë nëse nuk jeni azhurnuar për një kohë):

sudo apt-merrni përditësim && sudo apt-merrni përmirësim

Pastaj, instaloni git, Python dhe menaxherin e tij të paketave Pip:

sudo apt-get instaloni git python python-pip

Pastaj, instaloni bibliotekën cloud4rpi Python:

sudo pip instaloni cloud4rpi

Më në fund, jam gati të shkruaj programin tim të kontrollit. Filloj nga shembulli i disponueshëm në

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

Skedari kryesor i programit është control.py - më duhet ta modifikoj për nevojat e mia. Së pari, redaktoni programin dhe ngjisni një shenjë:

sudo nano kontroll.py

Gjeni një linjë DEVICE_TOKEN = '…'] dhe specifikoni një shenjë të pajisjes atje. Pas kësaj unë thjesht mund të ekzekutoj programin: Punon dhe raporton një temperaturë në ndryshoren RoomTemp:

sudo python control.py

Punon dhe raporton një temperaturë në ndryshoren RoomTemp.

Vini re se ai zbulon të gjithë sensorët ds18b20

ds_sensors = ds18b20. DS18B20.find_all ()

dhe përdor sensorin e parë të gjetur:

RoomTemp ': {' type ':' numerike ',' bind ': ds_sensors [0] nëse ds_sensors tjetër Asnjë}

Ok, ishte e lehtë, sepse programi mostër ka gjithçka që kërkohet për të punuar me sensorin ds18b20 në Raspberry Pi. Tani më duhet të gjej mënyrën për të raportuar statusin e energjisë.

Hapi 3: Monitorimi i UPS -it

Monitorimi UPS
Monitorimi UPS

Gjëja tjetër që dua të monitoroj është statusi i UPS -it, kështu që nëse ka ndërprerje të energjisë, do të di për të para se të shkëputet gjithçka.

Unë kam një APC UPS me kontroll USB, kështu që unë shpejt në Google dhe zbulova se më duhej apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… U përpoqa disa herë ta instaloja përmes apt-get, dhe nuk po funksiononte për mua për arsye të ndryshme. Unë do të tregoj se si ta instaloj atë nga burimet.

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

Pastaj redaktoj apcupsd.conf për t'u lidhur me UPS -in tim përmes usb.

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

Tani mund të lidh kabllon USB nga UPS në RaspberryPi dhe të provoj nëse do të gjendet UPS.

sudo apctest

Nuk duhet t'ju japë asnjë mesazh gabimi.

Tani shërbimi apcupsd duhet të fillojë:

sudo systemctl filloni apcupsd

Për të pyetur statusin e UPS mund të përdor një komandë statusi:

sudo /etc/init.d/apcupsd status

Dhe do të dalë diçka si kjo:

APC: 001, 035, 0855DATE: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSION: 3.14.14 (31 maj 2016) debian UPSNAME: vcontrol CABLE: USB Cable Driver: USB UPS Driver UPSMODE: Stand Alone FILLIMI: 2018-10-14 16:54:28 +0300 MODEL: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238.0 Volt LOADPCT: 0.0 Përqind BACARGE: 100.0 Përqindje KOHA: 293.3 Minuta MBATTCHG: 5 Përqindje MINTIMEL: 3 Minuta MAX 0 Sekonda SENSE: LOTRANS të Mesëm: 140.0 Volt HITRANS: 300.0 Volt ALARMDEL: 30 Seconds BATTV: 14.2 Volt LASTXFER: Asnjë transferim që nga turnon: 2014-06-10 NOMINV: 230 Volt NOMBATTV: 12.0 Volt NOMPOWER: 390 Watt FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Më duhet një status - i cili është rreshti "STATUS:".

Biblioteka Cloud4rpi përmban një modul ‘rpy.py’ që kthen parametrat e sistemit Raspberry Pi siç është emri i hostit ose temperatura e CPU. Meqenëse të gjitha ato parametra janë rezultat i ekzekutimit të disa komandave dhe analizimit të prodhimit, ai gjithashtu përmban një funksion të dobishëm ‘parse_output’ që bën pikërisht atë që më nevojitet. Kjo është mënyra se si të marr statusin tim UPS:

def ups_status (): result = rpi.parse_output (r'STATUS / s+: / s+( S+) ', [' /etc/init.d/apcupsd ',' status '])) nëse rezultati: ktheje rezultatin tjetër: kthim 'E PANJOHUR'

Për ta dërguar këtë status në cloud4rpi, më duhet të deklaroj një ndryshore UPSStatus dhe ta lidh atë me funksionin tim ups_status: Tani mund të ekzekutoj programin tim:

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

Dhe unë menjëherë mund ta shoh ndryshoren time në faqen e pajisjes cloud4rpi.

Hapi 4: Përgatitja për "prodhim"

Përgatitja për "prodhim"
Përgatitja për "prodhim"

Gjithçka po funksionon, dhe tani më duhet ta përgatis pajisjen time në modalitetin e pambikëqyrur.

Për të filluar, unë do të rregulloj intervalet kohore. Intervali i sondazhit përcakton sa shpesh programi kontrollon temperaturën dhe gjendjen e UPS - vendoseni në një sekondë.

Rezultatet dërgohen në re çdo 5 minuta, dhe informacion diagnostikues - çdo orë.

# KonstantetDATA_SENDING_INTERVAL = 300 # sek. DIAG_SENDING_INTERVAL = 3600 # sek POLL_INTERVAL = 1 # sek.

Kur ndryshon statusi i UPS - nuk dua që pajisja ime të presë 5 minuta, dhe dërgoj të dhëna menjëherë. Kështu që unë kam modifikuar pak lakun kryesor dhe duket kështu:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' ndërsa E vërtetë: newUPS = ups_status () nëse (data_timer <= 0) ose (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = new_t = 0: pajisje.publish_diag () diag_timer = DIAG_SENDING_INTERVAL fle (POLL_INTERVAL) diag_timer -= POLL_INTERVAL kohëzgjatja e të dhënave -= POLL_INTERVAL

Testimi: ekzekutoni skriptin:

sudo python control.py

Dhe unë mund të shikoj statusin e UPS në faqen e pajisjes sime.

Nëse e fik fuqinë e UPS -it, statusi ndryshon në disa sekonda, kështu që gjithçka po funksionon. Tani më duhet të filloj apcupsd dhe kontrollin tim.py në fillimin e sistemit. Shërbimi Apcupsd është i vjetër dhe për ta filluar atë në raspbian modern, duhet të modifikoj /etc/init.d/apcupsd, duke shtuar këto rreshta diku në krye:

### FILLIMI I INFORMACIONIT # Siguron: apcupsd # Kërkohet-Filloni: $ all # Kërkohet-Ndaloni: # Default-Start: 2 3 4 5 # Default-Stop: # Përshkrim i Shkurtër: Demoni APC UPS… ### FILLIMI FITIM INFO#

Pastaj aktivizoni shërbimin:

sudo systemctl aktivizoni apcupsd

Pastaj filloni shërbimin:

sudo systemctl filloni apcupsd

Tani apcupsd do të fillojë në fillimin e sistemit.

Për të instaluar control.py si shërbim, kam përdorur skriptin e ofruar service_install.sh:

sudo bash service_install.sh/cloud4rpi/control.py

Tani shërbimi ka filluar dhe do të mbijetojë gjatë rindezjes.

Hapi 5: Vendosja e një paneli kontrolli

Vendosja e një paneli kontrolli
Vendosja e një paneli kontrolli

Cloud4rpi më lejon të krijoj një panel kontrolli për pajisjen time. Mund të shtoni "widget" dhe t'i lidhni ato me ndryshoret e pajisjes.

Pajisja ime siguron dy ndryshore vetëm për lexim - RoomTemp dhe UPSStatus:

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

Shtova 3 widget - Numër për RoomTemp, Tekst për UPSStatus dhe një Grafik për RoomTemp.

Unë mund të vendos alarmet, kështu që marr një email kur temperatura është jashtë intervalit të caktuar, UPS -i doli jashtë linje ose vetë pajisja nuk dërgon të dhëna kur duhet. Tani mund të jem i sigurt se shtëpia ime e vendit është në rregull dhe mund të njoftohem kur diçka nuk është në rregull, kështu që unë mund të telefonoj fqinjët dhe t'i kërkoj që të kontrollojnë se çfarë po ndodh. Këtu është kodi aktual i control.py.

Recommended: