Sisällysluettelo:

FlowerCare ja Nymea pelastamaan kasvejani: 5 vaihetta
FlowerCare ja Nymea pelastamaan kasvejani: 5 vaihetta

Video: FlowerCare ja Nymea pelastamaan kasvejani: 5 vaihetta

Video: FlowerCare ja Nymea pelastamaan kasvejani: 5 vaihetta
Video: Xiaomi Mi Flora Monitor Sensor прибор для ваших растений II Что это за зверь? 2024, Marraskuu
Anonim
FlowerCare ja Nymea pelastamaan kasvejani
FlowerCare ja Nymea pelastamaan kasvejani

Käsien likaantuminen kasvienhoitotunnistimien liittämisestä olemassa olevaan avoimen lähdekoodin älykkääseen kotiin. Käsittely laajennusten kehittämisestä nymealle.

Tarina

Kuten monet muut piilottelijat ja hakkerit, kärsin minäkin siitä ongelmasta, että asioiden hakkerointi vie niin paljon aikani, että unohdan toisinaan kastella kasvejani. Kun Monstera Deliciosa kärsi jälleen kuivasta maaperästä, päätin katsoa, voinko tehdä asialle jotain muistuttaakseni sitä, kun on jano.

Nopea tutkimus verkossa toi huomioni Xiaomi FlowerCareen, joka tunnetaan myös nimellä MiCare tai PlantCare. Se on Bluetooth Low Energy -laite, ja jotkut perustutkimukset paljastivat, että sen protokolla näyttää olevan melko helppo ymmärtää. Vaikka Xiaomi ei näytä tarjoavan mitään julkisia tietoja, Internetissä on vielä ollut melko vähän käänteistä suunnittelua tälle laitteelle. Joten päätin tilata yhden niistä.

Muutamaa päivää myöhemmin se toimitettiin ja tietysti aloin leikkiä sen kanssa heti. Tarkistin lyhyesti sen mukana tulevan sovelluksen, mutta kuten luultavasti arvaatte, sen käyttäminen oletusasetuksissa ei koskaan ollut suunnitelmani. Tietenkin tämä on integroitava olemassa olevaan älykkään kodin määritykseeni, kuten myös tässä on kuvattu, käytän nymeaa älykkään kodin ratkaisuna (Kyllä, voit jopa havaita Monsteran yhdessä kuvista:)). Valitettavasti nymea ei vielä tukenut tätä anturia, joten jonkin IDE: n käynnistäminen oli kunnossa.

Vaihe 1: Lisäosien lataaminen

Plugin -tynnyrin lataaminen
Plugin -tynnyrin lataaminen
Plugin -tynnyrin lataaminen
Plugin -tynnyrin lataaminen
Plugin -tynnyrin lataaminen
Plugin -tynnyrin lataaminen

Joten ensimmäinen asia, jonka tein, oli kopioida olemassa oleva Texas Instruments Sensor Tag -laajennus, se vaikutti riittävän samanlaiselta kuin oletin, että sen pitäisi toimia myös FlowerCare -laitteessa. Kun plugininfo.json -tiedoston asiat on nimetty uudelleen ja kommentoitu pois suurin osa sensortag -laajennuksen koodista, olin valmis lataamaan uuden lisäosan tynkän.

Kuten odotettiin, löytö näyttää jo anturin heti ja antaa minun lisätä sen järjestelmään. Se ei tietenkään tuota mitään merkityksellistä tietoa tässä vaiheessa.

Vaihe 2: Tietojen etsiminen anturista

Tietojen etsiminen anturista
Tietojen etsiminen anturista

Kuten minkä tahansa Bluetooth LE -laitteen kanssa, ensimmäinen asia, jonka haluat tehdä, on selvittää sen tarjoamat palvelut ja niiden ominaisuudet. Jossain siellä todelliset tiedot on piilotettu. Nopean virheenkorjaustulostussilmukan avulla kaikki löydetyt palvelut ja tulostusominaisuudet tulin siihen pisteeseen, jossa voisin verrata Internetistä löytämiäni tietoja siihen, mitä laite todella raportoi.

mitätön FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (lähettäjä ()); qCDebug (dcFlowerCare ()) << "on palvelu uuids" ohjain ()-> createServiceObject (sensorServiceUuid, tämä); connect (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); connect (m_sensorService, & QLowEnergyService:: featureRead, this, & FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> findDetails (); } void FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & feature, m_sensorService-> features ()) {qCDebug (dcFlowerCare ()). nospace () <"<< iseloomustava.uuid (). toString () <<" ("<< ominaisuus.kahva () << "Nimi:" << ominaisuus.nimi () << "):" << ominaisuus.arvo () << "," << ominaisuus.arvo (). ToHex (); foreach (const QLowEnergyDescriptor & deskriptori, ominaisuus.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <<" Nimi: "<< descriptor.name () << "):" << descriptor.value () << "," << descriptor.value (). toHex (); }}}

Laiteohjelmistoversio ja akun varaustaso olivat helppoja. Voisin nähdä vastaavat arvot tulostettuna tässä ensimmäisessä tietojen luettelointikokeilussa. Todelliset anturiarvot ovat piilossa hieman syvemmälle sinne, mutta niiden yhdistäminen Internetin tietoihin osoitti heti, mistä se löytyy ja erityisesti miten se luetaan.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & feature, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Characteristic read" << QString:: numero (ominaisuus.kahva (), 16) lämpötila; qint8 ohita; stream >> ohita; quint32 lux; virta >> lux; qint8 kosteus; virtaus >> kosteus; qint16 hedelmällisyys; virta >> hedelmällisyys; emit valmis (m_batteryLevel, 1,0 * temp / 10, lux, kosteus, hedelmällisyys); }

Yhdistämällä tämän, laajennus alkoi jo tuottaa merkityksellistä dataa.

Vaihe 3: Viimeistely

Viimeistelyt
Viimeistelyt

Joten se toimi periaatteessa nyt, mutta yksi asia jäi vielä siihen. Toisin kuin Texas Instruments SensorTag, FlowerCare -anturi katkaisi Bluetooth -yhteyden muutaman sekunnin kuluttua. Käyttötapa huomioon ottaen tämä ei kuitenkaan näytä olevan ongelma, koska se on melko luotettava vastaamaan yhteysyrityksiin. Kun otetaan huomioon, että normaalisti kasvi ei ime litraa vettä muutamassa minuutissa, vaan päivissä, ei vaikuta välttämättömältä pysyä yhteydessä koko ajan. Tämä myös tyhjentää akun melko paljon. Joten päätin lisätä PluginTimerin, joka yhdistäisi anturin uudelleen 20 minuutin välein ja noutaisi tietoja siitä. Jos anturi jostain syystä ei reagoi yhteysyritykseen, koodi käynnistää uuden ajastimen, joka yrittää muodostaa yhteyden uudelleen joka minuutti siitä hetkestä lähtien, kunnes se onnistuu saamaan tiedot. Sitten se palaisi hakemaan tietoja uudelleen 20 minuutin välein. Jos laite ei muodosta yhteyttä kahdesti peräkkäin (eli 20 + 1 minuutin kuluttua), se merkitään järjestelmässä offline -tilaan ja käyttäjää voidaan varoittaa siitä.

void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Päivitetään" osoite (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << "Ei virkistävä" osoite () << "Seuraava päivitys" << m_refreshMinutes [flowerCare] << "minuuttia"; } // Jos meillä oli kaksi tai useampia epäonnistuneita yhteysyrityksiä, merkitse se katkeamattomaksi, jos (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Virhe päivitys:" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

Tällä strategialla nymea näytti nyt toimittavan täysin luotettavia tietoja tästä anturista.

Vaihe 4: Käytä sitä laajemmassa kontekstissa

Sen käyttö laajemmassa kontekstissa
Sen käyttö laajemmassa kontekstissa
Sen käyttö laajemmassa kontekstissa
Sen käyttö laajemmassa kontekstissa

Pelkästään arvojen saaminen anturista ei kuitenkaan ole kovin hyödyllistä, olisin voinut käyttää myös alkuperäistä sovellusta. Tehdään nyt fiksuja asioita sen kanssa.

Nymea tukee push -ilmoitusten lähettämistä joko puhelimiin, joissa on nymea: sovellus asennettuna, tai PushBulletin kautta. Joten ilmeinen asia on lähettää itselleni push -ilmoituksia aina, kun maaperän kosteus laskee alle 15%. Sen asettaminen sovellukseen on melko helppoa. Edellytyksenä on, että tarvitset joko tilin nymea: cloud -palvelussa tai PushBullet -palvelussa. Nymea: pilvipohjaiset push -ilmoitukset riittävät ottamaan nymea: cloud käyttöön nymea: core: ssa ja nymeassa: app. Heti kun molemmat on yhdistetty, ilmoitus tulee automaattisesti näkyviin. Jos haluat lisätä PushBullet -järjestelmään uuden asian, löydät PushBulletin luettelosta. Se pyytää sinulta API -avaimen, jonka saat rekisteröityessäsi PushBullet -palveluun. Kun olet saanut push -ilmoituksen nymeassa, voit luoda säännön.

Voit tietysti tehdä mitä haluat… Voit myös sytyttää jonkin valon anturien arvojen heijastamiseksi tai käyttää HTTP -komentajalaajennusta esimerkiksi anturien arvojen lähettämiseen esimerkiksi Internetissä olevalle palvelimelle. jota voidaan hallita digitaalisesti (vielä), mutta tietysti, jos sinulla on sellainen asia ja nymea ei vielä tue sitä, lisäosan lisääminen tähän olisi melko samanlainen kuin tämä.

Vaihe 5: Sanojen sulkeminen

Loppusanat
Loppusanat

Kukkahoidon laajennus on hyväksytty jo nyt ja jos sinulla on jokin niistä, se on valmis käytettäväksi nymean kanssa nyt. Toivon kuitenkin, että tämä artikkeli saattaa kiinnostaa, jos joku haluaa lisätä tukea muille laitteille. Sen pitäisi olla opas kuinka rakentaa oma laajennus nymealle.

Jos haluat vain rakentaa tämän kokoonpanon kotiisi, tarvitset vain FlowerCare -anturin, Raspberry Pi: n, nymea -yhteisökuvan (se sisältää nyt kukkahoidon laajennuksen) ja nymea: -sovelluksen, joka on saatavana sovelluskaupoista. Lisäksi toistaiseksi Monstera Deliciosa on onnellinen jälleen, ja kuten olet ehkä nähnyt kuvakaappauksissa, olen hankkinut itselleni toisen näistä antureista seuratakseni myös sitruunapuuni terveyttä. Lähetän itselleni push -ilmoituksen aina, kun ulkona on pakkasta, jotta voin viedä sen talven läpi turvallisesti.

Suositeltava: