İçindekiler:

Bitkilerimi Kurtarmak için FlowerCare ve Nymea: 5 Adım
Bitkilerimi Kurtarmak için FlowerCare ve Nymea: 5 Adım

Video: Bitkilerimi Kurtarmak için FlowerCare ve Nymea: 5 Adım

Video: Bitkilerimi Kurtarmak için FlowerCare ve Nymea: 5 Adım
Video: Bitkiler Suda Kaç Günde Köklenir? | Suda Çoğaltma Önerileri 2024, Temmuz
Anonim
FlowerCare ve Nymea Bitkilerimi Kurtaracak
FlowerCare ve Nymea Bitkilerimi Kurtaracak

Mevcut açık kaynaklı akıllı evime bitki bakım sensörlerini bağlarken eller kirleniyor. Nymea için eklenti geliştirmeyle ilgili bir adım.

Hikaye

Diğer pek çok tamirci ve bilgisayar korsanı gibi ben de bir şeyleri hacklemenin o kadar çok zamanımı almasından ve ara sıra bitkilerimi sulamayı unuttuğumdan muzdaribim. Monstera Deliciosa'm bir kez daha kuru topraktan muzdarip olduktan sonra, susadığında bana hatırlatacak bir şeyler yapıp yapamayacağımı görmeye karar verdim.

İnternette hızlı bir araştırma, dikkatimi MiCare veya PlantCare olarak da bilinen Xiaomi FlowerCare'e getirdi. Bu bir Bluetooth Düşük Enerji cihazıdır ve bazı temel araştırmalar, protokolünün anlaşılmasının oldukça kolay göründüğünü ortaya koymuştur. Xiaomi, herhangi bir genel özellik sağlamıyor gibi görünse de, bu cihaz için internette henüz biraz tersine mühendislik yapıldı. Bu yüzden onlardan birini sipariş etmeye karar verdim.

Birkaç gün sonra teslim edildi ve tabii ki hemen onunla oynamaya başladım. Onunla birlikte gelen uygulamayı kısaca kontrol ettim ama muhtemelen tahmin edebileceğiniz gibi, varsayılan kurulumunda kullanmak asla benim planım değildi. Elbette bunun mevcut akıllı ev kurulumum ile entegre olması gerekiyor. Burada da açıklandığı gibi akıllı ev çözümüm olarak nymea kullanıyorum (Evet, oradaki resimlerden birinde Monstera'yı bile görebilirsiniz:)). Ne yazık ki, nymea henüz bu sensörü desteklemedi, bu yüzden bazı IDE'leri ateşlemek gerekiyordu.

Adım 1: Bir Eklenti Saplamasının Yüklenmesi

Bir Eklenti Saplamasının Yüklenmesi
Bir Eklenti Saplamasının Yüklenmesi
Bir Eklenti Saplamasının Yüklenmesi
Bir Eklenti Saplamasının Yüklenmesi
Bir Eklenti Saplamasının Yüklenmesi
Bir Eklenti Saplamasının Yüklenmesi

Yaptığım ilk şey, mevcut Texas Instruments Sensor Tag eklentisini kopyalamak oldu, FlowerCare cihazı için de çalışması gerektiğini düşündüğüm şeye yeterince benziyordu. Plugininfo.json'daki şeyleri temel olarak yeniden adlandırdıktan ve sensör etiketi eklentisinin kodunun çoğunu yorumladıktan sonra, yeni eklenti saplamasını yüklemeye hazırdım.

Beklendiği gibi, keşif zaten sensörü hemen gösterecek ve onu sisteme eklememe izin verecekti. Elbette bu noktada anlamlı bir veri üretmeyecektir.

Adım 2: Sensörde Veri Bulma

Sensörde Veri Bulma
Sensörde Veri Bulma

Herhangi bir Bluetooth LE cihazında olduğu gibi, yapmak istediğiniz ilk şey sunduğu hizmetler ve özellikleri hakkında bilgi edinmektir. Orada bir yerde gerçek veriler gizlidir. Keşfedilen tüm hizmetler üzerinde hızlı bir hata ayıklama yazdırma döngüsü ile ve özelliklerini yazdırarak, internette bulduğum bilgileri cihazın gerçekte bildirdiği bilgilerle karşılaştırabileceğim bir noktadaydım.

void FlowerCare::onServiceDiscoveryFinished(){ BluetoothLowEnergyDevice *btDev = static_cast(sender()); qCDebug(dcFlowerCare()) << "hizmet kullanıcı arabirimlerine sahip" controller()->createServiceObject(sensorServiceUuid, bu); 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 &state) { if (state != QLowEnergyService::ServiceDiscovered) { return; } foreach (const QLowEnergyCharacteristic &characteristic, m_sensorService->characteristics()) { qCDebug(dcFlowerCare()).nospace() < " << karakteristik.uuid().toString() << " (" << karakteristik.handle() << " Ad: " << karakteristik.ad() << "): " << karakteristik.değer() << ", " << karakteristik.değer().toHex(); foreach (const QLowEnergyDescriptor &tanımlayıcı, karakteristik.descriptors()) { qCDebug(dcFlowerCare()).nospace() < " << descriptor.uuid().toString() << " (" << descriptor.handle() << " Ad: " << tanımlayıcı.name() << "): " << descriptor.value() << ", " << descriptor.value().toHex(); } } }

Ürün yazılımı sürümü ve pil seviyesi kolaydı. Verileri listelemeye yönelik bu ilk denemede yazdırılan ilgili değerleri zaten görebiliyordum. Gerçek sensör değerleri orada biraz daha derine gizlenmiş, ancak internetten gelen verilerle birleştirildiğinde, nerede bulunacağını ve özellikle nasıl okunacağını hemen gösterdi.

void FlowerCare::onSensorServiceCharacteristicRead(const QLowEnergyCharacteristic &characteristic, const QByteArray &value){ qCDebug(dcFlowerCare()) << "Karakteristik okuma" << QString::number(characteristic.handle(), 16) temp; qint8 atlama; akış >> atla; quint32 lüks; akış >> lüks; qint8 nem; akış >> nem; qint16 doğurganlık; akış >> doğurganlık; bitmiş yay (m_batteryLevel, 1.0 * temp / 10, lüks, nem, doğurganlık); }

Bunu bir araya getiren eklenti, anlamlı veriler üretmeye başladı bile.

Adım 3: Son Dokunuşlar

Son Dokunuşlar
Son Dokunuşlar

Yani temelde şimdi çalıştı, ancak hala orada bir sorun kaldı. FlowerCare sensörü, Texas Instruments SensorTag'in aksine, Bluetooth bağlantısını birkaç saniye sonra kesecektir. Yine de kullanım durumu göz önüne alındığında, bağlantı girişimlerine yanıt vermede oldukça güvenilir olduğu için bu bir sorun gibi görünmüyor. Normalde bir bitkinin bir litre suyu dakikalar içinde değil, günler içinde emdiği düşünülürse, her zaman bağlantıda kalmak gerekli görünmüyor. Ayrıca bu, pili oldukça fazla tüketecektir. Bu yüzden, sensörü her 20 dakikada bir yeniden bağlayacak ve ondan veri alacak bir PluginTimer eklemeye karar verdim. Herhangi bir nedenle sensör bağlantı girişimine yanıt vermezse, kod, veriyi almayı başarana kadar o noktadan itibaren her dakika yeniden bağlanmaya çalışan başka bir zamanlayıcı başlatır. Sonra tekrar 20 dakikalık aralıklarla veri almaya geri dönecekti. Cihaz arka arkaya iki kez bağlanmazsa (yani 20 + 1 dakika sonra) sistemde çevrimdışı olarak işaretlenir ve kullanıcı bu konuda uyarılabilir.

void DevicePluginFlowercare::onPluginTimer(){ foreach (FlowerCare *flowerCare, m_list) { if (--m_refreshMinutes[flowerCare] <= 0) { qCDebug(dcFlowerCare()) << "Tazeleme" address(); flowerCare->refreshData(); } else { qCDebug(dcFlowerCare()) << "Yenilenmiyor" address() << " Sonraki yenileme zamanı" << m_refreshMinutes[flowerCare] << "dakika"; } // 2 veya daha fazla başarısız bağlantı denememiz varsa, bunu bağlantı kesildi olarak işaretleyin if (m_refreshMinutes[flowerCare] < -2) { qCDebug(dcFlowerCare()) << "Yenileme başarısız oldu"<< (m_refreshMinutes[flowerCare] * -1) <setStateValue(flowerCareConnectedStateTypeId, false); } } }

Bu strateji ile nymea artık bu sensörden tamamen güvenilir veriler sağlıyor gibi görünüyordu.

Adım 4: Daha Büyük Bağlamda Kullanmak

Daha Büyük Bağlamda Kullanmak
Daha Büyük Bağlamda Kullanmak
Daha Büyük Bağlamda Kullanmak
Daha Büyük Bağlamda Kullanmak

Sadece sensörden değer almak o kadar da kullanışlı değil, bunun için orijinal uygulamayı da kullanabilirdim. Şimdi onunla bazı akıllı şeyler yapalım.

Nymea, nymea:app yüklü telefonlara veya PushBullet aracılığıyla anında iletme bildirimleri göndermeyi destekler. Bu yüzden yapılacak bariz şey, toprak nemi %15'in altına düştüğünde kendime bazı anlık bildirimler göndermek. Bunu uygulamada ayarlamak oldukça kolaydır. Ön koşul olarak, nymea:cloud'da veya PushBullet'te bir hesaba ihtiyacınız var. nymea:cloud tabanlı push bildirimleri için nymea:core ve nymea:app içinde nymea:cloud'u etkinleştirmek yeterlidir. Her ikisi de bağlanır bağlanmaz, otomatik olarak bir bildirim görünecektir. PushBullet için sisteme yeni bir şey ekleyin, oradaki listede PushBullet'i bulacaksınız. PushBullet'e kaydolurken aldığınız API anahtarını isteyecektir. Nymea'da bir anlık bildirim şeyiniz olduğunda, bir kural oluşturabilirsiniz.

Tabii ki başka ne istersen yapabilirsin… Ayrıca sensör değerlerini yansıtmak için biraz ışık açabilir veya örneğin internetteki bir sunucuya sensör değerlerini göndermek için HTTP komutanı eklentisini kullanabilirim. Su vanam yok bu da dijital olarak kontrol edilebilir (henüz) ama tabii ki böyle bir şeye sahipseniz ve henüz nymea tarafından desteklenmiyorsa, bunun için bir eklenti eklemek buna benzer olacaktır.

Adım 5: Sözleri Kapatmak

Kapanış Sözleri
Kapanış Sözleri

Flowercare eklentisi şimdiye kadar kabul edildi ve eğer bunlardan birine sahipseniz, şimdi nymea ile kullanılmaya hazır. Ancak, birisi diğer cihazlar için destek eklemek isterse, bu makalenin ilginizi çekebileceğini umuyorum. Nymea için kendi eklentinizi nasıl oluşturacağınıza dair bir adım olmalıdır.

Bu kurulumu sadece evinizde kurmak istiyorsanız, ihtiyacınız olan tek şey FlowerCare sensörü, bir Raspberry Pi, nymea topluluk görüntüsü (şimdiye kadar çiçek bakımı eklentisini içerir) ve uygulama mağazalarında bulunan nymea:app. Ayrıca, şu ana kadar Monstera Deliciosa'm yine mutlu ve ekran görüntülerinde de görmüş olabileceğiniz gibi, limon ağacımın sağlığını izlemek için kendime bu sensörlerden ikincisini aldım. Bunun için dışarısı ne zaman donsa kendi kendime anlık bildirim gönderiyorum, böylece kışı güvenle atlatabilirim.

Önerilen: