विषयसूची:

मेरे पौधों को बचाने के लिए फ्लावरकेयर और निमिया: 5 कदम
मेरे पौधों को बचाने के लिए फ्लावरकेयर और निमिया: 5 कदम

वीडियो: मेरे पौधों को बचाने के लिए फ्लावरकेयर और निमिया: 5 कदम

वीडियो: मेरे पौधों को बचाने के लिए फ्लावरकेयर और निमिया: 5 कदम
वीडियो: Rose Plant Me Ye 3 Kam Abhi Kijiye Pattion Se Zyada Ful Ainge 100% Guarantee | How to grow Rose 2024, नवंबर
Anonim
मेरे पौधों को बचाने के लिए फ्लावरकेयर और निमिया
मेरे पौधों को बचाने के लिए फ्लावरकेयर और निमिया

मेरे मौजूदा ओपन सोर्स स्मार्ट होम में प्लांट केयर सेंसर को जोड़ने पर हाथ गंदे हो रहे हैं। nymea के लिए प्लगइन विकास पर एक पूर्वाभ्यास।

कहानी

कई अन्य टिंकर और हैकर्स के रूप में, मैं भी इस मुद्दे से पीड़ित हूं कि चीजों को हैक करने में मेरा इतना समय लगता है कि मैं कभी-कभी अपने पौधों को पानी देना भूल जाता हूं। मेरी मॉन्स्टेरा डेलिसिओसा एक बार फिर सूखी मिट्टी से पीड़ित होने के बाद, मैंने यह देखने का फैसला किया कि क्या प्यास लगने पर मुझे याद दिलाने के लिए मैं इसके बारे में कुछ कर सकता हूं।

वेब पर एक त्वरित शोध ने मेरा ध्यान Xiaomi FlowerCare की ओर आकर्षित किया, जिसे MiCare या PlantCare के नाम से भी जाना जाता है। यह एक ब्लूटूथ लो एनर्जी डिवाइस है और कुछ बुनियादी शोधों से पता चला है कि इसका प्रोटोकॉल समझने में काफी आसान लगता है। जबकि Xiaomi कोई सार्वजनिक विनिर्देश प्रदान नहीं करता है, इस डिवाइस के लिए अभी तक इंटरनेट पर काफी रिवर्स इंजीनियरिंग हुई है। इसलिए मैंने उनमें से एक को ऑर्डर करने का फैसला किया।

कुछ दिनों बाद यह डिलीवर हो गया और निश्चित रूप से मैंने तुरंत इसके साथ खेलना शुरू कर दिया। मैंने इसके साथ आने वाले ऐप को संक्षेप में देखा लेकिन जैसा कि आप शायद अनुमान लगा सकते हैं, इसे अपने डिफ़ॉल्ट सेटअप में उपयोग करना मेरी योजना कभी नहीं थी। निश्चित रूप से इसे मेरे मौजूदा स्मार्ट होम सेटअप के साथ एकीकृत करने की आवश्यकता है। जैसा कि यहां वर्णित है, मैं अपने स्मार्ट होम समाधान के रूप में nymea का उपयोग कर रहा हूं (हां, आप वहां की किसी एक तस्वीर में मॉन्स्टेरा को भी देख सकते हैं:))। अफसोस की बात है कि nymea ने उस सेंसर का समर्थन नहीं किया, फिर भी कुछ IDE को फायर करना क्रम में था।

चरण 1: एक प्लगइन स्टब लोड हो रहा है

एक प्लगइन स्टब लोड हो रहा है
एक प्लगइन स्टब लोड हो रहा है
एक प्लगइन स्टब लोड हो रहा है
एक प्लगइन स्टब लोड हो रहा है
एक प्लगइन स्टब लोड हो रहा है
एक प्लगइन स्टब लोड हो रहा है

तो सबसे पहले मैंने जो किया वह था मौजूदा टेक्सास इंस्ट्रूमेंट्स सेंसर टैग प्लगइन की प्रतिलिपि बनाना, यह काफी हद तक वैसा ही लग रहा था जैसा मैंने माना था कि फ्लावरकेयर डिवाइस के लिए भी काम करना चाहिए। प्लगइनइन्फो.जेसन में चीजों का मूल नाम बदलने और सेंसरटैग प्लगइन के अधिकांश कोड को दूर करने के बाद मैं नया प्लगइन स्टब लोड करने के लिए तैयार था।

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

चरण 2: सेंसर पर डेटा ढूँढना

सेंसर पर डेटा ढूँढना
सेंसर पर डेटा ढूँढना

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

शून्य फ्लावरकेयर:: ऑन सर्विसडिस्कवरीफिनिश्ड () {ब्लूटूथ लो एनर्जीडिवाइस * बीटीदेव = स्टेटिक_कास्ट (प्रेषक ()); qCDebug(dcFlowerCare ()) << "सर्विस यूयूआईडी है" नियंत्रक () -> createServiceObject (सेंसर सर्विस यूआईडी, यह); कनेक्ट (m_sensorService, &QLowEnergyService::stateChanged, यह, &FlowerCare::onSensorServiceStateChanged); कनेक्ट (m_sensorService, &QLowEnergyService::characteristicRead, यह, &FlowerCare::onSensorServiceCharacteristicRead); m_sensorService->डिस्कवर विवरण (); } फ्लॉवरकेयर::ऑनसेंसरसर्विसस्टेटचेंज्ड(कॉन्स्ट QLowEnergyService::ServiceSate &state) { अगर (स्टेट!= QLowEnergyService::ServiceDiscovered) {रिटर्न; } foreach (const QLowEnergyCharacteristic &characteristic, m_sensorService->characteristics()) { qCDebug(dcFlowerCare()).nospace() <" << विशेषता.uuid().toString() << " (" << विशेषता। हैंडल() << "नाम:" << विशेषता.नाम () << "): " << विशेषता। मूल्य () << ", " << विशेषता। मूल्य ()। toHex (); foreach (स्थिरांक QLowEnergyDescriptor और वर्णनकर्ता, विशेषता.descriptors()) { qCDebug(dcFlowerCare()).nospace() <" << descriptor.uuid().toString() << " (" << डिस्क्रिप्टर.हैंडल() << "नाम:" << डिस्क्रिप्टर.name() << "): " << डिस्क्रिप्टर.वैल्यू () << ", " << डिस्क्रिप्टर.वैल्यू ()। toHex (); } } }

फर्मवेयर संस्करण और बैटरी स्तर आसान थे। मैं पहले से ही डेटा को सूचीबद्ध करने के इस पहले प्रयास में छपे हुए मूल्यों को देख सकता था। वास्तविक सेंसर मान वहां थोड़े गहरे छिपे हुए हैं, लेकिन इसे इंटरनेट से डेटा के साथ जोड़कर तुरंत बताया गया कि इसे कहां खोजना है और विशेष रूप से इसे कैसे पढ़ना है।

शून्य फ्लावरकेयर:: ऑन सेंसर सर्विस कैरेक्टरिस्टिक रीड (कॉन्स्ट क्यूलो एनर्जी कैरेक्टरिस्टिक एंड कैरेक्टरिस्टिक, कॉन्स्ट क्यूबीटेएरे और वैल्यू) {क्यूसीडीबग (डीसीफ्लॉवरकेयर ()) << "कैरेक्टरिस्टिक रीड" << क्यूस्ट्रिंग:: नंबर (कैरेक्टरिस्टिक। हैंडल (), 16) अस्थायी; qint8 छोड़ें; धारा >> छोड़ें; quint32 लक्स; धारा >> लक्स; qint8 नमी; धारा >> नमी; qint16 प्रजनन क्षमता; धारा >> प्रजनन क्षमता; उत्सर्जन समाप्त (m_batteryLevel, 1.0 * अस्थायी / 10, लक्स, नमी, उर्वरता); }

इसे एक साथ रखकर, प्लगइन ने पहले से ही सार्थक डेटा का उत्पादन शुरू कर दिया है।

चरण 3: फिनिशिंग टच

अंतिम समापन कार्य
अंतिम समापन कार्य

तो यह मूल रूप से अब काम कर रहा था, हालांकि, एक मुद्दा अभी भी वहीं बचा था। फ्लावरकेयर सेंसर, टेक्सास इंस्ट्रूमेंट्स सेंसरटैग के विपरीत, कुछ सेकंड के बाद ब्लूटूथ कनेक्शन को छोड़ देगा। हालांकि उपयोग के मामले को ध्यान में रखते हुए, यह कोई मुद्दा नहीं लगता है क्योंकि यह कनेक्शन प्रयासों के जवाब में काफी विश्वसनीय है। यह देखते हुए कि आमतौर पर एक पौधा मिनटों में एक लीटर पानी नहीं चूसता है, बल्कि दिनों में, हर समय जुड़े रहना आवश्यक नहीं लगता। साथ ही इससे बैटरी काफी हद तक खत्म हो जाएगी। इसलिए मैंने एक प्लगइन टाइमर जोड़ने का फैसला किया जो हर 20 मिनट में सेंसर को फिर से कनेक्ट करेगा और इससे डेटा प्राप्त करेगा। यदि, किसी कारण से, सेंसर कनेक्शन के प्रयास का जवाब नहीं देगा, तो कोड एक और टाइमर शुरू करेगा जो उस बिंदु से हर मिनट फिर से कनेक्ट करने का प्रयास करता है जब तक कि वह डेटा प्राप्त करने का प्रबंधन नहीं करता। फिर यह 20 मिनट के अंतराल पर फिर से डेटा लाने के लिए वापस जाएगा। यदि डिवाइस लगातार दो बार कनेक्ट करने में विफल रहता है (अर्थात, 20 + 1 मिनट के बाद), इसे सिस्टम में ऑफ़लाइन चिह्नित किया जाएगा और उपयोगकर्ता को इसके बारे में सतर्क किया जा सकता है।

void DevicePluginFlowercare::onPluginTimer(){ foreach (FlowerCare *flowerCare, m_list) { if (--m_refreshMinutes[flowerCare] <= 0) { qCDebug(dcFlowerCare ()) << "रिफ्रेशिंग" एड्रेस (); फ्लॉवरकेयर-> रिफ्रेशडाटा (); } और { qCDebug(dcFlowerCare ()) << "रिफ्रेशिंग नहीं" पता () << "अगला रिफ्रेश इन" << m_refreshMinutes[flowerCare] << "मिनट"; } // यदि हमारे पास 2 या अधिक असफल कनेक्शन प्रयास थे, तो इसे डिस्कनेक्ट के रूप में चिह्नित करें यदि (m_refreshMinutes[flowerCare] <-2) { qCDebug(dcFlowerCare()) << "के लिए ताज़ा करने में विफल"<< (m_refreshMinutes[flowerCare] * -1) <setStateValue(flowerCareConnectedStateTypeId, false); } } }

इस रणनीति के साथ nymea अब इस सेंसर से पूरी तरह से विश्वसनीय डेटा देने लगता है।

चरण 4: बड़े संदर्भ में इसका उपयोग करना

बड़े संदर्भ में इसका उपयोग करना
बड़े संदर्भ में इसका उपयोग करना
बड़े संदर्भ में इसका उपयोग करना
बड़े संदर्भ में इसका उपयोग करना

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

Nymea पुश नोटिफिकेशन भेजने का समर्थन करता है, या तो nymea वाले फोन पर: ऐप इंस्टॉल किया गया है, या PushBullet के माध्यम से। तो स्पष्ट बात यह है कि जब भी मिट्टी की नमी 15% से कम हो जाती है तो खुद को कुछ पुश नोटिफिकेशन भेजना है। इसे ऐप में सेट करना काफी आसान है। पूर्वापेक्षा के रूप में आपको या तो nymea:cloud में या PushBullet पर एक खाते की आवश्यकता है। Nymea के लिए: क्लाउड आधारित पुश नोटिफिकेशन nymea को सक्षम करने के लिए पर्याप्त है: nymea पर क्लाउड: कोर और nymea: ऐप में। दोनों के कनेक्ट होते ही एक नोटिफिकेशन चीज अपने आप सामने आ जाएगी। PushBullet के लिए सिस्टम में एक नई चीज़ जोड़ें, आप वहां सूची में PushBullet पाएंगे। यह आपसे PushBullet के साथ साइन अप करते समय आपको मिलने वाली API कुंजी के बारे में पूछेगा। एक बार जब आपके पास nymea में एक पुश सूचना है, तो आप एक नियम बना सकते हैं।

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

चरण 5: समापन शब्द

समापन शब्द
समापन शब्द

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

यदि आप इस सेटअप को अपने घर पर बनाना चाहते हैं, तो आपको केवल फ्लावरकेयर सेंसर, रास्पबेरी पाई, निमिया कम्युनिटी इमेज (इसमें अब तक फ्लावर केयर प्लगइन शामिल है), और nymea: ऐप है जो ऐप स्टोर में उपलब्ध है। इसके अलावा, अब तक मेरा मॉन्स्टेरा डेलिसिओसा फिर से खुश है और जैसा कि आपने स्क्रीनशॉट में देखा होगा, मैंने अपने नींबू के पेड़ के स्वास्थ्य को भी ट्रैक करने के लिए उन सेंसरों में से एक दूसरा सेंसर प्राप्त किया है। उसके लिए जब भी बाहर ठंड होती है तो मैं खुद को पुश नोटिफिकेशन भेज रहा हूं ताकि मैं इसे सर्दियों में सुरक्षित रूप से ला सकूं।

सिफारिश की: