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, Srpanj
Anonim
FlowerCare i Nymea za spašavanje mojih biljaka
FlowerCare i Nymea za spašavanje mojih biljaka

Prljam ruke povezivanjem senzora za njegu biljaka s mojim postojećim otvorenim kodom pametne kuće. 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čila sam provjeriti mogu li učiniti nešto po tom pitanju kako bi me podsjetila kad je žedna.

Brzo istraživanje na webu privuklo mi je pozornost na Xiaomi FlowerCare, također poznat kao MiCare ili PlantCare. Riječ je o Bluetooth niskoenergetskom uređaju, a neka su osnovna istraživanja otkrila da se čini da je njegov protokol prilično lako razumljiv. Iako se čini 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 jedan od njih.

Nekoliko dana kasnije isporučen 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, ja koristim nymeu kao svoje rješenje za pametni dom (Da, čak možete vidjeti Monsteru na jednoj od slika tamo:)). Nažalost, nymea još nije podržala taj senzor pa je bilo potrebno pokrenuti neki IDE.

Korak 1: Učitavanje kvačice 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 za što sam pretpostavio da bi trebao raditi i za uređaj FlowerCare. Nakon osnovnog preimenovanja stvari u plugininfo.json i komentiranja većine koda dodatka sensortag, bio sam spreman za učitavanje nove dodatne komponente.

Očekivano, otkriće bi već odmah pokazalo senzor i omogućilo mi da ga dodam u sustav. Naravno da 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, prvo što želite učiniti je saznati o uslugama koje nudi i njihovim karakteristikama. Negdje su stvarni podaci skriveni. Brzim ispisivanjem pogrešaka ispisuje sve otkrivene usluge i ispisuje njihove karakteristike. Bio sam na mjestu gdje sam mogao usporediti informacije koje sam pronašao na internetu s onim što uređaj zapravo prijavljuje.

void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (pošiljatelj ()); 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 () << "Naziv:" << karakteristično.ime () << "):" << karakteristično.vrijednost () << "," << karakteristično.vrijednost (). ToHex (); foreach (const QLowEnergyDescriptor & deskriptor, karakteristika.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< deskriptor.uuid (). toString () <<" ("<< deskriptor.handle () <<" Naziv: "<< deskriptor.name () << "):" << deskriptor.value () << "," << deskriptor.value (). toHex (); }}}

Verzija firmvera i razina 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 pronaći, a posebno kako ga čitati.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & karakteristika, const QByteArray & vrijednost) {qCDebug (dcFlowerCare ()) << "Characteristic read" << QString:: broj (karakteristična.handle (), 16) temp; qint8 skip; stream >> skip; quint32 luksa; tok >> lux; qint8 vlaga; tok >> vlaga; qint16 plodnost; tok >> plodnost; ispuštati gotove (m_batteryLevel, 1,0 * temp / 10, lux, vlaga, plodnost); }

Spajajuć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 sada u osnovi uspjelo, međutim, jedno je pitanje i dalje ostalo tamo. Senzor FlowerCare bi, za razliku od Texas Instruments SensorTag, prekinuo Bluetooth vezu nakon nekoliko sekundi. S obzirom na slučaj uporabe, č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 isisava litru vode u roku od nekoliko minuta, već prije nekoliko dana, ne čini se nužnim ostati stalno povezan. Također 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 ponovno povezati svake minute od tog trenutka pa sve dok ne uspije doći do podataka. Zatim bi se ponovno vratili na dohvaćanje podataka u razmaku od 20 minuta. Ako se uređaj ne uspije povezati dva puta zaredom (što znači, nakon 20 + 1 minute), u sustavu će biti označen kao izvanmrežni, 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-> osvježiData (); } 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 prekinutu ako (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Nije uspjelo osvježavanje za" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

S ovom strategijom sada se činilo da nymea isporučuje savršeno pouzdane podatke s ovog senzora.

Korak 4: Korištenje 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 izvornu aplikaciju. Učinimo sada neke pametne stvari s tim.

Nymea podržava slanje push obavijesti, bilo na telefone s instaliranom aplikacijom nymea: ili putem PushBullet -a. Dakle, očita stvar koju trebam 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 preduvjet trebate ili račun u nymea: cloud ili na PushBullet. Za nymea: cloud obavijesti na bazi obavijesti dovoljno je omogućiti nymea: cloud na nymea: jezgri i u nymea: aplikaciji. Čim se oboje povežu, automatski će se pojaviti obavijest. Za PushBullet dodajte novu stvar u sustav, PushBullet ćete pronaći na tamošnjem popisu. Od vas će se tražiti API ključ koji dobivate prilikom prijave s PushBullet -om. Nakon što u nymei imate stvar s push obavijestima, možete stvoriti pravilo.

Naravno da možete učiniti što god želite … Također možete uključiti svjetlo kako bi odrazilo vrijednosti senzora ili upotrijebiti dodatak HTTP naredbe za objavljivanje vrijednosti senzora na poslužitelju na internetu, na primjer. Nemam ventil za vodu koji se može kontrolirati digitalno (još), ali naravno, ako imate takvo nešto, 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 zajednice nymea (već uključuje dodatak za njegu cvijeća) i nymea: aplikacija koja je dostupna u trgovinama aplikacija. Također, do sada je moja Monstera Deliciosa ponovno sretna i kao što ste mogli vidjeti na snimkama zaslona, nabavio sam si drugi senzor 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čeni: