Turinys:
- 1 žingsnis: temperatūros stebėjimas
- 2 veiksmas: „Cloud4Rpi.io“nustatymas
- 3 žingsnis: UPS stebėjimas
- 4 žingsnis: pasiruošimas „gamybai“
- 5 žingsnis: Valdymo skydo nustatymas
Video: „Pasidaryk pats“namų stebėjimas naudojant „RaspberryPi“ir „Cloud4Rpi“: 5 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:46
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
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“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
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“
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
„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:
„Pasidaryk pats“pigių namų automatizavimas naudojant „Esp8266“: 6 žingsniai
„Pasidaryk pats“pigių namų automatizavimas naudojant „Esp8266“: Sveiki visi! Šiandien šioje instrukcijoje aš jums parodysiu, kaip aš paruošiau savo namų automatiką kaip žingsnį link protingų namų, naudodamas ESP 8266 modulį, paprastai žinomą kaip „nodemcu“, taip negaišdami laiko Pradėkime:)
Itin paprastas būdas pradėti namų automatizavimą naudojant „pasidaryk pats“modulius: 6 žingsniai
Itin paprastas būdas pradėti naudotis namų automatizavimu naudojant „pasidaryk pats“modulius: buvau maloniai nustebintas, kai nusprendžiau prie namų asistento pridėti keletą „pasidaryk pats“jutiklių. Naudoti „ESPHome“yra labai paprasta ir šiame įraše sužinosime, kaip valdyti GPIO kaištį, taip pat gauti temperatūrą & drėgmės duomenys iš belaidžio tinklo
„Arduino“pagrindu sukurtas „pasidaryk pats“žaidimų valdiklis - „Arduino PS2“žaidimų valdiklis - Žaidimas „Tekken“naudojant „pasidaryk pats“„Arduino“žaidimų pultą: 7 žingsniai
„Arduino“pagrindu sukurtas „pasidaryk pats“žaidimų valdiklis | „Arduino PS2“žaidimų valdiklis | Žaidimas „Tekken“naudojant „pasidaryk pats“„Arduino Gamepad“: Sveiki, vaikinai, žaisti žaidimus visada smagu, tačiau žaisti su savo „pasidaryk pats“žaidimo valdikliu yra smagiau. Taigi, mes padarysime žaidimų valdiklį naudodami „arduino pro micro“šioje instrukcijoje
„Pasidaryk pats“namų automatizavimas naudojant ESP8266: 5 žingsniai
„Pasidaryk pats“namų automatizavimas naudojant ESP8266: Šiame projekte parodysiu, kaip sukurti namų automatikos sistemą naudojant ESP8266 „WiFi“modulį. Ši sistema yra pagrįsta „Esp8266“relės lenta, kurią galite naudoti norėdami valdyti savo buitinius prietaisus per „WiFi“naudodami „Blynk“programą. Šį projektą remia JLCPCB
„Pasidaryk pats“balso/interneto valdomas namų automatizavimas ir stebėjimas naudojant ESP8266 ir „Google Home Mini“: 6 žingsniai
„Pasidaryk pats“balso/interneto valdomas namų automatizavimas ir stebėjimas naudojant ESP8266 ir „Google Home Mini“: Ei! Po ilgos pertraukos aš čia, nes mes visi turime padaryti kažką nuobodaus (darbo), kad uždirbtume. Po visų HOME AUTOMATION straipsnių, kuriuos parašiau iš BLUETOOTH, IR, Local WIFI, Cloud, ty sunkių, * DABAR * ateina lengviausias, bet efektyviausias