متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

قرنطینہ کے دوران، مجھے کئی سیلولر آپریٹرز کے لیے LTE موڈیم کی رفتار کی پیمائش کے لیے ایک ڈیوائس کی تیاری میں حصہ لینے کی پیشکش کی گئی۔

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

صارف مختلف جغرافیائی مقامات پر مختلف ٹیلی کام آپریٹرز کی رفتار کا اندازہ لگانا چاہتا تھا تاکہ یہ سمجھ سکے کہ LTE کنکشن کا استعمال کرتے ہوئے آلات نصب کرتے وقت کون سا سیلولر آپریٹر اس کے لیے سب سے زیادہ موزوں ہے، مثال کے طور پر، ویڈیو براڈکاسٹ کے لیے۔ ایک ہی وقت میں، اس مسئلے کو مہنگے آلات کے بغیر، جتنا آسان اور سستا ممکن ہو حل کرنا تھا۔

میں فوراً کہوں گا کہ یہ کام سب سے آسان اور علم پر مبنی نہیں ہے؛ میں آپ کو بتاؤں گا کہ مجھے کن مسائل کا سامنا کرنا پڑا اور میں نے انہیں کیسے حل کیا۔ تو چلو چلتے ہیں.

نوٹ

LTE کنکشن کی رفتار کی پیمائش کرنا ایک بہت ہی پیچیدہ معاملہ ہے: آپ کو صحیح آلات اور پیمائش کی تکنیک کا انتخاب کرنے کی ضرورت ہے، اور آپ کو سیلولر نیٹ ورک کی ٹوپولوجی اور آپریشن کے بارے میں بھی اچھی طرح سے سمجھنا ہوگا۔ اس کے علاوہ، رفتار کئی عوامل سے متاثر ہو سکتی ہے: سیل پر سبسکرائبرز کی تعداد، موسمی حالات، یہاں تک کہ سیل سے سیل تک نیٹ ورک ٹوپولوجی کی وجہ سے رفتار ڈرامائی طور پر مختلف ہو سکتی ہے۔ عام طور پر، یہ ایک بڑی تعداد میں نامعلوم افراد کا مسئلہ ہے، اور صرف ایک ٹیلی کام آپریٹر ہی اسے صحیح طریقے سے حل کر سکتا ہے۔

ابتدائی طور پر، صارف صرف آپریٹرز کے فون کے ساتھ کورئیر چلانا چاہتا تھا، براہ راست فون پر پیمائش کرتا تھا اور پھر رفتار کی پیمائش کے نتائج کو ایک نوٹ بک میں لکھتا تھا۔ lte نیٹ ورکس کی رفتار کی پیمائش کے لیے میرا حل، اگرچہ مثالی نہیں، مسئلہ کو حل کرتا ہے۔

وقت کی کمی کی وجہ سے میں نے سہولت یا عملییت کے حق میں نہیں بلکہ ترقی کی رفتار کے حق میں فیصلے کئے۔ مثال کے طور پر، ریورس ssh کو زیادہ عملی VPN کے بجائے ریموٹ رسائی کے لیے استعمال کیا گیا تھا، تاکہ سرور اور ہر ایک کلائنٹ کو ترتیب دینے میں وقت بچایا جا سکے۔

تکنیکی کام

جیسا کہ مضمون میں کہا گیا ہے۔ تکنیکی وضاحتوں کے بغیر: کلائنٹ یہ کیوں نہیں چاہتا ہے۔: تکنیکی وضاحتوں کے بغیر کام نہ کریں! کبھی نہیں، کہیں بھی نہیں!

تکنیکی کام کافی آسان تھا، میں اسے آخری صارف کی سمجھ کے لیے تھوڑا بڑھا دوں گا۔ تکنیکی حل اور آلات کا انتخاب گاہک کے ذریعہ طے کیا گیا تھا۔ لہذا، تکنیکی تفصیلات خود، تمام منظوریوں کے بعد:

سنگل بورڈ کمپیوٹر پر مبنی vim2 H موڈیم کے ذریعے lte کنکشن کے لیے اسپیڈ ٹیسٹر بنائیںuawei e3372h - 153 متعدد ٹیلی کام آپریٹرز (ایک سے این تک)۔ UART کے ذریعے جڑے ہوئے GPS ریسیور سے نقاط وصول کرنا بھی ضروری ہے۔ سروس کا استعمال کرتے ہوئے رفتار کی پیمائش کریں۔ www.speedtest.net اور انہیں ایک میز میں رکھیں جیسے:

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

csv فارمیٹ میں ٹیبل۔ پھر یہ نشان ہر 6 گھنٹے بعد ای میل کے ذریعے بھیجیں۔ غلطیوں کی صورت میں، GPIO سے منسلک LED کو جھپکائیں۔

میں نے بہت سی منظوریوں کے بعد تکنیکی خصوصیات کو مفت شکل میں بیان کیا۔ لیکن کام کا مطلب پہلے ہی نظر آتا ہے۔ ہر چیز کے لیے ایک ہفتہ دیا گیا۔ لیکن حقیقت میں یہ تین ہفتے تک جاری رہا۔ اس میں اس حقیقت کو مدنظر رکھا جا رہا ہے کہ میں نے یہ کام اپنے مرکزی کام کے بعد اور ویک اینڈ پر کیا۔

یہاں میں ایک بار پھر اس حقیقت کی طرف توجہ مبذول کرانا چاہتا ہوں کہ صارف نے رفتار کی پیمائش کی سروس اور ہارڈ ویئر کے استعمال پر پیشگی اتفاق کیا تھا، جس نے میری صلاحیتوں کو کافی حد تک محدود کر دیا تھا۔ بجٹ بھی محدود تھا اس لیے کچھ خاص نہیں خریدا گیا۔ لہذا ہمیں ان اصولوں کے مطابق کھیلنا پڑا۔

فن تعمیر اور ترقی

اسکیم سادہ اور واضح ہے۔ لہذا، میں اسے بغیر کسی خاص تبصرے کے چھوڑ دوں گا۔

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

میں نے پورا پروجیکٹ python میں نافذ کرنے کا فیصلہ کیا، اس حقیقت کے باوجود کہ مجھے اس زبان میں ترقی کرنے کا کوئی تجربہ نہیں تھا۔ میں نے اس کا انتخاب اس لیے کیا کیونکہ بہت ساری تیار شدہ مثالیں اور حل موجود ہیں جو ترقی کو تیز کر سکتے ہیں۔ اس لیے، میں تمام پیشہ ور پروگرامرز سے کہتا ہوں کہ وہ ازگر میں ترقی کرنے کے میرے پہلے تجربے کو طعنہ نہ دیں، اور میں اپنی صلاحیتوں کو بہتر بنانے کے لیے تعمیری تنقید سن کر ہمیشہ خوش ہوتا ہوں۔

نیز اس عمل میں میں نے دریافت کیا کہ ازگر کے دو چلنے والے ورژن 2 اور 3 ہیں، نتیجے کے طور پر میں تیسرے نمبر پر آ گیا۔

ہارڈ ویئر نوڈس

سنگل پلیٹ vim2

مجھے میری مین مشین کے طور پر ایک سنگل بورڈ کمپیوٹر دیا گیا تھا۔ vim2

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

سمارٹ ہوم اور SMART-TV کے لیے ایک بہترین، طاقتور میڈیا پروسیسر، لیکن اس کام کے لیے انتہائی نامناسب، یا یوں کہہ لیں، ناقص موزوں ہے۔ مثال کے طور پر، اس کا مرکزی OS اینڈرائیڈ ہے، اور لینکس ایک ثانوی OS ہے، اور اس کے مطابق کوئی بھی لینکس کے تحت تمام نوڈس اور ڈرائیورز کے اعلیٰ معیار کے آپریشن کی ضمانت نہیں دیتا ہے۔ اور میں فرض کرتا ہوں کہ کچھ مسائل اس پلیٹ فارم کے USB ڈرائیوروں سے متعلق تھے، اس لیے موڈیم اس بورڈ پر توقع کے مطابق کام نہیں کر سکے۔ اس میں بہت ناقص اور بکھرے ہوئے دستاویزات بھی ہیں، اس لیے ہر آپریشن میں گودیوں کو کھودنے میں کافی وقت لگتا ہے۔ یہاں تک کہ GPIO کے ساتھ عام کام میں بہت زیادہ خون لگتا ہے۔ مثال کے طور پر، مجھے ایل ای ڈی لگانے میں کئی گھنٹے لگے۔ لیکن، مقصد کے لیے، یہ بنیادی طور پر اہم نہیں تھا کہ یہ کس قسم کا سنگل بورڈ ہے، اہم بات یہ تھی کہ اس نے کام کیا اور USB پورٹس موجود تھے۔

سب سے پہلے، مجھے اس بورڈ پر لینکس انسٹال کرنے کی ضرورت ہے۔ ہر ایک کے لیے دستاویزات کے جنگل کو نہ چھپانے کے لیے، اور ان لوگوں کے لیے بھی جو اس سنگل بورڈ سسٹم سے نمٹیں گے، میں یہ باب لکھ رہا ہوں۔

لینکس کو انسٹال کرنے کے دو اختیارات ہیں: ایک بیرونی SD کارڈ پر یا اندرونی MMC پر۔ میں نے ایک شام یہ جاننے کی کوشش میں گزاری کہ اسے کارڈ کے ساتھ کیسے کام کرنا ہے، اس لیے میں نے اسے MMC پر انسٹال کرنے کا فیصلہ کیا، حالانکہ اس میں کوئی شک نہیں کہ بیرونی کارڈ کے ساتھ کام کرنا بہت آسان ہوگا۔

فرم ویئر کے بارے میں ٹیڑھی سے یہاں بتایا. میں عجیب سے روسی میں ترجمہ کرتا ہوں۔ بورڈ کو چمکانے کے لیے، مجھے ہارڈ ویئر UART کو جوڑنے کی ضرورت ہے۔ اسے جوڑ دیا۔ مندرجہ ذیل طریقے سے

  • ٹول پن GND: <—> VIMs کے GPIO کا پن17
  • ٹول پن TXD: <—> VIMs کے GPIO کا پن 18 (Linux_Rx)
  • ٹول پن RXD: <—> VIMs کے GPIO کا پن 19 (Linux_Tx)
  • ٹول پن VCC: <—> VIMs کے GPIO کا پن20

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

اس کے بعد، میں نے فرم ویئر ڈاؤن لوڈ کیا اس وجہ سے. مخصوص فرم ویئر ورژن VIM1_Ubuntu-server-bionic_Linux-4.9_arm64_EMMC_V20191231.

اس فرم ویئر کو اپ لوڈ کرنے کے لیے، مجھے یوٹیلیٹیز کی ضرورت ہے۔ اس بارے میں مزید تفصیلات یہاں. میں نے اسے ونڈوز کے تحت چمکانے کی کوشش نہیں کی ہے، لیکن مجھے آپ کو لینکس کے تحت فرم ویئر کے بارے میں کچھ الفاظ بتانے کی ضرورت ہے۔ سب سے پہلے، میں ہدایات کے مطابق یوٹیلیٹیز انسٹال کروں گا۔

git clone https://github.com/khadas/utils
cd /path/to/utils
sudo ./INSTALL

Aaand... کچھ کام نہیں کرتا۔ میں نے انسٹالیشن اسکرپٹس میں ترمیم کرنے میں چند گھنٹے گزارے تاکہ سب کچھ میرے لیے صحیح طریقے سے انسٹال ہو جائے۔ مجھے یاد نہیں کہ میں نے وہاں کیا کیا، لیکن گھوڑوں کے ساتھ وہ سرکس بھی تھا۔ لہذا احتیاط کرو. لیکن ان افادیت کے بغیر vim2 کو مزید اذیت دینے کا کوئی فائدہ نہیں ہے۔ اس کے ساتھ بالکل بھی گڑبڑ نہ کرنا بہتر ہے!

جہنم کے سات حلقوں، اسکرپٹ کنفیگریشن اور انسٹالیشن کے بعد، مجھے ورکنگ یوٹیلیٹیز کا ایک پیکج ملا۔ میں نے بورڈ کو USB کے ذریعے اپنے لینکس کمپیوٹر سے منسلک کیا، اور اوپر دیے گئے خاکے کے مطابق UART کو بھی منسلک کیا۔
میں ہارڈ ویئر اور سافٹ ویئر کی خرابی کے کنٹرول کے بغیر، 115200 کی رفتار کے لیے اپنا پسندیدہ منی کام ٹرمینل ترتیب دے رہا ہوں۔ اور آئیے شروع کرتے ہیں۔

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

UART ٹرمینل میں VIM2 لوڈ کرتے وقت، لوڈنگ کو روکنے کے لیے میں ایک کلید دباتا ہوں، جیسے اسپیس بار۔ لائن ظاہر ہونے کے بعد

kvim2# 

میں کمانڈ درج کرتا ہوں:

kvim2# run update

جس میزبان سے ہم لوڈ کر رہے ہیں، میں اس پر عمل کرتا ہوں:

burn-tool -v aml -b VIM2 -i  VIM2_Ubuntu-server-bionic_Linux-4.9_arm64_EMMC_V20191231.img

یہ ہے، افف. میں نے چیک کیا، بورڈ پر لینکس موجود ہے۔ لاگ ان/پاس ورڈ khadas:khadas.

اس کے بعد، کچھ معمولی ابتدائی ترتیبات. مزید کام کے لیے، میں sudo کے لیے پاس ورڈ کو غیر فعال کرتا ہوں (ہاں، محفوظ نہیں، لیکن آسان)۔

sudo visudo

میں فارم میں لائن میں ترمیم کرتا ہوں اور محفوظ کرتا ہوں۔

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) NOPASSWD: ALL

پھر میں موجودہ مقام کو تبدیل کرتا ہوں تاکہ وقت ماسکو میں ہو، ورنہ یہ گرین وچ میں ہوگا۔

sudo timedatectl set-timezone Europe/Moscow

یا

ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

اگر آپ کو یہ مشکل لگتا ہے، تو اس بورڈ کا استعمال نہ کریں؛ Raspberry Pi بہتر ہے۔ ایمانداری سے۔

موڈیم Huawei e3372h – 153

یہ موڈیم میرے لیے خون کا ایک اہم ذریعہ تھا، اور درحقیقت یہ پورے منصوبے کی رکاوٹ بن گیا۔ عام طور پر، ان آلات کا نام "موڈیم" بالکل بھی کام کے جوہر کی عکاسی نہیں کرتا: یہ ایک طاقتور کمبائن ہے، ہارڈ ویئر کے اس ٹکڑے میں ایک جامع ڈیوائس ہے جو ڈرائیوروں کو انسٹال کرنے کے لیے CD-ROM ہونے کا بہانہ کرتی ہے، اور پھر نیٹ ورک کارڈ موڈ پر سوئچ کرتا ہے۔

آرکیٹیکچرل طور پر، لینکس صارف کے نقطہ نظر سے، تمام ترتیبات کے بعد، یہ اس طرح لگتا ہے: موڈیم کو جوڑنے کے بعد، میرے پاس ایک ایتھ* نیٹ ورک انٹرفیس ہے، جو ڈی ایچ سی پی کے ذریعے آئی پی ایڈریس 192.168.8.100، اور ڈیفالٹ گیٹ وے حاصل کرتا ہے۔ 192.168.8.1 ہے۔

اور سب سے اہم لمحہ! یہ موڈیم ماڈل موڈیم موڈ میں کام نہیں کر سکتا، جسے اے ٹی کمانڈز کے ذریعے کنٹرول کیا جاتا ہے۔. سب کچھ بہت آسان ہوگا، ہر موڈیم کے لیے پی پی پی کنکشن بنائیں اور پھر ان کے ساتھ کام کریں۔ لیکن میرے معاملے میں، "خود" (زیادہ واضح طور پر، یو ڈی وی قواعد کے مطابق ایک لینکس غوطہ خور)، ایک ایتھ انٹرفیس بناتا ہے اور اسے dhcp کے ذریعے ایک IP ایڈریس تفویض کرتا ہے۔

مزید الجھنوں سے بچنے کے لیے، میرا مشورہ ہے کہ لفظ "موڈیم" کو بھول جائیں اور نیٹ ورک کارڈ اور گیٹ وے بولیں، کیونکہ اصل میں یہ ایک نئے نیٹ ورک کارڈ کو گیٹ وے سے جوڑنے جیسا ہے۔
جب ایک موڈیم ہوتا ہے تو اس سے کوئی خاص مسئلہ نہیں ہوتا، لیکن جب ایک سے زیادہ یعنی n-pieces ہوتے ہیں، تو مندرجہ ذیل نیٹ ورک کی تصویر پیدا ہوتی ہے۔

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

یعنی، n نیٹ ورک کارڈز، ایک ہی IP ایڈریس کے ساتھ، ہر ایک ایک ہی ڈیفالٹ گیٹ وے کے ساتھ۔ لیکن درحقیقت ان میں سے ہر ایک اپنے آپریٹر سے جڑا ہوا ہے۔

ابتدائی طور پر، میرے پاس ایک آسان حل تھا: ifconfig یا ip کمانڈ کا استعمال کرتے ہوئے، تمام انٹرفیس کو بند کریں اور صرف ایک کو باری باری آن کریں اور اس کی جانچ کریں۔ حل سب کے لیے اچھا تھا، سوائے اس کے کہ سوئچنگ کے لمحات کے دوران میں ڈیوائس سے رابطہ قائم کرنے کے قابل نہیں تھا۔ اور چونکہ سوئچنگ بار بار اور تیز ہوتی ہے، اس لیے مجھے اصل میں جڑنے کا کوئی موقع نہیں ملا۔

لہذا، میں نے موڈیم کے آئی پی ایڈریس کو دستی طور پر تبدیل کرنے اور پھر روٹنگ سیٹنگز کا استعمال کرتے ہوئے ٹریفک چلانے کا راستہ منتخب کیا۔

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

یہ موڈیم کے ساتھ میری پریشانیوں کا خاتمہ نہیں تھا: بجلی کے مسائل کی صورت میں، وہ گر گئے، اور USB حب کو اچھی مستحکم بجلی کی فراہمی کی ضرورت تھی۔ میں نے اس مسئلے کو طاقت کو براہ راست حب تک سخت سولڈرنگ کرکے حل کیا۔ ایک اور مسئلہ جس کا مجھے سامنا کرنا پڑا اور جس نے پورے پروجیکٹ کو برباد کر دیا: ڈیوائس کے ریبوٹ یا کولڈ سٹارٹ کے بعد، تمام موڈیمز کا پتہ نہیں چل سکا اور ہمیشہ نہیں، اور میں اس بات کا تعین نہیں کر سکا کہ ایسا کیوں ہوا اور کس الگورتھم سے ہوا۔ لیکن سب سے پہلے چیزیں.

موڈیم کے صحیح طریقے سے کام کرنے کے لیے، میں نے USB-modeswitch پیکیج انسٹال کیا۔

sudo apt update
sudo apt install -y usb-modeswitch

جس کے بعد، کنیکٹ ہونے کے بعد، موڈیم کا صحیح طریقے سے پتہ لگایا جائے گا اور udev سب سسٹم کے ذریعے ترتیب دیا جائے گا۔ میں صرف موڈیم کو جوڑ کر چیک کرتا ہوں اور یہ یقینی بناتا ہوں کہ نیٹ ورک ظاہر ہو رہا ہے۔
ایک اور مسئلہ جو میں حل نہیں کر سکا: میں اس موڈیم سے جس آپریٹر کے ساتھ ہم کام کر رہے ہیں اس کا نام کیسے حاصل کر سکتا ہوں؟ آپریٹر کا نام موڈیم ویب انٹرفیس میں 192.168.8.1 پر موجود ہے۔ یہ ایک متحرک ویب صفحہ ہے جو Ajax کی درخواستوں کے ذریعے ڈیٹا حاصل کرتا ہے، اس لیے صرف صفحہ کو ویجیٹ کرنا اور نام کو پارس کرنا کام نہیں کرے گا۔ تو میں نے یہ دیکھنا شروع کیا کہ ویب پیج کیسے تیار کیا جائے، وغیرہ، اور مجھے احساس ہوا کہ میں کسی قسم کی بکواس کر رہا ہوں۔ نتیجے کے طور پر، اس نے تھوک دیا، اور آپریٹر نے خود اسپیڈٹیسٹ API کا استعمال کرتے ہوئے وصول کرنا شروع کیا۔

اگر موڈیم کو اے ٹی کمانڈز کے ذریعے رسائی حاصل ہوتی تو بہت آسان ہوتا۔ اسے دوبارہ ترتیب دینا، پی پی پی کنکشن بنانا، آئی پی تفویض کرنا، ٹیلی کام آپریٹر حاصل کرنا، وغیرہ ممکن ہوگا۔ لیکن افسوس، میں اس کے ساتھ کام کر رہا ہوں جو مجھے دیا گیا ہے۔

GPS

مجھے جو GPS ریسیور دیا گیا تھا اس میں UART انٹرفیس اور طاقت تھی۔ یہ بہترین حل نہیں تھا، لیکن یہ اب بھی قابل عمل اور آسان تھا۔ ریسیور کچھ اس طرح نظر آرہا تھا۔

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

سچ پوچھیں تو، یہ میرا پہلا جی پی ایس ریسیور کے ساتھ کام کرنے کا موقع تھا، لیکن جیسا کہ میں نے توقع کی تھی، ہمارے لیے سب کچھ بہت پہلے سوچا گیا تھا۔ لہذا ہم صرف تیار حل استعمال کرتے ہیں۔

سب سے پہلے، میں uart_AO_B (UART_RX_AO_B, UART_TX_AO_B) کو GPS سے منسلک کرنے کے لیے فعال کرتا ہوں۔

khadas@Khadas:~$ sudo fdtput -t s /dtb.img /serial@c81004e0 status okay

اس کے بعد میں آپریشن کی کامیابی کو چیک کرتا ہوں۔

khadas@Khadas:~$ fdtget /dtb.img /serial@c81004e0 status
okay

یہ کمانڈ بظاہر devtree on the fly میں ترمیم کرتی ہے، جو کہ بہت آسان ہے۔

اس آپریشن کی کامیابی کے بعد، ریبوٹ کریں اور GPS ڈیمون انسٹال کریں۔

khadas@Khadas:~$ sudo reboot

GPS ڈیمون انسٹال کرنا۔ میں سب کچھ انسٹال کرتا ہوں اور مزید کنفیگریشن کے لیے اسے فوراً کاٹ دیتا ہوں۔

sudo apt install gpsd gpsd-clients -y
sudo killall gpsd
 
/* GPS daemon stop/disable */
sudo systemctl stop gpsd.socket
sudo systemctl disable gpsd.socket

ترتیبات کی فائل میں ترمیم کرنا۔

sudo vim /etc/default/gpsd

میں ایک UART انسٹال کر رہا ہوں جس پر GPS لٹک جائے گا۔

DEVICES="/dev/ttyS4"

اور پھر ہم سب کچھ آن کر کے شروع کر دیتے ہیں۔

/* GPS daemon enable/start */
sudo systemctl enable gpsd.socket
sudo systemctl start gpsd.socket

اس کے بعد، میں GPS کو جوڑتا ہوں۔

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

GPS کی تار میرے ہاتھ میں ہے، UART ڈیبگر تاریں میری انگلیوں کے نیچے نظر آ رہی ہیں۔

میں ریبوٹ کرتا ہوں اور gpsmon پروگرام کا استعمال کرتے ہوئے GPS آپریشن چیک کرتا ہوں۔

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

آپ اس اسکرین شاٹ میں سیٹلائٹ نہیں دیکھ سکتے، لیکن آپ GPS ریسیور کے ساتھ مواصلت دیکھ سکتے ہیں، اور اس کا مطلب ہے کہ سب کچھ ٹھیک ہے۔

ازگر میں، میں نے اس ڈیمون کے ساتھ کام کرنے کے لیے بہت سے آپشنز آزمائے، لیکن میں اس پر طے ہوا جس نے ازگر 3 کے ساتھ صحیح طریقے سے کام کیا۔

میں ضروری لائبریری انسٹال کرتا ہوں۔

sudo -H pip3 install gps3 

اور میں کام کے کوڈ کو مجسمہ بناتا ہوں۔

from gps3.agps3threaded import AGPS3mechanism
...

def getPositionData(agps_thread):
	counter = 0;
	while True:
		longitude = agps_thread.data_stream.lon
		latitude = agps_thread.data_stream.lat
		if latitude != 'n/a' and longitude != 'n/a':
			return '{}' .format(longitude), '{}' .format(latitude)
		counter = counter + 1
		print ("Wait gps counter = %d" % counter)
		if counter == 10:
			ErrorMessage("Ошибка GPS приемника!!!")
			return "NA", "NA"
		time.sleep(1.0)
...
f __name__ == '__main__':
...
	#gps
	agps_thread = AGPS3mechanism()  # Instantiate AGPS3 Mechanisms
	agps_thread.stream_data()  # From localhost (), or other hosts, by example, (host='gps.ddns.net')
	agps_thread.run_thread()  # Throttle time to sleep after an empty lookup, default '()' 0.2 two tenths of a second

اگر مجھے کوآرڈینیٹ حاصل کرنے کی ضرورت ہے، تو یہ مندرجہ ذیل کال کے ساتھ کیا جاتا ہے:

longitude, latitude = getPositionData(agps_thread)

اور 1-10 سیکنڈ کے اندر مجھے یا تو کوآرڈینیٹ مل جائے گا یا نہیں۔ ہاں، میں نے نقاط حاصل کرنے کی دس کوششیں کیں۔ زیادہ سے زیادہ ٹیڑھا اور ٹیڑھا نہیں، لیکن یہ کام کرتا ہے۔ میں نے ایسا کرنے کا فیصلہ کیا کیونکہ GPS کا استقبال خراب ہو سکتا ہے اور ہمیشہ ڈیٹا حاصل نہیں کر سکتا۔ اگر آپ ڈیٹا وصول کرنے کا انتظار کرتے ہیں، پھر اگر آپ دور دراز کے کمرے میں کام کرتے ہیں، تو پروگرام اس جگہ منجمد ہو جائے گا۔ لہذا، میں نے اس غیر مناسب آپشن کو نافذ کیا۔

اصولی طور پر، اگر زیادہ وقت ہوتا، تو UART کے ذریعے براہ راست GPS سے ڈیٹا حاصل کرنا، اسے الگ تھریڈ میں پارس کرنا اور اس کے ساتھ کام کرنا ممکن ہو گا۔ لیکن بالکل وقت نہیں تھا، اس لیے بے دردی سے بدصورت کوڈ۔ اور ہاں مجھے شرم نہیں آتی۔

روشنی خارج کرنے والا دو برقیرہ

ایل ای ڈی کو جوڑنا ایک ہی وقت میں آسان اور مشکل تھا۔ سب سے بڑی مشکل یہ ہے کہ سسٹم میں پن نمبر بورڈ پر موجود پن نمبر سے مطابقت نہیں رکھتا اور کیونکہ دستاویزات بائیں ہاتھ سے لکھی جاتی ہیں۔ OS میں ہارڈویئر پن نمبر اور پن نمبر کا موازنہ کرنے کے لیے، آپ کو کمانڈ چلانے کی ضرورت ہے:

gpio readall

سسٹم میں اور بورڈ پر پن خط و کتابت کا ایک ٹیبل دکھایا جائے گا۔ جس کے بعد میں OS میں ہی پن کو پہلے ہی چلا سکتا ہوں۔ میرے معاملے میں ایل ای ڈی منسلک ہے۔ GPIOH_5.

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

میں GPIO پن کو آؤٹ پٹ موڈ میں تبدیل کرتا ہوں۔

gpio -g mode 421 out

میں صفر لکھتا ہوں۔

gpio -g write 421 0

میں ایک لکھ دیتا ہوں۔

gpio -g write 421 1

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ
"1" لکھنے کے بعد سب کچھ روشن ہو جاتا ہے

#gpio subsistem
def gpio_init():
	os.system("gpio -g mode 421 out")
	os.system("gpio -g write 421 1")

def gpio_set(val):
	os.system("gpio -g write 421 %d" % val)
	
def error_blink():
	gpio_set(0)
	time.sleep(0.1)
	gpio_set(1)
	time.sleep(0.1)
	gpio_set(0)
	time.sleep(0.1)
	gpio_set(1)
	time.sleep(0.1)
	gpio_set(0)
	time.sleep(1.0)
	gpio_set(1)

def good_blink():
	gpio_set(1)

اب، غلطیوں کی صورت میں، میں error_blink() کو کال کرتا ہوں اور ایل ای ڈی خوبصورتی سے جھپک جائے گی۔

سافٹ ویئر نوڈس

سپیڈٹیسٹ API

یہ بہت خوشی کی بات ہے کہ speedtest.net سروس کا اپنا python-API ہے، آپ اسے دیکھ سکتے ہیں Github کے.

اچھی بات یہ ہے کہ سورس کوڈز ہیں جو بھی دیکھے جا سکتے ہیں۔ اس API کے ساتھ کام کرنے کا طریقہ (سادہ مثالیں) میں پایا جا سکتا ہے۔ متعلقہ سیکشن.

میں مندرجہ ذیل کمانڈ کے ساتھ ازگر کی لائبریری انسٹال کرتا ہوں۔

sudo -H pip3 install speedtest-cli

مثال کے طور پر، آپ اوبنٹو میں براہ راست سافٹ ویئر سے اسپیڈ ٹیسٹر بھی انسٹال کر سکتے ہیں۔ یہ وہی ازگر ایپلی کیشن ہے، جسے پھر کنسول سے براہ راست لانچ کیا جا سکتا ہے۔

sudo apt install speedtest-cli -y

اور اپنے انٹرنیٹ کی رفتار کی پیمائش کریں۔

speedtest-cli
Retrieving speedtest.net configuration...
Testing from B***** (*.*.*.*)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by MTS (Moscow) [0.12 km]: 11.8 ms
Testing download speed................................................................................
Download: 7.10 Mbit/s
Testing upload speed......................................................................................................
Upload: 3.86 Mbit/s

نتیجے کے طور پر، جیسا کہ میں نے کیا تھا. مجھے اس سپیڈ ٹیسٹ کے سورس کوڈز کو اپنے پروجیکٹ میں مکمل طور پر لاگو کرنے کے لیے حاصل کرنا پڑا۔ سب سے اہم کاموں میں سے ایک ٹیلی کام آپریٹر کا نام حاصل کرنا ہے تاکہ اسے پلیٹ میں تبدیل کیا جا سکے۔

import speedtest
from datetime import datetime
...
#Указываем конкретный сервер для теста
#6053) MaximaTelecom (Moscow, Russian Federation)
servers = ["6053"]
# If you want to use a single threaded test
threads = None
s = speedtest.Speedtest()
#получаем имя оператора сотовой связи
opos = '%(isp)s' % s.config['client']
s.get_servers(servers)
#получаем текстовую строку с параметрами сервера
testserver = '%(sponsor)s (%(name)s) [%(d)0.2f km]: %(latency)s ms' % s.results.server
#тест загрузки
s.download(threads=threads)
#тест выгрузки
s.upload(threads=threads)
#получаем результаты
s.results.share()

#После чего формируется строка для записи в csv-файл.
#получаем позицию GPS
longitude, latitude = getPositionData(agps_thread)
#время и дата
curdata = datetime.now().strftime('%d.%m.%Y')
curtime = datetime.now().strftime('%H:%M:%S')
delimiter = ';'
result_string = opos + delimiter + str(curpos) + delimiter + 
	curdata + delimiter + curtime + delimiter + longitude + ', ' + latitude + delimiter + 
	str(s.results.download/1000.0/1000.0) + delimiter + str(s.results.upload / 1000.0 / 1000.0) + 
	delimiter + str(s.results.ping) + delimiter + testserver + "n"
#тут идет запись в файл логов

یہاں بھی، سب کچھ اتنا آسان نہیں نکلا، حالانکہ یہ بہت آسان لگتا ہے۔ ابتدائی طور پر، سرورز کا پیرامیٹر برابر تھا۔ []، وہ کہتے ہیں، بہترین سرور کا انتخاب کریں۔ نتیجے کے طور پر، میرے پاس بے ترتیب سرورز تھے، اور، جیسا کہ آپ اندازہ لگا سکتے ہیں، متغیر رفتار۔ یہ کافی پیچیدہ موضوع ہے، ایک مقررہ سرور کا استعمال کرتے ہوئے، اگر ایسا ہے تو، جامد یا متحرک، تحقیق کی ضرورت ہے۔ لیکن یہاں ایک Beeline آپریٹر کے لیے رفتار کی پیمائش کے گراف کی ایک مثال ہے جب متحرک طور پر ٹیسٹ سرور اور ایک مستحکم طور پر طے شدہ کو منتخب کیا جاتا ہے۔

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ
متحرک سرور کا انتخاب کرتے وقت رفتار کی پیمائش کا نتیجہ۔

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ
رفتار کی جانچ کا نتیجہ، سختی سے منتخب کردہ ایک سرور کے ساتھ۔

جانچ کے دوران، دونوں جگہوں پر "فر" ہے، اور اسے ریاضی کے طریقوں سے ہٹانے کی ضرورت ہے۔ لیکن ایک مقررہ سرور کے ساتھ یہ قدرے کم ہے اور طول و عرض زیادہ مستحکم ہے۔
عام طور پر، یہ ایک عظیم تحقیق کی جگہ ہے. اور میں iperf یوٹیلیٹی کا استعمال کرتے ہوئے اپنے سرور کی رفتار کی پیمائش کروں گا۔ لیکن ہم تکنیکی وضاحتوں پر قائم ہیں۔

میل بھیجنا اور غلطیاں

میل بھیجنے کے لیے، میں نے کئی درجن مختلف آپشنز آزمائے، لیکن آخر میں میں نے درج ذیل پر طے کیا۔ میں نے Yandex پر ایک میل باکس رجسٹر کیا اور پھر لے لیا۔ یہ میل بھیجنے کی ایک مثال ہے۔. میں نے اسے چیک کیا اور اسے پروگرام میں لاگو کیا۔ یہ مثال مختلف اختیارات کا جائزہ لیتی ہے، بشمول جی میل سے بھیجنا وغیرہ۔ میں اپنے میل سرور کو ترتیب دینے کے ساتھ پریشان نہیں ہونا چاہتا تھا اور اس کے لئے وقت نہیں تھا، لیکن جیسا کہ بعد میں پتہ چلا، یہ بھی بیکار تھا۔

نوشتہ جات شیڈولر کے مطابق بھیجے گئے تھے، اگر کوئی تعلق ہے، ہر 6 گھنٹے: صبح 00 بجے، صبح 06 بجے، دوپہر 12 بجے اور رات 18 بجے۔ اسے حسب ذیل بھیجا۔

from send_email import *
...
message_log = "Логи тестирования платы №1"
EmailForSend = ["[email protected]", "[email protected]"]
files = ["/home/khadas/modems_speedtest/csv"]
...
def sendLogs():
	global EmailForSend
	curdata = datetime.now().strftime('%d.%m.%Y')
	сurtime = datetime.now().strftime('%H:%M:%S')
	try:
		for addr_to in EmailForSend:
			send_email(addr_to, message_log, "Логи за " + curdata + " " + сurtime, files)
	except:
		print("Network problem for send mail")
		return False
	return True

غلطیاں بھی ابتدائی طور پر بھیجی گئیں۔ شروع کرنے کے لیے، وہ فہرست میں جمع کیے گئے تھے، اور پھر شیڈیولر کا استعمال کرتے ہوئے بھیجا گیا تھا، اگر کوئی کنکشن تھا۔ تاہم، پھر اس حقیقت کے ساتھ مسائل پیدا ہوئے کہ Yandex کے پاس روزانہ بھیجے جانے والے پیغامات کی تعداد کی حد ہے (یہ درد، اداسی اور ذلت ہے)۔ چونکہ فی منٹ میں بھی بڑی تعداد میں غلطیاں ہو سکتی ہیں، ہمیں بذریعہ ڈاک غلطیاں بھیجنا چھوڑنا پڑا۔ لہذا Yandex سروسز کے ذریعے خود بخود اس طرح کے مسئلے کے بارے میں معلومات بھیجتے وقت ذہن میں رکھیں۔

فیڈ بیک سرور

ہارڈ ویئر کے ریموٹ ٹکڑے تک رسائی حاصل کرنے اور اسے حسب ضرورت بنانے اور دوبارہ ترتیب دینے کے لیے، مجھے ایک بیرونی سرور کی ضرورت تھی۔ عام طور پر، منصفانہ طور پر، سرور کو تمام ڈیٹا بھیجنا اور ویب انٹرفیس میں تمام خوبصورت گراف بنانا درست ہوگا۔ لیکن سب ایک ساتھ نہیں۔

VPS کے لیے میں نے انتخاب کیا۔ ruvds.com. آپ آسان ترین سرور لے سکتے ہیں۔ اور عام طور پر، میرے مقاصد کے لیے یہ کافی ہوگا۔ لیکن چونکہ میں نے سرور کے لیے اپنی جیب سے ادائیگی نہیں کی تھی، اس لیے میں نے اسے ایک چھوٹے سے ریزرو کے ساتھ لینے کا فیصلہ کیا تاکہ اگر ہم ویب انٹرفیس، اپنا SMTP سرور، VPN وغیرہ لگانا چاہیں تو یہ کافی ہوگا۔ اس کے علاوہ، ٹیلیگرام بوٹ سیٹ اپ کرنے کے قابل ہو جائیں اور اس کے بلاک ہونے میں پریشانی نہ ہو۔ لہذا، میں نے ایمسٹرڈیم اور مندرجہ ذیل پیرامیٹرز کا انتخاب کیا۔

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

ہارڈ ویئر کے ساتھ مواصلت کے طریقہ کار کے طور پر، vim2 نے ایک ریورس ssh کنکشن کا انتخاب کیا اور جیسا کہ پریکٹس نے دکھایا ہے، یہ بہترین نہیں ہے۔ اگر کنکشن منقطع ہو جائے تو سرور پورٹ رکھتا ہے اور کچھ وقت کے لیے اس کے ذریعے رابطہ قائم کرنا ناممکن ہے۔ لہذا، مواصلات کے دیگر طریقے استعمال کرنا اب بھی بہتر ہے، مثال کے طور پر VPN۔ مستقبل میں میں VPN پر جانا چاہتا تھا، لیکن میرے پاس وقت نہیں تھا۔

میں فائر وال کو ترتیب دینے، حقوق کو محدود کرنے، روٹ ssh کنکشنز کو غیر فعال کرنے اور VPS کو ترتیب دینے کے دیگر معاملات کی تفصیلات میں نہیں جاؤں گا۔ میں یقین کرنا چاہوں گا کہ آپ پہلے ہی سب کچھ جانتے ہیں۔ ریموٹ کنکشن کے لیے، میں سرور پر ایک نیا صارف بناتا ہوں۔

adduser vimssh

میں اپنے ہارڈ ویئر پر ssh کنکشن کیز تیار کرتا ہوں۔

ssh-keygen

اور میں انہیں ہمارے سرور پر کاپی کرتا ہوں۔

ssh-copy-id [email protected]

ہمارے ہارڈ ویئر پر، میں ہر بوٹ پر ایک خودکار ریورس ssh کنکشن بناتا ہوں۔

[Unit] Description=Auto Reverse SSH
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service] User=khadas
ExecStart=/usr/bin/ssh -NT -o ExitOnForwardFailure=yes -o ServerAliveInterval=60 -CD 8080 -R 8083:localhost:22 [email protected]
RestartSec=5
Restart=always
[Install] WantedBy=multi-user.target

پورٹ 8083 پر توجہ دیں: یہ طے کرتا ہے کہ میں ریورس ایس ایس ایچ کے ذریعے کنیکٹ ہونے کے لیے کون سا پورٹ استعمال کروں گا۔ اسے شروع میں شامل کریں اور شروع کریں۔

sudo systemctl enable autossh.service
sudo systemctl start autossh.service

آپ اسٹیٹس بھی دیکھ سکتے ہیں:

sudo systemctl status autossh.service

اب، ہمارے VPS سرور پر، اگر ہم چلاتے ہیں:

ssh -p 8083 khadas@localhost

پھر میں ہارڈ ویئر کے اپنے ٹیسٹ ٹکڑے پر جاتا ہوں۔ اور ہارڈ ویئر سے میں اپنے سرور پر ssh کے ذریعے لاگ اور کوئی ڈیٹا بھی بھیج سکتا ہوں، جو کہ بہت آسان ہے۔

یہ سب ایک ساتھ ڈالنا

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ
سوئچ آن، آئیے ڈیولپمنٹ اور ڈیبگنگ شروع کریں۔

افف، ٹھیک ہے، یہ ہے، میں نے تمام نوڈس کو بیان کیا. اب یہ سب ایک ساتھ ڈالنے کا وقت ہے۔ آپ کوڈ دیکھ سکتے ہیں۔ یہاں.

کوڈ کے ساتھ ایک اہم نکتہ: یہ پروجیکٹ اس طرح شروع نہیں ہوسکتا ہے، کیونکہ یہ ایک مخصوص کام، ایک مخصوص فن تعمیر کے لیے تیار کیا گیا تھا۔ اگرچہ میں سورس کوڈ دے رہا ہوں، پھر بھی میں یہاں سب سے قیمتی چیزوں کی وضاحت متن میں ہی کروں گا، ورنہ یہ مکمل طور پر سمجھ سے باہر ہے۔

شروع میں، میں gps، gpio کو شروع کرتا ہوں اور ایک الگ شیڈولر تھریڈ لانچ کرتا ہوں۔

#запуск потока планировщика
pShedulerThread = threading.Thread(target=ShedulerThread, args=(1,))
pShedulerThread.start()

شیڈولر کافی آسان ہے: یہ دیکھنا لگتا ہے کہ آیا پیغامات بھیجنے کا وقت آگیا ہے اور موجودہ خرابی کی صورتحال کیا ہے۔ اگر کوئی غلطی کا جھنڈا ہے، تو ہم ایل ای ڈی کو جھپکتے ہیں۔

#sheduler
def ShedulerThread(name):
	global ready_to_send
	while True:
		d = datetime.today()
		time_x = d.strftime('%H:%M')
		if time_x in time_send_csv:
			ready_to_send = True
		if error_status:
			error_blink()
		else:
			good_blink()
		time.sleep(1)

اس پروجیکٹ کا سب سے مشکل حصہ ہر ٹیسٹ کے لیے ریورس ایس ایس ایس کنکشن کو برقرار رکھنا ہے۔ ہر ٹیسٹ میں ڈیفالٹ گیٹ وے اور DNS سرور کو دوبارہ ترتیب دینا شامل ہے۔ چونکہ ویسے بھی کوئی نہیں پڑھتا، اس لیے جان لیں کہ ٹرین لکڑی کی پٹریوں پر نہیں چلتی۔ جو بھی ایسٹر انڈے کو ڈھونڈتا ہے اسے کچھ کینڈی ملتی ہے۔

ایسا کرنے کے لیے، میں ایک الگ روٹنگ ٹیبل - سیٹ مارک 0x2 اور ٹریفک کو ری ڈائریکٹ کرنے کے لیے ایک اصول بناتا ہوں۔

def InitRouteForSSH():
	cmd_run("sudo iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 22 -j MARK --set-mark 0x2")
	cmd_run("sudo ip rule add fwmark 0x2/0x2 lookup 102")

آپ مزید جان سکتے ہیں کہ یہ کیسے کام کرتا ہے۔ اس مضمون میں پڑھیں.

جس کے بعد میں ایک لامتناہی لوپ میں جاتا ہوں، جہاں ہر بار ہمیں منسلک موڈیم کی فہرست ملتی ہے (یہ معلوم کرنے کے لیے کہ آیا نیٹ ورک کنفیگریشن اچانک بدل گئی ہے)۔

network_list = getNetworklist()

نیٹ ورک انٹرفیس کی فہرست حاصل کرنا بہت آسان ہے۔

def getNetworklist():
	full_networklist = os.listdir('/sys/class/net/')
	network_list = [x for x in full_networklist if "eth" in x and x != "eth0"]
	return network_list

فہرست حاصل کرنے کے بعد، میں نے تمام انٹرفیس پر آئی پی ایڈریسز سیٹ کیے، جیسا کہ میں نے موڈیم کے باب میں تصویر میں دکھایا ہے۔

SetIpAllNetwork(network_list)

def SetIpAllNetwork(network_list):
	for iface in network_list:
		lastip = "%d" % (3 + network_list.index(iface))
		cmd_run ("sudo ifconfig " + iface + " 192.168.8." + lastip +" up")

پھر میں صرف ایک لوپ میں ہر انٹرفیس کے ذریعے جاتا ہوں. اور میں ہر انٹرفیس کو ترتیب دیتا ہوں۔

	for iface in network_list:
		ConfigNetwork(iface)

def ConfigNetwork(iface):
#сбрасываем все настройки
		cmd_run("sudo ip route flush all")
#Назначаем шлюз по умолчанию
		cmd_run("sudo route add default gw 192.168.8.1 " + iface)
#задаем dns-сервер (это нужно для работы speedtest)
		cmd_run ("sudo bash -c 'echo nameserver 8.8.8.8 > /etc/resolv.conf'")

میں فعالیت کے لیے انٹرفیس چیک کرتا ہوں، اگر کوئی نیٹ ورک نہیں ہے، تو میں غلطیاں پیدا کرتا ہوں۔ اگر ایک نیٹ ورک ہے، تو یہ کام کرنے کا وقت ہے!

یہاں میں اس انٹرفیس پر ssh روٹنگ کو ترتیب دیتا ہوں (اگر ایسا نہیں کیا گیا ہے)، وقت آنے پر سرور کو غلطیاں بھیجیں، لاگ بھیجیں اور آخر میں اسپیڈ ٹیسٹ چلائیں اور لاگز کو سی ایس وی فائل میں محفوظ کریں۔

if not NetworkAvalible():
....
#Здесь мы формируем ошибки
....
else: #Есть сеть, ура, работаем!
#Если у нас проблемный интерфейс, на котором ssh, то меняем его
  if (sshint == lastbanint or sshint =="free"):
    print("********** Setup SSH ********************")
    if sshint !="free":
      сmd_run("sudo ip route del default via 192.168.8.1 dev " + sshint +" table 102")
    SetupReverseSSH(iface)
    sshint = iface
#раз сетка работает, то давай срочно все отправим!!!
    if ready_to_send:
      print ("**** Ready to send!!!")
        if sendLogs():
          ready_to_send = False
        if error_status:
          SendErrors()
#и далее тестируем скорость и сохраняем логи. 

ریورس ایس ایس ایس کو ترتیب دینے کے فنکشن کا ذکر کرنا ضروری ہے۔

def SetupReverseSSH(iface):
	cmd_run("sudo systemctl stop autossh.service")
	cmd_run("sudo ip route add default via 192.168.8.1 dev " + iface +" table 102")
	cmd_run("sudo systemctl start autossh.service")

اور ظاہر ہے، آپ کو یہ تمام خوبصورتی اسٹارٹ اپ میں شامل کرنے کی ضرورت ہے۔ ایسا کرنے کے لیے میں ایک فائل بناتا ہوں:

sudo vim /etc/systemd/system/modems_speedtest.service

اور میں اس میں لکھتا ہوں:

[Unit] Description=Modem Speed Test
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service] User=khadas
ExecStart=/usr/bin/python3.6 /home/khadas/modems_speedtest/networks.py
RestartSec=5
Restart=always
[Install] WantedBy=multi-user.target

میں آٹو لوڈنگ کو آن کرتا ہوں اور شروع کرتا ہوں!

sudo systemctl enable modems_speedtest.service
sudo systemctl start modems_speedtest.service

اب میں کمانڈ کا استعمال کرتے ہوئے کیا ہو رہا ہے اس کے نوشتہ جات دیکھ سکتا ہوں:

journalctl -u modems_speedtest.service --no-pager -f

نتائج

خیر، اب سب سے اہم بات یہ ہے کہ اس کے نتیجے میں کیا ہوا؟ یہاں کچھ گرافس ہیں جو میں نے ترقی اور ڈیبگنگ کے عمل کے دوران حاصل کرنے میں کامیاب کیا۔ گراف مندرجہ ذیل اسکرپٹ کے ساتھ gnuplot کا استعمال کرتے ہوئے بنائے گئے تھے۔

#! /usr/bin/gnuplot -persist
set terminal postscript eps enhanced color solid
set output "Rostelecom.ps"
 
#set terminal png size 1024, 768
#set output "Rostelecom.png"
 
set datafile separator ';'
set grid xtics ytics
set xdata time
set ylabel "Speed Mb/s"
set xlabel 'Time'
set timefmt '%d.%m.%Y;%H:%M:%S'
set title "Rostelecom Speed"

plot "Rostelecom.csv" using 3:6 with lines title "Download", '' using 3:7 with lines title "Upload"
 
set title "Rostelecom 2 Ping"
set ylabel "Ping ms"
plot "Rostelecom.csv" using 3:8 with lines title "Ping"

پہلا تجربہ Tele2 آپریٹر کے ساتھ تھا، جو میں نے کئی دنوں تک کیا۔

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

یہاں میں نے ایک متحرک پیمائش کرنے والا سرور استعمال کیا۔ رفتار کی پیمائش کام کرتی ہے، لیکن بہت زیادہ اتار چڑھاؤ آتا ہے، لیکن کچھ اوسط قدر اب بھی نظر آتی ہے، اور یہ ڈیٹا کو فلٹر کرکے حاصل کیا جاسکتا ہے، مثال کے طور پر، حرکت پذیری اوسط کے ساتھ۔

بعد میں میں نے دوسرے ٹیلی کام آپریٹرز کے لیے کئی گراف بنائے۔ اس معاملے میں، پہلے سے ہی ایک ٹیسٹنگ سرور موجود تھا، اور نتائج بھی بہت دلچسپ تھے۔

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

جیسا کہ آپ دیکھ سکتے ہیں، موضوع اس ڈیٹا کی تحقیق اور پروسیسنگ کے لیے بہت وسیع ہے، اور واضح طور پر کام کے چند ہفتوں تک نہیں رہتا۔ لیکن…

کام کا نتیجہ

میرے قابو سے باہر حالات کی وجہ سے کام اچانک مکمل ہو گیا۔ اس پروجیکٹ کی کمزوریوں میں سے ایک، میری سبجیکٹو رائے میں، موڈیم تھا، جو درحقیقت دوسرے موڈیم کے ساتھ بیک وقت کام نہیں کرنا چاہتا تھا، اور ہر بار لوڈ ہونے پر اس طرح کی چالیں بناتا تھا۔ ان مقاصد کے لیے، دیگر موڈیم ماڈلز کی ایک بڑی تعداد موجود ہے؛ عام طور پر وہ پہلے سے ہی Mini PCI-e فارمیٹ میں ہوتے ہیں اور ڈیوائس کے اندر انسٹال ہوتے ہیں اور کنفیگر کرنا بہت آسان ہوتا ہے۔ لیکن یہ بالکل مختلف کہانی ہے۔ پروجیکٹ دلچسپ تھا اور مجھے بہت خوشی ہوئی کہ میں اس میں حصہ لینے کے قابل تھا۔

متعدد LTE موڈیمز پر بیک وقت سپیڈ ٹیسٹ

ماخذ: www.habr.com

نیا تبصرہ شامل کریں