रूसी भाषा के इंटरनेट पर Node-RED जैसे प्रोग्रामिंग वातावरण पर कुछ लेख हैं । यह लेख इस उत्पाद और शो के बारे में पर्दे के रहस्य को उजागर करेगा, मोशन सेंसर के लिए एक लाइटिंग कंट्रोल एल्गोरिथ्म बनाने के उदाहरण का उपयोग करके, किसी भी कोड को लिखने के बिना पूरी तरह से चित्रमय रूप में स्मार्ट होम को स्वचालित करने के लिए विभिन्न परिदृश्यों और नियमों को लागू करने के लिए नोड-RED का उपयोग करना कितना सरल है।
नोड-रेड क्या है?
आईबीएम, अन्य बड़ी कंपनियों की तरह, चीजों के बढ़ते इंटरनेट में अपना स्थान खोजने की कोशिश कर रहा है। यह आमतौर पर अपने भुगतान किए गए प्लेटफार्मों को लोकप्रिय बनाने के लिए ओपन-सोर्स एप्लिकेशन और उत्पादों की रिहाई के साथ जुड़ा हुआ है। उदाहरण के लिए, आईबीएम में, भुगतान किया गया प्लेटफॉर्म Bluemix है।नोड-रेड, आईबीएम का एक ओपन-सोर्स ब्रेनचाइल्ड है और जैसा कि यह साइट पर बस लिखा गया है, यह एक उपकरण है जो हार्डवेयर, एपीआई और सेवाओं को नए और दिलचस्प तरीकों से जोड़ने का काम करता है।ये विधियाँ ग्राफिक संचार लाइनों के उपयोग पर आधारित हैं जिनके माध्यम से संदेश नोड्स के बीच भेजे जाते हैं। इस प्रकार, आप प्रोग्रामिंग का उपयोग किए बिना माउस के साथ विभिन्न ब्लॉकों को कनेक्ट कर सकते हैं।नोड-रेड में विकास एक सामान्य ब्राउज़र के माध्यम से किया जाता है, कर्नेल को विभिन्न प्लेटफार्मों - पीसी, आरपीआई, क्लाउड, आदि पर चलाया जा सकता है।स्मार्ट घर के लिए नोड-रेड
मैंने स्मार्ट होम के लिए स्क्रिप्ट और नियम लिखने के लिए नोड-रेड की कोशिश करने का फैसला किया। यही है, स्वचालन के लिए। विभिन्न एक्ट्यूएटर्स, वेब सेवाओं और सेंसर के साथ बहुत ही कनेक्शन ओपनएचएबी पर बनाया गया है। मैंने वहां ऑटोमेशन न करने का फैसला क्यों किया? कई कारण:- OpenHAB में, स्क्रिप्ट और नियम अपनी भाषा में लिखे जाते हैं। मैं इसे केवल एक आवेदन के लिए अध्ययन नहीं करना चाहता था।- नियमों को डीबग करना स्वयं व्यावहारिक रूप से असंभव है - यदि नियम काम नहीं करता है, तो यह पता लगाना मुश्किल है कि क्यों- मैं चाहूंगा कि मेरे नियम हार्डवेयर, संचार चैनलों, प्लेटफार्मों से स्वतंत्र हों और उपकरणों के साथ संचार करने के लिए स्वयं सॉफ़्टवेयर। ताकि मैं आसानी से दूसरे UD प्लेटफ़ॉर्म पर जा सकूँ, उदाहरण के लिए Domoticz, MajorDomo, FHEM और मेरे साथ अपने नियम ले, और नए UD प्लेटफ़ॉर्म के तहत उन्हें फिर से लिखना नहीं।गति और प्रकाश सेंसर द्वारा प्रकाश नियंत्रण
तो चलिए शुरू करते हैं। वास्तव में मूल कार्य सरल और तुच्छ है:मैंने गलियारे में प्रकाश व्यवस्था के लिए एलईडी स्पॉट नियंत्रित किए हैं। मैं चाहता हूं कि आंदोलन पर प्रकाश डाला जाए और 10 सेकंड के बाद खुद को बंद कर दिया जाए।चलिए कार्य को थोड़ा जटिल करते हैं:- प्रकाश केवल तभी चालू होना चाहिए जब वह अंधेरा हो।सेंसर, कलाकार आदि लोहे
सेंसरों और एक्ट्यूएटर्स के साथ प्रोटोकॉल और संचार विकल्प मैं यहां वर्णन नहीं करूंगा। यह कहने के लिए पर्याप्त है कि मेरे स्मार्ट घर में ये सभी प्रोटोकॉल एक - एमक्यूटीटी से कम हो गए हैं, और इसके माध्यम से नोड-रेड के साथ संचार पहले से ही हो रहा है।तो मेरे पास क्या सेंसर और एक्ट्यूएटर हैं?1. मोशन सेंसर। 2 सेकंड के लिए कोई आंदोलन न होने पर आंदोलन और बंद होने का पता लगाने पर विषय / myhome / स्थिति / Hall_motion को एक ओपेन संदेश प्रकाशित करता है।2. लाइट सेंसर। यह 0-1000 लक्स की सीमा में स्ट्रीट लाइटिंग की चमक को मापता है। यह वर्तमान प्रकाश स्तर के साथ विषय / myhome / स्थिति / Lumin_Hall में प्रति मिनट एक बार एक संदेश प्रकाशित करता है।3. डिमर नियंत्रण एलईडी लैंप। यह विषय / myhome / कमांड / Light_Hall / राज्य के लिए सदस्यता लिया है। यदि आप वहाँ 0 लिखते हैं - प्रकाश बंद हो जाएगा। 100 - अधिकतम चमक पर मुड़ता है। 1-99 - प्रकाश की तीव्रता को बदल देगा। रात की रोशनी के लिए, पर्याप्त तीव्रता 1।नोड-रेड में प्रवाह का विवरण
यह माना जाता है कि आपने पहले से ही Node-RED स्थापित किया है। यदि नहीं, तो ऊपर दिए गए लिंक का अनुसरण करें और आपके लिए सुविधाजनक किसी भी विकल्प को स्थापित करें - कंप्यूटर, रास्पबेरी, क्लॉउड, आदि पर। मेरे मामले में, नोड-आरपी आरपीआई 2 पर स्थापित है (मेरी राय में, यह रास्पियन के साथ भी आता है, इसलिए कुछ भी स्थापित करने की आवश्यकता नहीं है)। इस प्रवाह को किसी अतिरिक्त लाइब्रेरी की स्थापना की आवश्यकता नहीं है।इनपुट्स और आउटपुट
सबसे पहले, हम अपने एल्गोरिथ्म के लिए आवश्यक इनपुट और आउटपुट बनाते हैं। ये MQTT ग्राहक होंगे जो संबंधित विषयों की सदस्यता लेंगे। हम उन्हें लाइब्रेरी से बाईं ओर खींचें और कस्टमाइज़ करें।नोट: प्रदर्शित ब्लॉक नाम उनकी सेटिंग में बदले जा सकते हैं।लाइट सेंसर के लिए, MQTT इनपुट से हॉल लाइट सेंसर नोड बनाएं: इसके कॉन्फ़िगरेशन में, यह MQTT ब्रोकर के पते और विषय को पंजीकृत करने के लिए पर्याप्त है।
इसके कॉन्फ़िगरेशन में, यह MQTT ब्रोकर के पते और विषय को पंजीकृत करने के लिए पर्याप्त है। मेरा ब्रोकर उसी प्लेटफॉर्म पर घूम रहा है, इसलिए लोकलहोस्ट को छोड़ दें।हम मोशन सेंसर के लिए हॉल मोशन सेंसर नोड बनाते हैं: इसके लिए
मेरा ब्रोकर उसी प्लेटफॉर्म पर घूम रहा है, इसलिए लोकलहोस्ट को छोड़ दें।हम मोशन सेंसर के लिए हॉल मोशन सेंसर नोड बनाते हैं: इसके लिए सब कुछ समान है, बस एक और विषय / myhome / state / Hall_motion सेट करें।
सब कुछ समान है, बस एक और विषय / myhome / state / Hall_motion सेट करें। जैसा कि आप ब्रोकर के पते और मापदंडों को देख सकते हैं, यह नोड पहले से ही पहले से ही लिया गया है, इसलिए आपको उन्हें एक नए में दर्ज करने की आवश्यकता नहीं है।यह एलईडी डिमर के उत्पादन के लिए एमक्यूटीटी आउटपुट जोड़ने के लिए बना हुआ है। MQTT आउटपुट को ड्रैग और ड्रॉप करें और इसे हॉल लाइट डिमर कहें।
जैसा कि आप ब्रोकर के पते और मापदंडों को देख सकते हैं, यह नोड पहले से ही पहले से ही लिया गया है, इसलिए आपको उन्हें एक नए में दर्ज करने की आवश्यकता नहीं है।यह एलईडी डिमर के उत्पादन के लिए एमक्यूटीटी आउटपुट जोड़ने के लिए बना हुआ है। MQTT आउटपुट को ड्रैग और ड्रॉप करें और इसे हॉल लाइट डिमर कहें। मापदंडों में, फिर से, आपको केवल वांछित विषय को निर्दिष्ट करने की आवश्यकता है, जिसमें डायमर को नियंत्रित करने के लिए संदेश भेजे जाएंगे - / myhome / कमांड / लाइट_हॉल / स्थिति
मापदंडों में, फिर से, आपको केवल वांछित विषय को निर्दिष्ट करने की आवश्यकता है, जिसमें डायमर को नियंत्रित करने के लिए संदेश भेजे जाएंगे - / myhome / कमांड / लाइट_हॉल / स्थिति नतीजतन, हमें अपने प्रवाह के लिए तीन नोड मिले।
नतीजतन, हमें अपने प्रवाह के लिए तीन नोड मिले। यह कार्यक्षमता के लिए उनका परीक्षण करने के लिए दुख नहीं होगा। यह आसान है।हम डिबग आउटपुट को इनपुट ब्लॉक से जोड़ते हैं।
यह कार्यक्षमता के लिए उनका परीक्षण करने के लिए दुख नहीं होगा। यह आसान है।हम डिबग आउटपुट को इनपुट ब्लॉक से जोड़ते हैं। और Inject Input को आउटपुट ब्लॉक से कनेक्ट करें।
और Inject Input को आउटपुट ब्लॉक से कनेक्ट करें। इस नोड की सेटिंग्स में, आपको दीपक के वांछित चमक के स्तर पर पेलोड को बदलने की आवश्यकता है। उदाहरण के लिए, इस मामले में यह 100 है।
इस नोड की सेटिंग्स में, आपको दीपक के वांछित चमक के स्तर पर पेलोड को बदलने की आवश्यकता है। उदाहरण के लिए, इस मामले में यह 100 है। हम कॉपी-पेस्ट द्वारा कई समान इंजेक्शन ब्लॉक बना सकते हैं, चमक को बदल सकते हैं, और इसे इस तरह आउटपुट से जोड़ सकते हैं:
हम कॉपी-पेस्ट द्वारा कई समान इंजेक्शन ब्लॉक बना सकते हैं, चमक को बदल सकते हैं, और इसे इस तरह आउटपुट से जोड़ सकते हैं: वह भी काम करेगा। यह जांचने का समय है। हम डिप्लॉय बटन पर क्लिक करते हैं:
वह भी काम करेगा। यह जांचने का समय है। हम डिप्लॉय बटन पर क्लिक करते हैं: एमक्यूटीटी नोड्स के तहत, आपको एक छोटा संदेश देखना चाहिए:
एमक्यूटीटी नोड्स के तहत, आपको एक छोटा संदेश देखना चाहिए: इसका मतलब है कि वे एमक्यूटीटी ब्रोकर से जुड़े हैं। यदि सब कुछ योजना के अनुसार चला गया है, तो सही डिबग टैब में आपको सेंसर से संदेश देखना चाहिए, और यदि आप इंजेक्ट नोड्स के बाईं ओर आयतों पर क्लिक करते हैं, तो डिमर से जुड़े दीपक की प्रकाश तीव्रता बदलनी चाहिए। यदि सब कुछ काम करता है, तो आप आगे बढ़ सकते हैं।
इसका मतलब है कि वे एमक्यूटीटी ब्रोकर से जुड़े हैं। यदि सब कुछ योजना के अनुसार चला गया है, तो सही डिबग टैब में आपको सेंसर से संदेश देखना चाहिए, और यदि आप इंजेक्ट नोड्स के बाईं ओर आयतों पर क्लिक करते हैं, तो डिमर से जुड़े दीपक की प्रकाश तीव्रता बदलनी चाहिए। यदि सब कुछ काम करता है, तो आप आगे बढ़ सकते हैं।मोशन सेंसर लाइटिंग कंट्रोल सर्किट
सादगी के लिए, मैं व्यक्तिगत रूप से जुड़े ब्लॉकों को जंजीरों के रूप में संदर्भित करूंगा। सबसे पहले, चलो एक सरल सर्किट बनाने की कोशिश करते हैं जो गति संवेदक द्वारा प्रकाश को चालू करता है और कुछ समय बाद इसे बंद कर देता है। ऐसा करने के लिए, नोड-लाल अवधारणा के अनुसार, हमें कुछ ब्लॉकों के माध्यम से डिमर तक पहुंचने के लिए मोशन सेंसर से संदेश की आवश्यकता होती है और एक निश्चित पाठ होता है। सबसे पहले, हम प्रकाश के समावेश से निपटेंगे।सबसे पहले, हम मोशन सेंसर से सभी संदेशों को टेक्स्ट ओपन के साथ एक संदेश से चुनते हैं - इसका मतलब है कि आंदोलन दिखाई दिया है। ऐसा करने के लिए, स्विच ब्लॉक का उपयोग करें। इसे हॉल मोशन सेंसर ब्लॉक के आउटपुट से कनेक्ट करें जो हमने पहले ही बनाया है। हम इसे कॉन्फ़िगर करेंगे ताकि ब्लॉक केवल पाठ OPEN के साथ संदेशों को आउटपुट करे
हम इसे कॉन्फ़िगर करेंगे ताकि ब्लॉक केवल पाठ OPEN के साथ संदेशों को आउटपुट करे जैसा कि आप तस्वीर से देख सकते हैं, ब्लॉक टेक्स्ट ओपेन के साथ पेलोड की तुलना करेगा और टेक्स्ट मेल होने पर आउटपुट को संदेश भेजेगा।हमारे डिमर को उस संदेश की आवश्यकता होती है जिसमें आवश्यक चमक 0 ... 100 हो। वह पाठ को नहीं समझेगा। इसलिए, हम संदेश के पाठ को बदलने के लिए चेंज ब्लॉक का उपयोग करते हैं।
जैसा कि आप तस्वीर से देख सकते हैं, ब्लॉक टेक्स्ट ओपेन के साथ पेलोड की तुलना करेगा और टेक्स्ट मेल होने पर आउटपुट को संदेश भेजेगा।हमारे डिमर को उस संदेश की आवश्यकता होती है जिसमें आवश्यक चमक 0 ... 100 हो। वह पाठ को नहीं समझेगा। इसलिए, हम संदेश के पाठ को बदलने के लिए चेंज ब्लॉक का उपयोग करते हैं।
 इस ब्लॉक की सेटिंग में, आवश्यक परिवर्तन लिखें - संदेश पेलोड हम 100 में बदल जाते हैं - आवश्यक प्रकाश तीव्रता।और अंत में, हम इसे अपने डिमर के इनपुट से जोड़ते हैं:
इस ब्लॉक की सेटिंग में, आवश्यक परिवर्तन लिखें - संदेश पेलोड हम 100 में बदल जाते हैं - आवश्यक प्रकाश तीव्रता।और अंत में, हम इसे अपने डिमर के इनपुट से जोड़ते हैं: यदि आप इस सर्किट को शुरू करते हैं, तो आप यह सुनिश्चित कर सकते हैं कि यह काम करता है - प्रकाश गति में बदल जाएगा। यह सुनिश्चित करने के लिए बना हुआ है कि यह भी बंद हो जाए।ऐसा करने के लिए, ट्रिगर यूनिट का उपयोग करें और इसे मोशन सेंसर के आउटपुट से कनेक्ट करें।
यदि आप इस सर्किट को शुरू करते हैं, तो आप यह सुनिश्चित कर सकते हैं कि यह काम करता है - प्रकाश गति में बदल जाएगा। यह सुनिश्चित करने के लिए बना हुआ है कि यह भी बंद हो जाए।ऐसा करने के लिए, ट्रिगर यूनिट का उपयोग करें और इसे मोशन सेंसर के आउटपुट से कनेक्ट करें। ट्रिगर ब्लॉक आपको विलंबित संदेश उत्पन्न करने की अनुमति देता है, और एक विशिष्ट संदेश द्वारा भी रीसेट किया जा सकता है। हम इसे इस तरह
ट्रिगर ब्लॉक आपको विलंबित संदेश उत्पन्न करने की अनुमति देता है, और एक विशिष्ट संदेश द्वारा भी रीसेट किया जा सकता है। हम इसे इस तरह कॉन्फ़िगर करेंगे: यह सेटिंग का अर्थ है कि जब पहला संदेश आता है, तो ट्रिगर कुछ भी नहीं भेजता है, लेकिन 8 सेकंड का समय देरी से शुरू होता है और इसके बाद यह पाठ के साथ एक संदेश भेजता है। 0. पाठ ट्रिगर के साथ एक इनपुट प्राप्त होने पर ट्रिगर भी रीसेट हो जाता है। हमारे मामले में इसका क्या मतलब है?मान लीजिए कि गति संवेदक एक OPEN संदेश प्रदर्शित करता है। यह संदेश बिना किसी प्रतिक्रिया के अपनी मूल स्थिति में ट्रिगर लौटा देगा। फिर कुछ समय बाद, मोशन सेंसर एक बंद संदेश जारी करेगा। यह संदेश समय देरी से शुरू होगा और उसके 8 सेकंड बाद ट्रिगर एक संदेश प्रदर्शित करेगा।यदि इस समय के दौरान OPEN संदेश फिर से आता है, तो ट्रिगर फिर से अपनी मूल स्थिति में आ जाएगा और अगले संदेश (जो तार्किक रूप से बंद हो जाएगा) की प्रतीक्षा करेगा। इस स्थिति में, ट्रिगर कोई संदेश प्रदर्शित नहीं करेगा।यही है, इस तरह से हमने एक टाइमर बनाया है जो किसी दिए गए एक्सपोजर के बाद प्रकाश को स्वचालित रूप से बंद करने के लिए हमारी सेवा करेगा। अगर हम मोशन सेंसर के वर्णन को याद करते हैं, तो यह स्पष्ट हो जाता है कि 8 सेकंड यहां क्यों सेट किए गए हैं, और 10 - 2 सेकंड नहीं, गति सेंसर की शटर गति के कारण ही जोड़ा जाता है।यह ट्रिगर आउटपुट को डायमर से कनेक्ट करने के लिए रहता है और आप सत्यापन के लिए सर्किट शुरू कर सकते हैं।
कॉन्फ़िगर करेंगे: यह सेटिंग का अर्थ है कि जब पहला संदेश आता है, तो ट्रिगर कुछ भी नहीं भेजता है, लेकिन 8 सेकंड का समय देरी से शुरू होता है और इसके बाद यह पाठ के साथ एक संदेश भेजता है। 0. पाठ ट्रिगर के साथ एक इनपुट प्राप्त होने पर ट्रिगर भी रीसेट हो जाता है। हमारे मामले में इसका क्या मतलब है?मान लीजिए कि गति संवेदक एक OPEN संदेश प्रदर्शित करता है। यह संदेश बिना किसी प्रतिक्रिया के अपनी मूल स्थिति में ट्रिगर लौटा देगा। फिर कुछ समय बाद, मोशन सेंसर एक बंद संदेश जारी करेगा। यह संदेश समय देरी से शुरू होगा और उसके 8 सेकंड बाद ट्रिगर एक संदेश प्रदर्शित करेगा।यदि इस समय के दौरान OPEN संदेश फिर से आता है, तो ट्रिगर फिर से अपनी मूल स्थिति में आ जाएगा और अगले संदेश (जो तार्किक रूप से बंद हो जाएगा) की प्रतीक्षा करेगा। इस स्थिति में, ट्रिगर कोई संदेश प्रदर्शित नहीं करेगा।यही है, इस तरह से हमने एक टाइमर बनाया है जो किसी दिए गए एक्सपोजर के बाद प्रकाश को स्वचालित रूप से बंद करने के लिए हमारी सेवा करेगा। अगर हम मोशन सेंसर के वर्णन को याद करते हैं, तो यह स्पष्ट हो जाता है कि 8 सेकंड यहां क्यों सेट किए गए हैं, और 10 - 2 सेकंड नहीं, गति सेंसर की शटर गति के कारण ही जोड़ा जाता है।यह ट्रिगर आउटपुट को डायमर से कनेक्ट करने के लिए रहता है और आप सत्यापन के लिए सर्किट शुरू कर सकते हैं। मैं ध्यान देता हूं कि सादगी के लिए मैं पहले से ही डिबग की गई श्रृंखला के स्क्रीनशॉट पोस्ट करता हूं। यह कैसे काम करता है, यह समझने के लिए आप अपनी डिबग श्रृंखला के साथ ब्लॉक लटका सकते हैं और आपकी श्रृंखला इस तरह दिख सकती है:
मैं ध्यान देता हूं कि सादगी के लिए मैं पहले से ही डिबग की गई श्रृंखला के स्क्रीनशॉट पोस्ट करता हूं। यह कैसे काम करता है, यह समझने के लिए आप अपनी डिबग श्रृंखला के साथ ब्लॉक लटका सकते हैं और आपकी श्रृंखला इस तरह दिख सकती है: और चिंता की कोई बात नहीं है।और आप इसे इस तरह से कर सकते हैं:
और चिंता की कोई बात नहीं है।और आप इसे इस तरह से कर सकते हैं: सामान्य तौर पर, इंजेक्ट ब्लॉकों के बाईं ओर आयतों पर क्लिक करके, आप बिना लोहे के सर्किट को डीबग कर सकते हैं - अपने लैपटॉप पर सबवे या एक टैबलेट पर यात्रा के दौरान।
सामान्य तौर पर, इंजेक्ट ब्लॉकों के बाईं ओर आयतों पर क्लिक करके, आप बिना लोहे के सर्किट को डीबग कर सकते हैं - अपने लैपटॉप पर सबवे या एक टैबलेट पर यात्रा के दौरान।स्ट्रीट लाइटिंग की चमक के आधार पर लाइट ऑन / ऑफ सर्किट
अब हमें यह सुनिश्चित करने की आवश्यकता है कि यदि सड़क बहुत अधिक प्रकाश है तो प्रकाश चालू नहीं होता है। ऐसा करने के लिए, हमें इस कारक को ध्यान में रखने के लिए एक और श्रृंखला जोड़ने और मुख्य श्रृंखला को थोड़ा बदलने की आवश्यकता है।सबसे पहले, स्विच ब्लॉक लें जिसे हम पहले से जानते हैं और इसे प्रकाश संवेदक के आउटपुट से जोड़ते हैं। हम इस इकाई को कॉन्फ़िगर करेंगे ताकि यह प्रकाश संवेदक से आउटपुट में से किसी एक को संदेश भेजे, जो वर्तमान रोशनी पर निर्भर करता है।
हम इस इकाई को कॉन्फ़िगर करेंगे ताकि यह प्रकाश संवेदक से आउटपुट में से किसी एक को संदेश भेजे, जो वर्तमान रोशनी पर निर्भर करता है। ऊपर की स्थिति का अर्थ है कि यदि रोशनी 10 लक्स से कम है, तो संदेश आउटपुट 1 में भेजा जाएगा। अन्यथा, यह आउटपुट पर जाएगा। यह मत भूलो कि आपको
ऊपर की स्थिति का अर्थ है कि यदि रोशनी 10 लक्स से कम है, तो संदेश आउटपुट 1 में भेजा जाएगा। अन्यथा, यह आउटपुट पर जाएगा। यह मत भूलो कि आपको विकल्प का चयन करने की आवश्यकता है ताकि संदेश केवल आउटपुट में से एक को निर्देशित किया जाए।ऑपरेशन के सिद्धांत के आधार पर, यह तार्किक रूप से पता चलता है कि यदि संदेश पहले (ऊपरी) आउटपुट पर दिखाई दिया, तो हमें गति का पता लगाने में सक्षम होना चाहिए, और यदि दूसरा है, तो इसे बंद कर दें।यहां, निश्चित रूप से, 1000 और 1 विधियां संभव हैं, जिनमें से सबसे सरल है कि संदेश को गति संवेदक से प्रकाश को चालू करने के लिए अवरुद्ध करें यदि यह बाहर प्रकाश है। हमें इसका एहसास है।यह ध्यान दिया जाना चाहिए कि नोड-रेड में, निष्पादन इंजन संदेशों के आधार पर कार्यान्वित किया जाता है। यानी कोई संदेश नहीं - कोई घटना नहीं, कोई प्रतिक्रिया नहीं। यह इस घटना में कुछ विशिष्ट बारीकियों को लगाता है कि विभिन्न संदेश अतुल्यकालिक रूप से आते हैं, अर्थात् समय में विभिन्न बिंदुओं पर। उदाहरण के लिए, इस मामले में, प्रकाश संवेदक का संदेश गति संवेदक के संदेशों के साथ अतुल्यकालिक है। इसलिए, प्रकाश संवेदक के प्रभाव को ध्यान में रखने के लिए, हमें उस जानकारी को याद रखने की आवश्यकता है जो उसके संदेश में थी और फिर इसे अगली बार लागू करें जब कोई संदेश गति संवेदक से आता है।इस मामले में, संदर्भ बचाव के लिए आता है - एक ऐसा क्षेत्र जहां आप प्रवाह निष्पादन के दौरान जानकारी संग्रहीत कर सकते हैं। संदर्भ पूरे वातावरण के संबंध में वैश्विक है, या एक विशिष्ट प्रवाह के लिए स्थानीय है, या आमतौर पर केवल एक विशिष्ट ब्लॉक के लिए।हमारे मामले में, हम इस प्रवाह के लिए एक संदर्भ स्थानीय का उपयोग करेंगे। यानी चर इस प्रवाह में सभी ब्लॉकों को दिखाई देंगे। एक परिवर्तन ब्लॉक बनाएं और इसे लाइट थ्रेशोल्ड डिटेक्टर के पहले आउटपुट से कनेक्ट करें।
विकल्प का चयन करने की आवश्यकता है ताकि संदेश केवल आउटपुट में से एक को निर्देशित किया जाए।ऑपरेशन के सिद्धांत के आधार पर, यह तार्किक रूप से पता चलता है कि यदि संदेश पहले (ऊपरी) आउटपुट पर दिखाई दिया, तो हमें गति का पता लगाने में सक्षम होना चाहिए, और यदि दूसरा है, तो इसे बंद कर दें।यहां, निश्चित रूप से, 1000 और 1 विधियां संभव हैं, जिनमें से सबसे सरल है कि संदेश को गति संवेदक से प्रकाश को चालू करने के लिए अवरुद्ध करें यदि यह बाहर प्रकाश है। हमें इसका एहसास है।यह ध्यान दिया जाना चाहिए कि नोड-रेड में, निष्पादन इंजन संदेशों के आधार पर कार्यान्वित किया जाता है। यानी कोई संदेश नहीं - कोई घटना नहीं, कोई प्रतिक्रिया नहीं। यह इस घटना में कुछ विशिष्ट बारीकियों को लगाता है कि विभिन्न संदेश अतुल्यकालिक रूप से आते हैं, अर्थात् समय में विभिन्न बिंदुओं पर। उदाहरण के लिए, इस मामले में, प्रकाश संवेदक का संदेश गति संवेदक के संदेशों के साथ अतुल्यकालिक है। इसलिए, प्रकाश संवेदक के प्रभाव को ध्यान में रखने के लिए, हमें उस जानकारी को याद रखने की आवश्यकता है जो उसके संदेश में थी और फिर इसे अगली बार लागू करें जब कोई संदेश गति संवेदक से आता है।इस मामले में, संदर्भ बचाव के लिए आता है - एक ऐसा क्षेत्र जहां आप प्रवाह निष्पादन के दौरान जानकारी संग्रहीत कर सकते हैं। संदर्भ पूरे वातावरण के संबंध में वैश्विक है, या एक विशिष्ट प्रवाह के लिए स्थानीय है, या आमतौर पर केवल एक विशिष्ट ब्लॉक के लिए।हमारे मामले में, हम इस प्रवाह के लिए एक संदर्भ स्थानीय का उपयोग करेंगे। यानी चर इस प्रवाह में सभी ब्लॉकों को दिखाई देंगे। एक परिवर्तन ब्लॉक बनाएं और इसे लाइट थ्रेशोल्ड डिटेक्टर के पहले आउटपुट से कनेक्ट करें। जैसा कि हम याद करते हैं, इस आउटपुट पर एक संदेश दिखाई देता है यदि प्रकाश संवेदक रिपोर्ट करता है कि स्ट्रीट लाइटिंग 10 लक्स से कम है। परिवर्तन ब्लॉक के कॉन्फ़िगरेशन पर विचार करें।
जैसा कि हम याद करते हैं, इस आउटपुट पर एक संदेश दिखाई देता है यदि प्रकाश संवेदक रिपोर्ट करता है कि स्ट्रीट लाइटिंग 10 लक्स से कम है। परिवर्तन ब्लॉक के कॉन्फ़िगरेशन पर विचार करें। इस मामले में, हम प्रवाह को सेट करने के लिए सेट नियम का उपयोग करते हैं। लाइट_हैंन किए गए चर को हां में। इस प्रकार, हमने वैश्विक वैरिएबल को एक मान दिया, जिसका उपयोग हम अन्य ब्लॉकों में कर सकते हैं।उसी तरह, दूसरा परिवर्तन ब्लॉक बनाएं और इसे दूसरे आउटपुट से कनेक्ट करें।
इस मामले में, हम प्रवाह को सेट करने के लिए सेट नियम का उपयोग करते हैं। लाइट_हैंन किए गए चर को हां में। इस प्रकार, हमने वैश्विक वैरिएबल को एक मान दिया, जिसका उपयोग हम अन्य ब्लॉकों में कर सकते हैं।उसी तरह, दूसरा परिवर्तन ब्लॉक बनाएं और इसे दूसरे आउटपुट से कनेक्ट करें। इसका विन्यास इस प्रकार होगा:
इसका विन्यास इस प्रकार होगा: यह पता लगाने के लिए कि क्या ऐसा डिटेक्टर सही ढंग से काम करता है, हम इंजेक्ट और डिबग ब्लॉक के साथ एक सरल सर्किट बना सकते हैं।
यह पता लगाने के लिए कि क्या ऐसा डिटेक्टर सही ढंग से काम करता है, हम इंजेक्ट और डिबग ब्लॉक के साथ एक सरल सर्किट बना सकते हैं। इसी समय, इंजेक्ट ब्लॉक की सेटिंग्स में, हम संकेत देते हैं कि इसे चर प्रवाह का हर दूसरा मूल्य देना चाहिए। लाइट_फिल्ड
इसी समय, इंजेक्ट ब्लॉक की सेटिंग्स में, हम संकेत देते हैं कि इसे चर प्रवाह का हर दूसरा मूल्य देना चाहिए। लाइट_फिल्ड तब डीबग टैब में लाइट सेंसर का परिणाम आसानी से देखा जा सकता है। लाइट सेंसर के
तब डीबग टैब में लाइट सेंसर का परिणाम आसानी से देखा जा सकता है। लाइट सेंसर के लिए सामान्य लाइट ऑन / ऑफ सर्किट इस तरह दिखेगा
लिए सामान्य लाइट ऑन / ऑफ सर्किट इस तरह दिखेगा , इस प्रभाव को ध्यान में रखना। गति संवेदक का नियंत्रण सर्किट, प्रकाश को चालू करने के लिए पथ के सर्किट में स्विच ब्लॉक को सम्मिलित करना हमारे लिए पर्याप्त है।
, इस प्रभाव को ध्यान में रखना। गति संवेदक का नियंत्रण सर्किट, प्रकाश को चालू करने के लिए पथ के सर्किट में स्विच ब्लॉक को सम्मिलित करना हमारे लिए पर्याप्त है। और इसे सेट अप करें ताकि यह गति संवेदक से संदेशों को छोड़ दे, केवल तभी जब हमारा वैश्विक चर प्रवाह होता है। Light_enabled हां - यानी पर सेट है बाहर अंधेरा है।
और इसे सेट अप करें ताकि यह गति संवेदक से संदेशों को छोड़ दे, केवल तभी जब हमारा वैश्विक चर प्रवाह होता है। Light_enabled हां - यानी पर सेट है बाहर अंधेरा है। हो गया! अब हमारा प्रवाह इस तरह दिखता है:
हो गया! अब हमारा प्रवाह इस तरह दिखता है:
समय के आधार पर दीपक की चमक को बदलना
बहुत कम बचा है। हम एलईडी लैंप की तीव्रता को बदलना चाहते हैं। यानी अगर यह हमारे साथ अंधेरा है, लेकिन समय रात 9 बजे से पहले है, प्रकाश पूरी शक्ति से चालू होना चाहिए। लेकिन नौ के बाद - केवल कम बिजली पर, रात की रोशनी की तरह।ऐसा करने के लिए, एक इंजेक्शन ब्लॉक बनाएं: इसे कॉन्फ़िगर किया जा सकता है ताकि यह एक विशिष्ट समय पर एक संदेश प्रदर्शित करे। इसे हर दिन 21:00 बजे सेट करें।
इसे कॉन्फ़िगर किया जा सकता है ताकि यह एक विशिष्ट समय पर एक संदेश प्रदर्शित करे। इसे हर दिन 21:00 बजे सेट करें। उसी समय, हम ध्यान दें कि यह 1. के मान के साथ एक संदेश जारी करेगा। यह रात मोड में हमारी वांछित बैकलाइट तीव्रता होगी। प्रकाश नियंत्रण सर्किट में इस मान का उपयोग करने के लिए, हम वैश्विक चर के साथ एक ही चाल का उपयोग करते हैं। एक परिवर्तन बनाएँ: ब्लॉक करें
उसी समय, हम ध्यान दें कि यह 1. के मान के साथ एक संदेश जारी करेगा। यह रात मोड में हमारी वांछित बैकलाइट तीव्रता होगी। प्रकाश नियंत्रण सर्किट में इस मान का उपयोग करने के लिए, हम वैश्विक चर के साथ एक ही चाल का उपयोग करते हैं। एक परिवर्तन बनाएँ: ब्लॉक करें और इसे कॉन्फ़िगर करें ताकि चर प्रवाह ।ight_Brightness संदेश से मान असाइन किया गया हो।
और इसे कॉन्फ़िगर करें ताकि चर प्रवाह ।ight_Brightness संदेश से मान असाइन किया गया हो। सुबह प्रारंभिक चमक वापस करने के लिए, एक दूसरा इंजेक्शन ब्लॉक बनाएं, जिसे सुबह 6 बजे निष्पादित किया जाएगा और 100 की चमक मान देगा। इसे वहां कनेक्ट करें।
सुबह प्रारंभिक चमक वापस करने के लिए, एक दूसरा इंजेक्शन ब्लॉक बनाएं, जिसे सुबह 6 बजे निष्पादित किया जाएगा और 100 की चमक मान देगा। इसे वहां कनेक्ट करें। इस प्रकार, चर प्रवाह। Light_brightness को हर शाम 1 बजे 9 बजे मान दिया जाएगा, और हर सुबह 100 मान 6 बजे। यह केवल मुख्य सर्किट में इसे लागू करने के लिए बनी हुई है। इसके लिए, हमारे पास पहले से ही एक लाइट ब्राइटनेस एडजस्टमेंट ब्लॉक है:
इस प्रकार, चर प्रवाह। Light_brightness को हर शाम 1 बजे 9 बजे मान दिया जाएगा, और हर सुबह 100 मान 6 बजे। यह केवल मुख्य सर्किट में इसे लागू करने के लिए बनी हुई है। इसके लिए, हमारे पास पहले से ही एक लाइट ब्राइटनेस एडजस्टमेंट ब्लॉक है: जिसके लिए हमें केवल सेटिंग बदलने की आवश्यकता है ताकि यह स्थिर न हो, लेकिन वेरिएबल फ्लो का मूल्य। Light_brightness।
जिसके लिए हमें केवल सेटिंग बदलने की आवश्यकता है ताकि यह स्थिर न हो, लेकिन वेरिएबल फ्लो का मूल्य। Light_brightness।
अंतिम परिणाम
अंतिम प्रवाह, डिबगिंग ब्लॉक से साफ, साफ और स्वच्छ दिखता है। बनाते समय, हमने केवल नोड-RED इंस्टॉलेशन से बिल्डिंग ब्लॉक्स का उपयोग किया था। साइट flows.nodered.org , तथापि, वहाँ से भी अधिक 800 अतिरिक्त इकाइयों और पुस्तकालयों है कि आप अलग अलग बातें की एक बहुत कुछ जोड़ने के लिए अनुमति देते हैं। जो लोग इस एल्गोरिथ्म को दोहराने में रुचि रखते हैं, उनके लिए मैं उस प्रवाह को पोस्ट करता हूं जिसका उपयोग मैंने डिबगिंग के लिए किया था:
जो लोग इस एल्गोरिथ्म को दोहराने में रुचि रखते हैं, उनके लिए मैं उस प्रवाह को पोस्ट करता हूं जिसका उपयोग मैंने डिबगिंग के लिए किया था: साथ ही साथ इसका जोंस कोड, जिसे आसानी से नोड-रेड के किसी भी संस्करण में आयात किया जा सकता है और परीक्षण किया जा सकता है।
साथ ही साथ इसका जोंस कोड, जिसे आसानी से नोड-रेड के किसी भी संस्करण में आयात किया जा सकता है और परीक्षण किया जा सकता है।[{"id":"5afd41b4.d61318","type":"switch","z":"2384634b.17767c","name":"Movement detected?","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"OPEN","vt":"str"}],"checkall":"false","outputs":1,"x":562,"y":285,"wires":[["381b0d6d.a0bd7a"]]},{"id":"35bac8e.57dd5b8","type":"trigger","z":"2384634b.17767c","op1":"5","op2":"0","op1type":"nul","op2type":"val","duration":"8","extend":false,"units":"s","reset":"OPEN","name":"Switch off delay","x":750,"y":373,"wires":[["e995e130.1e2118","af1f191f.498098"]]},{"id":"d85623d1.29b058","type":"change","z":"2384634b.17767c","name":"Light Brightness Adjustment","rules":[{"t":"set","p":"payload","pt":"msg","to":"Light_brightness","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":1013.9999389648438,"y":284.63330078125,"wires":[["e995e130.1e2118","af1f191f.498098"]]},{"id":"934ff922.ca34f","type":"inject","z":"2384634b.17767c","name":"","topic":"","payload":"OPEN","payloadType":"str","repeat":"","crontab":"","once":false,"x":258.5,"y":408,"wires":[["5afd41b4.d61318"]]},{"id":"ea0e2e99.52a6f8","type":"inject","z":"2384634b.17767c","name":"","topic":"","payload":"CLOSED","payloadType":"str","repeat":"","crontab":"","once":false,"x":269,"y":459,"wires":[["35bac8e.57dd5b8","5afd41b4.d61318"]]},{"id":"4187db59.93c2dc","type":"mqtt in","z":"2384634b.17767c","name":"Hall Light Sensor","topic":"/myhome/state/Lumin_Hall","qos":"2","broker":"bfc8eee2.a46c9","x":243,"y":146,"wires":[["c94e7c4.849f48"]]},{"id":"c94e7c4.849f48","type":"switch","z":"2384634b.17767c","name":"Light Threshold Selector","property":"payload","propertyType":"msg","rules":[{"t":"lt","v":"10","vt":"num"},{"t":"else"}],"checkall":"false","outputs":2,"x":517.3333129882812,"y":145.7166748046875,"wires":[["48e6a07a.962798"],["ca8b6623.f11c7"]]},{"id":"381b0d6d.a0bd7a","type":"switch","z":"2384634b.17767c","name":"Light Enabled?","property":"Light_enabled","propertyType":"flow","rules":[{"t":"eq","v":"Yes","vt":"str"}],"checkall":"true","outputs":1,"x":775.5,"y":285,"wires":[["d85623d1.29b058"]]},{"id":"48e6a07a.962798","type":"change","z":"2384634b.17767c","name":"Enable Light","rules":[{"t":"set","p":"Light_enabled","pt":"flow","to":"Yes","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":822,"y":109,"wires":[[]]},{"id":"ca8b6623.f11c7","type":"change","z":"2384634b.17767c","name":"Disable Light","rules":[{"t":"set","p":"Light_enabled","pt":"flow","to":"No","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":824.6666259765625,"y":177.51666259765625,"wires":[[]]},{"id":"b6ea27c1.c33cd","type":"inject","z":"2384634b.17767c","name":"","topic":"","payload":"Light_enabled","payloadType":"flow","repeat":"1","crontab":"","once":false,"x":330.5,"y":678,"wires":[["db66aec8.b3abc"]]},{"id":"db66aec8.b3abc","type":"debug","z":"2384634b.17767c","name":"Light_enabled","active":false,"console":"false","complete":"payload","x":670.5,"y":679,"wires":[]},{"id":"fa4b50b8.e6e0f","type":"inject","z":"2384634b.17767c","name":"","topic":"","payload":"5","payloadType":"num","repeat":"","crontab":"","once":false,"x":233.5,"y":212,"wires":[["c94e7c4.849f48"]]},{"id":"e7b1a39.f9e596","type":"inject","z":"2384634b.17767c","name":"","topic":"","payload":"100","payloadType":"num","repeat":"","crontab":"","once":false,"x":235,"y":266,"wires":[["c94e7c4.849f48"]]},{"id":"4b2f3c6f.de9aac","type":"mqtt in","z":"2384634b.17767c","name":"Hall Motion Sensor","topic":"/myhome/state/Hall_motion","qos":"2","broker":"87b370d1.dd497","x":247,"y":334,"wires":[["5afd41b4.d61318","35bac8e.57dd5b8"]]},{"id":"e995e130.1e2118","type":"mqtt out","z":"2384634b.17767c","name":"Hall Light Dimmer ","topic":"/myhome/command/Light_Hall/state","qos":"0","retain":"true","broker":"87b370d1.dd497","x":1310,"y":315,"wires":[]},{"id":"781e72a7.3c0abc","type":"inject","z":"2384634b.17767c","name":"Reduce Brightness at 21:00","topic":"Night Brightness","payload":"1","payloadType":"str","repeat":"","crontab":"00 21 * * *","once":false,"x":339,"y":517,"wires":[["adbf1e2e.3f5ae"]]},{"id":"aa444315.a48ad8","type":"inject","z":"2384634b.17767c","name":"Normal Brightness at 6:00","topic":"Night Brightness","payload":"50","payloadType":"num","repeat":"","crontab":"00 6 * * *","once":false,"x":349.6666259765625,"y":604.683349609375,"wires":[["adbf1e2e.3f5ae"]]},{"id":"adbf1e2e.3f5ae","type":"change","z":"2384634b.17767c","name":"Light Brightness Adjustment","rules":[{"t":"set","p":"Light_brightness","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":692,"y":554,"wires":[[]]},{"id":"af1f191f.498098","type":"debug","z":"2384634b.17767c","name":"","active":true,"console":"false","complete":"false","x":1303.5,"y":429,"wires":[]},{"id":"bfc8eee2.a46c9","type":"mqtt-broker","z":"2384634b.17767c","broker":"localhost","port":"1883","clientid":"","usetls":false,"verifyservercert":true,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willRetain":null,"willPayload":"","birthTopic":"","birthQos":"0","birthRetain":null,"birthPayload":""},{"id":"87b370d1.dd497","type":"mqtt-broker","z":"2384634b.17767c","broker":"localhost","port":"1883","clientid":"","usetls":false,"verifyservercert":true,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willRetain":null,"willPayload":"","birthTopic":"","birthQos":"0","birthRetain":null,"birthPayload":""}]
परिणाम
इस लेख में मैंने यह दिखाने की कोशिश की कि नोड-RED वातावरण में होम ऑटोमेशन एल्गोरिदम को लागू करना कितना आसान है। मैंने इस प्रोग्रामिंग वातावरण के मुख्य लाभों को भी दिखाने की कोशिश की, जैसे:- कनेक्शन और कार्यों का एक तार्किक चित्रमय प्रतिनिधित्व- प्रोग्रामिंग की आसानी और उपयोगकर्ता स्क्रिप्ट को डीबग करने में आसानी- परिणामस्वरूप एल्गोरिदम की हार्डवेयर और प्लेटफ़ॉर्म स्वतंत्रता - यह स्क्रिप्ट OpenHAB के साथ समान रूप से अच्छी तरह से काम करेगी, और ioBroker के साथ और किसी भी अन्य स्मार्ट होम प्लेटफॉर्म के साथ जो एमक्यूटीटी प्रोटोकॉल का समर्थन करता है।- कॉपी-पेस्ट JSON कोड और सफल समाधानों के आदान-प्रदान के लिए एक ऑनलाइन मंच की उपस्थिति के लिए उपयोगकर्ताओं के बीच तैयार एल्गोरिदम के आदान-प्रदान में आसानी।उदाहरण के लिए, नोड-रेड बहुत कुछ कर सकता है, इंटरनेट से मौसम प्राप्त कर सकता है, ट्विटर को सूचनाएं भेज सकता है या नेस्ट थर्मोस्टैट के साथ काम कर सकता है। और इसके आधार पर, आप कई अन्य रोचक और उपयोगी स्वचालन एल्गोरिदम बना सकते हैं। लेकिन ये निम्नलिखित लेखों के लिए विषय हैं।