Turinys:

„Pasidaryk pats“namų stebėjimas naudojant „RaspberryPi“ir „Cloud4Rpi“: 5 žingsniai
„Pasidaryk pats“namų stebėjimas naudojant „RaspberryPi“ir „Cloud4Rpi“: 5 žingsniai

Video: „Pasidaryk pats“namų stebėjimas naudojant „RaspberryPi“ir „Cloud4Rpi“: 5 žingsniai

Video: „Pasidaryk pats“namų stebėjimas naudojant „RaspberryPi“ir „Cloud4Rpi“: 5 žingsniai
Video: Sterowanie i monitoring pompy ciepła jak zrobić z klimatyzatora, własne tanie ogrzewanie DIY. 2024, Lapkritis
Anonim
„Pasidaryk pats“namų stebėjimas naudojant „RaspberryPi“ir „Cloud4Rpi“
„Pasidaryk pats“namų stebėjimas naudojant „RaspberryPi“ir „Cloud4Rpi“

Vieną žiemos savaitgalį nuėjau į savo sodybą ir sužinojau, kad ten labai šalta. Kažkas atsitiko su elektra ir RCD pertraukiklis jį išjungė, taip pat išjungtas šildymas. Man pasisekė, kad ten atvykau, kitaip per kelias dienas viskas būtų užšalusi, o tai labai blogai vamzdžiams ir radiatoriams.

Turėjau keletą „Raspberry Pi“ir šilumos jutiklį, todėl pagalvojau - kodėl aš nesudariau paprasto stebėjimo įrenginio? Toliau pateiktose instrukcijose daroma prielaida, kad turite „Raspberry Pi“su „Raspbian“ir tinklo ryšiu. Mano atveju tai yra „Raspberry Pi B+“su „Raspbian“(2018–06–27-raspbian-stretch-lite).

1 žingsnis: temperatūros stebėjimas

Temperatūros stebėjimas
Temperatūros stebėjimas
Temperatūros stebėjimas
Temperatūros stebėjimas

Kaip prijungti DS18B20 temperatūros jutiklį? Tiesiog google, kaip tai padaryti, ir pamatysite daug tokių nuotraukų:

Mano atveju turėjau juodus, geltonus ir raudonus laidus. Juoda yra įžeminta, eina į įžeminimo kaištį, raudona yra maitinimas - eina į 3,3 V kaištį, o geltona yra duomenys - turėtų eiti į GPIO4 kaištį, su 4,7 kOm rezistoriumi, prijungtu tarp duomenų ir maitinimo. Pastaba, galite prijungti kelis jutiklius lygiagrečiai (jie yra skaitmeniniai ir turi skirtingus adresus), jums reikia tik vieno rezistoriaus. Prijungę jutiklį, turite įjungti 1Wire raspi-config:

sudo raspi-config

Eikite į 5 sąsajos parinktis, įjunkite „P7 1-Wire“ir paleiskite iš naujo.

Tada galite patikrinti, ar matote jutiklį:

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

Turėtumėte pamatyti kažką panašaus:

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

28–00044eae2dff yra mūsų temperatūros jutiklis.

Aparatūra paruošta. Dabar turiu nustatyti stebėjimo dalį. Man reikia kažko, kas parodytų man duomenis ir praneštų, jei prietaisas kuriam laikui yra atjungtas, nėra maitinimo arba temperatūra yra žema. Akivaizdu, kad tai negali būti pati „Raspberry pi“, internete turėtų būti serveris ar paslauga, kuri stebi mano įrenginį.

Galiu sukurti paprastą serverį, gauti prieglobą ir viską nustatyti, bet mielai to nenoriu. Laimei, kažkas jau galvojo apie tai ir sukūrė „cloud4rpi.io“- jūsų įrenginio debesies valdymo skydelį.

2 veiksmas: „Cloud4Rpi.io“nustatymas

„Cloud4Rpi.io“nustatymas
„Cloud4Rpi.io“nustatymas

„Cloud4Rpi“teikia paslaugą, leidžiančią jūsų įrenginiui siųsti ir gauti duomenis naudojant MQTT arba HTTP protokolus. Jie turi „Python“klientų biblioteką, todėl naudosiu „Python“.

„Python“pavyzdžiuose, pateikiamuose kartu su „Cloud4Rpi“paslauga, jau yra DS18B20 temperatūros jutiklio kodas.

Taigi nuėjau į https://cloud4rpi.io, sukūriau paskyrą ir pridėjau naują įrenginį. Įrenginio puslapyje yra prieigos raktas - eilutė, identifikuojanti įrenginį ir kuri turėtų būti nurodyta duomenis siunčiančioje programoje.

Norėdami pradėti, visada naudinga atnaujinti paketų tvarkytuvę ir atnaujinti paketus (pastaba: tai gali užtrukti valandas, jei kurį laiką neatnaujinote):

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

Tada įdiekite „git“, „Python“ir jo paketų tvarkytuvę „Pip“:

sudo apt-get install git python python-pip

Tada įdiekite „cloud4rpi Python“biblioteką:

sudo pip įdiegti cloud4rpi

Pagaliau aš pasiruošęs parašyti savo valdymo programą. Pradedu nuo pavyzdžio, esančio

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

Pagrindinis programos failas yra control.py - turiu jį modifikuoti pagal savo poreikius. Pirmiausia redaguokite programą ir įklijuokite prieigos raktą:

sudo nano control.py

Raskite eilutę DEVICE_TOKEN = '…'] ir ten nurodykite įrenginio prieigos raktą. Po to galiu tiesiog paleisti programą: ji veikia ir praneša apie temperatūrą „RoomTemp“kintamajame:

sudo python control.py

Jis veikia ir praneša apie temperatūrą „RoomTemp“kintamajame.

Atminkite, kad jis aptinka visus „onewire ds18b20“jutiklius

ds_sensors = ds18b20. DS18B20.find_all ()

ir naudoja pirmąjį rastą jutiklį:

RoomTemp ': {' type ':' numeric ',' bind ': ds_sensors [0], jei ds_sensors else Nėra

Gerai, tai buvo lengva, nes pavyzdinėje programoje yra viskas, ko reikia norint dirbti su ds18b20 jutikliu „Raspberry Pi“. Dabar turiu rasti būdą pranešti apie maitinimo būseną.

3 žingsnis: UPS stebėjimas

UPS stebėjimas
UPS stebėjimas

Kitas dalykas, kurį noriu stebėti, yra UPS būsena, taigi, jei nutrūks elektros tiekimas, aš apie tai žinosiu, kol viskas atsijungs.

Turiu APC UPS su USB valdikliu, todėl greitai įvedžiau google ir radau, kad man reikia apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Kelis kartus bandžiau ją įdiegti per apt-get, ir dėl įvairių priežasčių man tai neveikė. Aš parodysiu, kaip jį įdiegti iš šaltinių.

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

Tada redaguoju apcupsd.conf, kad prisijungčiau prie savo UPS per USB.

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

Dabar galiu prijungti USB kabelį iš UPS prie „RaspberryPi“ir išbandyti, ar bus rastas UPS.

sudo apctest

Tai neturėtų duoti jums klaidų pranešimų.

Dabar reikia pradėti „service apcupsd“:

sudo systemctl paleiskite apcupsd

Norėdami sužinoti UPS būseną, galiu naudoti būsenos komandą:

sudo /etc/init.d/apcupsd būsena

Ir išvestų kažką panašaus į tai:

APC: 001, 035, 0855DATE: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSIJA: 3.14.14 (2016 m. Gegužės 31 d.) Debian UPSNAME: vcontrol KABELIS: USB kabelio tvarkyklė: USB UPS tvarkyklė STARTIME: 2018-10-14 16:54:28 +0300 MODELIS: „Back-UPS XS 650CI“Būsena: ONLINE LINEV: 238.0 voltai LOADPCT: 0.0 proc. BCHARGE: 100.0 proc. LAIKAS: 293.3 minutės MBATTCHG: 5 proc. MINTIMEL: 3 minutės 0 sekundžių SENSE: Vidutiniai LOTRANAI: 140,0 voltai HITRANS: 300,0 voltai ALARMDEL: 30 sekundžių BATTV: 14,2 voltai LASTXFER: jokių pervedimų nuo Turnon NUMXFERS: 0 TONBATT: 0 sekundžių CUMONBATT: 0 sekundžių XOFFBATT: N/A 3 STAT000: 2014-06-10 NOMINV: 230 voltų NOMBATTV: 12,0 voltų NOMPOWER: 390 W FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Man reikia būsenos - tai eilutė „BŪSENA:“.

„Cloud4rpi“bibliotekoje yra modulis „rpy.py“, kuris grąžina „Raspberry Pi“sistemos parametrus, tokius kaip pagrindinio kompiuterio pavadinimas arba procesoriaus temperatūra. Kadangi visi šie parametrai yra kai kurių komandų vykdymo ir išvesties rezultatų rezultatas, jame taip pat yra patogi funkcija „parse_output“, kuri daro būtent tai, ko man reikia. Štai kaip gauti UPS būseną:

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

Norėdami išsiųsti šią būseną į „cloud4rpi“, turiu deklaruoti kintamąjį „UPSStatus“ir susieti jį su „ups_status“funkcija: Dabar galiu paleisti savo programą:

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

Ir aš iš karto galiu pamatyti savo kintamąjį „cloud4rpi“įrenginio puslapyje.

4 žingsnis: pasiruošimas „gamybai“

Pasirengimas „gamybai“
Pasirengimas „gamybai“

Viskas veikia, ir dabar turiu paruošti savo įrenginį be priežiūros režimui.

Pradžiai pakoreguosiu laiko intervalus. Apklausos intervalas nustato, kaip dažnai programa tikrina temperatūrą ir UPS būseną - nustatykite ją į vieną sekundę.

Rezultatai į debesį siunčiami kas 5 minutes, o diagnostinė informacija - kas valandą.

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

Pasikeitus UPS būsenai - nenoriu, kad mano prietaisas lauktų 5 minutes, ir siunčiu duomenis iš karto. Taigi šiek tiek pakeičiau pagrindinę kilpą ir ji atrodo taip:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE', o tiesa: newUPS = ups_status () if (data_timer <= 0) arba (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS = 0g device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL miego režimas (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

Testavimas: paleiskite scenarijų:

sudo python control.py

Aš galiu stebėti UPS būseną savo įrenginio puslapyje.

Jei išjungiu UPS maitinimą, būsena pasikeičia per kelias sekundes, todėl viskas veikia. Dabar turiu paleisti sistemos „apcupsd“ir „control.py“. „Apcupsd“paslauga yra sena ir norėdama ją paleisti naudojant šiuolaikinę raspbian, turėčiau pakeisti failą /etc/init.d/apcupsd, pridėdamas šias eilutes kažkur viršuje:

### BEGIN INIT INFO # Pateikia: apcupsd # Būtina-Pradėti: $ all # Būtina-Stop: # Numatytoji pradžia: 2 3 4 5 # Default-Stop: # Trumpas aprašymas: APC UPS demonas … ### END INIT INFO Nr.

Tada įjunkite paslaugą:

sudo systemctl įgalinti apcupsd

Tada paleiskite paslaugą:

sudo systemctl paleiskite apcupsd

Dabar apcupsd bus paleistas paleidžiant sistemą.

Norėdami įdiegti „control.py“kaip paslaugą, naudoju pateiktą „service_install.sh“scenarijų:

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

Dabar paslauga pradėta ir ji turi išgyventi iš naujo.

5 žingsnis: Valdymo skydo nustatymas

Valdymo skydo nustatymas
Valdymo skydo nustatymas

„Cloud4rpi“leidžia nustatyti įrenginio valdymo skydelį. Galite pridėti „valdiklių“ir susieti juos su įrenginio kintamaisiais.

Mano įrenginyje yra du tik skaitomi kintamieji - „RoomTemp“ir „UPSStatus“:

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

Pridėjau 3 valdiklius - „RoomTemp“numerį, „UPSStatus“tekstą ir „RoomTemp“diagramą.

Galiu nustatyti įspėjimus, todėl gaunu el. Laišką, kai temperatūra nukrypsta nuo nurodyto diapazono, UPS prisijungė neprisijungęs arba pats įrenginys nesiunčia duomenų, kai turėtų. Dabar galiu būti tikras, kad mano kaimo namas yra gerai, ir man gali būti pranešta kai kažkas negerai, todėl galiu paskambinti kaimynams ir paprašyti jų patikrinti, kas vyksta. Čia yra tikrasis „control.py“kodas.

Rekomenduojamas: