আমি ইজিমেশনের বিদ্যমান বাস্তবায়নটিকে কিছুটা সংশোধন করব, কারণ বর্তমানে এটি নোডের ভূমিকা বাস্তবায়িত করে বলে মনে হচ্ছে না। প্রতিটি নোড সমান এবং তারা কেবল একে অপরের সাথে সংযোগ তৈরি করতে পারে। আমি দেখতে পাচ্ছি যে তাদের রাউটিং টেবিলগুলিতে একটি সার্ভার যুক্ত করার বা কোনও সার্ভারের সাথে সংযোগ আছে এমন টেবিলগুলিতে একটি নির্দিষ্ট সংযোগ রেকর্ড চিহ্নিত করার কোনও উপায় নেই।
নোডগুলি বার্তা রাউটিং / ফরোয়ার্ড করার জন্য একটি সংযোগ তালিকা ব্যবহার করে। আপনার যা দরকার তা হ'ল একটি নোড যা সার্ভারের সাথে একটি সংযোগ রেকর্ড রয়েছে, এটি হ'ল মূল নোড।
এখন, বর্তমানে যখন কোনও নোড চালিত হয় এটি উপলব্ধ এপিগুলি (অ্যাক্সেস পয়েন্টস) স্ক্যান করে, জাল উপসর্গ দিয়ে শুরু না করে এমনগুলি ফিল্টার করে এবং তারপরে সেরা আরএসএসআইয়ের সাথে এপিতে সংযুক্ত হয়। এছাড়াও প্রতিটি নোড একটি জাল উপসর্গ + নোড অনন্য চিপ আইডি দিয়ে নিজস্ব এপি তৈরি করে ।
যদি অন্য কোনও নোড উপলব্ধ না হয় তবে এটি অন্যদের সংযুক্ত হওয়ার জন্য কেবল অপেক্ষা করবে। এবং এটিই প্রথম পয়েন্ট যেখানে পরিবর্তনগুলি প্রয়োগ করা উচিত। আপনি হার্ডকোড করতে পারেন বা জাল উপসর্গ + "সার্ভার" এর মতো একটি নাম দিয়ে একটি অনন্য এপি কনফিগার করতে পারেন এবং যদি অন্য কোনও ইজিমেশ এপি না পাওয়া যায় তবে নোডকে এই এপিটির সাথে সংযুক্ত করা উচিত meshConnectionType
এবং এর সংযোগ তালিকায় একটি প্রাক-সংজ্ঞায়িত বস্তু সংরক্ষণ করা উচিত ।
এই বস্তুর ফাইল করা সার্ভার এবং নোডের মধ্যে বার্তা বিনিময় দ্বারা নির্ধারিত হবে না তবে espconn
ক্ষেত্রটি বাদে স্থির মানগুলি স্থির করা যাবে । এটি অন্য ক্ষেত্রেগুলির মতো অর্জন করা উচিত। নিম্নলিখিত কাঠামোতে আপনার কেবল প্রথম সদস্যের সদস্যের পরিবর্তনশীল প্রয়োজন need
struct meshConnectionType {
espconn *esp_conn;
uint32_t chipId = 0;
String subConnections;
timeSync time;
uint32_t lastRecieved = 0;
bool newConnection = true;
(...)
};
chipId
জাল নেটওয়ার্কের মধ্যে সার্ভারের ঠিকানা হতে হবে। আপনার এমন একটি মান চয়ন করা উচিত যা ESP8266 চিপ আইডি হতে পারে না।
সুতরাং মূলত আপনার নেটওয়ার্কে পাওয়ার আপ করার প্রথম নোডটি হবে "রুট" নোড। যদি অন্য নোডগুলি সার্ভারে বার্তা প্রেরণ করতে চায় তবে ইন-ডাইরেক্ট সংযোগের ভিত্তিতে বার্তাটি "রুট" নোডে প্রেরণ করা হবে (কোডটিতে সাব-সংযোগগুলি বলা হয়) রেকর্ডস।
"রুট" নোডটি তখন জানতে পারবে যে এটির সার্ভারের সাথে (রাউটার / ইন্টারনেটের) সরাসরি সংযোগ রয়েছে এবং এটি সার্ভারের কাছে একটি বার্তা হিসাবে এটি এই বার্তাটিকে অন্য উপায়ে ফরোয়ার্ড করা উচিত (জালের মতো নয়) । স্পষ্টতই এখানে সার্ভারের আইপি ঠিকানা এবং ব্যবহৃত পোর্ট যেমন উদাহরণস্বরূপ অতিরিক্ত তথ্য প্রয়োজন। এগুলি ডিফল্ট বা কোনও কনফিগারেশন পদ্ধতিতে নোড (প্রতিটি নোডে) সংরক্ষণ করা উচিত।
সুতরাং শেষ পর্যন্ত "রুট" নোড সার্ভারে একটি আইপি বার্তা প্রেরণ করবে, এটি আপনার দ্বারা আবার প্রয়োগ করা উচিত।
টি এল; ডিআর; উপসংহার:
- একটি সার্ভার এপি থাকা উচিত এবং প্রথম নোড (কেবল প্রথম নোড চালিত হওয়া) এর সাথে সংযুক্ত হওয়া উচিত, এটি হবে মূল নোড।
- সার্ভারের একটি ঠিকানা (
destId
) থাকা উচিত যা সার্ভারে বার্তা প্রেরণের সময় জাল নেটওয়ার্কে ব্যবহৃত হবে। এই তথ্যটি ডিফল্টরূপে সমস্ত নোডের কাছে পাওয়া উচিত।
- রুট নোডটি জানা উচিত যে এটি সার্ভার / ইন্টারনেটের সাথে "সরাসরি" সংযুক্ত।
destId
রুট নোডের সংযোগ তালিকায় সার্ভারের সাথে সংযোগ রেকর্ড যুক্ত করে এটি অর্জন করা যেতে পারে ।
- এটি সার্ভারের সাথে সংযুক্ত কিনা জেনে রুট নোড ইন্টারনেটের মাধ্যমে বার্তাগুলি যথাযথভাবে ফরোয়ার্ড করতে পারে।
এটি কেবলমাত্র একটি তাত্ত্বিক ধারণা যা আমি ইজিমেশ বাস্তবায়নের মাধ্যমে পড়তে এসেছি। আমি সম্ভবত কিছু গুরুত্বপূর্ণ ঘটনা মিস করেছি যা এটি কার্যকর করা বা বাস্তবায়িত করা অসম্ভব করে তোলে। এছাড়াও এটি সমস্যা সমাধানের সবচেয়ে কার্যকর উপায় নাও হতে পারে। আমি কোনও জাল নেটওয়ার্ক বিশেষজ্ঞ নই।
নেটওয়ার্কে একটি রুট নোড থাকা জিজ্ঞাসা করে "যদি রুটটি সংযোগ বিচ্ছিন্ন হয়ে যায় তবে কী হবে? কীভাবে একটি নতুন মূল বেছে নেওয়া হবে?"