मैं EasyMesh के मौजूदा कार्यान्वयन को थोड़ा संशोधित करूंगा, क्योंकि वर्तमान में यह नोड भूमिकाओं को लागू करने के लिए नहीं लगता है। प्रत्येक नोड समान है और वे केवल एक-दूसरे के साथ संबंध बना सकते हैं। जैसा कि मैं देख रहा हूं कि सर्वर को उनकी रूटिंग टेबल में जोड़ने का कोई तरीका नहीं है और न ही किसी सर्वर से कनेक्टिविटी वाले टेबल में एक विशिष्ट कनेक्शन रिकॉर्ड को चिह्नित करने के लिए।
नोड्स संदेश रूटिंग / अग्रेषण के लिए एक कनेक्शन सूची का उपयोग करते हैं। आपको जो कुछ भी चाहिए वह नोड है जिसका सर्वर के लिए कनेक्शन रिकॉर्ड है, यह रूट नोड है।
अब, वर्तमान में जब एक नोड संचालित होता है तो यह उपलब्ध APs (एक्सेस पॉइंट्स) को स्कैन करेगा, लोगों को फ़िल्टर करेगा जो कि मेष उपसर्ग से शुरू नहीं होते हैं और फिर सर्वश्रेष्ठ RSSI के साथ AP से कनेक्ट होते हैं। इसके अलावा हर नोड एक नाम जाल उपसर्ग + नोड अद्वितीय चिप आईडी के साथ अपना एपी बनाता है ।
यदि कोई अन्य नोड उपलब्ध नहीं है, तो यह बस दूसरों के कनेक्ट होने की प्रतीक्षा करेगा। और यह पहला बिंदु है जहां परिवर्तन लागू किए जाने चाहिए। आप हार्डकोड या किसी भी तरह से एक अद्वितीय एपी को जोड़ सकते हैं , जैसे कि मेष उपसर्ग + "सर्वर" नाम से meshConnectionType
।
इस ऑब्जेक्ट को दायर सर्वर और नोड के बीच संदेश विनिमय द्वारा निर्धारित नहीं किया जाएगा, लेकिन espconn
फ़ील्ड को छोड़कर, निश्चित मान हो सकते हैं । कि अन्य मामलों की तरह एक का अधिग्रहण किया जाना चाहिए। निम्नलिखित संरचना में आपको केवल पहले सदस्य चर की आवश्यकता होगी।
struct meshConnectionType {
espconn *esp_conn;
uint32_t chipId = 0;
String subConnections;
timeSync time;
uint32_t lastRecieved = 0;
bool newConnection = true;
(...)
};
chipId
जाल नेटवर्क में सर्वर के पते के लिए किया जाएगा। आपको एक मान चुनना चाहिए जो ESP8266 चिप आईडी नहीं हो सकता है।
तो मूल रूप से आपके नेटवर्क में पावर करने वाला पहला नोड "रूट" नोड होगा। यदि अन्य नोड्स सर्वर पर संदेश भेजना चाहते हैं, तो संदेश सीधे कनेक्शन (कोड में उप-कनेक्शन कहा जाता है) रिकॉर्ड के आधार पर "रूट" नोड को भेजा जाएगा।
"रूट" नोड तब पता लगाएगा कि इसका सर्वर (राउटर / इंटरनेट) से सीधा संबंध है और जैसा कि यह सर्वर को संदेश है कि उसे इस संदेश को अन्य तरीके से अग्रेषित करना चाहिए (जैसे मेष नहीं) । स्पष्ट रूप से अतिरिक्त जानकारी की आवश्यकता यहाँ सर्वर के आईपी पते और उदाहरण के लिए उपयोग किए गए पोर्ट की तरह है। इन्हें डिफ़ॉल्ट रूप से या कुछ कॉन्फ़िगरेशन विधि द्वारा एक नोड (प्रत्येक नोड पर) संग्रहीत किया जाना चाहिए।
तो अंत में "रूट" नोड सर्वर को एक आईपी संदेश भेजेगा, इसे आपके द्वारा फिर से लागू किया जाना चाहिए।
टी एल; डॉ; निष्कर्ष:
- एक सर्वर एपी होना चाहिए और पहला नोड (केवल पहला नोड संचालित होना चाहिए) इसे कनेक्ट करना चाहिए, यह रूट नोड होगा।
- सर्वर में एक पता (
destId
) होना चाहिए जो सर्वर को संदेश भेजते समय मेष नेटवर्क में उपयोग किया जाएगा। यह जानकारी डिफ़ॉल्ट रूप से सभी नोड्स के लिए उपलब्ध होनी चाहिए।
- रूट नोड को पता होना चाहिए कि यह सर्वर / इंटरनेट से "सीधे" जुड़ा हुआ है। यह
destId
रूट नोड की कनेक्शन सूची में सर्वर के साथ एक कनेक्शन रिकॉर्ड जोड़कर प्राप्त किया जा सकता है ।
- रूट नोड यह जानते हुए कि यह सर्वर से जुड़ा है, इंटरनेट के माध्यम से संदेशों को उचित रूप से अग्रेषित कर सकता है।
यह केवल एक सैद्धांतिक विचार है जिसे मैं ईज़ीमेश के कार्यान्वयन के माध्यम से पढ़कर आता हूं। मुझे कुछ महत्वपूर्ण तथ्य याद आ सकते हैं जो इसे लागू करना कठिन या असंभव बना देंगे। इसके अलावा यह समस्या को हल करने का सबसे कारगर तरीका नहीं हो सकता है। मैं एक जाल नेटवर्क विशेषज्ञ नहीं हूं।
नेटवर्क में रूट नोड होने से पूछता है कि "क्या होगा यदि रूट डिस्कनेक्ट हो जाता है? एक नई रूट कैसे चुना जाएगा?"।