राउटर पर वेब इंटरफ़ेस के माध्यम से थर्मामीटर से संकेत

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

मेरे डिप्लोमा पर काम करते समय, DS18B20 सेंसर मेरे हाथों में गिर गया।



यह एक डिजिटल आउटपुट थर्मामीटर है जो 1-वायर प्रोटोकॉल का उपयोग करके डेटा प्रसारित करता है। कुछ सोच के बाद, बाहरी तापमान को प्रदर्शित करने के लिए मेरे लंबे समय तक पीड़ित राउटर को पढ़ाने का फैसला किया गया, आंकड़ों के लिए और जिज्ञासा से बाहर। मेरे पास वैकल्पिक फर्मवेयर DD-WRT v24-sp2 (04/13/11) बड़ा के साथ Links3 E3000 है। ऐसे मामलों के लिए सामान्य फर्मवेयर उपयुक्त नहीं है, यह भविष्य में आवश्यक राउटर कार्यों तक पहुंच नहीं देता है। मेरा व्यक्तिगत विचार DD-WRT सबसे अच्छा और सबसे अमीर वैकल्पिक फर्मवेयर है। खैर, आप फर्मवेयर के साथ प्यार में कैसे नहीं गिर सकते हैं जो 64 एमबी रैम के साथ होम राउटर पर बीजीपी का समर्थन करता है) डीडी-डब्ल्यूआरटी फर्मवेयर वेब इंटरफ़ेस नीचे दिखाया गया है।



आमतौर पर 1-तार के माध्यम से डेटा ट्रांसफर के लिए वे COM या LPT पोर्ट का उपयोग करते हैं, लेकिन, दुर्भाग्य से, इस राउटर पर केवल एक यूएसबी कनेक्टर है। अधिक सटीक रूप से, उनके पास बोर्ड पर UART के लिए एक वायरिंग है, लेकिन फिर आपको राउटर पर लापता कवर के साथ रखना होगा, जो रूट पर Linksys की डिजाइन प्रतिभा को बर्बाद कर देता है। इस स्थिति में, आप सेंसर के साथ काम करने के लिए pl2303 जैसे USB-RS-232 कन्वर्टर्स का उपयोग कर सकते हैं। लेकिन इस कनवर्टर के सही संचालन के लिए, ड्राइवरों की आवश्यकता होती है। मुझे तुरंत यह कहना होगा कि मुझे मेरी तरह काम नहीं करना चाहिए और उन्हें स्रोत से संकलित करना चाहिए, क्योंकि pl2303 के लिए ड्राइवर पहले से ही DD-WRT फर्मवेयर में शामिल हैं और बस लोड नहीं किए गए हैं) उन्हें डाउनलोड करने के लिए, आपको रूटर पर ssh या टेलनेट प्रोटोकॉल का उपयोग करके लॉग इन करना होगा (उपयोगकर्ता नाम) रूट, पासवर्ड वैसा ही है जैसा आपने वेब इंटरफेस में सेट किया है) यदि सब कुछ ठीक रहा, तो आपको कुछ इस तरह दिखाई देगा:



जैसा कि आप पहले से ही समझ चुके हैं, यह एक यूनिक्स प्रणाली है (आईओएस नहीं, दुर्भाग्य से, लिंक्सिस सिस्को नहीं है), इसलिए शेल को अडॉप्ट करने में कोई कठिनाई नहीं होनी चाहिए।

ड्राइवर निर्देशिका /lib/modules/2.6.24.111/kernel/drivers/usb/serial में स्थित हैं और इन्हें usbserial.ko और pl2303.ko कहा जाता है। 2.6.24.111 कर्नेल संस्करण है और फिर यह भविष्य में अच्छी तरह से बदल सकता है) वे insmod usbserial.ko और insmod pl2303.ko आदेशों के साथ लोड किए जाते हैं जहां वे निहित हैं। यदि USB - RS-232 एडाप्टर जुड़ा हुआ है, तो इन कमांड के बाद डिवाइस को पता / देव / usb / tts / <डिवाइस नंबर> पर दिखाई देना चाहिए, मेरे मामले में, नंबर 0. आप dmesg के माध्यम से ड्राइवरों के लोडिंग को नियंत्रित कर सकते हैं, यह कुछ इस तरह होना चाहिए। :

पंजीकृत नया इंटरफ़ेस ड्राइवर usbserial
ड्राइवर / USB / सीरियल / usb-serial.c: USB सीरियल ड्राइवर कोर
ड्राइवर / usb / सीरियल / usb-serial.c: USB सीरियल समर्थन pl2303 के लिए पंजीकृत
pl2303 1-1.3: 1.0: pl2303 कनवर्टर का पता चला
usb 1-1.3: pl2303 कनवर्टर अब ttyUSB0 से जुड़ा
usbcore: पंजीकृत नया इंटरफ़ेस ड्राइवर pl2303
ड्राइवर / usb / सीरियल / pl2303.c: सीरियल एडाप्टर ड्राइवर के लिए शानदार PL2303 USB

अगली बात यह है कि 1-तार के साथ काम करने वाला एक प्रोग्राम जोड़ सकते हैं।

इसे अंकसूची कहा जाता है और इसे GNU जनरल पब्लिक लाइसेंस के तहत वितरित किया जाता है। आप इसे अपने राउटर के लिए संकलित कर सकते हैं या इंटरनेट पर अपने फर्मवेयर के लिए संकलित कार्यक्रम खोज सकते हैं। लेकिन एक छोटी सी गड़बड़ी है - आप राउटर की हार्डवेयर विशेषताओं के कारण प्रोग्राम को सीधे रॉम पर लिखने में सक्षम नहीं होंगे। आप या तो / tmp में, दूसरे शब्दों में - RAM में लिख सकते हैं, जहाँ इसे रिबूट के बाद या USB फ्लैश ड्राइव पर सुरक्षित रूप से मिटा दिया जाएगा, जो usb हब के माध्यम से जुड़ा होगा। यह अत्यधिक वांछनीय है कि हब सक्रिय हो, अन्यथा राउटर को लोड करते समय USB फ्लैश ड्राइव और pl2303 में एक ही समय में पर्याप्त शक्ति नहीं हो सकती है और सिस्टम में एक / दोनों डिवाइस गलत तरीके से पहचाने जाते हैं।

काम करने के लिए फ्लैश ड्राइव के लिए, यह आवश्यक है कि राउटर के वेब इंटरफेस में आइटम यूएसबी कोर सपोर्ट, ऑटोमैटिक ड्राइव माउंट को चुना जाए और डिस्क माउंट प्वाइंट में माउंट पॉइंट को इंगित किया जाए। यह सब सेवाएँ> USB के तहत वेब इंटरफ़ेस में है। मेरा फ्लैश ड्राइव / ऑप्ट में लगाया गया था।

जाँच करने के लिए अगली बात यह है कि डिजिटली कैसे काम करता है। यह कमांड्स द्वारा चेक किया गया है ।/digitemp -s / dev / usb / tts / 0 –i (डिवाइस को इनिशियलाइज़ करना) और .digitemp -a (सभी सेंसरों से तापमान पढ़ना, जो अभी भी एक टुकड़ा हैं)। जैसा कि मैनुअल में लिखा गया था, एक बार इनिशियलाइज़ करना ज़रूरी था, लेकिन शेड्यूल के अनुसार डेटा को पढ़ते समय, हर बार रीइन्स्टॉल करने के लिए यह आवश्यक हो गया। अगर सब कुछ ठीक रहा, तो कमांड का आउटपुट कुछ इस तरह होना चाहिए:

ब्रायन सी। लेन द्वारा DigiTemp v3.3.2 कॉपीराइट 1996-2004
जीएनयू पब्लिक लाइसेंस v2.0 - http: # www.brianlane.com
सभी DS2409 कप्लर्स को बंद करना

1-वायर लैन की खोज
28B6ACDA020000EC: DS18B20 तापमान सेंसर
ROM # 0: 28B6ACDA020000EC
लिखा हुआ ।digitemprc
Nov 01 16:40:13 सेंसर 0 सी: 20.88 एफ: 69.57

सभी हार्डवेयर विधानसभा:



तापमान को प्रदर्शित करने के लिए केवल एक वेब इंटरफ़ेस बनाना बाकी है।

इसे बनाने के लिए बहुत सारे विकल्प थे, लेकिन मैं एक गतिशील वेब पेज बना रहा था, जो cgi-bin पर आधारित था। यह टेक्स्ट फ़ाइलों से डेटा प्राप्त करता है, जो अनिवार्य रूप से ताज पर डिजिटम्प चलाने का परिणाम है। मुकुट को सही ढंग से काम करने के लिए, आपको राउटर पर NTP क्लाइंट को कॉन्फ़िगर करने की आवश्यकता है, ताकि डेटा लेने के समय सही हो। यह सेटअप -> बेसिक सेटअप - टाइम सेटिंग्स सेक्शन में DD-WRT वेब इंटरफेस में किया जाता है। वहां आपको पहले इसे शुरू करना होगा (सक्षम आइटम का चयन करें), फिर टाइम ज़ोन (समर ज़ोन), समर टाइम (डीएसटी) (डेलाइट सेविंग टाइम) सेट करें, और सर्वर आईपी / नाम को एनटीपी सर्वर के नाम या पते पर सेट करें, कहें, VNIIFTRI पते (ntp1.vniiftri.ru)। परिवर्तनों को सहेजने और रिबूट करने के बाद, राउटर समय और आवृत्ति के राज्य मानक के साथ समय को सिंक्रनाइज़ करता है।

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

server.document- रूट = "/ ऑप्ट / शेयर / www /"
# निर्देशिका जहां वेब पेज फ़ाइलें स्थित होंगी।
index-file.names = ("index.cgi")
# डिफ़ॉल्ट पृष्ठ।
server.event- हैंडलर = "पोल"
# इवेंट हैंडलिंग का प्रकार।
server.tag = "लाइटटैप"
# वेब सर्वर के हस्ताक्षर, हम विनम्र होंगे
static-file.exclude-Extension = (".fcgi", ".php", "ppl", ".py", ".rb", ".cgi"।
# निम्नलिखित पृष्ठों के प्रसंस्करण को स्थैतिक के रूप में रोकें।
server.port = 8081
# पोर्ट जिस पर वेब सर्वर काम करेगा।
server.username = "कोई नहीं"
# उपयोगकर्ता नाम जिसके तहत वेब सर्वर संचालित होगा।
server.groupname = "65534"
# उपयोगकर्ता समूह जिसके तहत वेब सर्वर काम करेगा।
cgi.assign = (".pl" => "/ opt / bin / microperl",
".cgi" => "/ ऑप्ट / बिन / माइक्रोपरल")
# सेट जो सीगी-बिन-आधारित वेब पृष्ठों के लिए उपयोग करने के लिए हैंडलर।

तापमान ग्राफ को प्रदर्शित करने के लिए राफेल लाइब्रेरी का उपयोग किया जाता है। उनकी बड़ी मात्रा और कम जानकारी सामग्री के कारण, मैं खुद को लिस्टिंग नहीं दूंगा।

और अंतिम स्पर्श - रिबूट करने के बाद भी सब कुछ काम करने के लिए, डीडी-डब्ल्यूआरटी वेब इंटरफेस में स्टार्टअप स्क्रिप्ट कॉन्फ़िगरेशन में एक एडिट जोड़ा गया था।

insmod /lib/modules/2.6.24.111/kernel/drivers/usb/serial/usbserial.ko
insmod /lib/modules/2.6.24.111/kernel/drivers/usb/serial/pl2303.ko
// थर्मामीटर के लिए लोडिंग ड्राइवर
chmod 666 / dev / usb / tts / 0
chmod 666 /opt /var/log/lighttpd/error.log
chmod 666 /opt /var/log/lighttpd/access.log
// फ़ाइल अनुमतियाँ बदलें, हालांकि ऐसे नंबरों के साथ केवल डेमॉन लॉन्च किया जाना चाहिए।
grep -q no / etc / passwd || गूंज "कोई नहीं: *: 65534: 65534: कोई नहीं: / var: / bin / false" >> / etc / passwd
// एक उपयोगकर्ता बनाएं जिसके तहत लाइटटीडी काम करेगा (थोड़ा व्यामोह ने अभी तक किसी को चोट नहीं पहुंचाई है!)
lighttpd -f /opt /etc/lighttpd/lighttpd.conf
// डेमॉन मोड में ही लाइटटैप लॉन्च करें (ऑपरेटिंग सिस्टम ऐसा है, जैसे मैं नहीं ...)।

क्रोन में एक और लाइन जोड़ी गई है, और यह अनुसूचित डेटा लेने के लिए जिम्मेदार है।
0 * * * * root sh /opt/input.sh

स्क्रिप्ट input.sh की सामग्री (जो हर घंटे सेंसर से डेटा पढ़ती है)

#! / बिन /
/opt/share/./digitemp -s / dev / usb / tts / 0 -i;
/opt/share/./digitemp -a -o% .2C | tail -n 1 >> /opt/share/www/temp1.txt
# तापमान को सेंसर से, डिग्री सेल्सियस में, दो दशमलव स्थानों पर temp1.txt फ़ाइल में लिखता है।
पूँछ -n 24 /opt/share/www/temp1.txt> /opt/share/www/temp.txt
# किसी फ़ाइल से अंतिम 24 तापमान मानों को काटता है।
दिनांक +% R >> /opt/share/www/time1.txt
# उस घंटे को रिकॉर्ड करता है जिस पर डेटा लिया गया था।
tail -n 24 /opt/share/www/time1.txt> /opt/share/www/time.txt
# किसी फ़ाइल से अंतिम 24 तापमान मानों को काटता है।

इस प्रकार, हम अंतिम दिन के लिए तापमान प्राप्त करते हैं।
सभी सेटिंग्स के बाद, पृष्ठ 192.168.1.1:8081 तक पहुंच यह दिखाएगा:



यद्यपि 1-तार मानक खुद एक आम बस पर काम करता है, यह 300 मीटर तक की एक लाइन की लंबाई की अनुमति देता है, जो आपको पूरे घर और उसके बाहर तापमान को मापने की अनुमति देता है। इसके अलावा, न केवल सेंसर, बल्कि एक्ट्यूएटर्स भी 1-वायर पर काम करते हैं, इसलिए इस प्रोटोकॉल और आपके होम राउटर के आधार पर, आप इंटरनेट नियंत्रण के साथ एक छोटे से स्मारहाउस का निर्माण कर सकते हैं।

Source: https://habr.com/ru/post/In147259/


All Articles