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

Խորոված Pi (տվյալների արտացոլմամբ): 4 քայլ (նկարներով)
Խորոված Pi (տվյալների արտացոլմամբ): 4 քայլ (նկարներով)

Video: Խորոված Pi (տվյալների արտացոլմամբ): 4 քայլ (նկարներով)

Video: Խորոված Pi (տվյալների արտացոլմամբ): 4 քայլ (նկարներով)
Video: Խորոված խոզի կողիկներ! ՇԱՇԼԻԿԻՑ ԱՎԵԼԻ ՍՈՒԼ։ BBQ 3 2 1 խոզի կողիկներ. 2024, Նոյեմբեր
Anonim
BBQ Pi (Տվյալների արտացոլմամբ)
BBQ Pi (Տվյալների արտացոլմամբ)
BBQ Pi (Տվյալների արտացոլմամբ)
BBQ Pi (Տվյալների արտացոլմամբ)
BBQ Pi (Տվյալների արտացոլմամբ)
BBQ Pi (Տվյալների արտացոլմամբ)

Ներածություն

Խորովածը սովորաբար վերաբերում է ձեր սիրած միսը եփելու համար անուղղակի ջերմության օգտագործման դանդաղ գործընթացին: Թեև խոհարարության այս մեթոդը մեծ ժողովրդականություն է վայելում, հատկապես ԱՄՆ-ում, այն ունի այն, ինչը ոմանք կարող են համարել բավականին լուրջ թուլություն. Դա պահանջում է ժամեր շարունակ կիսաթափանցիկ ուշադրություն դարձնել ձեր փոսի և սննդի ջերմաստիճանը վերահսկելու համար: Մուտքագրեք ՝ Raspberry Pi:

Օրիգինալ նախագիծ

Այս նախագծի սկզբնաղբյուրը կարելի է գտնել այստեղ ՝ https://old.reddit.com/r/raspberry_pi/comments/a0… Դրա հիմնական էությունն այն է, որ reddit օգտվող Produkt- ը կարողացել է համեմատաբար էժան փոխանցել սննդի և փոսի ջերմաստիճանի տվյալները:, առևտրային հասանելի անլար ջերմաչափեր Raspberry Pi- ի համար (որը կցված էր GPIO- ի կապում փոքր ՌԴ մոդուլ): Սկզբնական նախագծում (վերը նշված հղումով) Պրոդուկտը իր տվյալները պահում էր sqlite տվյալների շտեմարանում և ցուցադրվում տեղական apache2 php վեբ կայքում:

Այս լուծումն արդեն լուծում է օրիգինալ խնդիրը, որին անդրադարձել է այս բլոգի ներդրումը. Այժմ կարող եք վեբ դիտարկիչով հեռակա վերահսկել ձեր սննդի և փոսի ջերմաստիճանը: Բայց ի՞նչ կլիներ, եթե մենք ցանկանայինք ընդլայնել սա: Մուտքագրեք ՝ GridDB:

Պարագաներ

Ազնվամորի Pi4

SUNKEE 433Mhz Superheterodyne անլար ընդունիչ մոդուլ

Քայլ 1: GridDB Web API և FluentD

GridDB Web API և FluentD
GridDB Web API և FluentD

Այս նախագիծը տեսնելուն պես, իմ առաջին միտքը `հուզմունքի սկզբնական ալիքից հետո, մտածում էր, թե ինչպես կարող եմ ընդլայնել ֆունկցիոնալությունը: Օգտագործելով GridDB- ն և դրա Grafana հավելվածը, ես ձգտեցի պատկերացնել իմ սննդի և փոսի տվյալները: Դրանից դուրս, ես ցանկանում էի Grafana- ի ծանոթագրություններ տեղադրել `անոմալ տվյալների ցանկացած կետ գտնելու համար. Չի կարող ածխած միս ունենալ:

Սկսելու համար ես պետք է օգտագործեի սկզբնական նախագծի C կոդը `անլար ջերմաչափից եկող տվյալները կարդալու և այդ տվյալները տեղադրելու իմ GridDB սերվերում: Այս ամենը գործարկելու համար ես պտտեցի GridDB սերվերը Azure- ում ՝ օգտագործելով CentOS վիրտուալ մեքենա: Մեր եզրային մեքենայից (Raspberry Pi) մեր ամպային սերվերին տվյալներ կիսելու ամենահեշտ ձևը GridDB Web API- ն էր: Այսպիսով, այդ vm- ի վրա ես ստեղծեցի GridDB– ի WebAPI- ն ՝ Fluentd- ի և ուղեկցող GridDB միակցիչի հետ միասին:

Նախքան տվյալների ամպ ուղարկելը, ես պետք է ստեղծեի իմ BBQ Pi կոնտեյների հիմնական սխեման: Տվյալների հավաքածուն չափազանց պարզ է. Մենք ունենք երկու ջերմաստիճանի տվիչ, մեկ խոհարարի ID և, իհարկե, ժամանակային նշան: Այսպիսով, մեր սխեման ունի հետևյալ տեսքը.

timeseries = gridstore.put_container ("bbqpi", [(«ժամանակ», griddb. GS_TYPE_TIMESTAMP), («cookid», griddb. GS_TYPE_INT), («probe1», griddb. GS_TYPE_INT), («probe2», griddb. GS_TYPE_INT)_TIME

Timesամկետների այս կոնտեյները ստեղծելու համար ես պարզապես օգտագործեցի WebAPI (նավահանգիստ 8080).

curl -X POST -հիմնական -u admin: admin -H "Content -type: application/json" -d

'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": true, "colunns": [{"name": "time", "type": "TIMESTAMP"}, {"name": "cookid", "type": "INTEGER"}, {"name": "probe1", "type": "INTEGER"}, {"name": "probe2", "type" ՝ "INTEGER"}]} '\ https:// localhost: 8080/griddb/v2/defaultCluster/dbs/public/բեռնարկղեր

Ստեղծված կոնտեյներով, ես պետք է օգտագործեի Fluentd (նավահանգիստ 8888) ՝ իրական տվյալները մեր կոնտեյների մեջ տեղադրելու համար: Ահա CURL հրաման, որը տեղադրում է որոշ կեղծ տվյալներ.

curl -X POST -d 'json = {"date": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "probe1": "150", "probe2": "140" } 'https:// localhost: 8888/griddb

Այնտեղից ես պետք է կցեի բնօրինակի կոդը ՝ HTTP POST հարցում ուղարկելու համար, երբ մեր Pi- ն մեր փոսից տվյալներ էր կարդում (մոտ 12 վայրկյան մեկ անգամ):

Որպես կողմնակի նշում. Այս ծածկագիրը գրելն ինձ սովորեցրեց գնահատել, թե որքանով կարող է C լեզուն խոսուն լինել.

int postData (լիցքավորման ժամանակ , int cookid, int probe1, int probe2, char url )

{CURL *curl; CURL կոդ res; / * Windows- ում սա նախաստորագրում է վիզոկի իրերը */ curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; char գործակալ [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" date / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" probe1 / ": \"%d / ", / "probe2 \": / "%d \"} ", ժամանակը, cookid, probe1, probe2); / * ստանալ գանգուր բռնակ */ curl = curl_easy_init (); if (curl) { /* Նախ նշեք այն URL- ը, որը պատրաստվում է ստանալ մեր POST- ը: Այս URL- ը կարող է լինել նաև https:// URL, եթե դա այն է, ինչ պետք է ստանա տվյալները: */ snprintf (գործակալ, sizeof գործակալ, «libcurl/%s», curl_version_info (CURLVERSION_NOW)-> տարբերակ); գործակալ [sizeofent - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, գործակալ); curl_easy_setopt (curl, CURLOPT_URL, url); curl_easy_setopt (curl, CURLOPT_USERNAME, "admin"); curl_easy_setopt (curl, CURLOPT_PASSWORD, "admin"); curl_easy_setopt (curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt (curl, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt (curl, CURLOPT_POSTFIELDS, json); / * Կատարեք հարցումը, res- ը կստանա վերադարձի կոդը */ res = curl_easy_perform (curl); եթե (res! = CURLE_OK) {size_t len = strlen (errbuf); fprintf (stderr, "\ nlibcurl: (%d)", res); if (len) fprintf (stderr, "%s%s", errbuf, ((errbuf [len - 1]! = '\ n')? "\ n": "")); fprintf (stderr, "%s / n / n", curl_easy_strerror (res)); գնալ մաքրման; } մաքրում. curl_easy_cleanup (curl); curl_global_cleanup (); վերադարձ 0; }}

Այս ֆունկցիան գրված լինելով, ինձ պարզապես անհրաժեշտ էր, որ այն աշխատեր միաժամանակ, երբ տեղադրվում էին sqlite տվյալները.

եթե (goodData == 1) {

if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "ՄՏԱԵՔ ընթերցումների մեջ (խաշած, ժամանակ, հետաքննիչ 1, զոնդ 2) ԱՐUԵՔՆԵՐ (%d, '%s',%d, %d); ", cookID, buff, probe1, probe2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, callback, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("SQL սխալ. %s / n", zErrMsg); } else {last_db_write = վայրկյաններ; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, probe1, probe2, url); }}

Որպեսզի համոզվեք, որ ձեր տվյալները իրականում տեղադրվում են ձեր սերվերի մեջ, կարող եք գործարկել հետևյալ հրամանը ՝ ձեր տվյալների բազան հարցնելու և արդյունքները դիտելու համար.

curl -X POST -հիմնական -u admin: admin -H "Content -type: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ հանրային/բեռնարկղեր/bbqpi/տողեր

Քայլ 2: Գրաֆանա

Գրաֆանա
Գրաֆանա
Գրաֆանա
Գրաֆանա

Տեղադրված ծածկագրով, այժմ, երբ մենք օգտագործում ենք սկզբնական վեբ պորտալը `« խոհարար »սկսելու համար, մենք միաժամանակ կպահենք մեր ջերմաստիճանի տվյալները մեր GridDB սերվերում:

Հաջորդ քայլը կլինի Grafana- ի միջոցով մեր տվյալների արտացոլումը: Դա անելու համար մենք հետևեցինք այս բլոգի տեղեկատվությանը ՝ այստեղ: Այս իրականացման հաճելի բանն այն է, որ չափազանց հեշտ է տեսնել մեր տվյալները ՝ գծագրված գեղեցիկ գրաֆիկի մեջ: Այն նաև ավելացնում է ծանոթագրություններ:

Բլոգում քննարկված ծանոթագրությունները մեզ համար չափազանց դյուրին են դարձնում վերահսկելը, երբ ինչ -որ բան սխալ է տեղի ունենում կամ մեր սննդի կամ բուն փոսի հետ: Իմ դեպքում ես տավարի կարճ կողիկներ էի պատրաստում: Նրանց հետ ես չէի ցանկանա, որ փոսի ջերմաստիճանը բարձրանար 275 աստիճանից: Եթե տեսնեի, որ ջերմաստիճանը դրանից ավելի է անցնում, կարող էի անջատել այրիչը և թույլ տալ, որ շոգը նորից ընկնի.

Ես ունեի նման կանոն սենսորի համար, որն իրականում պահում էր ինքնին սնունդը. Եթե սնունդը հասնում էր 203 աստիճանի فارենհայտի ներքին ջերմաստիճանի, կողերը պատրաստ էին: Խոհարարի վերջում միայնակ ծանոթագրությունը կարող եք տեսնել այստեղ.

Ընդհանուր առմամբ, խոհարարը ինձանից տևեց մոտ ~ 4 ժամ, բայց այս կարգավորումն իսկապես գերազանց կլիներ, եթե ես պատրաստեի մի բան, որը նույնիսկ ավելի շատ ժամանակ կպահանջեր գրիլում (մտածեք ցածր դանդաղ ծխի մասին, որը տևում է 12 ֆունտ) ժամեր). Չնայած դրան, ես կարծում եմ, որ արժեքը, եթե այս գործիքը հեշտությամբ երևում է. Կարողանալ գրանցել ձեր սննդի արդյունքները և այն համեմատել նախորդ խոհարարների հետ, նշանակում է, որ ձեր խորովածը ժամանակի ընթացքում կամաց -կամաց կբարելավվի, քանի որ կարող եք օգտագործել տվյալները ՝ տեսնելու, թե ինչն է աշխատում և ինչը ՝ ոչ: 't

Քայլ 3: Սնունդ

Սնունդը
Սնունդը
Սնունդը
Սնունդը
Սնունդը
Սնունդը

Սա առաջին անգամն էր, երբ ես երբևէ տավարի կարճ կողիկներ էի պատրաստում. համեմունքների համար ես պարզապես օգտագործում էի աղ, սև պղպեղ և սխտորի փոշի: Չնայած որոշ խնդիրներին, որ այրիչը չափազանց բարձր էր դառնում սկզբում այնտեղ, կողերը ֆանտաստիկ էին դուրս գալիս: Խնդրում ենք դիտել.

Քայլ 4: Եզրակացություն

Ի վերջո, սնունդը հոյակապ դուրս եկավ, սենսորները, GridDB- ն և Գրաֆանան բոլորը համերաշխ աշխատում էին գեղեցիկ, և մենք ստացանք որոշ արժեքավոր տվյալներ այն մասին, թե ինչպես կարելի է նորից պատրաստել այս իրերը հաջորդ անգամ, երբ ցանկանում ենք տպավորություն թողնել որոշ ընկերների վրա:

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