Orodha ya maudhui:

BBQ Pi (Pamoja na Taswira ya Taswira!): Hatua 4 (na Picha)
BBQ Pi (Pamoja na Taswira ya Taswira!): Hatua 4 (na Picha)

Video: BBQ Pi (Pamoja na Taswira ya Taswira!): Hatua 4 (na Picha)

Video: BBQ Pi (Pamoja na Taswira ya Taswira!): Hatua 4 (na Picha)
Video: И ЭТО ТОЖЕ ДАГЕСТАН? Приключения в долине реки Баараор. БОЛЬШОЙ ВЫПУСК (Путешествие по Дагестану #3) 2024, Novemba
Anonim
BBQ Pi (Pamoja na Taswira ya Takwimu!)
BBQ Pi (Pamoja na Taswira ya Takwimu!)
BBQ Pi (Pamoja na Taswira ya Takwimu!)
BBQ Pi (Pamoja na Taswira ya Takwimu!)
BBQ Pi (Pamoja na Taswira ya Takwimu!)
BBQ Pi (Pamoja na Taswira ya Takwimu!)

Utangulizi

Barbecuing kawaida inamaanisha mchakato polepole wa kutumia joto la moja kwa moja kupika nyama unazopenda. Ingawa njia hii ya kupikia ni maarufu sana - haswa Amerika - ina kile ambacho wengine wanaweza kufikiria udhaifu mkubwa: inahitaji masaa ya umakini wa nusu lucid kutumiwa kufuatilia joto la shimo lako na chakula. Ingiza: Raspberry Pi.

Mradi Asilia

Chanzo cha asili cha mradi huu kinaweza kupatikana hapa: https:, vipima joto visivyo na waya visivyo na waya kwa Raspberry Pi (ambayo ilikuwa imeambatanishwa na pini zake za GPIO moduli ndogo ya RF). Katika mradi wa asili (uliounganishwa hapo juu), Produkt alikuwa na data yake ikihifadhiwa kwenye hifadhidata ya sqlite na kuonyeshwa kwenye wavuti ya apache2 php iliyohifadhiwa nchini.

Suluhisho hili tayari linasuluhisha shida ya asili iliyoguswa katika utangulizi wa blogi hii: sasa unaweza kufuatilia joto lako la chakula na shimo kwa mbali na kivinjari cha wavuti. Lakini vipi ikiwa tunataka kupanua juu ya hii? Ingiza: GridDB.

Vifaa

Raspberry Pi4

SUNKEE 433Mhz Moduli ya Mpokeaji wa Wireless Superheterodyne

Hatua ya 1: GridDB Web API & FluentD

API ya GridDB ya Wavuti & FluentD
API ya GridDB ya Wavuti & FluentD

Baada ya kuona mradi huu, mawazo yangu ya kwanza - baada ya wimbi la kwanza la msisimko - ilikuwa kufikiria njia za kupanua utendaji. Kwa kutumia GridDB na programu-jalizi yake ya Grafana, nilitafuta kuibua data yangu ya chakula na shimo. Zaidi ya hapo, nilitamani kuanzisha ufafanuzi wa Grafana kutafuta vidokezo vyovyote vya data visivyo na maana - haiwezi kuwa na nyama yoyote ya kuchomwa moto!

Ili kuanza, nilihitaji kutumia nambari ya C kutoka kwa mradi wa asili kusoma data inayoingia kutoka kwa kipima joto kisichotumia waya na kuchapisha data hiyo kwenye seva yangu ya GridDB. Ili kupata kazi hii, niligundua Seva ya GridDB kwenye Azure kwa kutumia mashine halisi ya CentOS. Njia rahisi zaidi ya kushiriki data kutoka kwa mashine yetu ya makali (Raspberry Pi) kwa seva yetu ya wingu ilikuwa kupitia GridDB Web API. Kwa hivyo, kwenye vm hiyo, nilianzisha WebAPI ya GridDB pamoja na Fluentd na kontakt inayoambatana na GridDB.

Kabla ya kutuma data hadi kwenye wingu, nilihitaji kuunda schema ya msingi kwa chombo changu cha BBQ Pi. Dataset inayoingia ni rahisi sana: tuna sensorer mbili za joto, kitambulisho kimoja cha kupika, na kwa kweli, muhuri wa muda. Kwa hivyo schema yetu inaonekana kama hii:

timeseries = gridstore.put_container ("bbqpi", [("wakati", griddb. GS_TYPE_TIMESTAMP), ("cookid", griddb. GS_TYPE_INT), ("probe1", griddb. GS_TYPE_INT), ("probe2", griddb. GS_TYPE_INT)], griddb. GS_CONTAINER_TIME_S

Kuunda kontena hili la vipuri, nilitumia tu WebAPI (bandari 8080):

curl -X POST - msingi -u admin: admin -H "Aina ya yaliyomo: programu / json" -d

'{"container_name": "bbqpi", "aina ya kontena": "TIME_SERIES", / "rowkey": kweli, "safu": [ {"name": "time", "type": "TIMESTAMP"}, {"name": "cookid", "type": "INTEGER"}, {"name": "probe1", "type": "INTEGER"}, {"name": "probe2", "type": "INTEGER"}]}} https:// localhost: 8080 / griddb / v2 / defaultCluster / dbs / umma / vyombo

Pamoja na kontena iliyoundwa, nilihitaji kutumia Fluentd (bandari 8888) kuchapisha data halisi kwenye kontena letu. Hapa kuna amri ya CURL ikichapisha data ya dummy:

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

Kutoka hapo, nilihitaji kuongezea nambari ya asili ili kutuma ombi la HTTP POST wakati wowote Pi yetu alikuwa anasoma data kutoka kwenye shimo letu (karibu mara moja kila sekunde ~ 12).

Kama maandishi ya pembeni: kuandika nambari hii kulinifundisha kuthamini jinsi lugha ya C inaweza kuwa:

int postData (muda wa char , int cookid, int probe1, int probe2, char url )

{Curl * curl; CURLcode res; / * Katika windows, hii itaingiza vitu vya winsock * / curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; wakala wa char [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" date / ": \"% s.112Z / ", \" cookid / ": \"% d / ", \" probe1 / ": \"% d / ", / "probe2 \": / "% d \"} ", muda, mpishi, uchunguzi1, uchunguzi2); / * pata kipini cha curl * / curl = curl_easy_init (); ikiwa (curl) {/ * Kwanza weka URL ambayo iko karibu kupokea POST yetu. URL hii inaweza pia kuwa https:// URL ikiwa ndio inapaswa kupokea data. * / snprintf (wakala, wakala wa saizi, "libcurl /% s", curl_version_info (CURLVERSION_NOW) -> toleo); wakala [wakala wa saizi - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, wakala); curl_easy_setopt (curl, CURLOPT_URL, url); curl_easy_setopt (curl, CURLOPT_USERNAME, "msimamizi"); curl_easy_setopt (curl, CURLOPT_PASSWORD, "msimamizi"); curl_easy_setopt (curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt (curl, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt (curl, CURLOPT_POSTFIELDS, json); / * Fanya ombi, res itapata nambari ya kurudi * / res = curl_easy_perform (curl); ikiwa (res! = CURLE_OK) {size_t len = strlen (errbuf); fprintf (stderr, "\ nlibcurl: (% d)", res); ikiwa (len) fprintf (stderr, "% s% s", errbuf, ((errbuf [len - 1]! = '\ n')? "\ n": "")); fprintf (stderr, "% s / n / n", curl_easy_strerror (res)); kusafisha goto; } kusafisha: curl_easy_cleanup (curl); curl_global_cleanup (); kurudi 0; }}

Pamoja na kazi hii kuandikwa, nilihitaji tu kuiendesha wakati huo huo kwamba data ya sqlite ilikuwa ikichapishwa:

ikiwa (goodData == 1) {

ikiwa (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "INSERT IN SOMO (cookid, time, probe1, probe2) MAADILI (% d, '% s',% d, % d); ", CookID, buff, probe1, probe2); printf ("% s / n", sql); rc = sqlite3_exec (db, sql, kupiga simu tena, 0, & zErrMsg); ikiwa (rc! = SQLITE_OK) {printf ("Kosa la SQL:% s / n", zErrMsg); } mwingine {last_db_write = sekunde; } char url = "https://xx.xx.xx.xx: 8888 / griddb"; postData (buff, cookID, probe1, probe2, url); }}

Ili kuhakikisha kuwa data yako inaingizwa kwenye seva yako, unaweza kutekeleza amri ifuatayo ili kuuliza hifadhidata yako na uone matokeo:

curl -X POST - msingi -u admin: admin -H "Aina ya yaliyomo: programu / json" -d '{"kikomo": 1000}' https:// localhost: 8080 / griddb / v2 / defaultCluster / dbs / umma / vyombo / bbqpi / safu

Hatua ya 2: Grafana

Grafana
Grafana
Grafana
Grafana

Na nambari iliyopo, sasa tunapotumia bandari asili ya wavuti kuanza "mpishi", tutakuwa tukihifadhi data yetu ya joto wakati huo huo kwenye seva yetu ya GridDB.

Hatua inayofuata itakuwa kuibua data yetu kwa kutumia Grafana. Ili kufanya hivyo, tulifuata habari kutoka kwa blogi hii: hapa. Jambo zuri juu ya utekelezaji huu ni kwamba ni rahisi sana kuona data yetu imewekwa kwenye grafu nzuri. Pia inaongeza maelezo.

Maelezo yaliyojadiliwa kwenye blogi hufanya iwe rahisi sana kwetu kufuatilia wakati kitu kinakwenda sawa na chakula chetu au shimo lenyewe. Katika kesi yangu, nilikuwa nikipika nyama mbavu fupi. Pamoja na hizo, sikutaka joto kwenye shimo likue zaidi ya digrii 275 za Fahrenheit. Ikiwa niliona joto linapita zaidi ya hapo, ningeweza kuzima kiwasha moto na kuruhusu moto uzamishe tena:

Nilikuwa na sheria kama hiyo kwa sensorer kweli kuweka tabo kwenye chakula chenyewe: ikiwa chakula kingefika kwa temp ya ndani ya digrii 203 za fahrenheit, mbavu zilikuwa tayari. Unaweza kuona ufafanuzi pekee mwishoni mwa mpishi hapa:

Yote kwa yote, mpishi alinichukua tu kama masaa 4 au zaidi, lakini aina hii ya usanidi ingekuwa bora ikiwa ningepika kitu ambacho kingehitaji wakati zaidi katika kiraka (fikiria moshi wa polepole ambao hudumu ~ 12 masaa). Pamoja na hayo, naamini thamani ikiwa chombo hiki kinaonekana kwa urahisi: kuweza kuweka matokeo ya vyakula vyako na kisha kulinganisha na wapishi wa zamani inamaanisha kuwa BBQing yako itakuwa bora polepole kwa wakati kwani unaweza kutumia data kuona ni nini kinachofanya kazi na nini 't.

Hatua ya 3: Chakula

Chakula
Chakula
Chakula
Chakula
Chakula
Chakula

Hii ilikuwa mara ya kwanza mimi kuwahi kutengeneza nyama ya mbavu fupi; kwa kitoweo, nilitumia tu chumvi, pilipili nyeusi, na unga wa vitunguu. Licha ya maswala kadhaa na burner kupata juu sana kwa tad huko mwanzoni, mbavu zilitoka nzuri. Tafadhali angalia:

Hatua ya 4: Hitimisho

Mwishowe, chakula kilitoka kali, sensorer, GridDB, na Grafana wote walifanya kazi katika tamasha kwa uzuri, na tukapata data muhimu ya jinsi ya kupika vitu hivi tena kwa wakati ujao tunataka kuwafurahisha marafiki wengine.

Ilipendekeza: