תוכן עניינים:

FlowerCare ו- Nymea להצלת הצמחים שלי: 5 שלבים
FlowerCare ו- Nymea להצלת הצמחים שלי: 5 שלבים

וִידֵאוֹ: FlowerCare ו- Nymea להצלת הצמחים שלי: 5 שלבים

וִידֵאוֹ: FlowerCare ו- Nymea להצלת הצמחים שלי: 5 שלבים
וִידֵאוֹ: "Essential Tips for Cutting and Caring for Flowers" 2024, נוֹבֶמבֶּר
Anonim
FlowerCare ו- Nymea להצלת הצמחים שלי
FlowerCare ו- Nymea להצלת הצמחים שלי

מלכלך ידיים על חיבור חיישני טיפוח צמחים לבית החכם הקיים הקוד הפתוח שלי. הדרכה בנושא פיתוח תוספים עבור nymea.

הסיפור

כמו הרבה מתעסקים והאקרים, אני סובל גם מהבעיה שהפריצה לדברים גוזלת כל כך הרבה מזמני עד שאני שוכח מדי פעם להשקות את הצמחים שלי. לאחר שה- Monstera Deliciosa שלי שוב סבלה מאדמה יבשה, החלטתי לבדוק אם אוכל לעשות משהו בנידון כדי להזכיר לי כשהיא צמאה.

מחקר מהיר באינטרנט הפנה את תשומת לבי ל- Xiaomi FlowerCare, המכונה גם MiCare או PlantCare. זהו מכשיר Bluetooth נמוך אנרגיה וכמה מחקר בסיסי גילה כי נראה שהפרוטוקול שלו די קל להבנה. למרות שייתכן ש- Xiaomi לא מספקת מפרט פומבי, עדיין יש לא מעט הנדסה הפוכה באינטרנט למכשיר זה. אז החלטתי להזמין אחד כזה.

כמה ימים לאחר מכן הוא נמסר וכמובן שהתחלתי לשחק איתו מייד. בדקתי בקצרה את האפליקציה המצורפת אליה, אך כפי שאתה כנראה יכול לנחש, השימוש בה בהגדרת ברירת המחדל שלה מעולם לא הייתה התוכנית שלי. כמובן שצריך לשלב את זה עם התקנת הבית החכם הקיים שלי. כפי שמתואר כאן אני משתמש ב- nymea כפתרון הבית החכם שלי (כן, אתה יכול אפילו לזהות את המונסטרה באחת התמונות שם:)). למרבה הצער, nymea לא תמכה בחיישן הזה עדיין, כך שצריך היה להפעיל קצת IDE.

שלב 1: טעינת תקע פלאגין

טעינת תקע תוסף
טעינת תקע תוסף
טעינת תקע תוסף
טעינת תקע תוסף
טעינת תקע תוסף
טעינת תקע תוסף

אז הדבר הראשון שעשיתי היה להעתיק את התוסף הקיים של Texas Instruments Sensor Tag, הוא נראה מספיק דומה למה שהנחתי שצריך לעבוד גם עבור מכשיר FlowerCare. לאחר שינוי השם הבסיסי של דברים ב- plugininfo.json והערת רוב קוד התוסף של sensortag הייתי מוכן לטעון את תקע התוסף החדש.

כצפוי, הגילוי כבר יראה את החיישן מיד ויאפשר לי להוסיף אותו למערכת. כמובן שזה לא ייצור נתונים משמעותיים בשלב זה.

שלב 2: מציאת נתונים על החיישן

מציאת נתונים על החיישן
מציאת נתונים על החיישן

כמו כל מכשיר Bluetooth LE, הדבר הראשון שאתה רוצה לעשות הוא לברר על השירותים שהוא מציע ועל המאפיינים שלהם. אי שם שם הנתונים האמיתיים מוסתרים. עם הדפסה מהירה של ניפוי באגים על כל השירותים שהתגלו והדפסת המאפיינים שלהם הייתי בנקודה שבה אוכל להשוות את המידע שמצאתי באינטרנט למה שהמכשיר מדווח בפועל.

void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (sender ()); qCDebug (dcFlowerCare ()) << "יש לך מדריכי שירות" בקר ()-> createServiceObject (sensorServiceUuid, זה); connect (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); connect (m_sensorService, & QLowEnergyService:: characterRead, this, & FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> discoverDetails (); } void FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & מאפיין, m_sensorService-> מאפיינים ()) {qCDebug (dcFlowerCare ()). nospace () <"<< character.uuid (). toString () <<" ("<< character.handle () << "שם:" << character.name () << "):" << character.value () << "," << character.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 & character, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "קריאה אופיינית" << QString:: number (character.handle (), 16) temp; qint8 לדלג; זרם >> דלג; quint32 lux; זרם >> לוקס; לחות qint8; זרם >> לחות; פוריות qint16; זרם >> פוריות; פולט סיים (m_batteryLevel, 1.0 * טמפ ' / 10, לוקס, לחות, פוריות); }

לאחר חיבור זה, התוסף כבר החל לייצר נתונים בעלי משמעות.

שלב 3: גימור נגיעות

נגיעות
נגיעות

אז זה בעצם עבד עכשיו, עם זאת, נושא אחד עדיין נשאר שם. חיישן FlowerCare היה, בניגוד ל- SensTag של טקסס אינסטרומנטס, מנתק את חיבור ה- Bluetooth לאחר מספר שניות. בהתחשב במקרה השימוש, לא נראה שזו בעיה מכיוון שהיא אמינה למדי בתגובה לניסיונות חיבור. בהתחשב בכך שבדרך כלל צמח אינו שואב ליטר מים בתוך דקות, אלא ימים, לא נראה צורך להישאר מחובר כל הזמן. גם זה יוריד את הסוללה לא מעט. אז החלטתי להוסיף PluginTimer שיחבר מחדש את החיישן כל 20 דקות ויביא ממנו נתונים. אם מסיבה כלשהי החיישן לא היה מגיב לניסיון החיבור, הקוד יפעיל טיימר נוסף המנסה להתחבר מחדש כל דקה מאותה נקודה עד שהוא מצליח להשיג את הנתונים. ואז הוא יחזור להביא נתונים על מרווח של 20 דקות שוב. אם המכשיר לא מצליח להתחבר פעמיים ברציפות (כלומר, לאחר 20 + 1 דקות), הוא יסומן במצב לא מקוון במערכת וניתן להתריע על המשתמש על כך.

void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "מרענן" כתובת (); flowerCare-> refreshData (); } אחרת {qCDebug (dcFlowerCare ()) << כתובת "לא מרעננת" () << "רענון הבא בעוד" << m_refreshMinutes [flowerCare] << "דקות"; } // אם היו לנו שני ניסיונות חיבור שנכשלו או יותר, סמן אותו כמנותק אם (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: core וב- nymea: app. ברגע ששניהם מחוברים, דבר הודעה יופיע אוטומטית. עבור PushBullet הוסף דבר חדש במערכת, תמצא את PushBullet ברשימה שם. הוא יבקש ממך את מפתח ה- API שתקבל בעת ההרשמה ל- PushBullet. ברגע שיש לך דבר של הודעות דחיפה בנימאה, תוכל ליצור כלל.

כמובן שאתה יכול לעשות מה שאתה רוצה … אתה יכול גם להדליק קצת אור על מנת לשקף את ערכי החיישנים, או להשתמש בתוסף מפקד HTTP כדי לפרסם ערכי חיישנים למשל לשרת באינטרנט. אין לי שסתום מים. אשר ניתן לשלוט בו דיגיטלית (עדיין) אבל כמובן, אם יש לך דבר כזה והוא עדיין לא נתמך על ידי nymea, הוספת תוסף עבור זה תהיה די דומה לזה.

שלב 5: סגירת מילים

מילות סגירה
מילות סגירה

התוסף לטיפוח פרחים התקבל במעלה הזרם עד עכשיו ואם יש לך אחד מאלה הוא מוכן לשימוש עם nymea כעת. עם זאת, אני מקווה שמאמר זה עשוי לעניין אם מישהו רוצה להוסיף תמיכה במכשירים אחרים. זה צריך להיות הדרכה כיצד לבנות תוסף משלך עבור nymea.

אם אתה רק רוצה לבנות את ההתקנה הזו בבית שלך, כל מה שאתה צריך הוא חיישן FlowerCare, פטל פטל, תמונת הקהילה של nymea (היא כוללת את התוסף לטיפול בפרחים עד עכשיו) ו- nymea: אפליקציה הזמינה בחנויות האפליקציות. כמו כן, עד כה Monstera Deliciosa שלי שוב שמח וכפי שאולי ראית בצילומי המסך, קיבלתי לעצמי אחד מהחיישנים האלה כדי לעקוב אחר בריאות העץ הלימוני שלי. בשביל זה אני שולח לעצמי הודעת דחיפה בכל פעם שקופא בחוץ כדי שאוכל לעבור את זה בחורף בבטחה.

מוּמלָץ: