Санҷиши суръати ҳамзамон дар якчанд модемҳои LTE

Ҳангоми карантин ба ман пешниҳод карданд, ки дар таҳияи дастгоҳ барои чен кардани суръати модемҳои LTE барои якчанд операторони мобилӣ иштирок кунам.

Санҷиши суръати ҳамзамон дар якчанд модемҳои LTE

Муштарӣ мехост, ки суръати операторони гуногуни телекоммуникатсионӣ дар маконҳои гуногуни ҷуғрофӣ баҳо диҳад, то бифаҳмад, ки кадом оператори мобилӣ ҳангоми насби таҷҳизот бо истифода аз пайвасти LTE, масалан, барои пахши видео, барои ӯ беҳтарин аст. Дар баробари ин масъаларо харчи оддй ва арзон, бе тачхизоти гаронбахо хал кардан лозим буд.

Ман дарҳол мегӯям, ки вазифа соддатарин ва доништалаб нест; Ман ба шумо мегӯям, ки ман бо кадом мушкилот дучор шудам ва чӣ гуна онҳоро ҳал кардам. Пас, биёед.

эрод гирифтан

Андозагирии суръати пайвасти LTE як масъалаи хеле мураккаб аст: шумо бояд таҷҳизоти дуруст ва техникаи андозагириро интихоб кунед, инчунин дар бораи топология ва кори шабакаи мобилӣ фаҳмиши хуб дошта бошед. Илова бар ин, суръат метавонад аз ҷониби якчанд омилҳо таъсир расонад: шумораи муштариён дар ҳуҷайра, шароити обу ҳаво, ҳатто аз ҳуҷайра ба ячейка, суръат аз рӯи топологияи шабака метавонад ба таври назаррас фарқ кунад. Умуман, ин мушкилот бо шумораи зиёди номаълум аст ва танҳо як оператори алоқа метавонад онро дуруст ҳал кунад.

Дар аввал, муштарӣ танҳо мехост, ки хаткашонро бо телефонҳои операторҳо идора кунад, мустақиман дар телефон андозагирӣ кунад ва сипас натиҷаҳои андозагирии суръатро дар дафтар сабт кунад. Ҳалли ман барои чен кардани суръати шабакаҳои lte, гарчанде ки идеалӣ нест, мушкилотро ҳал мекунад.

Аз сабаби набудани вақт ман на ба фоидаи роҳат ё амалӣ, балки ба тарафдории суръати рушд қарор қабул кардам. Масалан, ssh баръакс барои дастрасии дурдаст, ба ҷои VPN-и бештар амалӣ, бо мақсади сарфаи вақт дар танзими сервер ва ҳар як муштарии инфиродӣ истифода мешуд.

Вазифаи техникӣ

Чунон ки дар макола гуфта шудааст Бе мушаххасоти техникӣ: чаро муштарӣ инро намехоҳад: Бе нишондодхои техникй кор накунед! Ҳеҷ гоҳ, дар ҳеҷ ҷо!

Вазифаи техникӣ хеле содда буд, ман онро барои фаҳмиши корбари ниҳоӣ каме васеъ хоҳам кард. Интихоби қарорҳои техникӣ ва таҷҳизот аз ҷониби фармоишгар дикта карда шуд. Ҳамин тариқ, худи мушаххасоти техникӣ пас аз ҳама тасдиқҳо:

Дар асоси як компютери тахтаи ягона vim2 як санҷиши суръат барои пайвастҳои lte тавассути модемҳои Huawei e3372h - 153 якчанд операторони алоқа (аз як то n). Инчунин қабул кардани координатҳо аз қабулкунаки GPS, ки тавассути UART пайваст шудааст, зарур аст. Бо истифода аз хидмат андозагирии суръатро анҷом диҳед www.speedtest.net ва онҳоро дар ҷадвал ҷойгир кунед, ба монанди:

Санҷиши суръати ҳамзамон дар якчанд модемҳои LTE

Ҷадвал дар формати csv. Пас ҳар 6 соат ин аломатро тавассути почтаи электронӣ фиристед. Дар сурати хатогиҳо, LED-ро, ки ба GPIO пайваст аст, мижа кунед.

Ман мушаххасоти техникиро дар шакли озод тавсиф кардам, пас аз тасдиқҳои зиёд. Аммо маънои вазифа аллакай намоён аст. Барои ҳама чиз як ҳафта вақт дода шуд. Аммо дар асл он се ҳафта давом кард. Ин бо назардошти он аст, ки ман ин корро танҳо баъди кори асосӣ ва рӯзҳои истироҳат анҷом додам.

Дар ин ҷо ман мехоҳам бори дигар таваҷҷӯҳро ба он ҷалб намоям, ки фармоишгар дар бораи истифодаи хидмати андозагирии суръат ва таҷҳизот, ки имкониятҳои маро хеле маҳдуд мекунад, пешакӣ розӣ шудааст. Буҷа низ маҳдуд буд, бинобар ин ҳеҷ чизи махсус харида нашуд. Аз ин рӯ, мо бояд аз рӯи ин қоидаҳо бозӣ кунем.

Меъморӣ ва рушд

Нақша оддӣ ва возеҳ аст. Аз ин рӯ, ман онро бидуни шарҳи махсус мегузорам.

Санҷиши суръати ҳамзамон дар якчанд модемҳои LTE

Ман тасмим гирифтам, ки тамоми лоиҳаро бо забони python амалӣ кунам, гарчанде ки ман таҷрибаи таҳияи ин забонро умуман надоштам. Ман онро интихоб кардам, зеро як қатор мисолҳо ва роҳҳои ҳалли омодашуда мавҷуданд, ки метавонанд рушдро суръат бахшанд. Аз ин рӯ, ман аз ҳама барномасозони касбӣ хоҳиш мекунам, ки таҷрибаи аввалини таҳияи ман дар python-ро сарзаниш накунанд ва ман ҳамеша аз шунидани интиқоди созанда барои такмили маҳорати худ шодам.

Инчунин дар ин раванд ман фаҳмидам, ки python дорои ду версияи 2 ва 3 мебошад, дар натиҷа ман дар сеюм қарор гирифтам.

Гиреҳҳои сахтафзор

Як табақи vim2

Ба ман ҳамчун мошини асосии худ як компютери якбора дода шуд vim2

Санҷиши суръати ҳамзамон дар якчанд модемҳои LTE

Протсессори олӣ ва пурқудрати медиавӣ барои хонаи интеллектуалӣ ва SMART-TV, аммо барои ин вазифа бениҳоят номувофиқ аст ё, бигӯем, хеле мувофиқ аст. Масалан, ОС-и асосии он Android аст ва Linux OS-и дуюмдараҷа аст ва мувофиқан ҳеҷ кас кори босифати ҳама гиреҳҳо ва драйверҳоро дар зери Linux кафолат намедиҳад. Ва ман фикр мекунам, ки баъзе мушкилот бо драйверҳои USB-и ин платформа алоқаманд буданд, аз ин рӯ модемҳо дар ин тахта тавре ки интизор буданд, кор намекарданд. Он инчунин ҳуҷҷатҳои хеле камбизоат ва пароканда дорад, бинобар ин ҳар як амалиёт кофтани докҳо вақти зиёдро талаб мекард. Ҳатто кори муқаррарӣ бо GPIO хуни зиёдеро гирифт. Масалан, барои насб кардани LED чанд соат лозим шуд. Аммо, барои объективӣ будан, аслан муҳим набуд, ки он чӣ гуна як тахта аст, чизи асосӣ ин буд, ки он кор мекард ва портҳои USB мавҷуданд.

Аввалан, ман бояд Linux-ро дар ин тахта насб кунам. Барои он ки ваҳшӣ аз ҳуҷҷатҳо барои ҳама ва инчунин барои онҳое, ки бо ин системаи ягона сарукор доранд, ман ин бобро менависам.

Ду имконоти насб кардани Linux вуҷуд дорад: дар корти SD беруна ё дар MMC дохилӣ. Ман як шом сарф кардам, то бифаҳмам, ки чӣ тавр онро бо корт кор кардан мумкин аст, бинобар ин ман қарор додам, ки онро дар MMC насб кунам, гарчанде ки бешубҳа кор бо корти беруна хеле осонтар хоҳад буд.

Дар бораи нармафзор дар ин чо каҷ карда гуфтаанд. Ман аз бегона ба русӣ тарҷума мекунам. Барои дурахши тахта, ман бояд сахтафзори UART-ро пайваст кунам. Онро пайваст ба таври зерин.

  • Асбоби Pin GND: <—> Pin17 аз GPIO-и VIMs
  • Асбоби Pin TXD: <—> Pin18 аз GPIO-и VIMs (Linux_Rx)
  • Асбоби Pin RXD: <—> Pin19 аз GPIO-и VIMs (Linux_Tx)
  • Асбоби Pin VCC: <—> Pin20 аз GPIO-и VIMs

Санҷиши суръати ҳамзамон дар якчанд модемҳои LTE

Пас аз он, ман нармафзори нармафзорро зеркашӣ кардам аз ин ҷо. Версияи махсуси нармафзор VIM1_Ubuntu-server-bionic_Linux-4.9_arm64_EMMC_V20191231.

Барои бор кардани ин нармафзор, ба ман утилитаҳо лозим аст. Тафсилоти бештар дар бораи ин дар ин ҷо. Ман кӯшиш накардаам, ки онро дар Windows равшан созам, аммо ман бояд ба шумо дар бораи нармафзори нармафзори Linux чанд сухан гӯям. Аввалан, ман утилитҳоро мувофиқи дастурҳо насб мекунам.

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

Ааанд... Ҳеҷ чиз кор намекунад. Ман якчанд соат скриптҳои насбкуниро таҳрир кардам, то ҳама чиз барои ман дуруст насб карда шавад. Дар ёд надорам, ки дар он ҷо чӣ кор кардам, аммо он ҷо сирк бо аспҳо низ буд. Пас эҳтиёт бошед. Аммо бе ин утилитаҳо барои шиканҷаи минбаъдаи vim2 маъно надорад. Беҳтар аст, ки бо ӯ умуман кор нашавед!

Пас аз ҳафт доираҳои ҷаҳаннам, конфигуратсияи скрипт ва насб, ман як бастаи утилитаҳои корӣ гирифтам. Ман тахтаро тавассути USB ба компютери Linux-и худ пайваст кардам ва инчунин UART-ро мувофиқи диаграммаи боло пайваст кардам.
Ман терминали миникоми дӯстдоштаи худро барои суръати 115200 бидуни назорати хатогиҳои сахтафзор ва нармафзор насб мекунам. Ва биёед оғоз кунем.

Санҷиши суръати ҳамзамон дар якчанд модемҳои LTE

Ҳангоми боркунии VIM2 дар терминали UART, ман калидеро, ба монанди панели фосиларо пахш мекунам, то боркунӣ қатъ шавад. Пас аз пайдо шудани сатр

kvim2# 

Ман фармонро ворид мекунам:

kvim2# run update

Дар мизбоне, ки мо аз он бор мекунем, ман иҷро мекунам:

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

Ҳамин аст, фуф. Ман тафтиш кардам, дар тахта Linux ҳаст. Логин/парол 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 вонамуд мекунад, ва сипас ба ҳолати корти шабака мегузарад.

Аз ҷиҳати меъморӣ, аз нуқтаи назари корбари Linux, пас аз ҳама танзимот, чунин ба назар мерасад: пас аз пайваст кардани модем, ман интерфейси шабакавии eth* дорам, ки тавассути dhcp суроғаи IP 192.168.8.100 ва шлюзи пешфарзро мегирад. 192.168.8.1 аст.

Ва муҳимтарин лаҳза! Ин модели модем дар реҷаи модем, ки бо фармонҳои AT идора карда мешавад, кор карда наметавонад. Ҳама чиз хеле соддатар мебуд, барои ҳар як модем пайвастҳои PPP эҷод кунед ва сипас бо онҳо кор кунед. Аммо дар ҳолати ман, "худ" (аниқтараш, ғаввоси Linux мувофиқи қоидаҳои udev) интерфейси eth эҷод мекунад ва тавассути dhcp ба он суроғаи IP таъин мекунад.

Барои роҳ надодан ба нофаҳмиҳои минбаъда, ман тавсия медиҳам, ки калимаи "модем" -ро фаромӯш карда, корти шабакавӣ ва шлюзро бигӯям, зеро дар асл, ин ба пайваст кардани корти нави шабакавӣ бо шлюз монанд аст.
Вақте ки як модем мавҷуд аст, ин ягон мушкилоти махсусро ба вуҷуд намеорад, аммо вақте ки зиёда аз як модем вуҷуд дорад, яъне n-порчаҳо, тасвири шабакавии зерин ба вуҷуд меояд.

Санҷиши суръати ҳамзамон дар якчанд модемҳои LTE

Яъне, n кортҳои шабакавӣ бо суроғаи IP-и якхела, ҳар яке бо як дарвозаи пешфарз. Аммо дар асл ҳар кадоми онҳо ба оператори худ пайвастанд.

Дар аввал, ман як ҳалли оддӣ доштам: бо истифода аз фармони ifconfig ё ip, ҳама интерфейсҳоро хомӯш кунед ва танҳо дар навбати худ якеро фаъол кунед ва онро санҷед. Ҳалли барои ҳама хуб буд, ба истиснои он ки дар лаҳзаҳои гузариш ман натавонистам ба дастгоҳ пайваст шавам. Ва азбаски гузариш зуд ва зуд аст, ман аслан имкони пайваст шуданро надоштам.

Аз ин рӯ, ман роҳи ба таври дастӣ иваз кардани суроғаҳои IP-и модемҳоро интихоб кардам ва сипас бо истифода аз танзимоти масир ҳаракати трафикро интихоб кардам.

Санҷиши суръати ҳамзамон дар якчанд модемҳои LTE

Ин охири мушкилоти ман бо модемҳо набуд: дар сурати мушкилоти нерӯи барқ, онҳо меафтоданд ва таъмини хуби устувори барқ ​​ба маркази USB лозим буд. Ман ин мушкилотро тавассути кафшери сахти барқ ​​​​ба марказ ҳал кардам. Мушкилоти дигаре, ки ман дучор шудам ва тамоми лоиҳаро хароб кард: пас аз бозоғозӣ ё сардии дастгоҳ, на ҳама модемҳо ошкор карда шуданд ва на ҳамеша, ва ман муайян карда наметавонистам, ки чаро ин рӯй дод ва бо кадом алгоритм. Аммо чизҳои аввал.

Барои дуруст кор кардани модем, ман бастаи usb-modeswitch насб кардам.

sudo apt update
sudo apt install -y usb-modeswitch

Пас аз он, пас аз пайвастшавӣ модем аз ҷониби зерсистемаи udev дуруст муайян ва танзим карда мешавад. Ман тавассути пайваст кардани модем ва боварӣ ҳосил кардани он, ки шабака пайдо мешавад, тафтиш мекунам.
Мушкили дигаре, ки ҳал карда натавонистам: чӣ гуна метавонам номи оператореро, ки мо бо он кор мекунем, аз ин модем гирам? Номи оператор дар веб-интерфейси модеми 192.168.8.1 мавҷуд аст. Ин як веб-саҳифаи динамикӣ аст, ки тавассути дархостҳои Ajax маълумот қабул мекунад, аз ин рӯ танҳо гузоштани саҳифа ва таҳлили ном кор намекунад. Ҳамин тавр, ман дар бораи чӣ гуна таҳия кардани веб саҳифа ва ғайра сар кардам ва фаҳмидам, ки ман як навъ сафсата карда истодаам. Дар натиҷа, ӯ туф кард ва оператор бо истифода аз худи Speedtest API ба қабул оғоз кард.

Агар модем тавассути фармонҳои AT дастрасӣ дошта бошад, хеле осонтар мебуд. Онро аз нав танзим кардан, пайвасти ppp эҷод кардан, IP таъин кардан, оператори телекоммуникатсионӣ ва ғайра имконпазир мебуд. Аммо афсӯс, ки ман бо он чизе, ки ба ман дода шудааст, кор мекунам.

GPS

Қабулкунаки GPS, ки ба ман дода шуда буд, интерфейси UART ва қудрат дошт. Ин беҳтарин роҳи ҳалли мушкилот набуд, аммо он ҳанӯз ҳам қобили кор ва оддӣ буд. Приёмник чунин менамуд.

Санҷиши суръати ҳамзамон дар якчанд модемҳои LTE

Рости гап, ин бори аввал буд, ки ман бо қабулкунаки 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

Ин фармон аз афташ 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 дар зери ангуштони ман намоёнанд.

Ман бо истифода аз барномаи gpsmon амалиёти GPS-ро аз нав оғоз мекунам ва тафтиш мекунам.

Санҷиши суръати ҳамзамон дар якчанд модемҳои LTE

Дар ин скриншот шумо моҳвораҳоро дида наметавонед, аммо шумо метавонед алоқаро бо қабулкунаки GPS бубинед ва ин маънои онро дорад, ки ҳама чиз хуб аст.

Дар python, ман вариантҳои зиёдеро барои кор бо ин демон санҷидаам, аммо ман ба он интихоб кардам, ки бо 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 ҳамзамон оддӣ ва мушкил буд. Мушкилии асосӣ дар он аст, ки рақами пин дар система ба рақами пин дар тахта мувофиқат намекунад ва азбаски ҳуҷҷатгузорӣ бо дасти чап навишта мешавад. Барои муқоисаи рақами пинҳои сахтафзор ва рақами пин дар ОС, шумо бояд фармонро иҷро кунед:

gpio readall

Ҷадвали мукотибаи пинҳо дар система ва дар тахта нишон дода мешавад. Пас аз он ман аллакай метавонам пинро дар худи ОС кор кунам. Дар ҳолати ман LED ба он пайваст аст GPIOH_5.

Санҷиши суръати ҳамзамон дар якчанд модемҳои LTE

Ман PIN 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

Ин як шодии бузург аст, ки хидмати speedtest.net дорои python-API-и худро дорад, шумо метавонед онро бубинед Github.

Чизи хуб дар он аст, ки рамзҳои манбаъ мавҷуданд, ки онҳоро низ дидан мумкин аст. Чӣ тавр бо ин API кор кардан мумкин аст (намунаҳои оддӣ) дар фасли дахлдор.

Ман китобхонаи python-ро бо фармони зерин насб мекунам.

sudo -H pip3 install speedtest-cli

Масалан, шумо ҳатто метавонед як санҷиши суръатро дар Ubuntu мустақиман аз нармафзор насб кунед. Ин ҳамон замимаи 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"
#тут идет запись в файл логов

Дар ин ҷо ҳам ҳама чиз он қадар оддӣ набуд, гарчанде ки он хеле соддатар ба назар мерасид. Дар аввал, параметри серверҳо баробар буд [], мегӯянд, беҳтарин серверро интихоб кунед. Дар натиҷа, ман серверҳои тасодуфӣ доштам ва тавре ки шумо тахмин карда метавонед, суръати тағирёбанда. Ин як мавзӯи хеле мураккаб аст, бо истифода аз сервери собит, агар ин тавр бошад, статикӣ ё динамикӣ таҳқиқотро талаб мекунад. Аммо ин ҷо як мисоли графикҳои андозагирии суръат барои оператори Beeline ҳангоми интихоби динамикӣ сервери санҷишӣ ва сервери статикӣ мебошад.

Санҷиши суръати ҳамзамон дар якчанд модемҳои LTE
Натиҷаи ченкунии суръат ҳангоми интихоби сервери динамикӣ.

Санҷиши суръати ҳамзамон дар якчанд модемҳои LTE
Натиҷаи санҷиши суръат, бо як сервер ба таври қатъӣ интихобшуда.

Дар вакти санчиш дар хар ду чой «курку» мавчуд аст ва онро бо усулхои математики тоза кардан лозим аст. Аммо бо сервери собит он каме камтар аст ва амплитуда устувортар аст.
Умуман, ин макони тадкикоти калон аст. Ва ман суръати сервери худро бо истифода аз утилитаи iperf чен мекардам. Аммо мо ба нишондодҳои техникӣ риоя мекунем.

Ирсоли почта ва хатогиҳо

Барои фиристодани почта, ман даҳҳо вариантҳои гуногунро санҷидам, аммо дар ниҳоят ман дар бораи зерин қарор гирифтам. Ман як қуттии почтаро дар Яндекс сабт кардам ва сипас гирифтам Ин як мисоли фиристодани почта аст. Ман онро санҷида, онро дар барнома татбиқ кардам. Ин мисол вариантҳои гуногунро, аз ҷумла ирсол аз 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 дар хотир доред.

Сервери бозгашт

Барои дастрасӣ ба як пораи сахтафзори дурдаст ва тавони танзим ва аз нав танзим кардани он, ба ман сервери беруна лозим буд. Умуман, аз рӯи адолат, дуруст мебуд, ки ҳама маълумотро ба сервер фиристед ва ҳама графикҳои зеборо дар интерфейси веб созед. Аммо на ҳама якбора.

Барои VPS ман интихоб кардам ruvds.com. Шумо метавонед сервери соддатаринро гиред. Ва умуман, барои мақсадҳои ман ин кофӣ хоҳад буд. Аммо азбаски ман барои сервер аз ҷайби худ пардохт накардаам, ман қарор додам, ки онро бо захираи хурд гирам, то ки агар мо интерфейси веб, сервери SMTP, VPN ва ғайраро ҷойгир кунем, кофӣ хоҳад буд. Илова бар ин, тавонед боти Telegram-ро насб кунед ва бо баста шудани он мушкилот надоред. Аз ин рӯ, ман Амстердам ва параметрҳои зеринро интихоб кардам.

Санҷиши суръати ҳамзамон дар якчанд модемҳои 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 диққат диҳед: он муайян мекунад, ки ман кадом портро барои пайвастшавӣ тавассути ssh баръакс истифода хоҳам кард. Онро ба оғозёбӣ илова кунед ва оғоз кунед.

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)

Қисми душвортарини ин лоиҳа нигоҳ доштани пайвасти баръакси ssh барои ҳар як санҷиш мебошад. Ҳар як санҷиш аз нав танзим кардани шлюзи пешфарз ва сервери 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()
#и далее тестируем скорость и сохраняем логи. 

Бояд қайд кард, ки функсияи танзими 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

Ва ман дар он менависам:

[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

Манбаъ: will.com

Илова Эзоҳ