Daftar Isi:

Pemantauan Rumah DIY Dengan RaspberryPi dan Cloud4Rpi: 5 Langkah
Pemantauan Rumah DIY Dengan RaspberryPi dan Cloud4Rpi: 5 Langkah

Video: Pemantauan Rumah DIY Dengan RaspberryPi dan Cloud4Rpi: 5 Langkah

Video: Pemantauan Rumah DIY Dengan RaspberryPi dan Cloud4Rpi: 5 Langkah
Video: FULL !!! Sistem Keamanan Pintu Menggunakan Sensor Reed Switch dengan Notifikasi Telegram 2024, November
Anonim
Pemantauan Rumah DIY Dengan RaspberryPi dan Cloud4Rpi
Pemantauan Rumah DIY Dengan RaspberryPi dan Cloud4Rpi

Suatu akhir pekan musim dingin saya pergi ke rumah pedesaan saya, dan menemukan bahwa di sana sangat dingin. Sesuatu telah terjadi dengan listrik dan pemutus RCD telah mematikannya, dan pemanas juga mati. Saya beruntung saya datang ke sana, jika tidak dalam beberapa hari semuanya akan membeku yang sangat buruk untuk pipa dan radiator.

Saya memiliki beberapa Raspberry Pi di sekitar, dan sensor termal, jadi saya pikir - mengapa saya tidak membuat perangkat pemantauan sederhana? Petunjuk di bawah ini mengasumsikan Anda memiliki Raspberry Pi dengan Raspbian dan koneksi jaringan sudah diatur. Dalam kasus saya ini adalah Raspberry Pi B+ dengan Raspbian (2018–06–27-raspbian-stretch-lite).

Langkah 1: Pemantauan Suhu

Pemantauan Suhu
Pemantauan Suhu
Pemantauan Suhu
Pemantauan Suhu

Bagaimana cara menghubungkan sensor suhu DS18B20? Hanya google bagaimana melakukan ini, dan Anda akan melihat banyak gambar seperti ini:

Dalam kasus saya, saya memiliki kabel Hitam, Kuning dan Merah. Hitam adalah ground, menuju pin Ground, merah adalah power - menuju pin 3.3v, dan kuning adalah data - harus menuju pin GPIO4, dengan resistor 4,7 kOm terhubung antara data dan daya. Catatan, Anda dapat menghubungkan beberapa sensor secara paralel (mereka digital, dan memiliki alamat yang berbeda), Anda hanya perlu satu resistor. Setelah menghubungkan sensor Anda, Anda harus mengaktifkan 1Wire di raspi-config:

sudo raspi-config

Buka 5 opsi Interfacing, aktifkan P7 1-Wire dan reboot.

Kemudian Anda dapat menguji apakah Anda dapat melihat sensornya:

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

Anda akan melihat sesuatu seperti ini:

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

28–00044eae2dff adalah sensor suhu kami.

Perangkat keras sudah siap. Sekarang saya perlu mengatur bagian pemantauan. Saya memerlukan sesuatu yang akan menunjukkan data dan memberi tahu saya jika perangkat terputus untuk sementara waktu atau tidak ada daya, atau suhu rendah. Jelas ini bukan raspberry pi itu sendiri, harus ada beberapa server atau layanan di internet yang memonitor perangkat saya.

Saya bisa membuat server sederhana, mendapatkan hosting dan mengatur semuanya, tapi jujur, saya tidak mau. Untungnya, seseorang telah memikirkan hal ini dan membuat cloud4rpi.io - panel kontrol cloud untuk perangkat Anda.

Langkah 2: Menyiapkan Cloud4Rpi.io

Menyiapkan Cloud4Rpi.io
Menyiapkan Cloud4Rpi.io

Cloud4Rpi menyediakan layanan yang memungkinkan perangkat Anda mengirim dan menerima data menggunakan protokol MQTT atau HTTP. Mereka memiliki pustaka klien untuk Python, jadi saya akan menggunakan Python.

Contoh python yang disertakan dengan layanan Cloud4Rpi sudah berisi kode untuk sensor suhu DS18B20.

Jadi saya pergi ke https://cloud4rpi.io, membuat akun dan menambahkan perangkat baru di sana. Halaman perangkat memiliki token - string yang mengidentifikasi perangkat, dan yang harus ditentukan dalam program yang mengirim data.

Untuk memulainya, selalu merupakan ide yang baik untuk memperbarui manajer paket dan meningkatkan paket (catatan: dapat memakan waktu berjam-jam jika Anda belum memutakhirkan untuk sementara waktu):

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

Kemudian, instal git, Python dan manajer paketnya Pip:

sudo apt-get install git python python-pip

Kemudian, instal pustaka Python cloud4rpi:

sudo pip instal cloud4rpi

Akhirnya, saya siap untuk menulis program kontrol saya. Saya mulai dari contoh yang tersedia di

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

File program utama adalah control.py - Saya perlu memodifikasinya untuk kebutuhan saya. Pertama, edit program dan tempel token:

sudo nano control.py

Temukan baris DEVICE_TOKEN='…'] dan tentukan token perangkat di sana. Setelah itu saya cukup menjalankan program: Ini berfungsi dan melaporkan suhu dalam variabel RoomTemp:

sudo python control.py

Ia bekerja dan melaporkan suhu dalam variabel RoomTemp.

Perhatikan bahwa ia menemukan semua sensor ds18b20 onewire

ds_sensors = ds18b20. DS18B20.find_all()

dan menggunakan sensor yang pertama kali ditemukan:

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

Ok, itu mudah, karena contoh program memiliki semua yang diperlukan untuk bekerja dengan sensor ds18b20 pada Raspberry Pi. Sekarang saya perlu menemukan cara untuk melaporkan status daya.

Langkah 3: Pemantauan UPS

Pemantauan UPS
Pemantauan UPS

Hal berikutnya yang ingin saya pantau adalah status UPS, jadi jika ada pemadaman listrik, saya akan mengetahuinya sebelum semuanya terputus.

Saya memiliki UPS APC dengan kontrol USB, jadi saya segera mencari di Google dan menemukan bahwa saya memerlukan apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Saya mencoba beberapa kali untuk menginstalnya melalui apt-get, dan itu tidak berhasil untuk saya karena berbagai alasan. Saya akan menunjukkan cara menginstalnya dari sumbernya.

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

Kemudian saya mengedit apcupsd.conf untuk terhubung ke UPS saya melalui usb.

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

Sekarang saya dapat mencolokkan kabel USB dari UPS ke RaspberryPi dan menguji apakah UPS akan ditemukan.

sudo apctest

Seharusnya tidak memberi Anda pesan kesalahan.

Sekarang layanan apcupsd harus dimulai:

sudo systemctl start apcupsd

Untuk menanyakan status UPS, saya dapat menggunakan perintah status:

sudo /etc/init.d/apcupsd status

Dan itu akan menghasilkan sesuatu seperti ini:

APC: 001, 035, 0855DATE: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSION: 3.14.14 (31 Mei 2016) debian UPSNAME: vcontrol CABLE: Kabel USB DRIVER: USB UPS Driver UPSMODE: Stand Alone STARTTIME: 2018-10-14 16:54:28 +0300 MODEL: Back-UPS XS 650CI STATUS: LINEV: 238.0 Volts LOADPCT: 0.0 Persen BCHARGE: 100.0 Persen TIMELEFT: 293.3 Menit MBATTCHG: 5 Persen MINTIMEL: 3 Menit MAXTIME: 0 Detik SENSE: Sedang LOTRANS: 140.0 Volt HITRANS: 300.0 Volt ALARMDEL: 30 Detik BATTV: 14.2 Volt LASTXFER: Tidak ada transfer sejak turnon NUMXFERS: 0 TONBATT: 0 Detik CUMONBATT: 0 Detik XOFFBATT: N/A STATFLAGRIAL: 0x050000: 10-06-2014 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

Saya memerlukan status - yang merupakan baris "STATUS:".

Pustaka Cloud4rpi berisi modul 'rpy.py' yang mengembalikan parameter sistem Raspberry Pi seperti nama host atau suhu cpu. Karena semua parameter tersebut adalah hasil dari menjalankan beberapa perintah dan output parsing, ini juga berisi fungsi ' parse_output ' praktis yang melakukan persis seperti yang saya butuhkan. Ini adalah cara mendapatkan status UPS saya:

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

Untuk mengirim status ini ke cloud4rpi, saya perlu mendeklarasikan variabel UPSStatus dan mengikatnya ke fungsi ups_status saya: Sekarang saya dapat menjalankan program saya:

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

Dan saya bisa langsung melihat variabel saya di halaman perangkat cloud4rpi.

Langkah 4: Mempersiapkan “produksi”

Persiapan untuk "produksi"
Persiapan untuk "produksi"

Semuanya berfungsi, dan sekarang saya perlu menyiapkan perangkat saya ke mode tanpa pengawasan.

Untuk memulainya, saya akan menyesuaikan interval waktu. Interval polling menentukan seberapa sering program memeriksa suhu dan status UPS - setel ke satu detik.

Hasil dikirim ke cloud setiap 5 menit, dan informasi diagnostik - setiap jam.

# KonstantaDATA_SENDING_INTERVAL = 300 # detik DIAG_SENDING_INTERVAL = 3600 # detik POLL_INTERVAL = 1 # detik

Ketika status UPS berubah - saya tidak ingin perangkat saya menunggu selama 5 menit, dan saya segera mengirim data. Jadi saya telah sedikit memodifikasi loop utama dan terlihat seperti ini:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' while True: newUPS = ups_status() if (data_timer <= 0) atau (newUPS != prevUPS): device.publish_data() data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS jika diag_timer <= 0: device.publish_diag() diag_timer = DIAG_SENDING_INTERVAL sleep(POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

Pengujian: menjalankan skrip:

sudo python control.py

Dan saya dapat melihat status UPS di halaman perangkat saya.

Jika saya mematikan daya UPS, status berubah dalam beberapa detik, jadi semuanya berfungsi. Sekarang saya harus memulai apcupsd dan control.py saya pada startup sistem. Layanan Apcupsd sudah tua dan untuk memulainya pada raspbian modern, saya harus memodifikasi file /etc/init.d/apcupsd, dengan menambahkan baris ini di suatu tempat di atas:

### BEGIN INIT INFO# Menyediakan: apcupsd # Required-Start: $all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: APC UPS daemon… ### END INIT INFORMASI#

Kemudian aktifkan layanan:

sudo systemctl aktifkan appcupsd

Kemudian mulai layanan:

sudo systemctl start apcupsd

Sekarang apcupsd akan dimulai pada startup sistem.

Untuk menginstal control.py sebagai layanan, saya menggunakan skrip service_install.sh yang disediakan:

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

Sekarang layanan dimulai dan harus selamat dari reboot.

Langkah 5: Menyiapkan Panel Kontrol

Menyiapkan Panel Kontrol
Menyiapkan Panel Kontrol

Cloud4rpi memungkinkan saya mengatur panel kontrol untuk perangkat saya. Anda dapat menambahkan "widget" dan mengikatnya ke variabel perangkat.

Perangkat saya menyediakan dua variabel read-only - RoomTemp dan UPSStatus:

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

Saya menambahkan 3 widget - Nomor untuk RoomTemp, Teks untuk UPSStatus dan Bagan untuk RoomTemp.

Saya dapat mengatur peringatan, jadi saya menerima email ketika suhu di luar kisaran yang ditentukan, UPS offline atau perangkat itu sendiri tidak mengirim data ketika seharusnya. Sekarang saya dapat memastikan rumah pedesaan saya baik-baik saja, dan saya dapat diberi tahu ketika ada sesuatu yang salah, jadi saya bisa menelepon tetangga dan meminta mereka untuk memeriksa apa yang terjadi. Berikut adalah kode sebenarnya dari control.py.

Direkomendasikan: