विषयसूची:

रास्पबेरीपी और क्लाउड4आरपीआई के साथ DIY हाउस मॉनिटरिंग: 5 कदम
रास्पबेरीपी और क्लाउड4आरपीआई के साथ DIY हाउस मॉनिटरिंग: 5 कदम

वीडियो: रास्पबेरीपी और क्लाउड4आरपीआई के साथ DIY हाउस मॉनिटरिंग: 5 कदम

वीडियो: रास्पबेरीपी और क्लाउड4आरपीआई के साथ DIY हाउस मॉनिटरिंग: 5 कदम
वीडियो: Raspberry Pi Home automation with Google assistant and Blynk app || Appliances control raspberry pi 2024, नवंबर
Anonim
रास्पबेरीपी और Cloud4Rpi के साथ DIY हाउस मॉनिटरिंग
रास्पबेरीपी और Cloud4Rpi के साथ DIY हाउस मॉनिटरिंग

एक सर्दियों के सप्ताहांत में मैं अपने देश के घर गया, और पाया कि वहाँ बहुत ठंड थी। बिजली के साथ कुछ हुआ था और आरसीडी ब्रेकर ने इसे बंद कर दिया था, और हीटिंग भी बंद हो गया था। मैं भाग्यशाली था कि मैं वहां आया, नहीं तो कई दिनों में सब कुछ जम गया होता जो कि पाइप और रेडिएटर के लिए बहुत बुरा है।

मेरे पास कई रास्पबेरी पाई और एक थर्मल सेंसर था, इसलिए मैंने सोचा - मैं एक साधारण निगरानी उपकरण क्यों नहीं बनाऊं? नीचे दिए गए निर्देश मान लें कि आपके पास रास्पबेरी पाई है जिसमें रास्पियन और नेटवर्क कनेक्शन स्थापित है। मेरे मामले में यह रास्पबेरी पाई बी + रास्पियन (2018–06–27-रास्पियन-स्ट्रेच-लाइट) के साथ है।

चरण 1: तापमान निगरानी

तापमान निगरानी
तापमान निगरानी
तापमान निगरानी
तापमान निगरानी

DS18B20 तापमान सेंसर कैसे कनेक्ट करें? यह कैसे करना है, बस गूगल करें, और आपको इस तरह की बहुत सारी तस्वीरें दिखाई देंगी:

मेरे मामले में मेरे पास काले, पीले और लाल तार थे। ब्लैक ग्राउंड है, ग्राउंड पिन पर जाता है, रेड पावर है - 3.3v पिन पर जाता है, और येलो डेटा है - GPIO4 पिन पर जाना चाहिए, जिसमें 4.7 kOm रेसिस्टर डेटा और पावर के बीच जुड़ा होता है। नोट, आप कई सेंसर कनेक्ट कर सकते हैं समानांतर में (वे डिजिटल हैं, और उनके अलग-अलग पते हैं), आपको केवल एक रोकनेवाला चाहिए। अपने सेंसर को जोड़ने के बाद, आपको रास्पि-कॉन्फ़िगरेशन में 1वायर सक्षम करना चाहिए:

सुडो रास्पि-कॉन्फ़िगरेशन

5 इंटरफेसिंग विकल्पों पर जाएं, P7 1-वायर को सक्षम करें और रिबूट करें।

तब आप परीक्षण कर सकते हैं कि क्या आप सेंसर को देख सकते हैं:

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 हमारा तापमान संवेदक है।

हार्डवेयर तैयार है। अब मुझे निगरानी भाग स्थापित करने की आवश्यकता है। मुझे कुछ ऐसा चाहिए जो मुझे डेटा दिखाएगा और मुझे सूचित करेगा कि क्या डिवाइस थोड़ी देर के लिए डिस्कनेक्ट हो गया है या कोई शक्ति नहीं है, या तापमान कम है। जाहिर है कि यह रास्पबेरी पाई नहीं हो सकता है, इंटरनेट में कुछ सर्वर या सेवा होनी चाहिए जो मेरे डिवाइस की निगरानी करती है।

मैं एक साधारण सर्वर बना सकता हूं, एक होस्टिंग प्राप्त कर सकता हूं और सब कुछ सेट कर सकता हूं, लेकिन ईमानदारी से, मैं नहीं चाहता। सौभाग्य से, किसी ने इस बारे में पहले ही सोच लिया है और आपके डिवाइस के लिए क्लाउड4rpi.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 और उसके पैकेज मैनेजर पिप को स्थापित करें:

sudo apt-git स्थापित करें अजगर, अजगर-पाइप

फिर, Cloud4rpi पायथन लाइब्रेरी स्थापित करें:

sudo pip स्थापित करें cloud4rpi

अंत में, मैं अपना नियंत्रण कार्यक्रम लिखने के लिए तैयार हूं। मैं https://github.com/cloud4rpi/cloud4rpi-raspberrypi पर उपलब्ध उदाहरण से शुरू करता हूं…

गिट क्लोन https://github.com/cloud4rpi/cloud4rpi-raspberrypi… Cloud4rpicd cloud4rpi

मुख्य प्रोग्राम फ़ाइल control.py है - मुझे इसे अपनी आवश्यकताओं के लिए संशोधित करने की आवश्यकता है। सबसे पहले, प्रोग्राम को संपादित करें और एक टोकन पेस्ट करें:

sudo nano control.py

DEVICE_TOKEN='…'] लाइन ढूंढें और वहां डिवाइस टोकन निर्दिष्ट करें। उसके बाद मैं बस प्रोग्राम चला सकता हूं: यह काम करता है और रूमटेम्प वैरिएबल में तापमान की रिपोर्ट करता है:

सूडो पायथन control.py

यह काम करता है और RoomTemp चर में तापमान की रिपोर्ट करता है।

ध्यान दें कि यह सभी onewire ds18b20 सेंसर का पता लगाता है

ds_sensors = ds18b20. DS18B20.find_all ()

और पहले पाए गए सेंसर का उपयोग करता है:

रूमटेम्प': { 'टाइप': 'न्यूमेरिक', 'बाइंड': ds_sensors [0] अगर ds_sensors और कोई नहीं }

ठीक है, यह आसान था, क्योंकि नमूना कार्यक्रम में रास्पबेरी पाई पर ds18b20 सेंसर के साथ काम करने के लिए आवश्यक सब कुछ है। अब मुझे बिजली की स्थिति की रिपोर्ट करने का तरीका खोजने की जरूरत है।

चरण 3: यूपीएस निगरानी

यूपीएस निगरानी
यूपीएस निगरानी

अगली बात जो मैं मॉनिटर करना चाहता हूं वह है यूपीएस स्थिति, इसलिए यदि बिजली की कमी है, तो सब कुछ डिस्कनेक्ट होने से पहले मुझे इसके बारे में पता चल जाएगा।

मेरे पास USB नियंत्रण के साथ APC UPS है, इसलिए मैंने जल्दी से गुगली की और पाया कि मुझे 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 संपादित करता हूं।

sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE स्मार्ट UPSCABLE USB ##UPSTYPE apcsmart #DEVICE/dev/ttyS0 UPSTYPE usb डिवाइस

अब मैं यूएसबी केबल को यूपीएस से रास्पबेरीपी में प्लग कर सकता हूं और परीक्षण कर सकता हूं कि यूपीएस मिल जाएगा या नहीं।

सुडो एपक्टेस्ट

यह आपको कोई त्रुटि संदेश नहीं देना चाहिए।

अब sevice apcupsd शुरू किया जाना चाहिए:

sudo systemctl apcupsd शुरू करें

यूपीएस स्थिति पूछने के लिए मैं एक स्टेटस कमांड का उपयोग कर सकता हूं:

sudo /etc/init.d/apcupsd स्थिति

और यह कुछ इस तरह उत्पादन करेगा:

एपीसी: 001, 035, 0855 दिनांक: 2018-10-14 16:55:30 +0300 होस्टनाम: वीकंट्रोल संस्करण: 3.14.14 (31 मई 2016) डेबियन यूपीएसनाम: वीकंट्रोल केबल: यूएसबी केबल ड्राइवर: यूएसबी यूपीएस ड्राइवर यूपीएसमोड: स्टैंड अलोन STARTTIME: 2018-10-14 16:54:28 +0300 मॉडल: बैक-यूपीएस XS 650CI स्थिति: ऑनलाइन लाइन: 238.0 वोल्ट लोड: 0.0 प्रतिशत BCHARGE: 100.0 प्रतिशत टाइमलेफ्ट: 293.3 मिनट MBATTCHG: 5 प्रतिशत न्यूनतम: 3 मिनट मैक्सटाइम: 0 सेकंड सेंस: मीडियम लोट्रान: 140.0 वोल्ट हिट्रान्स: 300.0 वोल्ट अलार्म: 30 सेकंड्स बैट टीवी: 14.2 वोल्ट लास्टएक्सफर: टर्नऑन के बाद से कोई स्थानान्तरण नहीं NUMXFERS: 0 टोनबैट: 0 सेकंड क्यूमोनबैट: 0 सेकंड्स XOFF14 STATRIFALAG: 0000 05 सेकंड XOFFBATT 24 दिनांक: 0000: 05 / ए: 2014-06-10 NOMINV: 230 वोल्ट NOMBATTV: 12.0 वोल्ट नॉनपावर: 390 वाट्स फर्मवेयर: 892. R3। I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

मुझे एक स्टेटस चाहिए - जो "STATUS:" लाइन है।

Cloud4rpi लाइब्रेरी में एक मॉड्यूल 'rpy.py' है जो रास्पबेरी पाई सिस्टम पैरामीटर जैसे होस्टनाम या सीपीयू तापमान देता है। चूंकि वे सभी पैरा कुछ कमांड चलाने और आउटपुट को पार्स करने के परिणाम हैं, इसमें एक आसान 'parse_output' फ़ंक्शन भी शामिल है जो मुझे वही करता है जो मुझे चाहिए। मेरा यूपीएस स्थिति इस प्रकार प्राप्त करें:

def ups_status(): result = rpi.parse_output(r'STATUS\s+:\s+(S+)', ['/etc/init.d/apcupsd', 'status']) अगर रिजल्ट: रिटर्न रिजल्ट और: रिटर्न 'अनजान'

इस स्थिति को Cloud4rpi पर भेजने के लिए, मुझे एक चर UPSStatus घोषित करने और इसे अपने ups_status फ़ंक्शन से बाँधने की आवश्यकता है: अब मैं अपना प्रोग्राम चला सकता हूँ:

वेरिएबल्स = {'रूमटेम्प': { 'टाइप': 'न्यूमेरिक', 'बाइंड': ds_sensors [0]}, 'UPSStatus': {'टाइप': 'स्ट्रिंग', 'बाइंड': ups_status}}

और मैं तुरंत अपने वेरिएबल को Cloud4rpi डिवाइस पेज पर देख सकता हूं।

चरण 4: "उत्पादन" की तैयारी

"उत्पादन" की तैयारी
"उत्पादन" की तैयारी

सब कुछ काम कर रहा है, और अब मुझे अपने डिवाइस को अनअटेंडेड मोड में तैयार करने की आवश्यकता है।

आरंभ करने के लिए, मैं समय अंतराल को समायोजित करने जा रहा हूं। पोल अंतराल परिभाषित करता है कि प्रोग्राम कितनी बार तापमान और यूपीएस स्थिति की जांच करता है - इसे एक सेकंड पर सेट करें।

परिणाम हर 5 मिनट में क्लाउड पर भेजे जाते हैं, और नैदानिक जानकारी - हर घंटे।

# स्थिरांकDATA_SENDING_INTERVAL = 300 # सेकंड DIAG_SENDING_INTERVAL = 3600 # सेकंड POLL_INTERVAL = 1 # सेकंड

जब यूपीएस की स्थिति बदलती है - मैं नहीं चाहता कि मेरा उपकरण 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 अगर diag_timer <= 0: device.publish_diag() diag_timer = DIAG_SENDING_INTERVAL स्लीप (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

परीक्षण: स्क्रिप्ट चलाएँ:

सूडो पायथन control.py

और मैं अपने डिवाइस पेज पर यूपीएस स्थिति देख सकता हूं।

अगर मैं यूपीएस पावर बंद कर देता हूं, तो कुछ सेकंड में स्थिति बदल जाती है, इसलिए सब कुछ काम कर रहा है। अब मुझे सिस्टम स्टार्टअप पर apcupsd और my control.py शुरू करने की आवश्यकता है। Apcupsd सेवा पुरानी है और इसे आधुनिक रास्पियन पर शुरू करने के लिए, मुझे /etc/init.d/apcupsd फ़ाइल को संशोधित करना चाहिए, इन पंक्तियों को कहीं शीर्ष पर जोड़कर:

### आरंभ जानकारी # प्रदान करता है: apcupsd # आवश्यक-प्रारंभ: $ सभी # आवश्यक-रोकें: # डिफ़ॉल्ट-प्रारंभ: 2 3 4 5 # डिफ़ॉल्ट-रोकें: # लघु-विवरण: एपीसी यूपीएस डेमॉन … ### अंत INIT जानकारी#

फिर सेवा को सक्षम करें:

sudo systemctl apcupsd सक्षम करें

फिर सेवा शुरू करें:

sudo systemctl apcupsd शुरू करें

अब सिस्टम स्टार्टअप पर apcupsd शुरू हो जाएगा।

एक सेवा के रूप में control.py स्थापित करने के लिए, मैंने आपूर्ति की गई service_install.sh स्क्रिप्ट का उपयोग किया:

सुडो बैश service_install.sh ~/cloud4rpi/control.py

अब सेवा शुरू हो गई है और इसे रिबूट से बचना चाहिए।

चरण 5: एक नियंत्रण कक्ष स्थापित करना

एक नियंत्रण कक्ष की स्थापना
एक नियंत्रण कक्ष की स्थापना

Cloud4rpi मुझे अपने डिवाइस के लिए एक कंट्रोल पैनल सेट करने देता है। आप "विजेट्स" जोड़ सकते हैं और उन्हें डिवाइस वेरिएबल से जोड़ सकते हैं।

मेरा उपकरण केवल पढ़ने के लिए दो चर प्रदान करता है - RoomTemp और UPSStatus:

वेरिएबल्स = {'रूमटेम्प': { 'टाइप': 'न्यूमेरिक', 'बाइंड': ds_sensors [0]}, 'UPSStatus': {'टाइप': 'स्ट्रिंग', 'बाइंड': ups_status}}

मैंने 3 विजेट जोड़े - RoomTemp के लिए नंबर, UPSStatus के लिए टेक्स्ट और RoomTemp के लिए चार्ट।

मैं अलर्ट सेट कर सकता हूं, इसलिए जब तापमान निर्दिष्ट सीमा से बाहर होता है तो मुझे एक ईमेल प्राप्त होता है, यूपीएस ऑफ़लाइन हो जाता है या डिवाइस स्वयं डेटा नहीं भेजता है जब इसे करना चाहिए। अब मुझे यकीन है कि मेरा देश का घर ठीक है, और मुझे अधिसूचित किया जा सकता है जब कुछ गलत होता है, तो मैं पड़ोसियों को फोन कर सकता हूं और उनसे पूछ सकता हूं कि क्या हो रहा है। Control.py का वास्तविक कोड यहां दिया गया है।

सिफारिश की: