İçindekiler:

RaspberryPi ve Cloud4Rpi ile Kendin Yap Ev İzleme: 5 Adım
RaspberryPi ve Cloud4Rpi ile Kendin Yap Ev İzleme: 5 Adım

Video: RaspberryPi ve Cloud4Rpi ile Kendin Yap Ev İzleme: 5 Adım

Video: RaspberryPi ve Cloud4Rpi ile Kendin Yap Ev İzleme: 5 Adım
Video: Raspberry Pi 4: ваш новый компьютер за 35$ 2024, Kasım
Anonim
RaspberryPi ve Cloud4Rpi ile Kendin Yap Ev İzleme
RaspberryPi ve Cloud4Rpi ile Kendin Yap Ev İzleme

Bir kış hafta sonu kır evime gittim ve orasının çok soğuk olduğunu öğrendim. Elektrikle ilgili bir şey oldu ve RCD kesici onu kapattı ve ısıtma da gitti. Oraya geldiğim için şanslıydım, aksi takdirde birkaç gün içinde her şey donmuş olurdu, bu da borular ve radyatörler için çok kötüydü.

Etrafımda birkaç Raspberry Pi ve bir termal sensör vardı, bu yüzden düşündüm - neden basit bir izleme cihazı yapmıyorum? Aşağıdaki talimatlar, Raspbian ve ağ bağlantısı kurulumuna sahip bir Raspberry Pi'niz olduğunu varsayar. Benim durumumda Raspbian ile Raspberry Pi B+ (2018–06–27-raspbian-stretch-lite).

Adım 1: Sıcaklık İzleme

Sıcaklık İzleme
Sıcaklık İzleme
Sıcaklık İzleme
Sıcaklık İzleme

DS18B20 sıcaklık sensörü nasıl bağlanır? Bunu nasıl yapacağınızı google'a yazın ve bunun gibi birçok resim göreceksiniz:

Benim durumumda Siyah, Sarı ve Kırmızı teller vardı. Siyah topraktır, Topraklama pimine gider, kırmızı güçtür - 3.3v pime gider ve sarı veridir - veri ve güç arasında bağlı 4.7 kOm dirençle GPIO4 pimine gitmelidir. Not, birkaç sensör bağlayabilirsiniz paralel olarak (dijitaldirler ve farklı adresleri vardır), yalnızca bir dirence ihtiyacınız vardır. Sensörünüzü bağladıktan sonra, raspi-config'de 1Wire'ı etkinleştirmelisiniz:

sudo raspi yapılandırması

5 Arayüz seçeneğine gidin, P7 1-Wire'ı etkinleştirin ve yeniden başlatın.

Ardından sensörü görüp görmediğinizi test edebilirsiniz:

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

Bunun gibi bir şey görmelisiniz:

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

28–00044eae2dff, sıcaklık sensörümüzdür.

Donanım hazır. Şimdi izleme bölümünü kurmam gerekiyor. Bana verileri gösterecek ve cihazın bağlantısı bir süreliğine kesilirse veya güç yoksa veya sıcaklık düşükse beni bilgilendirecek bir şeye ihtiyacım var. Açıkçası bu ahududu pi'nin kendisi olamaz, internette cihazımı izleyen bir sunucu veya servis olmalı.

Basit bir sunucu oluşturabilir, bir barındırma alabilir ve her şeyi kurabilirim, ama dürüst olmak gerekirse, istemiyorum. Neyse ki, birileri bunu zaten düşünmüş ve cihazınız için bir bulut kontrol paneli olan cloud4rpi.io'yu oluşturmuştur.

2. Adım: Cloud4Rpi.io'yu Kurma

Cloud4Rpi.io'yu Kurma
Cloud4Rpi.io'yu Kurma

Cloud4Rpi, cihazınızın MQTT veya HTTP protokollerini kullanarak veri gönderip almasına izin veren bir hizmet sağlar. Python için bir istemci kitaplıkları var, bu yüzden Python kullanacağım.

Cloud4Rpi hizmetiyle birlikte gelen Python örnekleri zaten DS18B20 sıcaklık sensörü için kod içeriyor.

Bu yüzden https://cloud4rpi.io'ya gittim, bir hesap oluşturdum ve oraya yeni bir cihaz ekledim. Aygıt sayfasında bir belirteç vardır - aygıtı tanımlayan ve veri gönderen programda belirtilmesi gereken bir dize.

Başlangıç olarak, bir paket yöneticisini güncellemek ve paketleri yükseltmek her zaman iyi bir fikirdir (not: bir süredir yükseltme yapmadıysanız saatler sürebilir):

sudo apt-get güncelleme && sudo apt-get yükseltme

Ardından git, Python ve paket yöneticisi Pip'i kurun:

sudo apt-get kurulumu git python python-pip

Ardından cloud4rpi Python kitaplığını kurun:

sudo pip cloud4rpi yükleyin

Sonunda kontrol programımı yazmaya hazırım. https://github.com/cloud4rpi/cloud4rpi-raspberrypi… adresinde bulunan örnekten başlıyorum.

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

Ana program dosyası control.py'dir - ihtiyaçlarım için değiştirmem gerekiyor. İlk önce programı düzenleyin ve bir jeton yapıştırın:

sudo nano kontrol.py

DEVICE_TOKEN='…'] satırını bulun ve orada bir cihaz belirteci belirtin. Bundan sonra programı çalıştırabilirim: Çalışır ve RoomTemp değişkeninde bir sıcaklık bildirir:

sudo python kontrolü.py

Çalışır ve RoomTemp değişkeninde bir sıcaklık bildirir.

Tüm onewire ds18b20 sensörlerini keşfettiğini unutmayın

ds_sensors = ds18b20. DS18B20.find_all()

ve bulunan ilk sensörü kullanır:

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

Tamam, bu kolaydı çünkü örnek program Raspberry Pi'de ds18b20 sensörü ile çalışmak için gereken her şeye sahip. Şimdi güç durumunu bildirmenin yolunu bulmam gerekiyor.

Adım 3: UPS İzleme

UPS İzleme
UPS İzleme

İzlemek istediğim bir sonraki şey UPS durumu, bu yüzden elektrik kesintisi olursa, her şeyin bağlantısı kesilmeden önce bunu öğreneceğim.

USB kontrollü bir APC UPS'im var, bu yüzden hızlıca google'a baktım ve apcupsd'ye ihtiyacım olduğunu buldum. https://www.anites.com/2013/09/monitoring-ups.html… Birkaç kez apt-get aracılığıyla yüklemeyi denedim ve çeşitli nedenlerle benim için çalışmadı. Kaynaklardan nasıl yükleneceğini göstereceğim.

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

Sonra apcupsd.conf'u UPS'ime usb ile bağlanmak için düzenlerim.

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

Artık UPS'ten RaspberryPi'ye USB kablosunu takabilir ve UPS'in bulunup bulunmadığını test edebilirim.

sudo apctest

Size hiçbir hata mesajı vermemelidir.

Şimdi sevice apcupsd başlatılmalıdır:

sudo systemctl apcupsd'yi başlat

UPS durumunu sorgulamak için bir durum komutu kullanabilirim:

sudo /etc/init.d/apcupsd durumu

Ve şöyle bir çıktı verirdi:

APC: 001, 035, 0855TARİH: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSİYON: 3.14.14 (31 Mayıs 2016) debian UPSNAME: vcontrol KABLO: USB Kablo SÜRÜCÜ: USB UPS Sürücü UPSMODE: Stand Alone BAŞLANGIÇ ZAMANI: 2018-10-14 16:54:28 +0300 MODEL: Back-UPS XS 650CI DURUM: ÇEVRİMİÇİ HAT: 238,0 Volt YÜK: 0,0 Yüzde BŞARJ: 100,0 Yüzde TIMELEFT: 293.3 Dakika MBATTCH: 5 Yüzde MINTIMEL: 3 Dakika MAX 0 Saniye SENSE: Orta LOTRANS: 140.0 Volt HITRANS: 300.0 Volt ALARMDEL: 30 Saniye BATTV: 14,2 Volt LASTXFER: Açıldığından beri transfer yok NUMXFERS: 0 TONBATT: 0 Saniye CUMONBATT: 0 Saniye XOFFBATTX: AG N/A STAT05TD02: 2014-06-10 NOMINV: 230 Volt NOMBATTV: 12,0 Volt NOMPOWER: 390 Watt YAZILIM: 892. R3. I USB FW:R3 END APC: 2018-10-14 16:55:38 +0300

"DURUM:" satırı olan bir duruma ihtiyacım var.

Cloud4rpi kitaplığı, ana bilgisayar adı veya işlemci sıcaklığı gibi Raspberry Pi sistem parametrelerini döndüren bir 'rpy.py' modülü içerir. Tüm bu parametreler, bazı komutları çalıştırmanın ve çıktıları ayrıştırmanın sonuçları olduğundan, tam olarak ihtiyacım olanı yapan kullanışlı bir 'parse_output' işlevi de içeriyor. UPS durumumu şu şekilde alabilirim:

def ups_status(): sonuç = rpi.parse_output(r'STATUS\s+:\s+(S+)', ['/etc/init.d/apcupsd', 'status']) if sonuç: dönüş sonucu başka: dönüş 'BİLİNMEYEN'

Bu durumu cloud4rpi'ye göndermek için bir değişken UPSStatus bildirmem ve bunu ups_status işlevime bağlamam gerekiyor: Artık programımı çalıştırabilirim:

değişkenler = { 'RoomTemp': { 'type': 'numeric', 'bind': ds_sensors[0] }, 'UPSStatus': { 'type': 'string', 'bind': ups_status } }

Ve değişkenimi cloud4rpi cihaz sayfasında hemen görebiliyorum.

Adım 4: “Üretime” hazırlanmak

“Üretime” hazırlanıyor
“Üretime” hazırlanıyor

Her şey çalışıyor ve şimdi cihazımı katılımsız moda hazırlamam gerekiyor.

Başlangıç olarak, zaman aralıklarını ayarlayacağım. Yoklama aralığı, programın sıcaklığı ve KGK durumunu ne sıklıkla kontrol edeceğini tanımlar - bunu bir saniyeye ayarlayın.

Sonuçlar her 5 dakikada bir buluta, teşhis bilgileri ise saatte bir gönderilir.

# SabitlerDATA_SENDING_INTERVAL = 300 # sn DIAG_SENDING_INTERVAL = 3600 # sn POLL_INTERVAL = 1 # sn

UPS durumu değiştiğinde - cihazımın 5 dakika beklemesini istemiyorum ve hemen veri gönderiyorum. Bu yüzden ana döngüyü biraz değiştirdim ve şöyle görünüyor:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' iken True: newUPS = ups_status() if (data_timer <= 0) veya (newUPS != prevUPS): device.publish_data() data_timer = DATA_SENDING_INTERVAL öncekiUPS = diag_timer ise newUPS <= diag_timer: device.publish_diag() diag_timer = DIAG_SENDING_INTERVAL uyku(POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

Test: komut dosyasını çalıştırın:

sudo python kontrolü.py

Ve cihaz sayfamda UPS durumunu izleyebilirim.

UPS gücünü kapatırsam, durum birkaç saniye içinde değişir, bu nedenle her şey çalışıyor. Şimdi sistem başlangıcında apcupsd'yi ve control.py'yi başlatmam gerekiyor. Apcupsd hizmeti eski ve onu modern raspbian'da başlatmak için /etc/init.d/apcupsd dosyasını en üstte bir yere şu satırları ekleyerek değiştirmeliyim:

### BEGIN INIT INFO# Şunları sağlar: apcupsd # Gerekli-Başlangıç: $all # Gerekli-Durdur: # Varsayılan-Başlangıç: 2 3 4 5 # Varsayılan-Durdur: # Kısa Açıklama: APC UPS arka plan programı… ### BAŞLANGIÇI BİTİR BİLGİ#

Ardından hizmeti etkinleştirin:

sudo systemctl apcupsd'yi etkinleştir

Ardından hizmeti başlatın:

sudo systemctl apcupsd'yi başlat

Şimdi sistem başlangıcında apcupsd başlatılacak.

Control.py'yi hizmet olarak yüklemek için sağlanan service_install.sh komut dosyasını kullandım:

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

Şimdi hizmet başlatıldı ve yeniden başlatmadan kurtulmalıdır.

Adım 5: Bir Kontrol Paneli Kurma

Kontrol Paneli Kurma
Kontrol Paneli Kurma

Cloud4rpi, cihazım için bir kontrol paneli kurmama izin veriyor. “Widget'lar” ekleyebilir ve bunları cihaz değişkenlerine bağlayabilirsiniz.

Cihazım iki salt okunur değişken sağlar - RoomTemp ve UPSStatus:

değişkenler = { 'RoomTemp': { 'type': 'numeric', 'bind': ds_sensors[0] }, 'UPSStatus': { 'type': 'string', 'bind': ups_status } }

3 widget ekledim - RoomTemp için Sayı, UPSStatus için Metin ve RoomTemp için bir Grafik.

Uyarılar ayarlayabilirim, böylece sıcaklık belirtilen aralığın dışında olduğunda, UPS çevrimdışı olduğunda veya gerektiği zaman cihazın kendisi veri göndermediğinde bir e-posta alırım. Artık kır evimin iyi olduğundan emin olabilirim ve bilgilendirilebilirim Bir şeyler ters gittiğinde, komşuları arayıp neler olup bittiğini kontrol etmelerini isteyebilirim. İşte control.py'nin gerçek kodu.

Önerilen: