Tartalomjegyzék:

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

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

Videó: BBQ Pi (Adatmegjelenítéssel!): 4 lépés (képekkel)
Videó: РЕЦЕПТ МЕНЯ ПОКОРИЛ ТЕПЕРЬ ГОТОВЛЮ ТОЛЬКО ТАК ШАШЛЫК ОТДЫХАЕТ 2024, November
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: