Sadržaj:
Video: BBQ Pi (s vizualizacijom podataka!): 4 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:33
Uvod
Roštilj se obično odnosi na spori proces korištenja neizravne topline za kuhanje vašeg omiljenog mesa. Iako je ova metoda kuhanja iznimno popularna-osobito u SAD-u-ima nešto što bi neki mogli smatrati prilično ozbiljnom slabošću: zahtijeva sate polulucidne pozornosti za praćenje temperature vaše jame i hrane. Unesite: Malina Pi.
Izvorni projekt
Izvorni izvor za ovaj projekt možete pronaći ovdje: https://old.reddit.com/r/raspberry_pi/comments/a0… Suština je u tome što je korisnik Reddita Produkt uspio prenijeti podatke o temperaturi hrane i jama iz relativno jeftinih, komercijalno dostupni bežični termometri za Raspberry Pi (koji je na svoje GPIO pinove priključio mali RF modul). U izvornom projektu (gore spojen), Produkt je imao pohranjene svoje podatke u sqlite bazi podataka i prikazao ih na lokalno hostiranoj apache2 php web stranici.
Ovo rješenje već rješava izvorni problem o kojem smo govorili u uvodu ovog bloga: sada možete daljinski nadzirati temperaturu hrane i jela u web pregledniku. Ali što ako ovo želimo proširiti? Unesite: GridDB.
Pribor
Malina Pi4
SUNKEE 433Mhz Superheterodinski bežični prijemnički modul
Korak 1: GridDB Web API & FluentD
Nakon što sam vidio ovaj projekt, moja prva pomisao - nakon početnog vala uzbuđenja - bila je razmišljanje o načinima na koje mogu proširiti funkcionalnost. Koristeći GridDB i njegov dodatak Grafana, pokušao sam vizualizirati svoje podatke o hrani i jami. Osim toga, želio sam postaviti napomene Grafane za traženje bilo kakvih abnormalnih točaka podataka - ne mogu imati pougljeno meso!
Za početak sam morao upotrijebiti C kôd iz izvornog projekta za čitanje podataka koji dolaze s bežičnog termometra i postavljanje tih podataka na moj GridDB poslužitelj. Da bih ovo pokrenuo, pokrenuo sam GridDB poslužitelj na Azureu pomoću CentOS virtualnog stroja. Najlakši način za razmjenu podataka s našeg rubnog stroja (Raspberry Pi) na našem poslužitelju u oblaku bio je putem GridDB Web API -ja. Dakle, na tom sam vm -u postavio GAPDB -ov WebAPI zajedno s Fluentdom i pripadajućim GridDB konektorom.
Prije nego što sam zapravo poslao podatke u oblak, morao sam stvoriti osnovnu shemu za svoj BBQ Pi spremnik. Skup podataka koji dolazi vrlo je jednostavan: imamo dva senzora temperature, jedan ID kuhara i, naravno, vremensku oznaku. Dakle, naša shema izgleda ovako:
timeseries = gridstore.put_container ("bbqpi", [("vrijeme", griddb. GS_TYPE_TIMESTAMP), ("kuhanje", griddb. GS_TYPE_INT), ("sonda1", griddb. GS_TYPE_INT), ("probe2", griddb. GS_TYPE_INT)], griddb. GS_TSER_)
Za izradu ovog spremnika vremenske serije jednostavno sam upotrijebio WebAPI (port 8080):
curl -X POST --basic -u admin: admin -H "Vrsta sadržaja: aplikacija/json" -d
'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": true, "columns": [{"name": "time", "type": "TIMESTAMP"}, {"name": "cookid", "type": "INTEGER"}, {"name": "sonda1", "type": "INTEGER"}, {"name": "sonda2", "type": "INTEGER"}]} '\ https:// localhost: 8080/griddb/v2/defaultCluster/dbs/public/container
S stvorenim spremnikom, morao sam koristiti Fluentd (port 8888) za objavljivanje stvarnih podataka u naš spremnik. Evo naredbe CURL koja objavljuje neke lažne podatke:
curl -X POST -d 'json = {"date": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "sonda1": "150", "sonda2": "140" } 'https:// localhost: 8888/griddb
Odatle sam morao dodati izvorni kôd za slanje HTTP POST zahtjeva kad god je naš Pi čitao podatke iz naše jame (otprilike jednom svakih ~ 12 sekundi).
Kao napomenu: pisanje ovog koda naučilo me je cijeniti koliko opširan jezik C može biti:
int postData (vrijeme char , int cookid, int probe1, int probe2, char url )
{CURL *curl; CURLcode res; / * U prozorima će se pokrenuti winsock stvari */ curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; char agent [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" datum / ": \"%s.112Z / ", \" kuhanje / ": \"%d / ", \" sonda1 / ": \"%d / ", / "sonda2 \": / "%d \"} ", vrijeme, kuhanje, sonda1, sonda2); / * get curl handle */ curl = curl_easy_init (); if (curl) { /* Prvo postavite URL koji će uskoro primiti naš POST. Ovaj URL može isto tako biti https:// URL ako je to ono što bi trebalo primiti podatke. */ snprintf (agent, sizeof agent, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> verzija); agent [sizeof agent - 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); / * Izvršite zahtjev, res će dobiti povratni kod */ 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)); idi na čišćenje; } čišćenje: curl_easy_cleanup (curl); curl_global_cleanup (); return 0; }}
S napisanom ovom funkcijom, samo sam je trebao pokrenuti u isto vrijeme kad su se objavljivali sqlite podaci:
if (goodData == 1) {
if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "INSERT INTO očitanja (kuhanje, vrijeme, sonda1, sonda2) VRIJEDNOSTI (%d, '%s',%d, %d); ", cookID, buff, sonda1, sonda2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, povratni poziv, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("SQL pogreška: %s / n", zErrMsg); } else {last_db_write = secs; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, sonda1, sonda2, url); }}
Kako biste bili sigurni da su vaši podaci zapravo umetnuti na vaš poslužitelj, možete pokrenuti sljedeću naredbu za postavljanje upita u bazu podataka i pregled rezultata:
curl -X POST --basic -u admin: admin -H "Content -type: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ public/kontejneri/bbqpi/redovi
Korak 2: Grafana
S postavljenim kodom, sada kada koristimo izvorni web portal za početak kuhanja, istovremeno ćemo pohranjivati naše podatke o temperaturi na naš GridDB poslužitelj.
Sljedeći korak bit će vizualizacija naših podataka pomoću Grafane. Da bismo to učinili, slijedili smo informacije s ovog bloga: ovdje. Lijepa stvar u ovoj implementaciji je to što je iznimno lako vidjeti naše podatke ucrtane u lijepi grafikon. Također dodaje napomene.
Napomene o kojima se raspravlja na blogu iznimno nam olakšavaju praćenje kada nešto pođe po zlu s našom hranom ili sa samim košticama. U mom slučaju kuhala sam goveđa kratka rebra. S njima nisam želio da temperatura u jami poraste iznad 275 stupnjeva celzijusa. Kad bih vidio da temperatura prelazi tu granicu, mogao bih isključiti plamenik i dopustiti da toplina ponovno padne:
Imao sam slično pravilo za senzor koji je držao podatke o samoj hrani: ako je hrana dosegla unutarnju temperaturu od 203 stupnja Fahrenheita, rebra su bila spremna. Usamljenu napomenu na kraju kuhara možete vidjeti ovdje:
Sve u svemu, kuharu mi je trebalo samo oko 4 sata ili tako nešto, ali ovakav način postavljanja doista bi se istaknuo da sam kuhao nešto za što bi mi bilo potrebno još više vremena na roštilju (pomislite na nisko spor dim koji traje ~ 12 sati). Unatoč tome, vjerujem da je vrijednost ako je ovaj alat lako uočljiv: mogućnost bilježenja rezultata vaše hrane i zatim usporedba s prethodnim kuharima znači da će vam roštilj s vremenom postajati sve bolji jer možete koristiti podatke da vidite što radi, a što ne 't.
Korak 3: Hrana
Ovo je bio prvi put da sam radila goveđa kratka rebra; za začine sam jednostavno koristila sol, crni papar i češnjak u prahu. Unatoč nekim problemima s time da je plamenik u početku bio previsok za mrvicu, rebra su ispala fantastično. Molim te pogledaj:
Korak 4: Zaključak
Na kraju, hrana je ispala izvrsna, senzori, GridDB i Grafana svi su odlično funkcionirali, a dobili smo i neke vrijedne podatke o tome kako ponovno skuhati ove stvari za sljedeći put kada želimo impresionirati neke prijatelje.
Preporučeni:
Zapisnik podataka GPS Cap Cap: 7 koraka (sa slikama)
GPS Cap Log Logger: Evo izvrsnog projekta za vikend, ako se bavite trekingom ili dugim vožnjama biciklom, te vam je potreban GPS data logger za praćenje svih vaših putovanja/vožnji koje ste poduzeli … Nakon što dovršite izgradnju i preuzeo podatke s GPS modula tr
Kako napraviti snimač podataka o vlažnosti i temperaturi u stvarnom vremenu s Arduino UNO i SD karticom - DHT11 Simulator zapisivača podataka u Proteusu: 5 koraka
Kako napraviti snimač podataka o vlažnosti i temperaturi u stvarnom vremenu s Arduino UNO i SD karticom | Simulacija DHT11 zapisničara u Proteusu: Uvod: Bok, ovdje Liono Maker, ovdje je veza na YouTube. Radimo na kreativnom projektu s Arduinom i radimo na ugrađenim sustavima. Zapisnik podataka: Zapisnik podataka (ujedno i zapisnik podataka ili snimač podataka) je elektronički uređaj koji bilježi podatke tijekom vremena s
Stolni Bluetooth zvučnik sa audio vizualizacijom, tipkama na dodir i NFC .: 24 koraka (sa slikama)
Stolni Bluetooth zvučnik sa audio vizualizacijom, dodirnim gumbima i NFC -om .: Pozdrav! U ovom Instructables -u pokazat ću kako sam napravio ovaj stolni Bluetooth zvučnik koji ima zadivljujuću audio vizualizaciju s tipkama na dodir i NFC -om. Može se jednostavno upariti s uređajima s omogućenim NFC -om jednim dodirom. Nema fizičkog gumba
Stolno pojačalo sa audio vizualizacijom, binarnim satom i FM prijemnikom: 8 koraka (sa slikama)
Stolno pojačalo sa audio vizualizacijom, binarnim satom i FM prijemnikom: Volim pojačala i danas ću podijeliti svoje stolno pojačalo male snage koje sam nedavno napravio. Pojačalo koje sam dizajnirao ima neke zanimljive značajke. Ima integrirani binarni sat i može dati vrijeme i datum te može vizualizirati zvuk koji se često naziva audio
EAL-Industri4.0-RFID skupljanje podataka do baze podataka: 10 koraka (sa slikama)
EAL-Industri4.0-RFID skupljanje podataka u bazi podataka: Dette projekt omhandler opsamling iz v æ gtdata, registracija od identiteta vha. RFID, zaostajanje podataka u MySQL bazi podataka. node-RED, samo ažuriranje i ponašanje u skladu s opsamlede podacima u et C# programu formiranim u aplikaciji Windows Form