Мазмуну:

BBQ Pi (Маалыматты визуалдаштыруу менен!): 4 кадам (Сүрөттөр менен)
BBQ Pi (Маалыматты визуалдаштыруу менен!): 4 кадам (Сүрөттөр менен)

Video: BBQ Pi (Маалыматты визуалдаштыруу менен!): 4 кадам (Сүрөттөр менен)

Video: BBQ Pi (Маалыматты визуалдаштыруу менен!): 4 кадам (Сүрөттөр менен)
Video: How to Build a Brick BBQ 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 Wireless Receiver Module

1 -кадам: GridDB Web API & FluentD

GridDB Web API & FluentD
GridDB Web API & FluentD

Бул долбоорду көргөндө, биринчи толкундануумдан кийин - функционалды кеңейтүү жолдору жөнүндө ойлондум. GridDB жана анын Grafana плагинин колдонуу менен, мен тамак -ашымдын маалыматын элестетүүгө аракет кылдым. Мындан тышкары, мен Grafana аннотацияларын орнотуп, аномалдуу маалымат пункттарын издегим келди - эч кандай куурулган эт болушу мүмкүн эмес!

Баштоо үчүн, мен зымсыз термометрден келген маалыматтарды окуп, ошол маалыматты GridDB сервериме жайгаштыруу үчүн баштапкы долбоордун С кодун колдонушум керек болчу. Муну ишке киргизүү үчүн мен Azureде CentOS виртуалдык машинасын колдонуп GridDB Серверин ачтым. Маалыматты биздин булут серверибизге бөлүшүүнүн эң оңой жолу GridDB Web API аркылуу болду. Ошентип, ошол вмде мен Fluentd жана аны коштогон GridDB туташтыргычы менен бирге GridDBдин WebAPIин орноттум.

Чындыгында булутка чейин маалыматтарды жөнөтүүдөн мурун, мен BBQ Pi контейнеримдин негизги схемасын түзүшүм керек болчу. Келип жаткан маалымат базасы өтө жөнөкөй: бизде эки температура сенсору, бир ашпозчу идентификатору жана, албетте, убакыт белгиси бар. Ошентип, биздин схема мындай көрүнөт:

timeseries = gridstore.put_container ("bbqpi", [("убакыт", griddb. GS_TYPE_TIMESTAMP), ("кукид", griddb. GS_TYPE_INT), ("probe1", griddb. GS_TYPE_INT), ("probe2", griddb. GS_TYPE_INT)], griddb. GS_TIME

Бул контейнерди түзүү үчүн мен жөн гана WebAPI (8080 порт) колдондум:

curl -X POST -негизи -u администратор: администратор -H "Мазмун түрү: application/json" -d

'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "rowkey": true, "ustuns": [{"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

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

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

Ал жерден, биздин Пи биздин чуңкурдагы маалыматтарды окуп жатканда (болжол менен бир жолу ~ 12 секундда) HTTP POST Сурамын жөнөтүү үчүн баштапкы кодду кошушум керек болчу.

Кошумча эскертүү катары: бул кодду жазуу мага C тилинин канчалык түшүнүктүү экенин түшүнүүгө үйрөттү:

int postData (char time , int cookid, int probe1, int probe2, char url )

{CURL *curl; CURLcode res; / * Терезелерде, бул winsock нерселерин баштайт */ 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 = curl_easy_init (); if (curl) { /* Адегенде биздин ПОСТту ала турган URLди коюңуз. Бул URL ошондой эле https:// URL болушу мүмкүн, эгерде бул маалыматты алышы керек болсо. */ snprintf (агент, sizeof агент, "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, "admin"); 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 (); return 0; }}

Бул функция жазылганда, мен аны sqlite маалыматтары жайгаштырылган учурда иштетишим керек эле:

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

Сиздин маалыматтар чындыгында серверге киргизилип жатканына ынануу үчүн, сиз маалымат базаңызды сурап, жыйынтыгын көрүү үчүн төмөнкү буйрукту иштете аласыз:

curl -X POST --basic -u admin: admin -H "Content -type: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ коомдук/контейнерлер/барбекю/катарлар

2 -кадам: Графана

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

Коддун ордунда, азыр биз "ашпозчу" баштоо үчүн баштапкы веб -порталды колдонгондо, биз бир эле учурда GridDB серверибиздеги температура маалыматтарыбызды сактайбыз.

Кийинки кадам биздин маалыматтарды Grafana аркылуу элестетүү болот. Бул үчүн, биз бул блогдогу маалыматты ээрчип жүрдүк: бул жерде. Бул ишке ашыруунун жагымдуу жагы - биздин маалыматтарды жакшы графикке түшүрүү өтө оңой. Ошондой эле аннотацияларды кошот.

Блогдо талкууланган аннотациялар, биздин тамак -ашта же чуңкурда бир нерсе туура эмес болуп калганда, бизди көзөмөлдөөнү абдан жеңилдетет. Менин учурда, мен уйдун кыска кабыргасын бышырып жаттым. Муну менен мен чуңкурдагы температуранын Фаренгейт боюнча 275 градустан жогору болушун каалабадым. Эгерде мен температуранын андан ашканын көрсөм, мен күйгүзгүчтү өчүрүп, кайра жылуулукту түшүрүп коймокмун:

Менде сенсордун окшош эрежеси бар болчу, чындыгында тамактын өзүн көзөмөлдөйт: эгер тамак 203 градус фаренгейтке жетсе, кабыргалар даяр болчу. Ашпозчунун аягындагы жалгыз аннотацияны бул жерден көрө аласыз:

Жалпысынан алганда, ашпозчу мага болжол менен ~ 4 саатка жакын убакытты талап кылган, бирок мен грильде дагы көп убакытты талап кылган нерсени бышырсам, мындай орнотуу чындап эле жакшы болмок (~ жай созулган түтүн жөнүндө ойлон ~ 12 саат). Ошого карабастан, мен бул курал оңой эле көрүнүп турса, анын маанисине ишенем: тамак -аштарыңыздын жыйынтыктарын жазып, анан аны мурунку ашпозчулар менен салыштыра алуу сиздин барбекюңуз убакыттын өтүшү менен акырындык менен жакшыра баштайт, анткени сиз маалыматты колдоно аласыз, эмне иштейт жана эмне жок. 'т.

3 -кадам: Тамак

Тамак
Тамак
Тамак
Тамак
Тамак
Тамак

Бул мен биринчи жолу уйдун кыска кабыргасын жасадым; татымал үчүн мен туз, кара мурч жана сарымсак порошогун колдондум. Күйгүчтүн башында бир аз болсо да өтө бийик болуп кеткенине карабастан, кабыргалар фантастикалык болуп чыкты. Сураныч, карап көрүңүз:

4 -кадам: Жыйынтык

Акыр -аягы, тамак сонун чыкты, сенсорлор, GridDB жана Grafana баары сонун концертте иштешти, жана биз бул нерселерди кийинки жолу кантип бышыруу боюнча баалуу маалыматтарды алдык, биз кээ бир досторду таң калтыргыбыз келет.

Сунушталууда: