Mündəricat:

Bitkilərimi xilas etmək üçün FlowerCare və Nymea: 5 addım
Bitkilərimi xilas etmək üçün FlowerCare və Nymea: 5 addım

Video: Bitkilərimi xilas etmək üçün FlowerCare və Nymea: 5 addım

Video: Bitkilərimi xilas etmək üçün FlowerCare və Nymea: 5 addım
Video: QANDA ŞƏKƏRİ AŞAĞI SALAN 10 SEHRLİ MƏHSUL 2024, Iyul
Anonim
Bitkilərimi xilas etmək üçün FlowerCare və Nymea
Bitkilərimi xilas etmək üçün FlowerCare və Nymea

Bitki baxımı sensorlarını mövcud açıq mənbəli ağıllı evimə bağlamaqda əllərim çirklənir. Nymea üçün plagin inkişafına dair bir yol.

Hekayə

Bir çox digər işbazlar və hakerlər kimi, məsələlərdən də əziyyət çəkirəm ki, şeylərə müdaxilə etmək o qədər çox vaxtımı alır ki, bəzən bitkilərimi sulamağı unuduram. Monstera Deliciosa bir daha quru torpaqdan əziyyət çəkdikdən sonra susadığını xatırlatmaq üçün bu barədə bir şey edə biləcəyimi görməyə qərar verdim.

İnternetdəki sürətli bir araşdırma, diqqətimi MiCare və ya PlantCare olaraq da bilinən Xiaomi FlowerCare -ə yönəltdi. Bir Bluetooth Aşağı Enerji cihazıdır və bəzi əsas araşdırmalar, protokolunun başa düşülməsi olduqca asan olduğunu ortaya qoydu. Xiaomi hər hansı bir açıqlama verməsə də, bu cihaz üçün hələ də internetdə bir qədər tərs mühəndislik var. Buna görə də onlardan birini sifariş etmək qərarına gəldim.

Bir neçə gün sonra çatdırıldı və təbii ki, dərhal onunla oynamağa başladım. Birlikdə gələn proqramı qısaca yoxladım, amma təxmin edə biləcəyiniz kimi, onu standart quruluşunda istifadə etmək mənim planım olmayıb. Əlbəttə ki, mövcud ağıllı ev quruluşumla inteqrasiya olunmalıdır. Burada da təsvir edildiyi kimi nymea'yı ağıllı ev həllim olaraq istifadə edirəm (Bəli, hətta oradakı şəkillərdən birində Monsteranı görə bilərsiniz:)). Təəssüf ki, nymea bu sensoru dəstəkləmədi, buna görə bəzi IDE -lərin işə salınması qaydasındadır.

Addım 1: Plugin Stub Yüklənir

Plugin Stub Yükləndi
Plugin Stub Yükləndi
Plugin Stub Yükləndi
Plugin Stub Yükləndi
Plugin Stub Yükləndi
Plugin Stub Yükləndi

Etdiyim ilk şey, mövcud Texas Instruments Sensor Tag plaginini kopyalamaq idi, FlowerCare cihazı üçün də işləməli olduğunu düşündüyüm qədər oxşar görünürdü. Plugininfo.json -dakı şeylərin əsas adını dəyişdikdən və sensortag plagininin çox hissəsini şərh etdikdən sonra yeni plugin sapını yükləməyə hazır idim.

Gözlənildiyi kimi, kəşf sensoru dərhal göstərəcək və onu sistemə əlavə etməyimə icazə verərdi. Əlbəttə ki, bu anda heç bir mənalı məlumat verməyəcək.

Addım 2: Sensorda Məlumat Tapın

Sensor haqqında məlumat tapmaq
Sensor haqqında məlumat tapmaq

Hər hansı bir Bluetooth LE cihazında olduğu kimi, etmək istədiyiniz ilk şey, təklif etdiyi xidmətlər və onların xüsusiyyətləri haqqında öyrənməkdir. Bir yerdə faktiki məlumatlar gizlidir. Kəşf edilən bütün xidmətlərin üstündən keçən və onların xüsusiyyətlərini çap edən sürətli bir debug çapı ilə, İnternetdə tapdığım məlumatları cihazın həqiqətən bildirdikləri ilə müqayisə edə biləcəyim nöqtədə oldum.

boş FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (sender ()); qCDebug (dcFlowerCare ()) << "xidmət uuids var" nəzarətçi ()-> createServiceObject (sensorServiceUuid, bu); əlaqə (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); əlaqə (m_sensorService, & QLowEnergyService:: characterRead, this, & FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> discoverDetails (); } boş FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & xarakteristikası, m_sensorService-> xüsusiyyətləri ()) {qCDebug (dcFlowerCare ()). boşluq () <"<< xarakterik.uuid (). toString () <<" ("<< xarakterik.handle () << "Ad:" << xarakterik.adı () << "):" << xarakterik.dəyər () << "," << xarakterik.dəyər (). ToHex (); foreach (const QLowEnergyDescriptor və təsvir, xarakterik.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <<" Name: "<< descriptor).name () << "):" << descriptor.value () << "," << descriptor.value (). toHex (); }}}

Firmware versiyası və batareya səviyyəsi asan idi. Məlumatların siyahıya alınmasının bu ilk cəhdində yazılmış dəyərləri artıq görə bilirdim. Həqiqi sensor dəyərləri bir az daha dərinlərdə gizlənir, ancaq onu internetdəki məlumatlar ilə birləşdirərək dərhal haradan tapacağını və xüsusilə necə oxunacağını göstərdi.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & xarakterik, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Xarakterik oxu" << QString:: sayı (xarakteristik.handle (), 16) temp; qint8 atla; axın >> atla; quint32 lüks; axın >> lux; qint8 nəm; axın >> nəm; qint16 məhsuldarlığı; axın >> məhsuldarlıq; bitmiş buraxın (m_batteryLevel, 1.0 * temp / 10, lux, nəm, məhsuldarlıq); }

Bunu bir araya gətirərək, plagin artıq mənalı məlumatlar istehsal etməyə başladı.

Addım 3: Toxunuşları bitirmək

Toxunuşları bitirmək
Toxunuşları bitirmək

Beləliklə, əsasən indi işləyir, ancaq bir məsələ hələ də orada qalıb. FlowerCare sensoru, Texas Instruments SensorTag -dan fərqli olaraq, Bluetooth bağlantısını bir neçə saniyə sonra kəsər. İstifadə vəziyyətini nəzərə alsaq, bu, əlaqə cəhdlərinə cavab verməkdə olduqca etibarlı olduğu üçün bir problem kimi görünmür. Normalda bir bitkinin bir neçə dəqiqə ərzində deyil, bir neçə gün ərzində su çəkdiyini nəzərə alsaq, hər zaman bağlı qalmağımız vacib görünmür. Həm də bu batareyanı çox tükəndirəcək. Beləliklə, sensoru hər 20 dəqiqədən bir bağlayacaq və ondan məlumat alacaq bir PluginTimer əlavə etmək qərarına gəldim. Sensor nədənsə qoşulma cəhdinə cavab verməsə, kod o andan etibarən hər an yenidən əlaqə qurmağa çalışan başqa bir zamanlayıcı işə salacaq və məlumatları əldə edə bilməyəcək. Sonra yenidən 20 dəqiqə aralığında məlumat əldə etmək üçün geri dönəcəkdir. Cihaz ardıcıl iki dəfə bağlana bilmirsə (yəni 20 + 1 dəqiqədən sonra), sistemdə oflayn olaraq qeyd ediləcək və istifadəçiyə bu barədə xəbərdarlıq edilə bilər.

void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Yenilənən" ünvan (); flowerCare-> refreshData (); } başqa {qCDebug (dcFlowerCare ()) << "Yenilənmir" ünvanı () << "Növbəti yeniləmə" << m_refreshMinutes [flowerCare] << "dəqiqə"; } // 2 və ya daha çox uğursuz əlaqə cəhdimiz varsa, (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Yenilənmədi" << (m_refreshMinutes [flowerCare] *) -1) <setStateValue (flowerCareConnectedStateTypeId, yalan); }}}

Bu strategiya ilə nymea indi bu sensordan mükəmməl etibarlı məlumatlar çatdırırdı.

Addım 4: Daha Böyük Kontekstdə İstifadə Edin

Daha Böyük Kontekstdə İstifadə Edilməsi
Daha Böyük Kontekstdə İstifadə Edilməsi
Daha Böyük Kontekstdə İstifadə Edilməsi
Daha Böyük Kontekstdə İstifadə Edilməsi

Sensordan dəyərlər əldə etmək o qədər də faydalı olmasa da, bunun üçün orijinal tətbiqdən də istifadə edə bilərdim. İndi onunla birlikdə bəzi ağıllı şeylər edək.

Nymea, ya nymea quraşdırılmış telefonlara, ya da PushBullet vasitəsilə push bildirişləri göndərməyi dəstəkləyir. Torpağın rütubəti 15%-dən aşağı düşəndə özümə bir neçə təkan bildirişi göndərmək lazımdır. Bunu tətbiqdə qurmaq olduqca asandır. Ön şərt olaraq ya nymea: cloud və ya PushBullet -də bir hesaba ehtiyacınız var. Nymea: bulud əsaslı təkan bildirişləri üçün nymea: core və nymea: app üzərindəki nymea: buludunu aktiv etmək kifayətdir. Hər ikisi də bağlanan kimi avtomatik olaraq bir bildiriş görünəcək. PushBullet sisteminə yeni bir şey əlavə etmək üçün orada siyahıda PushBullet tapacaqsınız. PushBullet ilə qeydiyyatdan keçərkən əldə etdiyiniz API açarını istəyəcək. Nymea'da təkan bildirişinə sahib olduqdan sonra bir qayda yarada bilərsiniz.

Əlbəttə ki, istədiyiniz hər şeyi edə bilərsiniz … Sensor dəyərlərini əks etdirmək üçün bəzi işıqları yandıra bilərsiniz və ya məsələn HTTP komandiri plaginindən istifadə edərək İnternetdəki bir serverə sensor dəyərlərini göndərə bilərsiniz. Su klapanım yoxdur. rəqəmsal olaraq (hələ) idarə oluna bilər, amma əlbəttə ki, belə bir şeyiniz varsa və hələ nymea tərəfindən dəstəklənmirsə, bunun üçün bir plugin əlavə etmək bundan daha çox oxşardır.

Addım 5: Sözləri bağlayın

Bağlayan Sözlər
Bağlayan Sözlər

Flowercare plagini indiyə qədər yuxarıya doğru qəbul edildi və onlardan biriniz varsa, indi nymea ilə istifadə etməyə hazırdır. Ancaq ümid edirəm ki, kimsə digər cihazlara dəstək əlavə etmək istəsə bu məqalə maraq doğuracaq. Nymea üçün öz plagininizi necə quracağınıza dair bir yol olmalıdır.

Yalnız bu qurğunu evinizdə qurmaq istəyirsinizsə, sizə lazım olan tək şey FlowerCare sensoru, bir Raspberry Pi, nymea icma görüntüsü (indiyə qədər çiçək baxımı plagini daxildir) və nymea: tətbiq mağazalarında mövcud olan tətbiqdir. Ayrıca, bu günə qədər Monstera Deliciosa yenidən xoşbəxtdir və ekran görüntülərində də gördüyünüz kimi, limon ağacımın sağlamlığını izləmək üçün özüm də bu sensorlardan ikincisini aldım. Bunun üçün xaricdə donanda özümə təkan bildirişi göndərirəm ki, qışdan təhlükəsiz keçim.

Tövsiyə: