Mündəricat:

Barbekü Pi (Məlumat Vizualizasiyası ilə!): 4 Addım (Şəkillərlə)
Barbekü Pi (Məlumat Vizualizasiyası ilə!): 4 Addım (Şəkillərlə)

Video: Barbekü Pi (Məlumat Vizualizasiyası ilə!): 4 Addım (Şəkillərlə)

Video: Barbekü Pi (Məlumat Vizualizasiyası ilə!): 4 Addım (Şəkillərlə)
Video: Pişik sizə yaxınlaşarsa deməli ALLAHtəala tərəfindən 3 işarət var deməkdir 2024, Dekabr
Anonim
Barbekü Pi (Məlumat Vizualizasiyası ilə!)
Barbekü Pi (Məlumat Vizualizasiyası ilə!)
Barbekü Pi (Məlumat Vizualizasiyası ilə!)
Barbekü Pi (Məlumat Vizualizasiyası ilə!)
Barbekü Pi (Məlumat Vizualizasiyası ilə!)
Barbekü Pi (Məlumat Vizualizasiyası ilə!)

Giriş

Barbekü ən çox sevdiyiniz ətləri bişirmək üçün dolayı istidən istifadə edərək yavaş prosesə aiddir. Bu bişirmə üsulu olduqca populyar olsa da-xüsusilə ABŞ-da-bəzilərinin olduqca ciddi bir zəifliyi hesab edə biləcəyi şeylərə malikdir: çuxurunuzun və yeməyinizin temperaturunu izləmək üçün saatlarla yarı aydın bir diqqət tələb olunur. Daxil edin: Raspberry Pi.

Orijinal Layihə

Bu layihənin orijinal mənbəyini burada tapa bilərsiniz: https://old.reddit.com/r/raspberry_pi/comments/a0… Bunun mahiyyəti budur ki, reddit istifadəçisi Produkt qida və çuxur temperaturu məlumatlarını nisbətən ucuz qiymətə ötürə bilmişdir., bir Raspberry Pi üçün kommersiya olaraq mövcud olan simsiz termometrlər (GPIO pinlərinə kiçik bir RF modulu bağlamışdı). Orijinal layihədə (yuxarıda əlaqələndirilmiş) Produkt, məlumatlarının bir sqlite verilənlər bazasında saxlanılmasını və yerli olaraq yerləşdirilən apache2 php veb saytında göstərilməsini təmin etdi.

Bu həll artıq bu bloqun təqdimatında toxunulan orijinal problemi həll edir: indi bir veb brauzeri ilə yeməklərinizi və çuxurlarınızın temperaturunu uzaqdan izləyə bilərsiniz. Amma bunu genişləndirmək istəsək nə olar? Daxil edin: GridDB.

Təchizat

Moruq Pi4

SUNKEE 433Mhz Superheterodyne Simsiz Alıcı Modulu

Addım 1: GridDB Web API və FluentD

GridDB Web API və FluentD
GridDB Web API və FluentD

Bu layihəni görəndə ilk düşüncəm - ilkin həyəcan dalğasından sonra - funksionallığı necə genişləndirəcəyimi düşünürdüm. GridDB və onun Grafana plaginindən istifadə edərək yemək və çuxur məlumatlarımı görüntüləməyə çalışdım. Bunun xaricində, hər hansı bir anomal məlumat nöqtəsini axtarmaq üçün Grafana şərhləri qurmaq istədim - heç bir kömürlü ət ola bilməz!

Başlamaq üçün, simsiz termometrdən gələn məlumatları oxumaq və bu məlumatları GridDB serverimə yerləşdirmək üçün orijinal layihədəki C kodundan istifadə etməliydim. Bunu işə salmaq üçün bir CentOS virtual maşını istifadə edərək Azure -da bir GridDB Server açdım. Kenar maşınımızdan (Raspberry Pi) bulud serverimizə məlumat paylaşmağın ən asan yolu GridDB Web API vasitəsi ilə idi. Beləliklə, bu vm -də, Fluentd və onu müşayiət edən GridDB konnektoru ilə birlikdə GridDB -in WebAPI -ni qurdum.

Məlumatı əslində buluda göndərməzdən əvvəl, Barbekü Pi konteynerim üçün əsas sxem yaratmalıydım. Daxil olan məlumat bazası son dərəcə sadədir: iki temperatur sensoru, bir aşpaz identifikatorumuz və əlbəttə ki, vaxt damgası var. Beləliklə, sxemimiz belə görünür:

timeseries = gridstore.put_container ("bbqpi", [("vaxt", griddb. GS_TYPE_TIMESTAMP), ("çerez", griddb. GS_TYPE_INT), ("probe1", griddb. GS_TYPE_INT), ("probe2", griddb. GS_TYPE_INT)], griddb. GS_TONT. ER

Bu zaman konteynerini yaratmaq üçün sadəcə WebAPI (port 8080) istifadə etdim:

curl -X POST -əsas -u admin: admin -H "Məzmun növü: application/json" -d

'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": doğru, "sütunlar": [{"ad": "vaxt", "tip": "TIMESTAMP"}, {"name": "cookid", "type": "INTEGER"}, {"name": "probe1", "type": "INTEGER"}, {"name": "probe2", "type": "INTEGER"}]} '\ https:// localhost: 8080/griddb/v2/defaultCluster/dbs/public/container

Konteyner yaradıldıqda, faktiki məlumatları konteynerimizə yerləşdirmək üçün Fluentd (port 8888) istifadə etməliyəm. Budur bəzi saxta məlumatları yerləşdirən CURL əmri:

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

Oradan, Pi'imiz çuxurumuzdan məlumat oxuduqda (təxminən hər 12 saniyədə bir) bir HTTP POST İstəyi göndərmək üçün orijinal kodu əlavə etməliydim.

Yan qeyd olaraq: bu kodu yazmaq mənə C dilinin nə qədər müfəssəl olduğunu başa düşməyi öyrətdi:

int postData (char vaxtı , int cookid, int probe1, int probe2, char url )

{CURL *əymək; CURLcode res; / * Windows -da, bu winsock stuff */ curl_global_init (CURL_GLOBAL_ALL) başlayacaq; char errbuf [CURL_ERROR_SIZE] = {0,}; char agenti [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" date / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" probe1 / ": \"%d / ", / "probe2 \": / "%d \"} ", zaman, aşpaz, prob1, prob2)); / * qıvrım sapı alın */ curl = curl_easy_init (); if (curl) { /* Əvvəlcə POST -unu almaq üzrə olan URL -i təyin edin. Bu URL, məlumatları almalı olduğu təqdirdə bir https:// URL də ola bilər. */ snprintf (agent, sizeof agent, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> versiya); agent [agentof size - 1] = 0; curl_easy_setopt (curl, 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 (curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt (curl, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt (curl, CURLOPT_POSTFIELDS, json); / * İstəyi yerinə yetirin, res qaytarma kodunu alacaq */ res = curl_easy_perform (curl); əgər (res! = CURLE_OK) {size_t len = strlen (errbuf); fprintf (stderr, "\ nlibcurl: (%d)", res); əgər (len) fprintf (stderr, "%s%s", errbuf, ((errbuf [len - 1]! = '\ n')? "\ n": "")); fprintf (stderr, "%s / n / n", curl_easy_strerror (res)); təmizləmək lazımdır; } təmizləmə: curl_easy_cleanup (curl); curl_global_cleanup (); qaytarma 0; }}

Yazılan bu funksiya ilə, sqlite məlumatlarının yerləşdirildiyi anda eyni zamanda işləməsini istədim:

əgər (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, prob2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, callback, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("SQL xətası: %s / n", zErrMsg); } başqa {last_db_write = saniyə; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, probe1, probe2, url); }}

Verilərinizin serverinizə daxil edildiyindən əmin olmaq üçün verilənlər bazanızı sorğulamaq və nəticələrə baxmaq üçün aşağıdakı əmri işlədə bilərsiniz:

curl -X POST --basic -u admin: admin -H "Content -type: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ ictimai/konteynerlər/bbqpi/satırlar

Addım 2: Grafana

Qrafana
Qrafana
Qrafana
Qrafana

Kod mövcud olduqda, indi "aşpaz" işə salmaq üçün orijinal veb portaldan istifadə edərkən, eyni zamanda temperatur məlumatlarımızı GridDB serverimizdə saxlayacağıq.

Növbəti addım məlumatlarımızı Grafana istifadə edərək görüntüləmək olacaq. Bunu etmək üçün bu bloqdakı məlumatları izlədik: burada. Bu tətbiqin gözəl tərəfi, məlumatlarımızı gözəl bir qrafikdə görmək çox asandır. Əlavə şərhlər də əlavə edir.

Bloqda müzakirə olunan şərhlər, yeməyimizdə və ya çuxurda bir şeyin səhv olduğunu izləməyimizi son dərəcə asanlaşdırır. Mənim vəziyyətimdə mal əti qısa qabırğa bişirirdim. Bunlarla birlikdə çuxurdakı temperaturun 275 dərəcədən yuxarı yüksəlməsini istəmirdim. İstiliyin o həddən artıq olduğunu görsəm, ocağı söndürüb istinin yenidən batmasına icazə verə bilərdim:

Sensorun qidanın özünü izləməsi üçün oxşar bir qaydam var idi: əgər qida 203 dərəcə fahrenheit -ə çatsa, qabırğalar hazır idi. Aşpazın sonunda tək notu burada görə bilərsiniz:

Ümumiyyətlə, aşpaz mənə təxminən təxminən 4 saat çəkdi, amma ızgarada daha çox vaxt tələb edəcək bir şey bişirsəm belə bir quruluş həqiqətən üstün olardı (~ 12 davam edən aşağı yavaş tüstünü düşünün) saat). Buna baxmayaraq, bu vasitənin asanlıqla göründüyünün dəyərinə inanıram: yeməklərinizin nəticələrini yaza və sonra əvvəlki aşpazlarla müqayisə edə bilmək, Barbekünüzün zaman keçdikcə daha da yaxşılaşacağını bildirir, çünki nəyin işlədiyini və nəyin olmadığını görmək üçün məlumatlardan istifadə edə bilərsiniz. 't.

Addım 3: Qida

Qida
Qida
Qida
Qida
Qida
Qida

İlk dəfə idi ki, dana ətindən qısa qabırğa hazırlayırdım; ədviyyat üçün sadəcə duz, qara bibər və sarımsaq tozu istifadə etdim. Başlanğıcda burnerin bir qədər yüksək olması ilə bağlı bəzi problemlərə baxmayaraq, qabırğalar fantastik çıxdı. Zəhmət olmasa baxın:

Addım 4: Nəticə

Sonda, yeməklər möhtəşəm çıxdı, sensorlar, GridDB və Grafana hamısı konsertdə gözəl işlədilər və bəzi dostlarımızı təəccübləndirmək istədiklərimiz üçün bunları növbəti dəfə necə bişirəcəyimizlə bağlı dəyərli məlumatlar əldə etdik.

Tövsiyə: