په څو LTE موډیمونو کې یوځل سرعت ازموینه

د قرنطین په جریان کې ، ما ته وړاندیز شوی و چې د څو سیلولر آپریټرانو لپاره د LTE موډیمونو سرعت اندازه کولو لپاره د وسیلې په پراختیا کې برخه واخلم.

په څو LTE موډیمونو کې یوځل سرعت ازموینه

پیرودونکي غوښتل چې په مختلف جغرافیایی موقعیتونو کې د مختلف مخابراتي آپریټرانو سرعت ارزونه وکړي ترڅو پوه شي چې کوم ګرځنده آپریټر د هغه لپاره خورا غوره و کله چې د LTE اتصال په کارولو سره تجهیزات نصب کول ، د مثال په توګه ، د ویډیو نشراتو لپاره. په ورته وخت کې، ستونزه باید د ګران تجهیزاتو پرته، د امکان تر حده په ساده او ارزانه توګه حل شي.

زه به سمدلاسه ووایم چې دنده ترټولو ساده او خورا پوهه نه ده؛ زه به تاسو ته ووایم چې زه له کومې ستونزې سره مخ شوی یم او څنګه یې حل کړم. نو، راځئ چې لاړ شو.

تبصره

د LTE اتصال سرعت اندازه کول خورا پیچلي مسله ده: تاسو اړتیا لرئ د سم تجهیزاتو او اندازه کولو تخنیک غوره کړئ ، او همدارنګه د سیلولر شبکې ټوپولوژي او عملیاتو ښه پوهه ولرئ. برسیره پردې، سرعت د ډیری فکتورونو لخوا اغیزمن کیدی شي: په حجره کې د پیرودونکو شمیر، د هوا شرایط، حتی د حجرې څخه تر حجرې پورې سرعت کولی شي د شبکې ټوپولوژي له امله په ډراماتیک ډول توپیر ولري. په عموم کې، دا د ډیری نامعلومو سره ستونزه ده، او یوازې د مخابراتو آپریټر کولی شي دا په سمه توګه حل کړي.

په پیل کې، پیرودونکي یوازې غوښتل چې کوریر د آپریټرانو تلیفونونو سره ودروي، په مستقیم ډول په تلیفون کې اندازه واخلي او بیا د سرعت اندازه کولو پایلې په نوټ بوک کې ولیکي. د Lte شبکو سرعت اندازه کولو لپاره زما حل، که څه هم مثالی نه دی، ستونزه حل کوي.

د وخت د کمښت له امله ما پریکړه د اسانتیا یا عملي کولو په ګټه نه بلکې د پرمختګ د سرعت په ګټه وکړه. د مثال په توګه، ریورس ssh د ریموټ لاسرسي لپاره کارول کیده، د ډیر عملي VPN پرځای، د سرور او هر انفرادي پیرودونکي په ترتیب کولو کې د وخت خوندي کولو لپاره.

تخنیکي دنده

لکه څنګه چې په مقاله کې ویل شوي د تخنیکي مشخصاتو پرته: ولې پیرودونکي دا نه غواړي: د تخنیکي مشخصاتو پرته کار مه کوئ! هيڅکله، هر ځای!

تخنیکي دنده خورا ساده وه، زه به یې د پای کارونکي د پوهیدو لپاره یو څه پراخ کړم. د تخنیکي حلونو او تجهیزاتو انتخاب د پیرودونکي لخوا ټاکل شوی. نو، تخنیکي مشخصات پخپله، د ټولو تصویبونو وروسته:

د واحد بورډ کمپیوټر پر بنسټ vim2 د H موډیمونو له لارې د lte اړیکو لپاره د سرعت ټیسټر جوړ کړئuawei e3372h - 153 څو مخابراتي آپریټرونه (له یو څخه تر n). دا هم اړینه ده چې د UART له لارې د GPS اخیستونکي څخه همغږي ترلاسه کړئ. د خدمت په کارولو سره د سرعت اندازه کول www.speedtest.net او په میز کې یې داسې واچوئ:

په څو LTE موډیمونو کې یوځل سرعت ازموینه

جدول په csv بڼه. بیا دا نښه په هر 6 ساعتونو کې د بریښنالیک له لارې واستوئ. د غلطیو په صورت کې، LED ړنګ کړئ چې د GPIO سره وصل دی.

ما تخنیکي مشخصات په وړیا بڼه کې تشریح کړل، د ډیرو تصویبونو وروسته. مګر د کار معنی لا دمخه ښکاره ده. د هر څه لپاره یوه اونۍ ورکړل شوه. مګر په حقیقت کې دا درې اونۍ دوام وکړ. دا حقیقت په پام کې نیسي چې ما دا یوازې زما د اصلي دندې وروسته او د اونۍ په پای کې ترسره کړ.

دلته زه غواړم یو ځل بیا دې حقیقت ته متوجه شم چې پیرودونکي د سرعت اندازه کولو خدمت او هارډویر کارولو دمخه موافقه کړې ، کوم چې زما وړتیاوې خورا محدودې کړې. بودیجه هم محدوده وه، نو کوم ځانګړی نه و. نو موږ باید د دې قواعدو سره لوبې وکړو.

معماري او پراختیا

سکیم ساده او څرګند دی. له همدې امله، زه به دا پرته له کوم ځانګړي تبصرې پریږدم.

په څو LTE موډیمونو کې یوځل سرعت ازموینه

ما پریکړه وکړه چې ټوله پروژه په python کې پلي کړم، سره له دې چې ما په دې ژبه کې د ودې تجربه نه درلوده. ما دا غوره کړه ځکه چې دلته یو شمیر چمتو شوي مثالونه او حلونه شتون لري چې کولی شي پرمختګ ګړندی کړي. له همدې امله، زه له ټولو مسلکي پروګرام کونکو څخه غوښتنه کوم چې په python کې د پراختیا زما لومړۍ تجربه و نه وهي، او زه تل خوشحاله یم چې زما د مهارتونو د ښه کولو لپاره رغنده نیوکې واورم.

همدارنګه په پروسه کې ما وموندله چې python دوه چلونکي نسخې 2 او 3 لري، د پایلې په توګه زه په دریم کې میشته شوم.

د هارډویر نوډونه

واحد پلیټ vim2

ما ته زما د اصلي ماشین په توګه یو واحد بورډ کمپیوټر راکړل شو vim2

په څو LTE موډیمونو کې یوځل سرعت ازموینه

د سمارټ کور او SMART-TV لپاره یو عالي ، ځواکمن میډیا پروسیسر ، مګر د دې دندې لپاره خورا مناسب نه دی ، یا راځئ چې ووایو ، ضعیف مناسب. د مثال په توګه، د دې اصلي OS Android دی، او لینکس یو ثانوي OS دی، او په دې اساس هیڅوک د لینکس لاندې د ټولو نوډونو او چلوونکو د لوړ کیفیت عملیات تضمین نه کوي. او زه ګومان کوم چې ځینې ستونزې د دې پلیټ فارم USB ډرایورانو پورې اړوند وې ، نو موډیمونه لکه څنګه چې تمه کیده پدې بورډ کې کار نه کوي. دا خورا ضعیف او ویشل شوي اسناد هم لري، نو هر عملیات د ډاکونو په کیندلو کې ډیر وخت نیولی. حتی د GPIO سره عادي کار ډیره وینه واخیستله. د مثال په توګه، ما د LED تنظیم کولو لپاره څو ساعته وخت واخیست. مګر، د هدف لپاره، دا اساسا مهمه نده چې دا کوم ډول واحد بورډ دی، اصلي خبره دا وه چې دا کار کاوه او د USB بندرونه شتون درلود.

لومړی، زه اړتیا لرم چې په دې بورډ کې لینکس نصب کړم. د دې لپاره چې د هرچا لپاره د اسنادو ځنګلونه ونه غورځول شي، او د هغو کسانو لپاره چې د دې واحد بورډ سیسټم سره معامله کوي، زه دا فصل لیکم.

د لینکس نصبولو لپاره دوه اختیارونه شتون لري: په بهرني SD کارت کې یا په داخلي MMC کې. ما یو ماښام تیر کړ ترڅو معلومه کړم چې دا څنګه د کارت سره کار کوي، نو ما پریکړه وکړه چې دا په MMC کې نصب کړم، که څه هم له شک پرته دا به د بهرني کارت سره کار کول خورا اسانه وي.

د فرم ویئر په اړه دلته په کرکه سره وویل. زه له عجیب څخه روسی ته ژباړم. د بورډ فلش کولو لپاره، زه اړتیا لرم چې هارډویر UART وصل کړم. وصل کړه په لاندې ډول.

  • د وسیلې پن GND: <—> د VIMs GPIO Pin17
  • د وسیلې پن TXD: <—> د VIMs GPIO (Linux_Rx) Pin18
  • اوزار پن RXD: <—> د VIMs GPIO (لینکس_Tx) Pin19
  • اوزار پن VCC: <—> د VIMs GPIO Pin20

په څو 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 ښکارندوی کوي ، او بیا د شبکې کارت حالت ته ځي.

په معمارۍ کې ، د لینکس کارونکي له نظره ، د ټولو تنظیماتو وروسته ، دا داسې ښکاري: د موډیم سره وصل کولو وروسته ، زه د eth * شبکې انٹرفیس لرم ، کوم چې د dhcp له لارې IP پته 192.168.8.100 ترلاسه کوي ، او ډیفالټ ګیټس 192.168.8.1 دی.

او ترټولو مهمه شیبه! دا موډیم ماډل نشي کولی په موډیم حالت کې کار وکړي، کوم چې د AT کمانډونو لخوا کنټرول کیږي. هر څه به ډیر ساده وي، د هر موډیم لپاره د PPP اتصالونه رامینځته کړئ او بیا د دوی سره کار وکړئ. مګر زما په قضیه کې، "ځان" (په دقیق ډول، د یوډیف قواعدو سره سم د لینکس ډیور)، د eth انٹرفیس رامینځته کوي او د dhcp له لارې ورته IP پته ورکوي.

د نور ګډوډۍ مخنیوي لپاره ، زه وړاندیز کوم چې د "موډیم" کلمه هیر کړئ او د شبکې کارت او ګیټ وے ووایاست ، ځکه چې په حقیقت کې دا د دروازې سره د نوي شبکې کارت وصل کولو په څیر دی.
کله چې یو موډیم وي، دا کومه ځانګړې ستونزه نه رامنځته کوي، مګر کله چې له یو څخه زیات وي، یعنې n-pieces، د شبکې لاندې انځور رامنځته کیږي.

په څو LTE موډیمونو کې یوځل سرعت ازموینه

دا دی، د شبکې کارتونه، د ورته IP پتې سره، هر یو د ورته ډیفالټ دروازې سره. مګر په حقیقت کې، هر یو یې د خپل آپریټر سره تړلی دی.

په پیل کې ، ما یو ساده حل درلود: د ifconfig یا ip کمانډ په کارولو سره ، ټول انٹرفیسونه بند کړئ او په ساده ډول یو په بدل کې وګرځئ او ازموینه یې کړئ. حل د هرچا لپاره ښه و ، پرته لدې چې د سویچ کولو شیبو په جریان کې زه نشم کولی د وسیلې سره وصل شم. او له هغه ځایه چې سویچ کول مکرر او ګړندي دي ، ما واقعیا هیڅ فرصت نه درلود چې وصل شم.

له همدې امله ، ما په لاسي ډول د موډیمونو IP پتې بدلولو او بیا د روټینګ ترتیباتو په کارولو سره د ترافیک چلولو لاره غوره کړه.

په څو LTE موډیمونو کې یوځل سرعت ازموینه

دا د موډیمونو سره زما د ستونزو پای نه و: د بریښنا د ستونزو په صورت کې، دوی راوتلي، او د USB مرکز ته د بریښنا ښه ثبات ته اړتیا وه. ما دا ستونزه په مستقیم ډول مرکز ته د بریښنا سخت سولډر کولو سره حل کړه. بله ستونزه چې زه ورسره مخ شوم او ټوله پروژه یې ویجاړه کړه: د وسیلې له ریبوټ یا سړه پیل وروسته ، نه ټول موډیمونه کشف شوي او نه تل ، او زه نشم کولی دا معلومه کړم چې دا ولې پیښ شوي او د کوم الګوریتم لخوا. مګر لومړی شیان لومړی.

د دې لپاره چې موډیم په سمه توګه کار وکړي، ما د USB-modeswitch کڅوړه نصب کړه.

sudo apt update
sudo apt install -y usb-modeswitch

له هغې وروسته، د نښلولو وروسته، موډیم به په سمه توګه د udev فرعي سیسټم لخوا کشف او تنظیم شي. زه په ساده ډول د موډیم سره وصل کولو او ډاډ ترلاسه کولو سره ګورم چې شبکه ښکاري.
بله ستونزه چې زه یې حل نشم کولی: څنګه کولی شم د هغه آپریټر نوم ترلاسه کړم چې موږ یې له دې موډیم سره کار کوو؟ د آپریټر نوم په موډیم ویب انٹرفیس کې په 192.168.8.1 کې شتون لري. دا یو متحرک ویب پاڼه ده چې د Ajax غوښتنو له لارې ډاټا ترلاسه کوي، نو په ساده ډول د پاڼې ویجیټ کول او د نوم تمثیل به کار ونکړي. نو ما په دې لټه کې پیل وکړ چې څنګه د ویب پاڼې پراختیا، او داسې نور، او پوه شوم چې زه یو ډول بې ځایه کار کوم. د پایلې په توګه، هغه سپک کړ، او آپریټر پخپله د سپیډ ټیسټ API په کارولو سره ترلاسه کول پیل کړل.

ډیر به اسانه وي که موډیم د AT کمانډونو له لارې لاسرسی ولري. دا به ممکنه وي چې دا بیا تنظیم کړئ، د پی پی پی اتصال رامینځته کړئ، IP وټاکئ، د مخابراتو آپریټر ترلاسه کړئ، او داسې نور. مګر افسوس، زه د هغه څه سره کار کوم چې ماته راکړل شوي دي.

جي پي ايس

د GPS ریسیور چې ما ته ورکړل شوی و د UART انٹرفیس او ځواک درلود. دا غوره حل نه و، مګر دا لاهم د کار وړ او ساده و. رسیور یو څه داسې ښکاري.

په څو LTE موډیمونو کې یوځل سرعت ازموینه

د ریښتیني کیدو لپاره ، دا زما لومړی ځل و چې د GPS ریسیور سره کار کول ، مګر لکه څنګه چې ما تمه درلوده ، هرڅه دمخه زموږ لپاره فکر شوی و. نو موږ یوازې چمتو شوي حلونه کاروو.

لومړی، زه د GPS سره نښلولو لپاره uart_AO_B (UART_RX_AO_B، UART_TX_AO_B) فعال کړم.

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

وروسته زه د عملیاتو بریالیتوب وګورم.

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

دا قومانده په ښکاره ډول په الوتنه کې devtree ایډیټ کوي، کوم چې خورا اسانه دی.

د دې عملیاتو بریالیتوب وروسته، د 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 ډیبګر تارونه زما د ګوتو لاندې لیدل کیږي.

زه د جی پی ایسمون برنامه په کارولو سره د GPS عملیات ریبوټ او چیک کوم.

په څو LTE موډیمونو کې یوځل سرعت ازموینه

تاسو پدې سکرین شاټ کې سپوږمکۍ نشئ لیدلی ، مګر تاسو کولی شئ د 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 له لارې ډاټا ترلاسه کړئ، دا په جلا تار کې تحلیل کړئ او د هغې سره کار وکړئ. مګر هیڅ وخت نه و، له همدې امله د وحشیانه بدمرغه کوډ. او هو، زه نه شرمیږم.

د ر Lightا ایټمیټ ډایډونه

د LED نښلول په ورته وخت کې ساده او ستونزمن وو. اصلي مشکل دا دی چې په سیسټم کې د پن نمبر په تخته کې د پن نمبر سره مطابقت نلري او ځکه چې اسناد په کیڼ لاس لیکل کیږي. په OS کې د هارډویر پن نمبر او پن نمبر پرتله کولو لپاره ، تاسو اړتیا لرئ کمانډ چل کړئ:

gpio readall

په سیسټم او تخته کې د پن لیکونو جدول به ښودل شي. له هغې وروسته زه کولی شم پخپله په OS کې پن چلولی شم. زما په قضیه کې LED سره وصل دی 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() ته زنګ ووهلم او LED به په ښکلي ډول روښانه شي.

د سافټویر نوډونه

د چټکتیا API

دا د خوښۍ ځای دی چې د speedtest.net خدمت خپل python-API لري، تاسو کولی شئ وګورئ Github.

ښه خبره دا ده چې د سرچینې کوډونه شتون لري چې هم لیدل کیدی شي. د دې API سره څنګه کار کول (ساده مثالونه) په کې موندل کیدی شي اړونده برخه.

زه د لاندې کمانډ سره د python کتابتون نصب کړم.

sudo -H pip3 install speedtest-cli

د مثال په توګه ، تاسو حتی کولی شئ د سافټویر څخه مستقیم په اوبنټو کې د سرعت ټیسټر نصب کړئ. دا ورته python غوښتنلیک دی، کوم چې بیا مستقیم د کنسول څخه پیل کیدی شي.

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"
#тут идет запись в файл логов

دلته هم، هر څه دومره ساده نه دي، که څه هم دا به ډیر ساده ښکاري. په پیل کې، د سرور پیرامیټر مساوي و []، دوی وايي، غوره سرور غوره کړئ. د پایلې په توګه، ما تصادفي سرورونه درلودل، او لکه څنګه چې تاسو اټکل کولی شئ، متغیر سرعت. دا خورا پیچلې موضوع ده، د ثابت سرور په کارولو سره، که داسې وي، جامد یا متحرک، څیړنې ته اړتیا لري. مګر دلته د بیلین آپریټر لپاره د سرعت اندازه کولو ګرافونو مثال دی کله چې په متحرک ډول د ټیسټ سرور غوره کول او په ثابت ډول ثابت شوی.

په څو 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]

زموږ په هارډویر کې ، زه په هر بوټ کې د اتوماتیک ریورس ایس ایس ایس اتصال رامینځته کوم.

[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()

مهالویش خورا ساده دی: دا ګوري چې ایا د پیغامونو لیږلو وخت راغلی او د اوسني خطا وضعیت څه دی. که چیرې د غلطۍ بیرغ شتون ولري ، نو موږ 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 سرور بیا تنظیم کول شامل دي. ځکه چې هیڅوک هم نه لوستل کیږي، پوه شئ چې اورګاډي د لرګیو په ریلونو نه تیریږي. څوک چې د ایسټر هګۍ ومومي یو څه شیدې ترلاسه کوي.

د دې کولو لپاره، زه یو جلا روټینګ جدول جوړوم -set-mark 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

د لیست ترلاسه کولو وروسته ، ما ټولو انٹرفیسونو ته IP پتې تنظیم کړې ، لکه څنګه چې ما د موډیم په اړه فصل کې عکس کې ښودلی.

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 روټینګ تنظیم کړم (که دا نه وي شوی) ، سرور ته غلطۍ واستوئ که وخت راغلی وي ، لاګونه واستوئ او په نهایت کې د سرعت ټیسټ چل کړئ او لاګونه په 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()
#и далее тестируем скорость и сохраняем логи. 

دا د ریورس ایس ایس ایس ترتیب کولو فعالیت د یادولو وړ دی.

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 موډیمونو کې یوځل سرعت ازموینه

لکه څنګه چې تاسو لیدلی شئ، موضوع د دې معلوماتو د څیړنې او پروسس کولو لپاره خورا پراخه ده، او په ښکاره توګه د څو اونیو کار لپاره دوام نه کوي. خو…

د کار پایله

کار زما د کنټرول څخه بهر د شرایطو له امله په ناڅاپي توګه بشپړ شو. د دې پروژې یو ضعف ، زما د موضوعي نظر له مخې ، موډیم و ، کوم چې واقعیا نه غوښتل د نورو موډیمونو سره یوځای کار وکړي ، او هرکله چې بار شوی وي ورته چلونه رامینځته کړي. د دې موخو لپاره، ډیری نور موډیم ماډلونه شتون لري؛ معمولا دا د مینی PCI-e بڼه کې دي او په وسیله کې نصب شوي او تنظیم کول خورا اسانه دي. مګر دا په بشپړه توګه مختلف کیسه ده. پروژه په زړه پورې وه او زه ډیر خوښ وم چې ما پدې کې برخه اخیستې وه.

په څو LTE موډیمونو کې یوځل سرعت ازموینه

سرچینه: www.habr.com

Add a comment