Isi kandungan:

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

Pada suatu hujung minggu musim sejuk, saya pergi ke rumah negara saya, dan mendapati di sana sangat sejuk. Sesuatu telah berlaku dengan elektrik dan pemutus RCD telah mematikannya, dan pemanasan juga mati. Saya bernasib baik kerana saya datang ke sana, jika tidak dalam beberapa hari semuanya akan dibekukan yang sangat buruk untuk paip dan radiator.

Saya mempunyai beberapa alat Raspberry Pi, dan sensor terma, jadi saya berfikir - mengapa saya tidak membuat alat pemantauan yang mudah? Arahan di bawah menganggap anda telah menyediakan Raspberry Pi dengan Raspbian dan sambungan rangkaian. Bagi saya, 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 menyambungkan sensor suhu DS18B20? Cuma google bagaimana melakukannya, dan anda akan melihat banyak gambar seperti ini:

Dalam kes saya, saya mempunyai wayar Hitam, Kuning dan Merah. Hitam adalah tanah, pergi ke pin Ground, merah berkuasa - pergi ke pin 3.3v, dan kuning adalah data - harus pergi ke pin GPIO4, dengan perintang 4.7 kOm disambungkan antara data dan kuasa. Perhatikan, anda boleh menyambungkan beberapa sensor secara selari (mereka digital, dan mempunyai alamat yang berbeza), anda hanya memerlukan satu perintang. Selepas menyambungkan sensor anda, anda harus mengaktifkan 1Wire dalam raspi-config:

sudo raspi-config

Pergi ke 5 pilihan Interfacing, aktifkan P7 1-Wire dan reboot.

Kemudian anda boleh menguji jika anda dapat melihat sensor:

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

Anda mesti melihat sesuatu seperti ini:

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

28–00044eae2dff adalah sensor suhu kami.

Perkakasan sudah siap. Sekarang saya perlu menyediakan bahagian pemantauan. Saya memerlukan sesuatu yang akan menunjukkan data kepada saya dan memberitahu saya jika peranti terputus untuk sementara waktu atau tidak ada kuasa, atau suhunya rendah. Jelas ini bukan raspberry pi sendiri, semestinya ada beberapa pelayan atau perkhidmatan di internet yang memantau peranti saya.

Saya boleh membuat pelayan mudah, mendapatkan hosting dan menyiapkan semuanya, tetapi secara tidak langsung, saya tidak mahu. Nasib baik, ada yang memikirkan perkara ini dan membuat cloud4rpi.io - panel kawalan awan untuk peranti anda.

Langkah 2: Menyiapkan Cloud4Rpi.io

Menyiapkan Cloud4Rpi.io
Menyiapkan Cloud4Rpi.io

Cloud4Rpi menyediakan perkhidmatan yang membolehkan peranti anda mengirim dan menerima data menggunakan protokol MQTT atau HTTP. Mereka mempunyai pustaka pelanggan untuk Python, jadi saya akan menggunakan Python.

Contoh Python yang disertakan dengan perkhidmatan Cloud4Rpi sudah mengandungi kod untuk sensor suhu DS18B20.

Oleh itu, saya pergi ke https://cloud4rpi.io, membuat akaun dan menambah peranti baru di sana. Halaman peranti mempunyai token - tali yang mengenal pasti peranti, dan yang harus ditentukan dalam program yang mengirim data.

Sebagai permulaan, adalah idea yang baik untuk mengemas kini pengurus pakej dan menaik taraf pakej (nota: mungkin memerlukan waktu berjam-jam jika anda belum menaik taraf untuk sementara waktu):

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

Kemudian, pasang git, Python dan Pip pengurus pakejnya:

sudo apt-get install git python python-pip

Kemudian, pasang pustaka cloud4rpi Python:

sudo pip pasang cloud4rpi

Akhirnya, saya bersedia untuk menulis program kawalan saya. Saya mulakan dari contoh yang terdapat di

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

Fail program utama adalah control.py - Saya perlu mengubahnya untuk keperluan saya. Pertama, edit program dan tampal token:

sudo nano control.py

Cari baris DEVICE_TOKEN = '…'] dan tentukan token peranti di sana. Selepas itu saya hanya dapat menjalankan program: Ia berfungsi dan melaporkan suhu dalam pemboleh ubah RoomTemp:

sudo python control.py

Ia berfungsi dan melaporkan suhu dalam pemboleh ubah RoomTemp.

Perhatikan bahawa ia menemui semua sensor ds18b20 onewire

ds_sensors = ds18b20. DS18B20.find_all ()

dan menggunakan sensor yang dijumpai pertama:

RoomTemp ': {' type ':' numeric ',' bind ': ds_sensors [0] jika ds_sensors lain Tiada}

Ok, itu mudah, kerana program sampel mempunyai semua yang diperlukan untuk berfungsi dengan sensor ds18b20 pada Raspberry Pi. Sekarang saya perlu mencari cara untuk melaporkan status kuasa.

Langkah 3: Pemantauan UPS

Pemantauan UPS
Pemantauan UPS

Perkara seterusnya yang ingin saya pantau adalah status UPS, jadi jika berlaku gangguan bekalan elektrik, saya akan mengetahui mengenainya sebelum semuanya terputus.

Saya mempunyai UPS APC dengan kawalan USB, jadi saya cepat-cepat pergi ke Google dan mendapati bahawa saya memerlukan apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Saya mencuba beberapa kali untuk memasangnya melalui apt-get, dan ia tidak berfungsi untuk saya dengan pelbagai sebab. Saya akan menunjukkan cara memasangnya dari sumber.

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 buat sudo buat pemasangan

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

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

Sekarang saya boleh memasang kabel USB dari UPS ke RaspberryPi dan menguji apakah UPS dijumpai.

sudo apctest

Ia tidak akan memberi anda mesej ralat.

Sekarang sevice apcupsd harus dimulakan:

sudo systemctl mulakan apcupsd

Untuk menanyakan status UPS, saya boleh menggunakan arahan status:

status sudo /etc/init.d/apcupsd

Dan ia akan menghasilkan sesuatu seperti ini:

APC: 001, 035, 0855DATE: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSION: 3.14.14 (31 May 2016) debian UPSNAME: vcontrol CABLE: USB Cable DRIVER: USB UPS Driver UPSMODE: Berdiri Sendiri STARTTIME: 2018-10-14 16:54:28 +0300 MODEL: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238.0 Volt LOADPCT: 0.0 Percent BCHARGE: 100.0 Percent TIMELEFT: 293.3 Minutes MBATTCHG: 5 Percent MINTIMEL: 3 Minutes MAXTIME: 0 Detik SENSE: Medium LOTRANS: 140.0 Voltan HITRANS: 300.0 Volt ALARMDEL: 30 Detik BATTV: 14.2 Volt LASTXFER: Tiada pemindahan sejak turnon: 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

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

Pustaka Cloud4rpi mengandungi modul 'rpy.py' yang mengembalikan parameter sistem Raspberry Pi seperti nama host atau suhu cpu. Oleh kerana semua parameter tersebut adalah hasil menjalankan beberapa perintah dan menguraikan output, ini juga mengandungi fungsi 'parse_output' yang berguna yang melakukan apa yang saya perlukan. Ini adalah cara mendapatkan status UPS saya:

def ups_status (): hasil = rpi.parse_output (r'STATUS / s +: / s + (S +) ', [' /etc/init.d/apcupsd ',' status ']) jika hasil: hasil kembali lain: kembali 'TIDAK DIKETAHUI'

Untuk menghantar status ini ke cloud4rpi, saya perlu menyatakan UPSStatus pemboleh ubah dan mengikatnya ke fungsi ups_status saya: Sekarang saya dapat menjalankan program saya:

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

Dan saya dapat melihat pemboleh ubah saya dengan segera di halaman peranti cloud4rpi.

Langkah 4: Bersedia untuk "produksi"

Bersedia untuk "produksi"
Bersedia untuk "produksi"

Everyting berfungsi, dan sekarang saya perlu menyediakan peranti saya ke mod tanpa pengawasan.

Sebagai permulaan, saya akan menyesuaikan selang waktu. Selang undian menentukan seberapa kerap program memeriksa suhu dan status UPS - tetapkan pada satu saat.

Hasil dihantar ke cloud setiap 5 minit, dan maklumat diagnostik - setiap jam.

# PemalarDATA_SENDING_INTERVAL = 300 # saat DIAG_SENDING_INTERVAL = 3600 # saat POLL_INTERVAL = 1 # saat

Apabila status UPS berubah - saya tidak mahu peranti saya menunggu selama 5 minit, dan saya segera menghantar data. Oleh itu, saya telah sedikit mengubah gelung utama dan kelihatan seperti ini:

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

Ujian: menjalankan skrip:

sudo python control.py

Dan saya dapat melihat status UPS di halaman peranti saya.

Sekiranya saya mematikan kuasa UPS, status berubah dalam beberapa saat, jadi semuanya berfungsi. Sekarang saya perlu memulakan apcupsd dan control.py saya pada permulaan sistem. Perkhidmatan apcupsd sudah lama dan untuk memulakannya pada raspbian moden, saya harus mengubah fail /etc/init.d/apcupsd, dengan menambahkan baris-baris ini di suatu tempat di bahagian atas:

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

Kemudian aktifkan perkhidmatan:

sudo systemctl mengaktifkan apcupsd

Kemudian mulakan perkhidmatan:

sudo systemctl mulakan apcupsd

Sekarang apcupsd akan dimulakan pada permulaan sistem.

Untuk memasang control.py sebagai perkhidmatan, saya menggunakan skrip service_install.sh yang disediakan:

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

Kini perkhidmatan dimulakan dan ia masih perlu dijalankan semula.

Langkah 5: Menyiapkan Panel Kawalan

Menyiapkan Panel Kawalan
Menyiapkan Panel Kawalan

Cloud4rpi membolehkan saya menyediakan panel kawalan untuk peranti saya. Anda dapat menambahkan "widget" dan mengikatnya ke pemboleh ubah peranti.

Peranti saya menyediakan dua pemboleh ubah baca sahaja - RoomTemp dan UPSStatus:

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

Saya menambah 3 widget - Nombor untuk RoomTemp, Teks untuk UPSStatus dan Carta untuk RoomTemp.

Saya boleh menetapkan amaran, jadi saya menerima e-mel apabila suhu berada di luar jangkauan yang ditentukan, UPS pergi ke luar talian atau peranti itu sendiri tidak menghantar data apabila sepatutnya. Sekarang saya dapat memastikan rumah negara saya baik-baik saja, dan saya dapat diberitahu apabila ada yang tidak kena, jadi saya dapat menghubungi jiran dan meminta mereka untuk memeriksa apa yang sedang berlaku. Inilah kod sebenar control.py.

Disyorkan: