فهرست مطالب:

نظارت بر خانه DIY با RaspberryPi و Cloud4Rpi: 5 مرحله
نظارت بر خانه DIY با RaspberryPi و Cloud4Rpi: 5 مرحله

تصویری: نظارت بر خانه DIY با RaspberryPi و Cloud4Rpi: 5 مرحله

تصویری: نظارت بر خانه DIY با RaspberryPi و Cloud4Rpi: 5 مرحله
تصویری: lighting control by Raspberry Pi and Node-RED | کنترل روشنایی با رزبری پای و داشبورد نود رد 2024, نوامبر
Anonim
نظارت بر DIY House با RaspberryPi و Cloud4Rpi
نظارت بر DIY House با RaspberryPi و Cloud4Rpi

یک آخر هفته زمستانی به خانه روستایی خود رفتم و متوجه شدم آنجا بسیار سرد است. اتفاقی در مورد برق افتاده بود و RCD breaker آن را خاموش کرده بود و گرمایش نیز خاموش شد. خوش شانس بودم که به آنجا آمدم ، وگرنه در چند روز همه چیز یخ زده بود که برای لوله ها و رادیاتورها بسیار بد است.

من چندین رزبری پای در اطراف خود داشتم و یک سنسور حرارتی داشتم ، بنابراین فکر کردم - چرا یک دستگاه نظارت ساده نمی سازم؟ در دستورالعمل های زیر فرض می شود که شما رزبری پای با Raspbian و اتصال شبکه راه اندازی کرده اید. در مورد من این Raspberry Pi B+ با Raspbian (2018–06–27-raspbian-stretch-lite) است.

مرحله 1: نظارت بر دما

نظارت بر دما
نظارت بر دما
نظارت بر دما
نظارت بر دما

چگونه سنسور دما DS18B20 را وصل کنیم؟ فقط نحوه انجام این کار را در گوگل جستجو کنید و تصاویر زیادی مانند این را خواهید دید:

در مورد من سیمهای مشکی ، زرد و قرمز داشتم. رنگ مشکی زمین است ، به پین Ground می رود ، قرمز قدرت است - به 3.3v پین می رود و رنگ زرد داده است - باید به پین GPIO4 برود ، با مقاومت 4.7 کیلو آمپر بین داده و قدرت متصل شده است. توجه داشته باشید ، می توانید چندین سنسور را وصل کنید به طور موازی (آنها دیجیتال هستند و آدرس های مختلفی دارند) ، شما فقط به یک مقاومت احتیاج دارید. پس از اتصال سنسور خود ، باید 1Wire را در raspi-config فعال کنید:

sudo raspi-config

به 5 گزینه Interfacing بروید ، P7 1-Wire را فعال کرده و راه اندازی مجدد کنید.

سپس می توانید سنسور را مشاهده کنید:

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

شما باید چیزی شبیه به این را ببینید:

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

28–00044eae2dff سنسور دمای ما است.

سخت افزار آماده است. اکنون باید قسمت نظارت را تنظیم کنم. من به چیزی نیاز دارم که داده ها را به من نشان دهد و اگر دستگاه برای مدتی قطع شود یا برق نباشد یا درجه حرارت پایین باشد به من اطلاع دهد. بدیهی است که این نمی تواند تمشک pi باشد ، باید برخی از سرورها یا سرویس ها در اینترنت وجود داشته باشد که دستگاه من را نظارت می کند.

من می توانم یک سرور ساده ایجاد کنم ، میزبانی بگیرم و همه چیز را تنظیم کنم ، اما به طور عادی ، نمی خواهم. خوشبختانه ، کسی قبلاً به این موضوع فکر کرده است و cloud4rpi.io را ایجاد کرده است - یک کنترل پنل ابری برای دستگاه شما.

مرحله 2: راه اندازی Cloud4Rpi.io

راه اندازی Cloud4Rpi.io
راه اندازی Cloud4Rpi.io

Cloud4Rpi سرویسی را ارائه می دهد که به دستگاه شما اجازه می دهد داده ها را با استفاده از پروتکل های MQTT یا HTTP ارسال و دریافت کند. آنها یک کتابخانه مشتری برای پایتون دارند ، بنابراین من از پایتون استفاده می کنم.

نمونه های پایتون که با سرویس Cloud4Rpi ارائه می شود از قبل حاوی کد برای سنسور دمای DS18B20 است.

بنابراین به https://cloud4rpi.io رفتم ، یک حساب ایجاد کردم و دستگاه جدیدی را در آنجا اضافه کردم. صفحه دستگاه دارای یک توکن است - رشته ای که دستگاه را شناسایی می کند و باید در برنامه ارسال کننده داده مشخص شود.

برای شروع ، همیشه ایده خوبی است که یک بسته بسته را به روز کنید و بسته ها را ارتقا دهید (توجه داشته باشید که اگر مدتی به روز نکرده باشید ممکن است ساعت ها طول بکشد):

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

سپس ، git ، Python و Pip manager آن را نصب کنید:

sudo apt-get git python python-pip را نصب کنید

سپس ، کتابخانه cloud4rpi Python را نصب کنید:

sudo pip را نصب کنید cloud4rpi

در نهایت ، من آماده هستم که برنامه کنترل خود را بنویسم. شروع می کنم از مثال موجود در

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

فایل اصلی برنامه control.py است - باید برای نیازهای خود آن را تغییر دهم. ابتدا برنامه را ویرایش کرده و یک توکن بچسبانید:

sudo nano control.py

خط DEVICE_TOKEN = '…'] را بیابید و توکن دستگاه را در آنجا مشخص کنید. پس از آن می توانم به سادگی برنامه را اجرا کنم: کار می کند و دما را در متغیر RoomTemp گزارش می دهد:

sudo python control.py

کار می کند و دما را در متغیر RoomTemp گزارش می دهد.

توجه داشته باشید که تمام سنسورهای onewire ds18b20 را کشف می کند

ds_sensors = ds18b20. DS18B20.find_all ()

و از اولین سنسور پیدا شده استفاده می کند:

RoomTemp ': {' type ':' numeric '،' bind ': ds_sensors [0] اگر ds_sensors دیگری هیچکدام}

خوب ، این آسان بود ، زیرا برنامه نمونه دارای همه مواردی است که برای کار با سنسور ds18b20 در رزبری پای مورد نیاز است. اکنون باید راهی برای گزارش وضعیت قدرت پیدا کنم.

مرحله 3: نظارت بر UPS

مانیتورینگ UPS
مانیتورینگ UPS

مورد بعدی که می خواهم نظارت کنم وضعیت UPS است ، بنابراین در صورت قطع برق ، قبل از قطع همه چیز در مورد آن اطلاع خواهم داشت.

من یک APC UP با کنترل USB دارم ، بنابراین سریع در گوگل جستجو کردم و متوجه شدم که به apcupsd نیاز دارم. https://www.anites.com/2013/09/monitoring-ups.html… من چندین بار سعی کردم آن را از طریق apt-get نصب کنم ، اما به دلایل مختلف برای من کار نمی کرد. نحوه نصب آن را از منابع نشان خواهم داد.

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

سپس apcupsd.conf را ویرایش می کنم تا از طریق usb به UPS خود متصل شوم.

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

اکنون می توانم کابل USB را از UPS به RaspberryPi وصل کنم و آزمایش کنم که آیا UPS پیدا می شود یا خیر.

sudo apctest

نباید هیچ پیام خطایی به شما بدهد.

اکنون سرویس apcupsd باید راه اندازی شود:

sudo systemctl شروع apcupsd

برای پرسیدن وضعیت UPS می توانم از دستور status استفاده کنم:

sudo /etc/init.d/apcupsd وضعیت

و چیزی شبیه به این تولید می کند:

APC: 001 ، 035 ، 0855 تاریخ: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSION: 3.14.14 (31 مه 2016) debian UPSNAME: vcontrol CABLE: USB Cable DRIVER: USB UPS Driver UPSMODE: Stand Alone زمان شروع: 2018-10-14 16:54:28 +0300 مدل: Back-UPS XS 650CI وضعیت: آنلاین LINEV: 238.0 ولت LOADPCT: 0.0 درصد هزینه: 100.0 درصد زمان: 293.3 دقیقه MBATTCHG: 5 درصد دقیقه: 3 دقیقه حداکثر 0 ثانیه حس: LOTRANS متوسط: 140.0 ولت HITRANS: 300.0 ولت ALARMDEL: 30 ثانیه BATTV: 14.2 ولت LASTXFER: بدون انتقال از زمان تبدیل NUMXFERS: 0 TONBATT: 0 ثانیه CUMONBATT: 0 ثانیه XOFFBATTT00: N45: 2014-06-10 NOMINV: 230 ولت NOMBATTV: 12.0 ولت NOMPOWER: 390 وات FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

من به وضعیتی نیاز دارم - که خط "STATUS:" است.

کتابخانه Cloud4rpi شامل یک ماژول ‘rpy.py’ است که پارامترهای سیستم رزبری پای مانند نام میزبان یا دمای پردازنده را برمی گرداند. از آنجایی که همه آن پارام ها نتایج اجرای برخی دستورات و تجزیه خروجی هستند ، همچنین دارای یک عملکرد مفید "parse_output" است که دقیقاً آنچه را که من نیاز دارم انجام می دهد. نحوه بدست آوردن وضعیت UPS من به شرح زیر است:

def ups_status (): result = rpi.parse_output (r'STATUS / s+: / s+(S+) '، [' /etc/init.d/apcupsd '،' status ']) در صورت نتیجه: نتیجه دیگر را بازگردانید: بازگشت 'ناشناس'

برای ارسال این وضعیت به cloud4rpi ، باید یک متغیر UPSStatus اعلام کنم و آن را به تابع ups_status خود متصل کنم: اکنون می توانم برنامه خود را اجرا کنم:

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

و من بلافاصله می توانم متغیر خود را در صفحه دستگاه cloud4rpi ببینم.

مرحله 4: آماده سازی برای "تولید"

آماده سازی برای "تولید"
آماده سازی برای "تولید"

همه چیز در حال کار است و اکنون باید دستگاه خود را برای حالت بدون مراقبت آماده کنم.

برای شروع ، من فواصل زمانی را تنظیم می کنم. فاصله نظرسنجی مشخص می کند که برنامه چگونه دمای و وضعیت UPS را بررسی می کند - آن را روی یک ثانیه تنظیم کنید.

نتایج هر 5 دقیقه به ابر ارسال می شود و اطلاعات تشخیصی - هر ساعت.

# ثابت DATA_SENDING_INTERVAL = 300 # ثانیه DIAG_SENDING_INTERVAL = 3600 # ثانیه POLL_INTERVAL = 1 # ثانیه

وقتی وضعیت UPS تغییر می کند - من نمی خواهم دستگاه من 5 دقیقه منتظر بماند و بلافاصله داده ها را ارسال می کنم. بنابراین من حلقه اصلی را کمی تغییر داده ام و به نظر می رسد:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' در حالیکه True: newUPS = ups_status () if (data_timer <= 0) یا (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUps = new = device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL خواب (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

تست: اجرای اسکریپت:

sudo python control.py

و می توانم وضعیت UPS را در صفحه دستگاه خود تماشا کنم.

اگر قدرت UPS را خاموش کنم ، وضعیت در عرض چند ثانیه تغییر می کند ، بنابراین همه چیز در حال کار است. در حال حاضر من باید apcupsd و control.py خود را در هنگام راه اندازی سیستم شروع کنم. سرویس Apcupsd قدیمی است و برای شروع آن در raspbian مدرن ، باید فایل /etc/init.d/apcupsd را با افزودن این خطوط در جایی در بالا تغییر دهم:

### شروع اطلاعات # ارائه می دهد: apcupsd # مورد نیاز-شروع: $ all # مورد نیاز-توقف: # پیش فرض-شروع: 2 3 4 5 # توقف پیش فرض: # توضیح کوتاه: APC UPS daemon… ### END INIT اطلاعات#

سپس سرویس را فعال کنید:

sudo systemctl apcupsd را فعال کنید

سپس سرویس را شروع کنید:

sudo systemctl شروع apcupsd

اکنون apcupsd هنگام راه اندازی سیستم راه اندازی می شود.

برای نصب control.py به عنوان سرویس ، از اسکریپت service_install.sh ارائه شده استفاده کردم:

sudo bash service_install.sh/cloud4rpi/control.py

در حال حاضر سرویس شروع شده است و می تواند هنگام راه اندازی مجدد زنده بماند.

مرحله 5: تنظیم کنترل پنل

راه اندازی کنترل پنل
راه اندازی کنترل پنل

Cloud4rpi به من امکان می دهد یک کنترل پنل برای دستگاه خود تنظیم کنم. می توانید "ویجت" را اضافه کرده و آنها را به متغیرهای دستگاه متصل کنید.

دستگاه من دو متغیر فقط خواندنی ارائه می دهد - RoomTemp و UPSStatus:

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

من 3 ویجت اضافه کردم - شماره برای RoomTemp ، متن برای UPSStatus و نمودار برای RoomTemp.

من می توانم هشدارها را تنظیم کنم ، بنابراین هنگامی که دما خارج از محدوده مشخص شده است ، ایمیلی دریافت می کنم ، UPS آفلاین شد یا دستگاه در مواقعی که باید اطلاعات را ارسال نمی کند. در حال حاضر می توانم مطمئن شوم که خانه کشورم خوب است و می توانم به من اطلاع داده شود وقتی مشکلی پیش می آید ، بنابراین می توانم با همسایه ها تماس بگیرم و از آنها بخواهم آنچه را که در جریان است بررسی کنند. در اینجا کد واقعی control.py آمده است.

توصیه شده: