Sadržaj:

FlowerCare i Nymea za spašavanje mojih biljaka: 5 koraka
FlowerCare i Nymea za spašavanje mojih biljaka: 5 koraka

Video: FlowerCare i Nymea za spašavanje mojih biljaka: 5 koraka

Video: FlowerCare i Nymea za spašavanje mojih biljaka: 5 koraka
Video: Miraculous for making rotten orchids revive immediately 2024, Juli
Anonim
FlowerCare i Nymea za spašavanje mojih biljaka
FlowerCare i Nymea za spašavanje mojih biljaka

Prljanje ruku spajanjem senzora za njegu biljaka na moj postojeći pametni dom otvorenog koda. Uputa za razvoj dodataka za nymea.

Priča

Kao i mnogi drugi petlači i hakeri, i ja patim od problema da mi hakiranje stvari oduzima toliko vremena da povremeno zaboravim zalijevati svoje biljke. Nakon što je moja Monstera Deliciosa ponovno patila od suhog tla, odlučio sam provjeriti mogu li učiniti nešto po tom pitanju da me podsjeti kad je žedan.

Brzo istraživanje na webu privuklo mi je pažnju na Xiaomi FlowerCare, također poznatu kao MiCare ili PlantCare. Radi se o Bluetooth niskoenergetskom uređaju, a neka su osnovna istraživanja otkrila da se čini da je njegov protokol prilično lako razumljiv. Iako izgleda da Xiaomi ne nudi nikakve javne specifikacije, na internetu je još bilo dosta obrnutog inženjeringa za ovaj uređaj. Pa sam odlučio naručiti jednu od njih.

Nekoliko dana kasnije isporučeno je i naravno da sam se odmah počeo igrati s njim. Nakratko sam provjerio aplikaciju koja dolazi s njom, ali kao što vjerojatno možete pretpostaviti, korištenje u zadanim postavkama nikada mi nije bilo u planu. Naravno, ovo mora biti integrirano sa mojim postojećim postavkama pametne kuće. Kao što je ovdje opisano, koristim nymea kao svoje rješenje za pametnu kuću (Da, čak možete vidjeti Monsteru na jednoj od slika tamo:)). Nažalost, nymea još nije podržala taj senzor pa je pokretanje nekog IDE -a bilo u redu.

Korak 1: Učitavanje dodatka

Učitavanje stuba dodatka
Učitavanje stuba dodatka
Učitavanje stuba dodatka
Učitavanje stuba dodatka
Učitavanje stuba dodatka
Učitavanje stuba dodatka

Dakle, prvo što sam učinio bilo je kopirati postojeći dodatak Texas Instruments Sensor Tag, činilo se da je dovoljno sličan onome što sam pretpostavio da bi trebalo raditi i za FlowerCare uređaj. Nakon osnovnog preimenovanja stvari u plugininfo.json i komentarisanja većine koda dodatka sensortag, bio sam spreman za učitavanje nove dodatne komponente.

Očekivano, otkriće bi već pokazalo senzor i omogućilo mi da ga dodam u sistem. Naravno, u ovom trenutku to ne bi proizvelo nikakve značajne podatke.

Korak 2: Pronalaženje podataka na senzoru

Traženje podataka na senzoru
Traženje podataka na senzoru

Kao i kod svakog Bluetooth LE uređaja, prva stvar koju želite učiniti je saznati o uslugama koje nudi i njihovim karakteristikama. Negdje tamo su stvarni podaci skriveni. Brzim ispisivanjem pogrešaka ispisujući sve otkrivene usluge i ispisujući njihove karakteristike, bio sam na mjestu gdje sam mogao usporediti informacije koje sam pronašao na internetu s onim što uređaj zapravo izvještava.

void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (sender ()); qCDebug (dcFlowerCare ()) << "have service uuids" kontroler ()-> createServiceObject (sensorServiceUuid, ovo); connect (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); connect (m_sensorService, & QLowEnergyService:: karakteristično čitanje, ovo i FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> discoverDetails (); } void FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & stanje) {if (stanje! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & karakteristika, m_sensorService-> karakteristike ()) {qCDebug (dcFlowerCare ()). nospace () <"<< karakteristika.uuid (). toString () <<" ("<< karakteristika.handle () << "Ime:" << karakteristično.ime () << "):" << karakteristično.value () << "," << karakteristično.value (). ToHex (); foreach (const QLowEnergyDescriptor & deskriptor, karakteristika.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< deskriptor.uuid (). toString () <<" ("<< deskriptor.handle () <<" Ime: "<< deskriptor.name () << "):" << deskriptor.value () << "," << deskriptor.value (). toHex (); }}}

Verzija firmvera i nivo napunjenosti baterije bili su laki. Već sam mogao vidjeti odgovarajuće vrijednosti ispisane u ovom prvom pokušaju popisivanja podataka. Stvarne vrijednosti senzora skrivene su malo dublje, ali kombinirajući ih s podacima s interneta odmah je ukazano gdje ga možete pronaći, a posebno kako ga čitati.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & karakteristika, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Karakteristično čitanje" << QString:: broj (karakteristična.handle (), 16) temp; qint8 skip; stream >> skip; quint32 lux; tok >> lux; qint8 vlaga; tok >> vlaga; qint16 plodnost; tok >> plodnost; emituju gotove (m_batteryLevel, 1.0 * temp / 10, lux, vlaga, plodnost); }

Sastavljajući ovo, dodatak je već počeo proizvoditi značajne podatke.

Korak 3: Završni dodiri

Završni dodiri
Završni dodiri

Tako da je to sada u osnovi funkcioniralo, međutim, jedno je pitanje ostalo tamo. Senzor FlowerCare bi, za razliku od Texas Instruments SensorTag -a, prekinuo Bluetooth vezu nakon nekoliko sekundi. S obzirom na slučaj upotrebe, čini se da to nije problem jer je prilično pouzdan u reagiranju na pokušaje povezivanja. S obzirom na to da obično biljka ne usisa litar vode u roku od nekoliko minuta, već prije nekoliko dana, ne čini se nužnim ostati stalno povezan. Takođe bi ovo dosta ispraznilo bateriju. Stoga sam odlučio dodati PluginTimer koji bi ponovno povezivao senzor svakih 20 minuta i dohvatio podatke s njega. Ako iz nekog razloga senzor ne bi reagirao na pokušaj povezivanja, kôd će pokrenuti drugi mjerač vremena koji se pokušava ponovo povezati svake minute od tog trenutka pa sve dok ne uspije doći do podataka. Zatim bi se vratilo na ponovno dohvaćanje podataka u intervalu od 20 minuta. Ako se uređaj ne uspije povezati dva puta zaredom (što znači, nakon 20 + 1 minuta), u sistemu će biti označen kao "offline", a korisnik se može upozoriti na to.

void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Osvježavanje" adrese (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << "Ne osvježava" adresa () << "Sljedeće osvježavanje u" << m_refreshMinute [flowerCare] << "minute"; } // Ako smo imali 2 ili više neuspjelih pokušaja povezivanja, označite ga kao prekinutog ako (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Nije uspjelo osvježavanje za" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

Ovom strategijom čini se da je nymea sada isporučila savršeno pouzdane podatke s ovog senzora.

Korak 4: Upotreba u većem kontekstu

Korištenje u većem kontekstu
Korištenje u većem kontekstu
Korištenje u većem kontekstu
Korištenje u većem kontekstu

Samo dobivanje vrijednosti sa senzora nije toliko korisno, za to sam mogao koristiti i originalnu aplikaciju. Učinimo sada neke pametne stvari s tim.

Nymea podržava slanje push obavijesti bilo na telefone sa instaliranom aplikacijom nymea ili putem PushBullet -a. Očigledna stvar koju treba učiniti je da si pošaljem push obavijesti kad god vlaga u tlu padne ispod 15%. To je prilično jednostavno postaviti u aplikaciji. Kao preduslov trebate ili račun u nymea: cloud ili na PushBullet -u. Za nymea: cloud obavijesti dovoljno je omogućiti nymea: cloud na nymea: core i u nymea: app. Čim se oboje povežu, automatski će se pojaviti obavijest. Za PushBullet dodajte novu stvar u sistem, PushBullet ćete pronaći na tamošnjoj listi. Od vas će se tražiti API ključ koji dobijete prilikom registracije s PushBullet -om. Kada u nymei imate stvar s push obavijestima, možete stvoriti pravilo.

Naravno, možete učiniti što god želite … Također možete uključiti svjetlo kako bi se odrazile vrijednosti senzora, ili koristiti dodatak HTTP naredbe za postavljanje vrijednosti senzora na poslužitelj na internetu, na primjer. Nemam ventil za vodu koji se može kontrolirati digitalno (još), ali naravno, ako imate takvu stvar, a nymea to još ne podržava, dodavanje dodatka za to bilo bi prilično slično ovom.

Korak 5: Završne riječi

Završne riječi
Završne riječi

Dodatak za njegu cvijeća je do sada prihvaćen uzvodno i ako imate jedan od njih, sada je spreman za upotrebu s nymeom. Međutim, nadam se da bi ovaj članak mogao biti zanimljiv ako netko želi dodati podršku za druge uređaje. To bi trebalo biti uputstvo o tome kako izgraditi vlastiti dodatak za nymea.

Ako želite samo izgraditi ovu postavku kod kuće, sve što vam je potrebno je FlowerCare senzor, Raspberry Pi, slika nymea zajednice (već uključuje dodatak za njegu cvijeća) i nymea: aplikacija koja je dostupna u trgovinama aplikacija. Takođe, do sada je moja Monstera Deliciosa ponovo sretna i kao što ste mogli vidjeti na snimkama ekrana, nabavio sam sebi drugi od tih senzora za praćenje zdravlja i stabla limuna. Za to vam šaljem push obavijesti kad god vani smrzne kako bih ih mogao sigurno prenijeti preko zime.

Preporučuje se: