Innehållsförteckning:
- Steg 1: Ladda en plugin -plugg
- Steg 2: Hitta data på sensorn
- Steg 3: Finisher
- Steg 4: Använda det i större sammanhang
- Steg 5: Avslutande ord
Video: FlowerCare och Nymea för att rädda mina växter: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
Får smutsiga händer när jag ansluter växtvårdssensorer till mitt befintliga smarta hem med öppen källkod. En genomgång om plugin -utveckling för nymea.
Berättelsen
Som många andra pysslare och hackare lider jag också av problemet att hacka på saker tar så mycket av min tid att jag ibland glömmer att vattna mina växter. Efter att min Monstera Deliciosa återigen led av torr jord, bestämde jag mig för att se om jag kan göra något åt det för att påminna mig när det är törstigt.
En snabb forskning på webben uppmärksammade Xiaomi FlowerCare, även känd som MiCare eller PlantCare. Det är en Bluetooth Low Energy -enhet och en del grundläggande forskning visade att dess protokoll verkar vara ganska lätt att förstå. Även om Xiaomi inte verkar ge några offentliga specifikationer, har det varit ganska lite omvänd teknik på internet för den här enheten än. Så jag bestämde mig för att beställa en av dem.
Några dagar senare levererades det och jag började naturligtvis leka med det direkt. Jag kollade kort på appen som följer med, men som du säkert kan gissa var det aldrig min plan att använda den i standardinställningen. Naturligtvis måste detta integreras med min befintliga installation av smarta hem. Som beskrivs här använder jag nymea som min smarta hemlösning (Ja, du kan till och med se Monstera på en av bilderna där:)). Tyvärr stödde nymea inte den sensorn ännu, så det var på sin plats att elda upp lite IDE.
Steg 1: Ladda en plugin -plugg
Så det första jag gjorde var att kopiera det befintliga pluginprogrammet för Texas Instruments Sensor Tag, det verkade tillräckligt likt det jag antog skulle fungera även för FlowerCare -enheten. Efter det grundläggande namnet på saker i plugininfo.json och kommenterade bort det mesta av sensortag -pluginens kod var jag redo att ladda den nya plugin -stubben.
Som förväntat skulle upptäckten redan visa sensorn direkt och tillåta mig att lägga till den i systemet. Naturligtvis skulle det inte ge några meningsfulla data vid denna tidpunkt.
Steg 2: Hitta data på sensorn
Som med alla andra Bluetooth LE -enheter är det första du vill göra att ta reda på vilka tjänster den erbjuder och deras egenskaper. Någonstans där inne är de faktiska uppgifterna dolda. Med ett snabbt felsökningsutskrift över alla upptäckta tjänster och utskrift av deras egenskaper var jag på den punkt där jag kunde jämföra informationen jag hittade på internet med vad enheten faktiskt rapporterar.
void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (sender ()); qCDebug (dcFlowerCare ()) << "har serviceuuider"
Firmwareversionen och batterinivån var enkla. Jag kunde redan se de motsvarande värdena tryckta i detta allra första försök att lista uppgifterna. De faktiska sensorvärdena är dolda lite djupare där inne, men att kombinera det med data från internet påpekade omedelbart var man kan hitta det och särskilt hur man läser det.
void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & characterist, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Characteristic read" << QString:: number (character.handle (), 16) temp; qint8 hoppa; ström >> hoppa över; quint32 lux; ström >> lux; qint8 fukt; ström >> fukt; qint16 fertilitet; ström >> fertilitet; avge färdigt (m_batteryLevel, 1,0 * temp / 10, lux, fukt, fertilitet); }
Genom att sätta ihop detta började pluginet redan producera meningsfulla data.
Steg 3: Finisher
Så det fungerade i princip nu, men en fråga var fortfarande kvar där. FlowerCare -sensorn skulle, i motsats till Texas Instruments SensorTag, avbryta Bluetooth -anslutningen efter några sekunder. Med tanke på användningsfallet verkar det dock inte vara ett problem eftersom det är ganska tillförlitligt när det gäller att svara på anslutningsförsök. Med tanke på att en växt normalt inte suger upp en liter vatten inom några minuter, utan snarare dagar, verkar det inte nödvändigt att hålla kontakten hela tiden. Detta skulle också tömma batteriet ganska mycket. Så jag bestämde mig för att lägga till en PluginTimer som skulle ansluta sensorn igen var 20: e minut och hämta data från den. Om sensorn av någon anledning inte skulle svara på anslutningsförsöket, startar koden en annan timer som försöker återansluta varje minut från den punkten tills den lyckas få data. Sedan skulle det gå tillbaka för att hämta data om 20 minuters intervall igen. Om enheten misslyckas med att ansluta två gånger i rad (det vill säga efter 20 + 1 minuter), skulle den markeras offline i systemet och användaren kan varnas om det.
void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Refreshing" -adress (); flowerCare-> refreshData (); } annat {qCDebug (dcFlowerCare ()) << "Uppfriskar inte" -adress () << "Nästa uppdatering om" << m_refreshMinutes [flowerCare] << "minuter"; } // Om vi hade två eller flera misslyckade anslutningsförsök, markera det som bortkopplat om (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Det gick inte att uppdatera för" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}
Med denna strategi tycktes nymea nu leverera perfekt tillförlitliga data från denna sensor.
Steg 4: Använda det i större sammanhang
Att bara få värden från sensorn är inte så mycket användbart, men jag kunde också ha använt den ursprungliga appen för det. Låt oss nu göra några smarta saker med det.
Nymea stöder att skicka push -meddelanden, antingen till telefoner med nymea: app installerad eller via PushBullet. Så det uppenbara är att skicka mig några push -meddelanden när jordfuktigheten faller under 15%. Det är ganska enkelt att ställa in det i appen. Som en förutsättning behöver du antingen ett konto i nymea: cloud eller på PushBullet. För nymea: molnbaserade push -meddelanden är det tillräckligt för att aktivera nymea: cloud på nymea: core och i nymea: app. Så snart båda är anslutna visas en avisering automatiskt. För att PushBullet lägger till en ny sak i systemet, hittar du PushBullet i listan där. Det kommer att be dig om API -nyckeln du får när du registrerar dig med PushBullet. När du väl har en push -anmälan i nymea kan du skapa en regel.
Självklart kan du göra vad du vill … Kan också tända lite ljus för att återspegla sensorvärden, eller använda HTTP -kommandon -plugin för att posta sensorvärden till en server på internet till exempel. Jag har ingen vattenventil som kan styras digitalt (ännu) men naturligtvis, om du har en sådan sak och det inte stöds av nymea än, skulle ett plugin för det vara ganska lika än detta.
Steg 5: Avslutande ord
Flowercare -plugin har nu accepterats uppströms och om du har en av dem är den redo att användas med nymea nu. Jag hoppas dock att den här artikeln kan vara av intresse om någon vill lägga till stöd för andra enheter. Det borde vara en genomgång om hur du bygger ditt eget plugin för nymea.
Om du bara vill bygga den här installationen hemma är allt du behöver är FlowerCare -sensorn, en Raspberry Pi, nymea -communitybilden (den innehåller blomma vård -plugin nu) och nymea: app som finns i appbutiker. Än så länge är min Monstera Deliciosa glad igen och som du kanske har sett på skärmdumparna har jag skaffat mig en andra av dessa sensorer för att spåra hälsan på mitt citronträd också. För den skickar jag mig push -meddelande när det fryser ute så att jag kan ta det genom vintern på ett säkert sätt.
Rekommenderad:
Vattenvarning - en enhet för att rädda din båt: 5 steg (med bilder)
Vattenvarning - en enhet för att rädda din båt: Om du är en båtägare finns det solid komfort i att äntligen få båten på torrt land. Det kan inte sjunka där. Överallt annars står den inför en ständig kamp för att övervinna tendensen att glida under vågorna och försvinna. Under vintern här i tyvärr
Faxmaskin: Förklarande delar och vad som är värt att rädda: 9 steg
Faxmaskin: Förklarande delar och vad som är värt att rädda: Nyligen har jag hittat den här faxmaskinen. Jag rengjorde det och kopplade det med strömkabel och telefonlinje, och det fungerade korrekt, men jag behöver inte faxmaskin och jag tyckte att det skulle vara trevligt att ta isär den och göra en annan instruerbar om det. Jag
Skapa mina egna grafer för mina IOT -data på ett hallon -PI: 3 steg
Skapa mina egna grafer för mina IOT -data på en Raspberry PI: Läs vidare om du vill kunna skapa dina egna IOT -grafer med 7 rader kod.Jag ville skapa diagram för att visa data i ett grafiskt format från mina IOT -sensorer på en webbsida. Tidigare för detta hade jag använt tjänster från tredje part (några pa
DIY MusiLED, musiksynkroniserade lysdioder med ett klick Windows och Linux-applikation (32-bitars och 64-bitars). Lätt att återskapa, lätt att använda, lätt att porta .: 3 steg
DIY MusiLED, musiksynkroniserade lysdioder med ett klick Windows och Linux-applikation (32-bitars och 64-bitars). Lätt att återskapa, lätt att använda, lätt att porta .: Detta projekt hjälper dig att ansluta 18 lysdioder (6 röda + 6 blå + 6 gula) till ditt Arduino-kort och analysera datorns ljudkortets realtidsignaler och vidarebefordra dem till lysdioderna för att tända dem enligt slageffekterna (Snare, High Hat, Kick)
Övertyga dig själv om att bara använda en 12V-till-AC-omriktare för LED-ljussträngar istället för att koppla om dem för 12V: 3 steg
Övertyga dig själv om att bara använda en 12V-till-AC-linjeomvandlare för LED-ljussträngar istället för att koppla om dem för 12V: Min plan var enkel. Jag ville klippa upp en väggdriven LED-ljussträng i bitar och sedan dra om den för att gå av 12 volt. Alternativet var att använda en kraftomvandlare, men vi vet alla att de är fruktansvärt ineffektiva, eller hur? Höger? Eller är de det?