विषयसूची:

BBQ पाई (डेटा विज़ुअलाइज़ेशन के साथ!): 4 चरण (चित्रों के साथ)
BBQ पाई (डेटा विज़ुअलाइज़ेशन के साथ!): 4 चरण (चित्रों के साथ)

वीडियो: BBQ पाई (डेटा विज़ुअलाइज़ेशन के साथ!): 4 चरण (चित्रों के साथ)

वीडियो: BBQ पाई (डेटा विज़ुअलाइज़ेशन के साथ!): 4 चरण (चित्रों के साथ)
वीडियो: Ep : 4 I Charwak Philosophy : An Introduction I Dr. Vikas Divyakirti 2024, नवंबर
Anonim
BBQ पाई (डेटा विज़ुअलाइज़ेशन के साथ!)
BBQ पाई (डेटा विज़ुअलाइज़ेशन के साथ!)
BBQ पाई (डेटा विज़ुअलाइज़ेशन के साथ!)
BBQ पाई (डेटा विज़ुअलाइज़ेशन के साथ!)
BBQ पाई (डेटा विज़ुअलाइज़ेशन के साथ!)
BBQ पाई (डेटा विज़ुअलाइज़ेशन के साथ!)

परिचय

बारबेक्यूइंग आमतौर पर आपके पसंदीदा मांस को पकाने के लिए अप्रत्यक्ष गर्मी का उपयोग करने की धीमी प्रक्रिया को संदर्भित करता है। हालांकि खाना पकाने की यह विधि बेहद लोकप्रिय है - विशेष रूप से अमेरिका में - इसमें वह है जो कुछ लोग एक गंभीर कमजोरी मान सकते हैं: इसमें आपके गड्ढे और भोजन के तापमान की निगरानी के लिए घंटों अर्ध-स्पष्ट ध्यान देने की आवश्यकता होती है। दर्ज करें: रास्पबेरी पाई।

मूल परियोजना

इस परियोजना के लिए मूल स्रोत यहां पाया जा सकता है: https://old.reddit.com/r/raspberry_pi/comments/a0… इसका सार यह है कि reddit उपयोगकर्ता उत्पाद अपेक्षाकृत सस्ते से भोजन और गड्ढे के तापमान डेटा को रिले करने में सक्षम था।, रास्पबेरी पाई के लिए व्यावसायिक रूप से उपलब्ध वायरलेस थर्मामीटर (जो इसके GPIO पिन से एक छोटा RF मॉड्यूल जुड़ा हुआ था)। मूल परियोजना (ऊपर लिंक) में, उत्पाद का डेटा एक sqlite डेटाबेस में संग्रहीत किया जा रहा था और स्थानीय रूप से होस्ट की गई apache2 php वेबसाइट पर प्रदर्शित किया गया था।

यह समाधान पहले से ही इस ब्लॉग की शुरूआत में बताई गई मूल समस्या को हल कर चुका है: अब आप अपने भोजन और गड्ढे के तापमान को एक वेब ब्राउज़र से दूर से देख सकते हैं। लेकिन क्या होगा अगर हम इस पर विस्तार करना चाहते हैं? दर्ज करें: ग्रिडडीबी।

आपूर्ति

रास्पबेरी Pi4

SUNKEE 433Mhz सुपरहेटरोडाइन वायरलेस रिसीवर मॉड्यूल

चरण 1: ग्रिडडीबी वेब एपीआई और फ्लुएंटडी

ग्रिडडीबी वेब एपीआई और फ्लुएंटडी
ग्रिडडीबी वेब एपीआई और फ्लुएंटडी

इस परियोजना को देखने पर, मेरा पहला विचार - उत्साह की प्रारंभिक लहर के बाद - मैं कार्यक्षमता बढ़ाने के तरीकों के बारे में सोच रहा था। GridDB और इसके Grafana प्लगइन का उपयोग करके, मैंने अपने भोजन और गड्ढे के डेटा की कल्पना करने की कोशिश की। इसके अलावा, मैं किसी भी विषम डेटा बिंदुओं की तलाश के लिए ग्राफाना एनोटेशन स्थापित करना चाहता था - कोई भी मांस नहीं हो सकता!

आरंभ करने के लिए, मुझे वायरलेस थर्मामीटर से आने वाले डेटा को पढ़ने और उस डेटा को मेरे ग्रिडडीबी सर्वर में पोस्ट करने के लिए मूल प्रोजेक्ट से सी कोड का उपयोग करने की आवश्यकता थी। इसे चलाने और चलाने के लिए, मैंने एक CentOS वर्चुअल मशीन का उपयोग करके Azure पर एक GridDB सर्वर काता है। हमारी एज मशीन (रास्पबेरी पाई) से हमारे क्लाउड सर्वर पर डेटा साझा करने का सबसे आसान तरीका ग्रिडडीबी वेब एपीआई के माध्यम से था। तो, उस vm पर, मैंने Fluentd और साथ में GridDB कनेक्टर के साथ GridDB का WebAPI स्थापित किया।

वास्तव में क्लाउड तक डेटा भेजने से पहले, मुझे अपने BBQ पाई कंटेनर के लिए मूल स्कीमा बनाने की आवश्यकता थी। आने वाला डेटासेट बेहद सरल है: हमारे पास दो तापमान सेंसर, एक कुक आईडी और निश्चित रूप से टाइमस्टैम्प है। तो हमारी स्कीमा इस तरह दिखती है:

टाइम्सरीज = ग्रिडस्टोर.पुट_कंटेनर ("बीबीक्यूपीआई", [("समय", griddb. GS_TYPE_TIMESTAMP), ("कुकिड", griddb. GS_TYPE_INT), ("probe1", griddb. GS_TYPE_INT), ("probe2", griddb. GS_TYPE_INT)], griddb. GS_CONTAINER_TIME_SERIES)

इस टाइमसीरीज कंटेनर को बनाने के लिए, मैंने बस वेबएपीआई (पोर्ट 8080) का उपयोग किया:

कर्ल-एक्स पोस्ट - बेसिक-यू एडमिन: एडमिन-एच "कंटेंट-टाइप: एप्लिकेशन/जेसन" -डी

'{"container_name":"bbqpi", "container_type":"TIME_SERIES", / "rowkey":true, "columns":[{"name": "time", "type": "TIMESTAMP" }, {"नाम": "कुकिड", "प्रकार": "INTEGER"}, {"नाम": "जांच 1", "प्रकार": "INTEGER"}, {"नाम": "जांच 2", "प्रकार": "INTEGER" }]}'

बनाए गए कंटेनर के साथ, मुझे अपने कंटेनर में वास्तविक डेटा पोस्ट करने के लिए Fluentd (पोर्ट 8888) का उपयोग करने की आवश्यकता है। यहाँ कुछ डमी डेटा पोस्ट करने वाला CURL कमांड है:

कर्ल-एक्स पोस्ट-डी 'जेसन = {"तारीख": "2020-01-01 टी 12: 08: 21.112 जेड", "कुकिड": "1", "जांच 1": "150", "जांच 2": "140" }'

वहां से, जब भी हमारा पीआई हमारे गड्ढे से डेटा पढ़ रहा था (लगभग हर ~ 12 सेकंड में) HTTP पोस्ट अनुरोध भेजने के लिए मुझे मूल कोड संलग्न करने की आवश्यकता थी।

एक साइड नोट के रूप में: इस कोड को लिखने से मुझे इस बात की सराहना करना सिखाया गया कि सी भाषा कितनी क्रियात्मक हो सकती है:

इंट पोस्टडेटा (चार समय , इंट कुकिड, इंट जांच 1, इंट जांच 2, चार यूआरएल )

{कर्ल *कर्ल; कर्लकोड रेस; /* विंडोज़ में, यह विंसॉक स्टफ में प्रवेश करेगा */ curl_global_init(CURL_GLOBAL_ALL); चार त्रुटि [CURL_ERROR_SIZE] = { 0, }; चार एजेंट [१०२४] = {०, }; चार जेसन [1000]; snprintf(json, 200, "json={"date\":\"%s.112Z\", \"cookid\":\"%d\", \"probe1\":\"%d\", \"probe2\":\"%d\"}", टाइम, कुकिड, जांच1, जांच2); /* कर्ल हैंडल प्राप्त करें */ कर्ल = curl_easy_init (); if(curl) {/* पहले उस URL को सेट करें जो हमारे POST को प्राप्त करने वाला है। यह यूआरएल एक https:// यूआरएल भी हो सकता है अगर वह डेटा प्राप्त करना चाहिए। */ snprintf (एजेंट, आकार एजेंट, "libcurl/%s", curl_version_info (CURLVERSION_NOW) -> संस्करण); एजेंट [आकार एजेंट - 1] = 0; curl_easy_setopt (कर्ल, CURLOPT_USERAGENT, एजेंट); curl_easy_setopt (कर्ल, CURLOPT_URL, url); curl_easy_setopt (कर्ल, CURLOPT_USERNAME, "व्यवस्थापक"); curl_easy_setopt (कर्ल, CURLOPT_PASSWORD, "व्यवस्थापक"); curl_easy_setopt (कर्ल, CURLOPT_VERBOSE, 1L); curl_easy_setopt (कर्ल, CURLOPT_ERRORBUFFER, त्रुटि); curl_easy_setopt (कर्ल, CURLOPT_POSTFIELDS, json); /* अनुरोध पूरा करें, res को रिटर्न कोड मिलेगा */ res = curl_easy_perform(curl); अगर (res!= CURLE_OK) { size_t len = strlen(errbuf); fprintf(stderr, "\nlibcurl: (%d)", रेस); 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, "INSERT INTO रीडिंग्स (कुकिड, टाइम, प्रोब1, प्रोब2) VALUES (%d, '%s', %d, %d);", कुकआईडी, बफ, जांच 1, जांच 2); प्रिंटफ ("% s / n", एसक्यूएल); आरसी = sqlite3_exec (डीबी, एसक्यूएल, कॉलबैक, 0, और zErrMsg); अगर (आरसी! = SQLITE_OK) {प्रिंटफ ("एसक्यूएल त्रुटि:% s / n", zErrMsg); } और {last_db_write=secs; } चार यूआरएल = "https://xx.xx.xx.xx:8888/griddb"; पोस्टडाटा (बफ, कुकआईडी, जांच 1, जांच 2, यूआरएल); } }

यह सुनिश्चित करने के लिए कि आपका डेटा वास्तव में आपके सर्वर में डाला जा रहा है, आप अपने डेटाबेस को क्वेरी करने और परिणाम देखने के लिए निम्न कमांड चला सकते हैं:

कर्ल-एक्स पोस्ट --बेसिक-यू एडमिन:एडमिन-एच "कंटेंट-टाइप: एप्लिकेशन/जेसन" -डी '{"लिमिट":1000}' https://localhost:8080/griddb/v2/defaultCluster/dbs/ सार्वजनिक/कंटेनर/बीबीक्यूपीआई/पंक्तियां

चरण 2: ग्राफाना

ग्राफाना
ग्राफाना
ग्राफाना
ग्राफाना

कोड के साथ, अब जब हम "कुक" शुरू करने के लिए मूल वेब पोर्टल का उपयोग करते हैं, तो हम एक साथ अपने तापमान डेटा को हमारे ग्रिडडीबी सर्वर में संग्रहीत करेंगे।

अगला कदम ग्राफाना का उपयोग करके हमारे डेटा की कल्पना करना होगा। ऐसा करने के लिए, हमने इस ब्लॉग की जानकारी का अनुसरण किया: यहाँ। इस कार्यान्वयन के बारे में अच्छी बात यह है कि हमारे डेटा को एक अच्छे ग्राफ़ में चार्ट करना बेहद आसान है। यह एनोटेशन भी जोड़ता है।

ब्लॉग में चर्चा की गई टिप्पणियां हमारे लिए यह निगरानी करना बेहद आसान बनाती हैं कि हमारे भोजन या गड्ढे में कुछ गलत हो जाता है। मेरे मामले में, मैं गोमांस की छोटी पसलियों को पका रहा था। उनके साथ, मैं नहीं चाहता था कि गड्ढे में तापमान 275 डिग्री फ़ारेनहाइट से आगे बढ़े। अगर मैंने देखा कि तापमान इससे आगे जाता है, तो मैं बर्नर बंद कर सकता हूं और गर्मी को फिर से कम कर सकता हूं:

मेरे पास वास्तव में भोजन पर ही नजर रखने वाले सेंसर के लिए एक समान नियम था: यदि भोजन 203 डिग्री फ़ारेनहाइट के आंतरिक तापमान पर पहुंच गया, तो पसलियां तैयार थीं। आप यहाँ रसोइया के अंत में अकेला एनोटेशन देख सकते हैं:

कुल मिलाकर, रसोइया ने मुझे लगभग ~ 4 घंटे या उससे भी अधिक समय लिया, लेकिन इस तरह का सेटअप वास्तव में उत्कृष्ट होगा यदि मैं कुछ ऐसा पका रहा था जिसके लिए ग्रिल में और भी अधिक समय की आवश्यकता होती (सोचें कि कम-धीमा धुआं जो ~ १२ तक रहता है) घंटे)। इसके बावजूद, मेरा मानना है कि यदि यह उपकरण आसानी से स्पष्ट है तो मूल्य: अपने खाद्य पदार्थों के परिणामों को लॉग करने में सक्षम होने और फिर पिछले रसोइयों से इसकी तुलना करने का मतलब है कि आपकी बीबीक्यूइंग धीरे-धीरे समय के साथ बेहतर हो जाएगी क्योंकि आप डेटा का उपयोग यह देखने के लिए कर सकते हैं कि क्या काम करता है और क्या करता है 'टी।

चरण 3: भोजन

भोजन
भोजन
भोजन
भोजन
भोजन
भोजन

यह पहली बार था जब मैंने कभी गोमांस छोटी पसलियों को बनाया है; मसाला के लिए, मैंने बस नमक, काली मिर्च और लहसुन पाउडर का इस्तेमाल किया। बर्नर के साथ कुछ मुद्दों के बावजूद शुरुआत में थोड़ा सा बहुत अधिक होने के बावजूद, पसलियां शानदार निकलीं। कृपया देख लीजिये:

चरण 4: निष्कर्ष

अंत में, भोजन बहुत बढ़िया निकला, सेंसर, ग्रिडडीबी, और ग्राफाना सभी ने संगीत कार्यक्रम में खूबसूरती से काम किया, और हमें कुछ मूल्यवान डेटा मिला कि अगली बार जब हम कुछ दोस्तों को प्रभावित करना चाहते हैं तो इन चीजों को फिर से कैसे पकाएं।

सिफारिश की: