विज्ञापन
स्मार्ट पावर सॉकेट आपके घर को स्वचालित करने का सबसे सरल तरीका है, लेकिन वाई-फाई या जेडवेव आधारित सॉकेट के लिए प्रत्येक $ 40 पर, आप कुछ से अधिक खरीदने की संभावना नहीं रखते हैं।
आपके पास पहले से ही कुछ सस्ते RF आधारित सॉकेट्स हो सकते हैं - जो कि अपने स्वयं के कस्टम रिमोट कंट्रोल के साथ आते हैं, और पीछे कुछ चैनल और ID चयनकर्ता होते हैं। दुर्भाग्य से, वहाँ नहीं हैं बाजार पर स्मार्ट होम हब स्मार्ट होम हब की लड़ाई: क्या है और क्या आ रहा है? अधिक पढ़ें उन लोगों के साथ काम करते हैं। क्या यह बहुत अच्छा नहीं होगा यदि आप अपने DIY स्मार्ट होम सिस्टम में किसी तरह उन लोगों को जोड़ सकते हैं? ठीक है, आप कर सकते हैं - वास्तव में काफी आसानी से - भागों में लगभग $ 10 के साथ।
थोड़े और काम के साथ, आप कुछ अन्य bespoke RF- आधारित रिमोट हार्डवेयर को भी एकीकृत कर सकते हैं, जैसे इस बजट सिनेमा स्क्रीन.
जिसकी आपको जरूरत है:
- ESP8266 NodeMCU v12E देव बोर्ड (सटीक मॉडल में कोई बात नहीं है, v1 या v3 भी ठीक होना चाहिए) NodeMCU बोर्ड का उपयोग करने का कारण यह है कि हम बाद में आसान वाई-फाई कनेक्शन चाहते हैं। लिंक 2 के पैक के लिए है, जो प्रत्येक $ 7 पर काम करता है।
- का पैकेज 433Mhz ट्रांसमीटर और रिसीवर (लगभग $ 3)।
- RCSwitch और MQTT पुस्तकालय, और हमारे कोड - सभी Github से डाउनलोड करने के लिए उपलब्ध है.
- एक MQTT सर्वर, स्थानीय या रिमोट।
- 433 मेगाहर्ट्ज बैंड पर चलने वाले कुछ आरएफ नियंत्रित सॉकेट (इसे रिमोट कंट्रोल पर कहना चाहिए)। मैंने £ 20 ($ 25.89) के लिए 3 के पैक के रूप में मैपलिन से मेरा खरीदा।
यदि यह आपका पहली बार NodeMCU बोर्ड की प्रोग्रामिंग है, तो आपको इसके लिए Arduino प्लगइन्स डाउनलोड करने की आवश्यकता होगी: हमारे पहले भाग के साथ अनुसरण करें Arduino किलर परिचयात्मक मार्गदर्शिका Arduino किलर से मिलो: ESP8266क्या होगा अगर मैंने आपको $ 10 से कम के लिए बिल्ट-इन वाई-फाई के साथ एक अरुडिनो-संगत देव बोर्ड कहा है? खैर, वहाँ है। अधिक पढ़ें NodeMCU / ESP8266 चिप के लिए। आपको भी आवश्यकता होगी CH430 ड्राइवर. तुम खोज सकते हो यहाँ macOS CH430 ड्राइवरों पर हस्ताक्षर किए, या यहां विंडोज.
मैंने Arduino के v1.6.5 का उपयोग किया है क्योंकि कुछ भी उच्च समस्याओं को हल करता है। यदि आप पहले से ही नहीं हैं, तो डाउनग्रेड करें।
इससे पहले कि आप आगे बढ़ें, मैं एक बुनियादी स्तर के ज्ञान के बारे में सोचूंगा Arduino प्रोग्रामिंग शुरुआती के लिए Arduino प्रोग्रामिंग: ट्रैफिक लाइट कंट्रोलर प्रोजेक्ट ट्यूटोरियलArduino ट्रैफिक लाइट कंट्रोलर बनाने से आपको बुनियादी कोडिंग कौशल विकसित करने में मदद मिलती है! हम आपको शुरू करते हैं। अधिक पढ़ें , और यह कि आपके पास बोर्ड मैनेजर में अपना NodeMCU सेटअप है, और कुछ डेमो कोड को सही ढंग से अपलोड करने में सक्षम हैं। आपको हमारे डाउनलोड में शामिल पुस्तकालयों को भी आपके साथ जोड़ना चाहिए था Arduino / पुस्तकालयों फ़ोल्डर।
यदि आपके पास कोई मौजूदा है PubSubClient या MQTT लाइब्रेरी, इसे वापस लें और इसे हटा दें - जिसे मैंने डाउनलोड में शामिल किया है वह एकमात्र ऐसा स्थान है जहां मैं NodeMCU पर संदेश प्राप्त कर सकता हूं, और मैंने कोशिश की बहुत!
आरएफ सूँघने (वैकल्पिक)
यदि आप केवल DIP- स्विच या डायल चयनकर्ता प्लग सॉकेट को नियंत्रित करना चाहते हैं, तो इस चरण की आवश्यकता नहीं है - जो बॉक्स से बाहर समर्थित हैं, और न्यूनतम कोड संशोधन की आवश्यकता होगी (यह अभी भी पहले करना दिलचस्प है, हालांकि, आप समझ जाएंगे कि पीछे क्या चल रहा है दृश्य)।
यदि आपके पास अन्य आरएफ रिमूवर हैं जिन्हें आप जोड़ने का प्रयास करना चाहते हैं, तो आपको पहले से ही "सूंघना" चाहिए क्योंकि आरएफ कोड प्रसारित किए जा रहे हैं। ऐसा करने के लिए, लोड करें ReceiveDemo_Advanced से स्केच मेनू -> उदाहरण -> आरसीएसविच फ़ोल्डर, और 0 से निम्न पंक्ति को बदलें
mySwitch.enableReceive (0); // अवरोधक पर रिसीवर 0 => जो पिन # 2 है
2 से।
mySwitch.enableReceive (2); // GPIO 2 / D4 पर रिसीवर।
रिसीवर मॉड्यूल को निम्नानुसार तार करें। रिसीवर बोर्ड के सामने को देखते हुए (यह दो का लंबा है, ट्रांसमीटर वर्ग है) - घटकों के साथ पक्ष:
- सुदूर अधिकार जीएनडी है। NodeMCU बोर्ड में GND से कनेक्ट करें।
- दूर बाएं VCC है। NodeMCU बोर्ड में VIN से कनेक्ट करें।
- मध्य दो पिन संकेत हैं। NodeMCU पर या तो एक से D4 से कनेक्ट करें (वे एक साथ जुड़े हुए हैं, इसलिए यह महत्वपूर्ण नहीं है)।
अब संशोधित अपलोड करें ReceiveDemo_Advanced, और जब यह हो जाए, तो सीरियल मॉनिटर खोलें और अपने रिमोट कंट्रोल पर बटन दबाना शुरू करें। जब आप एक बटन दबाते हैं तो दशमलव (बिट लंबाई सहित), पल्स लंबाई और प्रोटोकॉल की प्रतिलिपि बनाएँ।
ऐसा करने के बाद, मैंने पाया कि मेरी प्रोजेक्टर स्क्रीन उपयोग कर रही थी
- स्क्रीनिंग यूपी: 8694273 / 24bit प्राप्त; पल्स की लंबाई: 355 या 356; प्रोटोकॉल: 1
- स्क्रीन डाउनलोड: 8694276 / 24bit प्राप्त;पल्स की लंबाई: 355 या 356; प्रोटोकॉल: 1
आवश्यकतानुसार कई बटन जारी रखें।
ट्रांसमीटर का परीक्षण
अगला, हम ट्रांसमीटर का उपयोग करके कोड भेजने का प्रयास करने जा रहे हैं। ट्रांसमीटर मॉड्यूल (वर्ग एक) को निम्नानुसार तार करें। सावधान रहें: इन पिनों पर लेबलिंग अत्याचारी है.
वीसीसी पिन वास्तव में मध्य में है, बाईं ओर नहीं। मैंने एक मॉड्यूल को नष्ट करने की प्रक्रिया में नष्ट कर दिया। "एटीएडी" कहने वाली वह चीज वास्तव में "डेटा" है, जो पीछे की ओर वर्तनी है। फिर, डेटा D4, VCC से VIN, और GND से GND (रिसीवर मॉड्यूल को हटाएं, अब आपको कोई आवश्यकता नहीं है) पर जाता है।
लोड करें उदाहरण -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, और फिर से, डेटा पिन बदलें:
mySwitch.enableTransmit (10);
सेवा
mySwitch.enableTransmit (2);
ध्यान दें, पुस्तकालय में कई तरह के उदाहरण शामिल हैं, और जो आपके लिए काम करता है, वह आपके पास मौजूद सटीक प्रकार के स्विच पर निर्भर करेगा। टाइप ए (डिप स्विच) और बी (डायल या स्लाइडर्स) सबसे आम हैं - RCSwitch पेज पर चित्रों का संदर्भ लें. टाइप बी के लिए, सॉकेट चालू और बंद करना उतना ही सरल है:
mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);
जहां 1 चैनल आईडी (शीर्ष डायल) है, और 4 सॉकेट आईडी (निचला डायल) है। ये मेरी सॉकेट पर रोमन अंकों में लिखे गए थे। इसलिए अधिकतम 16 व्यक्तिगत सॉकेट्स को संबोधित किया जा सकता है, हालांकि यदि आप एक ही बार चालू करने के लिए कई डिवाइस रखते हैं, तो कई सॉकेट एक ही पते का उपयोग कर सकते हैं।
हालांकि, मेरी प्रोजेक्टर स्क्रीन थोड़ी अलग थी - इसमें एक अलग पल्स लंबाई का उपयोग किया गया था। तो, उन काम करने के लिए, निम्नलिखित काम किया। ध्यान दें कि आप एक अलग प्रोटोकॉल को भी परिभाषित कर सकते हैं यदि आपके रिमोट को इसकी आवश्यकता है, लेकिन यह सुनिश्चित करें कि आप प्रोटोकॉल को परिभाषित करते हैं नाड़ी की लंबाई से पहले। प्रोटोकॉल बदलते समय नाड़ी की लंबाई ओवरराइट हो जाती है।
// ध्यान दें कि मेरी स्क्रीन को वास्तव में TWO बटन प्रेस की आवश्यकता है (लंबे प्रेस नहीं, लेकिन दो भौतिक प्रेस), इसलिए मैं थोड़ा देरी कर रहा हूं फिर उसी सिग्नल को फिर से भेजना void स्क्रीनअप () { mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (दशमलव कोड, बिट्स की संख्या) देरी (2000); mySwitch.send (8694273,24); } शून्य स्क्रीनडाउन () {mySwitch.setPulseLength (358); mySwitch.send (8694276,24); देरी (2000); mySwitch.send (8694276,24); }
अगले चरण पर जाने से पहले अपने सभी कोड पहले काम कर रहे हैं।
MQTT के माध्यम से नियंत्रण
आपके द्वारा गिथब नाम से डाउनलोड किए गए स्केच को खोलें mqtt_rcswitch.ino, और अपने घर के लिए नेटवर्क SSID और पासवर्ड को संशोधित करके शुरू करें। फिर, यदि आप चाहें, तो चैनल नाम बदलें और MQTT सर्वर सेट करें। यदि आपके पास पहले से ही एक MQTT सर्वर नहीं है जो आपके OpenHAB इंस्टॉल पर चल रहा है, हमारे OpenHAB शुरुआती मार्गदर्शक के भाग 2 को पढ़ें ओपनहैब बिगिनर्स गाइड भाग 2: जेडवे, एमक्यूटीटी, नियम और चार्टिंगOpenHAB, ओपन सोर्स होम ऑटोमेशन सॉफ्टवेयर, अब तक बाजार पर अन्य होम ऑटोमेशन सिस्टम की क्षमताओं से अधिक है - लेकिन इसे स्थापित करना आसान नहीं है। वास्तव में, यह सर्वथा निराशाजनक हो सकता है। अधिक पढ़ें . ध्यान दें कि मेरा कोड टाइप B (रोटरी स्विच) सॉकेट के लिए डिज़ाइन किया गया है, हालाँकि आप इसे आसानी से DIP स्विच के लिए भी संशोधित कर सकते हैं।
कोड का सबसे महत्वपूर्ण हिस्सा है संदेश मिल गया() फ़ंक्शन, जो आने वाली MQTT कमांड का जवाब देता है। इस फ़ंक्शन में, हम पहले प्रमुख कीवर्ड के लिए जाँच कर रहे हैं - मैंने "स्विच" और "स्क्रीन" चुना। "स्विच" के मामले में, हम तब चैनल और प्लग आईडी को पार्स करते हैं; फिर कमांड के लिए पेलोड बॉडी की जांच करें।
शून्य संदेश (स्थिर विषय, स्ट्रिंग पेलोड, चार * बाइट्स, अहस्ताक्षरित int लंबाई) {if (topic.indexOf ("स्विच")> = 0) {// स्विच कंट्रोल, चैनल को पार्स करें और आईडी आईडी int प्लग करें = getValue (विषय, '/', 3) .toInt (); int प्लग = getValue (विषय, '/', 4) .toInt (); अगर (पेलोड == "ऑन") {mySwitch.switchOn (चैनल, प्लग); } और {mySwitch.switchOff (चैनल, प्लग); }} और यदि (topic.indexOf ("स्क्रीन")> = 0) {// स्क्रीन नियंत्रण यदि (पेलोड == "अप") {स्क्रीनअप (); } और यदि (पेलोड == "डाउन") {स्क्रीनडाउन (); }} / * यदि और कमांड के लिए सुनने के लिए यहां एक और जोड़ें (या स्क्रीन को न चाहते हुए भी ऊपर संशोधित करें) * / }
तब डिफ़ॉल्ट रूप से, निम्न MQTT कमांड काम करते हैं:
लिविंगरूम / कंट्रोल / स्विच / एक्स / वाई (जहां एक्स चैनल है, और वाई प्लग आईडी है; संदेश शरीर के साथ या बंद पर)
Livingroom / नियंत्रण / स्क्रीन (संदेश शरीर के साथ या नीचे)
OpenHAB में जोड़ने से पहले अपने उपकरणों का परीक्षण करने के लिए कमांड लाइन या GUI MQTT क्लाइंट का उपयोग करें।
OpenHAB में जोड़ना
अंतिम चरण के रूप में, हमें बस OpenHAB में इन स्विचों के लिए कुछ आइटम बनाने की आवश्यकता है। मैंने अभी के लिए निम्नलिखित मदों को परिभाषित किया है, लेकिन आपको यह पता लगाने में सक्षम होना चाहिए कि अधिक कैसे जोड़ें:
/ * RF433mHz डिवाइस * / स्विच सिनेमास्क्रीन "स्क्रीन" (सिनेमा) {mqtt = "> [ब्रोकर: लिविंगरूम / कंट्रोल / स्क्रीन: कमांड: ऑन: डाउन],> [ब्रोकर: लिविंगरूम / कंट्रोल / स्क्रीन: कमांड: ऑफ: अप]"} स्विच स्विच 41 "स्विच 41" (सिनेमा) {mqtt = "> [ब्रोकर: लिविंगरूम / कंट्रोल / स्विच / 4/1: कमांड: ऑन:],> [ब्रोकर: लिविंगरूम / कंट्रोल / स्विच / 4/1: कमांड: ऑफ :]]} Switch4242 "Switch42" (सिनेमा) {mqtt = "> [ब्रोकर: लिविंगरूम / कंट्रोल / स्विच / 4/2: कमांड: ऑन:],> [ब्रोकर: लिविंगरूम / कंट्रोल / स्विच / 4/2: कमांड: ऑफ :]]}
अब आपको OpenHAB से अपने RF उपकरणों को नियंत्रित करने में सक्षम होना चाहिए! एक बात जिससे मुझे सुखद आश्चर्य हुआ, वह थी - एक एकल नोड मेरे घर को कवर करने में सक्षम था। आप निश्चित रूप से एक और चैनल जोड़ सकते हैं, उसी चैनल को सुनकर, जो केवल उसी कमांड को दोहराता है, अगर आपको आगे कवरेज की आवश्यकता होती है।
ध्यान में रखने के लिए केवल सीमा यह है कि सॉकेट्स अपनी स्थिति की रिपोर्ट नहीं कर सकते, इसलिए यदि आप मूल रिमोट का उपयोग करें, सॉकेट की स्थिति को नियंत्रित करें जो भीतर परिलक्षित न हो OpenHAB। सिर्फ OpenHAB इंटरफेस का उपयोग करने के लिए छड़ी और आप ठीक होना चाहिए।
प्रश्न या समस्याएँ? टिप्पणियों में दूर से पूछें, और मैं मदद करने की पूरी कोशिश करूंगा. यदि आप मेरे कोड में सुधार करना चाहते हैं, तो एक निवेदन जमा करने के लिए स्वतंत्र महसूस करें।
जेम्स के पास आर्टिफिशियल इंटेलिजेंस में बीएससी है, और कॉम्पिटिया ए + और नेटवर्क + प्रमाणित है। वह MakeUseOf के प्रमुख डेवलपर हैं, और अपना खाली समय वीआर पेंटबॉल और बोर्डगेम खेलने में बिताते हैं। वह पीसी का निर्माण कर रहा है क्योंकि वह एक बच्चा था।