Obsah:

BBQ Pi (s vizualizáciou údajov!): 4 kroky (s obrázkami)
BBQ Pi (s vizualizáciou údajov!): 4 kroky (s obrázkami)

Video: BBQ Pi (s vizualizáciou údajov!): 4 kroky (s obrázkami)

Video: BBQ Pi (s vizualizáciou údajov!): 4 kroky (s obrázkami)
Video: Американская еда - Лучшая говяжья грудинка и ребра барбекю в Чикаго! 2024, November
Anonim
BBQ Pi (s vizualizáciou údajov!)
BBQ Pi (s vizualizáciou údajov!)
BBQ Pi (s vizualizáciou údajov!)
BBQ Pi (s vizualizáciou údajov!)
BBQ Pi (s vizualizáciou údajov!)
BBQ Pi (s vizualizáciou údajov!)

Úvod

Grilovanie sa väčšinou vzťahuje na pomalý proces využívania nepriameho tepla na varenie vášho obľúbeného mäsa. Napriek tomu, že je tento spôsob varenia veľmi populárny-najmä v USA-má v sebe to, čo niektorí môžu považovať za dosť vážnu slabinu: vyžaduje si hodiny polopriehľadnej pozornosti na sledovanie teploty vašej jamy a jedla. Zadajte: Raspberry Pi.

Pôvodný projekt

Pôvodný zdroj tohto projektu nájdete tu: https://old.reddit.com/r/raspberry_pi/comments/a0… Podstatou je, že používateľ reddit Produkt dokázal prenášať údaje o teplote jedla a jamy z relatívne lacných zdrojov., komerčne dostupné bezdrôtové teplomery k Raspberry Pi (ktorý mal k svojim GPIO kolíkom pripevnený malý RF modul). V pôvodnom projekte (prepojený vyššie) mal Produkt svoje údaje uložené v databáze sqlite a zobrazované na lokálne hostenej webovej stránke apache2 php.

Toto riešenie už rieši pôvodný problém, na ktorý sa dotklo v úvode tohto blogu: Teraz môžete teplotu svojho jedla a jamy monitorovať na diaľku pomocou webového prehliadača. Čo keby sme to však chceli rozšíriť? Zadajte: GridDB.

Zásoby

Raspberry Pi4

Bezdrôtový modul superheterodynu SUNKEE 433 MHz

Krok 1: Webové rozhranie GridDB a FluentD

Webové API a FluentD GridDB
Webové API a FluentD GridDB

Keď som videl tento projekt, moja prvá myšlienka - po počiatočnej vlne vzrušenia - bola premyslenie spôsobov, ako rozšíriť funkčnosť. Použitím programu GridDB a jeho doplnku Grafana som sa snažil vizualizovať svoje údaje o jedle a jamách. Okrem toho som chcel vytvoriť anotácie Grafana na vyhľadávanie anomálnych dátových bodov - nemôžem mať žiadne zuhoľnatené mäso!

Na začiatku som potreboval použiť kód C z pôvodného projektu na prečítanie údajov prichádzajúcich z bezdrôtového teplomera a odoslanie týchto údajov na môj server GridDB. Aby som to uviedol do prevádzky, spustil som server GridDB v Azure pomocou virtuálneho počítača CentOS. Najjednoduchší spôsob zdieľania údajov z nášho zariadenia Edge (Raspberry Pi) na náš cloudový server bol prostredníctvom webového rozhrania GridDB Web API. Na tomto VM som teda nastavil WebAPI GridDB spolu s Fluentdom a sprievodným konektorom GridDB.

Pred odoslaním údajov do cloudu som potreboval vytvoriť základnú schému pre svoj kontajner BBQ Pi. Vstup údajov je veľmi jednoduchý: máme dva snímače teploty, jedno ID varenia a samozrejme časovú pečiatku. Naša schéma teda vyzerá takto:

timeseries = gridstore.put_container ("bbqpi", [("čas", griddb. GS_TYPE_TIMESTAMP), ("cookid", griddb. GS_TYPE_INT), ("sonda1", griddb. GS_TYPE_INT), ("sonda2", griddb. GS_TYPE_INT)], griddb. GS_CONTAINER_TIME_SERIES)

Na vytvorenie tohto kontajnera timeseries som jednoducho použil WebAPI (port 8080):

curl -X POST --základný -u admin: admin -H "Typ obsahu: aplikácia/json" -d

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

Keď bol kontajner vytvorený, potreboval som použiť Fluentd (port 8888) na odosielanie aktuálnych údajov do nášho kontajnera. Tu je príkaz CURL, ktorý zverejňuje niektoré fiktívne údaje:

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

Odtiaľ som potreboval pripojiť pôvodný kód na odoslanie požiadavky HTTP POST vždy, keď náš Pi čítal údaje z našej jamy (asi raz za ~ 12 sekúnd).

Na okraj: písanie tohto kódu ma naučilo oceniť, aký podrobný môže byť jazyk C:

int postData (char time , int Cookid, int probe1, int probe2, char url )

{CURL *zvinutie; CURLcode res; / * V oknách to spustí winsock veci */ curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; char agent [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" date / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" sonda1 / ": \"%d / ", / "sonda2 \": / "%d \"} ", čas, cookid, sonda1, sonda2); / * získajte rukoväť zvinutia */ curl = curl_easy_init (); if (curl) { /* Najprv nastavte adresu URL, ktorá sa chystá prijať náš POST. Táto adresa URL môže byť aj adresou https://, ak by mala prijímať údaje. */ snprintf (agent, sizeof agent, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> verzia); agent [sizeof agent - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, agent); curl_easy_setopt (zvinutie, CURLOPT_URL, adresa URL); curl_easy_setopt (curl, CURLOPT_USERNAME, "admin"); curl_easy_setopt (zvinutie, CURLOPT_PASSWORD, "admin"); curl_easy_setopt (zvinutie, CURLOPT_VERBOSE, 1L); curl_easy_setopt (zvinutie, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt (zvinutie, CURLOPT_POSTFIELDS, json); / * Vykonajte požiadavku, res získa návratový kód */ res = curl_easy_perform (zvinutie); if (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)); choďte na čistenie; } čistenie: curl_easy_cleanup (zvinutie); curl_global_cleanup (); návrat 0; }}

S touto napísanou funkciou som potreboval, aby to bežalo súčasne s odosielaním údajov sqlite:

if (goodData == 1) {

if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "INSERT INTO readings (cookid, time, probe1, probe2) VALUES (%d, '%s',%d, %d); ", CookID, buff, sonda1, sonda2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, spätné volanie, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("Chyba SQL: %s / n", zErrMsg); } else {last_db_write = s; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, sonda1, sonda2, adresa URL); }}

Aby ste sa uistili, že sa vaše údaje skutočne vkladajú na váš server, môžete spustiť nasledujúci príkaz na zadanie dotazu do databázy a zobrazenie výsledkov:

curl -X POST --základný -u admin: admin -H "Typ obsahu: aplikácia/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ verejné/kontajnery/bbqpi/riadky

Krok 2: Grafana

Grafana
Grafana
Grafana
Grafana

Keď je kód na mieste, teraz, keď použijeme pôvodný webový portál na spustenie „varenia“, budeme súčasne ukladať naše údaje o teplote na náš server GridDB.

Ďalším krokom bude vizualizácia našich údajov pomocou programu Grafana. Aby sme to urobili, sledovali sme informácie z tohto blogu: tu. Na tejto implementácii je pekné, že je veľmi ľahké vidieť naše údaje v grafe do pekného grafu. Tiež pridáva anotácie.

Anotácie, o ktorých sa v blogu diskutuje, nám uľahčujú monitorovať, keď sa niečo pokazí buď s naším jedlom, alebo so samotnou jamou. V mojom prípade som varil hovädzie krátke rebrá. Pri tých som nechcel, aby teplota v jame narástla nad 275 stupňov Fahrenheita. Ak by som videl, že teplota prekračuje túto hranicu, mohol by som vypnúť horák a nechať teplo opäť klesnúť:

Mal som podobné pravidlo pre snímač, ktorý v skutočnosti držal karty nad samotným jedlom: ak sa jedlo dostalo na vnútornú teplotu 203 stupňov Fahrenheita, rebrá boli pripravené. Osamelú anotáciu na konci kuchára si môžete pozrieť tu:

Suma sumárum, kuchár mi trval len asi 4 hodiny, ale tento druh nastavenia by vynikal, keby som varil niečo, čo by si na grile vyžiadalo ešte viac času (pomalý dym, ktorý trvá ~ 12 hodiny). Napriek tomu verím, že je dôležité, ak je tento nástroj ľahko zrejmý: schopnosť zaznamenať výsledky vašich jedál a potom ich porovnať s predchádzajúcimi kuchármi znamená, že vaše grilovanie sa bude postupom času pomaly zlepšovať, pretože pomocou údajov môžete zistiť, čo funguje a čo nie. 't.

Krok 3: Jedlo

Jedlo
Jedlo
Jedlo
Jedlo
Jedlo
Jedlo

Toto bolo prvýkrát, kedy som robil krátke hovädzie rebrá; na dochutenie som jednoducho použil soľ, čierne korenie a cesnakový prášok. Napriek tomu, že na začiatku boli horáky príliš vysoké, rebrá vyšli fantasticky. Prosim, pozri sa:

Krok 4: Záver

Nakoniec jedlo vyšlo úžasne, senzory, GridDB a Grafana krásne spolupracovali a získali sme niekoľko cenných údajov o tom, ako tieto veci znova uvariť, keď chceme nabudúce zapôsobiť na niektorých priateľov.

Odporúča: