Sisukord:

BBQ Pi (andmete visualiseerimisega!): 4 sammu (piltidega)
BBQ Pi (andmete visualiseerimisega!): 4 sammu (piltidega)

Video: BBQ Pi (andmete visualiseerimisega!): 4 sammu (piltidega)

Video: BBQ Pi (andmete visualiseerimisega!): 4 sammu (piltidega)
Video: Tourist Trophy: Closer To The Edge - Полный документальный фильм TT3D (Доступны субтитры !!) 2024, November
Anonim
BBQ Pi (andmete visualiseerimisega!)
BBQ Pi (andmete visualiseerimisega!)
BBQ Pi (andmete visualiseerimisega!)
BBQ Pi (andmete visualiseerimisega!)
BBQ Pi (andmete visualiseerimisega!)
BBQ Pi (andmete visualiseerimisega!)

Sissejuhatus

Grillimine viitab tavaliselt aeglasele protsessile, kus lemmikliha küpsetamiseks kasutatakse kaudset kuumust. Kuigi see toiduvalmistamismeetod on väga populaarne-eriti USA-s-, on sellel mõned, mida mõned võivad pidada üsna tõsiseks nõrkuseks: see nõuab tunde poolvalget tähelepanu, mis kulub teie süvendi ja toidu temperatuuri jälgimisele. Sisestage: Raspberry Pi.

Algne projekt

Selle projekti algallika leiate siit: https://old.reddit.com/r/raspberry_pi/comments/a0… Põhiprintsiip on see, et redditi kasutaja Produkt suutis edastada toidu- ja süvenditemperatuuri andmed suhteliselt odavalt, kaubanduslikult saadaval olevad traadita termomeetrid Raspberry Pi -le (mis oli GPIO -tihvtide külge kinnitanud väikese RF -mooduli). Esialgses projektis (ülaltoodud lingil) oli Produkti andmed salvestatud sqlite andmebaasi ja kuvatud kohalikult hostitud apache2 php veebisaidile.

See lahendus lahendab juba selle blogi sissejuhatuses käsitletud algse probleemi: nüüd saate veebisirvija abil eemalt jälgida oma toidu- ja kaevu temperatuuri. Aga mis siis, kui tahame seda laiendada? Sisestage: GridDB.

Tarvikud

Vaarika Pi4

SUNKEE 433Mhz Superheterodyne traadita vastuvõtja moodul

Samm: GridDB veebi API ja FluentD

GridDB veebi API ja FluentD
GridDB veebi API ja FluentD

Kui ma seda projekti nägin, mõtlesin pärast esimest põnevuslainet, kuidas ma funktsionaalsust laiendan. Kasutades GridDB -d ja selle Grafana pistikprogrammi, püüdsin oma toidu- ja kaevandusandmeid visualiseerida. Peale selle soovisin seadistada Grafana märkmeid, et otsida ebanormaalseid andmepunkte - ei saa olla söestunud liha!

Alustamiseks pidin traadita termomeetri andmete lugemiseks kasutama algse projekti C -koodi ja postitama need andmed oma GridDB -serverisse. Selle käivitamiseks käivitasin Azure'is GridDB -serveri, kasutades CentOS -i virtuaalmasinat. Lihtsaim viis jagada oma servamasinast (Raspberry Pi) pilveserverisse andmeid GridDB veebiliidese kaudu. Niisiis seadistasin sellel vm -l GridDB WebAPI koos Fluentdiga ja sellega kaasneva GridDB -pistikuga.

Enne andmete pilve saatmist pidin looma oma BBQ Pi konteineri põhiskeemi. Andmekogumi saabumine on äärmiselt lihtne: meil on kaks temperatuuriandurit, üks küpsetuskood ja loomulikult ajatempel. Seega näeb meie skeem välja selline:

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

Selle ajasarja konteineri loomiseks kasutasin lihtsalt WebAPI -d (port 8080):

curl -X POST -põhiline -u admin: admin -H "Sisu tüüp: rakendus/json" -d

'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": true, "veerud": [{"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

Kui konteiner oli loodud, pidin kasutama Fluentdi (port 8888), et postitada meie konteinerisse tegelikud andmed. Siin on käsk CURL, mis postitab mõned näivandmed:

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

Sealt pidin lisama algse koodi, et saata HTTP POST -päring alati, kui meie Pi loeb meie kaevust andmeid (umbes kord ~ 12 sekundi jooksul).

Vahemärkusena: selle koodi kirjutamine õpetas mind hindama seda, kui palju C -keel võib olla:

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

{CURL *curl; CURLcode res; / * Windowsis käivitab see winsocki asjad */ curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; söeagent [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" date / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" probe1 / ": \"%d / ", / "probe2 \": / "%d \"} ", time, cookid, probe1, probe2); / * saada lokitang */ curl = curl_easy_init (); if (curl) { /* Esmalt määrake URL, mis hakkab meie postitust saama. See URL võib sama hästi olla https:// URL, kui see peaks andmeid vastu võtma. */ snprintf (agent, agendi suurus, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> versioon); agent [agendi suurus - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, agent); 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); / * Täida päring, res saab tagastamiskoodi */ res = curl_easy_perform (curl); 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)); minna puhastama; } puhastamine: curl_easy_cleanup (curl); curl_global_cleanup (); tagasitulek 0; }}

Kui see funktsioon on kirjutatud, pidin selle lihtsalt käivitama samal ajal, kui sqlite'i andmed postitati:

kui (head andmed == 1) {

if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "INSERT INTO näidud (cookid, time, probe1, probe2) VALUES (%d, '%s',%d, %d); ", cookID, buff, probe1, probe2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, tagasihelistamine, 0 ja zErrMsg); if (rc! = SQLITE_OK) {printf ("SQL -i viga: %s / n", zErrMsg); } else {last_db_write = sekundit; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, probe1, probe2, url); }}

Veendumaks, et teie andmed sisestatakse teie serverisse, saate oma andmebaasist päringu tegemiseks ja tulemuste vaatamiseks käivitada järgmise käsu:

curl -X POST -põhiline -u admin: admin -H "Sisu tüüp: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ public/konteinerid/bbqpi/read

2. samm: Grafana

Grafana
Grafana
Grafana
Grafana

Kui kood on paigas, salvestame nüüd, kui kasutame koka valmistamiseks algset veebiportaali, samaaegselt oma temperatuuriandmeid GridDB serverisse.

Järgmine samm on meie andmete visualiseerimine Grafana abil. Selleks järgisime selle ajaveebi teavet: siin. Selle rakendamise juures on tore see, et meie andmeid on äärmiselt lihtne näha kena graafikuna. See lisab ka märkusi.

Blogis käsitletud märkuste abil on meil äärmiselt lihtne jälgida, kas meie toiduga või süvendiga läheb midagi valesti. Minu puhul küpsetasin veiseliha lühikesi ribisid. Nendega ei tahtnud ma, et kaevu temperatuur kasvaks üle 275 kraadi Fahrenheiti. Kui nägin, et temperatuur ületab selle, võiksin põleti välja lülitada ja lasta kuumusel uuesti langeda:

Mul oli sarnane reegel, et andur jälgib tegelikult toitu ise: kui toit jõudis sisetemperatuurini 203 kraadi fahrenheiti, olid ribid valmis. Üksikut märkust näete koka lõpus:

Kokkuvõttes võttis kokk mul aega umbes ~ 4 tundi, kuid selline seadistus oleks tõeliselt suurepärane, kui ma keedaksin midagi, mis oleks nõudnud grillil veelgi rohkem aega (mõelge aeglasele suitsule, mis kestab ~ 12 tundi) tundi). Sellele vaatamata usun, et see tööriist on kergesti nähtav: kui saate oma toiduainete tulemusi registreerida ja seejärel võrrelda seda eelmiste kokkadega, tähendab see, et teie grillimine paraneb aja jooksul aeglaselt, kuna saate andmete abil näha, mis töötab ja mis mitte. 't.

Samm: toit

Toit
Toit
Toit
Toit
Toit
Toit

See oli esimene kord, kui ma kunagi veiseliha lühikesi ribisid tegin; maitsestamiseks kasutasin lihtsalt soola, musta pipart ja küüslaugupulbrit. Hoolimata mõningatest probleemidest, mille tõttu põleti sai alguses natuke kõrgeks, tulid ribid fantastilised. Palun vaata:

4. samm: järeldus

Lõppkokkuvõttes tuli toit kohutavalt hea, andurid, GridDB ja Grafana töötasid suurepäraselt koos ning saime väärtuslikke andmeid selle kohta, kuidas neid asju uuesti küpsetada, kui tahame mõnele sõbrale muljet avaldada.

Soovitan: