Агуулгын хүснэгт:

BBQ Pi (Өгөгдлийн дүрслэлтэй!): 4 алхам (зурагтай)
BBQ Pi (Өгөгдлийн дүрслэлтэй!): 4 алхам (зурагтай)

Видео: BBQ Pi (Өгөгдлийн дүрслэлтэй!): 4 алхам (зурагтай)

Видео: BBQ Pi (Өгөгдлийн дүрслэлтэй!): 4 алхам (зурагтай)
Видео: TRUE CREEPY CAMPING HORROR STORIES (VOL. 9) 2024, Арванхоёрдугаар сар
Anonim
BBQ Pi (Мэдээллийн дүрслэлтэй!)
BBQ Pi (Мэдээллийн дүрслэлтэй!)
BBQ Pi (Мэдээллийн дүрслэлтэй!)
BBQ Pi (Мэдээллийн дүрслэлтэй!)
BBQ Pi (Өгөгдлийн дүрслэлтэй!)
BBQ Pi (Өгөгдлийн дүрслэлтэй!)

Танилцуулга

Шарсан мах хийх нь ихэвчлэн дуртай махаа хоол хийхэд шууд бус дулааныг ашиглах явцыг хэлдэг. Хэдийгээр хоол хийх энэ арга нь маш их алдартай байдаг, ялангуяа АНУ-д энэ нь нэлээд ноцтой сул тал гэж тооцогддог: таны уурхай, хоолны температурыг хянахад хагас цагаар хагас цаг зарцуулах шаардлагатай байдаг. Оруулах: Raspberry Pi.

Анхны төсөл

Энэхүү төслийн анхны эх сурвалжийг эндээс олж болно: https://old.reddit.com/r/raspberry_pi/comments/a0… Үүний гол утга нь reddit хэрэглэгч Produkt нь хоол хүнс, нүхний температурын мэдээллийг харьцангуй хямд үнээр дамжуулж чаддаг байсан явдал юм., зарах боломжтой утасгүй термометрийг Raspberry Pi -д (GPIO тээглүүртээ жижиг RF модулийг хавсаргасан байсан). Анхны төсөлд (дээр холбосон), Produkt өөрийн өгөгдлийг sqlite мэдээллийн санд хадгалж, орон нутгийн apache2 php вэбсайт дээр харуулдаг байв.

Энэхүү шийдэл нь энэ блогийн танилцуулгад дурдсан анхны асуудлыг аль хэдийн шийдсэн болно: та одоо вэб хөтөч ашиглан хоол хүнс, нүхнийхээ температурыг алсаас хянах боломжтой боллоо. Гэхдээ бид үүнийг өргөжүүлэхийг хүсч байвал яах вэ? Оруулах: GridDB.

Хангамж

Raspberry Pi4

SUNKEE 433Mhz Superheterodyne утасгүй хүлээн авагчийн модуль

Алхам 1: GridDB Web API & FluentD

GridDB вэб API ба FluentD
GridDB вэб API ба FluentD

Энэхүү төслийг хараад миний сэтгэл хөдлөлийн анхны давалгааны дараа миний функцийг хэрхэн өргөжүүлэх талаар бодож байсан. GridDB болон түүний Grafana залгаасыг ашигласнаар би хоол хүнс, нүхнийхээ мэдээллийг дүрслэн харуулахыг зорьсон. Үүнээс гадна би ямар ч гажигтай өгөгдлийн цэгийг хайж олохын тулд Графана тэмдэглэгээ хийхийг хүсч байна - ямар ч шарсан мах байж болохгүй!

Эхлэхийн тулд би анхны төслийн C кодыг ашиглан утасгүй термометрээс ирж буй өгөгдлийг уншиж, энэ өгөгдлийг GridDB сервердээ оруулах шаардлагатай болсон. Үүнийг ажиллуулахын тулд би Azure дээр CentOS виртуал машин ашиглан GridDB серверийг ажиллуулсан. Манай захын машинаас (Raspberry Pi) үүл сервер рүүгээ мэдээлэл хуваалцах хамгийн хялбар арга бол GridDB Web API -ээр дамжуулан дамжуулах явдал байв. Тиймээс, энэ vm дээр би GridDB -ийн WebAPI -ийг Fluentd болон дагалдах GridDB холбогчтой хамт суулгасан.

Үнэн хэрэгтээ үүл рүү өгөгдөл илгээхээс өмнө би BBQ Pi контейнерийнхээ үндсэн схемийг бий болгох хэрэгтэй болсон. Өгөгдлийн сан орж ирж байгаа нь маш энгийн: бидэнд хоёр температур мэдрэгч, нэг тогооны id, мэдээж цаг хугацааны тамга байдаг. Тиймээс бидний схем иймэрхүү харагдаж байна.

timeseries = gridstore.put_container ("bbqpi", [("цаг", griddb. GS_TYPE_TIMESTAMP), ("жигнэмэг", griddb. GS_TYPE_INT), ("шалгалт1", griddb. GS_TYPE_INT), ("шалгалт2", griddb. GS_TYPE_INT)], griddb. GS_TONT. ER

Энэ цагийн контейнерийг бий болгохын тулд би зүгээр л WebAPI (порт 8080) ашигласан:

curl -X POST -үндсэн -u админ: админ -H "Агуулгын төрөл: application/json" -d

'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": үнэн, "багана": [{"нэр": "цаг", "төрөл": "TIMESTAMP"}, {"name": "cookid", "type": "INTEGER"}, {"name": "probe1", "type": "INTEGER"}, {"name": "probe2", "type": "INTEGER"}]} '\ https:// localhost: 8080/griddb/v2/defaultCluster/dbs/public/container

Контейнерийг бий болгосноор би бодит мэдээллийг манай контейнерт оруулахын тулд Fluentd (8888 порт) ашиглах шаардлагатай болсон. Энд зарим хуурамч өгөгдөл оруулах CURL тушаал байна:

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

Тэндээс би Пи манай нүхнээс өгөгдлийг уншиж байх үед (~ 12 секунд тутамд нэг удаа) HTTP POST хүсэлт илгээх анхны кодыг оруулах шаардлагатай болсон.

Анхаарах зүйл: энэ кодыг бичих нь С хэл нь хэр утга учиртай болохыг ойлгохыг надад заасан юм.

int postData (char цаг , int cookid, int probe1, int probe2, char url )

{CURL *curl; CURL кодын засвар; / * Цонхнуудад энэ нь winsock stuff -ийг эхлүүлэх болно */ curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; char агент [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" date / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" probe1 / ": \"%d / ", / "probe2 \": / "%d \"} ", цаг, cookid, probe1, probe2); / * буржгар бариул авах */ curl = curl_easy_init (); if (curl) { /* Эхлээд манай POST хүлээн авах гэж байгаа URL -г тохируулна уу. Энэ URL нь өгөгдлийг хүлээн авах ёстой зүйл бол https:// URL байж болно. */ snprintf (агент, sizeof agent, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> хувилбар); агент [sizeof agent - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, төлөөлөгч); curl_easy_setopt (curl, CURLOPT_URL, url); curl_easy_setopt (curl, CURLOPT_USERNAME, "админ"); curl_easy_setopt (curl, CURLOPT_PASSWORD, "админ"); curl_easy_setopt (curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt (curl, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt (curl, CURLOPT_POSTFIELDS, json); / * Хүсэлтийг биелүүл, res нь буцаах кодыг авах болно */ 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)); цэвэрлэх шаардлагатай; } цэвэрлэх: curl_easy_cleanup (curl); curl_global_cleanup (); буцаах 0; }}

Энэ функцийг бичсэнээр би sqlite өгөгдлийг байрлуулж байх үед үүнийг ажиллуулах шаардлагатай болсон.

хэрэв (сайн өгөгдөл == 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, callback, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("SQL алдаа: %s / n", zErrMsg); } өөр {last_db_write = secs; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, probe1, probe2, url); }}

Таны өгөгдлийг сервер дээрээ оруулж байгаа эсэхийг шалгахын тулд та дараах тушаалыг ажиллуулж өгөгдлийн сангаа асууж, үр дүнг харах боломжтой.

curl -X POST -үндсэн -u админ: админ -H "Агуулгын төрөл: application/json" -d '{"хязгаар": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ нийтийн/сав/bbqpi/мөр

Алхам 2: Графана

Графана
Графана
Графана
Графана

Кодыг бэлэн болгосноор одоо бид анхны вэб портал ашиглан "тогооч" ажиллуулахдаа температурын мэдээллээ нэгэн зэрэг GridDB сервер дээрээ хадгалах болно.

Дараагийн алхам бол Grafana ашиглан бидний өгөгдлийг төсөөлөх явдал юм. Үүнийг хийхийн тулд бид энэ блог дээрх мэдээллийг дагаж мөрдсөн болно: энд. Энэхүү хэрэгжүүлэлтийн нэг сайхан зүйл бол бидний өгөгдлийг сайхан график болгон харуулахад маш хялбар юм. Энэ нь бас тэмдэглэгээ нэмдэг.

Блог дээр хэлэлцсэн тэмдэглэгээ нь бидний хоол хүнс эсвэл нүхэнд ямар нэг зүйл буруу болсныг хянах боломжийг бидэнд олгодог. Миний хувьд би үхрийн махны богино хавирга хийж байсан. Тэдгээрийн тусламжтайгаар нүхний температур Фаренгейтийн 275 хэмээс хэтрэхийг би хүсээгүй. Хэрэв би үүнээс хэтэрсэн температурыг харсан бол би шарагчийг унтрааж, дулааныг дахин бууруулж болно.

Би мэдрэгчтэй ижил төстэй дүрмийг баримталдаг байсан бөгөөд хэрэв хоол хүнс нь Фаренгейтийн 203 градусын температуртай бол хавирга бэлэн болно. Та тогоочийн төгсгөлд байгаа ганц тайлбарыг эндээс харж болно.

Ерөнхийдөө тогооч надад ердөө 4 цаг орчим хугацаа зарцуулсан боловч хэрвээ би шарсан маханд илүү их цаг зарцуулах шаардлагатай хоол хийж байсан бол ийм тохиргоо үнэхээр гайхалтай байх болно (удаан үргэлжлэх утаа багатай гэж бодоорой ~ 12) цаг). Гэсэн хэдий ч, хэрэв энэ хэрэгсэл хялбархан харагддаг бол үнэ цэнэ нь гэдэгт би итгэдэг: хоол хүнснийхээ үр дүнг бүртгэж, өмнөх тогооч нартай харьцуулж үзэх нь цаг хугацаа өнгөрөх тусам таны шарсан мах аажмаар сайжирна гэсэн үг юм. т.

Алхам 3: Хоол хүнс

Хоол
Хоол
Хоол
Хоол
Хоол
Хоол

Энэ бол би анх удаа үхрийн богинохон хавирга хийсэн; амтлагч болгохын тулд би зүгээр л давс, хар чинжүү, сармис нунтаг хэрэглэсэн. Шатаагчтай холбоотой зарим асуудлууд эхэндээ жаахан хэт өндөр байсан ч хавирга нь үнэхээр гайхалтай гарч ирэв. Үүнийг үзээрэй:

Алхам 4: Дүгнэлт

Эцэст нь хоол үнэхээр гайхалтай болсон, мэдрэгчид, GridDB, Grafana нар бүгд концерт дээр маш сайн ажилласан бөгөөд бид эдгээр зүйлийг дараагийн удаа хэрхэн яаж хоол хийх талаар хэдэн найз нөхөддөө сэтгэгдэл төрүүлэхийг хүссэн үнэ цэнэтэй мэдээллийг олж авлаа.

Зөвлөмж болгож буй: