Სარჩევი:

BBQ Pi (მონაცემთა ვიზუალიზაციით!): 4 ნაბიჯი (სურათებით)
BBQ Pi (მონაცემთა ვიზუალიზაციით!): 4 ნაბიჯი (სურათებით)

ვიდეო: BBQ Pi (მონაცემთა ვიზუალიზაციით!): 4 ნაბიჯი (სურათებით)

ვიდეო: BBQ Pi (მონაცემთა ვიზუალიზაციით!): 4 ნაბიჯი (სურათებით)
ვიდეო: ვიზუალიზაციის სწორი ტექნიკა 2024, ნოემბერი
Anonim
BBQ Pi (მონაცემთა ვიზუალიზაციით!)
BBQ Pi (მონაცემთა ვიზუალიზაციით!)
BBQ Pi (მონაცემთა ვიზუალიზაციით!)
BBQ Pi (მონაცემთა ვიზუალიზაციით!)
BBQ Pi (მონაცემთა ვიზუალიზაციით!)
BBQ Pi (მონაცემთა ვიზუალიზაციით!)

შესავალი

მწვადი ყველაზე ხშირად ეხება ნელი პროცესს არაპირდაპირი სითბოს გამოყენებისას თქვენი საყვარელი ხორცის დასამზადებლად. მიუხედავად იმისა, რომ სამზარეულოს ეს მეთოდი ძალიან პოპულარულია-განსაკუთრებით აშშ – ში-მას აქვს ის, რაც ზოგიერთმა შეიძლება მიიჩნიოს საკმაოდ სერიოზულ სისუსტედ: ის მოითხოვს ნახევრად გამჭვირვალე ყურადღების მიღებას, რათა დაიხარჯოს თქვენი ორმოს და საკვების ტემპერატურის მონიტორინგი. შეიყვანეთ: ჟოლო პი.

ორიგინალური პროექტი

ამ პროექტის ორიგინალური წყარო შეგიძლიათ იხილოთ აქ: https://old.reddit.com/r/raspberry_pi/comments/a0…, კომერციულად ხელმისაწვდომი უკაბელო თერმომეტრები Raspberry Pi– სთვის (რომელიც მის GPIO- სთან იყო მიმაგრებული პატარა RF მოდულს). თავდაპირველ პროექტში (ზემოთ მოყვანილი), პროდუქტს ჰქონდა მისი მონაცემები ინახებოდა sqlite მონაცემთა ბაზაში და გამოჩნდა ადგილობრივად განთავსებულ apache2 php ვებსაიტზე.

ეს გადაწყვეტა უკვე აგვარებს თავდაპირველ პრობლემას, რომელსაც შევეხეთ ამ ბლოგის შესავალში: ახლა თქვენ შეგიძლიათ დისტანციურად აკონტროლოთ თქვენი საკვებისა და ორმოს ტემპერატურა ვებ ბრაუზერით. მაგრამ რა მოხდება, თუ გვსურს ამის გაფართოება? შეიყვანეთ: GridDB.

მარაგები

ჟოლო Pi4

SUNKEE 433Mhz Superheterodyne უკაბელო მიმღების მოდული

ნაბიჯი 1: GridDB ვებ API და FluentD

GridDB ვებ API და FluentD
GridDB ვებ API და FluentD

ამ პროექტის ნახვისთანავე, ჩემი პირველი აზრი - აღელვების საწყისი ტალღის შემდეგ - ვფიქრობდი იმაზე, თუ როგორ გავაგრძელე ფუნქციონირება. GridDB და მისი Grafana მოდულის გამოყენებით, მე ვცდილობდი ვიზუალიზაცია ჩემი საკვები და ორმოს მონაცემები. ამის მიღმა, მე მსურდა გრაფანას ანოტაციების დაყენება რაიმე ანომალური მონაცემების მოსაძებნად - არ შეიძლება ნახშირიანი ხორცის ჭამა!

დასაწყებად, მე უნდა გამოვიყენო C კოდი ორიგინალური პროექტიდან, რომ წავიკითხო უკაბელო თერმომეტრიდან მიღებული მონაცემები და გამოვაქვეყნო ეს მონაცემები ჩემს GridDB სერვერზე. ამის გასააქტიურებლად, მე გავრეკე GridDB სერვერი Azure– ზე CentOS ვირტუალური აპარატის გამოყენებით. უმარტივესი გზა მონაცემების გასაზიარებლად ჩვენი ზღვარზე მომუშავე მანქანიდან (Raspberry Pi) ჩვენს ღრუბელ სერვერზე იყო GridDB Web API საშუალებით. ამრიგად, ამ vm– ზე, მე დავაყენე GridDB– ის WebAPI Fluentd– თან ერთად და თანმხლები GridDB კონექტორი.

ღრუბელში მონაცემების გაგზავნამდე, მე უნდა შევქმნა ძირითადი სქემა ჩემი BBQ Pi კონტეინერისთვის. მონაცემთა ნაკრები ძალიან მარტივია: ჩვენ გვაქვს ორი ტემპერატურის სენსორი, ერთი მზარეულის ID და, რა თქმა უნდა, დროის ნიშნული. ასე რომ, ჩვენი სქემა ასე გამოიყურება:

timeseries = gridstore.put_container ("bbqpi", [("დრო", griddb. GS_TYPE_TIMESTAMP), ("cookid", griddb. GS_TYPE_INT), ("probe1", griddb. GS_TYPE_INT), ("probe2", griddb. GS_TYPE_INTER_] GIDB. GTT

ამ Timeseries კონტეინერის შესაქმნელად, მე უბრალოდ გამოვიყენე WebAPI (პორტი 8080):

curl -X POST -ძირითადი -u admin: admin -H "Content -type: application/json" -d

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

იქიდან, მე მჭირდება ორიგინალური კოდის დამატება HTTP POST მოთხოვნის გასაგზავნად, როდესაც ჩვენი Pi კითხულობს ჩვენს ორმოს მონაცემებს (დაახლოებით ~ 12 წამში ერთხელ).

როგორც გვერდითი შენიშვნა: ამ კოდის დაწერამ მასწავლა იმის დაფასება, თუ რამდენად ხმამაღალი შეიძლება იყოს C ენა:

int postData (char დრო , int cookid, int probe1, int probe2, char url )

{CURL *დახვევა; CURL კოდი res; / * ფანჯრებში, ეს ინიციალებს მოსაწყენ ნივთებს */ curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; char აგენტი [1024] = {0,}; char json [1000]; snprintf (json, 200, "json = {" თარიღი / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" probe1 / ": \"%d / ", / "probe2 \": / "%d \"} ", დრო, cookid, probe1, probe2); / * მიიღეთ curl სახელური */ curl = curl_easy_init (); if (curl) { /* ჯერ დააყენეთ URL, რომელიც აპირებს მიიღოს ჩვენი POST. ეს URL შეიძლება იყოს https:// URL, თუ ეს არის ის, რაც უნდა მიიღოს მონაცემები. */ snprintf (აგენტი, აგენტის ზომა, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> ვერსია); აგენტი [აგენტის ზომა - 1] = 0; curl_easy_setopt (დახვევა, CURLOPT_USERAGENT, აგენტი); curl_easy_setopt (დახვევა, CURLOPT_URL, url); curl_easy_setopt (curl, CURLOPT_USERNAME, "admin"); curl_easy_setopt (დახვევა, CURLOPT_PASSWORD, "ადმინისტრატორი"); curl_easy_setopt (დახვევა, CURLOPT_VERBOSE, 1 ლ); curl_easy_setopt (დახვევა, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt (დახვევა, 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 მონაცემები:

თუ (კარგი მონაცემები == 1) {

if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "ჩაწერეთ კითხვებში (cookid, დრო, probe1, probe2) ღირებულებები (%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 = წამი; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, probe1, probe2, url); }}

იმისათვის, რომ დარწმუნდეთ, რომ თქვენი მონაცემები ფაქტობრივად თქვენს სერვერშია ჩასმული, შეგიძლიათ გაუშვათ შემდეგი ბრძანება თქვენი მონაცემთა ბაზის გამოსაძიებლად და შედეგების სანახავად:

curl -X POST -ძირითადი -u admin: admin -H "Content -type: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ საჯარო/კონტეინერები/bbqpi/რიგები

ნაბიჯი 2: გრაფანა

გრაფანა
გრაფანა
გრაფანა
გრაფანა

არსებული კოდით, ახლა როდესაც ჩვენ ვიყენებთ ორიგინალურ ვებპორტალს "მზარეულის" დასაწყებად, ჩვენ ერთდროულად ვინახავთ ჩვენი ტემპერატურის მონაცემებს ჩვენს GridDB სერვერზე.

შემდეგი ნაბიჯი იქნება ჩვენი მონაცემების ვიზუალიზაცია Grafana– ს გამოყენებით. ამისათვის ჩვენ მივყვებოდით ამ ბლოგის ინფორმაციას: აქ. ამ განხორციელების სასიამოვნო ის არის, რომ ძალიან ადვილია ნახოთ ჩვენი მონაცემები ლამაზ გრაფიკში. ის ასევე ამატებს ანოტაციებს.

ბლოგში განხილული ანოტაციები უკიდურესად გვიადვილებს მონიტორინგს, როდესაც რაიმე არასწორია ჩვენს საკვებთან ან თავად ორმოსთან. ჩემს შემთხვევაში, მე ვამზადებდი ძროხის მოკლე ნეკნებს. მათთან ერთად, მე არ მინდოდა, რომ ორმოში ტემპერატურა 275 გრადუსზე მეტი ფარენგეიტის მიღმა გაიზარდოს. თუ დავინახე, რომ ტემპერატურა ამის იქით სცილდება, შემიძლია გამორთო სანთურა და დავუშვა, რომ სითბო კვლავ დაიწიოს:

მე მქონდა მსგავსი წესი სენსორისთვის, რომელიც რეალურად ადევნებდა თვალს საკვებს: თუკი საჭმელი მიიღებდა შიდა ტემპერატურას 203 გრადუსი ფარენჰეიტით, ნეკნები მზად იყო. თქვენ შეგიძლიათ ნახოთ მზარეულის ბოლოს ერთადერთი ანოტაცია აქ:

საერთო ჯამში, მზარეულმა მხოლოდ ~ 4 საათი დამჭირდა, მაგრამ ამგვარი დალაგება ნამდვილად გამოირჩეოდა, თუ მე ვამზადებ ისეთ რამეს, რაც კიდევ უფრო მეტ დროს მოითხოვს გრილში (იფიქრეთ დაბალ ნელ კვამლზე, რომელიც გრძელდება 12 ფუნტი საათი). ამის მიუხედავად, მე მჯერა ღირებულება, თუ ეს ინსტრუმენტი ადვილად შესამჩნევია: თქვენი საჭმლის შედეგების შესვლა და წინა მზარეულებთან შედარება ნიშნავს, რომ თქვენი BBQing ნელ -ნელა უკეთესი გახდება, რადგან თქვენ შეგიძლიათ გამოიყენოთ მონაცემები იმის დასადგენად, თუ რა მუშაობს და რა არა ტ

ნაბიჯი 3: კვება

Საჭმელი
Საჭმელი
Საჭმელი
Საჭმელი
Საჭმელი
Საჭმელი

ეს იყო პირველად მე ძროხის მოკლე ნეკნები; სუნელისთვის მე უბრალოდ მარილი, შავი პილპილი და ნივრის ფხვნილი გამოვიყენე. მიუხედავად იმისა, რომ თავიდან რაღაც ცოტათი მაღლა დგას სანთურა, ნეკნები ფანტასტიკური გამოვიდა. Გთხოვთ შეხედოთ:

ნაბიჯი 4: დასკვნა

საბოლოო ჯამში, საკვები გამოვიდა მშვენიერი, სენსორები, GridDB და Grafana ყველა მშვენივრად მუშაობდნენ კონცერტზე და ჩვენ მივიღეთ ღირებული მონაცემები იმის შესახებ, თუ როგორ უნდა მოვამზადოთ ეს ნივთები შემდეგ ჯერზე, როდესაც გვინდა შთაბეჭდილება მოახდინოთ ზოგიერთ მეგობარზე.

გირჩევთ: