1 परिचय
मुबारक नकली नेटवर्क स्थलाकृतिक विज्ञान के हल्के आर्केस्ट्रा के लिए घोंसला प्रयोगशालाओं द्वारा बनाई गई एक उपकरण है। IoT होम एरिया नेटवर्क के विकास और परीक्षण के लिए हैप्पी उपयोगी है।
हैप्पी के साथ, आप कर सकते हैं:
- IoT डिवाइस हार्डवेयर का उपयोग किए बिना एकल Linux विकास मशीन पर नेटवर्क प्रोटोकॉल और अन्य वितरित निष्पादन प्रोग्राम का परीक्षण करें
- एक नेटवर्क पर स्वचालित कार्यात्मक परीक्षण करें
- परीक्षण थ्रूपुट में सुधार के लिए एक ही सिस्टम पर कई समवर्ती, समानांतर नेटवर्क चलाएं
इस Codelab में, आप यह जानेंगे खुश है, साथ ही की मूल बातें के साथ कैसे शुरुआत की जाए Weave IOT उपकरणों के लिए। Weave कार्यान्वयन आप इस्तेमाल करेंगे है OpenWeave , एक खुला स्रोत संस्करण नेस्ट द्वारा जारी।

आप क्या सीखेंगे
- हैप्पी और ओपन वीव का निर्माण कैसे करें
- मैन्युअल रूप से एक नकली IoT नेटवर्क कैसे बनाएं
- कस्टम टोपोलॉजी को कैसे प्रबंधित करें
- नकली हैप्पी नेटवर्क को इंटरनेट से कैसे कनेक्ट करें
- बुनाई की मूल बातें
आपको किस चीज़ की ज़रूरत पड़ेगी
- एक Linux मशीन, भौतिक या आभासी
- गिट क्लाइंट या क्लि
- पायथन 2.7
- नेटवर्किंग और रूटिंग अवधारणाओं की एक बुनियादी समझ
2. आरंभ करें
टूलचेन और निर्भरताएँ स्थापित करें
हैप्पी एंड वीव बनाने के लिए, सुनिश्चित करें कि आपके पास एक समर्थित टूलचेन और सभी निर्भरताएँ स्थापित हैं।
$ sudo apt-get update
$ sudo apt-get install -y autotools-dev build-essential git lcov \
libdbus-1-dev libglib2.0-dev libssl-dev \
libudev-dev make python2.7 software-properties-common \
python-setuptools bridge-utils python-lockfile \
python-psutil
$ sudo apt-get install -y --force-yes gcc-arm-none-eabi
$ sudo apt-get update -qq
स्रोत कोड प्राप्त करें
कमांड लाइन से Happy and OpenWeave Git रिपॉजिटरी को क्लोन करें:
$ cd ~ $ git clone https://github.com/openweave/happy.git $ git clone https://github.com/openweave/openweave-core.git
हैप्पी स्थापित करें
हैप्पी रूट डायरेक्टरी से, हैप्पी स्थापित करें:
$ cd ~/happy $ make
हैप्पी इंस्टॉलेशन सत्यापित करें
हैप्पी कमांड अब कमांड लाइन से सुलभ होनी चाहिए:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes NODES Name Interface Type IPs
OpenWeave स्थापित करें
OpenWeave रूट निर्देशिका से, OpenWeave स्थापित करें:
$ cd ~/openweave-core $ make -f Makefile-Standalone
OpenWeave के साथ हैप्पी कॉन्फ़िगर करें
OpenWeave with Happy का उपयोग करने के लिए, आपको हैप्पी को यह बताना होगा कि वीव इंस्टॉलेशन कहां मिलेगा। अद्यतन करने के लिए पथ के साथ खुश विन्यास /src/test-apps अपने OpenWeave निर्माण के भीतर:
$ happy-configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps
कॉन्फ़िगरेशन की पुष्टि करें:
$ happy-configuration
User Happy Configuration
weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps
OpenWeave स्थापना सत्यापित करें
इस कोडलैब में आवश्यक वेव कमांड कमांड लाइन से एक्सेस किए जा सकते हैं:
$ weave-fabric-add -h
weave-fabric-add creates a weave fabric.
weave-fabric-add [-h --help] [-q --quiet] [-i --id <FABRIC_ID>]
Example:
$ weave-fabric-add 123456
Creates a Weave Fabric with id 123456
return:
0 success
1 fail
आप त्रुटि मिलती है weave-fabric-add: command not found है, अपने को अद्यतन PATH मुबारक binaries के लिए इस्तेमाल किया पथ के साथ वातावरण चर:
$ export PATH=$PATH:~/openweave-core/src/test-apps/happy/bin
3. आपका पहला टोपोलॉजी
हैप्पी के साथ निम्नलिखित तीन-नोड टोपोलॉजी बनाते हैं।

यह टोपोलॉजी एक साधारण होम एरिया नेटवर्क (एचएएन) का एक उदाहरण है। इस एचएएन में, दो नोड्स एक थ्रेड नेटवर्क में एक साथ जुड़े हुए हैं, और उनमें से एक नोड वाई-फाई के माध्यम से तीसरे से जुड़ता है। पूरे एचएएन के लिए इंटरनेट कनेक्टिविटी प्रदान करने के लिए इस नोड को घर में वायरलेस राउटर से भी जोड़ा जा सकता है। इसके बारे में और बाद में।
सबसे पहले, तीन नोड बनाएं:
$ happy-node-add 01ThreadNode $ happy-node-add 02BorderRouter $ happy-node-add 03WiFiNode
आइए सुनिश्चित करें कि वे मौजूद हैं:
$ happy-node-list 01ThreadNode 02BorderRouter 03WiFiNode
अब कुछ नेटवर्क बनाते हैं:
$ happy-network-add ThreadNetwork thread $ happy-network-add WiFiNetwork wifi
सत्यापित करें कि नेटवर्क मौजूद हैं:
$ happy-network-list ThreadNetwork WiFiNetwork
खुश राज्य की जाँच करें:
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
ThreadNetwork thread UP
WiFiNetwork wifi UP
NODES Name Interface Type IPs
01ThreadNode
02BorderRouter
03WiFiNode
केवल एक नेटवर्क को ऊपर लाने के लिए पर्याप्त नहीं है - हमें नेटवर्क में नोड्स जोड़ना होगा। हमारे टोपोलॉजी आरेख के बाद, प्रत्येक नोड को उपयुक्त नेटवर्क में जोड़ें:
$ happy-node-join 01ThreadNode ThreadNetwork $ happy-node-join 02BorderRouter ThreadNetwork $ happy-node-join 02BorderRouter WiFiNetwork $ happy-node-join 03WiFiNode WiFiNetwork
ध्यान दें कि 02BorderRouter दोनों को जोड़ा गया है ThreadNetwork और WiFiNetwork । ऐसा इसलिए है क्योंकि हमारे एचएएन के भीतर एक सीमा राउटर के रूप में, यह नोड दो अलग-अलग नेटवर्कों को एक साथ जोड़ता है।
हैप्पी स्टेट चेक करें। प्रत्येक नोड के इंटरफेस ऊपर हैं:
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
ThreadNetwork thread UP
WiFiNetwork wifi UP
NODES Name Interface Type IPs
01ThreadNode wpan0 thread
02BorderRouter wpan0 thread
wlan0 wifi
03WiFiNode wlan0 wifi
हमारी टोपोलॉजी अब इस तरह दिखती है:

हमारे हैप्पी नेटवर्क को लाने का अंतिम चरण प्रत्येक नोड पर प्रत्येक इंटरफ़ेस को आईपी पते निर्दिष्ट करना है। एक नेटवर्क के लिए आईपी उपसर्ग निर्दिष्ट करें, और हैप्पी स्वचालित रूप से आपके लिए आईपी पते निर्दिष्ट करता है।
चूंकि थ्रेड प्रोटोकॉल IPv6 का उपयोग करता है, इसलिए थ्रेड नेटवर्क में IPv6 उपसर्ग जोड़ें:
$ happy-network-address ThreadNetwork 2001:db8:1:2::
हैप्पी स्टेट चेक करें। प्रत्येक थ्रेड नोड पर थ्रेड इंटरफ़ेस में IP पते होते हैं:
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
ThreadNetwork thread UP 2001:0db8:0001:0002/64
WiFiNetwork wifi UP
NODES Name Interface Type IPs
01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64
02BorderRouter wpan0 thread 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64
wlan0 wifi
03WiFiNode wlan0 wifi
वाईफाई नेटवर्क के लिए, IPv4 और IPv6 दोनों उपसर्ग जोड़ें:
$ happy-network-address WiFiNetwork 2001:db8:a:b:: $ happy-network-address WiFiNetwork 10.0.1.0
एक बार फिर हैप्पी स्टेट चेक करें। सभी इंटरफेस ने प्रत्येक वाई-फाई इंटरफेस के लिए दो के साथ आईपी पते निर्दिष्ट किए हैं:
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
ThreadNetwork thread UP 2001:0db8:0001:0002/64
WiFiNetwork wifi UP 2001:0db8:000a:000b/64
10.0.1/24
NODES Name Interface Type IPs
01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64
02BorderRouter wpan0 thread 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64
wlan0 wifi 10.0.1.2/24
2001:0db8:000a:000b:426c:38ff:fe90:01e6/64
03WiFiNode wlan0 wifi 2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64
10.0.1.3/24
यहाँ हमारी अद्यतन टोपोलॉजी है:

4. कनेक्टिविटी का परीक्षण करें
अब जब कि हमारे मुबारक नेटवर्क और चल रही है, चलो से अन्य नोड पिंग द्वारा अपने कनेक्टिविटी का परीक्षण करते हैं 01ThreadNode :
$ happy-ping 01ThreadNode 02BorderRouter
[Ping] ping from 01ThreadNode to 02BorderRouter on address
10.0.1.2 -> 100% packet loss
[Ping] ping from 01ThreadNode to 02BorderRouter on address
2001:0db8:0001:0002:a651:3eff:fe92:6dbc -> 0% packet loss
[Ping] ping from 01ThreadNode to 02BorderRouter on address
2001:0db8:000a:000b:426c:38ff:fe90:01e6 -> 100% packet loss
$ happy-ping 01ThreadNode 03WiFiNode
[Ping] ping from 01ThreadNode to 03WiFiNode on address
2001:0db8:000a:000b:9aae:2bff:fe71:62fa -> 100% packet loss
[Ping] ping from 01ThreadNode to 03WiFiNode on address
10.0.1.3 -> 100% packet loss
happy-ping कमांड की कोशिश करता लक्ष्य नोड पर हर अंतरफलक के लिए हर आईपी पते पिंग करने। हम IPv4 पतों को अनदेखा कर सकते हैं क्योंकि थ्रेड केवल IPv6 का उपयोग करता है।
ध्यान दें कि केवल एक IPv6 पिंग सफल रहा था: पर एक 02BorderRouter के wpan0 इंटरफ़ेस है, जो केवल पता है 01ThreadNode सीधे तक पहुँच सकते हैं:

अन्य IPv6 पतों विफल हो गया क्योंकि अग्रेषण के बीच सक्षम नहीं किया गया wpan0 और wlan0 पर 02BorderRouter । इस प्रकार, 01ThreadNode पता नहीं है 03WiFiNode मौजूद है, या यह कैसे तक पहुँचने के लिए। हैप्पी ने नकली नेटवर्क लाया है, लेकिन नोड्स के बीच सभी रूटिंग और अग्रेषण को सक्षम नहीं किया है।
मार्ग जोड़ें
IPv6 ट्रैफ़िक को HAN में रूट करने के लिए, प्रत्येक नेटवर्क में प्रत्येक नोड के लिए दोनों दिशाओं में उचित मार्ग जोड़ें (ताकि पिंग जानता हो कि स्रोत नोड पर कैसे वापस जाना है)।
प्रत्येक नोड के लिए, आपको यह जानना होगा:
- निकटतम नेटवर्क प्रवेश द्वार-इस मामले में,
02BorderRouterदोनों के लिए - लक्ष्य नेटवर्क—गेटवे के बाद कहां जाना है
हमारे तीन नोड नेटवर्क के लिए, जो हमें निम्नलिखित देता है:
स्रोत नेटवर्क से | नेटवर्क को लक्षित करने के लिए | गेटवे के माध्यम से |
| | |
| | |
यह व्यक्तिगत के साथ प्रत्येक नोड के लिए किया जा सकता है happy-node-route है, लेकिन इसके साथ प्रत्येक नेटवर्क में सभी नोड्स के लिए यह करने के लिए आसान है happy-network-route ।
$ happy-network-route -a -i ThreadNetwork -t default -v 02BorderRouter -p 2001:db8:1:2::/64 $ happy-network-route -a -i WiFiNetwork -t default -v 02BorderRouter -p 2001:db8:a:b::/64
कमांड लाइन झंडे की एक विवरण के लिए, का उपयोग happy-network-route -h ।
happy-network-route आदेश भी आवश्यकतानुसार प्रत्येक नोड के लिए IPv4 और IPv6 अग्रेषण चालू करता है। यह ट्रैफ़िक को एक नोड के भीतर एक इंटरफ़ेस से दूसरे इंटरफ़ेस तक रूट करने की अनुमति देता है।
अब पिंग पुनः प्रयास करें:
$ happy-ping 01ThreadNode 02BorderRouter
[Ping] ping from 01ThreadNode to 02BorderRouter on address
10.0.1.2 -> 100% packet loss
[Ping] ping from 01ThreadNode to 02BorderRouter on address
2001:0db8:0001:0002:a651:3eff:fe92:6dbc -> 0% packet loss
[Ping] ping from 01ThreadNode to 02BorderRouter on address
2001:0db8:000a:000b:426c:38ff:fe90:01e6 -> 0% packet loss
दोनों IPv6 पिंग काम करते हैं! पर अग्रेषित करने के साथ, यह जानता है तक पहुँचने के लिए कैसे wlan0 इंटरफ़ेस। IPv4 पिंग अभी भी विफल है, क्योंकि हमने केवल IPv6 मार्गों और अग्रेषण को कॉन्फ़िगर किया है (क्योंकि थ्रेड IPv4 पर नहीं चलता है)।
चूंकि हमने दोनों तरफ नेटवर्क रूट जोड़े हैं, आइए नेटवर्क पर पिंग करें:
$ happy-ping 01ThreadNode 03WiFiNode
[Ping] ping from 01ThreadNode to 03WiFiNode on address
2001:0db8:000a:000b:9aae:2bff:fe71:62fa -> 0% packet loss
[Ping] ping from 01ThreadNode to 03WiFiNode on address
10.0.1.3 -> 100% packet loss
IPv6 पिंग अपेक्षा के अनुरूप काम करता है। अब आपके पास पूरी तरह कार्यात्मक, नकली IPv6 HAN है।

सब कुछ एक साथ जोड़ने का एक अधिक सुरक्षित और विश्वसनीय तरीका सक्षम करने के लिए, आइए HAN के ऊपर Weave जोड़ें।
5. बुनाई जोड़ें
वीव एक नेटवर्क एप्लिकेशन परत है जो नेस्ट उत्पादों के लिए सुरक्षित और विश्वसनीय संचार बैकबोन प्रदान करती है। हम Weave के ओपन-सोर्स संस्करण OpenWeave के साथ Weave कार्यक्षमता जोड़ सकते हैं।
बुनाई के कार्यान्वयन को "कपड़ा" कहा जाता है। वीव फैब्रिक एक ऐसा नेटवर्क है जिसमें सभी एचएएन नोड्स, नेस्ट सर्विस और एचएएन में भाग लेने वाले किसी भी मोबाइल डिवाइस शामिल हैं। यह एचएएन के शीर्ष पर बैठता है और विभिन्न अंतर्निहित नेटवर्क लिंक प्रौद्योगिकियों (उदाहरण के लिए, थ्रेड या वाई-फाई) में आसान रूटिंग को सक्षम बनाता है।
अपने हान के लिए Weave कपड़े बनाने का उपयोग कर, fab1 , कपड़ा आईडी के रूप में तो Weave के लिए सभी नोड्स कॉन्फ़िगर करें:
$ weave-fabric-add fab1 $ weave-node-configure
अब जब बुन कॉन्फ़िगर हो गया है, तो हैप्पी स्टेट की जाँच करें:
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
ThreadNetwork thread UP 2001:0db8:0001:0002/64
WiFiNetwork wifi UP 2001:0db8:000a:000b/64
10.0.1/24
NODES Name Interface Type IPs
01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64
fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64
02BorderRouter wpan0 thread fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64
2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64
wlan0 wifi fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64
10.0.1.2/24
2001:0db8:000a:000b:426c:38ff:fe90:01e6/64
03WiFiNode wlan0 wifi 2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64
10.0.1.3/24
fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64
प्रत्येक नोड Weave कपड़े में जोड़ा गया है, और प्रत्येक इंटरफ़ेस एक नया IPv6 पता के साथ शुरू है fd00 । Weave कपड़े पर और अधिक जानकारी प्राप्त करने के लिए, का उपयोग weave-state आदेश:
$ weave-state
State Name: weave
NODES Name Weave Node Id Pairing Code
01ThreadNode 69ca9502eb6911e7 8ZJB5Q
02BorderRouter 686af236eb6911e7 B5YV3P
03WiFiNode 69826e60eb6911e7 L3VT3A
FABRIC Fabric Id Global Prefix
fab1 fd00:0000:fab1::/48
यहाँ हमारी अद्यतन टोपोलॉजी है, जिसमें नीले रंग में बुनें मान हैं:

कपड़ा बुनें
वीव एंड हैप्पी स्टेट्स में बहुत सी नई जानकारी है। से कपड़े के साथ आइए शुरू weave-state :
FABRIC Fabric Id Global Prefix
fab1 fd00:0000:fab1::/48
बुनाई का उपयोग करता है की एक IPv6 उपसर्ग fd00::/48 प्रत्येक नोड के लिए। इस ब्लॉक के पतों को विशिष्ट स्थानीय पता कहा जाता है और इन्हें निजी नेटवर्क जैसे HAN के भीतर उपयोग के लिए निर्दिष्ट किया जाता है। इसे फैब्रिक आईडी के साथ मिलाकर ऊपर दिखाया गया वेव ग्लोबल प्रीफिक्स जेनरेट होता है।
बुनाई नोड्स
वेव फैब्रिक में प्रत्येक नोड को एक पेयरिंग कोड के साथ एक अद्वितीय नोड आईडी दी गई है:
NODES Name Weave Node Id Pairing Code
01ThreadNode 69ca9502eb6911e7 8ZJB5Q
02BorderRouter 686af236eb6911e7 B5YV3P
03WiFiNode 69826e60eb6911e7 L3VT3A
नोड आईडी विश्व स्तर पर वेव फैब्रिक में एक नोड की पहचान करता है। पेयरिंग प्रक्रिया के दौरान पेयरिंग कोड का उपयोग "जॉइनर क्रेडेंशियल" के रूप में किया जाता है, और आमतौर पर इसे उत्पाद के क्यूआर कोड के साथ प्रिंट किया जाएगा।
उदाहरण के लिए, यदि आप नेस्ट प्रोटेक्ट या नेस्ट कैम पर क्यूआर कोड देखते हैं, तो आपको एक 6-वर्ण वाली स्ट्रिंग दिखाई देगी, जिसे अक्सर एंट्री कुंजी कहा जाता है। यह वेव पेयरिंग कोड है।

वेव फैब्रिक में प्रत्येक नोड और इंटरफेस के लिए वीव-विशिष्ट IPv6 पते बनाने के लिए ग्लोबल प्रीफिक्स, फैब्रिक आईडी और नोड आईडी के संयोजन का उपयोग करता है।
बुनाई के पते
नोट चार मुबारक टोपोलॉजी में नया IPv6 पतों देखते हैं कि, सभी के बारे में हमारी Weave वैश्विक उपसर्ग के साथ शुरू fd00:0000:fab1::/48 ।
NODES Name Interface Type IPs
01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64
fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64
02BorderRouter wpan0 thread fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64
2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64
wlan0 wifi fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64
10.0.1.2/24
2001:0db8:000a:000b:426c:38ff:fe90:01e6/64
03WiFiNode wlan0 wifi 2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64
10.0.1.3/24
fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64
प्रत्येक नोड को निर्दिष्ट मानक IPv6 पतों के बजाय, वीव प्रोटोकॉल इन पतों का उपयोग वेव फैब्रिक में संचार करने के लिए करते हैं।
नेटवर्क गेटवे बुनें
थ्रेड नेटवर्क पर वेव नोड्स को यह जानने की जरूरत है कि उस नेटवर्क से कहां से बाहर निकलना है। एक वीव नेटवर्क गेटवे—आमतौर पर थ्रेड बॉर्डर राउटर पर—यह कार्यक्षमता प्रदान करता है।
हमारे नमूना टोपोलॉजी में, हम सीमा राउटर नोड को वीव नेटवर्क गेटवे के रूप में नामित करते हैं:
$ weave-network-gateway ThreadNetwork 02BorderRouter
यह आदेश Weave कपड़े सबनेट करने के लिए सभी थ्रेड नोड से एक मार्ग कहते हैं ( fd:0:fab1::/48 ) के माध्यम से BorderRouter नोड के थ्रेड इंटरफेस ( wpan0 ), कि थ्रेड नेटवर्क से परे किसी भी Weave नोड तक पहुँचने के लिए प्रत्येक थ्रेड नोड सक्षम बनाता है। इस के अनुरूप है happy-network-route आदेश जैसा कि हम पहले थे, लेकिन Weave कपड़े मार्गों के लिए विशिष्ट।
6. टोपोलॉजी रखरखाव
क्या हैप्पी इतना शक्तिशाली बनाता है कि यह एक नकली टोपोलॉजी के सभी सेटअप और टियरडाउन को आसानी से कैसे प्रबंधित करता है।
बाद में उपयोग के लिए अपनी हैप्पी टोपोलॉजी को सेव करें:
$ happy-state -s codelab.json
यह स्थानों अपनी जड़ में पूरी टोपोलॉजी के साथ एक JSON फ़ाइल ~/ फ़ोल्डर। JSON फ़ाइल अपने वर्तमान मुबारक राज्य, में पाया जाता है जो की एक प्रति है ~/.happy_state.json ।
एक बार सहेजे जाने के बाद, वर्तमान टोपोलॉजी हटाएं:
$ happy-state-delete
यह सभी नेटवर्क नामस्थान और संबंधित विन्यास में पाया हटाता ~/.happy-state.json फ़ाइल। चेक happy-state और weave-state एक खाली विन्यास पुष्टि करने के लिए:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes NODES Name Interface Type IPs $ weave-state State Name: weave NODES Name Weave Node Id Pairing Code FABRIC Fabric Id Global Prefix
सहेजे गए कॉन्फ़िगरेशन को पुनः लोड करने के लिए, दो आदेशों में से एक का उपयोग करें:
-
happy-state-load- Weave प्लगइन का समर्थन नहीं करता -
weave-state-load- का समर्थन करता है Weave प्लगइन
इसलिए यदि आपके टोपोलॉजी Weave भी शामिल है, हमेशा उपयोग weave-state-load कमांड ताकि Weave कपड़े और संबद्ध विन्यास लागू किया जाता है।
सहेजे गए हैप्पी टोपोलॉजी को पुनः लोड करें:
$ weave-state-load codelab.json
सफल लोडिंग की पुष्टि करने के लिए सभी राज्यों की जाँच करें:
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
ThreadNetwork thread UP 2001:0db8:0001:0002/64
WiFiNetwork wifi UP 2001:0db8:000a:000b/64
10.0.1/24
NODES Name Interface Type IPs
01ThreadNode wpan0 thread 2001:0db8:0001:0002:eef6:a0ff:feca:6697/64
fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64
02BorderRouter wpan0 thread fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64
2001:0db8:0001:0002:5e53:bbff:fe05:484b/64
wlan0 wifi 2001:0db8:000a:000b:2e61:fdff:fed9:4fbc/64
fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64
10.0.1.2/24
03WiFiNode wlan0 wifi fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64
10.0.1.3/24
2001:0db8:000a:000b:5e8e:c9ff:fed2:bdd1/64
$ weave-state
State Name: weave
NODES Name Weave Node Id Pairing Code
01ThreadNode 69ca9502eb6911e7 8ZJB5Q
02BorderRouter 686af236eb6911e7 B5YV3P
03WiFiNode 69826e60eb6911e7 L3VT3A
FABRIC Fabric Id Global Prefix
fab1 fd00:0000:fab1::/48
शेल-स्क्रिप्ट और JSON प्रारूप दोनों में, हैप्पी रिपॉजिटरी में कई पूर्व-निर्धारित टोपोलॉजी प्रदान की गई हैं। उन पर खोजें ~/happy/topologies ।
OpenWeave भी परीक्षण उद्देश्यों के लिए चुनिंदा पूर्व-परिभाषित हैप्पी टोपोलॉजी के साथ आता है। उन पर खोजें ~/openweave-core/src/test-apps/happy/topologies/standalone ।
7. यह कैसे काम करता है
हैप्पी जटिल टोपोलॉजी का अनुकरण करने के लिए लिनक्स नेटवर्क नेमस्पेस का उपयोग करता है। आमतौर पर, एक नेटवर्क कॉन्फ़िगरेशन पूरे Linux OS पर लागू होता है। नेटवर्क नेमस्पेस आपको नेटवर्क कॉन्फ़िगरेशन को विभाजित करने की अनुमति देता है ताकि प्रत्येक नेमस्पेस में इंटरफेस और रूटिंग टेबल का अपना सेट हो।
हैप्पी में प्रत्येक नोड और नेटवर्क एक नेटवर्क नेमस्पेस है, जबकि उनके बीच के लिंक नेटवर्क इंटरफेस हैं।
उदाहरण के लिए, हमारी टोपोलॉजी का उपयोग करना:

आइए देखें कि हैप्पी ने इसके लिए कौन से नेमस्पेस बनाए हैं:
$ ip netns list happy004 happy003 happy002 happy001 happy000
यदि आप इसे netns मुबारक राज्य JSON फ़ाइल की धारा, तुम क्या नोड्स और नेटवर्क प्रत्येक नाम स्थान मेल खाती है के लिए देख सकते हैं:
$ happy-state -j | grep "netns" -A 5
"netns": {
"01ThreadNode": "000",
"02BorderRouter": "001",
"03WiFiNode": "002",
"ThreadNetwork": "003",
"WiFiNetwork": "004",

रन-टाइम लॉग
नोड्स को जारी किए गए कमांड प्रत्येक नोड के नामस्थान के भीतर से निष्पादित मूल टर्मिनल कमांड हैं। इसे देखने का एक आसान तरीका हैप्पी रन-टाइम लॉग्स को सक्षम करना है।
दूसरी टर्मिनल विंडो खोलें और लॉग ऑन करें, वे इस विंडो पर लगातार चलेंगे:
$ happy-state -l
पहली विंडो पर वापस जाएँ और हैप्पी पिंग चलाएँ:
$ happy-ping 01ThreadNode 02BorderRouter
दूसरी टर्मिनल विंडो में नवीनतम लॉग प्रविष्टियों की जाँच करें। आपको लॉग में इस तरह की एक लाइन देखनी चाहिए:
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ping6 -c 1 2001:0db8:0001:0002:5e53:bbff:fe05:484b
happy-ping चल मुबारक से आदेश ज्यादा कुछ नहीं है ping6 में आदेश happy000 नाम स्थान ( 01ThreadNode )।
एक नोड दर्ज करें
का प्रयोग करें happy-shell गैर मुबारक आदेशों को चलाने के लिए के रूप में यदि नोड्स (नेटवर्क नामस्थान) में से एक में लॉग इन किया:
$ happy-shell 01ThreadNode root@01ThreadNode:#
सिम्युलेटेड डिवाइस प्रत्येक नेमस्पेस के भीतर चलाए जाते हैं, और उनके पास केवल हैप्पी के माध्यम से निर्दिष्ट नेटवर्क कॉन्फ़िगरेशन तक पहुंच होती है।
नोड के लिए इंटरफ़ेस कॉन्फ़िगरेशन की जाँच करें। यह आपके OS-व्यापी कॉन्फ़िगरेशन से भिन्न होगा और हैप्पी स्टेट में सूचीबद्ध चीज़ों को प्रतिबिंबित करना चाहिए:
root@01ThreadNode:# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0 frame:0
TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:152 (152.0 B) TX bytes:152 (152.0 B)
wpan0 Link encap:Ethernet HWaddr ec:f6:a0:ca:66:97
inet6 addr: fd00:0:fab1:6:6bca:9502:eb69:11e7/64 Scope:Global
inet6 addr: 2001:db8:1:2:eef6:a0ff:feca:6697/64 Scope:Global
inet6 addr: fe80::eef6:a0ff:feca:6697/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:32 errors:0 dropped:0 overruns:0 frame:0
TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2832 (2.8 KB) TX bytes:2348 (2.3 KB)
का प्रयोग करें exit नोड के नाम स्थान छोड़ने के लिए:
root@01ThreadNode:# exit
8. किसी सेवा से कनेक्ट करें
हैप्पी लिनक्स नेटवर्क नेमस्पेस का उपयोग कैसे करता है, इसकी समझ के साथ, अब आप महसूस कर सकते हैं कि नकली हैप्पी नेटवर्क को इंटरनेट से कनेक्ट करना और नकली नोड्स के भीतर से सार्वजनिक पते तक पहुंचना संभव है। यह आपके सिम्युलेटेड डिवाइस को वास्तविक सेवा (जैसे नेस्ट सर्विस ओवर वीव) से जोड़ने के लिए उपयोगी है।
वीव में सेवा एक क्लाउड-आधारित बुनियादी ढांचा है जो एचएएन नोड्स को डेटा मॉडल में जोड़ता है, रिमोट एक्सेस प्रदान करता है, और एक व्यापक पारिस्थितिकी तंत्र बनाने के लिए बुद्धिमान नियंत्रकों को लागू करता है।
सेवा को हैप्पी के साथ दो प्राथमिक तरीकों से दर्शाया जा सकता है:
- अपने स्वयं के नेटवर्क नेमस्पेस (हैप्पी नोड) में एक नकली सेवा के रूप में
- इंटरनेट पर वास्तविक क्लाउड सेवा के रूप में
पूर्व परिभाषित टोपोलोजी में प्रदान किया गया है ~/happy/topologies प्रत्येक सेवा परिदृश्य का एक उदाहरण के रूप में।
हैप्पी नोड पर नकली सेवा
किसी भी मौजूदा हैप्पी टोपोलॉजी को हटा दें:
$ happy-state-delete
के साथ एक खाली राज्य की पुष्टि happy-state और weave-state आदेशों।
एक्सेस प्वाइंट (एपी) और सर्विस नोड्स के साथ एक पूर्व-निर्धारित टोपोलॉजी लोड करें:
$ weave-state-load ~/happy/topologies/thread_wifi_ap_service.json

टोपोलॉजी की पुष्टि करने के लिए हैप्पी एंड वीव स्टेट्स की जाँच करें। इस टोपोलॉजी में, onhub एपी, जबकि cloud नकली सेवा है। नोट दोनों एक से जुड़े हैं Internet प्रकार के नेटवर्क wan :
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
HomeThread thread UP 2001:0db8:0111:0001/64
HomeWiFi wifi UP 2001:0db8:0222:0002/64
10.0.1/24
Internet wan UP 192.168.100/24
NODES Name Interface Type IPs
BorderRouter wpan0 thread 2001:0db8:0111:0001:f624:13ff:fe4a:6def/64
fd00:0000:fab1:0006:1ab4:3000:0000:0005/64
wlan0 wifi 10.0.1.2/24
fd00:0000:fab1:0001:1ab4:3000:0000:0005/64
2001:0db8:0222:0002:9e31:97ff:fe73:29f0/64
ThreadNode wpan0 thread 2001:0db8:0111:0001:c237:fbff:fecc:b082/64
fd00:0000:fab1:0006:1ab4:3000:0000:0009/64
cloud eth0 wan 192.168.100.3/24
onhub wlan0 wifi 10.0.1.3/24
2001:0db8:0222:0002:3266:20ff:fe98:6ee2/64
eth0 wan 192.168.100.2/24
$ weave-state
State Name: weave
NODES Name Weave Node Id Pairing Code
BorderRouter 18B4300000000005 AAA123
ThreadNode 18B4300000000009 AAA123
FABRIC Fabric Id Global Prefix
fab1 fd00:0000:fab1::/48
बुनाई सुरंग
एक वेव टनल वेव फैब्रिक को एक सर्विस से जोड़ती है। यह एक सुरक्षित मार्ग है जो HAN और सेवा के बीच IPv6 UDP संदेशों को स्थानांतरित करता है। इस टोपोलॉजी में, BorderRouter नोड Weave नेटवर्क प्रवेश द्वार है, जो हान पर सुरंग समाप्ति बिंदु के रूप में कार्य करता है।
बुनाई सुरंग बनाएं:
$ weave-tunnel-start BorderRouter cloud
हैप्पी स्टेट को रीचेक करें। आप पर एक Weave IPv6 पता के साथ एक नई सुरंग इंटरफ़ेस देखना चाहिए cloud नोड:
NODES Name Interface Type IPs
cloud service-tun0 tun fd00:0000:fab1:0005:1ab4:3002:0000:0011/64
eth0 wan 192.168.100.3/24

अब आप वीव फैब्रिक पर नोड्स और सर्विस के वीव ग्लोबल प्रीफिक्स के बीच सफलतापूर्वक पिंग कर सकते हैं:
$ happy-ping ThreadNode cloud
[Ping] ping from ThreadNode to cloud on address
fd00:0000:fab1:0005:1ab4:3002:0000:0011 -> 0% packet loss
इंटरनेट पर वास्तविक क्लाउड सेवा
किसी भी मौजूदा हैप्पी टोपोलॉजी को हटा दें:
$ happy-state-delete
के साथ एक खाली राज्य की पुष्टि happy-state और weave-state आदेशों।
एक्सेस प्वाइंट (एपी) नोड के साथ पूर्व-निर्धारित टोपोलॉजी लोड करें:
$ weave-state-load ~/happy/topologies/thread_wifi_ap_internet.json

इस टोपोलॉजी में, onhub एपी है। हैप्पी स्टेट चेक करें। यह बिना पिछले टोपोलॉजी के समान है, Internet नेटवर्क और cloud नोड:
$ happy-state
State Name: happy
NETWORKS Name Type State Prefixes
HomeThread thread UP 2001:0db8:0111:0001/64
HomeWiFi wifi UP 2001:0db8:0222:0002/64
10.0.1/24
NODES Name Interface Type IPs
BorderRouter wpan0 thread 2001:0db8:0111:0001:ca3f:71ff:fe53:1559/64
fd00:0000:fab1:0006:1ab4:3000:0000:0006/64
wlan0 wifi 2001:0db8:0222:0002:32e7:dfff:fee2:107a/64
fd00:0000:fab1:0001:1ab4:3000:0000:0006/64
10.0.1.2/24
ThreadNode wpan0 thread 2001:0db8:0111:0001:c2fb:97ff:fe04:64bd/64
fd00:0000:fab1:0006:1ab4:3000:0000:000a/64
onhub wlan0 wifi 10.0.1.3/24
2001:0db8:0222:0002:3a3c:8dff:fe38:999b/64
$ weave-state
State Name: weave
NODES Name Weave Node Id Pairing Code
BorderRouter 18B4300000000006 AAA123
ThreadNode 18B430000000000A AAA123
FABRIC Fabric Id Global Prefix
fab1 fd00:0000:fab1::/48
चूंकि प्रत्येक हैप्पी नोड एक नेटवर्क नेमस्पेस है, वे डिफ़ॉल्ट रूप से सार्वजनिक इंटरनेट से विभाजित होते हैं। हैप्पी नोड दर्ज करके और सार्वजनिक इंटरनेट पते को पिंग करके इसका परीक्षण करें। हम इस्तेमाल करेंगे 8.8.8.8 , google.com के IPv4 पतों में से एक।
$ happy-shell onhub root@onhub:# ping -c2 8.8.8.8 connect: Network is unreachable
कनेक्ट करने के लिए onhub इंटरनेट नोड, यह लिनक्स ओएस स्तर के विन्यास पर कि इंटरफेस को पाट किया जाना चाहिए।
नोड से बाहर निकलें:
root@onhub:# exit
साथ अपने इंटरनेट कनेक्शन के लिए इंटरफ़ेस निर्धारित route आदेश:
$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.1.0 0.0.0.0 UG 0 0 0 em1
खोजें default मार्ग। यह आपके Linux मशीन के लिए इंटरनेट कनेक्शन है। Iface कॉलम यह दर्शाता है जो इंटरफेस है कि कनेक्टिविटी के लिए इस्तेमाल किया जा रहा है। उपरोक्त उदाहरण में, यह है em1 ।
का प्रयोग करें happy-internet , पुल स्थापित करने के लिए अपने डिफ़ॉल्ट मार्ग के लिए इंटरफ़ेस का उपयोग कर। के लिए --isp झंडा, संख्या अनुगामी बिना इंटरफ़ेस नाम का उपयोग करें। इस उदाहरण में, यह em । अपने डिफ़ॉल्ट इंटरफ़ेस है eth1 , --isp झंडा होगा eth ।
$ happy-internet --node onhub --interface em1 --isp em --seed 249
में नहीं दिखाई परिवर्तन नहीं होगा happy-state उत्पादन, लेकिन onhub नोड इंटरनेट कनेक्टिविटी होनी चाहिए। आइए नोड में वापस जाएं और जांचें:
$ happy-shell onhub root@onhub:# ping -c2 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=1.81 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=1.81 ms --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 1.814/1.816/1.819/0.042 ms
सफलता!

डीएनएस
हैप्पी नोड्स में अंतर्निहित DNS क्षमताएं नहीं होती हैं। यदि आप google.com को पिंग करने का प्रयास करते हैं, तो यह विफल हो जाता है:
root@onhub:# ping -c2 google.com ping: unknown host google.com
सौभाग्य से, हैप्पी डीएनएस के लिए समर्थन प्रदान करता है। नोड से बाहर निकलें और अपने Linux मशीन के लिए DNS सर्वर खोजें। उपयुक्त डिफ़ॉल्ट इंटरफ़ेस का उपयोग करना सुनिश्चित करें:
root@onhub:# exit $ nmcli dev list iface em1 | grep domain_name_servers DHCP4.OPTION[13]: domain_name_servers = 172.16.255.1 172.16.255.153 172.16.255.53
के साथ इन DNS पतों का उपयोग करें happy-dns :
$ happy-dns 172.16.255.1 172.16.255.153 172.16.255.53
अब भीतर से google.com पिंग कोशिश onhub नोड:
$ happy-shell onhub root@onhub:# ping -c2 google.com PING google.com (64.233.191.113) 56(84) bytes of data. 64 bytes from ja-in-f113.1e100.net (64.233.191.113): icmp_seq=1 ttl=46 time=36.9 ms 64 bytes from ja-in-f113.1e100.net (64.233.191.113): icmp_seq=2 ttl=46 time=37.0 ms --- google.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 36.978/36.995/37.013/0.193 ms
बाहर निकलें onhub नोड आपका काम पूरा हो:
root@onhub:# exit
बुनाई सुरंग
सिम्युलेटेड सर्विस की तरह, हैप्पी में सिम्युलेटेड HAN और सर्विस के बीच एक वीव टनल स्थापित की जानी चाहिए। वास्तविक क्लाउड सेवा के साथ, सुरंग सेटअप में सेवा के आईपी पते या यूआरएल का उपयोग करें। उदाहरण के लिए:
$ weave-tunnel-start BorderRouter mycloud.service.com

9. सफाई
अपने Linux नेटवर्क कॉन्फ़िगरेशन के साथ समस्याओं से बचने के लिए, जब आप उनके साथ काम कर रहे हों, तो हैप्पी टोपोलॉजी को हमेशा साफ़ करना महत्वपूर्ण है।
आप अपने टोपोलॉजी में डीएनएस समर्थन सक्षम हैं, तो इसके साथ कि आदेश का पुनर्प्रसारण से हटाने -d (नष्ट) झंडा पहले। यह सुनिश्चित करने के लिए कि नेटवर्क कॉन्फ़िगरेशन ठीक से अपडेट किया गया है, किसी भी हैप्पी नोड्स को हटाने से पहले इसे चलाया जाना चाहिए।
$ happy-dns -d 172.16.255.1 172.16.255.153 172.16.255.53
इसके बाद, हैप्पी स्टेट को डिलीट करें:
$ happy-state-delete
कभी-कभी, कुछ राज्य फ़ाइलें किसी राज्य को हटाने के बाद भी रह सकती हैं। यदि आपको समस्याएं आ और मुबारक के रूप में की उम्मीद नहीं काम कर रहा है, के साथ राज्य को नष्ट happy-state-delete और उसके बाद निम्न आदेश का उपयोग किसी भी शेष साफ अप के लिए मजबूर करने:
$ ip netns | xargs -I {} sudo ip netns delete {}
$ rm -rf ~/.*state.json
$ rm -rf ~/.*state.json.lock
आपकी मशीन अपने सामान्य नेटवर्क कॉन्फ़िगरेशन पर वापस आ जानी चाहिए।
10. बधाई!
अब आप जानते हैं:
- अपने स्वयं के IoT होम एरिया नेटवर्क का अनुकरण करने के लिए हैप्पी का उपयोग कैसे करें
- हैप्पी टोपोलॉजीज को इंटरनेट से कैसे कनेक्ट करें
- OpenWeave के माध्यम से Weave की मूल बातें, Nest का Weave . का ओपन-सोर्स संस्करण
अगला कदम
इस कोडलैब का निर्माण, निम्नलिखित अभ्यासों का प्रयास करें:
- प्रत्येक थ्रेड और वाई-फाई नेटवर्क में एकाधिक नोड्स के साथ एक बड़ा टोपोलॉजी बनाएं, और सभी नोड्स के बीच कनेक्टिविटी स्थापित करें
- के माध्यम से टोपोलॉजी लोड करने के लिए एक पार्टी स्क्रिप्ट बनाएं
happy-state-loadयाweave-state-load - जैसे अन्य मुबारक आदेश, अन्वेषण
happy-tracerouteऔरhappy-process-*
आगे की पढाई
चेक openweave.io संदर्भ, सहित की एक किस्म के लिए:
