Mundarija:

O'simliklarni qutqarish uchun FlowerCare va Nymea: 5 qadam
O'simliklarni qutqarish uchun FlowerCare va Nymea: 5 qadam

Video: O'simliklarni qutqarish uchun FlowerCare va Nymea: 5 qadam

Video: O'simliklarni qutqarish uchun FlowerCare va Nymea: 5 qadam
Video: O'simlik vegetativ organlarining metamorfozlari 2024, Noyabr
Anonim
O'simliklarni qutqarish uchun FlowerCare va Nymea
O'simliklarni qutqarish uchun FlowerCare va Nymea

Ochiq manbali aqlli uyimga o'simliklarni parvarish qilish datchiklarini ulashda qo'llar iflos. Nymea uchun plaginlarni ishlab chiqish bo'yicha ko'rsatma.

Hikoya

Boshqa ko'plab xakerlar va xakerlar singari, men ham muammolardan aziyat chekmoqdaman, chunki narsalarni buzish ko'p vaqtimni oladi, men vaqti -vaqti bilan o'simliklarimni sug'orishni unutaman. Monstera Deliciosa yana quruq tuproqdan aziyat chekkanidan so'ng, men chanqaganimda eslatish uchun bu haqda biror narsa qila olamanmi, deb qaror qildim.

Internetdagi tezkor tadqiqotlar mening e'tiborimni MiCare yoki PlantCare deb nomlanuvchi Xiaomi FlowerCare -ga qaratdi. Bu Bluetooth past energiyali qurilma va ba'zi asosiy tadqiqotlar shuni ko'rsatdiki, uning protokolini tushunish juda oson. Xiaomi hech qanday tafsilotlarni taqdim qilmasa -da, Internetda bu qurilma uchun teskari muhandislik hali mavjud. Shuning uchun men ulardan biriga buyurtma berishga qaror qildim.

Bir necha kundan keyin u etkazib berildi va, albatta, men darhol u bilan o'ynay boshladim. Men u bilan birga kelgan ilovani qisqacha ko'rib chiqdim, lekin siz taxmin qilganingizdek, uni standart sozlamalarda ishlatish hech qachon mening rejam bo'lmagan. Albatta, bu mening mavjud aqlli uy sozlamalari bilan birlashtirilgan bo'lishi kerak, bu erda tasvirlanganidek, men nymea -ni aqlli uyim sifatida ishlataman (Ha, siz hatto Monsterani u erdagi rasmlardan birida ko'rishingiz mumkin:)). Afsuski, nymea bu sensorni qo'llab -quvvatlamadi, shuning uchun ba'zi IDE -ni yoqish tartibda edi.

1 -qadam: Plugin stubini yuklash

Plugin stub yuklandi
Plugin stub yuklandi
Yuklangan plagin stubini olish
Yuklangan plagin stubini olish
Plugin stub yuklandi
Plugin stub yuklandi

Shunday qilib, men qilgan birinchi narsa, Texas Instruments Sensor Tag plaginini nusxalash edi, bu FlowerCare qurilmasida ham ishlashi kerak deb o'ylaganimga o'xshardi. Plugininfo.json -dagi narsalarning asosiy nomini o'zgartirgandan va sensortag plagin kodining ko'p qismini sharhlaganimdan so'ng, men yangi plagin dastasini yuklashga tayyor edim.

Kutilganidek, kashfiyot sensorni darhol ko'rsatadi va uni tizimga qo'shishga imkon beradi. Albatta, bu erda hech qanday mazmunli ma'lumotlar bo'lmaydi.

2 -qadam: Sensorda ma'lumotlarni qidirish

Sensor haqida ma'lumot qidirish
Sensor haqida ma'lumot qidirish

Har qanday Bluetooth LE qurilmasida bo'lgani kabi, birinchi navbatda siz taklif qilayotgan xizmatlar va ularning xususiyatlari haqida bilib olishingiz kerak. Biror joyda haqiqiy ma'lumotlar yashiringan. Qisqa vaqt ichida tuzatishni bosib, topilgan barcha xizmatlarni aylanib o'tib, ularning xususiyatlarini bosib chiqarganimda, men Internetda topilgan ma'lumotni, qurilma haqiqatan ham xabar bergan narsalar bilan solishtirishim mumkin edi.

void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (sender ()); qCDebug (dcFlowerCare ()) << "xizmat uuidlari bor" tekshiruvchi ()-> createServiceObject (sensorServiceUuid, bu); ulanish (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); ulanish (m_sensorService, & QLowEnergyService:: characterRead, this, & FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> DiscoverDetails (); } bo'sh FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & xarakteristikasi, m_sensorService-> xususiyatlari ()) {qCDebug (dcFlowerCare ()). nospace () <"<< xarakter.uuid (). toString () <<" ("<< xarakterli.handle () << "Ism:" << xarakterli.name () << "):" << xarakterli.value () << "," << xarakterli.value (). ToHex (); foreach (const QLowEnergyDescriptor va tavsiflovchi, xarakteristikasi).descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <<" Name: "<< descriptor).name () << "):" << descriptor.value () << "," << descriptor.value (). toHex (); }}}

Dasturiy ta'minot versiyasi va batareya quvvati oson edi. Ma'lumotlarni ro'yxatga olishning birinchi urinishida bosilgan qiymatlarni men allaqachon ko'rishim mumkin edi. Haqiqiy sensor qiymatlari u erda biroz chuqurroq yashiringan, lekin uni internet ma'lumotlari bilan birlashtirib, uni qaerdan topish kerakligini va ayniqsa uni qanday o'qishni ko'rsatdi.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & xarakteristikasi, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Xarakterli o'qish" << QString:: raqam (xarakteristik.handle (), 16) temp; qint8 o'tish; oqim >> o'tish; kvint32 lyuks; oqim >> lyuks; qint8 namligi; oqim >> namlik; qint16 unumdorligi; oqim >> unumdorlik; tugatish (m_batteryLevel, 1.0 * temp / 10, lyuks, namlik, unumdorlik); }

Buni birlashtirib, plagin allaqachon mazmunli ma'lumotlarni ishlab chiqara boshladi.

3 -qadam: teginishni tugatish

Tugatish tegishi
Tugatish tegishi

Shunday qilib, u hozirda ishladi, biroq u erda bitta masala qoldi. FlowerCare sensori, Texas Instruments SensorTag -dan farqli o'laroq, Bluetooth ulanishini bir necha soniyadan keyin uzib qo'yadi. Foydalanish holatini hisobga oladigan bo'lsak, bu muammo emas, chunki u ulanish urinishlariga javob berishda juda ishonchli. Odatda, o'simlik bir necha daqiqa ichida emas, balki kunlar davomida bir litr suvni so'rib oladi, shuning uchun doimo aloqada bo'lish shart emasdek tuyuladi. Bundan tashqari, bu batareyani juda zaryadsizlantiradi. Men har 20 daqiqada sensorni qayta ulaydigan va undan ma'lumotlarni oladigan PluginTimer qo'shishga qaror qildim. Agar biron sababga ko'ra, sensor ulanish urinishiga javob bermasa, kod boshqa taymerni ishga tushiradi, u shu daqiqadan boshlab ma'lumotlarni olishga muvaffaq bo'lguncha qayta ulanishga harakat qiladi. Keyin yana 20 daqiqa oralig'idagi ma'lumotlarni qaytarish uchun qaytadi. Agar qurilma ketma -ket ikki marta ulanmasa (ya'ni 20 + 1 daqiqadan so'ng), u tizimda oflayn rejimda belgilanadi va foydalanuvchiga bu haqda ogohlantirilishi mumkin.

void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Yangilash" manzili (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << "Yangilanmayapti" manzili () << "Keyingi yangilanish" << m_refreshMinutes [flowerCare] << "daqiqa" da; } // Agar bizda 2 yoki undan ortiq ulanish urinishlari muvaffaqiyatsiz bo'lsa, uni uzilgan deb belgilang, agar (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Yangilanmadi" << (m_refreshMinutes [flowerCare] *) -1) <setStateValue (flowerCareConnectedStateTypeId, noto'g'ri); }}}

Bu strategiya yordamida nymea endi sensordan mukammal ishonchli ma'lumotlarni etkazib berayotganday tuyuldi.

4 -qadam: undan katta kontekstda foydalanish

Kattaroq kontekstda undan foydalanish
Kattaroq kontekstda undan foydalanish
Kattaroq kontekstda undan foydalanish
Kattaroq kontekstda undan foydalanish

Sensordan qiymatlarni olish unchalik foydali emas, lekin men buning uchun original ilovadan ham foydalanishim mumkin edi. Endi u bilan aqlli ishlarni qilaylik.

Nymea push -bildirishnomalarni nymea: ilovasi o'rnatilgan telefonlarga yoki PushBullet orqali yuborishni qo'llab -quvvatlaydi. Tuproq namligi 15%dan pastga tushganda, men o'zimga bir nechta ogohlantirishlarni yuborishim kerak. Buni ilovada sozlash juda oson. Old shart sifatida sizga nymea: cloud yoki PushBullet -da hisob kerak bo'ladi. Nymea: bulutga asoslangan push -bildirishnomalar uchun nymea: core va nymea: app -da bulutni yoqish kifoya. Ikkalasi ham ulangandan so'ng, avtomatik ravishda xabar keladi. PushBullet -ga tizimga yangi narsa qo'shish uchun siz o'sha ro'yxatda PushBullet -ni topasiz. U sizdan PushBullet -da ro'yxatdan o'tishda olgan API kalitini so'raydi. Nymea -da push xabarnomasi bo'lsa, siz qoida yaratishingiz mumkin.

Albatta, siz xohlagan narsani qilishingiz mumkin … Sensor qiymatlarini aks ettirish uchun chiroqni yoqishingiz mumkin, yoki HTTP qo'mondoni plaginidan foydalanib, masalan, Internetdagi serverga sensorlar qiymatini yuborishingiz mumkin. bu raqamli (hali) boshqarilishi mumkin, lekin, albatta, agar sizda bunday narsa bo'lsa va u hali nymea tomonidan qo'llab -quvvatlanmasa, unga plagin qo'shish bunga o'xshaydi.

5 -qadam: Yakuniy so'zlar

Yakunlovchi so'zlar
Yakunlovchi so'zlar

Flowercare plagini hozirgacha yuqori oqimda qabul qilingan va agar sizda ulardan biri bo'lsa, u hozir nymea bilan ishlatishga tayyor. Ammo, agar kimdir boshqa qurilmalarni qo'llab -quvvatlashni xohlasa, ushbu maqola qiziq bo'lishi mumkin deb umid qilaman. Bu nymea uchun o'z plaginini qanday yaratish haqida ko'rsatma bo'lishi kerak.

Agar siz ushbu sozlamani o'z uyingizda qurishni xohlasangiz, sizga FlowerCare sensori, Raspberry Pi, nymea hamjamiyati tasviri (u hozirgacha gullarni parvarish qilish uchun plaginni o'z ichiga oladi) va nymea: ilova do'konlarida mavjud. Bundan tashqari, hozircha mening Monstera Deliciosa yana baxtli va siz ekran tasvirlarida ko'rganingizdek, men ham o'zimning limon daraxtimning sog'lig'ini kuzatib turadigan sensorlardan ikkinchisini oldim. Buning uchun men tashqarida muzlab qolsa, o'zimga ogohlantirish yuboraman, shuning uchun uni qishdan xavfsiz o'tkazaman.

Tavsiya: