Isi kandungan:

FlowerCare dan Nymea untuk Menyelamatkan Tumbuhan Saya: 5 Langkah
FlowerCare dan Nymea untuk Menyelamatkan Tumbuhan Saya: 5 Langkah

Video: FlowerCare dan Nymea untuk Menyelamatkan Tumbuhan Saya: 5 Langkah

Video: FlowerCare dan Nymea untuk Menyelamatkan Tumbuhan Saya: 5 Langkah
Video: COMPLETE GUIDE TO GROWING ADENIUM – THE DESERT ROSE | CARE TIPS, TRICKS, SEEDS, CAUDEX 2024, Julai
Anonim
FlowerCare dan Nymea untuk Menyelamatkan Tumbuhan Saya
FlowerCare dan Nymea untuk Menyelamatkan Tumbuhan Saya

Menjadikan tangan kotor semasa memasang sensor penjagaan kilang ke rumah pintar sumber terbuka saya yang ada. Panduan pembangunan plugin untuk nymea.

Cerita itu

Seperti banyak peretas dan penggodam lain, saya juga menderita dari masalah bahawa penggodaman pada banyak perkara memakan masa saya sehingga kadang-kadang saya lupa untuk menyiram tanaman saya. Setelah Monstera Deliciosa saya sekali lagi menderita tanah kering, saya memutuskan untuk melihat sama ada saya dapat melakukan sesuatu untuk mengingatkan saya ketika dahaga.

Penyelidikan cepat di web menarik perhatian saya kepada Xiaomi FlowerCare, juga dikenal sebagai MiCare atau PlantCare. Ini adalah peranti Bluetooth Tenaga Rendah dan beberapa penyelidikan asas menunjukkan bahawa protokolnya nampaknya cukup mudah difahami. Walaupun Xiaomi nampaknya tidak memberikan spesifikasi umum, terdapat banyak teknik terbalik di internet untuk peranti ini. Oleh itu, saya memutuskan untuk memesan salah satu dari mereka.

Beberapa hari kemudian ia dihantar dan sudah tentu saya mula bermain-main dengannya dengan segera. Secara ringkas saya melihat aplikasi yang disertakan dengannya tetapi seperti yang anda mungkin dapat meneka, menggunakannya dalam persediaan lalai tidak pernah menjadi rancangan saya. Sudah tentu ini perlu disatukan dengan persediaan rumah pintar saya yang ada. Seperti yang dijelaskan di sini, saya menggunakan nymea sebagai penyelesaian rumah pintar saya (Ya, anda juga boleh melihat Monstera di salah satu gambar di sana:)). Malangnya, nymea belum menyokong sensor itu, jadi beberapa IDE dijalankan.

Langkah 1: Mendapatkan Stug Plugin Dimuat

Mendapatkan Stub Plugin Dimuat
Mendapatkan Stub Plugin Dimuat
Mendapatkan Stug Plugin
Mendapatkan Stug Plugin
Mendapatkan Stug Plugin
Mendapatkan Stug Plugin

Jadi perkara pertama yang saya lakukan ialah menyalin plugin Texas Instruments Sensor Tag yang ada, nampaknya cukup serupa dengan yang saya anggap harus berfungsi untuk peranti FlowerCare juga. Setelah penamaan semula perkara asas dalam plugininfo.json dan mengulas sebahagian besar kod pemalam sensortag, saya telah siap memuat stub pemalam baru.

Seperti yang dijangkakan, penemuan itu akan segera menunjukkan sensor dan membolehkan saya menambahkannya ke sistem. Sudah tentu ia tidak akan menghasilkan data yang bermakna pada ketika ini.

Langkah 2: Mencari Data pada Sensor

Mencari Data pada Sensor
Mencari Data pada Sensor

Seperti mana-mana peranti Bluetooth LE, perkara pertama yang ingin anda lakukan ialah mengetahui perkhidmatan yang ditawarkan dan ciri-cirinya. Di suatu tempat di sana data sebenar disembunyikan. Dengan perulangan cetak debug cepat ke atas semua perkhidmatan yang ditemui dan mencetak ciri-ciri mereka, saya berada di titik di mana saya dapat membandingkan maklumat yang saya dapati di internet dengan apa yang sebenarnya dilaporkan oleh peranti.

batal FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice * btDev = static_cast (pengirim ()); qCDebug (dcFlowerCare ()) << "mempunyai layanan perkhidmatan" pengawal () -> createServiceObject (sensorServiceUuid, ini); sambung (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); sambung (m_sensorService, & QLowEnergyService:: characteristicRead, this, & FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> DiscoverDetails (); } batal FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {kembali; } foreach (const QLowEnergyCharacteristic & characteristic, m_sensorService-> Features ()) {qCDebug (dcFlowerCare ()). nospace () <"<< characteristic.uuid (). toString () <<" ("<< karakteristik.handle () << "Name:" << characteristic.name () << "):" << characteristic.value () << "," << characteristic.value (). ToHex (); foreach (const QLowEnergyDescriptor & deskriptor, ciri.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< deskriptor.uuid (). toString () <<" ("<< deskor.handle () <<" Name: "<< deskriptor.name () << "):" << deskor.value () << "," << deskor.value (). toHex (); }}}

Versi firmware dan tahap baterinya mudah. Saya sudah dapat melihat nilai-nilai yang sesuai dicetak dalam percubaan pertama menyenaraikan data. Nilai sensor sebenarnya tersembunyi sedikit lebih mendalam di dalamnya, tetapi menggabungkannya dengan data dari internet segera menunjukkan di mana mencarinya dan terutama bagaimana membacanya.

batal FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & characteristic, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Characteristic read" << QString:: number (karakteristik.handle (), 16) temp; langkau qint8; aliran >> langkau; quint32 lux; aliran >> lux; kelembapan qint8; aliran >> kelembapan; kesuburan qint16; aliran >> kesuburan; emit selesai (m_batteryLevel, 1.0 * temp / 10, lux, kelembapan, kesuburan); }

Menggabungkan ini, plugin sudah mula menghasilkan data yang bermakna.

Langkah 3: Menyentuh Sentuhan

Sentuhan terakhir
Sentuhan terakhir

Jadi pada dasarnya ia berfungsi sekarang, namun satu masalah masih ada. Sensor FlowerCare akan, bertentangan dengan Texas Instruments SensorTag, memutuskan sambungan Bluetooth setelah beberapa saat. Mengingat kes penggunaannya, ini sepertinya tidak menjadi masalah kerana cukup dipercayai dalam menanggapi percubaan sambungan. Memandangkan biasanya tanaman tidak menyedut satu liter air dalam beberapa minit, tetapi beberapa hari, nampaknya tidak diperlukan untuk terus berhubung sepanjang masa. Ini juga akan menghabiskan bateri dengan banyak. Oleh itu, saya memutuskan untuk menambahkan PluginTimer yang akan menyambungkan semula sensor setiap 20 minit dan mengambil data daripadanya. Sekiranya, untuk sebab tertentu, sensor tidak bertindak balas terhadap percubaan sambungan, kod akan memulakan pemasa lain yang cuba menyambung semula setiap minit dari saat itu sehingga berjaya mendapatkan data. Kemudian akan kembali untuk mengambil data selang 20 minit lagi. Sekiranya peranti gagal menyambung dua kali berturut-turut (artinya, setelah 20 + 1 minit), ia akan ditandakan di luar talian dalam sistem dan pengguna dapat diberi amaran mengenainya.

batal DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare * flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << Alamat "Refreshing" (); flowerCare-> refreshData (); } lain {qCDebug (dcFlowerCare ()) << "Tidak menyegarkan" alamat () << "Muat semula seterusnya dalam" << m_refreshMinutes [flowerCare] << "minit"; } // Sekiranya kami mempunyai 2 atau lebih percubaan sambungan yang gagal, tandakan sebagai terputus jika (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Gagal memuat semula untuk" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

Dengan strategi ini nymea kini nampaknya dapat menyampaikan data yang boleh dipercayai dari sensor ini.

Langkah 4: Menggunakannya dalam Konteks Lebih Besar

Menggunakannya dalam Konteks Lebih Besar
Menggunakannya dalam Konteks Lebih Besar
Menggunakannya dalam Konteks Lebih Besar
Menggunakannya dalam Konteks Lebih Besar

Hanya mendapatkan nilai dari sensor tidak begitu berguna, saya juga boleh menggunakan aplikasi asli untuk itu. Sekarang mari kita buat beberapa perkara pintar dengannya.

Nymea menyokong penghantaran pemberitahuan push, baik ke telefon dengan nymea: aplikasi dipasang, atau melalui PushBullet. Oleh itu, perkara yang jelas perlu dilakukan ialah menghantar notifikasi tolak kepada saya setiap kali kelembapan tanah turun di bawah 15%. Agak mudah untuk menetapkannya di aplikasi. Sebagai prasyarat anda memerlukan akaun di nymea: cloud atau di PushBullet. Untuk pemberitahuan push nymea: cloud, cukup untuk mengaktifkan nymea: cloud pada nymea: core dan dalam aplikasi nymea: Sebaik sahaja kedua-duanya disambungkan, perkara pemberitahuan akan muncul secara automatik. Untuk PushBullet menambah perkara baru dalam sistem, anda akan menemui PushBullet dalam senarai di sana. Ia akan meminta kunci API yang anda dapat semasa mendaftar dengan PushBullet. Setelah anda mempunyai maklumat pemberitahuan push di nymea, anda boleh membuat peraturan.

Sudah tentu anda boleh melakukan apa sahaja yang anda mahukan … Juga dapat menyalakan cahaya untuk mencerminkan nilai sensor, atau menggunakan plugin komandan HTTP untuk memasukkan nilai sensor ke pelayan di internet misalnya. Saya tidak mempunyai injap air yang boleh dikendalikan secara digital (belum) tetapi tentu saja, jika anda mempunyai perkara seperti itu dan belum disokong oleh nymea, menambahkan pemalam untuk itu akan lebih serupa daripada ini.

Langkah 5: Kata Penutup

Kata Penutup
Kata Penutup

Plugin penjagaan bunga telah diterima di hulu sekarang dan jika anda mempunyai salah satu daripadanya, sudah siap digunakan dengan nymea sekarang. Namun, saya harap artikel ini mungkin menarik sekiranya seseorang ingin menambahkan sokongan untuk peranti lain. Ini harus menjadi panduan bagaimana membina plugin anda sendiri untuk nymea.

Sekiranya anda hanya ingin membuat persediaan ini di rumah anda, semua yang anda perlukan adalah sensor FlowerCare, Raspberry Pi, gambar komuniti nymea (ia termasuk plugin penjagaan bunga sekarang), dan aplikasi nymea: yang tersedia di kedai aplikasi. Juga, setakat ini Monstera Deliciosa saya kembali gembira dan seperti yang anda lihat di tangkapan skrin, saya juga menjadi sensor kedua untuk mengesan kesihatan pokok limau saya. Untuk itu, saya menghantar pemberitahuan tolak kepada saya setiap kali ia beku di luar supaya saya dapat membawanya ke musim sejuk dengan selamat.

Disyorkan: