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

FlowerCare و Nymea لإنقاذ نباتاتي: 5 خطوات
FlowerCare و Nymea لإنقاذ نباتاتي: 5 خطوات

فيديو: FlowerCare و Nymea لإنقاذ نباتاتي: 5 خطوات

فيديو: FlowerCare و Nymea لإنقاذ نباتاتي: 5 خطوات
فيديو: جيرانى سألونى إزاى نبات الفل/الياسمين عندى مزهر و ريحته روعة؟ فقررت اقولكم السر فى الفيديو ده - 4K 2024, يوليو
Anonim
FlowerCare و Nymea لإنقاذ نباتاتي
FlowerCare و Nymea لإنقاذ نباتاتي

الحصول على أيدي متسخة عند تركيب مستشعرات العناية بالنباتات في منزلي الذكي الحالي مفتوح المصدر. تجول حول تطوير البرنامج المساعد لـ nymea.

القصة

مثل العديد من المخترقين والمصلحين الآخرين ، فأنا أعاني أيضًا من مشكلة أن القرصنة على الأشياء تستغرق الكثير من وقتي لدرجة أنني أنسى أحيانًا سقي نباتاتي. بعد أن عانت Monstera Deliciosa مرة أخرى من التربة الجافة ، قررت أن أرى ما إذا كان بإمكاني فعل شيء حيال ذلك لتذكيرني عندما يكون عطشانًا.

لفت بحث سريع على الويب انتباهي إلى Xiaomi FlowerCare ، المعروف أيضًا باسم MiCare أو PlantCare. إنه جهاز Bluetooth منخفض الطاقة وقد كشفت بعض الأبحاث الأساسية أن بروتوكوله يبدو سهل الفهم. بينما لا يبدو أن Xiaomi تقدم أي مواصفات عامة ، كان هناك قدر كبير من الهندسة العكسية على الإنترنت لهذا الجهاز حتى الآن. لذلك قررت أن أطلب واحدة من هؤلاء.

بعد بضعة أيام تم تسليمها وبالطبع بدأت ألعب بها على الفور. لقد تحققت لفترة وجيزة من التطبيق الذي يأتي معه ، ولكن كما يمكنك أن تخمن ، فإن استخدامه في الإعداد الافتراضي لم يكن خطتي أبدًا. بالطبع يجب أن يتكامل هذا مع إعداد المنزل الذكي الحالي الخاص بي. كما هو موضح هنا أيضًا ، أستخدم nymea كحل منزلي ذكي (نعم ، يمكنك حتى اكتشاف Monstera في إحدى الصور هناك:)). للأسف ، لم يدعم nymea هذا المستشعر حتى الآن ، لذا كان إطلاق بعض IDE أمرًا جيدًا.

الخطوة 1: تحميل كعب البرنامج المساعد

تحميل كعب البرنامج المساعد
تحميل كعب البرنامج المساعد
تحميل كعب البرنامج المساعد
تحميل كعب البرنامج المساعد
تحميل كعب البرنامج المساعد
تحميل كعب البرنامج المساعد

لذلك كان أول شيء فعلته هو نسخ المكون الإضافي الحالي لعلامة Texas Instruments Sensor Tag ، بدا مشابهاً بما يكفي لما افترضت أنه يجب أن يعمل مع جهاز FlowerCare أيضًا. بعد إعادة التسمية الأساسية للأشياء في plugininfo.json والتعليق على معظم كود المكوّن الإضافي sensortag ، كنت جاهزًا لتحميل كعب البرنامج الإضافي الجديد.

كما هو متوقع ، سيُظهر الاكتشاف المستشعر على الفور ويسمح لي بإضافته إلى النظام. بالطبع لن ينتج أي بيانات ذات معنى في هذه المرحلة.

الخطوة الثانية: البحث عن البيانات على المجس

البحث عن البيانات على جهاز الاستشعار
البحث عن البيانات على جهاز الاستشعار

كما هو الحال مع أي جهاز Bluetooth LE ، فإن أول شيء تريد القيام به هو التعرف على الخدمات التي يقدمها وخصائصها. في مكان ما هناك يتم إخفاء البيانات الفعلية. من خلال حلقة طباعة سريعة لتصحيح الأخطاء على جميع الخدمات المكتشفة وطباعة خصائصها ، كنت في النقطة التي يمكنني من خلالها مقارنة المعلومات التي وجدتها على الإنترنت مع ما يقدمه الجهاز بالفعل.

void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice * btDev = static_cast (sender ()) ؛ qCDebug (dcFlowerCare ()) << "have uuids الخدمة" وحدة تحكم () -> createServiceObject (sensorServiceUid ، هذا) ؛ connect (m_sensorService، & QLowEnergyService:: stateChanged، this، & FlowerCare:: onSensorServiceStateChanged) ؛ connect (m_sensorService، & QLowEnergyService:: characteristicRead، this، & FlowerCare:: onSensorServiceCharacteristicRead) ؛ m_sensorService-> DiscoverDetails () ؛ } void FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return؛ } foreach (const QLowEnergyCharacteristic، m_sensorService-> features ()) {qCDebug (dcFlowerCare ()). nospace () <"<< characteristic.uuid (). toString () <<" ("<< characteristic.handle () << "الاسم:" << characteristic.name () << "):" << characteristic.value () << "،" << characteristic.value (). toHex ()؛ foreach (const QLowEnergyDescriptor & descriptor، المميزة.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <<" الاسم: "<< واصف.name () << "):" << descriptor.value () << "،" << descriptor.value (). toHex ()؛ }}}

كان إصدار البرنامج الثابت ومستوى البطارية سهلين. يمكنني بالفعل رؤية القيم وفقًا للطباعة في هذه المحاولة الأولى لسرد البيانات. يتم إخفاء قيم المستشعر الفعلية بشكل أعمق قليلاً هناك ، ولكن دمجها مع البيانات من الإنترنت يشير على الفور إلى مكان العثور عليها وخاصة كيفية قراءتها.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & features ، const QByteArray & value) {qCDebug (dcFlowerCare ()) << "قراءة مميزة" << QString:: number (characteristic.handle ()، 16) temp؛ qint8 تخطي ؛ تيار >> تخطي ؛ كوينت 32 لوكس تيار >> لوكس ؛ رطوبة qint8 تيار >> الرطوبة. qint16 الخصوبة ؛ تيار >> الخصوبة ؛ ينبعث منه منتهي (مستوى البطارية ، 1.0 * درجة الحرارة / 10 ، لوكس ، الرطوبة ، الخصوبة) ؛ }

بتجميع هذا معًا ، بدأ المكون الإضافي بالفعل في إنتاج بيانات مفيدة.

الخطوة الثالثة: اللمسات الأخيرة

اللمسات الأخيرة
اللمسات الأخيرة

لذلك نجح الأمر بشكل أساسي الآن ، ومع ذلك ، لا تزال هناك مشكلة واحدة. سوف يقوم مستشعر FlowerCare ، على عكس Texas Instruments SensorTag ، بإسقاط اتصال Bluetooth بعد بضع ثوانٍ. بالنظر إلى حالة الاستخدام ، لا يبدو أن هذه مشكلة لأنها موثوقة تمامًا في الاستجابة لمحاولات الاتصال. بالنظر إلى أن النبات في العادة لا يمتص لترًا من الماء في غضون دقائق ، ولكن بالأحرى أيام ، لا يبدو أنه من الضروري البقاء على اتصال طوال الوقت. كما أن هذا من شأنه أن يستنزف البطارية كثيرًا. لذلك قررت إضافة برنامج PluginTimer الذي سيعيد توصيل المستشعر كل 20 دقيقة وجلب البيانات منه. إذا لم يستجب المستشعر ، لسبب ما ، لمحاولة الاتصال ، فسيبدأ الرمز بمؤقت آخر يحاول إعادة الاتصال كل دقيقة من تلك النقطة فصاعدًا حتى يتمكن من الحصول على البيانات. ثم يعود مرة أخرى لجلب البيانات في فترة 20 دقيقة مرة أخرى. إذا فشل الجهاز في الاتصال مرتين على التوالي (بمعنى ، بعد 20 + 1 دقيقة) ، فسيتم وضع علامة "غير متصل" في النظام ويمكن تنبيه المستخدم بشأنه.

باطل DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare * flowerCare، m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Refreshing" address ()؛ flowerCare-> RefreshData () ؛ } else {qCDebug (dcFlowerCare ()) << "Not Refring" address () << "التحديث التالي في" << m_refreshMinutes [flowerCare] << "minutes"؛ } // إذا كانت لدينا محاولتان أو أكثر من محاولات الاتصال الفاشلة ، فضع علامة عليها على أنها غير متصلة إذا (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "فشل التحديث لـ" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId ، خطأ) ؛ }}}

مع هذه الإستراتيجية ، يبدو الآن أن nymea يقدم بيانات موثوقة تمامًا من هذا المستشعر.

الخطوة 4: استخدامه في سياق أكبر

استخدامه في السياق الأكبر
استخدامه في السياق الأكبر
استخدامه في السياق الأكبر
استخدامه في السياق الأكبر

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

يدعم Nymea إرسال إشعارات الدفع ، إما إلى الهواتف المزودة بـ nymea: التطبيق مثبت ، أو عبر PushBullet. لذا فإن الشيء الواضح الذي يجب فعله هو إرسال بعض الإشعارات الفورية عندما تنخفض رطوبة التربة إلى أقل من 15٪. من السهل إعداد ذلك في التطبيق. كشرط أساسي ، تحتاج إما إلى حساب في nymea: cloud أو على PushBullet. بالنسبة إلى nymea: إشعارات الدفع المستندة إلى السحابة ، يكفي تمكين nymea: السحابة على nymea: core وفي nymea: التطبيق. بمجرد توصيل كلاهما ، سيظهر شيء إشعار تلقائيًا. بالنسبة إلى PushBullet ، أضف شيئًا جديدًا في النظام ، ستجد PushBullet في القائمة هناك. سيطلب منك مفتاح API الذي تحصل عليه عند التسجيل في PushBullet. بمجرد حصولك على إشعار دفع في nymea ، يمكنك إنشاء قاعدة.

بالطبع يمكنك أن تفعل أي شيء آخر تريده … يمكنك أيضًا تشغيل بعض الضوء من أجل عكس قيم المستشعر ، أو استخدام المكون الإضافي لقائد HTTP لنشر قيم المستشعر إلى خادم على الإنترنت على سبيل المثال. ليس لدي صمام مياه والتي يمكن التحكم فيها رقميًا (حتى الآن) ولكن بالطبع ، إذا كان لديك مثل هذا الشيء ولم يتم دعمه من قبل nymea حتى الآن ، فإن إضافة مكون إضافي لذلك سيكون مشابهًا إلى حد ما.

الخطوة 5: ختام الكلمات

الكلمات الختامية
الكلمات الختامية

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

إذا كنت ترغب فقط في إنشاء هذا الإعداد في منزلك ، فكل ما تحتاجه هو مستشعر FlowerCare و Raspberry Pi وصورة مجتمع nymea (يتضمن البرنامج الإضافي للعناية بالزهور الآن) و nymea: التطبيق المتوفر في متاجر التطبيقات. أيضًا ، حتى الآن ، أصبحت Monstera Deliciosa سعيدة مرة أخرى ، وكما قد تكون قد رأيت في لقطات الشاشة ، فقد حصلت على نفسي واحدًا ثانيًا من تلك المستشعرات لتتبع صحة شجرة الليمون الخاصة بي أيضًا. لذلك ، أرسل لنفسي إشعارًا دفعًا عندما يكون الجو باردًا بالخارج حتى أتمكن من إحضاره خلال الشتاء بأمان.

موصى به: