Mundarija:
- Ta'minotlar
- 1 -qadam: GridDB Web API va FluentD
- 2 -qadam: Grafana
- 3 -qadam: Oziq -ovqat
- 4 -qadam: Xulosa
Video: Barbekyu Pi (ma'lumotlar vizualizatsiyasi bilan!): 4 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:24
Kirish
Barbekyu odatda sevimli go'shtni pishirish uchun bilvosita issiqlikni ishlatishning sekin jarayonini anglatadi. Ovqat pishirishning bu usuli juda mashhur bo'lsa-da, ayniqsa AQShda-bu, ba'zi jiddiy zaiflik deb hisoblaydigan narsaga ega: u sizning chuquringiz va ovqatingizning haroratini kuzatish uchun yarim soatlik aniq e'tiborni talab qiladi. Kirish: Raspberry Pi.
Original loyiha
Loyihaning asl manbasini bu erda topish mumkin: https://old.reddit.com/r/raspberry_pi/comments/a0… Buning mohiyati shundaki, reddit foydalanuvchisi Produkt oziq -ovqat va chuqur harorati ma'lumotlarini nisbatan arzon narxlarda uzatishga muvaffaq bo'lgan., tijoratda mavjud bo'lgan Raspberry Pi simsiz termometrlari (GPIO pinlariga kichik chastotali RF modulini ulagan). Dastlabki loyihada (yuqorida bog'langan), Produkt o'z ma'lumotlarini sqlite ma'lumotlar bazasida saqlagan va mahalliy apache2 php veb -saytida ko'rsatgan.
Bu yechim blogning kirish qismida ko'rib chiqilgan muammoni hal qiladi: endi siz veb -brauzer yordamida ovqat va chuqur haroratini masofadan kuzatib borishingiz mumkin. Ammo, agar biz buni kengaytirmoqchi bo'lsak nima bo'ladi? Kirish: GridDB.
Ta'minotlar
Raspberry Pi4
SUNKEE 433 MGts Superheterodin simsiz qabul qilish moduli
1 -qadam: GridDB Web API va FluentD
Loyihani ko'rib, birinchi hayajon to'lqinidan so'ng, men uning imkoniyatlarini kengaytirish yo'llari haqida o'yladim. GridDB va uning Grafana plaginidan foydalanib, men oziq -ovqat va pit ma'lumotlarini ingl. Bundan tashqari, men Grafana izohlarini o'rnatib, g'ayritabiiy ma'lumotlar punktlarini qidirib topishni xohlardim - hech qanday kuygan go'sht bo'lishi mumkin emas!
Ishni boshlash uchun men simsiz termometrdan kelgan ma'lumotlarni o'qish va GridDB serverimga joylashtirish uchun asl loyihadagi C kodidan foydalanishim kerak edi. Buni ishga tushirish uchun men CentOS virtual mashinasi yordamida Azure -da GridDB serverini ishga tushirdim. Bizning Raspberry Pi -dan ma'lumotlarni bulutli serverimizga almashishning eng oson yo'li GridDB Web API orqali amalga oshirildi. Shunday qilib, o'sha vmda men GridDB ning WebAPI -ni Fluentd va unga tegishli GridDB ulagichi bilan birga o'rnatdim.
Ma'lumotni bulutga yuborishdan oldin, men BBQ Pi konteynerining asosiy sxemasini tuzishim kerak edi. Ma'lumotlar to'plami juda oddiy: bizda ikkita harorat sensori, bitta oshpaz identifikatori va, albatta, vaqt tamg'asi bor. Shunday qilib, bizning sxemamiz quyidagicha ko'rinadi:
vaqtlar = gridstore.put_container ("bbqpi", [("vaqt", griddb. GS_TYPE_TIMESTAMP), ("pishiriq", griddb. GS_TYPE_INT), ("probe1", griddb. GS_TYPE_INT), ("prob2", griddb. GS_TYPE_INT)], griddb. GS_TON
Ushbu konteyner konteynerini yaratish uchun men faqat WebAPI (port 8080) dan foydalanardim:
curl -X POST --basic -u admin: admin -H "Kontent turi: application/json" -d
'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": true, "ustunlar": [ {"nomi": "vaqt", "turi": "TIMESTAMP"}, {"name": "cookid", "type": "INTEGER"}, {"name": "probe1", "type": "INTEGER"}, {"name": "prob2", "type": "INTEGER"}]} '\ https:// localhost: 8080/griddb/v2/defaultCluster/dbs/public/container
Yaratilgan konteyner bilan men haqiqiy ma'lumotlarni bizning konteynerga joylashtirish uchun Fluentd (port 8888) dan foydalanishim kerak edi. Mana, ba'zi qo'g'irchoq ma'lumotlarni joylashtiradigan CURL buyrug'i:
curl -X POST -d 'json = {"sana": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "probe1": "150", "prob2": "140" } "https:// localhost: 8888/griddb
U erdan, men PI bizning chuqurchamizdan ma'lumotlarni o'qiyotganida (taxminan har 12 sekundda) HTTP POST so'rovini yuborish uchun asl kodni qo'shishim kerak edi.
Yon eslatma sifatida: bu kodni yozish menga C tili qanchalik aniq bo'lishi mumkinligini tushunishga o'rgatdi:
int postData (char vaqti , int cookid, int probe1, int probe2, char url )
{CURL *burish; CURLcode rez; / * Oynalarda, bu winsock narsalarni ishga tushiradi */ curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; char agenti [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" sana / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" probe1 / ": \"%d / ", / "probe2 \": / "%d \"} ", vaqt, cookid, prob1, prob2)); / * jingalak tutqichni oling */ curl = curl_easy_init (); if (curl) { /* Avval bizning POSTni qabul qilmoqchi bo'lgan URLni o'rnating. Agar bu ma'lumotni olish kerak bo'lsa, bu URL xuddi https:// URL bo'lishi mumkin. */ snprintf (agent, sizeof agent, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> versiya); agent [agentof hajmi - 1] = 0; curl_easy_setopt (jingalak, 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 (burish, CURLOPT_VERBOSE, 1L); curl_easy_setopt (burish, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt (curl, CURLOPT_POSTFIELDS, json); / * So'rovni bajaring, res qaytish kodini oladi */ 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)); tozalash kerak; } tozalash: curl_easy_cleanup (burish); curl_global_cleanup (); qaytarish 0; }}
Bu funksiya yozilganida, men uni sqlite ma'lumotlari joylashtirilgan vaqtda ishga tushirishim kerak edi:
agar (goodData == 1) {
if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "INSERT INTO o'qishlari (cookid, time, probe1, prob2)) VALUES (%d, '%s',%d, %d); ", cookID, buff, prob1, prob2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, qayta qo'ng'iroq, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("SQL xatosi: %s / n", zErrMsg); } boshqa {last_db_write = sek; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, prob1, prob2, url); }}
Ma'lumotlar serverga kiritilganiga ishonch hosil qilish uchun ma'lumotlar bazasini so'rash va natijalarni ko'rish uchun quyidagi buyruqni bajarishingiz mumkin:
curl -X POST --basic -u admin: admin -H "Content -type: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ ommaviy/konteynerlar/bbqpi/qatorlar
2 -qadam: Grafana
Kod mavjud bo'lganda, biz "oshpaz" ni ishga tushirish uchun asl veb -portaldan foydalansak, biz bir vaqtning o'zida harorat ma'lumotlarini GridDB serverimizda saqlaymiz.
Keyingi qadam, bizning ma'lumotlarimizni Grafana yordamida vizualizatsiya qilish bo'ladi. Buning uchun biz ushbu blog ma'lumotlarini kuzatdik: bu erda. Ushbu dasturning yaxshi tomoni shundaki, bizning ma'lumotlarimizni chiroyli grafikda ko'rish juda oson. Shuningdek, izohlar qo'shiladi.
Blogda muhokama qilingan izohlar bizning ovqatimiz yoki chuqurning o'zida biror narsa noto'g'ri ketayotganini kuzatishni juda osonlashtiradi. Mening holatimda, men mol go'shti qisqa qovurg'a pishirardim. Ular bilan men chuqurdagi harorat Farengeytning 275 darajasidan oshib ketishini xohlamadim. Agar men harorat bundan oshib ketganini ko'rsam, yondirgichni o'chirib, yana issiqlikni pasayishiga yo'l qo'ygan bo'lardim:
Menda xuddi shunday qoida bor edi, sensori ovqatni o'zi kuzatib turadi: agar ovqat 203 daraja farenheit haroratga yetgan bo'lsa, qovurg'alar tayyor edi. Siz oshpazning oxirida yolg'iz izohni ko'rishingiz mumkin:
Umuman olganda, oshpaz menga taxminan 4 soat vaqt sarfladi, lekin agar men panjara ichida ko'proq vaqt talab qiladigan narsani pishirgan bo'lsam, bunday sozlash juda yaxshi bo'lardi (past tutun haqida o'ylang ~ 12) soat). Shunga qaramay, menimcha, agar bu vosita oson ko'rinadigan bo'lsa: ovqatlaringizning natijalarini qayd qilib, keyin ularni oldingi oshpazlar bilan taqqoslash, vaqt o'tishi bilan sizning barbekingiz asta -sekin yaxshilanadi, chunki siz ma'lumotlardan foydalanib, nima ishlayotganini va nima ishlamasligini bilib olasiz. 't.
3 -qadam: Oziq -ovqat
Bu men birinchi marta mol go'shti kalta qovurg'asini yasashim edi; ziravorlar uchun men shunchaki tuz, qora murch va sarimsoq kukunidan foydalandim. Boshida burner biroz ko'tarilib ketishi bilan bog'liq ba'zi muammolarga qaramay, qovurg'alar juda ajoyib chiqdi. Iltimos, ko'rib chiqing:
4 -qadam: Xulosa
Oxir -oqibat, taom juda ajoyib bo'lib chiqdi, sensorlar, GridDB va Grafana hammasi yaxshi konsertda ishladilar va biz bu narsalarni qanday tayyorlash mumkinligi haqida qimmatli ma'lumotlarga ega bo'ldik.
Tavsiya:
ESP8266 displeyli Barbekyu harorati va go'sht sensori: 5 qadam (rasmlar bilan)
ESP8266 displeyli Barbekyu harorati va go'sht sensori: Ushbu yo'riqnomada men sizga barbekyu ichidagi hozirgi haroratni o'lchaydigan va kerak bo'lganda uni yoqish uchun fanni yoqadigan barbekyu asbobining o'z versiyasini qanday qilishni ko'rsataman. Bunga qo'shimcha ravishda, go'shtning asosiy harorat sensori attac ham bor
Chiroq orqali ma'lumotlar uzatish !!!: 4 qadam (rasmlar bilan)
Yorug'lik orqali ma'lumot uzatish !!!: Salom bolalar, men uzoq vaqtdan keyin yana yangi va oddiy loyiha bilan bo'lishishga qaytdim. Ushbu loyihada men sizga yorug'lik signallarini bir joydan boshqasiga yorug'lik orqali qanday uzatishni ko'rsataman. Ma'lumotni yorug'lik orqali yuborish yangi tushuncha emas, lekin yaqinda
Atmosfera ifloslanishining vizualizatsiyasi: 4 qadam
Atmosfera ifloslanishining vizualizatsiyasi: Havoning ifloslanishi muammosi tobora ko'proq e'tiborni tortmoqda. Bu safar biz PM2.5 ni Wio LTE va yangi Laser PM2.5 Sensor yordamida kuzatishga harakat qildik
Ochiq kodli ma'lumotlar yozuvchisi (OPENSDL): 5 qadam (rasmlar bilan)
Ochiq kodli ma'lumotlar yozuvchisi (OPENSDL): Ushbu loyihaning maqsadi-bino haroratini, nisbiy namligini, yoritilishini o'z ichiga olgan va qo'shimcha datchiklar uchun kengaytiriladigan binolarning ishlashini baholash uchun arzon narxlardagi o'lchash tizimini loyihalashtirish, qurish va sinovdan o'tkazish. va rivojlantirish
Simsiz barbekyu termometrini ko'paytirish (rev 2): 11 qadam
Simsiz barbekyu termometrining diapazonini kengaytirish (rev 2): Ushbu yo'riqnomada simsiz barbekyu termometrining diapazonini ko'paytirishning juda oddiy jarayoni tasvirlangan. Jarayon deyarli barcha RF termometrlari uchun o'xshash bo'lishi kerak bo'lsa -da, men buzadigan maxsus model bu "Maverick RediChek Remote Wir