BBQ Pi (Adatmegjelenítéssel!): 4 lépés (képekkel)
BBQ Pi (Adatmegjelenítéssel!): 4 lépés (képekkel)
Anonim
BBQ Pi (Adatmegjelenítéssel!)
BBQ Pi (Adatmegjelenítéssel!)
BBQ Pi (Adatmegjelenítéssel!)
BBQ Pi (Adatmegjelenítéssel!)
BBQ Pi (Adatmegjelenítéssel!)
BBQ Pi (Adatmegjelenítéssel!)

Bevezetés

A grillezés leggyakrabban a lassú folyamatra vonatkozik, amikor a közvetett hő felhasználásával kedvenc húsát főzzük. Bár ez a főzési módszer rendkívül népszerű-különösen az Egyesült Államokban-, vannak olyanok, amelyeket egyesek meglehetősen súlyos gyengeségnek tartanak: órákig félig világos figyelmet kell fordítani a gödör és az étel hőmérsékletének megfigyelésére. Írja be: Raspberry Pi.

Az eredeti projekt

A projekt eredeti forrása itt található: https://old.reddit.com/r/raspberry_pi/comments/a0… A lényeg az, hogy a Reddit felhasználó Produkt viszonylag olcsón tudta továbbítani az élelmiszer- és gödörhőmérséklet adatait, kereskedelmi forgalomban kapható vezeték nélküli hőmérőket egy Raspberry Pi -hez (amely a GPIO csapjaihoz egy kis RF modult csatlakoztatott). Az eredeti projektben (fent linkelve) Produkt adatait egy sqlite adatbázisban tárolták, és megjelenítették egy helyileg üzemeltetett apache2 php webhelyen.

Ez a megoldás már megoldja a blog bevezetőjében érintett eredeti problémát: mostantól távolról követheti nyomon az étel és a gödör hőmérsékletét egy webböngészővel. De mi van, ha ezt szeretnénk bővíteni? Írja be: GridDB.

Kellékek

Raspberry Pi4

SUNKEE 433Mhz Superheterodyne vezeték nélküli vevő modul

1. lépés: GridDB Web API és FluentD

GridDB Web API és FluentD
GridDB Web API és FluentD

Amikor megláttam ezt a projektet, az első gondolatom - az izgalom kezdeti hulláma után - azon volt, hogy hogyan fogom kibővíteni a funkcionalitást. A GridDB és annak Grafana bővítménye segítségével arra törekedtem, hogy vizualizáljam az ételeim és a pit adataimat. Ezen kívül Grafana -megjegyzéseket szerettem volna létrehozni, hogy bármilyen rendellenes adatpontot felkutassak - nem lehet elszenesedett hús!

A kezdéshez az eredeti projekt C kódját kellett használnom a vezeték nélküli hőmérőből érkező adatok beolvasásához és az adatok közzétételéhez a GridDB szerveremen. Ennek üzembe helyezése érdekében egy Centrid virtuális gép segítségével felpörgettem egy GridDB -kiszolgálót az Azure -on. A legegyszerűbb módja a GridDB webes API -n keresztül az adatok megosztásának az élgépünkről (Raspberry Pi) a felhőszerverünkhöz. Tehát ezen a vm -n beállítottam a GridDB WebAPI -ját a Fluentd -el és a hozzá tartozó GridDB csatlakozóval együtt.

Mielőtt ténylegesen adatokat küldenék a felhőbe, létre kellett hoznom a BBQ Pi tároló alapvető sémáját. A beérkező adatkészlet rendkívül egyszerű: két hőmérséklet -érzékelőnk van, egy főzési azonosító és természetesen az időbélyeg. Tehát a sémánk így néz ki:

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_)

Ennek az idősor -tárolónak a létrehozásához egyszerűen a WebAPI -t használtam (8080 -as port):

curl -X POST -alap -u admin: admin -H "Tartalom -típus: application/json" -d

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

A tároló létrehozásakor a Fluentd (8888 port) használatát kellett használnom a tényleges adatok tárolására. Íme egy CURL parancs, amely néhány ál adatot tesz közzé:

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

Innentől kezdve hozzá kellett adnom az eredeti kódot, hogy elküldhessek egy HTTP POST kérést, amikor a PI adatokat olvas a gödörünkből (kb. ~ 12 másodpercenként).

Mellék megjegyzésként: ennek a kódnak az írása megtanított arra, hogy értékeljem, mennyire bőséges a C nyelv:

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

{CURL *curl; CURLcode res; / * Windowsban ez elindítja a winsock dolgokat */ 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 / ", \" probe1 / ": \"%d / ", / "szonda2 \": / "%d \"} ", time, cookid, probe1, probe2); / * kap egy curl fogantyút */ curl = curl_easy_init (); if (curl) { /* Először állítsa be azt az URL -t, amely hamarosan megkapja a POST -t. Ez az URL ugyanúgy lehet https:// URL is, ha ennek kell fogadnia az adatokat. */ snprintf (ügynök, ügynök mérete, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> verzió); ügynök [ügynök mérete - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, ügynök); 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); / * Végezze el a kérést, a res megkapja a visszatérési kódot */ 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)); goto tisztítás; } tisztítás: curl_easy_cleanup (curl); curl_global_cleanup (); visszatérés 0; }}

Amikor ezt a függvényt írtam, csak az sqlite adatok közzétételével egy időben kellett futtatnom:

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, probe1, probe2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, visszahívás, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("SQL hiba: %s / n", zErrMsg); } else {last_db_write = sec; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, probe1, probe2, url); }}

Annak biztosítása érdekében, hogy adatait valóban behelyezze a szerverébe, futtassa a következő parancsot az adatbázis lekérdezéséhez és az eredmények megtekintéséhez:

curl -X POST -alap -u admin: admin -H "Tartalom -típus: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ public/konténerek/bbqpi/sorok

2. lépés: Grafana

Grafana
Grafana
Grafana
Grafana

Ha a kód megvan, most, amikor az eredeti internetes portált használjuk a „szakács” elindításához, egyidejűleg tároljuk hőmérsékleti adatainkat a GridDB szerverünkön.

A következő lépés az adataink vizualizálása a Grafana segítségével. Ehhez követtük a blog információit: itt. A szép dolog ebben a megvalósításban az, hogy rendkívül könnyű látni adatainkat egy szép grafikonon. Emellett megjegyzéseket is hozzáad.

A blogban tárgyalt megjegyzések rendkívül egyszerűvé teszik számunkra, hogy figyelemmel kísérhessük, ha valami baj van az ételeinkkel vagy magával a gödörrel. Az én esetemben marhahús rövid bordákat főztem. Ezekkel nem akartam, hogy a gödörben a hőmérséklet 275 Fahrenheit fok fölé emelkedjen. Ha azt látnám, hogy a hőmérséklet meghaladja ezt, akkor lekapcsolhatom az égőt, és hagyhatom, hogy a hő újra csökkenjen:

Hasonló szabályom volt az érzékelőre, hogy ténylegesen figyelje az ételt: ha az étel 203 fahrenheit belső hőmérsékletre emelkedett, a bordák készen álltak. A főző végén található magányos megjegyzést itt láthatja:

Mindent összevetve a szakács csak körülbelül 4 órát vett igénybe, de ez a fajta beállítás igazán kiváló lenne, ha olyasmit főznék, ami még több időt igényelt volna a grillben (gondoljunk egy lassú füstre, ami ~ 12 percig tart) órák). Ennek ellenére úgy gondolom, hogy ez az eszköz könnyen látható: ha naplózza az ételei eredményeit, majd összehasonlítja az előző szakácsokkal, az azt jelenti, hogy a grillezés lassan javulni fog az idő múlásával, mivel az adatok alapján megnézheti, mi működik és mi nem 't.

3. lépés: Az étel

Étel
Étel
Étel
Étel
Étel
Étel

Ez volt az első alkalom, hogy marhahúsból készült rövid bordákat készítettem; fűszerezéshez egyszerűen sót, fekete borsot és fokhagymaport használtam. Annak ellenére, hogy néhány probléma merült fel abban, hogy az égő egy kicsit túl magasra emelkedett az elején, a bordák fantasztikusak lettek. Kérem nézze meg:

4. lépés: Következtetés

Végül az ételek fantasztikusak lettek, az érzékelők, a GridDB és a Grafana gyönyörűen működtek együtt, és értékes adatokat kaptunk arról, hogyan kell újra főzni ezeket a dolgokat, amikor legközelebb le akarunk nyűgözni néhány barátot.

Ajánlott: