Mündəricat:

RaspberryPi və Cloud4Rpi ilə DIY Ev Monitorinqi: 5 addım
RaspberryPi və Cloud4Rpi ilə DIY Ev Monitorinqi: 5 addım

Video: RaspberryPi və Cloud4Rpi ilə DIY Ev Monitorinqi: 5 addım

Video: RaspberryPi və Cloud4Rpi ilə DIY Ev Monitorinqi: 5 addım
Video: Мини ПК на Intel N100 - AC8-N, мощная безвентиляторная платформа, установка Home Assistant OS 2024, Noyabr
Anonim
RaspberryPi və Cloud4Rpi ilə DIY Ev Monitorinqi
RaspberryPi və Cloud4Rpi ilə DIY Ev Monitorinqi

Bir qış həftə sonu bağ evimə getdim və orada çox soyuq olduğunu öyrəndim. Elektriklə bir şey oldu və RCD açarı onu söndürdü və istilik də söndü. Oraya gəldiyim üçün şanslıydım, əks halda bir neçə gün ərzində borular və radiatorlar üçün çox pis olan hər şey donacaqdı.

Ətrafımda bir neçə Raspberry Pi və istilik sensoru var idi, buna görə düşündüm - niyə sadə bir izləmə cihazı hazırlamıram? Aşağıdakı təlimatlar, Raspbian və şəbəkə bağlantısı qurulmuş bir Raspberry Pi olduğunuzu güman edir. Mənim vəziyyətimdə Raspbian ilə Raspberry Pi B+ (2018-06-27-raspbian-stretch-lite).

Addım 1: Temperaturun monitorinqi

Temperatur monitorinqi
Temperatur monitorinqi
Temperatur monitorinqi
Temperatur monitorinqi

Bir DS18B20 temperatur sensörünü necə bağlamaq olar? Bunu necə edəcəyinizi google -a yazın və buna bənzər bir çox şəkil görəcəksiniz:

Mənim vəziyyətimdə Qara, Sarı və Qırmızı tellərim var idi. Qara torpaqdır, Ground pininə gedir, qırmızı gücə - 3.3v pinə, sarı isə məlumatdır - məlumat və güc arasında 4,7 kOm rezistor bağlı GPIO4 pininə keçməlidir. paralel olaraq (rəqəmsaldır və fərqli ünvanlara malikdir) yalnız bir rezistora ehtiyacınız var. Sensorunuzu bağladıqdan sonra raspi-config-də 1Wire-i aktiv etməlisiniz:

sudo raspi-config

5 Interfacing seçiminə gedin, P7 1-Wire-i aktiv edin və yenidən başladın.

Sensoru görə biləcəyinizi yoxlaya bilərsiniz:

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

Bənzər bir şey görməlisiniz:

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

28–00044eae2dff bizim temperatur sensorumuzdur.

Avadanlıq hazırdır. İndi monitorinq hissəsini qurmalıyam. Cihazın bir müddət kəsildiyi və ya elektrik enerjisinin olmaması və ya temperaturun aşağı olması halında mənə məlumatları göstərən və mənə xəbər verəcək bir şeyə ehtiyacım var. Aydındır ki, bu moruq pi özü ola bilməz, İnternetdə cihazımı izləyən bir server və ya xidmət olmalıdır.

Sadə bir server yarada bilərəm, ev sahibi ola bilərəm və hər şeyi qura bilərəm, amma səmimi olaraq istəmirəm. Xoşbəxtlikdən, kimsə bu barədə düşündü və cihazınız üçün bulud idarəetmə paneli olan cloud4rpi.io yaratdı.

Addım 2: Cloud4Rpi.io qurmaq

Cloud4Rpi.io qurmaq
Cloud4Rpi.io qurmaq

Cloud4Rpi, cihazınızın MQTT və ya HTTP protokollarından istifadə edərək məlumat göndərməsinə və almasına imkan verən bir xidmət təqdim edir. Python üçün müştəri kitabxanası var, buna görə Python istifadə edəcəyəm.

Cloud4Rpi xidməti ilə gələn Python nümunələrində artıq DS18B20 temp sensoru üçün kod var.

Beləliklə, https://cloud4rpi.io saytına daxil oldum, hesab yaratdım və ora yeni bir cihaz əlavə etdim. Cihaz səhifəsində bir nişan var - cihazı tanıyan və məlumat göndərən proqramda göstərilməlidir.

Başlamaq üçün bir paket menecerini yeniləmək və paketləri təkmilləşdirmək həmişə yaxşı bir fikirdir (qeyd: bir müddət təkmilləşdirməsəniz saatlar çəkə bilər):

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

Sonra git, Python və paket meneceri Pip -i quraşdırın:

sudo apt-get install python python-pip yükləyin

Sonra, cloud4rpi Python kitabxanasını quraşdırın:

sudo pip cloud4rpi quraşdırın

Nəhayət, nəzarət proqramımı yazmağa hazıram. Https://github.com/cloud4rpi/cloud4rpi-raspberrypi ünvanındakı nümunədən başlayıram.

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

Əsas proqram faylı control.py -dir - ehtiyaclarım üçün onu dəyişdirməliyəm. Əvvəlcə proqramı düzəldin və bir mö'cüzə yapışdırın:

sudo nano nəzarət.py

DEVICE_TOKEN = '…'] bir xətt tapın və orada bir cihaz nişanı göstərin. Bundan sonra proqramı sadəcə işlədə bilərəm: RoomTemp dəyişənində bir temperatur işləyir və bildirir:

sudo python control.py

RoomTemp dəyişənində bir temperatur işləyir və bildirir.

Qeyd edək ki, bütün onewire ds18b20 sensorlarını kəşf edir

ds_sensors = ds18b20. DS18B20.find_all ()

və ilk tapılan sensordan istifadə edir:

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

Yaxşı, bu asan idi, çünki nümunə proqramında Raspberry Pi -də ds18b20 sensoru ilə işləmək üçün lazım olan hər şey var. İndi gücün vəziyyətini bildirməyin yolunu tapmalıyam.

Addım 3: UPS Monitorinqi

UPS Monitorinqi
UPS Monitorinqi

Nəzarət etmək istədiyim növbəti şey UPS vəziyyətidir, buna görə elektrik kəsilsə, hər şey kəsilməzdən əvvəl bunu biləcəyəm.

USB nəzarətli bir APC UPS -ə sahibəm, buna görə tez bir zamanda googled və apcupsd -ə ehtiyacım olduğunu gördüm. https://www.anites.com/2013/09/monitoring-ups.html… Bir neçə dəfə apt-get vasitəsilə qurmağa çalışdım və müxtəlif səbəblərdən mənim üçün işləmədi. Mənbələrdən necə qurulacağını göstərəcəyəm.

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 sudo make install olun

Sonra usc vasitəsilə UPS -ə qoşulmaq üçün apcupsd.conf sənədini düzəldirəm.

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

İndi USB kabelini UPS -dən RaspberryPi -yə qoşa və UPS -in tapılıb -tapılmayacağını yoxlaya bilərəm.

sudo apctest

Sizə heç bir səhv mesajı verməməlidir.

İndi sevice apcupsd başlamalıdır:

sudo systemctl apcupsd başladın

UPS vəziyyətini soruşmaq üçün bir status əmrindən istifadə edə bilərəm:

sudo /etc/init.d/apcupsd statusu

Və belə bir şey çıxaracaq:

APC: 001, 035, 0855DATE: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSİYA: 3.14.14 (31 May 2016) debian UPSNAME: vcontrol KABEL: USB Kabel Sürücüsü: USB UPS Sürücü UPSMODE: Tək STARTTIME: 2018-10-14 16:54:28 +0300 MODEL: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238.0 Volt LOADPCT: 0.0 Yüzdə BCHARGE: 100.0 Yüzdə TIMELEFT: 293.3 Dəqiqə MBATTCHG: 5 faiz MINTIMEL: 3 dəqiqə MAXTIME: 0 Saniyə SENSE: Orta LOTRANLAR: 140.0 Volt HITRANS: 300.0 Volt ALARMDEL: 30 Saniyə BATTV: 14.2 Volt LASTXFER: Turnondan sonra transfer yoxdur NUMXFERS: 0 TONBATT: 0 Saniyə CUMONBATT: 0 Saniyə XOFFBATF02: N2: 2014-06-10 NOMINV: 230 Volt NOMBATTV: 12.0 Volt NOMPOWER: 390 Watt FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

"STATUS:" xətti olan bir statusa ehtiyacım var.

Cloud4rpi kitabxanasında, host adı və ya cpu istiliyi kimi Raspberry Pi sistem parametrlərini qaytaran 'rpy.py' modulu var. Bütün bu parametrlər bəzi əmrlərin işlədilməsinin və çıxışı təhlil etməyin nəticəsi olduğu üçün, ehtiyacım olanı yerinə yetirən lazımlı bir 'parse_output' funksiyasını da ehtiva edir. UPS statusumu necə əldə edə bilərəm:

def ups_status (): nəticə = rpi.parse_output (r'STATUS / s+: / s+(S+) ', [' /etc/init.d/apcupsd ',' status ']) əgər nəticə: nəticəni başqa yerə qaytar: qaytar 'NAMƏLUM'

Bu vəziyyəti cloud4rpi -yə göndərmək üçün bir dəyişən UPSStatus elan etməliyəm və ups_status funksiyama bağlamalıyam: İndi proqramımı işlədə bilərəm:

dəyişənlər = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}

Və dəyişənimi dərhal cloud4rpi cihaz səhifəsində görə bilərəm.

Addım 4: "İstehsalata" hazırlıq

"İstehsalata" hazırlaşırıq
"İstehsalata" hazırlaşırıq

Hər şey işləyir və indi cihazımı nəzarətsiz rejimə hazırlamalıyam.

Başlamaq üçün vaxt aralığını tənzimləyəcəyəm. Anket aralığı, proqramın temperaturu və UPS vəziyyətini nə qədər tez -tez yoxladığını müəyyən edir - bir saniyəyə təyin edin.

Nəticələr hər 5 dəqiqədə buluda, diaqnostik məlumatlar isə hər saat göndərilir.

# SabitDATA_SENDING_INTERVAL = 300 # san DIAG_SENDING_INTERVAL = 3600 # san POLL_INTERVAL = 1 # san

UPS vəziyyəti dəyişəndə - cihazımın 5 dəqiqə gözləməsini istəmirəm və dərhal məlumat göndərirəm. Beləliklə, əsas döngəni bir qədər dəyişdirdim və belə görünür:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' Doğru olarkən: newUPS = ups_status () if (data_timer <= 0) və ya (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS = diag_ əgər device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL yuxu (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

Test: run skript:

sudo python control.py

Və cihaz səhifəmdə UPS vəziyyətini izləyə bilərəm.

UPS gücünü söndürsəm, vəziyyət bir neçə saniyə ərzində dəyişir, buna görə də hər şey işləyir. İndi apcupsd və control.py sistemini işə salmalıyam. Apcupsd xidməti köhnədir və onu müasir raspbian -da başlatmaq üçün yuxarıdakı bir yerə bu sətirləri əlavə edərək /etc/init.d/apcupsd faylını dəyişdirməliyəm:

### INIT MƏLUMATINA BAŞLAYIN # Təmin edir: apcupsd # Zorunlu-Başlanğıc: $ all # Lazım-Dur: # Varsayılan-Başlat: 2 3 4 5 # Varsayılan-Dur: # Qısa Təsvir: APC UPS daemon… ### SON İNİT MƏLUMAT#

Sonra xidməti aktiv edin:

sudo systemctl apcupsd imkan verir

Sonra xidmətə başlayın:

sudo systemctl apcupsd başladın

İndi apcupsd sistemin başlanğıcında başlayacaq.

Control.py -ni bir xidmət olaraq qurmaq üçün verilən service_install.sh skriptindən istifadə etdim:

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

İndi xidmət başladı və yenidən başladıqdan sonra sağ qalacaq.

Addım 5: İdarəetmə Paneli qurun

Bir İdarəetmə Paneli qurmaq
Bir İdarəetmə Paneli qurmaq

Cloud4rpi, cihazım üçün bir idarəetmə paneli qurmağa imkan verir. "Vidjetlər" əlavə edə və onları cihaz dəyişənlərinə bağlaya bilərsiniz.

Cihazım iki oxunan dəyişəni təmin edir - RoomTemp və UPSStatus:

dəyişənlər = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}

3 widget əlavə etdim - RoomTemp üçün nömrə, UPSStatus üçün mətn və RoomTemp üçün bir cədvəl.

Xəbərdarlıqlar qura bilərəm, buna görə də temperatur müəyyən edilmiş diapazondan kənara çıxdıqda bir e -poçt alıram, UPS oflayn rejimə keçdi və ya cihaz özü lazım olduqda məlumat göndərmir. Bir şey səhv olanda qonşularımla telefon əlaqəsi saxlaya və onlardan baş verənləri yoxlamalarını istəyə bilərəm. Burada control.py -nin həqiqi kodu verilmişdir.

Tövsiyə: