Mundarija:

RaspberryPi va Cloud4Rpi yordamida DIY uylarini kuzatish: 5 qadam
RaspberryPi va Cloud4Rpi yordamida DIY uylarini kuzatish: 5 qadam

Video: RaspberryPi va Cloud4Rpi yordamida DIY uylarini kuzatish: 5 qadam

Video: RaspberryPi va Cloud4Rpi yordamida DIY uylarini kuzatish: 5 qadam
Video: В Google AIY Projects добавили естественное человеческое взаимодействие с Raspberry Pi 2024, Noyabr
Anonim
RaspberryPi va Cloud4Rpi yordamida DIY uylarini kuzatish
RaspberryPi va Cloud4Rpi yordamida DIY uylarini kuzatish

Qishki dam olish kunlarining birida men o'z uyimga bordim va u erda juda sovuq ekanini bildim. Elektr bilan nimadir sodir bo'ldi va RCD uzgichi uni o'chirib qo'ydi va isitish ham o'chdi. Men u erga kelganimga omad kulib boqdi, aks holda bir necha kun ichida hamma narsa muzlab ketardi, bu quvurlar va radiatorlar uchun juda yomon.

Menda bir nechta Raspberry Pi va termal sensor bor edi, shuning uchun men o'yladim - nima uchun men oddiy kuzatuv moslamasini qilmayman? Quyidagi ko'rsatmalarga ko'ra, sizda Raspbian va tarmoq ulanishi o'rnatilgan Raspberry Pi bor. Mening holimda bu Raspbian bilan Raspberry Pi B+ (2018–06–27-raspbian-stretch-lite).

1 -qadam: haroratni nazorat qilish

Haroratni kuzatish
Haroratni kuzatish
Haroratni kuzatish
Haroratni kuzatish

DS18B20 harorat sensori qanday ulanadi? Buni qanday qilish kerak, google -da, va siz shunga o'xshash ko'plab rasmlarni ko'rasiz:

Mening holatimda menda qora, sariq va qizil simlar bor edi. Qora - erga, erga - pin, qizil - quvvatga - 3,3v pinli, sariq - ma'lumotga - GPIO4 piniga, ma'lumot va quvvat o'rtasida 4,7 kOm qarshilikka ulangan bo'lishi kerak. parallel ravishda (ular raqamli va har xil manzilga ega) sizga faqat bitta rezistor kerak. Sensorni ulaganingizdan so'ng, raspi-configda 1Wire-ni yoqishingiz kerak:

sudo raspi-config

5 ta interfeysga o'ting, P7 1-Wire-ni yoqing va qayta yoqing.

Keyin siz sensorni ko'rishingiz mumkinligini tekshirishingiz mumkin:

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

Siz shunga o'xshash narsani ko'rishingiz kerak:

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

28–00044eae2dff - bu bizning harorat sensori.

Uskunalar tayyor. Endi men monitoring qismini o'rnatishim kerak. Menga ma'lumotni ko'rsatadigan va agar qurilma bir muddat uzilib qolsa yoki quvvat bo'lmasa yoki harorat past bo'lsa, menga xabar beradigan biror narsa kerak. Shubhasiz, bu malina pi bo'lishi mumkin emas, Internetda mening qurilmamni kuzatadigan server yoki xizmat bo'lishi kerak.

Men oddiy server yaratishim, xosting olishim va hamma narsani sozlashim mumkin, lekin men xohlamayman. Yaxshiyamki, kimdir bu haqda o'ylagan va sizning qurilmangiz uchun bulutli boshqaruv paneli - cloud4rpi.io yaratgan.

2 -qadam: Cloud4Rpi.io -ni sozlash

Cloud4Rpi.io -ni sozlash
Cloud4Rpi.io -ni sozlash

Cloud4Rpi sizning qurilmangizga MQTT yoki HTTP protokollari yordamida ma'lumotlarni yuborish va qabul qilish imkonini beradigan xizmatni taqdim etadi. Ularda Python uchun mijozlar kutubxonasi bor, shuning uchun men Pythondan foydalanaman.

Cloud4Rpi xizmati bilan ta'minlangan Python misollarida allaqachon DS18B20 harorat sensori kodi mavjud.

Shunday qilib, men https://cloud4rpi.io saytiga kirib, hisob yaratdim va u erda yangi qurilma qo'shdim. Qurilma sahifasida token mavjud - bu qurilmani aniqlaydigan va ma'lumotlarni yuboradigan dasturda ko'rsatilishi kerak bo'lgan satr.

Birinchidan, paket menejerini yangilash va paketlarni yangilash har doim yaxshi bo'ladi (eslatma: agar siz bir muncha vaqt yangilanmagan bo'lsangiz, soatlab vaqt ketishi mumkin):

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

Keyin git, Python va uning paket menejeri Pip -ni o'rnating:

sudo apt-get install python python-pip ni o'rnating

Keyin, cloud4rpi Python kutubxonasini o'rnating:

sudo pip cloud4rpi -ni o'rnatadi

Nihoyat, men o'z nazorat dasturimni yozishga tayyorman. Men https://github.com/cloud4rpi/cloud4rpi-raspberrypi manzilidagi misoldan boshlayman.

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

Asosiy dastur fayli - control.py - men uni ehtiyojlarim uchun o'zgartirishim kerak. Birinchidan, dasturni tahrirlang va belgini qo'ying:

sudo nano control.py

DEVICE_TOKEN = '…'] qatorini toping va u erda qurilma belgisini ko'rsating. Shundan so'ng men dasturni ishga tushirishim mumkin: u RoomTemp o'zgaruvchisida haroratni ishlaydi va hisobot beradi:

sudo python control.py

Bu RoomTemp o'zgaruvchisidagi harorat haqida ishlaydi va xabar beradi.

E'tibor bering, u bitta dw18b20 datchiklarini topadi

ds_sensors = ds18b20. DS18B20.find_all ()

va birinchi topilgan sensordan foydalanadi:

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

OK, bu oson edi, chunki namuna dasturida Raspberry Pi ds18b20 sensori bilan ishlash uchun kerak bo'lgan hamma narsa bor. Endi men kuch holatini xabar qilishning yo'lini topishim kerak.

3 -qadam: UPS monitoringi

UPS monitoringi
UPS monitoringi

Men kuzatmoqchi bo'lgan keyingi narsa - bu UPS holati, shuning uchun agar elektr uzilib qolsa, hamma narsa uzilishidan oldin bu haqda bilib olaman.

Menda USB boshqaruvli APC UPS bor, shuning uchun men tezda Google -ni tekshirib ko'rdim va menga apcupsd kerak ekanligini aniqladim. https://www.anites.com/2013/09/monitoring-ups.html… Men uni apt-get orqali o'rnatishga bir necha bor urinib ko'rdim va u turli sabablarga ko'ra men uchun ishlamadi. Men uni manbalardan qanday o'rnatishni ko'rsataman.

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

Keyin usc orqali UPS -ga ulanish uchun apcupsd.conf -ni tahrir qilaman.

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

Endi men USB kabelini UPS -dan RaspberryPi -ga ulashim va UPS topilganligini tekshirishim mumkin.

sudo apktest

Bu sizga xato haqida xabar bermasligi kerak.

Endi sevice apcupsd ishga tushirilishi kerak:

sudo systemctl apcupsd -ni ishga tushiring

UPS holatini so'rash uchun men status buyrug'idan foydalanishim mumkin:

sudo /etc/init.d/apcupsd holati

Va shunga o'xshash narsa chiqadi:

APC: 001, 035, 0855 DATE: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSION: 3.14.14 (31 may 2016) debian UPSNAME: vcontrol CABLE: USB kabel haydovchisi: USB UPS drayveri UPSMODE: yolg'iz Boshlanish vaqti: 2018-10-14 16:54:28 +0300 MODEL: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238.0 Volts LOADPCT: 0.0 foiz BCHARGE: 100.0 foiz TIMELEFT: 293.3 daqiqa MBATTCHG: 5 foiz minut: 3 minut MAXTIME: 0 soniya SENSE: O'rta LOTRANLAR: 140.0 Volt HITRANS: 300.0 Volt ALARMDEL: 30 soniya BATTV: 14.2 Volt LASTXFER: Turnondan beri hech qanday transfer yo'q NUMXFERS: 0 TONBATT: 0 soniya CUMONBATT: 0 soniya XOFFATBATT0: N2: 2014-06-10 NOMINV: 230 voltlik NOMBATTV: 12,0 voltlik NOMPOWER: 390 vattli dasturiy ta'minot: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Menga status kerak - bu "STATUS:" qatori.

Cloud4rpi kutubxonasida "rpy.py" moduli mavjud bo'lib, u Raspberry Pi tizimining parametrlarini qaytaradi, masalan, xost nomi yoki protsessor harorati. Bu parametrlarning barchasi ba'zi buyruqlarni bajarish va chiqishni tahlil qilish natijalari bo'lgani uchun, u menga kerakli narsani bajaradigan qulay "parse_output" funktsiyasini ham o'z ichiga oladi. UPS maqomini qanday olishim mumkin:

def ups_status (): result = rpi.parse_output (r'STATUS / s+: / s+( S+) ', [' /etc/init.d/apcupsd ',' status ']) if result: return result else: return "BILMAYDI"

Bu holatni cloud4rpi -ga yuborish uchun UPSStatus o'zgaruvchisini e'lon qilishim va uni ups_status funktsiyasiga bog'lashim kerak: Endi men o'z dasturimni ishga tushirishim mumkin:

o'zgaruvchilar = {'RoomTemp': {'turi': 'raqamli', 'bog'lash': ds_sensors [0]}, 'UPSStatus': {'turi': 'qator', 'bog'lash': ups_status}}

Va men o'z o'zgaruvchimni darhol cloud4rpi qurilma sahifasida ko'rishim mumkin.

4 -qadam: "ishlab chiqarishga" tayyorgarlik

"Ishlab chiqarishga" tayyorgarlik
"Ishlab chiqarishga" tayyorgarlik

Hammasi ishlamoqda, endi men qurilmamni qarovsiz rejimga tayyorlashim kerak.

Boshlash uchun men vaqt oralig'ini sozlayman. So'rovlar oralig'i dastur harorati va UPS holatini qanchalik tez -tez tekshirib turishini aniqlaydi - uni bir soniyaga o'rnating.

Natijalar har 5 daqiqada bulutga, diagnostika ma'lumotlari esa - har soatda yuboriladi.

# KonstantalarDATA_SENDING_INTERVAL = 300 # son DIAG_SENDING_INTERVAL = 3600 # son POLL_INTERVAL = 1 # sek

UPS holati o'zgarganda - men qurilmam 5 daqiqa kutishini xohlamayman va men darhol ma'lumotlarni yuboraman. Shunday qilib, men asosiy pastadirni biroz o'zgartirdim va shunday ko'rinadi:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' esa True: newUPS = ups_status () if (data_timer <= 0) yoki (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS = agar diag_ bo'lsa device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL uyqu (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

Sinov: skriptni ishga tushirish:

sudo python control.py

Va men UPS holatini qurilmam sahifasida ko'rishim mumkin.

Agar men UPS quvvatini o'chirib qo'ysam, vaziyat bir necha soniya ichida o'zgaradi, shuning uchun hamma narsa ishlaydi, endi tizimni ishga tushirishda apcupsd va control.py ni ishga tushirishim kerak. Apcupsd xizmati eski va uni zamonaviy raspbian -da ishga tushirish uchun /etc/init.d/apcupsd faylini o'zgartirish kerak, bu satrlarni yuqoriga qo'shib:

### INIT INFO INFO-ni boshlang # Ta'minlaydi: apcupsd # Majburiy-Boshlash: $ all # Kerakli-To'xtatish: # Standart-Boshlash: 2 3 4 5 # Standart-To'xtatish: # Qisqa tavsif: APC UPS-daemon… ### END INIT INFO#

Keyin xizmatni yoqing:

sudo systemctl apcupsd -ni yoqadi

Keyin xizmatni boshlang:

sudo systemctl apcupsd -ni ishga tushiring

Endi apcupsd tizimni ishga tushirishda boshlanadi.

Control.py -ni xizmat sifatida o'rnatish uchun men berilgan service_install.sh skriptidan foydalandim:

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

Endi xizmat boshlandi va u qayta yuklashdan omon qoladi.

5 -qadam: Boshqarish panelini sozlash

Boshqaruv panelini sozlash
Boshqaruv panelini sozlash

Cloud4rpi menga qurilmam uchun boshqaruv panelini o'rnatish imkonini beradi. Siz "vidjetlar" qo'shishingiz va ularni qurilma o'zgaruvchilariga ulashingiz mumkin.

Mening qurilmam faqat o'qish uchun ikkita o'zgaruvchini ta'minlaydi - RoomTemp va UPSStatus:

o'zgaruvchilar = {'RoomTemp': {'turi': 'raqamli', 'bog'lash': ds_sensors [0]}, 'UPSStatus': {'turi': 'qator', 'bog'lash': ups_status}}

Men 3 ta vidjet qo'shdim - RoomTemp uchun raqam, UPSStatus uchun matn va RoomTemp uchun jadval.

Men ogohlantirishlarni sozlashim mumkin, shuning uchun harorat belgilangan diapazondan tashqarida bo'lganda, men elektron pochta xabarini olaman, UPS oflayn rejimga o'tdi yoki qurilmaning o'zi kerakli vaqtda ma'lumotlarni yubormadi. Endi mening uyim yaxshi ekanligiga ishonchim komil bo'lishi mumkin va menga xabar berish mumkin Agar biror narsa noto'g'ri bo'lsa, men qo'shnilarimga qo'ng'iroq qilib, nima bo'layotganini tekshirishni so'rashim mumkin. Bu erda control.py ning haqiqiy kodi.

Tavsiya: