Orodha ya maudhui:

Ufuatiliaji wa Nyumba ya DIY na RaspberryPi na Cloud4Rpi: Hatua 5
Ufuatiliaji wa Nyumba ya DIY na RaspberryPi na Cloud4Rpi: Hatua 5

Video: Ufuatiliaji wa Nyumba ya DIY na RaspberryPi na Cloud4Rpi: Hatua 5

Video: Ufuatiliaji wa Nyumba ya DIY na RaspberryPi na Cloud4Rpi: Hatua 5
Video: Шок!!! ДУШИ МЕРТВЕЦОВ В ЗАТОЧЕНИИ У ДЕМОНА В ЭТОМ СТРАШНОМ ДОМЕ / HERE ARE THE SOULS OF THE DEAD 2024, Novemba
Anonim
Ufuatiliaji wa Nyumba ya DIY na RaspberryPi na Cloud4Rpi
Ufuatiliaji wa Nyumba ya DIY na RaspberryPi na Cloud4Rpi

Wikiendi moja ya msimu wa baridi nilienda nyumbani kwa nchi yangu, na nikapata kuwa kulikuwa na baridi sana hapo. Kuna kitu kilikuwa kimetokea na umeme na mhalifu wa RCD alikuwa ameizima, na inapokanzwa pia ilizima. Nilikuwa na bahati nimekuja pale, vinginevyo kwa siku kadhaa kila kitu kingekuwa kimehifadhiwa ambayo ni mbaya sana kwa bomba na radiator.

Nilikuwa na Raspberry Pi kadhaa, na sensorer ya joto, kwa hivyo nilifikiri - kwa nini sifanyi kifaa rahisi cha ufuatiliaji? Maagizo hapa chini hudhani una Raspberry Pi na Raspbian na unganisho la mtandao limewekwa. Kwa upande wangu ni Raspberry Pi B + na Raspbian (2018-06-27-raspbian-stretch-lite).

Hatua ya 1: Ufuatiliaji wa Joto

Ufuatiliaji wa Joto
Ufuatiliaji wa Joto
Ufuatiliaji wa Joto
Ufuatiliaji wa Joto

Jinsi ya kuunganisha sensor ya joto ya DS18B20? Google tu jinsi ya kufanya hivyo, na utaona picha nyingi kama hii:

Kwa upande wangu nilikuwa na waya Nyeusi, Njano na Nyekundu. Nyeusi imepigwa chini, huenda kwenye pini ya Ground, nyekundu ni nguvu - huenda kwa pini 3.3v, na manjano ni data - inapaswa kwenda kwenye pini ya GPIO4, na kontena la 4.7 kOm limeunganishwa kati ya data na nguvu. Kumbuka, unaweza kuunganisha sensorer kadhaa sambamba (ni za dijiti, na zina anwani tofauti), unahitaji kontena moja tu. Baada ya kuunganisha sensa yako, unapaswa kuwezesha 1Wire kwenye raspi-config:

Sudo raspi-config

Nenda kwa chaguzi 5 za Kuingiliana, wezesha P7 1-Wire na uwashe upya.

Basi unaweza kujaribu ikiwa unaweza kuona sensa:

Sudo modprobe w1-gpiosudo modprobe w1-thermls / sys / basi / w1 / vifaa /

Unapaswa kuona kitu kama hiki:

pi @ vcontrol: ~ $ ls / sys / basi / w1 / vifaa / 28–00044eae2dff w1_bus_master1

28-00044eae2dff ni sensorer ya joto.

Vifaa viko tayari. Sasa ninahitaji kuanzisha sehemu ya ufuatiliaji. Ninahitaji kitu ambacho kitanionesha data na kunijulisha ikiwa kifaa kimeunganishwa kwa muda au hakuna nguvu, au joto ni la chini. Kwa wazi hii haiwezi kuwa raspberry pi yenyewe, inapaswa kuwa na seva au huduma kwenye mtandao ambayo inafuatilia kifaa changu.

Ninaweza kuunda seva rahisi, kupata mwenyeji na kuweka kila kitu, lakini kwa unyenyekevu, sitaki. Kwa bahati nzuri, mtu amefikiria juu ya hii tayari na ameunda cloud4rpi.io - jopo la kudhibiti wingu kwa kifaa chako.

Hatua ya 2: Kuanzisha Cloud4Rpi.io

Kuanzisha Cloud4Rpi.io
Kuanzisha Cloud4Rpi.io

Cloud4Rpi hutoa huduma ambayo inaruhusu kifaa chako kutuma na kupokea data kwa kutumia itifaki za MQTT au HTTP. Wana maktaba ya mteja kwa Python, kwa hivyo nitatumia Python.

Mifano ya chatu ambayo inakuja na huduma ya Cloud4Rpi tayari ina nambari ya DS18B20 sensor ya temp.

Kwa hivyo nilienda https://cloud4rpi.io, nikaunda akaunti na nikaongeza kifaa kipya hapo. Ukurasa wa kifaa una ishara - kamba inayotambulisha kifaa, na ambayo inapaswa kutajwa katika programu inayotuma data.

Kwanza, daima ni wazo nzuri kusasisha meneja wa kifurushi na kusasisha vifurushi (kumbuka: inaweza kuchukua masaa ikiwa haujasasisha kwa muda):

Sudo apt-pata sasisho && sudo apt-pata sasisho

Kisha, weka git, Python na msimamizi wake wa kifurushi Pip:

Sudo apt-get kufunga git python python-pip

Kisha, weka maktaba ya wingu ya Python4rpi:

Sudo pip kufunga cloud4rpi

Mwishowe, niko tayari kuandika programu yangu ya kudhibiti. Ninaanza kutoka kwa mfano unaopatikana kwenye

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

Faili kuu ya programu ni kudhibiti.py - Ninahitaji kuibadilisha kwa mahitaji yangu. Kwanza, hariri programu na ubandike ishara:

udhibiti wa nano ya sudo.py

Pata laini DEVICE_TOKEN = '…'] na taja ishara ya kifaa hapo. Baada ya hapo ninaweza tu kuendesha programu: Inafanya kazi na inaripoti hali ya joto katika tofauti ya RoomTemp:

udhibiti wa chatu ya sudo.py

Inafanya kazi na inaripoti hali ya joto katika ubadilishaji wa RoomTemp.

Kumbuka kuwa hugundua sensorer zote za ds18b20

ds_sensors = ds18b20. DS18B20.find_all ()

na hutumia sensorer ya kwanza kupatikana:

Chumba cha Muda: "{'aina': 'nambari', 'funga': ds_sensors [0] ikiwa ds_sensors mwingine Hakuna}

Ok, hiyo ilikuwa rahisi, kwa sababu programu ya sampuli ina kila kitu kinachohitajika kufanya kazi na ds18b20 sensor kwenye Raspberry Pi. Sasa ninahitaji kutafuta njia ya kuripoti hali ya nguvu.

Hatua ya 3: Ufuatiliaji wa UPS

Ufuatiliaji wa UPS
Ufuatiliaji wa UPS

Jambo linalofuata ninataka kufuatilia ni hali ya UPS, kwa hivyo ikiwa kukatika kwa umeme, nitajua juu yake kabla ya kila kitu kukatika.

Nina APC UPS na udhibiti wa USB, kwa hivyo nilienda haraka na kugundua kuwa ninahitaji apcupsd. https://www.anites.com/2013/09/monitoring-ups.html …… Nilijaribu mara kadhaa kuiweka kupitia apt-get, na haikuwa ikinifanyia kazi kwa sababu anuwai. Nitaonyesha jinsi ya kuiweka kutoka kwa vyanzo.

wget

Kisha mimi huhariri apcupsd.conf kuungana na UPS yangu kupitia usb.

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

Sasa naweza kuziba kebo ya USB kutoka UPS hadi RaspberryPi na ujaribu ikiwa UPS itapatikana.

sudo apctest

Haipaswi kukupa ujumbe wowote wa kosa.

Sasa sevice apcupsd inapaswa kuanza:

Sudo systemctl kuanza apcupsd

Kutuliza hali ya UPS naweza kutumia amri ya hali:

hali ya sudo /etc/init.d/apcupsd

Na itatoa somethig kama hii:

APC: 001, 035, 0855 TAREHE: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSION: 3.14.14 (31 Mei 2016) debian UPSNAME: vcontrol CABLE: USB Cable DRIVER: USB UPS Dereva UPSMODE: Simama peke yako MUDA WA KUANZA: 2018-10-14 16:54:28 +0300 MODEL: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238.0 Volts LOADPCT: 0.0 Asilimia BCHARGE: 100.0 Asilimia TIMELEFT: Dakika 293.3 MBATTCHG: 5 Asilimia MINTIMEL: Dakika 3 MDAU MUHIMU: 0 Seconds SENSE: kati LOTRANS: 140.0 Volts HITRANS: 300.0 Volts ALARMDEL: 30 Seconds BATTV: 14.2 Volts LASTXFER: Hakuna uhamisho tangu NUMXFERS turnon: 0 TONBATT: 0 Seconds CUMONBATT: 0 Seconds XOFFBATT: N / A STATFLAG: 0x05000008 SERIALNO: 3B1424X02945 BATTDATE: 2014-06-10 NOMINV: Volts 230 NOMBATTV: 12.0 Volts NOMPOWER: 390 Watts FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Ninahitaji hadhi - ambayo ni "STATUS:" line.

Maktaba ya Cloud4rpi ina moduli 'rpy.py' ambayo inarudisha vigezo vya mfumo wa Raspberry Pi kama jina la mwenyeji au joto la cpu. Kwa kuwa vifungu vyote hivyo ni matokeo ya kutekeleza maagizo kadhaa na kutoa mazao, pia ina kazi ya 'parse_output' inayofaa ambayo hufanya kile ninachohitaji. Hii ndio njia ya kupata hali yangu ya UPS:

def ups_status (): result = rpi.parse_output (r'STATUS / s +: / s + ( S +) ', [' /etc/init.d/apcupsd ',' status ']) ikiwa matokeo: rudisha matokeo mengine: kurudi 'HAIJULIKANI'

Kutuma hali hii kwa cloud4rpi, ninahitaji kutangaza UPSStatus inayobadilika na kuifunga kwa kazi yangu ya up_status: Sasa naweza kuendesha programu yangu:

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

Na ninaweza kuona mara moja tofauti yangu kwenye ukurasa wa kifaa cha cloud4rpi.

Hatua ya 4: Kujiandaa na "uzalishaji"

Kujiandaa na "uzalishaji"
Kujiandaa na "uzalishaji"

Kila kitu kinafanya kazi, na sasa ninahitaji kuandaa kifaa changu kwa hali isiyotarajiwa.

Kwanza, nitarekebisha vipindi vya muda. Muda wa kura hufafanua ni mara ngapi programu inakagua hali ya joto na hali ya UPS - iweke kwa sekunde moja.

Matokeo hutumwa kwa wingu kila dakika 5, na habari ya utambuzi - kila saa.

# ConstantsDATA_SENDING_INTERVAL = 300 # sekunde #UCHUNGUZA_UJITUMIA_UHUSU = 3600 # sekunde POLL_INTERVAL = sekunde #

Wakati hali ya UPS inabadilika - sitaki kifaa changu kusubiri kwa dakika 5, na ninatuma data mara moja. Kwa hivyo nimebadilisha kidogo kitanzi kuu na inaonekana kama hii:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' wakati ni Kweli: newUPS = ups_status () ikiwa (data_timer <= 0) au (newUPS! = prevUPS): kifaa.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS = newUPS = newUPS kifaa.publish_diag () diag_timer = DIAG_SENDING_INTERVAL usingizi (POLL_INTERVAL) diag_timer - = POLL_INTERVAL data_timer - = POLL_INTERVAL

Upimaji: endesha hati:

udhibiti wa chatu ya sudo.py

Na ninaweza kutazama hali ya UPS kwenye ukurasa wangu wa kifaa.

Ikiwa nitazima nguvu ya UPS, hali hubadilika kwa sekunde kadhaa, kwa hivyo kila kitu kinafanya kazi. Sasa ninahitaji kuanza apcupsd na udhibiti wangu.py kwenye uanzishaji wa mfumo. Huduma ya Apcupsd ni ya zamani na kuianza kwa raspbian ya kisasa, napaswa kurekebisha faili ya /etc/init.d/apcupsd, kwa kuongeza mistari hii mahali hapo juu:

### ANZA INIT INFO # Inatoa: apcupsd # Inahitajika-Anza: $ zote # Inahitajika-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Maelezo mafupi: APC UPS daemon… ### END INIT HABARI #

Kisha wezesha huduma:

Sudo systemctl kuwezesha apcupsd

Kisha anza huduma:

Sudo systemctl kuanza apcupsd

Sasa apcupsd itaanza kwenye uanzishaji wa mfumo.

Kusanikisha control.py kama huduma, nilitumia hati iliyotolewa ya huduma_install.sh:

huduma ya sudo bash_install.sh ~ / cloud4rpi / control.py

Huduma sasa imeanza na inashindwa kufanya kazi wakati wa kuanza upya.

Hatua ya 5: Kuweka Jopo la Udhibiti

Kuweka Jopo la Kudhibiti
Kuweka Jopo la Kudhibiti

Cloud4rpi inaniruhusu kusanidi jopo la kudhibiti kifaa changu. Unaweza kuongeza "vilivyoandikwa" na kuzifunga kwa anuwai ya kifaa.

Kifaa changu kinapeana vigeuzi viwili vya kusoma tu - RoomTemp na UPSStatus:

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

Niliongeza vilivyoandikwa 3 - Nambari ya RoomTemp, Nakala ya UPSStatus na Chati ya RoomTemp.

Ninaweza kuweka arifu, kwa hivyo ninapokea barua pepe wakati halijoto iko nje ya anuwai maalum, UPS ilitoka nje ya mtandao au kifaa chenyewe hakitumii data wakati inapaswa. Sasa ninaweza kuwa na hakika nyumba yangu ya nchi iko sawa, na ninaweza kujulishwa wakati kitu kibaya, kwa hivyo naweza kupiga simu kwa majirani na kuwauliza waangalie kinachoendelea. Hapa kuna nambari halisi ya kudhibiti.py.

Ilipendekeza: