Kazalo:

FlowerCare in Nymea za reševanje mojih rastlin: 5 korakov
FlowerCare in Nymea za reševanje mojih rastlin: 5 korakov

Video: FlowerCare in Nymea za reševanje mojih rastlin: 5 korakov

Video: FlowerCare in Nymea za reševanje mojih rastlin: 5 korakov
Video: Irrigazione domotica fai da te con Home Assistant e ESP 2024, Julij
Anonim
FlowerCare in Nymea za reševanje mojih rastlin
FlowerCare in Nymea za reševanje mojih rastlin

Umazati roke pri priklopu senzorjev za nego rastlin na moj obstoječi odprtokodni pametni dom. Navodila za razvoj vtičnikov za nymea.

Zgodba

Tako kot mnogi drugi loparji in hekerji, tudi jaz trpim zaradi težave, ki mi vlečenje stvari vzame toliko časa, da občasno pozabim zalivati svoje rastline. Potem ko je moja Monstera Deliciosa spet trpela zaradi suhe zemlje, sem se odločil, da vidim, ali lahko kaj storim glede tega, da me opomni, ko sem žejen.

Hitra raziskava na spletu me je opozorila na Xiaomi FlowerCare, znan tudi kot MiCare ali PlantCare. Gre za napravo z nizko porabo energije Bluetooth in nekatere osnovne raziskave so pokazale, da je njen protokol precej enostaven za razumevanje. Čeprav Xiaomi ne ponuja nobenih javnih specifikacij, je bilo v internetu za to napravo še kar nekaj obratnega inženiringa. Zato sem se odločil naročiti enega od teh.

Nekaj dni kasneje je bil dostavljen in seveda sem se takoj začel igrati z njim. Na kratko sem preveril aplikacijo, ki je priložena, vendar, kot verjetno ugibate, uporaba v privzeti nastavitvi nikoli ni bila moj načrt. Seveda je to treba integrirati z mojo obstoječo nastavitvijo pametnega doma. Kot je opisano tukaj, uporabljam nymea kot svojo rešitev za pametni dom (ja, Monstero lahko opazite celo na eni od slik tam:)). Na žalost nymea še ni podprla tega senzorja, zato je bilo treba sprožiti nekaj IDE.

1. korak: Naložite vtičnik

Nalaganje vtičnika
Nalaganje vtičnika
Nalaganje vtičnika
Nalaganje vtičnika
Nalaganje vtičnika vtičnika
Nalaganje vtičnika vtičnika

Tako sem najprej naredil kopijo obstoječega vtičnika Texas Instruments Sensor Tag, ki se mi je zdel dovolj podoben tistemu, za kar sem domneval, da bi moral delovati tudi za napravo FlowerCare. Po osnovnem preimenovanju stvari v plugininfo.json in komentiranju večine kode vtičnika sensortag sem bil pripravljen naložiti nov čep vtičnika.

Po pričakovanjih bi odkritje že takoj pokazalo senzor in mi omogočilo, da ga dodam v sistem. Seveda na tej točki ne bi prinesel nobenih pomembnih podatkov.

2. korak: Iskanje podatkov na senzorju

Iskanje podatkov na senzorju
Iskanje podatkov na senzorju

Kot pri vseh napravah Bluetooth LE je prva stvar, ki jo želite narediti, da se pozanimate o storitvah, ki jih ponuja, in njihovih značilnostih. Nekje tam so dejanski podatki skriti. S hitrim tiskalniškim odpravljanjem napak, ki je preletel vse odkrite storitve in natisnil njihove lastnosti, sem bil na mestu, kjer sem lahko primerjal informacije, ki sem jih našel na internetu, s tem, kar naprava dejansko poroča.

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

Različica vdelane programske opreme in raven napolnjenosti baterije sta bili enostavni. Že pri prvem poskusu naštevanja podatkov sem lahko videl ustrezne vrednosti. Dejanske vrednosti senzorjev so v njem skrite nekoliko globlje, vendar so z združevanjem s podatki iz interneta takoj pokazale, kje jih najdete in zlasti, kako jih prebrati.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & karakteristika, const QByteArray & vrednost) {qCDebug (dcFlowerCare ()) << "Značilno branje" << QString:: številka (značilna.handle (), 16) temp; preskok qint8; tok >> preskoči; quint32 luksov; tok >> lux; qint8 vlaga; tok >> vlaga; qint16 plodnost; tok >> rodnost; oddajajo končane (m_batteryLevel, 1,0 * temp / 10, lux, vlaga, plodnost); }

Če to združimo, je vtičnik že začel proizvajati pomembne podatke.

3. korak: Zaključni dotiki

Zaključni dotiki
Zaključni dotiki

Tako je v bistvu zdaj delovalo, vendar je eno vprašanje še vedno ostalo tam. Senzor FlowerCare bi v nasprotju s Texas Instruments SensorTag po nekaj sekundah prekinil povezavo Bluetooth. Glede na primer uporabe se zdi, da to ni problem, saj je precej zanesljiv pri odzivanju na poskuse povezave. Glede na to, da običajno rastlina ne sesa litra vode v nekaj minutah, ampak v nekaj dneh, se ne zdi nujno, da ostanemo ves čas povezani. Tudi to bi precej izpraznilo baterijo. Zato sem se odločil, da dodam PluginTimer, ki bi senzor ponovno povezal vsakih 20 minut in iz njega pribral podatke. Če se iz nekega razloga senzor ne odzove na poskus povezave, se koda zažene z drugim časovnikom, ki se od te točke poskuša znova povezati vsako minuto, dokler ne uspe pridobiti podatkov. Nato bi se znova vrnili k pridobivanju podatkov v 20 -minutnem intervalu. Če se naprava ne poveže dvakrat zapored (to pomeni po 20 + 1 minutah), bo v sistemu označena kot brez povezave, uporabnik pa je lahko o tem opozorjen.

void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Osvežujoč" naslov (); flowerCare-> osvežiData (); } else {qCDebug (dcFlowerCare ()) << "Ne osvežuje" naslova () << "Naslednja osvežitev v" << m_refreshMinutes [flowerCare] << "minute"; } // Če smo imeli 2 ali več neuspešnih poskusov povezave, ga označimo kot prekinjenega, če (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Ni bilo mogoče osvežiti za" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

S to strategijo je zdaj zdelo, da nymea prinaša popolnoma zanesljive podatke s tega senzorja.

4. korak: Uporaba v večjem kontekstu

Uporaba v širšem kontekstu
Uporaba v širšem kontekstu
Uporaba v širšem kontekstu
Uporaba v širšem kontekstu

Samo pridobivanje vrednosti iz senzorja ni tako koristno, za to bi lahko uporabil tudi prvotno aplikacijo. Zdaj pa naredimo nekaj pametnih stvari z njim.

Nymea podpira pošiljanje potisnih obvestil bodisi na telefone z nameščeno aplikacijo nymea: ali prek PushBullet. Zato je očitno, da si pošljem nekaj potisnih obvestil, kadar vlaga v tleh pade pod 15%. To je precej enostavno nastaviti v aplikaciji. Predpogoj je, da potrebujete račun v nymea: cloud ali na PushBullet. Za potisna obvestila na osnovi nymea: cloud je dovolj, da omogočite nymea: cloud na nymea: core in v nymea: app. Takoj, ko sta oba povezana, se samodejno prikaže obvestilo. Če želite PushBullet dodati novo stvar v sistem, boste na seznamu našli PushBullet. Od vas bo zahteval ključ API, ki ga dobite ob prijavi z PushBullet. Ko imate v nymei potisno obvestilo, lahko ustvarite pravilo.

Seveda lahko naredite karkoli želite … Lahko tudi prižgete luč, da odraža vrednosti senzorjev, ali uporabite vtičnik poveljnika HTTP, da na primer objavite vrednosti senzorjev na strežniku v internetu. Nimam ventila za vodo ki jih je mogoče (še) digitalno nadzirati, seveda pa, če imate kaj takega in ga nymea še ne podpira, bi bilo dodajanje vtičnika za to precej podobno kot to.

5. korak: Zaključek besed

Zaključne besede
Zaključne besede

Vtičnik za nego cvetja je bil do zdaj sprejet navzgor in če imate enega od teh, je zdaj pripravljen za uporabo z nymeo. Upam pa, da bi bil ta članek zanimiv, če želi kdo dodati podporo za druge naprave. To bi morala biti predstavitev, kako zgraditi lasten vtičnik za nymea.

Če želite to nastavitev samo zgraditi doma, potrebujete le senzor FlowerCare, Raspberry Pi, podobo skupnosti nymea (do sedaj vključuje vtičnik za nego cvetja) in aplikacijo nymea:, ki je na voljo v trgovinah z aplikacijami. Tudi moja Monstera Deliciosa je zaenkrat spet srečna in kot ste morda videli na posnetkih zaslona, sem si priskrbel še enega od teh senzorjev za spremljanje zdravja moje limonine drevesa. Za to si pošiljam potisno obvestilo, kadar zunaj zmrzne, da ga lahko varno prenesem skozi zimo.

Priporočena: