Isi kandungan:
- Bekalan
- Langkah 1: API Web GridDB & FluentD
- Langkah 2: Grafana
- Langkah 3: Makanan
- Langkah 4: Kesimpulannya
Video: BBQ Pi (Dengan Visualisasi Data!): 4 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:08
Pengenalan
Barbeku biasanya merujuk kepada proses lambat menggunakan haba tidak langsung untuk memasak daging kegemaran anda. Walaupun kaedah memasak ini sangat popular - terutama di AS - ia memang mempunyai beberapa yang mungkin dianggap sebagai kelemahan yang agak serius: ia memerlukan perhatian berjam-jam untuk menghabiskan masa untuk memantau suhu lubang dan makanan anda. Masukkan: Raspberry Pi.
Projek Asal
Sumber asal untuk projek ini boleh didapati di sini: https://old.reddit.com/r/raspberry_pi/comments/a0… Intinya adalah bahawa pengguna reddit Produkt dapat menyampaikan data suhu makanan dan lubang dari harga yang agak murah, termometer wayarles yang tersedia secara komersial pada Raspberry Pi (yang telah dipasang pada pin GPIO modul RF kecil). Dalam projek asal (dihubungkan di atas), Produkt menyimpan datanya dalam pangkalan data sqlite dan dipaparkan ke laman web apache2 php yang dihoskan secara tempatan.
Penyelesaian ini telah menyelesaikan masalah asal yang disentuh dalam pengenalan blog ini: anda kini dapat memantau suhu makanan & lubang anda dari jauh dengan penyemak imbas web. Tetapi bagaimana jika kita ingin memperluas ini? Masukkan: GridDB.
Bekalan
Raspberry Pi4
Modul Penerima Tanpa Wayar SUNKEE 433Mhz Superheterodyne
Langkah 1: API Web GridDB & FluentD
Setelah melihat projek ini, pemikiran pertama saya - setelah gelombang kegembiraan awal - memikirkan cara saya memperluas fungsi. Dengan menggunakan GridDB dan plugin Grafananya, saya berusaha untuk memvisualisasikan data makanan & pit saya. Di luar itu, saya ingin menyediakan anotasi Grafana untuk mencari titik data yang tidak normal - tidak boleh mempunyai daging hangus!
Untuk memulakan, saya perlu menggunakan kod C dari projek asal untuk membaca data yang masuk dari termometer tanpa wayar dan memasukkan data tersebut ke pelayan GridDB saya. Untuk menghidupkan dan menjalankannya, saya memutar pelayan GridDB di Azure menggunakan mesin maya CentOS. Kaedah termudah untuk berkongsi data dari mesin tepi kami (Raspberry Pi) ke pelayan awan kami adalah melalui API Web GridDB. Oleh itu, pada vm itu, saya menyediakan WebAPI GridDB bersama dengan Fluentd dan penyambung GridDB yang menyertainya.
Sebelum benar-benar menghantar data ke awan, saya perlu membuat skema asas untuk bekas BBQ Pi saya. Set data yang masuk sangat mudah: kami mempunyai dua sensor suhu, satu id memasak, dan tentu saja, cap waktu. Jadi skema kami kelihatan seperti ini:
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_CON_SERM
Untuk membuat bekas kali ini, saya hanya menggunakan WebAPI (port 8080):
curl -X POST --basic -u admin: admin -H "Content-type: application / json" -d
'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": true, "columns": [{"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
Dengan bekas yang dibuat, saya perlu menggunakan Fluentd (port 8888) untuk menghantar data sebenar ke dalam bekas kami. Berikut adalah arahan CURL yang memuatkan beberapa data palsu:
curl -X POST -d 'json = {"date": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "probe1": "150", "probe2": "140" } 'https:// localhost: 8888 / griddb
Dari sana, saya perlu menambahkan kod asal untuk menghantar Permintaan POST HTTP setiap kali Pi kami membaca data dari lubang kami (kira-kira sekali setiap ~ 12 saat).
Sebagai catatan: menulis kod ini mengajar saya untuk menghargai betapa verbal bahasa C dapat:
int postData (char time , int cookid, int probe1, int probe2, char url )
{CURL * keriting; Res kod CURL; / * Di tingkap, ini akan memasukkan barang winsock * / curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; ejen char [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" date / ": \"% s.112Z / ", \" cookid / ": \"% d / ", \" probe1 / ": \"% d / ", / "probe2 \": / "% d \"} ", masa, cookid, probe1, probe2); / * dapatkan pemegang curl * / curl = curl_easy_init (); if (curl) {/ * Tetapkan dahulu URL yang akan menerima POST kami. URL ini juga boleh menjadi URL https:// jika itulah yang seharusnya menerima data. * / snprintf (ejen, ejen sizeof, "libcurl /% s", curl_version_info (CURLVERSION_NOW) -> versi); ejen [sizeof ejen - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, ejen); curl_easy_setopt (curl, CURLOPT_URL, url); curl_easy_setopt (curl, CURLOPT_USERNAME, "pentadbir"); 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); / * Lakukan permintaan, res akan mendapat kod pengembalian * / res = curl_easy_perform (curl); jika (res! = CURLE_OK) {size_t len = strlen (errbuf); fprintf (stderr, "\ nlibcurl: (% d)", res); jika (len) fprintf (stderr, "% s% s", errbuf, ((errbuf [len - 1]! = '\ n')? "\ n": "")); fprintf (stderr, "% s / n / n", curl_easy_strerror (res)); goto pembersihan; } pembersihan: curl_easy_cleanup (curl); curl_global_cleanup (); pulangan 0; }}
Dengan fungsi ini ditulis, saya hanya perlu menjalankannya pada masa yang sama dengan data sqlite disiarkan:
jika (goodData == 1) {
if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "INSERT INTO bacaan (cookid, time, probe1, probe2) NILAI (% d, '% s',% d, % d); ", cookID, buff, probe1, probe2); printf ("% s / n", sql); rc = sqlite3_exec (db, sql, callback, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("Ralat SQL:% s / n", zErrMsg); } lain {last_db_write = saat; } char url = "https://xx.xx.xx.xx: 8888 / griddb"; postData (buff, cookID, probe1, probe2, url); }}
Untuk memastikan data anda benar-benar dimasukkan ke pelayan anda, anda dapat menjalankan perintah berikut untuk membuat pertanyaan pada pangkalan data anda dan melihat hasilnya:
curl -X POST --basic -u admin: admin -H "Content-type: application / json" -d '{"limit": 1000}' https:// localhost: 8080 / griddb / v2 / defaultCluster / dbs / awam / bekas / bbqpi / baris
Langkah 2: Grafana
Dengan kod yang ada, sekarang apabila kita menggunakan portal web yang asli untuk memulakan "masak", kita akan menyimpan data suhu ke dalam pelayan GridDB secara serentak.
Langkah seterusnya adalah memvisualisasikan data kita menggunakan Grafana. Untuk melakukannya, kami mengikuti maklumat dari blog ini: di sini. Perkara yang baik mengenai pelaksanaan ini adalah bahawa sangat mudah untuk melihat data kami dipetakan ke dalam grafik yang bagus. Ia juga menambah penjelasan.
Anotasi yang dibincangkan di dalam blog menjadikan kita sangat mudah untuk memantau bila ada yang tidak kena dengan makanan kita atau lubang itu sendiri. Dalam kes saya, saya memasak tulang rusuk pendek daging lembu. Dengan itu, saya tidak mahu suhu di dalam lubang meningkat melebihi 275 darjah Fahrenheit. Sekiranya saya melihat suhu melebihi itu, saya boleh mematikan pembakar dan membiarkan panas merosot lagi:
Saya mempunyai peraturan yang sama kerana sensor benar-benar mengawasi makanan itu sendiri: jika makanan mencapai suhu dalaman 203 darjah fahrenheit, tulang rusuk sudah siap. Anda dapat melihat anotasi sendirian di hujung tukang masak di sini:
Secara keseluruhan, tukang masak itu hanya memerlukan saya sekitar ~ 4 jam, tetapi persediaan seperti ini akan sangat unggul jika saya memasak sesuatu yang memerlukan lebih banyak masa di panggangan (fikirkan asap rendah perlahan yang boleh bertahan ~ 12 Jam). Walaupun begitu, saya yakin nilainya jika alat ini mudah dilihat: dapat mencatat hasil makanan anda dan kemudian membandingkannya dengan tukang masak sebelumnya bermakna BBQ anda perlahan-lahan akan bertambah baik dari masa ke masa kerana anda dapat menggunakan data untuk melihat apa yang berfungsi dan apa yang tidak t.
Langkah 3: Makanan
Ini adalah kali pertama saya membuat tulang rusuk pendek daging lembu; untuk perasa, saya hanya menggunakan garam, lada hitam, dan serbuk bawang putih. Walaupun terdapat beberapa masalah dengan pembakar terlalu tinggi untuk sedikit pada awalnya, tulang rusuknya keluar dengan hebat. Sila lihat:
Langkah 4: Kesimpulannya
Pada akhirnya, makanannya keluar dengan hebat, sensor, GridDB, dan Grafana semuanya bekerja dalam konsert dengan indah, dan kami mendapat beberapa data berharga tentang cara memasak kembali ini untuk kali berikutnya kami ingin menarik perhatian beberapa rakan.
Disyorkan:
Sensor Suhu & Daging BBQ pada ESP8266 Dengan Paparan: 5 Langkah (dengan Gambar)
Sensor Suhu & Daging BBQ pada ESP8266 Dengan Paparan: Dalam Instruksional ini, saya akan menunjukkan kepada anda cara membuat versi sendiri alat BBQ yang mengukur suhu semasa di barbeku anda dan menghidupkan kipas untuk menyalakannya jika diperlukan. Selain itu, terdapat juga sensor suhu teras daging
Perolehan Data dan Sistem Visualisasi Data untuk MotoStudent Electric Racing Bike: 23 Langkah
Perolehan Data dan Sistem Visualisasi Data untuk MotoStudent Electric Racing Bike: Sistem pemerolehan data adalah koleksi perkakasan dan perisian yang bekerjasama untuk mengumpulkan data dari sensor luaran, menyimpan dan memprosesnya selepas itu sehingga dapat dilihat secara visual dan dianalisis, membenarkan jurutera membuat
Visualisasi Data Pengangkutan Dengan Peta Google: 6 Langkah
Visualisasi Data Pengangkutan Dengan Peta Google: Kami biasanya ingin merakam pelbagai data semasa berbasikal, kali ini kami menggunakan Wio LTE baru untuk mengesannya
Pembesar suara Bluetooth Meja Dengan Visualisasi Audio, Butang Sentuh dan NFC .: 24 Langkah (dengan Gambar)
Pembesar suara Bluetooth Meja Dengan Visualisasi Audio, Butang Sentuh dan NFC: Hai! Dalam Instructables ini saya akan menunjukkan bagaimana saya membuat pembesar suara Meja Bluetooth ini yang mempunyai visualisasi Audio Hebat dengan butang sentuh dan NFC. Boleh dipasangkan dengan mudah dengan peranti NFC Enabled dengan hanya satu ketukan. Tidak ada butang fizikal
Penguat Meja Dengan Visualisasi Audio, Jam Perduaan & Penerima FM: 8 Langkah (dengan Gambar)
Penguat Meja Dengan Visualisasi Audio, Jam Perduaan & Penerima FM: Saya suka penguat dan hari ini, saya akan berkongsi penguat meja kuasa rendah yang saya buat baru-baru ini. Penguat yang saya reka mempunyai beberapa ciri menarik. Ia mempunyai jam binari bersepadu dan dapat memberikan masa dan tarikh dan dapat memvisualisasikan audio yang sering disebut audio