جدول المحتويات:

مراقبة المنزل باستخدام RaspberryPi و Cloud4Rpi: 5 خطوات
مراقبة المنزل باستخدام RaspberryPi و Cloud4Rpi: 5 خطوات

فيديو: مراقبة المنزل باستخدام RaspberryPi و Cloud4Rpi: 5 خطوات

فيديو: مراقبة المنزل باستخدام RaspberryPi و Cloud4Rpi: 5 خطوات
فيديو: المشاريع القائمة على Raspberry Pi– أنظمة المُرَاقَبَة الرَّقميَّة | Digital surveillance systems 2024, شهر نوفمبر
Anonim
مراقبة المنزل باستخدام RaspberryPi و Cloud4Rpi
مراقبة المنزل باستخدام RaspberryPi و Cloud4Rpi

ذهبت إلى منزلي الريفي في إحدى عطلات نهاية الأسبوع الشتوية ، واكتشفت أن الجو بارد جدًا هناك. حدث شيء ما بالكهرباء وقام قاطع التجمع الكونغولي من أجل الديمقراطية بإيقافه ، وانطفأت التدفئة أيضًا. كنت محظوظًا لأنني أتيت إلى هناك ، وإلا فقد تم تجميد كل شيء في عدة أيام وهو أمر سيء للغاية بالنسبة للأنابيب والرادياتير.

كان لدي العديد من أجهزة Raspberry Pi ، وجهاز استشعار حراري ، لذلك فكرت - لماذا لا أصنع جهاز مراقبة بسيطًا؟ تفترض الإرشادات أدناه أن لديك Raspberry Pi مع Raspbian وإعداد اتصال بالشبكة. في حالتي هو Raspberry Pi B + مع Raspbian (2018–06–27-raspbian-stretch-lite).

الخطوة 1: مراقبة درجة الحرارة

مراقبة درجة الحرارة
مراقبة درجة الحرارة
مراقبة درجة الحرارة
مراقبة درجة الحرارة

كيفية توصيل جهاز استشعار درجة الحرارة DS18B20؟ ما عليك سوى البحث في google عن كيفية القيام بذلك ، وسترى الكثير من الصور مثل هذه:

في حالتي كان لدي أسلاك سوداء وصفراء وحمراء. الأسود هو الأرض ، يذهب إلى الدبوس الأرضي ، والأحمر هو الطاقة - يذهب إلى 3.3 فولت ، والأصفر هو البيانات - يجب أن ينتقل إلى دبوس GPIO4 ، مع المقاوم 4.7 كيلو أوم متصل بين البيانات والطاقة. ملاحظة ، يمكنك توصيل العديد من أجهزة الاستشعار بالتوازي (فهي رقمية ولها عناوين مختلفة) ، فأنت تحتاج فقط إلى مقاوم واحد. بعد توصيل المستشعر الخاص بك ، يجب تمكين 1Wire في raspi-config:

sudo raspi-config

انتقل إلى 5 خيارات Interfacing ، وقم بتمكين P7 1-Wire وأعد التشغيل.

ثم يمكنك اختبار ما إذا كان بإمكانك رؤية المستشعر:

sudo modprobe w1-gpiosudo modprobe w1-thermls / sys / bus / w1 / الأجهزة /

يجب أن نرى شيئا من هذا القبيل:

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

28–00044eae2dff هو مستشعر درجة الحرارة لدينا.

الأجهزة جاهزة. الآن أنا بحاجة إلى إعداد جزء المراقبة. أحتاج إلى شيء من شأنه أن يعرض لي البيانات ويخطرني إذا تم فصل الجهاز لفترة من الوقت أو عدم وجود طاقة ، أو انخفاض درجة الحرارة. من الواضح أن هذا لا يمكن أن يكون raspberry pi نفسه ، يجب أن يكون هناك خادم أو خدمة في الإنترنت تراقب جهازي.

يمكنني إنشاء خادم بسيط ، والحصول على استضافة وإعداد كل شيء ، ولكن بإحساس رائع ، لا أريد ذلك. لحسن الحظ ، فكر شخص ما في هذا الأمر بالفعل وأنشأ cloud4rpi.io - لوحة تحكم سحابية لجهازك.

الخطوة 2: إعداد Cloud4Rpi.io

إعداد Cloud4Rpi.io
إعداد Cloud4Rpi.io

توفر Cloud4Rpi خدمة تتيح لجهازك إرسال واستقبال البيانات باستخدام بروتوكولات MQTT أو HTTP. لديهم مكتبة عميل لبايثون ، لذلك سأستخدم بايثون.

أمثلة Python التي تأتي مع خدمة Cloud4Rpi تحتوي بالفعل على رمز لمستشعر درجة الحرارة DS18B20.

لذلك ذهبت إلى https://cloud4rpi.io وأنشأت حسابًا وأضفت جهازًا جديدًا هناك. تحتوي صفحة الجهاز على رمز مميز - سلسلة تحدد الجهاز ، والتي يجب تحديدها في البرنامج الذي يرسل البيانات.

بادئ ذي بدء ، من الأفضل دائمًا تحديث مدير الحزم وترقية الحزم (ملاحظة: قد يستغرق الأمر ساعات إذا لم تقم بالترقية لبعض الوقت):

sudo apt-get update && sudo apt-get Upgrade

بعد ذلك ، قم بتثبيت git و Python ومدير الحزم الخاص بها Pip:

sudo apt-get install git python python-pip

بعد ذلك ، قم بتثبيت مكتبة Cloud4rpi Python:

تثبيت sudo pip cloud4rpi

أخيرًا ، أنا مستعد لكتابة برنامج التحكم الخاص بي. أبدأ من المثال المتاح على

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

ملف البرنامج الرئيسي هو control.py - أحتاج إلى تعديله حسب احتياجاتي. أولاً ، قم بتحرير البرنامج والصق رمزًا مميزًا:

sudo نانو 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] if ds_sensors else None}

حسنًا ، كان ذلك سهلاً ، لأن البرنامج النموذجي يحتوي على كل ما هو مطلوب للعمل مع مستشعر ds18b20 على Raspberry Pi. الآن أنا بحاجة إلى إيجاد طريقة للإبلاغ عن حالة الطاقة.

الخطوة 3: مراقبة UPS

مراقبة UPS
مراقبة UPS

الشيء التالي الذي أريد مراقبته هو حالة UPS ، لذلك إذا كان هناك انقطاع في التيار الكهربائي ، فسأعرف عنه قبل أن ينقطع كل شيء.

لديّ APC UPS مع تحكم USB ، لذا سرعان ما بحثت في goog ووجدت أنني بحاجة إلى 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 - تمكين USB sudo جعل sudo يقوم بالتثبيت

ثم أقوم بتحرير apcupsd.conf للاتصال بـ UPS الخاص بي عبر USB.

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

يمكنني الآن توصيل كبل USB من UPS إلى RaspberryPi واختبار ما إذا كان سيتم العثور على UPS.

sudo apctest

يجب ألا يعطيك أي رسائل خطأ.

الآن يجب أن تبدأ خدمة apcupsd:

يبدأ نظام sudo systemctl apcupsd

للاستعلام عن حالة UPS ، يمكنني استخدام أمر الحالة:

sudo /etc/init.d/apcupsd

وسيخرج شيئًا مثل هذا:

APC: 001، 035، 0855 التاريخ: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol الإصدار: 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 الحالة: الخط المباشر عبر الإنترنت: 238.0 فولت LOADPCT: 0.0 بالمائة تكلفة الشحن: 100.0 بالمائة الوقت: 293.3 دقيقة MBATTCHG: 5 بالمائة MINTIMEL: 3 دقائق MAXTIME: 0 ثوانٍ التحسس: متوسط اللوترين: 140.0 فولت هيترانس: 300.0 فولت ALARMDEL: 30 ثانية BATTV: 14.2 فولت LASTXFER: لا توجد عمليات نقل منذ Turnon NUMXFERS: 0 TONBATT: 0 ثوانٍ CUMONBATT: 0 ثانية XOFFBATT: N / A STO0008B314:: 2014-06-10 NOMINV: 230 فولت NOMBATTV: 12.0 Volts NOMPOWER: 390 Watts FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

أحتاج إلى حالة - وهي سطر "الحالة:".

تحتوي مكتبة Cloud4rpi على وحدة "rpy.py" تعرض معلمات نظام Raspberry Pi مثل اسم المضيف أو درجة حرارة وحدة المعالجة المركزية. نظرًا لأن كل هذه المعلمات هي نتائج تشغيل بعض الأوامر وتحليل الإخراج ، فإنها تحتوي أيضًا على وظيفة "parse_output" سهلة الاستخدام تقوم بما أحتاجه بالضبط. هذه هي كيفية الحصول على حالة UPS الخاصة بي:

def ups_status (): result = rpi.parse_output (r'STATUS / s +: / s + (S +) '، [' /etc/init.d/apcupsd '،' status ']) إذا كانت النتيجة: إرجاع نتيجة أخرى: إرجاع 'غير معروف'

لإرسال هذه الحالة إلى cloud4rpi ، أحتاج إلى إعلان حالة UPS متغيرة وربطها بوظيفة ups_status الخاصة بي: الآن يمكنني تشغيل البرنامج الخاص بي:

المتغيرات = {'RoomTemp': {'type': 'numeric'، 'bind': ds_sensors [0]}، 'UPSStatus': {'type': 'string'، 'bind': ups_status}}

ويمكنني رؤية المتغير الخاص بي على الفور في صفحة جهاز cloud4rpi.

الخطوة 4: التحضير "للإنتاج"

التحضير "للإنتاج"
التحضير "للإنتاج"

كل شيء يعمل ، والآن أحتاج إلى إعداد جهازي إلى الوضع غير المراقب.

بادئ ذي بدء ، سأقوم بضبط الفترات الزمنية. يحدد الفاصل الزمني للاستقصاء عدد المرات التي يتحقق فيها البرنامج من درجة الحرارة وحالة UPS - اضبطه على ثانية واحدة.

يتم إرسال النتائج إلى السحابة كل 5 دقائق ، ومعلومات التشخيص - كل ساعة.

# ConstantsDATA_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 = newUPS if diag_timer <= 0 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 # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: 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

الآن بدأت الخدمة ويجب أن تنجو من إعادة التشغيل.

الخطوة الخامسة: إعداد لوحة التحكم

إنشاء لوحة تحكم
إنشاء لوحة تحكم

تتيح لي Cloud4rpi إعداد لوحة تحكم لجهازي. يمكنك إضافة "أدوات" وربطها بمتغيرات الجهاز.

يوفر جهازي متغيرين للقراءة فقط - RoomTemp و UPSStatus:

المتغيرات = {'RoomTemp': {'type': 'numeric'، 'bind': ds_sensors [0]}، 'UPSStatus': {'type': 'string'، 'bind': ups_status}}

لقد أضفت 3 عناصر واجهة مستخدم - رقم RoomTemp و Text لـ UPSStatus ومخطط لـ RoomTemp.

يمكنني إعداد التنبيهات ، لذلك أتلقى بريدًا إلكترونيًا عندما تكون درجة الحرارة خارج النطاق المحدد ، أو عندما يكون UPS غير متصل بالإنترنت أو لا يرسل الجهاز نفسه البيانات عندما ينبغي ذلك. يمكنني الآن التأكد من أن منزلي الريفي على ما يرام ، ويمكن إخطاري عندما يكون هناك خطأ ما ، لذلك يمكنني الاتصال بالجيران واطلب منهم التحقق مما يحدث. هذا هو الكود الفعلي لـ control.py.

موصى به: