فهرست مطالب:

FlowerCare و Nymea برای نجات گیاهان من: 5 مرحله
FlowerCare و Nymea برای نجات گیاهان من: 5 مرحله

تصویری: FlowerCare و Nymea برای نجات گیاهان من: 5 مرحله

تصویری: FlowerCare و Nymea برای نجات گیاهان من: 5 مرحله
تصویری: BÜYÜMESİ DURMUŞ YA DA TÜKENMEK ÜZERE OLAN ÇİÇEKLERİMİZİ NASIL KURTARABİLİRİZ ? 2024, نوامبر
Anonim
FlowerCare و Nymea برای نجات گیاهان من
FlowerCare و Nymea برای نجات گیاهان من

دست زدن به سنسورهای مراقبت از گیاه به خانه هوشمند منبع باز موجود من. راهنمای توسعه پلاگین برای nymea.

داستان

من نیز مانند بسیاری دیگر از کارگران حلال فروشی و هکرها از این موضوع رنج می برم که هک کردن چیزها آنقدر وقت من را می گیرد که گهگاه آبیاری گیاهان خود را فراموش می کنم. بعد از اینکه Monstera Deliciosa من بار دیگر از خشکی رنج می برد ، تصمیم گرفتم ببینم آیا می توانم کاری در مورد آن انجام دهم تا هنگام تشنه بودن به من یادآوری شود.

یک تحقیق سریع در وب توجه من را به Xiaomi FlowerCare ، که به MiCare یا PlantCare نیز معروف است ، جلب کرد. این یک دستگاه بلوتوث کم انرژی است و برخی تحقیقات اساسی نشان داد که به نظر می رسد درک پروتکل آن بسیار آسان است. در حالی که به نظر نمی رسد شیائومی هیچ گونه مشخصات عمومی را ارائه دهد ، هنوز مهندسی معکوس زیادی در اینترنت برای این دستگاه انجام شده است. بنابراین تصمیم گرفتم یکی از آنها را سفارش دهم.

چند روز بعد تحویل داده شد و البته من بلافاصله شروع به بازی با آن کردم. من به طور خلاصه برنامه همراه خود را بررسی کردم اما همانطور که احتمالاً می توانید حدس بزنید ، استفاده از آن در تنظیمات پیش فرض آن هرگز برنامه من نبود. البته این باید با تنظیمات خانه هوشمند فعلی من ادغام شود. همانطور که در اینجا توضیح داده شد ، من از nymea به عنوان راه حل خانه هوشمند خود استفاده می کنم (بله ، شما حتی می توانید Monstera را در یکی از تصاویر آنجا مشاهده کنید:)). متأسفانه ، nymea از آن سنسور پشتیبانی نمی کرد ، بنابراین روشن کردن برخی از IDE ها به ترتیب بود.

مرحله 1: بارگیری مقاله افزونه

بارگیری مقاله افزونه افزونه
بارگیری مقاله افزونه افزونه
بارگیری مقاله پلاگین افزونه
بارگیری مقاله پلاگین افزونه
بارگیری مقاله پلاگین افزونه
بارگیری مقاله پلاگین افزونه

بنابراین اولین کاری که انجام دادم این بود که افزونه Texas Instruments Sensor Tag را کپی کنم ، به نظر می رسید به اندازه کافی شبیه دستگاه FlowerCare باشد. پس از تغییر نام اصلی موارد در plugininfo.json و اظهار نظر در مورد بیشتر کد افزونه sensortag ، من آماده بارگیری مقاله خرد افزونه جدید بودم.

همانطور که انتظار می رفت ، این کشف در حال حاضر فوراً سنسور را نشان می دهد و به من امکان می دهد آن را به سیستم اضافه کنم. البته در این مرحله هیچ داده معنی داری تولید نمی کند.

مرحله 2: پیدا کردن داده ها در سنسور

یافتن اطلاعات روی سنسور
یافتن اطلاعات روی سنسور

مانند هر دستگاه بلوتوث LE ، اولین کاری که می خواهید انجام دهید این است که از خدمات ارائه شده و ویژگی های آنها مطلع شوید. جایی در آنجا اطلاعات واقعی پنهان شده است. با یک حلقه چاپ سریع اشکال زدایی بر روی همه سرویس های کشف شده و چاپ ویژگی های آنها ، من در نقطه ای بودم که می توانستم اطلاعاتی را که در اینترنت پیدا کردم با آنچه که دستگاه واقعاً گزارش می دهد مقایسه کنم.

void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (فرستنده ()) ؛ qCDebug (dcFlowerCare ()) << "uuids سرویس داشته باشید" controller ()-> createServiceObject (sensorServiceUuid ، این) ؛ connect (m_sensorService ، & QLowEnergyService:: stateChanged، this، & FlowerCare:: onSensorServiceStateChanged) ؛ connect (m_sensorService، & QLowEnergyService:: karakteristRead، this، & FlowerCare:: onSensorServiceCharacteristicRead)؛ m_sensorService-> DiscoverDetails ()؛ } void FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return؛ } foreach (const QLowEnergyCharacteristic & feature، m_sensorService-> features ()) {qCDebug (dcFlowerCare ()). nospace () <"<< character.uuid (). toString () <<" ("<< character.handle () << "نام:" << character.name () << "):" << karakteristika.value () << "،" << karakteristika.value (). toHex ()؛ foreach (const QLowEnergyDescriptor & descriptor، feature.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <<" نام: "<< توصیف کننده.name () << "):" << descriptor.value () << "،" << descriptor.value (). toHex ()؛ }}}

نسخه سیستم عامل و سطح باتری آسان بود. من می توانم مقادیر مطابق با چاپ شده در اولین تلاش برای فهرست کردن داده ها را ببینم. مقادیر واقعی سنسور کمی عمیق تر در آنجا پنهان شده است ، اما ترکیب آن با داده های اینترنت بلافاصله نشان داد که کجا باید آن را پیدا کرد و به ویژه نحوه خواندن آن.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & feature، const QByteArray & value) {qCDebug (dcFlowerCare ()) << "خواندن مشخصه" << QString:: number (feature.handle ()، 16) temp؛ qint8 جست و خیز؛ جریان >> پرش؛ quint32 lux؛ جریان >> lux؛ رطوبت qint8 ؛ جریان >> رطوبت؛ باروری qint16 ؛ جریان >> باروری؛ انتشار به پایان رسید (m_batteryLevel ، 1.0 * temp / 10 ، lux ، رطوبت ، باروری) ؛ }

با کنار هم قرار دادن این افزونه ، در حال حاضر شروع به تولید داده های معنی دار کرده است.

مرحله 3: تکمیل لمس ها

لمس های نهایی
لمس های نهایی

بنابراین اساساً اکنون کار می کرد ، با این حال ، هنوز یک مسئله در آنجا باقی مانده بود. سنسور FlowerCare بر خلاف Texas Instruments SensorTag ، اتصال بلوتوث را پس از چند ثانیه قطع می کند. با توجه به موارد استفاده ، به نظر نمی رسد که این یک مسئله باشد زیرا در پاسخ به تلاش های اتصال کاملاً قابل اعتماد است. با توجه به اینکه بطور معمول یک گیاه لیتر آب را در عرض چند دقیقه نمی مکد ، بلکه در روزها ، به نظر نمی رسد که دائماً در ارتباط باشید. همچنین این امر باعث خالی شدن زیاد باتری می شود. بنابراین تصمیم گرفتم PluginTimer را اضافه کنم که هر 20 دقیقه سنسور را دوباره وصل کرده و داده ها را از آن دریافت کند. اگر به دلایلی ، سنسور به تلاش اتصال پاسخ ندهد ، کد تایمر دیگری را شروع می کند که سعی می کند هر دقیقه از آن نقطه به بعد وصل شود تا بتواند داده ها را بدست آورد. سپس دوباره به داده ها در بازه 20 دقیقه ای وصل می شود. اگر دستگاه دوبار پشت سر هم متصل نشود (یعنی بعد از 1 + 20 دقیقه) ، در سیستم بصورت آفلاین در سیستم علامت گذاری می شود و می توان در مورد آن به کاربر هشدار داد.

void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare، m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "تازه کردن" آدرس ()؛ flowerCare-> refreshData ()؛ } else {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: cloud را در برنامه nymea: core و در nymea: فعال کنید. به محض اتصال هر دو ، یک اعلان به طور خودکار ظاهر می شود. برای PushBullet یک چیز جدید در سیستم اضافه کنید ، PushBullet را در لیست موجود در آنجا پیدا خواهید کرد. این کلید API را که هنگام ثبت نام در PushBullet دریافت می کنید از شما می خواهد. هنگامی که یک مورد اعلان فشار در nymea دارید ، می توانید یک قانون ایجاد کنید.

البته شما می توانید هر کار دیگری که می خواهید انجام دهید … همچنین می توانید برای بازتاب مقادیر سنسور کمی نور را روشن کنید یا از افزونه HTTP command برای ارسال مقادیر حسگر به سروری در اینترنت به عنوان مثال استفاده کنید. من شیر آب ندارم که می تواند به صورت دیجیتالی (هنوز) کنترل شود ، اما البته ، اگر چنین چیزی دارید و هنوز توسط nymea پشتیبانی نمی شود ، افزودن افزونه ای برای آن بسیار شبیه به این خواهد بود.

مرحله 5: بستن کلمات

کلمات پایانی
کلمات پایانی

افزونه Flowercare قبلاً در بالادست پذیرفته شده است و اگر یکی از آنها را دارید ، اکنون می توانید با nymea استفاده کنید. با این حال ، امیدوارم اگر کسی بخواهد پشتیبانی از دستگاه های دیگر را اضافه کند ، این مقاله مورد توجه قرار گیرد. این باید راهی برای ساختن افزونه خود برای nymea باشد.

اگر می خواهید این تنظیمات را فقط در خانه خود ایجاد کنید ، تنها چیزی که نیاز دارید سنسور FlowerCare ، Raspberry Pi ، تصویر جامعه nymea (در حال حاضر شامل افزونه مراقبت از گل است) و برنامه nymea است که در فروشگاه های برنامه موجود است. همچنین ، تا کنون Monstera Deliciosa من دوباره خوشحال است و همانطور که ممکن است در تصاویر مشاهده کرده باشید ، من دومین سنسور را برای ردیابی سلامت درخت لیمو نیز به دست آورده ام. برای آن ، من هر زمان که بیرون هوا یخ زده باشد ، برای خودم اعلان فشار ارسال می کنم تا بتوانم با خیال راحت آن را از زمستان بگذرانم.

توصیه شده: