Daftar Isi:

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

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

Video: FlowerCare dan Nymea untuk Menyelamatkan Tanaman Saya: 5 Langkah
Video: Cara Menyelamatkan Tanaman yang Layu Hampir Mati 2024, Juli
Anonim
FlowerCare dan Nymea untuk Menyelamatkan Tanaman Saya
FlowerCare dan Nymea untuk Menyelamatkan Tanaman Saya

Menjadi kotor saat memasang sensor perawatan tanaman ke rumah pintar open source saya yang ada. Panduan tentang pengembangan plugin untuk nymea.

Cerita

Seperti banyak pengotak dan peretas lainnya, saya juga menderita karena masalah meretas berbagai hal menghabiskan begitu banyak waktu saya sehingga saya kadang-kadang lupa menyirami tanaman saya. Setelah Monstera Deliciosa saya sekali lagi menderita tanah kering, saya memutuskan untuk melihat apakah saya dapat melakukan sesuatu untuk mengingatkan saya ketika haus.

Sebuah penelitian cepat di web membawa perhatian saya ke Xiaomi FlowerCare, juga dikenal sebagai MiCare atau PlantCare. Ini adalah perangkat Bluetooth Low Energy dan beberapa penelitian dasar mengungkapkan bahwa protokolnya tampaknya cukup mudah dipahami. Meskipun Xiaomi tampaknya tidak memberikan spesifikasi publik apa pun, ada sedikit rekayasa balik di internet untuk perangkat ini. Jadi saya memutuskan untuk memesan salah satunya.

Beberapa hari kemudian itu dikirim dan tentu saja saya mulai bermain-main dengannya segera. Saya secara singkat memeriksa aplikasi yang menyertainya tetapi seperti yang mungkin dapat Anda tebak, menggunakannya dalam pengaturan default tidak pernah menjadi rencana saya. Tentu saja ini perlu diintegrasikan dengan pengaturan rumah pintar saya yang sudah ada. Seperti yang juga dijelaskan di sini, saya menggunakan nymea sebagai solusi rumah pintar saya (Ya, Anda bahkan dapat melihat Monstera di salah satu gambar di sana:)). Sayangnya, nymea belum mendukung sensor itu, jadi jalankan beberapa IDE secara berurutan.

Langkah 1: Mendapatkan Plugin Stub Dimuat

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

Jadi hal pertama yang saya lakukan adalah menyalin plugin Texas Instruments Sensor Tag yang ada, sepertinya cukup mirip dengan apa yang saya asumsikan juga berfungsi untuk perangkat FlowerCare. Setelah penggantian nama dasar dari hal-hal di plugininfo.json dan mengomentari sebagian besar kode plugin sensortag, saya siap untuk memuat rintisan plugin baru.

Seperti yang diharapkan, penemuan itu akan segera menunjukkan sensor dan memungkinkan saya untuk menambahkannya ke sistem. Tentu saja itu tidak akan menghasilkan data yang berarti pada saat ini.

Langkah 2: Menemukan Data pada Sensor

Menemukan Data pada Sensor
Menemukan Data pada Sensor

Seperti halnya perangkat Bluetooth LE, hal pertama yang ingin Anda lakukan adalah mencari tahu tentang layanan yang ditawarkan dan karakteristiknya. Di suatu tempat di sana, data sebenarnya disembunyikan. Dengan pencetakan debug cepat yang mengulang semua layanan yang ditemukan dan mencetak karakteristiknya, saya berada pada titik di mana saya dapat membandingkan informasi yang saya temukan di internet dengan apa yang sebenarnya dilaporkan perangkat.

void FlowerCare::onServiceDiscoveryFinished(){ BluetoothLowEnergyDevice *btDev = static_cast(sender()); qCDebug(dcFlowerCare()) << "memiliki layanan uuids" controller()->createServiceObject(sensorServiceUuid, this); connect(m_sensorService, &QLowEnergyService::stateChanged, this, &FlowerCare::onSensorServiceStateChanged); connect(m_sensorService, &QLowEnergyService::characteristicRead, this, &FlowerCare::onSensorServiceCharacteristicRead); m_sensorService->discoverDetails(); } void FlowerCare::onSensorServiceStateChanged(const QLowEnergyService::ServiceSate &status) { if (status != QLowEnergyService::ServiceDiscovered) { return; } foreach (const QLowEnergyCharacteristic &karakteristik, m_sensorService->characteristics()) { qCDebug(dcFlowerCare()).nospace() < " << karakteristik.uuid().toString() << " (" << karakteristik.handle() << " Nama: " << karakteristik.nama() << "): " << karakteristik.nilai() << ", " << karakteristik.nilai().toHex(); foreach (const QLowEnergyDescriptor &descriptor, karakteristik.descriptors()) { qCDebug(dcFlowerCare()).nospace() < " << descriptor.uuid().toString() << " (" << descriptor.handle() << " Nama: " << descriptor.name() << "): " << descriptor.value() << ", " << descriptor.value().toHex(); } } }

Versi firmware dan tingkat baterai mudah. Saya sudah bisa melihat nilai yang sesuai dicetak dalam upaya pertama untuk mendaftar data. Nilai sensor yang sebenarnya tersembunyi sedikit lebih dalam di sana, tetapi menggabungkannya dengan data dari internet segera menunjukkan di mana menemukannya dan terutama cara membacanya.

void FlowerCare::onSensorServiceCharacteristicRead(const QLowEnergyCharacteristic &characteristic, const QByteArray &value){ qCDebug(dcFlowerCare()) << "Karakteristik dibaca" << QString::number(characteristic.handle(), 16) temp; qint8 lewati; aliran >> lewati; quint32 lux; aliran >> luks; qint8 kelembaban; aliran >> kelembaban; qint16 kesuburan; aliran >> kesuburan; memancarkan selesai (m_batteryLevel, 1.0 * temp / 10, lux, kelembaban, kesuburan); }

Menyatukan ini, plugin sudah mulai menghasilkan data yang berarti.

Langkah 3: Sentuhan Akhir

Sentuhan Akhir
Sentuhan Akhir

Jadi pada dasarnya berhasil sekarang, namun, satu masalah masih tersisa di sana. Sensor FlowerCare akan, berbeda dengan Texas Instruments SensorTag, memutuskan koneksi Bluetooth setelah beberapa detik. Mempertimbangkan kasus penggunaan, ini tampaknya tidak menjadi masalah karena cukup andal dalam menanggapi upaya koneksi. Mengingat bahwa biasanya sebuah pabrik tidak menyedot satu liter air dalam beberapa menit, melainkan berhari-hari, tampaknya tidak perlu untuk tetap terhubung sepanjang waktu. Juga ini akan menguras baterai cukup banyak. Jadi saya memutuskan untuk menambahkan PluginTimer yang akan menghubungkan kembali sensor setiap 20 menit dan mengambil data darinya. Jika, karena alasan tertentu, sensor tidak merespons upaya koneksi, kode akan memulai pengatur waktu lain yang mencoba menyambung kembali setiap menit sejak saat itu hingga berhasil mendapatkan data. Kemudian akan kembali untuk mengambil data pada interval 20 menit lagi. Jika perangkat gagal terhubung dua kali berturut-turut (artinya, setelah 20 + 1 menit), itu akan ditandai offline di sistem dan pengguna dapat diperingatkan tentang hal itu.

void DevicePluginFlowercare::onPluginTimer(){ foreach (FlowerCare *flowerCare, m_list) { if (--m_refreshMinutes[flowerCare] <= 0) { qCDebug(dcFlowerCare()) << "Refreshing" address(); flowerCare->refreshData(); } else { qCDebug(dcFlowerCare()) << "Tidak menyegarkan" alamat() << " Penyegaran berikutnya dalam" << m_refreshMinutes[flowerCare] << "menit"; } // Jika kita memiliki 2 atau lebih upaya koneksi yang gagal, tandai sebagai terputus if (m_refreshMinutes[flowerCare] < -2) { qCDebug(dcFlowerCare()) << "Gagal menyegarkan untuk"<< (m_refreshMinutes[flowerCare] * -1) <setStateValue(flowerCareConnectedStateTypeId, false); } } }

Dengan strategi ini, nymea sekarang tampaknya memberikan data yang sangat andal dari sensor ini.

Langkah 4: Menggunakannya dalam Konteks yang Lebih Besar

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

Hanya mendapatkan nilai dari sensor tidak terlalu berguna, saya juga bisa menggunakan aplikasi asli untuk itu. Sekarang mari kita lakukan beberapa hal cerdas dengannya.

Nymea mendukung pengiriman pemberitahuan push, baik ke ponsel dengan nymea:app terinstal, atau melalui PushBullet. Jadi hal yang jelas untuk dilakukan adalah mengirimi diri saya sendiri beberapa pemberitahuan push setiap kali kelembaban tanah turun di bawah 15%. Agak mudah untuk mengaturnya di aplikasi. Sebagai prasyarat, Anda memerlukan akun di nymea:cloud atau di PushBullet. Untuk pemberitahuan push berbasis nymea:cloud cukup dengan mengaktifkan nymea:cloud di nymea:core dan di nymea:app. Segera setelah keduanya terhubung, sebuah notifikasi akan muncul secara otomatis. Untuk PushBullet menambahkan hal baru di sistem, Anda akan menemukan PushBullet dalam daftar di sana. Ini akan menanyakan kunci API yang Anda dapatkan saat mendaftar dengan PushBullet. Setelah Anda memiliki pemberitahuan push di nymea, Anda dapat membuat aturan.

Tentu saja Anda dapat melakukan apa pun yang Anda inginkan… Juga dapat menyalakan lampu untuk memantulkan nilai sensor, atau menggunakan plugin komandan HTTP untuk mengirim nilai sensor ke server di internet misalnya. Saya tidak memiliki katup air yang dapat dikontrol secara digital (belum) tetapi tentu saja, jika Anda memiliki hal seperti itu dan belum didukung oleh nymea, menambahkan plugin untuk itu akan lebih mirip daripada ini.

Langkah 5: Kata Penutup

Kata Penutup
Kata Penutup

Plugin flowercare telah diterima di upstream sekarang dan jika Anda memiliki salah satunya, plugin tersebut siap digunakan dengan nymea sekarang. Namun, saya harap artikel ini mungkin menarik jika seseorang ingin menambahkan dukungan untuk perangkat lain. Ini harus menjadi panduan tentang cara membuat plugin Anda sendiri untuk nymea.

Jika Anda hanya ingin membuat pengaturan ini di rumah Anda, yang Anda perlukan hanyalah sensor FlowerCare, Raspberry Pi, gambar komunitas nymea (sekarang sudah termasuk plugin perawatan bunga), dan nymea:app yang tersedia di toko aplikasi. Juga, sejauh ini Monstera Deliciosa saya bahagia lagi dan seperti yang mungkin Anda lihat di tangkapan layar, saya mendapatkan sensor kedua untuk melacak kesehatan pohon lemon saya juga. Untuk itu saya mengirim sendiri pemberitahuan push setiap kali di luar sangat dingin sehingga saya dapat membawanya melewati musim dingin dengan aman.

Direkomendasikan: