Sisällysluettelo:

BBQ Pi (tietojen visualisoinnilla!): 4 vaihetta (kuvilla)
BBQ Pi (tietojen visualisoinnilla!): 4 vaihetta (kuvilla)

Video: BBQ Pi (tietojen visualisoinnilla!): 4 vaihetta (kuvilla)

Video: BBQ Pi (tietojen visualisoinnilla!): 4 vaihetta (kuvilla)
Video: Почему Новгород называли Господином, а Киев Матерью городов Русских? 2024, Marraskuu
Anonim
BBQ Pi (tietojen visualisoinnilla!)
BBQ Pi (tietojen visualisoinnilla!)
BBQ Pi (tietojen visualisoinnilla!)
BBQ Pi (tietojen visualisoinnilla!)
BBQ Pi (tietojen visualisoinnilla!)
BBQ Pi (tietojen visualisoinnilla!)

Johdanto

Grillaus viittaa tyypillisesti hitaaseen prosessiin käyttää epäsuoraa lämpöä suosikkilihasi kypsentämiseen. Vaikka tämä ruoanlaitto on erittäin suosittu-etenkin Yhdysvalloissa-sillä on jotkut saattavat pitää melko vakavana heikkoutena: se vaatii tuntikausia puoliksi kirkasta huomiota kuopan ja ruoan lämpötilan seuraamiseen. Anna: Raspberry Pi.

Alkuperäinen projekti

Alkuperäinen lähde tälle projektille löytyy täältä: https://old.reddit.com/r/raspberry_pi/comments/a0… Pääasia on, että reddit -käyttäjä Produkt pystyi välittämään ruoan ja kuopan lämpötilatiedot suhteellisen halvalla, kaupallisesti saatavilla olevat langattomat lämpömittarit Raspberry Pi -laitteeseen (joka oli kiinnittänyt GPIO -nastoihinsa pienen RF -moduulin). Alkuperäisessä projektissa (linkki yllä) Produktin tiedot tallennettiin sqlite -tietokantaan ja näytettiin paikallisesti isännöidylle apache2 php -verkkosivustolle.

Tämä ratkaisu ratkaisee jo tämän blogin johdannossa käsitellyn alkuperäisen ongelman: voit nyt seurata ruoan ja kuopan lämpötilaa etänä verkkoselaimella. Mutta entä jos haluamme laajentaa tätä? Anna: GridDB.

Tarvikkeet

Vadelma Pi4

Langaton SUNKEE 433 MHz: n Superheterodyne -vastaanotinmoduuli

Vaihe 1: GridDB Web API ja FluentD

GridDB Web API ja FluentD
GridDB Web API ja FluentD

Kun näin tämän projektin, ensimmäinen ajatukseni - ensimmäisen jännityksen aallon jälkeen - ajattelin tapoja laajentaa toiminnallisuutta. Käyttämällä GridDB: tä ja sen Grafana -laajennusta pyrin visualisoimaan ruoka- ja pit -tiedot. Tämän lisäksi halusin perustaa Grafana -merkinnät etsimään epänormaaleja tietopisteitä - ei voi olla hiiltynyttä lihaa!

Aluksi minun piti käyttää alkuperäisen projektin C -koodia lukeakseni langattomasta lämpömittarista tulevat tiedot ja lähettääkseni tiedot GridDB -palvelimelleni. Saadakseni tämän käyttöön, käynnistin GridDB -palvelimen Azureen CentOS -virtuaalikoneella. Helpoin tapa jakaa tietoja reunakoneeltamme (Raspberry Pi) pilvipalvelimellemme oli GridDB Web -sovellusliittymän kautta. Joten siinä vm: ssä asensin GridDB: n WebAPI: n yhdessä Fluentdin ja siihen liittyvän GridDB -liittimen kanssa.

Ennen kuin todella lähetin tietoja pilveen, minun piti luoda BBQ Pi -säiliön perusmalli. Tietoaineisto on erittäin yksinkertainen: meillä on kaksi lämpötila -anturia, yksi keittotunnus ja tietysti aikaleima. Joten kaavamme näyttää tältä:

timeseries = gridstore.put_container ("bbqpi", [("aika", ruudukko. GS_TYPE_TIMESTAMP), ("keitin", ruudukko. GS_TYPE_INT), ("koetin1", ruudukko. GS_TYPE_INT), ("koetin2", ruudukko. GS_TYPE_INT)], ruudukko. GS_CONTAINER_)

Tämän aikasarjan säilön luomiseen käytin yksinkertaisesti WebAPI: tä (portti 8080):

curl -X POST --perus -u admin: admin -H "Sisältötyyppi: 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

Kun säiliö on luotu, minun oli käytettävä Fluentdia (portti 8888) todellisten tietojen lähettämiseen säilöön. Tässä on CURL -komento, joka lähettää joitain nuketietoja:

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

Sieltä minun piti liittää alkuperäinen koodi lähettääkseni HTTP POST -pyynnön aina, kun Pi luki tietoja kuopastamme (noin kerran ~ 12 sekunnin välein).

Sivuhuomautuksena: tämän koodin kirjoittaminen opetti minua ymmärtämään kuinka paljon C -kieli voi olla:

int postData (char -aika , int cookid, int probe1, int probe2, char url )

{CURL *curl; CURLcode res; / * Windowsissa tämä käynnistää winsock -tavarat */ curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; char agentti [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" date / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" probe1 / ": \"%d / ", / "koetin2 \": / "%d \"} ", aika, keittomalli, anturi1, anturi2); / * hanki curl -kahva */ curl = curl_easy_init (); if (curl) { /* Aseta ensin URL -osoite, joka saa POST -viestimme. Tämä URL -osoite voi yhtä hyvin olla https:// URL -osoite, jos sen pitäisi vastaanottaa tiedot. */ snprintf (agentti, agentin koko, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> versio); agentti [agentin koko - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, agentti); 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); / * Suorita pyyntö, res saa palautuskoodin */ 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)); mennä siivous; } puhdistus: curl_easy_cleanup (curl); curl_global_cleanup (); palauta 0; }}

Kun tämä toiminto on kirjoitettu, minun piti vain suorittaa se samaan aikaan, kun sqlite -tiedot lähetettiin:

jos (goodData == 1) {

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

Varmistaaksesi, että tietosi on todella lisätty palvelimellesi, voit suorittaa seuraavan komennon kyselyyn tietokannastasi ja tarkastella tuloksia:

curl -X POST --perus -u admin: admin -H "Content -type: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ public/kontit/bbqpi/rivit

Vaihe 2: Grafana

Grafana
Grafana
Grafana
Grafana

Kun koodi on käytössä, nyt kun käytämme alkuperäistä verkkoportaalia "kokin" aloittamiseen, tallennamme samanaikaisesti lämpötilatietomme GridDB -palvelimellemme.

Seuraava askel on visualisoida tietomme Grafanan avulla. Tätä varten seurasimme tämän blogin tietoja: täältä. Mukava asia tässä toteutuksessa on, että on erittäin helppo nähdä tietomme kaaviona kauniiksi kaavioksi. Se lisää myös huomautuksia.

Blogissa käsitellyt huomautukset tekevät meidän erittäin helpoksi seurata, milloin jokin menee pieleen joko ruoan tai kuopan kanssa. Minun tapauksessani keitin naudanlihan lyhyitä kylkiluita. Näiden kanssa en halunnut, että kuopan lämpötila kasvaa yli 275 Fahrenheit -asteen. Jos näin lämpötilan ylittävän sen, voisin sammuttaa polttimen ja antaa lämmön laskeutua uudelleen:

Minulla oli samanlainen sääntö anturille, joka todella tarkkaili ruokaa itse: jos ruoka lämpiää 203 celsiusasteeseen, kylkiluut olivat valmiita. Näet yksinäisen huomautuksen kokin lopussa täältä:

Kaiken kaikkiaan kokki kesti vain noin 4 tuntia, mutta tämäntyyppinen kokoonpano olisi todella loistava, jos kokkaisin jotain, joka olisi vaatinut vielä enemmän aikaa grillissä (ajattele hitaasti savua, joka kestää ~ 12 tuntia). Siitä huolimatta uskon, että tämä työkalu on helposti havaittavissa: jos voit kirjata ruokasi tulokset ja verrata niitä aikaisempiin kokkeihin, grillauksesi paranee hitaasti ajan myötä, kun voit käyttää tietoja nähdäksesi, mikä toimii ja mikä ei 't.

Vaihe 3: Ruoka

Ruoka
Ruoka
Ruoka
Ruoka
Ruoka
Ruoka

Tämä oli ensimmäinen kerta, kun olen tehnyt naudanlihan lyhyitä kylkiluita; mausteeksi käytin yksinkertaisesti suolaa, mustapippuria ja valkosipulijauhetta. Huolimatta joistakin ongelmista, jotka johtuivat siitä, että poltin nousi aluksi hieman korkealle, kylkiluut tulivat upeiksi. Katso, ole hyvä:

Vaihe 4: Johtopäätös

Lopulta ruoka tuli loistavaa, anturit, GridDB ja Grafana toimivat kaikki yhdessä kauniisti, ja saimme arvokasta tietoa siitä, miten kypsennämme nämä asiat uudelleen seuraavan kerran, kun haluamme tehdä vaikutuksen ystäviin.

Suositeltava: