Satura rādītājs:

BBQ Pi (ar datu vizualizāciju!): 4 soļi (ar attēliem)
BBQ Pi (ar datu vizualizāciju!): 4 soļi (ar attēliem)

Video: BBQ Pi (ar datu vizualizāciju!): 4 soļi (ar attēliem)

Video: BBQ Pi (ar datu vizualizāciju!): 4 soļi (ar attēliem)
Video: Самый лучший гриль! SABER Лучшее решение для РЕСТОРАНА Одесса Архимус 2024, Novembris
Anonim
BBQ Pi (ar datu vizualizāciju!)
BBQ Pi (ar datu vizualizāciju!)
BBQ Pi (ar datu vizualizāciju!)
BBQ Pi (ar datu vizualizāciju!)
BBQ Pi (ar datu vizualizāciju!)
BBQ Pi (ar datu vizualizāciju!)

Ievads

Grilēšana parasti attiecas uz lēno netiešā siltuma izmantošanas procesu, lai pagatavotu iecienītāko gaļu. Lai gan šī ēdiena gatavošanas metode ir ļoti populāra-it īpaši ASV-tai ir daži, ko daži var uzskatīt par diezgan nopietnu vājumu: tai nepieciešama stundām ilga daļēji skaidra uzmanība, kas jāpavada, lai uzraudzītu jūsu bedres un ēdiena temperatūru. Ievadiet: Raspberry Pi.

Oriģinālais projekts

Sākotnējais šī projekta avots ir atrodams šeit: https://old.reddit.com/r/raspberry_pi/comments/a0… Galvenais ir tas, ka reddit lietotājs Produkt varēja salīdzinoši lēti pārraidīt pārtikas un bedres temperatūras datus., tirdzniecībā pieejamos bezvadu termometrus Raspberry Pi (kas GPIO tapām bija pievienojis nelielu RF moduli). Sākotnējā projektā (saite iepriekš) Produkta dati tika glabāti sqlite datu bāzē un parādīti vietējā mitinātā apache2 php vietnē.

Šis risinājums jau atrisina sākotnējo problēmu, kas tika pieminēta šī emuāra ievadā: tagad jūs varat attālināti uzraudzīt savu pārtikas un bedres temperatūru, izmantojot tīmekļa pārlūkprogrammu. Bet ko tad, ja mēs vēlētos paplašināt šo jautājumu? Ievadiet: GridDB.

Piegādes

Raspberry Pi4

Bezvadu uztvērēja modulis SUNKEE 433Mhz Superheterodyne

1. darbība: GridDB Web API un FluentD

GridDB Web API un FluentD
GridDB Web API un FluentD

Ieraugot šo projektu, mana pirmā doma - pēc sākotnējā sajūsmas viļņa - domāja par veidiem, kā paplašināt funkcionalitāti. Izmantojot GridDB un tā Grafana spraudni, es centos vizualizēt savus pārtikas un bedru datus. Turklāt es vēlējos izveidot Grafana anotācijas, lai meklētu jebkādus anomālus datu punktus - nevar būt nekādas apdedzinātas gaļas!

Lai sāktu, man bija jāizmanto sākotnējā projekta C kods, lai nolasītu datus, kas nāk no bezvadu termometra, un ievietotu šos datus savā GridDB serverī. Lai to sāktu, es izveidoju GridDB serveri Azure, izmantojot CentOS virtuālo mašīnu. Vienkāršākais veids, kā koplietot datus no mūsu malas mašīnas (Raspberry Pi) uz mūsu mākoņa serveri, bija, izmantojot GridDB Web API. Tātad, šajā vm, es iestatīju GridDB WebAPI kopā ar Fluentd un pievienoto GridDB savienotāju.

Pirms faktiski nosūtīju datus uz mākoni, man bija jāizveido sava BBQ Pi konteinera pamata shēma. Datu kopa ir ļoti vienkārša: mums ir divi temperatūras sensori, viens pavāra ID un, protams, laika zīmogs. Tātad mūsu shēma izskatās šādi:

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

Lai izveidotu šo laikrindas konteineru, es vienkārši izmantoju WebAPI (ports 8080):

curl -X POST -pamata -u admin: admin -H "Satura tips: application/json" -d

'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": true, "column": [{"name": "time", "type": "TIMESTAMP"}, {"name": "cookid", "type": "INTEGER"}, {"name": "probe1", "type": "INTEGER"}, {"name": "probe2", "type": "INTEGER"}]} '\ https:// localhost: 8080/griddb/v2/defaultCluster/dbs/public/container

Izveidojot konteineru, man bija jāizmanto Fluentd (ports 8888), lai ievietotu faktiskos datus mūsu konteinerā. Šeit ir CURL komanda, kurā tiek publicēti daži fiktīvi dati:

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

No turienes man bija jāpievieno sākotnējais kods, lai nosūtītu HTTP POST pieprasījumu ikreiz, kad mūsu Pi lasīja datus no mūsu bedres (apmēram reizi ~ 12 sekundēs).

Kā piezīmi: šī koda rakstīšana man iemācīja novērtēt, cik daudzsološa var būt C valoda:

int postData (char laiks , int cookid, int probe1, int probe2, char url )

{CURL *čokurošanās; CURLcode res; / * Logos tas aktivizēs winsock stuff */ curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; ogļu aģents [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" date / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" probe1 / ": \"%d / ", / "zonde2 \": / "%d \"} ", laiks, pavārs, zonde1, zonde2); / * iegūt čokurošanās rokturi */ čokurošanās = čokurošanās_viegls_init (); if (čokurošanās) { /* Vispirms iestatiet URL, kas drīzumā saņems mūsu POST. Šis URL tikpat labi var būt https:// URL, ja tieši tam vajadzētu saņemt datus. */ snprintf (aģents, aģenta lielums, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> versija); aģents [aģenta izmērs - 1] = 0; curl_easy_setopt (čokurošanās, CURLOPT_USERAGENT, aģents); curl_easy_setopt (čokurošanās, CURLOPT_URL, url); curl_easy_setopt (čokurošanās, CURLOPT_USERNAME, "admin"); curl_easy_setopt (čokurošanās, CURLOPT_PASSWORD, "admin"); curl_easy_setopt (čokurošanās, CURLOPT_VERBOSE, 1L); curl_easy_setopt (čokurošanās, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt (čokurošanās, CURLOPT_POSTFIELDS, json); / * Izpildiet pieprasījumu, res saņems atgriešanās kodu */ res = curl_easy_perform (curl); ja (res! = CURLE_OK) {size_t len = strlen (errbuf); fprintf (stderr, "\ nlibcurl: (%d)", res); ja (len) fprintf (stderr, "%s%s", errbuf, ((errbuf [len - 1]! = '\ n')? "\ n": "")); fprintf (stderr, "%s / n / n", curl_easy_strerror (res)); goto tīrīšana; } tīrīšana: curl_easy_cleanup (čokurošanās); curl_global_cleanup (); atgriezties 0; }}

Kad šī funkcija ir uzrakstīta, man vienkārši vajadzēja to palaist vienlaikus ar sqlite datu ievietošanu:

ja (goodData == 1) {

ja (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "INSERT INTO rādījumi (cookid, time, probe1, probe2) VALUES (%d, '%s',%d, %d); ", cookID, buff, probe1, probe2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, atzvanīšana, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("SQL kļūda: %s / n", zErrMsg); } cits {last_db_write = sek; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, probe1, probe2, url); }}

Lai pārliecinātos, ka jūsu dati patiešām tiek ievietoti jūsu serverī, varat izpildīt šādu komandu, lai vaicātu datu bāzi un skatītu rezultātus:

curl -X POST -pamata -u admin: admin -H "Satura tips: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ public/konteineri/bbqpi/rindas

2. solis: Grafana

Grafana
Grafana
Grafana
Grafana

Kad kods ir ievietots, tagad, kad mēs izmantojam sākotnējo tīmekļa portālu, lai sāktu “gatavot ēdienu”, mēs vienlaikus saglabāsim savus temperatūras datus savā GridDB serverī.

Nākamais solis būs vizualizēt mūsu datus, izmantojot Grafana. Lai to izdarītu, mēs sekojām informācijai no šī emuāra: šeit. Patīkami šajā ieviešanā ir tas, ka ir ārkārtīgi viegli redzēt, ka mūsu dati ir apkopoti jaukā grafikā. Tas arī pievieno anotācijas.

Emuārā apspriestās anotācijas ļauj mums ārkārtīgi viegli uzraudzīt, vai kaut kas noiet greizi vai nu ar mūsu ēdienu, vai pašu bedri. Manā gadījumā es gatavoju liellopa gaļas īsās ribiņas. Līdz ar to es negribēju, lai temperatūra bedrē pieaugtu virs 275 grādiem pēc Fārenheita. Ja es redzētu, ka temperatūra pārsniedz to, es varētu izslēgt degli un ļaut siltumam atkal samazināties:

Man bija līdzīgs noteikums attiecībā uz sensoru, kas faktiski uzrauga pašu ēdienu: ja ēdiena iekšējā temperatūra sasniedza 203 grādus pēc Fārenheita, ribas bija gatavas. Jūs varat redzēt vientuļo anotāciju pavāra beigās šeit:

Kopumā pavārs man prasīja tikai aptuveni ~ 4 stundas, bet šāda veida iestatījumi patiešām būtu lieliski, ja es gatavotu kaut ko, kas būtu prasījis vēl vairāk laika grilā (domāju, ka lēni dūmi, kas ilgst ~ 12 stundas). Neskatoties uz to, es uzskatu, ka šis rīks ir viegli pamanāms: ja jūs varat reģistrēt savu ēdienu rezultātus un pēc tam salīdzināt to ar iepriekšējiem pavāriem, tas nozīmē, ka jūsu grila gatavošana laika gaitā lēnām uzlabosies, jo jūs varat izmantot datus, lai redzētu, kas darbojas un kas nedarbojas 't.

3. solis: ēdiens

Ēdiens
Ēdiens
Ēdiens
Ēdiens
Ēdiens
Ēdiens

Šī bija pirmā reize, kad es kādreiz gatavoju liellopa gaļas īsās ribiņas; garšvielām es vienkārši izmantoju sāli, melnos piparus un ķiploku pulveri. Neskatoties uz dažām problēmām, kuras sākumā deglis nedaudz pacēlās, ribas iznāca fantastiskas. Lūdzu paskaties:

4. solis. Secinājums

Galu galā ēdiens sanāca lieliski, sensori, GridDB un Grafana lieliski sadarbojās, un mēs ieguvām dažus vērtīgus datus par to, kā šīs lietas pagatavot vēlreiz, kad nākamreiz vēlamies pārsteigt dažus draugus.

Ieteicams: