Բովանդակություն:

FlowerCare և Nymea ՝ իմ բույսերը փրկելու համար. 5 քայլ
FlowerCare և Nymea ՝ իմ բույսերը փրկելու համար. 5 քայլ

Video: FlowerCare և Nymea ՝ իմ բույսերը փրկելու համար. 5 քայլ

Video: FlowerCare և Nymea ՝ իմ բույսերը փրկելու համար. 5 քայլ
Video: Anthurium care without roots #learngardening 2024, Հուլիսի
Anonim
FlowerCare և Nymea ՝ իմ բույսերը փրկելու համար
FlowerCare և Nymea ՝ իմ բույսերը փրկելու համար

Ձեռքերս կեղտոտել `բույսերի խնամքի տվիչները միացնելով իմ առկա բաց կոդով խելացի տանը: Քայլ առ քայլ nymea- ի պլագինների մշակման վերաբերյալ:

Պատմություն

Ինչպես շատ այլ հնարքագործներ և հակերներ, ես նույնպես տառապում եմ այն հարցով, որ իրերի վրա կոտրելը այնքան ժամանակ է խլում, որ երբեմն մոռանում եմ ջրել իմ բույսերը: Այն բանից հետո, երբ իմ Monstera Deliciosa- ն կրկին տառապեց չոր հողից, ես որոշեցի տեսնել, թե արդյոք կարո՞ղ եմ ինչ -որ բան անել դրա մասին `հիշեցնելու ինձ, երբ ծարավ է:

Համացանցում կատարված արագ հետազոտությունը իմ ուշադրությունը հրավիրեց Xiaomi FlowerCare- ի վրա, որը նաև հայտնի է որպես MiCare կամ PlantCare: Դա Bluetooth Energyածր էներգիայի սարք է, և որոշ հիմնական հետազոտություններ պարզել են, որ դրա արձանագրությունը, թվում է, բավականին հեշտ է հասկանալ: Թեև Xiaomi- ն չի տալիս որևէ հանրային բնութագիր, սակայն ինտերնետում այս սարքի համար դեռ բավականին հակադարձ տեխնիկա է եղել: Այսպիսով, ես որոշեցի պատվիրել դրանցից մեկը:

Մի քանի օր անց այն առաքվեց, և, իհարկե, ես անմիջապես սկսեցի խաղալ դրա հետ: Ես հակիրճ ստուգեցի այն հավելվածը, որը գալիս է դրա հետ, բայց, ինչպես երևի կարող եք կռահել, այն կանխադրված կարգաբերմամբ օգտագործելն իմ ծրագիրը երբեք չէր: Իհարկե, սա պետք է ինտեգրվի իմ առկա խելացի տան կարգավորմանը: Ինչպես նաև նկարագրված է այստեղ, ես օգտագործում եմ nymea- ն որպես իմ խելացի տան լուծում (Այո, նույնիսկ Monstera- ն կարող եք նկատել այնտեղի նկարներից մեկում:)): Lyավոք, nymea- ն չէր աջակցում այդ սենսորին, այնպես որ որոշ IDE- ի կրակելը կարգին էր:

Քայլ 1: Լրացուցիչ հավելվածի բեռնումը

Լրացուցիչ հավելվածի բեռնումը
Լրացուցիչ հավելվածի բեռնումը
Լրացուցիչ հավելվածի բեռնումը
Լրացուցիչ հավելվածի բեռնումը
Լրացուցիչ հավելվածի բեռնումը
Լրացուցիչ հավելվածի բեռնումը

Այսպիսով, առաջին բանը, որ ես արեցի, պատճենել գոյություն ունեցող Texas Instruments Sensor Tag plugin- ն էր, այն բավականին նման էր նրան, ինչ ենթադրեցի, որ այն պետք է աշխատի նաև FlowerCare սարքի համար: Plugininfo.json- ում իրերի հիմնական անվանափոխումից և սենսորթագի plugin- ի ծածկագրի մեծ մասի մեկնաբանությունից հետո ես պատրաստ էի բեռնել նոր plugin- ի գլխիկը:

Ինչպես և սպասվում էր, հայտնագործությունն արդեն իսկ անմիջապես ցույց կտար սենսորը և թույլ կտար այն ավելացնել համակարգին: Իհարկե, այս պահին դա ոչ մի իմաստալից տվյալ չի արտադրի:

Քայլ 2: Տվյալների հայտնաբերում տվիչի վրա

Սենսորի վերաբերյալ տվյալների որոնում
Սենսորի վերաբերյալ տվյալների որոնում

Ինչպես ցանկացած Bluetooth LE սարքի դեպքում, առաջին բանը, որ ցանկանում եք անել, տեղեկանալ այն առաջարկվող ծառայությունների և դրանց բնութագրերի մասին: Ինչ -որ տեղ այնտեղ իրական տվյալները թաքնված են: Բոլոր հայտնաբերված ծառայությունների վրա արագ վրիպազերծման տպագրություն կատարելով և տպագրելով դրանց բնութագրերը, ես այն կետում էի, որ կարողացա համեմատել ինտերնետում գտած տեղեկատվությունը այն բանի հետ, ինչ սարքը իրականում հայտնում է:

void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (ուղարկող ()); qCDebug (dcFlowerCare ()) << "սպասարկման ծառայություններ ունենա" վերահսկիչ ()-> createServiceObject (sensorServiceUuid, սա); միացնել (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); միացնել (m_sensorService, & QLowEnergyService:: karakteristRead, this, & FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> DiscoverDetails (); } void FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & բնութագրիչ, m_sensorService-> բնութագրեր ()) {qCDebug (dcFlowerCare ()). nospace () <"<< karakteristik.uuid (). toString () <<" ("<< բնորոշ. բռնակ () << "Անուն." << բնութագրիչ. Անուն () << ")..descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <<" Անուն: "<< նկարագրիչ. անունը () << "):" << descriptor.value () << "," << descriptor.value (). toHex (); }}}

Firmրագրաշարի տարբերակը և մարտկոցի մակարդակը հեշտ էին: Ես արդեն կարող էի տեսնել տվյալների արժեքագրման այս առաջին փորձի մեջ տպված արժեքները: Սենսորների իրական արժեքները թաքնված են այնտեղ մի փոքր ավելի խորը, բայց համադրելով այն ինտերնետից ստացված տվյալների հետ ՝ անմիջապես մատնանշեց, թե որտեղ կարելի է գտնել այն և հատկապես ինչպես կարդալ այն:

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & բնութագրիչ, const QByteArray & value) {qCDebug (dcFlowerCare ()) << «Բնութագրական ընթերցում» << QString:: համարը (բնորոշ. բռնակ (), 16) ջերմաստիճան; qint8 բաց թողնել; հոսք >> բաց թողնել; quint32 lux; հոսք >> լյուքս; qint8 խոնավություն; հոսք >> խոնավություն; qint16 պտղաբերություն; հոսք >> պտղաբերություն; ավարտված արտանետում (m_batteryLevel, 1.0 * temp / 10, lux, խոնավություն, պտղաբերություն); }

Սա միասին դնելով ՝ plugin- ն արդեն սկսել է իմաստալից տվյալներ արտադրել:

Քայլ 3: Ավարտելով հպումները

Վերջնական հպումներ
Վերջնական հպումներ

Այսպիսով, այն այժմ հիմնականում աշխատում էր, այնուամենայնիվ, մեկ հարց դեռ այնտեղ էր մնացել: FlowerCare սենսորը, ի տարբերություն Texas Instruments SensorTag- ի, մի քանի վայրկյանից կջնջի Bluetooth կապը: Չնայած հաշվի առնելով օգտագործման դեպքը, սա կարծես խնդիր չէ, քանի որ այն բավականին հուսալի է միացման փորձերին արձագանքելու համար: Հաշվի առնելով, որ սովորաբար բույսը ոչ թե լիտր ջուր է ներծծում րոպեների ընթացքում, այլ ավելի շուտ ՝ օրերի ընթացքում, թվում է, թե անհրաժեշտ չէ մշտապես կապի մեջ մնալ: Բացի այդ, մարտկոցը շատ կթափվի: Այսպիսով, ես որոշեցի ավելացնել PluginTimer- ը, որը յուրաքանչյուր 20 րոպեն մեկ կմիացներ սենսորը և տվյալներ կբերեր դրանից: Եթե ինչ -ինչ պատճառներով սենսորը չի արձագանքում կապի փորձին, ապա ծածկագիրը կսկսի մեկ այլ ժամաչափ, որը փորձում է ամեն րոպե նորից միացնել այդ պահից մինչև տվյալների ստացումը: Այնուհետև այն կվերադառնա ՝ 20 րոպե ընդմիջումով նորից տվյալներ բերելու համար: Եթե սարքը երկու անգամ անընդմեջ չկարողանա միանալ (այսինքն ՝ 20 + 1 րոպեից հետո), այն համակարգում կնշվի անցանց ռեժիմում, և օգտագործողը կարող է դրա մասին ահազանգել:

անվավեր DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Թարմացնող" հասցե (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << «Ոչ թարմացնող» հասցե () << «Հաջորդ թարմացումը << << m_refreshMinutes [flowerCare] <<« րոպե »-ում; } // Եթե մենք ունեինք կապի 2 կամ ավելի անհաջող փորձեր, նշեք այն որպես անջատված, եթե (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Չհաջողվեց թարմացնել" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

Այս ռազմավարությամբ nymea- ն այժմ թվում էր, որ հիանալի հուսալի տվյալներ է փոխանցում այս սենսորից:

Քայլ 4: Օգտագործելով այն ավելի մեծ համատեքստում

Օգտագործելով այն ավելի մեծ համատեքստում
Օգտագործելով այն ավելի մեծ համատեքստում
Օգտագործելով այն ավելի մեծ համատեքստում
Օգտագործելով այն ավելի մեծ համատեքստում

Սենսորից պարզապես արժեքներ ստանալն այդքան էլ օգտակար չէ, ես կարող էի դրա համար օգտագործել նաև բնօրինակ ծրագիրը: Հիմա եկեք մի քանի խելացի բաներ անենք դրա հետ:

Nymea- ն աջակցում է push ծանուցումների ուղարկմանը ՝ կամ nymea ունեցող հեռախոսներին. Տեղադրված ծրագիր, կամ PushBullet- ի միջոցով: Այսպիսով, ակնհայտ է, որ ինքս ինձ ուղարկեմ որոշ ծանուցումներ, երբ հողի խոնավությունը 15%-ից ցածր է: Դա բավականին հեշտ է տեղադրել ծրագիրը: Որպես նախապայման, կամ հաշիվ է պետք nymea: cloud- ում կամ PushBullet- ում: Nymea: ամպի վրա հիմնված push ծանուցումների համար բավական է միացնել nymea: cloud on nymea: core և nymea: app- ին: Հենց որ երկուսն էլ միացված լինեն, ծանուցման բան ինքնաբերաբար կհայտնվի: PushBullet- ի համար համակարգում նոր բան ավելացնելու համար, այնտեղ գտնված ցուցակում կգտնեք PushBullet- ը: Այն ձեզանից կպահանջի API բանալին, որը ստանում եք PushBullet- ի հետ գրանցվելիս: Nymea- ում push ծանուցման բան ունենալուց հետո կարող եք կանոն ստեղծել:

Իհարկե, կարող ես անել այն, ինչ ուզում ես… Կարող եք նաև միացնել լույսը ՝ սենսորային արժեքներն արտացոլելու համար, կամ օգտագործել HTTP հրամանատարի հավելումը ՝ օրինակ ինտերնետում սերվերի վրա սենսորային արժեքներ տեղադրելու համար: Ես ջրի փական չունեմ որը կարելի է վերահսկել թվայնորեն (դեռ), բայց իհարկե, եթե դուք ունեք նման բան, և այն դեռ չի ապահովվում nymea- ով, դրա համար հավելում ավելացնելը ավելի նման կլինի, քան սա:

Քայլ 5: Բառերի փակումը

Փակման բառեր
Փակման բառեր

Flowercare plugin- ն արդեն ընդունվել է հոսքի հակառակ ուղղությամբ, և եթե ունեք դրանցից մեկը, այն այժմ պատրաստ է օգտագործել nymea- ի հետ: Այնուամենայնիվ, ես հույս ունեմ, որ այս հոդվածը կարող է հետաքրքրել, եթե ինչ -որ մեկը ցանկանում է աջակցություն ավելացնել այլ սարքերի համար: Այն պետք է լինի քայլ առ քայլ այն մասին, թե ինչպես կարելի է ստեղծել ձեր սեփական plugin- ը nymea- ի համար:

Եթե ցանկանում եք պարզապես կառուցել այս կարգավորումը ձեր տանը, ապա ձեզ հարկավոր է միայն FlowerCare սենսորը, Raspberry Pi- ն, nymea համայնքի պատկերը (այն մինչ այժմ ներառում է ծաղկի խնամքի հավելվածը) և nymea. Հավելվածը, որը հասանելի է հավելվածների խանութներում: Բացի այդ, մինչ այժմ իմ Monstera Deliciosa- ն կրկին երջանիկ է, և ինչպես երևի տեսել էիք սքրինշոթերում, ես ինքս ինձ ձեռք եմ բերել այդ սենսորներից երկրորդը, որը հետևում է նաև իմ կիտրոնի ծառի առողջությանը: Այդ մեկի համար ես ինքս ինձ ծանուցում եմ ուղարկում, երբ դրսում սառչում է, որպեսզի կարողանամ ապահով ապահովել ձմռանը:

Խորհուրդ ենք տալիս: