Բովանդակություն:

DIY տան մոնիտորինգ RaspberryPi- ի և Cloud4Rpi- ի միջոցով. 5 քայլ
DIY տան մոնիտորինգ RaspberryPi- ի և Cloud4Rpi- ի միջոցով. 5 քայլ

Video: DIY տան մոնիտորինգ RaspberryPi- ի և Cloud4Rpi- ի միջոցով. 5 քայլ

Video: DIY տան մոնիտորինգ RaspberryPi- ի և Cloud4Rpi- ի միջոցով. 5 քայլ
Video: 12 վ 90 ամպեր մեքենայի այլընտրանք դեպի ինքնահուզիչ գեներատոր DIODE- ի միջոցով 2024, Նոյեմբեր
Anonim
DIY տան մոնիտորինգ RaspberryPi- ով և Cloud4Rpi- ով
DIY տան մոնիտորինգ RaspberryPi- ով և Cloud4Rpi- ով

Մի ձմեռային հանգստյան օրեր ես գնացի իմ գյուղական տուն և պարզեցի, որ այնտեղ շատ ցուրտ էր: Էլեկտրաէներգիայի հետ ինչ -որ բան էր պատահել, և RCD անջատիչն այն անջատել էր, և ջեռուցումն նույնպես անջատվել էր: Իմ բախտը բերեց, որ եկա այնտեղ, այլապես մի քանի օրից ամեն ինչ սառած կլիներ, ինչը շատ վատ է խողովակների և մարտկոցների համար:

Ես ունեի մի քանի Raspberry Pi և ջերմային տվիչ, ուստի մտածեցի. Ստորև բերված հրահանգները ենթադրում են, որ ունեք Raspberry Pi- ով Raspbian և ցանցային միացում: Իմ դեպքում դա Raspberry Pi B+ է Raspbian- ով (2018–06–27-raspbian-stretch-lite):

Քայլ 1: Temերմաստիճանի մոնիտորինգ

Երմաստիճանի մոնիտորինգ
Երմաստիճանի մոնիտորինգ
Երմաստիճանի մոնիտորինգ
Երմաստիճանի մոնիտորինգ

Ինչպե՞ս միացնել DS18B20 ջերմաստիճանի տվիչ: Ուղղակի google- ում արեք, թե ինչպես դա անել, և կտեսնեք այսպիսի շատ նկարներ.

Իմ դեպքում ես ունեի սև, դեղին և կարմիր լարեր: Սևը հիմնավորված է, անցնում է Ground pin- ի, կարմիրը `հզորության - անցնում է 3.3v pin- ի, իսկ դեղինը` տվյալների, պետք է անցնի GPIO4 փին, տվյալների և հզորության միջև միացված 4.7 kOm ռեզիստորով: Նշում, կարող եք միացնել մի քանի տվիչ զուգահեռաբար (դրանք թվային են և ունեն տարբեր հասցեներ), ձեզ հարկավոր է միայն մեկ դիմադրություն: Սենսորը միացնելուց հետո դուք պետք է միացնեք 1Wire- ը raspi-config- ում.

sudo raspi-config

Գնացեք Ինտերֆեյսինգի 5 տարբերակ, միացրեք P7 1-Wire և վերագործարկեք:

Այնուհետև կարող եք ստուգել, արդյոք տեսնում եք սենսորը.

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

Դուք պետք է տեսնեք այսպիսի բան.

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

28–00044eae2dff- ը մեր ջերմաստիճանի տվիչն է:

Սարքավորումը պատրաստ է: Այժմ ես պետք է կարգավորեմ մոնիտորինգի հատվածը: Ինձ պետք է մի բան, որը ցույց կտա ինձ տվյալները և կտեղեկացնի ինձ, եթե սարքը որոշ ժամանակով անջատված է կամ հոսանք չկա, կամ ջերմաստիճանը ցածր է: Ակնհայտ է, որ դա չի կարող լինել ազնվամորի pi- ն, ինտերնետում պետք է լինի ինչ -որ սերվեր կամ ծառայություն, որը վերահսկում է իմ սարքը:

Ես կարող եմ ստեղծել մի պարզ սերվեր, ստանալ հոստինգ և կարգավորել ամեն ինչ, բայց անկեղծորեն, ես չեմ ուզում: Բարեբախտաբար, ինչ -որ մեկն արդեն մտածել է այս մասին և ստեղծել cloud4rpi.io ՝ ձեր սարքի ամպային կառավարման վահանակը:

Քայլ 2: Կարգավորեք Cloud4Rpi.io- ն

Cloud4Rpi.io- ի կարգավորում
Cloud4Rpi.io- ի կարգավորում

Cloud4Rpi- ն տրամադրում է ծառայություն, որը թույլ է տալիս ձեր սարքին ուղարկել և ստանալ տվյալներ ՝ օգտագործելով MQTT կամ HTTP արձանագրությունները: Նրանք ունեն հաճախորդների գրադարան Python- ի համար, այնպես որ ես կօգտագործեմ Python- ը:

Python- ի օրինակները, որոնք գալիս են Cloud4Rpi ծառայության հետ, արդեն պարունակում են ծածկագիր DS18B20 ջերմաստիճանի տվիչի համար:

Այսպիսով, ես գնացի https://cloud4rpi.io, ստեղծեցի հաշիվ և այնտեղ ավելացրի նոր սարք: Սարքի էջն ունի նշան `տող, որը նույնականացնում է սարքը և որը պետք է նշվի տվյալներ ուղարկող ծրագրում:

Սկսելու համար, միշտ լավ գաղափար է փաթեթների կառավարչի թարմացումը և փաթեթների արդիականացումը (նշեք. Դա կարող է տևել ժամեր, եթե որոշ ժամանակ չեք արդիականացրել):

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

Այնուհետև տեղադրեք git, Python և դրա փաթեթների կառավարիչ Pip:

sudo apt-get տեղադրել git python python-pip

Այնուհետև տեղադրեք cloud4rpi Python գրադարանը.

sudo pip- ը տեղադրել cloud4rpi

Վերջապես, ես պատրաստ եմ գրել իմ կառավարման ծրագիրը: Ես սկսում եմ օրինակից ՝

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

Հիմնական ծրագրի ֆայլը control.py է - ես պետք է փոփոխեմ այն իմ կարիքների համար: Նախ խմբագրեք ծրագիրը և տեղադրեք նշան.

sudo nano control.py

Գտեք DEVICE_TOKEN = '…'] տող և այնտեղ նշեք սարքի նշանը: Դրանից հետո ես կարող եմ պարզապես գործարկել ծրագիրը. Այն աշխատում է և հաղորդում ջերմաստիճան RoomTemp փոփոխականում.

sudo python control.py

Այն աշխատում և հաղորդում է ջերմաստիճանը RoomTemp փոփոխականում:

Նկատի ունեցեք, որ այն հայտնաբերում է բոլոր onewire ds18b20 տվիչները

ds_sensors = ds18b20. DS18B20.find_all ()

և օգտագործում է առաջին գտած սենսորը ՝

RoomTemp ': {' type ':' numeric ',' bind ': ds_sensors [0] if ds_sensors else None}

Լավ, դա հեշտ էր, քանի որ ընտրանքային ծրագիրն ունի այն ամենը, ինչ անհրաժեշտ է Raspberry Pi- ի վրա ds18b20 սենսորով աշխատելու համար: Այժմ ես պետք է գտնեմ էներգիայի կարգավիճակի մասին հաշվետվության ձևը:

Քայլ 3: UPS մոնիտորինգ

UPS մոնիտորինգ
UPS մոնիտորինգ

Հաջորդ բանը, որ ես ուզում եմ վերահսկել, UPS- ի կարգավիճակն է, այնպես որ, եթե հոսանքի անջատում լինի, ես դրա մասին կիմանամ նախքան ամեն ինչ անջատվելը:

Ես ունեմ APC UPS ՝ USB հսկողությամբ, ուստի արագ գուգլեցի և պարզեցի, որ ինձ apcupsd է պետք: https://www.anites.com/2013/09/monitoring-ups.html… Ես մի քանի անգամ փորձեցի տեղադրել apt-get- ի միջոցով, և դա ինձ համար տարբեր պատճառներով չէր աշխատում: Ես ցույց կտամ, թե ինչպես տեղադրել այն աղբյուրներից:

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

Հետո ես խմբագրում եմ apcupsd.conf- ը ՝ USB- ի միջոցով իմ UPS- ին միանալու համար:

sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE խելացի UPSCABLE usb ##UPSTYPE apcsmart #ՍԱՐՔ/dev/ttyS0 UPSTYPE usb ՍԱՐՔ

Այժմ ես կարող եմ միացնել USB մալուխը UPS- ից RaspberryPi- ին և ստուգել, թե արդյոք UPS- ը կգտնվի:

sudo apctest

Այն չպետք է ձեզ սխալ հաղորդագրություններ տա:

Այժմ sevice apcupsd- ը պետք է սկսել.

sudo systemctl սկսել apcupsd

UPS- ի կարգավիճակը հարցնելու համար կարող եմ օգտագործել կարգավիճակի հրաման.

sudo /etc/init.d/apcupsd կարգավիճակը

Եվ դա մոտավորապես ինչ -որ բան կարտադրի.

APC: 001, 035, 0855 ԹՎԱԿԱՆԸ ՝ 2018-10-14 16:55:30 +0300 ՀԱՅԱՍՏԱՆԸ ՝ vcontrol VERSION ՝ 3.14.14 (31 մայիսի 2016) debian UPSNAME: vcontrol CABLE: USB Cable DRIVER: USB UPS Driver UPSMODE: Stand Alone ՍԿՍԱ 0 վայրկյան զգացում. Միջին LOTRANS: 140.0 վոլտ HITRANS: 300.0 վոլտ ALARMDEL: 30 վայրկյան BATTV: 14.2 վոլտ LASTXFER.: 2014-06-10 NOMINV: 230 վոլտ NOMBATTV: 12.0 վոլտ NOMPOWER: 390 Վտ FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Ինձ պետք է կարգավիճակ, որը «ՍՏԱՏՈ:Ս» տողն է:

Cloud4rpi գրադարանը պարունակում է «rpy.py» մոդուլ, որը վերադարձնում է Raspberry Pi համակարգի պարամետրերը, ինչպիսիք են հյուրընկալողի անունը կամ պրոցեսորի ջերմաստիճանը: Քանի որ այդ բոլոր պարամետրերը որոշ հրամանների գործարկման և ելքի վերլուծման արդյունք են, այն պարունակում է նաև հարմար «parse_output» գործառույթ, որն անում է այն, ինչ ինձ պետք է: Ահա թե ինչպես ստանալ իմ UPS կարգավիճակը.

def ups_status (): result = rpi.parse_output (r'STATUS / s+: / s+(S+) ', [' /etc/init.d/apcupsd ',' status '])) եթե արդյունքը. վերադարձ արդյունքը այլ: վերադարձ «ԱՆՀԱՅՏ»

Այս կարգավիճակը cloud4rpi- ին ուղարկելու համար ես պետք է հայտարարեմ փոփոխական UPSStatus և կապեմ այն իմ ups_status գործառույթին. Այժմ ես կարող եմ գործարկել իմ ծրագիրը.

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

Եվ ես կարող եմ անմիջապես տեսնել իմ փոփոխականը cloud4rpi սարքի էջում:

Քայլ 4. «Արտադրության» պատրաստում

Պատրաստվում է «արտադրությանը»
Պատրաստվում է «արտադրությանը»

Ամեն ինչ աշխատում է, և այժմ ես պետք է սարքս պատրաստեմ առանց հսկողության ռեժիմի:

Սկզբից ես պատրաստվում եմ հարմարեցնել ժամանակային ընդմիջումները: Հարցման միջակայքը սահմանում է, թե որքան հաճախ է ծրագիրը ստուգում ջերմաստիճանը և UPS- ի կարգավիճակը. Սահմանեք այն մեկ վայրկյանի վրա:

Արդյունքները ամպ են ուղարկվում ամեն 5 րոպեն մեկ, իսկ ախտորոշիչ տեղեկատվությունը `ամեն ժամ:

# Հաստատուններ DATA_SENDING_INTERVAL = 300 # վրկ DIAG_SENDING_INTERVAL = 3600 # վրկ POLL_INTERVAL = 1 # վրկ

Երբ UPS- ի կարգավիճակը փոխվում է. Ես չեմ ուզում, որ իմ սարքը սպասի 5 րոպե, և ես անմիջապես տվյալներ եմ ուղարկում: Այսպիսով, ես մի փոքր փոփոխեցի հիմնական օղակը, և այն հետևյալն է թվում.

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' մինչդեռ True: newUPS = ups_status () if (data_timer <= 0) or (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = new = = device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL քուն (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

Փորձարկում. Գործարկեք սցենարը.

sudo python control.py

Եվ ես կարող եմ դիտել UPS կարգավիճակը իմ սարքի էջում:

Եթե անջատեմ UPS- ի սնուցումը, կարգավիճակը փոխվում է մի քանի վայրկյանում, այնպես որ ամեն ինչ աշխատում է: Այժմ ես պետք է սկսեմ apcupsd և իմ control.py համակարգի գործարկման վրա: Apcupsd ծառայությունը հին է, և այն ժամանակակից raspbian- ով սկսելու համար ես պետք է փոփոխեմ /etc/init.d/apcupsd ֆայլը ՝ ավելացնելով այս տողերը վերևում ՝

### ՍԿՍԵԼ INIT INFO # Ապահովում է ՝ apcupsd # Պահանջվող-Սկիզբ ՝ $ all # Պահանջվող-Կանգառ ՝ # Լռելյայն-Սկիզբ ՝ 2 3 4 5 # Լռելյայն-Կանգառ. ՏԵFԵԿՈԹՅՈՆՆԵՐ#

Այնուհետև միացրեք ծառայությունը.

sudo systemctl միացնել apcupsd- ը

Այնուհետև սկսեք ծառայությունը.

sudo systemctl սկսել apcupsd

Այժմ apcupsd- ը կսկսվի համակարգի գործարկման ժամանակ:

Control.py- ն որպես ծառայություն տեղադրելու համար ես օգտագործեցի մատուցվող service_install.sh սցենարը.

sudo bash service_install.sh/cloud4rpi/control.py

Այժմ ծառայությունը սկսված է, և այն պետք է գոյատևի վերաբեռնումից հետո:

Քայլ 5: Կառավարման վահանակի տեղադրում

Կառավարման վահանակի տեղադրում
Կառավարման վահանակի տեղադրում

Cloud4rpi- ն թույլ է տալիս տեղադրել իմ սարքի կառավարման վահանակը: Կարող եք ավելացնել «վիջեթներ» և դրանք կապել սարքի փոփոխականների հետ:

Իմ սարքն ապահովում է միայն կարդալու երկու փոփոխական `RoomTemp և UPSStatus:

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

Ես ավելացրել եմ 3 վիջեթ - RoomTemp- ի համար, UPSStatus- ի համար տեքստ և RoomTemp- ի գծապատկեր:

Ես կարող եմ ահազանգեր տեղադրել, այնպես որ ես նամակ եմ ստանում, երբ ջերմաստիճանը նշված սահմաններից դուրս է, UPS- ն անցանց է լինում, կամ սարքն ինքնին տվյալներ չի ուղարկում: երբ ինչ -որ բան այն չէ, այնպես որ կարող եմ զանգահարել հարևաններին և խնդրել նրանց ստուգել, թե ինչ է կատարվում: Ահա control.py- ի իրական կոդը:

Խորհուրդ ենք տալիս: