Indholdsfortegnelse:
- Trin 1: Få en plugin -stub indlæst
- Trin 2: Find data på sensoren
- Trin 3: Efterbehandling
- Trin 4: Brug det i større sammenhæng
- Trin 5: Luk ord
Video: FlowerCare og Nymea for at redde mine planter: 5 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
Får hænderne beskidt på at tilslutte planteplejesensorer til mit eksisterende open source -smart hjem. En gennemgang af plugin -udvikling til nymea.
Historien
Som mange andre tinkerere og hackere lider jeg også af det problem, at hacking på ting tager så meget af min tid, at jeg lejlighedsvis glemmer at vande mine planter. Efter min Monstera Deliciosa igen led af tør jord, besluttede jeg mig for at se, om jeg kan gøre noget ved det for at minde mig om, når det er tørstigt.
En hurtig research på nettet henledte min opmærksomhed på Xiaomi FlowerCare, også kendt som MiCare eller PlantCare. Det er en Bluetooth Low Energy -enhed, og nogle grundlæggende undersøgelser afslørede, at dens protokol ser ud til at være ret let at forstå. Selvom Xiaomi ikke ser ud til at levere nogen offentlige specifikationer, har der været en del reverse engineering på internettet for denne enhed endnu. Så jeg besluttede at bestille en af dem.
Et par dage senere blev det leveret, og jeg begyndte selvfølgelig at lege med det med det samme. Jeg tjekkede kort den app, der følger med den, men som du sikkert kan gætte, var det aldrig min plan at bruge den i standardopsætningen. Selvfølgelig skal dette integreres med mit eksisterende smart home setup. Som beskrevet her bruger jeg nymea som min smart home løsning (Ja, du kan endda se Monstera på et af billederne der:)). Desværre understøttede nymea ikke den sensor endnu, så det var på sin plads at fyre lidt IDE op.
Trin 1: Få en plugin -stub indlæst
Så det første, jeg gjorde, var at kopiere det eksisterende Texas Instruments Sensor Tag -plugin, det lignede nok nok det, jeg antog også skulle fungere for FlowerCare -enheden. Efter den grundlæggende omdøbning af ting i plugininfo.json og kommentering af det meste af sensortag -plugins kode var jeg klar til at indlæse den nye plugin -stub.
Som forventet ville opdagelsen allerede vise sensoren med det samme og give mig mulighed for at tilføje den til systemet. Det ville naturligvis ikke producere nogen meningsfulde data på dette tidspunkt.
Trin 2: Find data på sensoren
Som med enhver Bluetooth LE -enhed er det første, du vil gøre, at finde ud af om de tjenester, den tilbyder og deres egenskaber. Et eller andet sted derinde er de faktiske data skjult. Med en hurtig fejlfinding udskriver looping over alle de opdagede tjenester og udskriver deres egenskaber, jeg var på det punkt, hvor jeg kunne sammenligne de oplysninger, jeg fandt på internettet, med hvad enheden rent faktisk rapporterer.
void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (sender ()); qCDebug (dcFlowerCare ()) << "have service uuids"
Firmwareversionen og batteriniveauet var let. Jeg kunne allerede se de tilsvarende værdier trykt i dette allerførste forsøg på at liste dataene. De faktiske sensorværdier er skjult lidt dybere derinde, men at kombinere det med dataene fra internettet påpegede straks, hvor man kan finde det og især hvordan man læser det.
void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & character, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Karakteristisk læs" << QString:: number (character.handle (), 16) temp; qint8 spring; stream >> spring; quint32 lux; strøm >> lux; qint8 fugt; strøm >> fugtighed; qint16 frugtbarhed; strøm >> frugtbarhed; udsende færdig (m_batteryLevel, 1,0 * temp / 10, lux, fugt, frugtbarhed); }
Ved at sætte dette sammen begyndte pluginet allerede at producere meningsfulde data.
Trin 3: Efterbehandling
Så det fungerede stort set nu, men et problem var stadig tilbage der. FlowerCare -sensoren ville i modsætning til Texas Instruments SensorTag afbryde Bluetooth -forbindelsen efter et par sekunder. I betragtning af brugssagen synes dette dog ikke at være et problem, da det er ganske pålideligt til at reagere på forbindelsesforsøg. I betragtning af at en plante normalt ikke suger en liter vand inden for få minutter, men snarere dage, ser det ikke ud til at være nødvendigt at være forbundet hele tiden. Dette ville også tømme batteriet ret meget. Så jeg besluttede at tilføje en PluginTimer, som ville tilslutte sensoren igen hvert 20. minut og hente data fra den. Hvis sensoren af en eller anden grund ikke reagerer på forbindelsesforsøget, starter koden en anden timer, der forsøger at genoprette forbindelse hvert minut fra det tidspunkt, indtil den formår at få dataene. Derefter ville det gå tilbage for at hente data om intervallet på 20 minutter igen. Hvis enheden ikke opretter forbindelse to gange i træk (hvilket betyder, efter 20 + 1 minutter), vil den blive markeret offline i systemet, og brugeren kan blive advaret om det.
void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Opfriskende" adresse (); flowerCare-> refreshData (); } ellers {qCDebug (dcFlowerCare ()) << "Ikke forfriskende" adresse () << "Næste opdatering om" << m_refreshMinutes [flowerCare] << "minutter"; } // Hvis vi havde 2 eller flere mislykkede forbindelsesforsøg, skal du markere det som frakoblet, hvis (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Opdateringen mislykkedes for" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}
Med denne strategi syntes nymea nu at levere perfekt pålidelige data fra denne sensor.
Trin 4: Brug det i større sammenhæng
Bare det at få værdier fra sensoren er dog ikke så meget nyttig, jeg kunne også have brugt den originale app til det. Lad os nu gøre nogle smarte ting med det.
Nymea understøtter afsendelse af push -meddelelser, enten til telefoner med nymea: app installeret eller via PushBullet. Så den oplagte ting at gøre er at sende mig nogle push -notifikationer, når jordfugtigheden falder til under 15%. Det er ret let at konfigurere det i appen. Som forudsætning har du enten brug for en konto i nymea: cloud eller på PushBullet. For nymea: skybaserede push -notifikationer er det nok til at aktivere nymea: cloud på nymea: core og i nymea: app. Så snart begge er forbundet, vises der automatisk en meddelelse. For PushBullet tilføj en ny ting i systemet, du finder PushBullet på listen der. Det vil bede dig om den API -nøgle, du får, når du tilmelder dig PushBullet. Når du har en push -meddelelses ting i nymea, kan du oprette en regel.
Selvfølgelig kan du gøre hvad du vil … Kan også tænde noget lys for at afspejle sensorværdier, eller bruge HTTP -kommandor -plugin til f.eks. At sende sensorværdier til en server på internettet. Jeg har ikke en vandventil som kan styres digitalt (endnu), men selvfølgelig, hvis du har sådan noget, og det ikke er understøttet af nymea endnu, vil tilføjelse af et plugin til det være snarere ens end dette.
Trin 5: Luk ord
Flowercare -pluginet er nu blevet accepteret opstrøms, og hvis du har en af dem, er det klar til at blive brugt med nymea nu. Jeg håber dog, at denne artikel kan være af interesse, hvis nogen vil tilføje support til andre enheder. Det burde være en gennemgang om, hvordan du bygger dit eget plugin til nymea.
Hvis du bare vil bygge denne opsætning i dit hjem, er alt, hvad du behøver, FlowerCare -sensoren, en Raspberry Pi, nymea -community -billedet (det inkluderer plug -in til blomsterpleje nu) og nymea: app, der er tilgængelig i app -butikker. Også indtil videre er min Monstera Deliciosa glad igen, og som du måske har set på skærmbillederne, har jeg også fået mig en anden af disse sensorer til at spore mit citrontræs sundhed. Til den sender jeg mig selv push -besked, når det fryser udenfor, så jeg kan bringe det sikkert gennem vinteren.
Anbefalede:
Vandadvarsel - en enhed til at redde din båd: 5 trin (med billeder)
Vandadvarsel - en enhed til at redde din båd: Hvis du er en bådsejer, er der solid komfort i endelig at få båden på tørt land. Det kan ikke synke der. Alle andre steder står den over for en konstant kamp for at overvinde tendensen til at glide under bølgerne og forsvinde. I løbet af vinteren her i Ak
Redde det kedelige liv med en smart lampe: 3 trin
Red det kedelige liv med en smart lampe: Vi håber alle, at vi kan leve mere komfortabelt derhjemme. Om du ofte føler dig utilpas, fordi dæmpningen af husholdningslamper ikke er smart nok? Eller om du føler dig ensformig fordi husholdningslampens funktion? Denne lampe kan løse din tr
Faxmaskine: Forklarende dele og hvad der er værd at redde: 9 trin
Faxmaskine: Forklarende dele og hvad der er værd at redde: For nylig har jeg fundet denne faxmaskine. Jeg rensede det og tilsluttede det med strømkabel og telefonlinje, og det fungerede korrekt, men jeg har ikke brug for faxmaskine, og jeg tænkte, at det ville være rart at skille det ad og lave en anden instruerbar om det. JEG
DVD -afspiller: Forklarende dele og hvad der er værd at redde: 9 trin
DVD -afspiller: Forklarende dele og hvad der er værd at redde: I dag tager vi et kig på denne gamle DVD -afspiller. Det fungerede ikke korrekt, så jeg besluttede at åbne det og se, hvad der er indeni. Problemet var, at den konstant åbnede og lukkede, og den ikke ville læse fra disken. Jeg vil forklare det grundlæggende
Opret mine egne grafer til mine IOT -data på en Raspberry PI: 3 trin
Opret mine egne grafer til mine IOT -data på en Raspberry PI: Læs venligst videre, hvis du vil være i stand til at oprette dine egne IOT -grafer ved hjælp af 7 linjer med kode.Jeg ville oprette diagrammer til visning af data i et grafisk format fra mine IOT -sensorer på en webside. Tidligere til dette havde jeg brugt tredjepartstjenester (nogle pa