Turinys:

„FlowerCare“ir „Nymea“mano augalams gelbėti: 5 žingsniai
„FlowerCare“ir „Nymea“mano augalams gelbėti: 5 žingsniai

Video: „FlowerCare“ir „Nymea“mano augalams gelbėti: 5 žingsniai

Video: „FlowerCare“ir „Nymea“mano augalams gelbėti: 5 žingsniai
Video: Just 1 Cup! Instantly Bloom 500% More Orchids 2024, Lapkritis
Anonim
„FlowerCare“ir „Nymea“mano augalams gelbėti
„FlowerCare“ir „Nymea“mano augalams gelbėti

Nešvarios rankos prijungiant augalų priežiūros jutiklius prie esamo atviro kodo išmaniųjų namų. Apžvalga apie „nymea“papildinių kūrimą.

Istorija

Kaip ir daugelis kitų meistrų ir įsilaužėlių, aš taip pat kenčiu nuo to, kad įsilaužimas į daiktus užima tiek laiko, kad kartais pamirštu palaistyti augalus. Po to, kai mano „Monstera Deliciosa“dar kartą nukentėjo nuo sausos dirvos, nusprendžiau išsiaiškinti, ar galiu ką nors padaryti, kad tai primintų, kai ištroškęs.

Greitas tyrimas internete atkreipė mano dėmesį į „Xiaomi FlowerCare“, dar žinomą kaip „MiCare“arba „PlantCare“. Tai „Bluetooth“mažai energijos naudojantis įrenginys, o kai kurie pagrindiniai tyrimai atskleidė, kad jo protokolas atrodo gana lengvai suprantamas. Nors atrodo, kad „Xiaomi“nepateikia jokių viešų specifikacijų, internete dar buvo nemažai šio įrenginio atvirkštinės inžinerijos. Taigi nusprendžiau užsisakyti vieną iš jų.

Po kelių dienų jis buvo pristatytas ir, žinoma, iškart pradėjau su juo žaisti. Trumpai peržiūrėjau su juo pateiktą programą, tačiau, kaip jūs tikriausiai galite atspėti, jos naudojimas numatytojoje sąrankoje niekada nebuvo mano planas. Žinoma, tai turi būti integruota į mano išmaniųjų namų sąranką. Kaip ir čia aprašyta, aš naudoju „nymea“kaip savo protingų namų sprendimą (Taip, jūs netgi galite pastebėti „Monstera“vienoje iš nuotraukų:)). Deja, „nymea“dar nepalaikė šio jutiklio, todėl buvo įjungtas tam tikras IDE.

1 veiksmas: įkelkite papildinį

Kaip įkelti papildinį
Kaip įkelti papildinį
Kaip įkelti papildinį
Kaip įkelti papildinį
Kaip įkelti papildinį
Kaip įkelti papildinį

Taigi pirmas dalykas, kurį padariau, buvo nukopijuoti esamą „Texas Instruments Sensor Tag“papildinį, jis atrodė pakankamai panašus į tai, kas, mano manymu, turėtų veikti ir „FlowerCare“įrenginyje. Po pagrindinio „plugininfo.json“daiktų pervadinimo ir komentavimo apie didžiąją dalį „sensortag“įskiepio kodo buvau pasiruošęs įkelti naują papildinį.

Kaip ir tikėtasi, atradimas jau iškart parodys jutiklį ir leis man jį pridėti prie sistemos. Žinoma, šiuo metu jis nepateiks jokių reikšmingų duomenų.

2 žingsnis: suraskite duomenis jutiklyje

Duomenų radimas jutiklyje
Duomenų radimas jutiklyje

Kaip ir naudojant bet kurį „Bluetooth LE“įrenginį, pirmiausia turite sužinoti apie jo teikiamas paslaugas ir jų savybes. Kažkur ten faktiniai duomenys yra paslėpti. Greitai derindamas spausdinimo ciklą per visas atrastas paslaugas ir spausdindamas jų charakteristikas, aš galėjau palyginti informaciją, kurią radau internete, su tuo, ką iš tikrųjų praneša įrenginys.

void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (siuntėjas ()); qCDebug (dcFlowerCare ()) << "turėti paslaugą uuids" valdiklis ()-> createServiceObject (sensorServiceUuid, tai); connect (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); connect („m_sensorService“, „QLowEnergyService“:: charakteristikaSkaitykite, tai ir „FlowerCare“:: onSensorServiceCharacteristicRead); m_sensorService-> findDetails (); } void FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & charakteristika, m_sensorService-> charakteristikos ()) {qCDebug (dcFlowerCare ()). nospace () <"<< charakteristika.uuid (). toString () <<" ("<< charakteristika. rankena () << "Pavadinimas:" << charakteristika.pavadinimas () << "):" << charakteristika.value () << "," << charakteristika.value (). ToHex (); foreach (const QLowEnergyDescriptor & deskriptorius, charakteristika.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <<" Pavadinimas: "<< deskriptorius.pavadinimas () << "):" << deskriptorius.value () << "," << descriptor.value (). toHex (); }}}

Firmware versija ir akumuliatoriaus lygis buvo lengvi. Jau pirmą kartą bandydamas išvardyti duomenis galėjau pamatyti atitinkamas vertes. Faktinės jutiklių vertės yra paslėptos šiek tiek giliau, tačiau jas derinant su duomenimis iš interneto iškart nurodoma, kur ją rasti ir ypač kaip ją perskaityti.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & Charakteristika, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Charakteristinis skaitymas" << QString:: skaičius (charakteristika. rankena (), 16) temp; qint8 praleisti; srautas >> praleisti; kvint32 liuksų; srautas >> liuksas; qint8 drėgmė; upelis >> drėgmė; qint16 vaisingumas; upelis >> vaisingumas; emit baigtas (m_batteryLevel, 1,0 * temp / 10, liuksai, drėgmė, vaisingumas); }

Sudėjus tai, papildinys jau pradėjo gaminti reikšmingus duomenis.

3 žingsnis: Apdailos darbai

Apdailos darbai
Apdailos darbai

Taigi iš esmės tai pavyko dabar, tačiau vienas klausimas vis tiek liko. „FlowerCare“jutiklis, priešingai nei „Texas Instruments SensorTag“, po kelių sekundžių nutrauktų „Bluetooth“ryšį. Tačiau, atsižvelgiant į naudojimo atvejį, tai neatrodo problema, nes ji yra gana patikima reaguojant į bandymus prisijungti. Atsižvelgiant į tai, kad paprastai augalas neišgeria litro vandens per kelias minutes, o greičiau per dienas, neatrodo, kad būtina nuolat palaikyti ryšį. Be to, tai labai išsekintų akumuliatorių. Taigi nusprendžiau pridėti „PluginTimer“, kuris kas 20 minučių vėl prijungtų jutiklį ir gautų iš jo duomenis. Jei dėl kokių nors priežasčių jutiklis nereaguoja į bandymą prisijungti, kodas paleidžia kitą laikmatį, kuris nuo to momento kiekvieną minutę bando prisijungti iš naujo, kol pavyksta gauti duomenis. Tada vėl būtų imami duomenys apie 20 minučių intervalą. Jei įrenginiui nepavyksta prisijungti du kartus iš eilės (tai reiškia, po 20 + 1 minučių), jis sistemoje bus pažymėtas neprisijungus ir vartotojas gali būti apie tai įspėtas.

void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Atnaujinamas" adresas (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << "Neatsinaujina" adresas () << "Kitas atnaujinimas" << m_refreshMinutes [flowerCare] << "minutes"; } // Jei turėjome du ar daugiau nesėkmingų bandymų prisijungti, pažymėkite jį kaip atjungtą, jei (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Nepavyko atnaujinti" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

Naudojant šią strategiją, „nymea“dabar pateikė visiškai patikimus šio jutiklio duomenis.

4 žingsnis: naudokite jį didesniame kontekste

Naudojant jį didesniame kontekste
Naudojant jį didesniame kontekste
Naudojant jį didesniame kontekste
Naudojant jį didesniame kontekste

Tačiau tiesiog gauti vertes iš jutiklio nėra labai naudinga, aš taip pat galėjau tam naudoti originalią programą. Dabar padarykime su juo keletą protingų dalykų.

„Nymea“palaiko tiesioginių pranešimų siuntimą į telefonus su „nymea“: įdiegta programa arba per „PushBullet“. Taigi akivaizdus dalykas, kurį reikia padaryti, yra atsiųsti tiesioginius pranešimus, kai dirvožemio drėgmė nukrenta žemiau 15%. Tai gana lengva nustatyti programoje. Kaip būtina sąlyga jums reikia paskyros „nymea“: debesyje arba „PushBullet“. „Nymea“: debesies pagrindu teikiamiems tiesioginiams pranešimams pakanka įjungti „nymea: cloud“„nymea: core“ir „nymea: app“. Kai tik abu bus prijungti, automatiškai atsiras pranešimas. Jei norite „PushBullet“sistemoje pridėti naują dalyką, ten esančiame sąraše rasite „PushBullet“. Jis paprašys jūsų API rakto, kurį gausite prisiregistruodami prie „PushBullet“. Kai „nymea“turėsite tiesioginio pranešimo dalyką, galite sukurti taisyklę.

Žinoma, galite daryti ką tik norite… Taip pat galite įjungti šviesą, kad atspindėtų jutiklio vertes, arba naudoti HTTP vado papildinį, kad, pavyzdžiui, paskelbtumėte jutiklio vertes į serverį internete. Neturiu vandens vožtuvo kurį galima valdyti skaitmeniniu būdu (dar), bet, žinoma, jei turite tokį dalyką ir to dar nepalaiko „nymea“, pridėjus papildinį, jis būtų panašus į šį.

5 žingsnis: Uždarykite žodžius

Uždarymo žodžiai
Uždarymo žodžiai

Gėlių priežiūros papildinys jau buvo priimtas prieš srovę ir, jei turite vieną iš jų, dabar jis yra paruoštas naudoti su „nymea“. Tačiau tikiuosi, kad šis straipsnis gali būti įdomus, jei kas nors nori pridėti kitų įrenginių palaikymą. Tai turėtų būti instrukcija, kaip sukurti savo „nymea“papildinį.

Jei norite tiesiog sukurti šią sąranką savo namuose, viskas, ko jums reikia, yra „FlowerCare“jutiklis, „Raspberry Pi“, „nymea“bendruomenės įvaizdis (į jį jau įtrauktas gėlių priežiūros papildinys) ir „nymea“: programa, kurią galima rasti programų parduotuvėse. Be to, kol kas mano „Monstera Deliciosa“vėl džiaugiasi ir, kaip jau matėte ekrano kopijose, įsigijau sau antrą iš tų jutiklių, kad galėčiau sekti ir mano citrinmedžio sveikatą. Dėl to aš siunčiu tiesioginį pranešimą, kai lauke užšąla, kad galėčiau saugiai jį pernešti žiemą.

Rekomenduojamas: