Мазмұны:

BBQ Pi (деректерді визуализациямен!): 4 қадам (суреттермен)
BBQ Pi (деректерді визуализациямен!): 4 қадам (суреттермен)

Бейне: BBQ Pi (деректерді визуализациямен!): 4 қадам (суреттермен)

Бейне: BBQ Pi (деректерді визуализациямен!): 4 қадам (суреттермен)
Бейне: 8 инструментов в Excel, которыми каждый должен уметь пользоваться 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 түйреуіштеріне шағын радиожиілікті модуль бекітілген). Бастапқы жобада (жоғарыда көрсетілген) Produkt өзінің деректерін sqlite мәліметтер базасында сақтап, жергілікті Apache2 php веб -сайтында көрсетеді.

Бұл шешім осы блогтың кіріспесінде айтылған бастапқы мәселені шешеді: енді сіз веб -шолғыштың көмегімен тамақ пен шұңқырдың температурасын қашықтықтан бақылай аласыз. Бірақ егер біз оны кеңейткіміз келсе ше? Енгізіңіз: GridDB.

Жабдықтар

Таңқурай Pi4

SUNKEE 433Mhz Superheterodyne сымсыз қабылдағыш модулі

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

GridDB Web API & FluentD
GridDB Web API & FluentD

Бұл жобаны көргенде, менің алғашқы ой - толқудың алғашқы толқынынан кейін - мен функционалдылықты кеңейту жолдары туралы ойладым. GridDB және оның Grafana плагинін қолдана отырып, мен тамақ пен шұңқыр туралы деректерді визуализациялауға тырыстым. Бұдан басқа, мен кез келген аномальды деректер нүктелерін іздеу үшін Grafana аннотацияларын орнатқым келді - ешқандай күйдірілген ет болмайды!

Бастау үшін, мен сымсыз термометрден келетін деректерді оқу үшін бастапқы жобадағы С кодын пайдалануым керек және сол мәліметтерді GridDB серверіне жіберуім керек болды. Мұны іске қосу үшін мен CentOS виртуалды машинасын пайдаланып Azure -де GridDB серверін аштым. Біздің компьютерден (Raspberry Pi) бұлтты серверге деректерді бөлісудің ең оңай жолы GridDB Web API арқылы болды. Сонымен, бұл вмде мен GridDB WebAPI -ді Fluentd және ілеспе GridDB қосқышымен бірге орнаттым.

Деректерді бұлтқа жібермес бұрын, мен BBQ Pi контейнерінің негізгі схемасын жасауым керек болды. Деректер жиынтығы өте қарапайым: бізде екі температура сенсоры бар, бір пісіру идентификаторы және, әрине, уақыт белгісі. Сонымен, біздің схемамыз келесідей:

Timeseries = gridstore.put_container («bbqpi», [(«уақыт», griddb. GS_TYPE_TIMESTAMP), («cookid», griddb. GS_TYPE_INT), («probe1», griddb. GS_TYPE_INT), («probe2», griddb. GS_TYPE_INT)], griddb. GS_TONT

Уақытша контейнерді жасау үшін мен жай ғана WebAPI (8080 порты) қолдандым:

curl -X POST --basic -u admin: admin -H «Content -type: application/json» -d

'{«container_name»: «bbqpi», «container_type»: «TIME_SERIES», / «rowkey»: true, «бағандар»: [{«аты»: «уақыт», «түрі»: «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

Сол жерден маған Pi біздің шұңқырдағы деректерді оқыған кезде (шамамен 12 секундта бір рет) HTTP POST сұрауын жіберу үшін бастапқы кодты қосу керек болды.

Ескерту ретінде: бұл кодты жазу маған С тілінің қаншалықты түсінікті екенін түсінуге үйретті:

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

{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, prob2)); / * бұйралау тұтқасын алу */ 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, «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_global_cleanup (); қайтару 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, prob2)); 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 --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 сағатты құрады, бірақ егер мен грильде одан да көп уақыт қажет болатын нәрсе пісіретін болсам, мұндай қондырғы өте жақсы болар еді. сағат). Осыған қарамастан, егер бұл құрал оңай көрінетін болса, мен құндылыққа сенемін: сіздің тағамдарыңыздың нәтижелерін тіркеп, оны бұрынғы аспазшылармен салыстыра білу сіздің барбекюіңіз уақыт өте келе жақсарады дегенді білдіреді, өйткені сіз деректерді пайдаланып, не жұмыс істейтінін білесіз. т.

3 -қадам: Тамақ

Тағам
Тағам
Тағам
Тағам
Тағам
Тағам

Бұл мен бірінші рет сиыр етінің қысқа қабырғасын жасадым; дәмдеу үшін мен тұз, қара бұрыш және сарымсақ ұнтағын қолдандым. Бастапқыда оттықтың тым жоғары көтерілуіне байланысты кейбір мәселелерге қарамастан, қабырғалар керемет шықты. Қарап көріңіз:

4 -қадам: Қорытынды

Ақыр соңында, тағам керемет болды, сенсорлар, GridDB және Grafana концертте өте жақсы жұмыс жасады, және біз келесіде оларды қалай дайындау керектігі туралы құнды мәліметтер алдық, біз кейбір достарды таң қалдырғымыз келеді.

Ұсынылған: