قرنطين دوران، مون کي ڪيترن ئي سيلولر آپريٽرز لاءِ LTE موڊيمس جي رفتار کي ماپڻ لاءِ هڪ ڊوائيس جي ترقي ۾ حصو وٺڻ جي آڇ ڪئي وئي.
ڪسٽمر مختلف جاگرافيائي جڳهن تي مختلف ٽيلي ڪام آپريٽرز جي رفتار جو جائزو وٺڻ چاهيندو هو ته جيئن اهو سمجهڻ جي قابل ٿي وڃي ته LTE ڪنيڪشن استعمال ڪندي سامان انسٽال ڪرڻ وقت ڪهڙو سيلولر آپريٽر هن لاءِ سڀ کان بهتر هو، مثال طور، وڊيو براڊڪاسٽز لاءِ. ساڳئي وقت، مسئلي کي آسان ۽ سستي طور تي ممڪن طور تي حل ڪيو وڃي، قيمتي سامان کان سواء.
مان فوري طور تي چوندس ته اهو ڪم تمام آسان ۽ تمام گهڻي ڄاڻ وارو نه آهي؛ مان توهان کي ٻڌايان ٿو ته مون کي ڪهڙيون مشڪلاتون پيش آيون ۽ مون انهن کي ڪيئن حل ڪيو. سو، اچو ته هلون.
ويچاري
LTE ڪنيڪشن جي رفتار کي ماپڻ هڪ تمام پيچيده معاملو آهي: توهان کي صحيح سامان ۽ ماپ جي ٽيڪنڪ چونڊڻ جي ضرورت آهي، ۽ توهان کي سيلولر نيٽ ورڪ جي ٽوپولوجي ۽ آپريشن جي سٺي ڄاڻ پڻ آهي. ان سان گڏ، رفتار ڪيترن ئي عنصرن کان متاثر ٿي سگھي ٿو: سيل تي رڪنن جو تعداد، موسمي حالتون، ايستائين جو سيل کان سيل تائين، نيٽ ورڪ ٽوپولوجي جي ڪري رفتار مختلف ٿي سگھي ٿي. عام طور تي، اهو اڻڄاتل وڏي تعداد سان هڪ مسئلو آهي، ۽ صرف هڪ ٽيليڪ آپريٽر ان کي صحيح طور تي حل ڪري سگهي ٿو.
شروعات ۾، گراهڪ صرف آپريٽرز جي فونن سان ڪوريئر کي هلائڻ چاهيندو هو، سڌو سنئون فون تي ماپون وٺي ۽ پوءِ رفتار جي ماپ جا نتيجا هڪ نوٽ بڪ ۾ لکندو هو. lte نيٽ ورڪن جي رفتار کي ماپڻ لاءِ منهنجو حل، جيتوڻيڪ مثالي ناهي، مسئلو حل ڪري ٿو.
وقت جي کوٽ جي ڪري، مون فيصلا سهولت يا عملي جي حق ۾ نه، پر ترقي جي رفتار جي حق ۾ ڪيا. مثال طور، ريورس ssh استعمال ڪيو ويو ريموٽ رسائي لاءِ، وڌيڪ عملي وي پي اين جي بدران، سرور ۽ هر فرد ڪلائنٽ کي ترتيب ڏيڻ تي وقت بچائڻ لاءِ.
ٽيڪنيڪل ڪم بلڪل سادو هو، مان ان کي ٿورڙو وڌائيندس آخري صارف جي سمجھ لاءِ. ٽيڪنيڪل حل ۽ سامان جو انتخاب ڪسٽمر طرفان ترتيب ڏنو ويو. تنهن ڪري، ٽيڪنيڪل وضاحت پاڻ، سڀني منظورين کان پوء:
هڪ واحد بورڊ ڪمپيوٽر جي بنياد تي vim2 H modems ذريعي Lte ڪنيڪشن لاءِ اسپيڊ ٽيسٽر ٺاهيوuawei e3372h - 153 ڪيترائي ٽيليڪ آپريٽرز (هڪ کان اين تائين). اهو پڻ ضروري آهي ته يو آر ٽي ذريعي ڳنڍيل GPS وصول ڪندڙ کان ڪوآرڊينيٽ حاصل ڪرڻ. خدمت استعمال ڪندي رفتار جي ماپ ڪريو www.speedtest.net ۽ انھن کي ٽيبل ۾ وجھو جيئن:
csv فارميٽ ۾ ٽيبل. پوءِ هي نشاني هر 6 ڪلاڪن ۾ اي ميل ذريعي موڪليو. غلطين جي صورت ۾، LED کي ڦوڪيو جيڪو GPIO سان ڳنڍيل آهي.
مون ٽيڪنيڪل وضاحتن کي مفت فارم ۾ بيان ڪيو، ڪيترن ئي منظورين کان پوء. پر ڪم جي معني اڳ ۾ ئي ظاهر آهي. هر شيءِ لاءِ هڪ هفتو ڏنو ويو. پر حقيقت ۾ اهو ٽن هفتن تائين رهيو. اهو هن حقيقت کي نظر ۾ رکندي آهي ته مون اهو صرف منهنجي مکيه نوڪري کان پوء ۽ هفتي جي آخر ۾ ڪيو.
هتي آئون هڪ ڀيرو ٻيهر حقيقت ڏانهن ڌيان ڏيڻ چاهيان ٿو ته صارف اڳ ۾ ئي رفتار جي ماپ سروس ۽ هارڊويئر جي استعمال تي اتفاق ڪيو، جنهن منهنجي صلاحيتن کي تمام گهڻو محدود ڪيو. بجيٽ به محدود هئي، تنهنڪري ڪا خاص خريد نه ڪئي وئي. تنهنڪري اسان کي انهن ضابطن سان راند ڪرڻو پيو.
فن تعمير ۽ ترقي
منصوبو سادو ۽ پڌرو آهي. تنهن ڪري، مان ان کي ڇڏي ڏيندس بغير ڪنهن خاص تبصرن جي.
مون پوري پروجيڪٽ کي پٿون ۾ لاڳو ڪرڻ جو فيصلو ڪيو، ان حقيقت جي باوجود ته مون کي هن ٻولي ۾ ترقي ڪرڻ جو ڪو به تجربو نه هو. مون ان کي چونڊيو ڇاڪاڻ ته اتي تيار ڪيل مثالن ۽ حلن جو هڪ گروپ هو جيڪي ترقي کي تيز ڪري سگهن ٿا. تنهن ڪري، مان سڀني پروفيشنل پروگرامرن کي چوان ٿو ته پيٿون ۾ ترقي ڪرڻ جي منهنجي پهرين تجربي کي نه ڊاڙون، ۽ مان هميشه خوش آهيان پنهنجي صلاحيتن کي بهتر بڻائڻ لاءِ تعميري تنقيد ٻڌي.
انهي عمل ۾ پڻ مون دريافت ڪيو ته پٿون جا ٻه هلندڙ ورجن 2 ۽ 3 آهن، نتيجي ۾ مان ٽئين تي آباد ٿيس.
هارڊويئر نوڊس
سنگل پليٽ vim2
مون کي هڪ واحد بورڊ ڪمپيوٽر منهنجي مکيه مشين طور ڏنو ويو vim2
سمارٽ گهر ۽ SMART-TV لاءِ هڪ بهترين، طاقتور ميڊيا پروسيسر، پر هن ڪم لاءِ انتهائي نا مناسب، يا، چئو ته، ناقص موزون. مثال طور، ان جو مکيه او ايس Android آهي، ۽ لينڪس هڪ ثانوي او ايس آهي، ۽ ان جي مطابق ڪو به لينڪس تحت سڀني نوڊس ۽ ڊرائيورن جي اعلي معيار جي آپريشن جي ضمانت نٿو ڏئي. ۽ مان سمجهان ٿو ته ڪجهه مسئلا هن پليٽ فارم جي USB ڊرائيور سان لاڳاپيل هئا، تنهنڪري موڊيمس هن بورڊ تي توقع جي مطابق ڪم نه ڪيو. ان ۾ پڻ تمام ناقص ۽ پکڙيل دستاويز آهن، تنهنڪري هر آپريشن کي ڊاکن ذريعي کوٽڻ ۾ گهڻو وقت لڳندو هو. جيتوڻيڪ GPIO سان عام ڪم تمام گهڻو رت ورتو. مثال طور، مون کي ايل اي ڊي قائم ڪرڻ ۾ ڪيترائي ڪلاڪ لڳا. پر، مقصد حاصل ڪرڻ لاء، اهو بنيادي طور تي اهم نه هو ته اهو ڪهڙي قسم جو واحد بورڊ هو، بنيادي شيء اها هئي ته اهو ڪم ڪيو ۽ USB بندرگاهن هئا.
پهرين، مون کي هن بورڊ تي لينڪس انسٽال ڪرڻ جي ضرورت آهي. هر ڪنهن لاءِ دستاويزن جي جهنگ کي نه ڇڪڻ لاءِ، ۽ انهن لاءِ جيڪي هن سنگل بورڊ سسٽم سان ڊيل ڪندا، مان هي باب لکي رهيو آهيان.
لينڪس کي انسٽال ڪرڻ لاءِ ٻه آپشن آهن: ٻاهرين SD ڪارڊ تي يا اندروني MMC تي. مون هڪ شام گذاري ته اهو معلوم ڪرڻ جي ڪوشش ڪئي ته اهو ڪارڊ سان ڪيئن ڪم ڪجي، تنهنڪري مون ان کي ايم ايم سي تي انسٽال ڪرڻ جو فيصلو ڪيو، جيتوڻيڪ بغير ڪنهن شڪ جي اهو هڪ ٻاهرين ڪارڊ سان ڪم ڪرڻ تمام آسان هوندو.
firmware جي باري ۾ هتي ڪڙي چيو. مان عجيب کان روسي ۾ ترجمو ڪريان ٿو. بورڊ کي چمڪائڻ لاء، مون کي هارڊويئر UART سان ڳنڍڻ جي ضرورت آهي. ڳنڍيو هيٺين طريقي سان.
ھن فرم ویئر کي اپلوڊ ڪرڻ لاءِ، مون کي يوٽيلٽيز جي ضرورت آھي. ان بابت وڌيڪ تفصيل هتي. مون ان کي ونڊوز جي تحت چمڪائڻ جي ڪوشش نه ڪئي آهي، پر مون کي توهان کي لينڪس تحت فرم ویئر بابت ڪجهه لفظ ٻڌائڻ گهرجن. پهرين، آئون هدايتن جي مطابق يوٽيلٽيز کي انسٽال ڪندس.
git clone https://github.com/khadas/utils
cd /path/to/utils
sudo ./INSTALL
اڙي... ڪجھ به ڪم نٿو ڪري. مون انسٽاليشن اسڪرپٽ کي ايڊٽ ڪرڻ ۾ ڪجهه ڪلاڪ گذاريا ته جيئن هر شي منهنجي لاءِ صحيح طريقي سان انسٽال ٿئي. مون کي ياد ناهي ته مون اتي ڇا ڪيو، پر اتي به اها سرڪس هئي جنهن ۾ گهوڙا هئا. تنهنڪري محتاط رهو. پر انهن افاديت کان سواءِ vim2 کي وڌيڪ تشدد ڪرڻ جو ڪو به مقصد ناهي. اھو بھتر آھي ته ھن سان ڪڏھن به گڙٻڙ نه ڪريو!
دوزخ جي ست حلقن کان پوء، اسڪرپٽ جي ترتيب ۽ تنصيب، مون کي ڪم ڪندڙ افاديت جو هڪ پيڪيج مليو. مون بورڊ کي USB ذريعي منهنجي لينڪس ڪمپيوٽر سان ڳنڍيو، ۽ مٿي ڏنل ڊراگرام مطابق UART پڻ ڳنڍيو.
مان 115200 جي رفتار لاءِ پنهنجو پسنديده مينيڪوم ٽرمينل سيٽ ڪري رهيو آهيان، هارڊويئر ۽ سافٽ ويئر جي غلطي ڪنٽرول کان سواءِ. ۽ اچو ته شروع ڪريون.
جيڪڏهن توهان کي اهو ڏکيو لڳندو آهي، ته پوء هي بورڊ استعمال نه ڪريو؛ راسبري پي بهتر آهي. ايمانداري سان.
موڊيم Huawei e3372h - 153
هي موڊيم منهنجي لاءِ رت جو هڪ اهم ذريعو هو، ۽ حقيقت ۾، اهو سڄي منصوبي جي رڪاوٽ بڻجي ويو. عام طور تي، انهن ڊوائيسز لاء نالو "موڊيم" ڪم جي جوهر کي ظاهر نٿو ڪري: هي هڪ طاقتور گڏيل آهي، هارڊويئر جي هن ٽڪرا ۾ هڪ جامع ڊيوائس آهي، جيڪو ڊرائيور کي نصب ڪرڻ لاء هڪ CD-ROM آهي، ۽ پوء نيٽ ورڪ ڪارڊ موڊ ۾ تبديل ڪري ٿو.
تعميراتي طور تي، لينڪس صارف جي نقطي نظر کان، سڀني سيٽنگن کان پوء، اهو هن طرح نظر اچي ٿو: موڊيم کي ڳنڍڻ کان پوء، مون وٽ هڪ eth* نيٽورڪ انٽرفيس آهي، جيڪو dhcp ذريعي IP پتو 192.168.8.100، ۽ ڊفالٽ گيٽ وي حاصل ڪري ٿو. 192.168.8.1 آهي.
۽ سڀ کان اهم لمحو! هي موڊيم ماڊل موڊيم موڊ ۾ ڪم نٿو ڪري سگهي، جيڪو AT حڪمن جي ذريعي سنڀاليو ويندو آهي. هر شي تمام آسان ٿي ويندي، هر موڊيم لاءِ پي پي پي ڪنيڪشن ٺاهيو ۽ پوءِ انهن سان هلايو. پر منهنجي صورت ۾، "پاڻ" (وڌيڪ صحيح طور تي، هڪ لينڪس ڊائيور udev ضابطن جي مطابق)، هڪ ايٿ انٽرفيس ٺاهي ٿو ۽ ان کي dhcp ذريعي هڪ IP پتو تفويض ڪري ٿو.
وڌيڪ مونجهاري کان بچڻ لاءِ، مان صلاح ڏيان ٿو ته لفظ ”موڊيم“ کي وسارڻ ۽ نيٽ ورڪ ڪارڊ ۽ گيٽ وي چوڻ، ڇاڪاڻ ته اصل ۾، اهو هڪ نئين نيٽ ورڪ ڪارڊ کي گيٽ وي سان ڳنڍڻ جهڙو آهي.
جڏهن هڪ موڊيم آهي، اهو ڪو خاص مسئلو ناهي، پر جڏهن هڪ کان وڌيڪ آهي، يعني n-pieces، هيٺ ڏنل نيٽ ورڪ تصوير پيدا ٿئي ٿي.
اهو آهي، نيٽ ورڪ ڪارڊ، ساڳئي IP پتي سان، هر هڪ ساڳئي ڊفالٽ گيٽ سان. پر حقيقت ۾، انهن مان هر هڪ پنهنجي آپريٽر سان ڳنڍيل آهي.
شروعات ۾، مون وٽ ھڪڙو سادو حل ھو: ifconfig يا ip ڪمانڊ استعمال ڪندي، سڀني انٽرفيس کي بند ڪريو ۽ صرف ھڪڙي کي موڙ ۾ ڦيرايو ۽ ان کي جانچيو. حل سڀني لاء سٺو هو، سواء ان جي سوئچنگ لمحن دوران آئون ڊوائيس سان ڳنڍڻ جي قابل نه هوس. ۽ جيئن ته سوئچنگ بار بار ۽ تيز آهي، مون کي اصل ۾ ڪو به موقعو نه مليو هو ڳنڍڻ جو.
تنهن ڪري، مون دستي طور تي موڊيم جي IP پتي کي تبديل ڪرڻ جو رستو چونڊيو ۽ پوء روڊننگ سيٽنگون استعمال ڪندي ٽرئفڪ کي هلائڻ.
هي موڊيمس سان منهنجي مسئلن جو خاتمو نه هو: طاقت جي مسئلن جي صورت ۾، اهي بند ٿي ويا، ۽ USB حب کي سٺي مستحڪم پاور سپلائي گهربل هئي. مون هن مسئلي کي حل ڪيو سخت سولڊرنگ ذريعي طاقت کي سڌو حب ڏانهن. هڪ ٻيو مسئلو جنهن جو مون سامنا ڪيو ۽ جنهن سڄي منصوبي کي تباهه ڪيو: ڊوائيس جي ريبوٽ يا ٿڌي شروعات کان پوء، نه سڀئي موڊيم ڳوليا ويا ۽ نه هميشه، ۽ مان اهو طئي نه ڪري سگهيو ته اهو ڇو ٿيو ۽ ڪهڙي الگورتھم سان. پر پهرين شيون پهرين.
موڊيم کي صحيح ڪم ڪرڻ لاءِ، مون انسٽال ڪيو يو ايس بي موڊ سوئچ پيڪيج.
جنهن کان پوء، ڳنڍڻ کان پوء، موڊيم صحيح طور تي معلوم ڪيو ويندو ۽ ترتيب ڏنل udev سب سسٽم طرفان. مان چيڪ ڪريان ٿو صرف موڊيم کي ڳنڍڻ ۽ پڪ ڪرڻ سان ته نيٽ ورڪ ظاهر ٿئي ٿو.
هڪ ٻيو مسئلو جيڪو مان حل نه ڪري سگهيو آهيان: مان ڪيئن حاصل ڪري سگهان ٿو آپريٽر جو نالو جنهن سان اسان ڪم ڪري رهيا آهيون هن موڊيم مان؟ آپريٽر جو نالو موڊيم ويب انٽرفيس ۾ 192.168.8.1 تي موجود آهي. هي هڪ متحرڪ ويب صفحو آهي جيڪو Ajax درخواستن ذريعي ڊيٽا حاصل ڪري ٿو، تنهنڪري صرف صفحي کي ويجٽ ڪرڻ ۽ نالو پارس ڪرڻ ڪم نه ڪندو. سو مون ڏسڻ شروع ڪيو ته ڪيئن ويب پيج ڊولپ ڪجي، وغيره، ۽ محسوس ڪيم ته مان ڪنهن قسم جي بيوقوفي ڪري رهيو آهيان. نتيجي طور، هو اسپيٽ ڪيو، ۽ آپريٽر پاڻ کي اسپيڊ ٽيسٽ API استعمال ڪندي وصول ڪرڻ شروع ڪيو.
گهڻو آسان ٿيندو جيڪڏهن موڊيم کي اي ٽي حڪمن ذريعي رسائي هجي. ان کي ٻيهر ترتيب ڏيڻ، پي پي پي ڪنيڪشن ٺاهڻ، هڪ IP تفويض ڪرڻ، ٽيليڪ آپريٽر حاصل ڪرڻ، وغيره. پر افسوس، مان ڪم ڪري رهيو آهيان جيڪو مون کي ڏنو ويو آهي.
ايس
GPS رسيور مون کي ڏنو ويو هڪ UART انٽرفيس ۽ طاقت هئي. اهو بهترين حل نه هو، پر اهو اڃا تائين قابل عمل ۽ سادو هو. رسيور ڪجهه هن طرح نظر آيو.
ايماندار ٿيڻ لاء، هي منهنجو پهريون ڀيرو هو GPS وصول ڪندڙ سان ڪم ڪري رهيو هو، پر جيئن مون کي توقع هئي، هر شيء اسان لاء گهڻو وقت اڳ سوچيو ويو هو. تنهنڪري اسان صرف تيار ڪيل حل استعمال ڪندا آهيون.
پهريون، آئون 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
اهو حڪم ظاهري طور تي اڏامي تي ديوتري کي تبديل ڪري ٿو، جيڪو تمام آسان آهي.
GPS جي تار منهنجي هٿن ۾ آهي، UART ڊيبگر تار منهنجي آڱرين هيٺان نظر اچي رهي آهي.
مان ريبوٽ ڪريان ٿو ۽ چيڪ ڪريان ٿو GPS آپريشن کي استعمال ڪندي GPSmon پروگرام.
توهان هن اسڪرين شاٽ ۾ سيٽلائيٽس کي نه ڏسي سگهو ٿا، پر توهان GPS وصول ڪندڙ سان ڪميونيڪيشن ڏسي سگهو ٿا، ۽ ان جو مطلب آهي ته سڀ ڪجهه ٺيڪ آهي.
پٿون ۾، مون هن ڊيمن سان ڪم ڪرڻ لاء ڪيترن ئي اختيارن جي ڪوشش ڪئي، پر مون هڪ تي آباد ڪيو جيڪو python 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 جي خراب استقبال ٿي سگهي ٿي ۽ هميشه ڊيٽا حاصل نه ڪري سگهي. جيڪڏھن توھان ڊيٽا حاصل ڪرڻ جو انتظار ڪريو، پوء جيڪڏھن توھان ھڪڙي ڪمري ۾ ڪم ڪريو، پروگرام ھن جاء تي منجمد ٿي ويندو. تنهن ڪري، مون هن غير مناسب اختيار تي عمل ڪيو.
اصول ۾، جيڪڏهن وڌيڪ وقت هو، اهو ممڪن آهي ته GPS کان سڌو سنئون UART ذريعي ڊيٽا حاصل ڪرڻ، ان کي الڳ موضوع ۾ پارس ڪريو ۽ ان سان گڏ ڪم ڪريو. پر اتي ڪو وقت نه هو، تنهنڪري وحشي طور تي بدصورت ڪوڊ. ۽ ها، مان شرمسار نه آهيان.
ايل ايم
LED کي ڳنڍڻ هڪ ئي وقت سادو ۽ ڏکيو هو. بنيادي مشڪل اها آهي ته سسٽم ۾ پن نمبر بورڊ تي پن نمبر سان مطابقت نٿو رکي ۽ ڇاڪاڻ ته دستاويز کاٻي هٿ سان لکيل آهي. هارڊويئر پن نمبر ۽ OS ۾ پن نمبر جي مقابلي ڪرڻ لاء، توهان کي حڪم هلائڻ جي ضرورت آهي:
gpio readall
سسٽم ۽ بورڊ تي پن خط و ڪتابت جو هڪ ٽيبل ڏيکاريو ويندو. جنهن کان پوءِ مان او ايس ۾ ئي پن کي هلائي سگھان ٿو. منهنجي صورت ۾ LED سان ڳنڍيل آهي GPIOH_5.
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"
#тут идет запись в файл логов
هتي، پڻ، هر شيء ايترو سادو نه ٿي سگهيو، جيتوڻيڪ اهو تمام سادو لڳي ها. شروعات ۾، سرور جي پيٽرولر جي برابر هئي []اهي چون ٿا، بهترين سرور چونڊيو. نتيجي طور، مون وٽ بي ترتيب سرور هئا، ۽، جيئن توهان اندازو لڳائي سگهو ٿا، متغير رفتار. هي ڪافي پيچيده موضوع آهي، هڪ مقرر ٿيل سرور استعمال ڪندي، جيڪڏهن ائين آهي، جامد يا متحرڪ، تحقيق جي ضرورت آهي. پر هتي هڪ مثال آهي رفتار جي ماپ گرافس جو هڪ بي لائن آپريٽر لاءِ جڏهن متحرڪ طور تي هڪ ٽيسٽ سرور چونڊيو ۽ هڪ مستحڪم طور تي مقرر ٿيل.
رفتار کي ماپڻ جو نتيجو جڏهن هڪ متحرڪ سرور چونڊيو.
رفتار جي جاچ جو نتيجو، ھڪڙي سختي سان چونڊيل ھڪڙي سرور سان.
جاچ دوران، اتي "فر" ٻنهي هنڌن تي آهي، ۽ ان کي رياضياتي طريقن سان هٽائڻ جي ضرورت آهي. پر هڪ مقرر ٿيل سرور سان اهو ٿورڙو گهٽ آهي ۽ طول و عرض وڌيڪ مستحڪم آهي.
عام طور تي، هي هڪ عظيم تحقيق جي جڳهه آهي. ۽ مان پنهنجي سرور جي رفتار کي ماپ ڪندس iperf يوٽيلٽي استعمال ڪندي. پر اسان ٽيڪنيڪل وضاحتن تي قائم آهيون.
ميل موڪلڻ ۽ غلطيون
ٽپال موڪلڻ لاءِ، مون ڪيترن ئي درجن مختلف آپشنز جي ڪوشش ڪئي، پر آخر ۾ مون ھيٺين تي آباد ڪيو. مون Yandex تي هڪ ميل باڪس رجسٽرڊ ڪيو ۽ پوءِ ورتو هي ميل موڪلڻ جو هڪ مثال آهي. مون ان کي چيڪ ڪيو ۽ ان کي پروگرام ۾ لاڳو ڪيو. هي مثال مختلف اختيارن کي جانچي ٿو، بشمول gmail کان موڪلڻ وغيره. مون پنهنجي ميل سرور کي ترتيب ڏيڻ سان پريشان ٿيڻ نه چاهيو ۽ ان لاءِ وقت نه هو، پر جيئن پوءِ ظاهر ٿيو ته اهو به بيڪار هو.
لاگ ان شيڊولر جي مطابق موڪليا ويا، جيڪڏهن ڪو تعلق آهي، هر 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 وغيره. ان سان گڏ، هڪ ٽيليگرام بوٽ سيٽ ڪرڻ جي قابل ٿي ۽ ان کي بلاڪ ٿيڻ سان مسئلو ناهي. تنهن ڪري، مون کي چونڊيو Amsterdam ۽ هيٺين پيراگراف.
هارڊويئر سان رابطي جي هڪ طريقي جي طور تي، vim2 چونڊيو هڪ ريورس ssh ڪنيڪشن ۽، جيئن مشق ڏيکاريو ويو آهي، اهو بهترين ناهي. جيڪڏهن ڪنيڪشن گم ٿي ويو آهي، سرور بندرگاهه رکندو آهي ۽ ڪجهه وقت تائين ان ذريعي ڳنڍڻ ناممڪن آهي. تنهن ڪري، اهو اڃا بهتر آهي ته ٻين مواصلاتي طريقن کي استعمال ڪرڻ لاء، مثال طور VPN. مستقبل ۾ مون وي پي اين تي سوئچ ڪرڻ چاهيو، پر وقت نه هو.
مان تفصيل ۾ نه ويندس فائر وال قائم ڪرڻ، حقن کي محدود ڪرڻ، روٽ ايس ايس ايس ڪنيڪشن کي غير فعال ڪرڻ ۽ وي پي ايس قائم ڪرڻ جي ٻين حقيقتن. مان يقين ڪرڻ چاهيان ٿو ته توهان اڳ ۾ ئي سڀ ڪجهه ڄاڻو ٿا. ريموٽ ڪنيڪشن لاءِ، مان سرور تي نئون يوزر ٺاهيان ٿو.
ان کان پوء آئون هارڊويئر جي منهنجي ٽيسٽ پيس ڏانهن وڃان ٿو. ۽ هارڊويئر مان پڻ لاگز ۽ ڪا به ڊيٽا ssh ذريعي منهنجي سرور ڏانهن موڪلي سگهان ٿو، جيڪو تمام آسان آهي.
اهو سڀ ڪجهه گڏ ڪرڻ
سوئچ آن، اچو ته ترقي ۽ ڊيبنگ شروع ڪريون
ڀائو، چڱو، اهو ئي آهي، مون سڀني نوڊس کي بيان ڪيو. هاڻي اهو سڀ ڪجهه گڏ ڪرڻ جو وقت آهي. توهان ڪوڊ ڏسي سگهو ٿا ھتي صحيح آھي.
ڪوڊ سان گڏ هڪ اهم نقطو: هي پروجيڪٽ هن طرح شروع نه ٿي سگھي، ڇاڪاڻ ته اهو هڪ مخصوص ڪم لاء ٺهيل هو، هڪ مخصوص فن تعمير جي. جيتوڻيڪ مان سورس ڪوڊ ڏئي رهيو آهيان، مان اڃا به تمام قيمتي شيون هتي بيان ڪندس، صحيح متن ۾، ٻي صورت ۾ اهو مڪمل طور تي سمجھ کان ٻاهر آهي.
شروع ۾، مان شروع ڪريان ٿو gps، gpio ۽ لانچ ڪريان ٿو الڳ شيڊيولر ٿريڊ.
شيڊيولر بلڪل سادو آهي: اهو ڏسڻ ۾ اچي ٿو ته پيغام موڪلڻ جو وقت اچي ويو آهي ۽ موجوده غلطي جي صورتحال ڇا آهي. جيڪڏهن ڪو مسئلو آهي پرچم، پوء اسان LED کي ڦوڪيو.
#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 سرور کي ٻيهر ترتيب ڏيڻ شامل آهي. جيئن ته ڪو به پڙهيل ناهي، ڄاڻو ته ٽرين ڪاٺ جي ريل تي سوار نه آهي. جيڪو به ڳولي ٿو ايسٽر انڊس کي ڪجهه مٺائي ملي ٿي.
جنهن کان پوء آئون هڪ لامحدود لوپ ۾ وڃان ٿو، جتي هر ڀيري اسان کي ڳنڍيل موڊيم جي هڪ فهرست ملي ٿي (ڏسو ته نيٽ ورڪ جي جوڙجڪ اوچتو تبديل ٿي وئي آهي).
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
لسٽ حاصل ڪرڻ کان پوء، مون IP پتي سڀني انٽرفيس تي مقرر ڪيو، جيئن مون موڊيم بابت باب ۾ تصوير ۾ ڏيکاريو.
هتي مان ترتيب ڏيان ٿو ssh روٽنگ هن انٽرفيس تي (جيڪڏهن اهو نه ڪيو ويو آهي)، سرور ڏانهن غلطيون موڪليو جيڪڏهن وقت اچي ويو آهي، لاگس موڪليو ۽ آخرڪار هڪ اسپيڊ ٽيسٽ هلائي ۽ لاگز کي csv فائل ۾ محفوظ ڪريو.
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()
#и далее тестируем скорость и сохраняем логи.
اهو ريورس ssh قائم ڪرڻ جي فنڪشن جو ذڪر ڪرڻ جي قابل آهي.
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
خير، هاڻي سڀ کان اهم ڳالهه اها آهي ته نتيجي ۾ ڇا ٿيو؟ هتي ڪجھ گرافس آھن جيڪي مون ترقي ۽ ڊيبگنگ جي عمل دوران پڪڙڻ ۾ مدد ڪئي. هيٺ ڏنل اسڪرپٽ سان 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"
هتي مون هڪ متحرڪ ماپنگ سرور استعمال ڪيو. رفتار جي ماپ ڪم ڪري ٿي، پر تمام گهڻو ڦيرايو، پر ڪجهه اوسط قدر اڃا به نظر اچي ٿو، ۽ اهو ڊيٽا کي فلٽر ڪندي حاصل ڪري سگهجي ٿو، مثال طور، هلندڙ اوسط سان.
بعد ۾ مون ٻين ٽيلي ڪام آپريٽرن لاءِ ڪيترائي گراف ٺاهيا. هن معاملي ۾، اتي اڳ ۾ ئي هڪ ٽيسٽ سرور هو، ۽ نتيجا به تمام دلچسپ هئا.
جئين توهان ڏسي سگهو ٿا، موضوع هن ڊيٽا جي تحقيق ۽ پروسيسنگ لاء تمام وسيع آهي، ۽ واضح طور تي ڪم جي ٻن هفتن لاء آخري نه آهي. پر…
ڪم جو نتيجو
ڪم اوچتو ئي مڪمل ڪيو ويو ڇاڪاڻ ته حالتن جي منهنجي قابو کان ٻاهر. هن پروجيڪٽ جي ڪمزورين مان هڪ، منهنجي موضوعي راءِ ۾، موڊيم هو، جيڪو حقيقت ۾ ٻين موڊيم سان گڏ ڪم ڪرڻ نه چاهيندو هو، ۽ هر ڀيري لوڊ ٿيڻ تي اهڙيون چالون ٺاهيندو هو. انهن مقصدن لاء، ٻيا موڊيم ماڊلز جي وڏي تعداد ۾ آهن؛ عام طور تي اهي اڳ ۾ ئي ميني PCI-e فارميٽ ۾ آهن ۽ ڊوائيس اندر نصب ٿيل آهن ۽ ترتيب ڏيڻ ۾ تمام آسان آهن. پر اهو هڪ مڪمل طور تي مختلف ڪهاڻي آهي. پروجيڪٽ دلچسپ هو ۽ مون کي ڏاڍي خوشي هئي ته مان ان ۾ حصو وٺڻ جي قابل ٿيس.