Innholdsfortegnelse:
- Trinn 1: Få en pluginstubbe lastet
- Trinn 2: Finne data på sensoren
- Trinn 3: Etterbehandling
- Trinn 4: Bruk den i større sammenheng
- Trinn 5: Avsluttende ord
Video: FlowerCare og Nymea for å redde plantene mine: 5 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
Å bli skitten på å koble plantesorgssensorer til mitt eksisterende åpen kildekode -smarthjem. En gjennomgang av plugin -utvikling for nymea.
Historien
Som mange andre tinkerers og hackere, lider jeg også av problemet med at hacking på ting tar så mye av tiden min at jeg noen ganger glemmer å vanne plantene mine. Etter at Monstera Deliciosa igjen led av tørr jord, bestemte jeg meg for å se om jeg kan gjøre noe med det for å minne meg på når det er tørst.
En rask undersøkelse på nettet vekket min oppmerksomhet på Xiaomi FlowerCare, også kjent som MiCare eller PlantCare. Det er en Bluetooth Low Energy -enhet, og noen grunnleggende undersøkelser viste at protokollen ser ut til å være ganske lett å forstå. Selv om Xiaomi ikke ser ut til å gi noen offentlige spesifikasjoner, har det vært ganske mye reverse engineering på internett for denne enheten ennå. Så jeg bestemte meg for å bestille en av dem.
Noen dager senere ble den levert, og jeg begynte selvfølgelig å leke med den med en gang. Jeg sjekket kort ut appen som følger med, men som du sikkert kan gjette, var det aldri planen min å bruke den i standardoppsettet. Selvfølgelig må dette integreres med mitt eksisterende smarthusoppsett. Som beskrevet her bruker jeg nymea som min smarthusløsning (Ja, du kan til og med se Monstera på et av bildene der:)). Dessverre støttet nymea ikke den sensoren ennå, så det var på sin plass å fyre opp noen IDE.
Trinn 1: Få en pluginstubbe lastet
Så det første jeg gjorde var å kopiere den eksisterende Texas Instruments Sensor Tag -pluginen, den virket lik nok til det jeg antok skulle fungere for FlowerCare -enheten også. Etter den grunnleggende omdøpet av ting i plugininfo.json og kommenterte bort det meste av sensortag -plugin -koden, var jeg klar til å laste den nye plugin -stubben.
Som forventet vil oppdagelsen allerede vise sensoren med en gang og tillate meg å legge den til systemet. Selvfølgelig ville det ikke produsere noen meningsfylte data på dette tidspunktet.
Trinn 2: Finne data på sensoren
Som med alle Bluetooth LE -enheter, er det første du vil gjøre å finne ut om tjenestene den tilbyr og deres egenskaper. Et sted der inne er de faktiske dataene skjult. Med en rask feilsøkingsutskrift sløyfe over alle de oppdagede tjenestene og skrive ut deres egenskaper, var jeg på det tidspunktet hvor jeg kunne sammenligne informasjonen jeg fant på internett med det enheten faktisk rapporterer.
void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (sender ()); qCDebug (dcFlowerCare ()) << "har service uuids"
Fastvareversjonen og batterinivået var enkelt. Jeg kunne allerede se de tilsvarende verdiene trykt i dette aller første forsøket på å liste opp dataene. De faktiske sensorverdiene er skjult litt dypere der inne, men å kombinere den med dataene fra internett påpekte umiddelbart hvor du skal finne den og spesielt hvordan du kan lese den.
void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & characteristic, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Characteristic read" << QString:: number (character.handle (), 16) temp; qint8 hoppe; strøm >> hopp; quint32 lux; strøm >> lux; qint8 fuktighet; strøm >> fuktighet; qint16 fruktbarhet; strøm >> fruktbarhet; avgir ferdig (m_batteryLevel, 1,0 * temp / 10, lux, fuktighet, fruktbarhet); }
Ved å sette dette sammen begynte pluginet allerede å produsere meningsfylte data.
Trinn 3: Etterbehandling
Så det fungerte i utgangspunktet nå, men et problem var fortsatt der. FlowerCare -sensoren ville, i motsetning til Texas Instruments SensorTag, avbryte Bluetooth -tilkoblingen etter noen få sekunder. Med tanke på brukstilfellet ser dette imidlertid ikke ut til å være et problem, da det er ganske pålitelig når det gjelder å svare på tilkoblingsforsøk. Gitt at en plante vanligvis ikke suger opp en liter vann i løpet av minutter, men heller dager, virker det ikke nødvendig å være tilkoblet hele tiden. Dette vil også tappe batteriet ganske mye. Så jeg bestemte meg for å legge til en PluginTimer som vil koble sensoren til igjen hvert 20. minutt og hente data fra den. Hvis sensoren av en eller annen grunn ikke reagerer på tilkoblingsforsøket, starter koden en annen timer som prøver å koble til igjen hvert minutt fra det tidspunktet til den klarer å hente dataene. Deretter vil den gå tilbake for å hente data om 20 -minuttersintervallet igjen. Hvis enheten ikke klarer å koble til to ganger på rad (det vil si etter 20 + 1 minutter), vil den bli merket frakoblet i systemet, og brukeren kan varsles om det.
void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Refreshing" adresse (); flowerCare-> refreshData (); } annet {qCDebug (dcFlowerCare ()) << "Ikke forfriskende" adresse () << "Neste oppdatering om" << m_refreshMinutes [flowerCare] << "minutter"; } // Hvis vi hadde 2 eller flere mislykkede tilkoblingsforsøk, merker du det som frakoblet hvis (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Kunne ikke oppdatere for" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}
Med denne strategien syntes nymea nå å levere helt pålitelige data fra denne sensoren.
Trinn 4: Bruk den i større sammenheng
Bare det å få verdier fra sensoren er ikke så nyttig, men jeg kunne også ha brukt den originale appen til det. La oss gjøre noen smarte ting med det.
Nymea støtter sending av push -varsler, enten til telefoner med nymea: app installert, eller via PushBullet. Så den åpenbare tingen å gjøre er å sende meg noen push -varsler når jordfuktigheten faller under 15%. Det er ganske enkelt å sette det opp i appen. Som en forutsetning trenger du enten en konto i nymea: cloud eller på PushBullet. For nymea: skybaserte push -varsler er det nok til å aktivere nymea: cloud på nymea: core og i nymea: app. Så snart begge er tilkoblet, vil det automatisk vises en varsling. For PushBullet, legg til en ny ting i systemet, du finner PushBullet på listen der. Det vil be deg om API -nøkkelen du får når du registrerer deg med PushBullet. Når du har en push -varsling i nymea, kan du opprette en regel.
Selvfølgelig kan du gjøre hva du vil … Kan også slå på noe lys for å reflektere sensorverdier, eller bruke HTTP -kommandor -pluginet for å legge sensorverdier til en server på internett for eksempel. Jeg har ikke en vannventil som kan styres digitalt (ennå), men selvfølgelig, hvis du har noe slikt og det ikke er støttet av nymea ennå, vil det å legge til et plugin for det være ganske likt enn dette.
Trinn 5: Avsluttende ord
Flowercare -pluginet har blitt akseptert oppstrøms nå, og hvis du har en av dem, er den klar til bruk med nymea nå. Imidlertid håper jeg denne artikkelen kan være av interesse hvis noen vil legge til støtte for andre enheter. Det bør være en gjennomgang om hvordan du bygger ditt eget plugin for nymea.
Hvis du bare vil bygge dette oppsettet hjemme, trenger du bare FlowerCare -sensoren, en Raspberry Pi, nymea community -bildet (det inkluderer plugin for blomsterpleie nå) og nymea: app som er tilgjengelig i appbutikker. Også, så langt er Monstera Deliciosa min lykkelig igjen, og som du kanskje har sett på skjermbildene, har jeg skaffet meg en annen av disse sensorene for å spore helsen til sitrontreet mitt også. For den sender jeg meg selv pushvarsling når det fryser ute, så jeg kan ta det trygt gjennom vinteren.
Anbefalt:
Vannvarsel - en enhet for å redde båten din: 5 trinn (med bilder)
Vannvarsel - en enhet for å redde båten din: Hvis du er en båteier, er det solid komfort å endelig få båten på tørt land. Det kan ikke synke der. Overalt ellers står den overfor en konstant kamp for å overvinne tendensen til å gli under bølgene og forsvinne. Om vinteren her i Alas
Arduino Soil Moisture Monitoring Stick - Glem aldri å vanne plantene dine: 4 trinn (med bilder)
Arduino Soil Moisture Monitoring Stick - Glem aldri å vanne plantene dine: Glemmer du ofte å vanne innendørs planter? Eller kanskje du gir dem for mye oppmerksomhet og over vann dem? Hvis du gjør det, bør du lage deg en batteridrevet jordfuktighetsovervåkingspinne. Denne skjermen bruker en kapasitiv jordfuktighet
Vet du hvordan plantene dine har det? [Particle+Ubidots]: 6 trinn
Vet du hvordan plantene dine har det? [Particle+Ubidots]: Ingenting vil erstatte å gå ut og håndtere jord for deg selv, men dagens teknologi har gjort det mulig å fjernovervåke jord og spore parametere som ikke kan måles mine menneskelige sanser. Jordprober som SHT10 er nå ekstremt nøyaktige og tilbyr
XYZ -punktskanner ved bruk av redde roterende kodere: 5 trinn
XYZ -punktskanner ved bruk av redde roterende kodere: Etter å ha skaffet meg et stort antall kasserte roterende optiske kodere fra arbeidsplassen min, bestemte jeg meg endelig for å gjøre noe morsomt/nyttig med dem. Jeg har nylig kjøpt en ny 3D -skriver til hjemmet mitt og hva kan komplimentere det bedre enn en 3D -serie
Lag mine egne grafer for mine IOT -data på en bringebær -PI: 3 trinn
Lag mine egne grafer for mine IOT -data på en Raspberry PI: Les videre hvis du vil kunne lage dine egne IOT -grafer ved hjelp av 7 linjer med kode. Jeg ønsket å lage diagrammer for å vise data i et grafisk format fra IOT -sensorene mine på en webside. Tidligere, for dette, hadde jeg brukt tredjepartstjenester (noen pa