Sisukord:

FlowerCare ja Nymea minu taimede päästmiseks: 5 sammu
FlowerCare ja Nymea minu taimede päästmiseks: 5 sammu

Video: FlowerCare ja Nymea minu taimede päästmiseks: 5 sammu

Video: FlowerCare ja Nymea minu taimede päästmiseks: 5 sammu
Video: Anthurium care without roots #learngardening 2024, November
Anonim
FlowerCare ja Nymea minu taimede päästmiseks
FlowerCare ja Nymea minu taimede päästmiseks

Käed määrduvad taimehooldusandurite ühendamisel oma olemasoleva avatud lähtekoodiga nutikoduga. Ülevaade nymea pistikprogrammide arendamisest.

Lugu

Nagu paljud teised näpistajad ja häkkerid, kannatan ka mina selle pärast, et asjade häkkimine võtab nii palju aega, et unustan aeg -ajalt oma taimi kasta. Pärast seda, kui mu Monstera Deliciosa oli taas kannatanud kuiva pinnase käes, otsustasin ma uurida, kas ma saan sellega midagi ette võtta, et mulle janu meelde tuletada.

Kiire veebiuuring tõi mu tähelepanu Xiaomi FlowerCare'ile, mida tuntakse ka kui MiCare või PlantCare. See on Bluetoothi madala energiatarbega seade ja mõned põhiuuringud näitasid, et selle protokoll tundub olevat üsna lihtne mõista. Kuigi Xiaomi ei paku avalikke spetsifikatsioone, on selle seadme jaoks Internetis tehtud üsna palju pöördtehnoloogiat. Nii otsustasin ühe neist tellida.

Mõni päev hiljem saadi see kohale ja loomulikult hakkasin sellega kohe ringi mängima. Vaatasin korraks kaasasolevat rakendust, kuid nagu te ilmselt arvate, ei olnud selle kasutamine vaikeseadistuses kunagi minu plaan. Loomulikult tuleb see integreerida minu olemasoleva nutika kodu seadistusega. Nagu ka siin kirjeldatud, kasutan oma nutika kodu lahendusena nymeat (jah, võite isegi näha Monsterat ühel pildil:)). Kahjuks ei toetanud nymea seda andurit veel, nii et mõne IDE käivitamine oli korras.

1. samm: pistikprogrammi lüliti laadimine

Pistikprogrammi stuudi laadimine
Pistikprogrammi stuudi laadimine
Pistikprogrammi stuudi laadimine
Pistikprogrammi stuudi laadimine
Pistikprogrammi stuudi laadimine
Pistikprogrammi stuudi laadimine

Nii et esimese asjana kopeerisin olemasoleva Texas Instruments Sensor Tag plugina, see tundus piisavalt sarnane sellega, mis minu arvates peaks töötama ka FlowerCare seadme puhul. Pärast plugininfo.jsoni asjade lihtsat ümbernimetamist ja enamiku sensortag plugina koodi kommenteerimist olin valmis uue pistikprogrammi tüki laadima.

Nagu oodatud, näitab avastus andurit juba kohe ja võimaldab mul selle süsteemi lisada. Loomulikult ei tooks see praegu olulisi andmeid.

Samm 2: Andmete leidmine andurilt

Andmete leidmine andurilt
Andmete leidmine andurilt

Nagu iga Bluetooth LE -seadme puhul, on esimene asi, mida soovite teha, välja selgitada selle pakutavad teenused ja nende omadused. Kusagil seal on tegelikud andmed peidetud. Kõigi avastatud teenuste kiire silumisprindiga ja nende omaduste printimisega jõudsin punkti, kus sain Internetist leitud teavet võrrelda seadmega tegelikult edastatavaga.

tühine FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (saatja ()); qCDebug (dcFlowerCare ()) << "have service uuids" kontroller ()-> createServiceObject (sensorServiceUuid, see); connect (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); connect (m_sensorService, & QLowEnergyService:: iseloomulik lugemine, see ja & FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> findDetails (); } tühine FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & iseloomulik, m_sensorService-> omadused ()) {qCDebug (dcFlowerCare ()). nospace () <"<< iseloomulik.uuid (). toString () <<" ("<< iseloomulik.käepide () << "Nimi:" << iseloomulik.nimi () << "):" << iseloomulik.väärtus () << "," << iseloomulik.väärtus (). ToHex (); foreach (const QLowEnergyDescriptor & descriptor, iseloomulik.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <<" Nimi: "<< deskriptor.nimi () << "):" << descriptor.value () << "," << deskriptor.väärtus (). toHex (); }}}

Püsivara versioon ja aku tase olid lihtsad. Ma nägin juba esimesel andmete loetlemise katsel trükitud vastavaid väärtusi. Andurite tegelikud väärtused on seal veidi sügavamal peidus, kuid nende kombineerimine Interneti -andmetega osutas kohe, kust seda leida ja eriti seda lugeda.

tühine FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & iseloomulik, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Iseloomulik lugemine" << QString:: number (iseloomulik.käepide (), 16) temp; qint8 vahele; oja >> vahele; kvint32 luksi; oja >> lux; qint8 niiskus; oja >> niiskus; qint16 viljakus; oja >> viljakus; emit valmis (m_batteryLevel, 1,0 * temp / 10, lux, niiskus, viljakus); }

Selle kokku pannes hakkas pistikprogramm juba olulisi andmeid tootma.

3. samm: viimistlus

Viimistlus
Viimistlus

Nii et põhimõtteliselt see nüüd toimis, aga üks teema jäi siiski sinnapaika. FlowerCare andur katkestab erinevalt Texas Instruments SensorTagist mõne sekundi pärast Bluetooth -ühenduse. Arvestades kasutusjuhtumit, ei tundu see siiski probleem olevat, kuna see on ühenduse katsetele reageerimisel üsna usaldusväärne. Arvestades, et tavaliselt ei ima taim liitrit vett minutite, vaid pigem päevade jooksul, ei tundu olevat vajalik kogu aeg ühenduses püsida. Samuti tühjendaks see akut üsna palju. Nii otsustasin lisada PluginTimer'i, mis ühendaks anduri iga 20 minuti järel uuesti ja tooks sealt andmed. Kui andur mingil põhjusel ühenduse katsele ei reageeri, käivitab kood uue taimeriga, mis proovib sellest hetkest alates iga minuti tagant uuesti ühendust luua, kuni tal õnnestub andmed kätte saada. Seejärel naaseb see uuesti 20 -minutilise intervalli andmete toomiseks. Kui seadmel ei õnnestu kaks korda järjest ühendust luua (see tähendab 20 + 1 minuti pärast), märgitakse see süsteemis võrguühenduseta ja kasutajat saab sellest hoiatada.

tühine DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Värskendav" aadress (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << "Ei ole värskendav" aadress () << "Järgmine värskendus" << m_refreshMinutes [flowerCare] << "minutit"; } // Kui meil oli kaks või enam ebaõnnestunud ühenduse katset, märkige see lahtiühendatuks, kui (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Värskendamine nurjus" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

Selle strateegiaga näis nymea nüüd selle anduri kohta täiesti usaldusväärseid andmeid edastavat.

Samm: selle kasutamine suuremas kontekstis

Selle kasutamine suuremas kontekstis
Selle kasutamine suuremas kontekstis
Selle kasutamine suuremas kontekstis
Selle kasutamine suuremas kontekstis

Lihtsalt andurilt väärtuste hankimine pole kuigi kasulik, oleksin võinud selle jaoks kasutada ka algset rakendust. Nüüd teeme sellega nutikaid asju.

Nymea toetab tõukemärguannete saatmist kas telefonidesse, kuhu on installitud rakendus nymea: rakendus või PushBullet. Seega on ilmselge asi, mida teha, kui saata endale tõukemärguandeid, kui mulla niiskus langeb alla 15%. Selle seadistamine rakenduses on üsna lihtne. Eeltingimusena vajate kas kontot nymea: pilves või PushBulletis. Nymea: pilvepõhiste tõukemärguannete jaoks piisab nymea: cloud lubamisest nymea: core ja rakenduses nymea: Niipea, kui mõlemad on ühendatud, kuvatakse automaatselt teavitus. Kui PushBullet lisab süsteemi uue asja, leiate PushBulleti loendist. See küsib teilt API -võtit, mille saate PushBulletiga registreerumisel. Kui teil on nymeas tõukemärguanne, saate reegli luua.

Loomulikult võite teha mida iganes soovite… Võib sisse lülitada ka valguse, et kajastada andurite väärtusi, või kasutada näiteks HTTP -käsu pistikprogrammi, et postitada andurite väärtused näiteks Internetti. Mul pole veeklappi mida saab digitaalselt (veel) juhtida, kuid muidugi, kui teil on selline asi ja nymea seda veel ei toeta, oleks selle jaoks plugina lisamine pigem sarnane.

Samm: sõnade sulgemine

Lõppsõnad
Lõppsõnad

Lillehoolduse pistikprogramm on praeguseks vastu võetud ja kui teil on üks neist, on see nüüd nymeaga kasutamiseks valmis. Loodan siiski, et see artikkel võib teile huvi pakkuda, kui keegi soovib teistele seadmetele tuge lisada. See peaks olema juhis selle kohta, kuidas nymea jaoks oma pistikprogrammi luua.

Kui soovite selle seadistuse lihtsalt oma kodus üles ehitada, vajate ainult FlowerCare andurit, Raspberry Pi, nymea kogukonna kuvandit (see sisaldab praeguseks lillehoolduse pistikprogrammi) ja nymea: rakendust, mis on saadaval rakenduste poodides. Samuti on siiani mu Monstera Deliciosa taas õnnelik ja nagu te ekraanipiltidel võisite näha, olen saanud endale teise neist anduritest, et jälgida ka minu sidrunipuu tervist. Selle jaoks saadan endale tõukemärguande alati, kui väljas külmub, et saaksin selle ohutult üle talve tuua.

Soovitan: