Përmbajtje:

FlowerCare dhe Nymea për të shpëtuar bimët e mia: 5 hapa
FlowerCare dhe Nymea për të shpëtuar bimët e mia: 5 hapa

Video: FlowerCare dhe Nymea për të shpëtuar bimët e mia: 5 hapa

Video: FlowerCare dhe Nymea për të shpëtuar bimët e mia: 5 hapa
Video: Mirëmëngjesi Kosovë - Kultivimi dhe karakteristika e lules ''Anthurium'' 18.03.2023 2024, Korrik
Anonim
FlowerCare dhe Nymea për të shpëtuar bimët e mia
FlowerCare dhe Nymea për të shpëtuar bimët e mia

Po i ndot duart në lidhjen e sensorëve të kujdesit të bimëve në shtëpinë time ekzistuese të zgjuar me burim të hapur. Një përparim mbi zhvillimin e shtojcave për nymea.

Historia

Si shumë kallajxhinj dhe hakerë të tjerë, edhe unë vuaj nga çështja se hakimi i gjërave më merr aq shumë kohë sa herë pas here harroj të ujis bimët e mia. Pasi Monstera Deliciosa ime vuajti edhe një herë nga toka e thatë, vendosa të shoh nëse mund të bëj diçka për të më kujtuar kur kam etje.

Një kërkim i shpejtë në internet solli vëmendjen time tek Xiaomi FlowerCare, i njohur gjithashtu si MiCare ose PlantCare. Shtë një pajisje Bluetooth me Energji të Ulët dhe disa hulumtime themelore zbuluan se protokolli i tij duket të jetë mjaft i lehtë për t’u kuptuar. Ndërsa Xiaomi nuk duket të japë ndonjë specifikim publik, ka pasur një inxhinieri të kundërt në internet për këtë pajisje akoma. Kështu që vendosa të porosis një prej tyre.

Disa ditë më vonë ajo u dorëzua dhe natyrisht fillova të luaj me të menjëherë. Unë e shikova shkurtimisht aplikacionin që vjen me të, por siç mund ta merrni me mend, përdorimi i tij në konfigurimin e tij të paracaktuar nuk ishte kurrë plani im. Sigurisht kjo duhet të integrohet me konfigurimin tim ekzistues të shtëpisë së zgjuar. Siç përshkruhet edhe këtu unë jam duke përdorur nymea si zgjidhjen time të zgjuar të shtëpisë (Po, madje mund ta dalloni Monstera -n në njërën nga fotografitë atje:)). Mjerisht, nymea nuk e mbështeti atë sensor akoma, kështu që ndezja e disa IDE ishte në rregull.

Hapi 1: Ngarkimi i një cungu shtojce

Ngarkimi i një cungu shtesë
Ngarkimi i një cungu shtesë
Ngarkimi i një cungu shtesë
Ngarkimi i një cungu shtesë
Ngarkimi i një cungu shtesë
Ngarkimi i një cungu shtesë

Pra, gjëja e parë që bëra ishte të kopjoja shtojcën ekzistuese Texas Instruments Sensor Tag, dukej mjaft e ngjashme me atë që mendova se duhet të funksionojë edhe për pajisjen FlowerCare. Pas riemërtimit bazë të gjërave në plugininfo.json dhe komentimit të pjesës më të madhe të kodit të shtojcës sensortag isha gati të ngarkoja cungun e ri të shtojcës.

Siç pritej, zbulimi tashmë do të tregonte sensorin menjëherë dhe do të më lejonte ta shtoja atë në sistem. Sigurisht që nuk do të prodhonte ndonjë të dhënë kuptimplotë në këtë pikë.

Hapi 2: Gjetja e të dhënave mbi sensorin

Gjetja e të dhënave mbi sensorin
Gjetja e të dhënave mbi sensorin

Ashtu si me çdo pajisje Bluetooth LE, gjëja e parë që dëshironi të bëni është të mësoni për shërbimet që ofron dhe karakteristikat e tyre. Diku atje të dhënat aktuale janë të fshehura. Me një korrigjim të shpejtë të lakimit mbi të gjitha shërbimet e zbuluara dhe printimin e karakteristikave të tyre unë isha në pikën ku mund të krahasoja informacionin që gjeta në internet me atë që pajisja raporton në të vërtetë.

void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = transmetim statik (dërguesi ()); qCDebug (dcFlowerCare ()) << "kanë shërbime uuids" kontrollues ()-> createServiceObject (sensorServiceUuid, kjo); lidheni (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); lidheni (m_sensorService, & QLowEnergyService:: karakteristikLexoni, këtë, & FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> DiscoverDetails (); } void FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & karakteristike, m_sensorService-> karakteristikat ()) {qCDebug (dcFlowerCare ()). hapësirë ajrore () <"<< karakteristike.uuid (). toString () <<" ("<< karakteristike. trajtoj () << "Emri:" << karakteristike.emri () << "):" << karakteristike.vlera () << "," << karakteristike.vlera (). TeHex (); foreach (const QLowEnergyDescriptor & descriptor, karakteristike. përshkruesit ()) {qCDebug (dcFlowerCare ()). hapësirë ajrore () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <<" Emri: "<< përshkrues.emri () << "):" << descriptor.vlera () << "," << descriptor.value (). toHex (); }}}

Versioni i firmuerit dhe niveli i baterisë ishin të lehta. Unë tashmë mund të shihja vlerat sipas të shtypura në këtë përpjekje të parë të listimit të të dhënave. Vlerat aktuale të sensorit janë të fshehura pak më thellë atje, por kombinimi i tij me të dhënat nga interneti tregoi menjëherë se ku mund ta gjeni dhe veçanërisht si t'i lexoni.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & karakteristike, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Lexo karakteristike" << QString:: numri (karakteristike. trajtoj (), 16) temp; qint8 kalo; lumë >> kalo; quint32 lux; lum >> luks; lagështi qint8; lum >> lagështi; pjelloria qint16; lumi >> pjelloria; lëshojnë përfunduar (m_batteryLevel, 1.0 * temp / 10, lux, lagështi, pjellori); }

Duke e bashkuar këtë, shtojca tashmë filloi të prodhojë të dhëna domethënëse.

Hapi 3: Përfundimi i Prekjeve

Prekjet përfundimtare
Prekjet përfundimtare

Kështu që në thelb funksionoi tani, megjithatë, një çështje ishte lënë akoma atje. Sensori FlowerCare, në kundërshtim me Texas Instruments SensorTag, do të heqë lidhjen Bluetooth pas disa sekondash. Duke marrë parasysh rastin e përdorimit, megjithatë, kjo nuk duket të jetë një çështje pasi është mjaft e besueshme për t'iu përgjigjur përpjekjeve të lidhjes. Duke pasur parasysh që normalisht një bimë nuk thith një litër ujë brenda pak minutash, por më tepër ditë, nuk duket e nevojshme të qëndrosh e lidhur gjatë gjithë kohës. Gjithashtu kjo do të mbaronte baterinë shumë. Kështu që vendosa të shtoj një PluginTimer i cili do të lidhte senzorin çdo 20 minuta dhe do të merrte të dhëna prej tij. Nëse, për ndonjë arsye, sensori nuk i përgjigjet përpjekjes së lidhjes, kodi do të fillojë një kohëmatës tjetër i cili përpiqet të rilidhet çdo minutë nga ajo pikë e tutje derisa të arrijë të marrë të dhënat. Pastaj do të kthehej për të marrë përsëri të dhëna në intervalin 20 minuta. Nëse pajisja nuk lidhet dy herë me radhë (do të thotë, pas 20 + 1 minutash), do të shënohej jashtë linje në sistem dhe përdoruesi mund të paralajmërohet për këtë.

pavlefshme DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Freskuese" adresa (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << Adresa nuk është freskuese () <<”Freskimi tjetër në” << m_refreshMinutes [flowerCare] << "minuta"; } // Nëse do të kishim 2 ose më shumë përpjekje të dështuara të lidhjes, shënojeni si të shkëputur nëse (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Nuk u rifreskua për" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

Me këtë strategji nymea tani dukej se jepte të dhëna krejtësisht të besueshme nga ky sensor.

Hapi 4: Përdorimi i tij në kontekstin më të madh

Përdorimi i tij në kontekstin më të madh
Përdorimi i tij në kontekstin më të madh
Përdorimi i tij në kontekstin më të madh
Përdorimi i tij në kontekstin më të madh

Thjesht marrja e vlerave nga sensori nuk është aq e dobishme, megjithatë, unë gjithashtu mund të kisha përdorur aplikacionin origjinal për këtë. Tani le të bëjmë disa gjëra të zgjuara me të.

Nymea mbështet dërgimin e njoftimeve push, ose në telefonat me nymea: aplikacioni i instaluar, ose përmes PushBullet. Pra, gjëja e dukshme për të bërë është t'i dërgoj vetes disa njoftime shtytëse sa herë që lagështia e tokës bie nën 15%. Rathershtë mjaft e lehtë për ta vendosur atë në aplikacion. Si parakusht, ose keni nevojë për një llogari në nymea: cloud ose në PushBullet. Për nymea: cloud njoftimet shtytëse është e mjaftueshme për të aktivizuar nymea: cloud në nymea: core dhe në nymea: app. Sapo të lidhen të dy, një gjë njoftimi do të shfaqet automatikisht. Për PushBullet shtoni një gjë të re në sistem, do të gjeni PushBullet në listën atje. Do t'ju kërkojë çelësin API që merrni kur regjistroheni me PushBullet. Pasi të keni një gjë njoftimi push në nymea, mund të krijoni një rregull.

Sigurisht që mund të bësh çfarë të duash… Mund të ndezësh pak dritë në mënyrë që të pasqyrojë vlerat e sensorit, ose të përdorësh shtojcën e komandantit HTTP për të postuar vlerat e sensorit në një server në internet për shembull. Unë nuk kam valvulë uji i cili mund të kontrollohet në mënyrë dixhitale (akoma) por natyrisht, nëse keni një gjë të tillë dhe nuk mbështetet ende nga nymea, shtimi i një shtojce për këtë do të ishte më tepër i ngjashëm se ky.

Hapi 5: Mbyllja e Fjalëve

Mbyllja e Fjalëve
Mbyllja e Fjalëve

Shtojca Flowercare është pranuar deri tani dhe nëse keni një prej tyre është gati të përdoret me nymea tani. Sidoqoftë, shpresoj se ky artikull mund të jetë me interes nëse dikush dëshiron të shtojë mbështetje për pajisjet e tjera. Duhet të jetë një hap përpara se si të krijoni shtojcën tuaj për nymea.

Nëse doni ta ndërtoni këtë konfigurim në shtëpinë tuaj, gjithçka që ju nevojitet është sensori FlowerCare, një Raspberry Pi, imazhi i komunitetit nymea (përfshin deri më tani shtojcën për kujdesin e luleve) dhe nymea: aplikacioni i cili është i disponueshëm në dyqanet e aplikacioneve. Gjithashtu, deri më tani Monstera Deliciosa ime është përsëri e lumtur dhe siç mund ta keni parë në pamjet e ekranit, unë kam marrë veten një të dytin nga ata sensorë për të ndjekur shëndetin e pemës sime të limonit gjithashtu. Për atë që po i dërgoj vetes një njoftim push sa herë që është ngrirë jashtë, kështu që unë mund ta sjell atë gjatë dimrit në mënyrë të sigurt.

Recommended: