Dungan nga speedtest sa daghang LTE modem

Atol sa quarantine, gitanyagan ko nga moapil sa paghimo og device para sa pagsukod sa gikusgon sa LTE modem para sa daghang cellular operators.

Dungan nga speedtest sa daghang LTE modem

Gusto sa kustomer nga susihon ang katulin sa lainlaing mga operator sa telecom sa lainlaing mga lokasyon sa heyograpiya aron mahibal-an kung unsang cellular operator ang labing kamalaumon alang kaniya sa pag-instalar sa mga kagamitan gamit ang koneksyon sa LTE, pananglitan, alang sa mga sibya sa video. Sa samang higayon, ang problema kinahanglang sulbaron sa yano ug barato kutob sa mahimo, nga walay mahal nga kagamitan.

Isulti ko dayon nga ang buluhaton dili ang pinakasimple ug labing kusog sa kahibalo; Isulti ko kanimo kung unsang mga problema ang akong nasugatan ug giunsa nako kini pagsulbad. So, adto ta.

Примечание

Ang pagsukod sa katulin sa usa ka koneksyon sa LTE usa ka komplikado kaayo nga butang: kinahanglan nimo nga pilion ang husto nga kagamitan ug pamaagi sa pagsukod, ug adunay maayo usab nga pagsabut sa topology ug operasyon sa cellular network. Dugang pa, ang katulin mahimong maimpluwensyahan sa daghang mga hinungdan: ang gidaghanon sa mga subscriber sa usa ka cell, kahimtang sa panahon, bisan gikan sa cell hangtod sa cell ang katulin mahimong magkalainlain tungod sa topology sa network. Sa kinatibuk-an, kini usa ka problema sa daghang mga wala mailhi, ug usa ra ka operator sa telecom ang makasulbad niini sa husto.

Sa sinugdan, gusto lang sa kustomer nga magmaneho sa courier gamit ang mga telepono sa operator, direkta nga magsukod sa telepono ug dayon isulat ang mga resulta sa pagsukod sa katulin sa usa ka notebook. Ang akong solusyon sa pagsukod sa katulin sa mga network sa lte, bisan kung dili maayo, makasulbad sa problema.

Tungod sa kakulang sa panahon, naghimo ako og mga desisyon dili pabor sa kasayon ​​o praktikal, apan pabor sa katulin sa kalamboan. Pananglitan, ang reverse ssh gigamit alang sa hilit nga pag-access, imbes sa mas praktikal nga VPN, aron makadaginot sa oras sa pag-set up sa server ug sa matag indibidwal nga kliyente.

Teknikal nga buluhaton

Ingon sa gipahayag sa artikulo Kung walay teknikal nga mga detalye: nganong dili gusto kini sa kliyente: Ayaw pagtrabaho nga walay teknikal nga mga detalye! Dili gayud, bisan asa!

Ang teknikal nga buluhaton kay yano ra, akong palapdan kini og gamay para sa pagsabot sa end user. Ang pagpili sa mga teknikal nga solusyon ug kagamitan gidikta sa kustomer. Mao nga, ang teknikal nga detalye mismo, pagkahuman sa tanan nga pag-apruba:

Gibase sa usa ka board computer vim2 paghimo ug speed tester para sa lte connections pinaagi sa H modemuawei e3372h - 153 daghang mga operator sa telecom (gikan sa usa hangtod n). Kinahanglan usab nga makadawat mga coordinate gikan sa usa ka GPS receiver nga konektado pinaagi sa UART. Paghimo mga sukod sa katulin gamit ang serbisyo www.speedtest.net ug ibutang sila sa usa ka lamesa sama sa:

Dungan nga speedtest sa daghang LTE modem

Talaan sa csv format. Dayon ipadala kini nga karatula pinaagi sa e-mail matag 6 ka oras. Kung adunay mga sayup, i-blink ang LED nga konektado sa GPIO.

Gihubit nako ang teknikal nga mga detalye sa libre nga porma, pagkahuman sa daghang mga pag-apruba. Apan ang kahulogan sa buluhaton makita na. Usa ka semana ang gihatag sa tanan. Apan sa pagkatinuod milungtad kini ug tulo ka semana. Giisip niini ang kamatuoran nga gibuhat ko kini pagkahuman sa akong panguna nga trabaho ug sa katapusan sa semana.

Dinhi gusto nako nga ipunting pag-usab ang atensyon sa kamatuoran nga ang kustomer miuyon daan sa paggamit sa serbisyo sa pagsukod sa tulin ug hardware, nga limitado kaayo ang akong mga kapabilidad. Limitado usab ang badyet, busa walay espesyal nga gipalit. Mao nga kinahanglan namon nga magdula sa kini nga mga lagda.

Arkitektura ug kalamboan

Ang laraw yano ug klaro. Busa, ibilin ko kini nga walay bisan unsang espesyal nga mga komento.

Dungan nga speedtest sa daghang LTE modem

Nakahukom ko nga ipatuman ang tibuok nga proyekto sa python, bisan pa sa kamatuoran nga wala koy kasinatian sa pagpalambo niini nga pinulongan. Gipili nako kini tungod kay adunay daghang mga andam nga mga pananglitan ug mga solusyon nga makapadali sa pag-uswag. Busa, gihangyo ko ang tanan nga propesyonal nga mga programmer nga dili kasab-an ang akong una nga kasinatian sa pag-develop sa python, ug kanunay akong nalipay nga makadungog sa makaayo nga pagsaway aron mapauswag ang akong kahanas.

Usab sa proseso nahibal-an nako nga ang python adunay duha nga nagdagan nga bersyon 2 ug 3, ingon usa ka sangputanan nahusay nako ang ikatulo.

Mga node sa hardware

Single-plate nga vim2

Gihatagan kog single-board computer isip akong main machine vim2

Dungan nga speedtest sa daghang LTE modem

Usa ka maayo kaayo, kusgan nga processor sa media alang sa usa ka intelihente nga balay ug SMART-TV, apan dili kaayo angay alang niini nga buluhaton, o, ingnon ta, dili maayo nga angay. Pananglitan, ang nag-unang OS niini mao ang Android, ug ang Linux usa ka sekondaryang OS, ug busa walay usa nga naggarantiya sa taas nga kalidad nga operasyon sa tanan nga mga node ug mga drayber ubos sa Linux. Ug gihunahuna ko nga ang pipila sa mga problema adunay kalabotan sa mga USB driver sa kini nga plataporma, mao nga ang mga modem wala molihok sama sa gipaabut sa kini nga board. Adunay usab kini kabus ug nagkatag nga dokumentasyon, mao nga ang matag operasyon nagkinahanglag daghang oras sa pagkalot sa mga pantalan. Bisan ang ordinaryong trabaho sa GPIO mikuha ug daghang dugo. Pananglitan, nagkinahanglan ko og pipila ka oras sa pag-set up sa LED. Apan, aron mahimong katuyoan, dili hinungdanon kung unsang klase nga single-board kini, ang panguna nga butang mao nga kini nagtrabaho ug adunay mga USB port.

Una, kinahanglan nako nga i-install ang Linux sa kini nga board. Aron dili masusi ang mga ihalas nga dokumentasyon alang sa tanan, ug alang usab sa mga mag-atubang niining single-board system, gisulat ko kini nga kapitulo.

Adunay duha ka kapilian sa pag-install sa Linux: sa usa ka eksternal nga SD card o sa usa ka internal nga MMC. Gigugol nako ang usa ka gabii nga naningkamot nga mahibal-an kung giunsa kini magamit sa kard, mao nga nakahukom ako nga i-install kini sa MMC, bisan kung wala’y pagduha-duha nga labi kadali nga magtrabaho sa usa ka eksternal nga kard.

Mahitungod sa firmware hiwi nga gisulti dinhi. Naghubad ko gikan sa katingad-an sa Russian. Aron ma-flash ang board, kinahanglan nako nga ikonektar ang hardware UART. Gikonektar kini sa mosunod nga paagi.

  • Tool Pin GND: <—> Pin17 sa VIM's GPIO
  • Tool Pin TXD: <—> Pin18 sa VIM's GPIO (Linux_Rx)
  • Tool Pin RXD: <—> Pin19 sa VIM's GPIO (Linux_Tx)
  • Tool Pin VCC: <—> Pin20 sa VIM's GPIO

Dungan nga speedtest sa daghang LTE modem

Pagkahuman, gi-download nako ang firmware gikan dinhi. Piho nga bersyon sa firmware VIM1_Ubuntu-server-bionic_Linux-4.9_arm64_EMMC_V20191231.

Aron ma-upload kini nga firmware, kinahanglan nako ang mga utilities. Dugang detalye bahin niini dinhi. Wala pa nako gisulayan ang pag-flash niini sa ilawom sa Windows, apan kinahanglan nako isulti kanimo ang pipila ka mga pulong bahin sa firmware sa ilawom sa Linux. Una, akong i-install ang mga utilities sumala sa mga instruksyon.

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

Aaand... Wala'y mahimo. Gigugol nako ang pipila ka oras sa pag-edit sa mga script sa pag-install aron ang tanan ma-install sa husto alang kanako. Wala ko mahinumdom kung unsa ang akong gibuhat didto, apan adunay usab nga sirkos nga adunay mga kabayo. Busa pagbantay. Apan kung wala kini nga mga gamit wala’y kapuslanan sa pagsakit pa sa vim2. Mas maayo nga dili na lang siya manghilabot!

Human sa pito ka mga lingin sa impyerno, script configuration ug instalar, nakadawat ko og usa ka pakete sa nagtrabaho utilities. Gikonektar nako ang board pinaagi sa USB sa akong Linux nga kompyuter, ug gikonektar usab ang UART sumala sa dayagram sa ibabaw.
Gipahimutang nako ang akong paborito nga minicom terminal sa gikusgon nga 115200, nga walay kontrol sa error sa hardware ug software. Ug magsugod na ta.

Dungan nga speedtest sa daghang LTE modem

Kung nagkarga sa VIM2 sa terminal sa UART, gipugos nako ang usa ka yawe, sama sa spacebar, aron mahunong ang pagkarga. Human makita ang linya

kvim2# 

Gisulod nako ang sugo:

kvim2# run update

Sa host diin kami nagkarga, akong gipatuman:

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

Mao ra, phew. Akong gisusi, naay Linux sa board. Login/password khadas:khadas.

Human niana, pipila ka menor de edad nga inisyal nga mga setting. Alang sa dugang nga trabaho, akong gi-disable ang password alang sa sudo (oo, dili luwas, apan kombenyente).

sudo visudo

Gi-edit nako ang linya sa porma ug gitipigan

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

Dayon akong usbon ang kasamtangan nga lokal aron ang oras naa sa Moscow, kung dili kini sa Greenwich.

sudo timedatectl set-timezone Europe/Moscow

o

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

Kung nalisdan ka, ayaw gamita kini nga board; Mas maayo ang Raspberry Pi. Sa tinuod lang.

Modem Huawei e3372h – 153

Kini nga modem usa ka hinungdanon nga gigikanan sa dugo alang kanako, ug, sa tinuud, nahimo kini nga bottleneck sa tibuuk nga proyekto. Sa kinatibuk-an, ang ngalan nga "modem" alang sa kini nga mga aparato wala gyud magpakita sa esensya sa trabaho: kini usa ka kusgan nga kombinasyon, kini nga piraso sa hardware adunay usa ka komposit nga aparato nga nagpakaaron-ingnon nga usa ka CD-ROM aron ma-install ang mga drayber, ug dayon mobalhin sa mode sa network card.

Sa arkitektura, gikan sa punto sa panglantaw sa usa ka Linux user, human sa tanan nga mga setting, kini tan-awon sama niini: human sa pagkonektar sa modem, ako adunay eth* network interface, nga pinaagi sa dhcp makadawat sa IP address 192.168.8.100, ug ang default gateway. mao ang 192.168.8.1.

Ug ang labing hinungdanon nga higayon! Kini nga modelo sa modem dili molihok sa modem mode, nga gikontrol sa mga mando sa AT. Ang tanan mahimong labi ka yano, paghimo og mga koneksyon sa PPP alang sa matag modem ug dayon molihok uban kanila. Apan sa akong kaso, "iyang kaugalingon" (mas tukma, usa ka Linux diver sumala sa mga lagda sa udev), nagmugna og eth interface ug nag-assign niini og IP address pinaagi sa dhcp.

Aron malikayan ang dugang nga kalibog, akong gisugyot nga kalimtan ang pulong nga "modem" ug isulti ang network card ug gateway, tungod kay sa esensya, kini sama sa pagkonektar sa usa ka bag-ong network card nga adunay ganghaan.
Kung adunay usa ka modem, dili kini hinungdan sa bisan unsang espesyal nga mga problema, apan kung adunay labaw pa sa usa, nga mao ang n-piraso, ang mosunod nga litrato sa network mitungha.

Dungan nga speedtest sa daghang LTE modem

Kana mao, n network card, nga adunay parehas nga IP address, matag usa adunay parehas nga default gateway. Apan sa tinuud, ang matag usa kanila konektado sa kaugalingon nga operator.

Sa sinugdan, ako adunay usa ka yano nga solusyon: gamit ang ifconfig o ip command, i-off ang tanan nga mga interface ug i-on lang ang usa ug sulayan kini. Ang solusyon maayo alang sa tanan, gawas nga sa panahon sa pagbalhin dili ako makakonektar sa aparato. Ug tungod kay ang pagbalhin kanunay ug paspas, wala gyud ako higayon nga makonektar.

Busa, gipili nako ang agianan sa mano-mano nga pagbag-o sa mga IP address sa mga modem ug dayon pagmaneho sa trapiko gamit ang mga setting sa ruta.

Dungan nga speedtest sa daghang LTE modem

Dili kini ang katapusan sa akong mga problema sa mga modem: sa kaso sa mga problema sa kuryente, sila nahulog, ug ang usa ka maayo nga lig-on nga suplay sa kuryente sa USB hub gikinahanglan. Gisulbad nako kini nga problema pinaagi sa lisud nga pagsolder sa gahum direkta sa hub. Ang laing problema nga akong nasugatan ug nga nakaguba sa tibuok nga proyekto: human sa reboot o bugnaw nga pagsugod sa device, dili tanan nga mga modem ang nakit-an ug dili kanunay, ug dili nako mahibal-an kung nganong kini nahitabo ug sa unsa nga algorithm. Apan una sa tanan.

Alang sa modem nga molihok sa husto, akong gi-install ang usb-modeswitch package.

sudo apt update
sudo apt install -y usb-modeswitch

Human niini, human sa pagkonektar, ang modem husto nga mahibal-an ug ma-configure sa udev subsystem. Gisusi nako pinaagi lamang sa pagkonektar sa modem ug pagsiguro nga makita ang network.
Laing problema nga dili nako masulbad: unsaon nako pagkuha ang ngalan sa operator nga among gitrabahoan gikan niini nga modem? Ang ngalan sa operator anaa sa modem web interface sa 192.168.8.1. Kini usa ka dinamikong panid sa web nga nakadawat data pinaagi sa mga hangyo sa Ajax, busa ang pag-wget lang sa panid ug pag-parse sa ngalan dili molihok. Mao nga nagsugod ako sa pagtan-aw kung giunsa ang paghimo sa usa ka panid sa web, ug uban pa, ug nahibal-an nako nga naghimo ako usa ka matang sa kabuang. Ingon usa ka sangputanan, siya miluwa, ug ang operator nagsugod sa pagdawat gamit ang Speedtest API mismo.

Mas sayon ​​​​kon ang modem adunay access pinaagi sa AT commands. Posible nga i-reconfigure kini, paghimo usa ka koneksyon sa ppp, pag-assign sa usa ka IP, pagkuha usa ka operator sa telecom, ug uban pa. Apan alaot, nagtrabaho ko sa gihatag kanako.

GPS

Ang GPS receiver nga gihatag kanako adunay UART interface ug gahum. Dili kini ang labing kaayo nga solusyon, apan mahimo gihapon kini ug yano. Ingon niini ang hitsura sa tigdawat.

Dungan nga speedtest sa daghang LTE modem

Sa tinuod lang, kini ang akong unang higayon nga nagtrabaho sa usa ka GPS receiver, apan sama sa akong gilauman, ang tanan naghunahuna alang kanamo sa dugay na nga panahon. Mao nga gigamit ra namon ang mga andam nga solusyon.

Una, akong gipalihok ang uart_AO_B (UART_RX_AO_B, UART_TX_AO_B) sa pagkonektar sa GPS.

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

Pagkahuman gisusi nako ang kalampusan sa operasyon.

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

Kini nga sugo dayag nga nag-edit sa devtree sa langaw, nga sayon ​​kaayo.

Human sa kalampusan niini nga operasyon, reboot ug i-install ang GPS daemon.

khadas@Khadas:~$ sudo reboot

Pag-instalar sa GPS daemon. Gi-install nako ang tanan ug giputol dayon kini alang sa dugang nga pag-configure.

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

Pag-edit sa file sa mga setting.

sudo vim /etc/default/gpsd

Nagbutang ko og UART diin magbitay ang GPS.

DEVICES="/dev/ttyS4"

Ug dayon atong i-on ang tanan ug magsugod.

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

Pagkahuman niana, gikonektar nako ang GPS.

Dungan nga speedtest sa daghang LTE modem

Ang GPS wire naa sa akong mga kamot, ang UART debugger wires makita sa ilawom sa akong mga tudlo.

Gi-reboot nako ug gisusi ang operasyon sa GPS gamit ang gpsmon program.

Dungan nga speedtest sa daghang LTE modem

Dili nimo makita ang mga satellite niini nga screenshot, apan makita nimo ang komunikasyon sa GPS receiver, ug kini nagpasabot nga ang tanan maayo.

Sa python, gisulayan nako ang daghang mga kapilian sa pagtrabaho sa kini nga daemon, apan gihusay nako ang usa nga nagtrabaho sa husto sa python 3.

Gi-install nako ang gikinahanglan nga librarya.

sudo -H pip3 install gps3 

Ug akong gikulit ang code sa trabaho.

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

Kung kinahanglan nako nga makakuha og mga coordinate, buhaton kini sa mosunud nga tawag:

longitude, latitude = getPositionData(agps_thread)

Ug sulod sa 1-10 ka segundo makuha nako ang coordinate o dili. Oo, ako adunay napulo ka pagsulay sa pagkuha sa mga coordinate. Dili maayo, hiwi ug hiwi, apan kini molihok. Nakahukom ko nga buhaton kini tungod kay ang GPS mahimong adunay dili maayo nga pagdawat ug dili kanunay makadawat mga datos. Kung maghulat ka nga makadawat mga datos, unya kung magtrabaho ka sa usa ka hilit nga kwarto, ang programa mag-freeze sa kini nga lugar. Busa, akong gipatuman kining inelegant nga kapilian.

Sa prinsipyo, kung adunay daghang oras, posible nga makadawat mga datos gikan sa GPS direkta pinaagi sa UART, i-parse kini sa usa ka bulag nga hilo ug pagtrabaho uban niini. Apan wala'y panahon, busa ang brutal nga mangil-ad nga code. Ug oo, wala ko maulaw.

Ang diode nga nagpagawas sa kahayag

Ang pagkonektar sa LED yano ug lisud sa samang higayon. Ang panguna nga kalisud mao nga ang numero sa pin sa sistema dili katumbas sa numero sa pin sa pisara ug tungod kay ang dokumentasyon gisulat sa wala nga kamot. Aron itandi ang numero sa pin sa hardware ug ang numero sa pin sa OS, kinahanglan nimo nga ipadagan ang mando:

gpio readall

Ang usa ka lamesa sa mga sulat sa pin sa sistema ug sa pisara ipakita. Pagkahuman mahimo na nako nga maoperahan ang pin sa OS mismo. Sa akong kaso ang LED konektado sa GPIOH_5.

Dungan nga speedtest sa daghang LTE modem

Gibalhin nako ang GPIO pin sa output mode.

gpio -g mode 421 out

Gisulat nako ang zero.

gpio -g write 421 0

Isulat ko ang usa.

gpio -g write 421 1

Dungan nga speedtest sa daghang LTE modem
Gisiga ang tanan, pagkahuman gisulat ang "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)

Karon, kung adunay mga sayup, gitawag nako ang error_blink () ug ang LED mokidlap nga matahum.

Mga node sa software

Pinaspas nga API

Usa ka dakong kalipay nga ang serbisyo sa speedtest.net adunay kaugalingong python-API, mahimo nimong tan-awon Github.

Ang maayo kay naay source codes nga pwede pud tan-awon. Sa unsa nga paagi sa pagtrabaho uban niini nga API (yano nga mga pananglitan) makita sa may kalabutan nga seksyon.

Gi-install nako ang library sa python gamit ang mosunud nga mando.

sudo -H pip3 install speedtest-cli

Pananglitan, mahimo ka nga mag-install usa ka speed tester sa Ubuntu direkta gikan sa software. Kini ang parehas nga aplikasyon sa python, nga mahimo’g ilunsad direkta gikan sa console.

sudo apt install speedtest-cli -y

Ug sukda ang imong katulin sa Internet.

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

Ingon sa usa ka resulta, sama sa akong gibuhat. Kinahanglan kong mosulod sa mga source code niini nga speed test aron mas hingpit nga mapatuman kini sa akong proyekto. Usa sa labing hinungdanon nga buluhaton mao ang pagkuha sa ngalan sa operator sa telecom aron mapuli kini sa plato.

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

Dinhi, usab, ang tanan nahimo nga dili kaayo yano, bisan kung kini ingon labi ka yano. Sa sinugdan, ang parameter sa mga server parehas sa [], ingon nila, pilia ang labing kaayo nga server. Ingon usa ka sangputanan, ako adunay mga random nga mga server, ug, ingon sa imong pagtag-an, variable speed. Kini usa ka komplikado nga hilisgutan, gamit ang usa ka piho nga server, kung mao, static o dinamiko, nanginahanglan panukiduki. Apan ania ang usa ka pananglitan sa mga graph sa pagsukod sa tulin alang sa usa ka operator sa Beeline kung dinamikong pagpili sa usa ka test server ug usa ka statically fixed.

Dungan nga speedtest sa daghang LTE modem
Ang resulta sa pagsukod sa katulin sa pagpili sa usa ka dinamikong server.

Dungan nga speedtest sa daghang LTE modem
Ang resulta sa speed testing, uban sa usa ka hugot nga gipili sa usa ka server.

Atol sa pagsulay, adunay "fur" sa duha ka mga lugar, ug kini kinahanglan nga tangtangon gamit ang mga pamaagi sa matematika. Apan sa usa ka fixed server kini gamay nga gamay ug ang amplitude mas lig-on.
Sa kinatibuk-an, kini usa ka lugar sa daghang panukiduki. Ug akong sukdon ang gikusgon sa akong server gamit ang iperf utility. Apan nagpabilin kami sa teknikal nga mga detalye.

Pagpadala sa mail ug mga sayup

Aron ipadala ang mail, gisulayan nako ang daghang dosena nga lainlaing mga kapilian, apan sa katapusan nahusay nako ang mga musunud. Nagrehistro ko og mailbox sa Yandex ug dayon gikuha Kini usa ka pananglitan sa pagpadala sa mail. Gisusi nako kini ug gipatuman kini sa programa. Kini nga pananglitan nagsusi sa lainlaing mga kapilian, lakip ang pagpadala gikan sa gmail, ug uban pa. Dili ko gusto nga magsamok sa pag-set up sa akong mail server ug wala nay panahon alang niini, apan ingon nga kini nahimo sa ulahi, kini usab kawang.

Ang mga troso gipadala sumala sa scheduler, kung adunay koneksyon, kada 6 ka oras: sa alas 00, alas 06 sa buntag, alas 12 sa udto ug alas 18 sa gabii. Gipadala kini ingon sa mosunod.

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

Ang mga sayup gipadala usab sa sinugdan. Sa pagsugod, natipon sila sa lista, ug dayon gipadala usab sila gamit ang scheduler, kung adunay koneksyon. Bisan pa, ang mga problema mitungha sa kamatuoran nga ang Yandex adunay limitasyon sa gidaghanon sa mga mensahe nga gipadala kada adlaw (kini ang kasakit, kasubo ug kaulawan). Tungod kay mahimo nga adunay daghang mga sayup bisan matag minuto, kinahanglan namon nga biyaan ang pagpadala mga sayup pinaagi sa koreo. Busa hinumdomi kung awtomatik nga magpadala sa kasayuran bahin sa ingon nga problema pinaagi sa mga serbisyo sa Yandex.

Feedback server

Aron adunay access sa usa ka hilit nga piraso sa hardware ug makahimo sa pag-customize ug pag-reconfigure niini, nagkinahanglan ko og external server. Sa kinatibuk-an, aron mahimong patas, husto nga ipadala ang tanan nga datos sa server ug tukuron ang tanan nga matahum nga mga graph sa interface sa web. Apan dili tanan sa usa ka higayon.

Para sa VPS akong gipili ruvds.com. Mahimo nimong kuhaon ang pinakasimple nga server. Ug sa kinatibuk-an, alang sa akong katuyoan kini igo na. Apan tungod kay wala ako nagbayad sa server gikan sa akong kaugalingon nga bulsa, nakahukom ko nga kuhaon kini nga adunay gamay nga reserba aron kini igo na kung mag-deploy kami usa ka web interface, among kaugalingon nga SMTP server, VPN, ug uban pa. Dugang pa, makahimo sa pag-set up sa usa ka Telegram bot ug wala’y mga problema nga kini gibabagan. Busa, gipili nako ang Amsterdam ug ang mosunod nga mga parameter.

Dungan nga speedtest sa daghang LTE modem

Ingon usa ka pamaagi sa komunikasyon sa hardware, gipili sa vim2 ang usa ka reverse ssh nga koneksyon ug, ingon sa gipakita sa praktis, dili kini ang labing kaayo. Kung ang koneksyon nawala, ang server nagkupot sa pantalan ug imposible nga makonektar pinaagi niini sulod sa pipila ka panahon. Busa, mas maayo pa nga gamiton ang ubang mga pamaagi sa komunikasyon, pananglitan VPN. Sa umaabot gusto nako nga mobalhin sa VPN, apan wala’y oras.

Dili ko moadto sa mga detalye sa pag-set up sa usa ka firewall, pagpugong sa mga katungod, pag-disable sa root ssh nga koneksyon ug uban pang mga kamatuoran sa pag-set up sa VPS. Gusto ko nga motuo nga nahibal-an na nimo ang tanan. Alang sa layo nga koneksyon, naghimo ko og bag-ong user sa server.

adduser vimssh

Naghimo ko og ssh connection keys sa among hardware.

ssh-keygen

Ug gikopya nako sila sa among server.

ssh-copy-id [email protected]

Sa among hardware, naghimo ko og automatic reverse ssh connection sa matag boot.

[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

Hatagi'g pagtagad ang port 8083: kini nagtino kung unsang pantalan ang akong gamiton aron makonektar pinaagi sa reverse ssh. Idugang kini sa pagsugod ug pagsugod.

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

Makita pa nimo ang status:

sudo systemctl status autossh.service

Karon, sa among VPS server, kung kami modagan:

ssh -p 8083 khadas@localhost

Unya naa ko sa akong test piece sa hardware. Ug gikan sa hardware mahimo usab ako magpadala mga troso ug bisan unsang datos pinaagi sa ssh sa akong server, nga dali kaayo.

Paghiusa sa tanan

Dungan nga speedtest sa daghang LTE modem
Pag-switch, magsugod ta sa pag-develop ug pag-debug

Phew, maayo, mao kana, akong gihulagway ang tanan nga mga buko. Karon na ang panahon sa paghiusa sa tanan. Makita nimo ang code dinhi mismo.

Usa ka importante nga punto sa code: Kini nga proyekto mahimong dili magsugod sama niini, tungod kay kini gipahaum alang sa usa ka piho nga buluhaton, sa usa ka piho nga arkitektura. Bisan kung gihatag nako ang source code, ipatin-aw ko gihapon ang labing bililhon nga mga butang dinhi, mismo sa teksto, kung dili kini hingpit nga dili masabtan.

Sa sinugdanan, gisugdan nako ang gps, gpio ug maglunsad og usa ka bulag nga scheduler thread.

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

Ang scheduler yano ra: kini tan-awon kung ang oras na aron magpadala mga mensahe ug kung unsa ang karon nga kahimtang sa sayup. Kung adunay usa ka sayup nga bandila, dayon among i-blink ang 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)

Ang labing lisud nga bahin niini nga proyekto mao ang pagpadayon sa reverse ssh nga koneksyon alang sa matag pagsulay. Ang matag pagsulay naglakip sa pag-configure pag-usab sa default gateway ug DNS server. Tungod kay walay bisan usa nga nagbasa, hibaloi nga ang tren dili mosakay sa mga riles nga kahoy. Bisan kinsa nga makakita sa itlog sa Pasko sa Pagkabanhaw makakuha og pipila ka kendi.

Aron mahimo kini, naghimo ako usa ka lahi nga routing table -set-mark 0x2 ug usa ka lagda sa pag-redirect sa trapiko.

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")

Makakat-on ka og dugang kon sa unsang paagi kini molihok basaha sa kini nga artikulo.

Pagkahuman moadto ako sa usa ka wala’y katapusan nga loop, diin matag higayon nga makakuha kami usa ka lista sa mga konektado nga mga modem (aron mahibal-an kung ang pagsumpo sa network kalit nga nausab).

network_list = getNetworklist()

Ang pagkuha sa usa ka lista sa mga interface sa network yano ra.

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

Human madawat ang lista, akong gibutang ang mga IP address sa tanang interface, sama sa akong gipakita sa hulagway sa kapitulo mahitungod sa modem.

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")

Unya moagi lang ko sa matag interface sa usa ka loop. Ug akong gi-configure ang matag interface.

	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'")

Gisusi nako ang interface alang sa pag-andar, kung wala’y network, nan nakamugna ako mga sayup. Kung adunay network, oras na aron molihok!

Dinhi akong gi-configure ang ssh routing sa kini nga interface (kung wala pa kini nahimo), ipadala ang mga sayup sa server kung moabut na ang oras, ipadala ang mga troso ug sa katapusan magpadagan sa usa ka speedtest ug i-save ang mga log sa usa ka csv file.

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()
#и далее тестируем скорость и сохраняем логи. 

Angayan nga hisgutan ang function sa pag-set up sa reverse 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")

Ug siyempre, kinahanglan nimo nga idugang kining tanan nga katahum sa pagsugod. Aron mahimo kini maghimo ako usa ka file:

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

Ug gisulat ko kini:

[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

Akong gi-on ang autoloading ug gisugdan!

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

Karon akong makita ang mga log kung unsa ang nahitabo gamit ang command:

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

Результаты

Aw, karon ang labing hinungdanon nga butang mao, unsa ang nahitabo ingon usa ka sangputanan? Ania ang pipila ka mga graph nga akong nakuha sa panahon sa pag-uswag ug proseso sa pag-debug. Ang mga graph gihimo gamit ang gnuplot uban sa mosunod nga script.

#! /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"

Ang una nga kasinatian mao ang Tele2 operator, nga akong gipahigayon sa daghang mga adlaw.

Dungan nga speedtest sa daghang LTE modem

Dinhi gigamit nako ang usa ka dinamikong server sa pagsukod. Ang mga pagsukod sa katulin nagtrabaho, apan nagbag-o kaayo, apan ang pipila nga kasagaran nga kantidad makita gihapon, ug kini makuha pinaagi sa pagsala sa datos, pananglitan, nga adunay average nga paglihok.

Sa ulahi naghimo ako og daghang mga graph alang sa ubang mga operator sa telecom. Sa kini nga kaso, adunay na usa ka server sa pagsulay, ug ang mga resulta makapainteres usab.

Dungan nga speedtest sa daghang LTE modem

Dungan nga speedtest sa daghang LTE modem

Dungan nga speedtest sa daghang LTE modem

Dungan nga speedtest sa daghang LTE modem

Sama sa imong makita, ang hilisgutan kaylap kaayo alang sa panukiduki ug pagproseso sa kini nga datos, ug klaro nga dili molungtad sa usa ka magtiayon nga mga semana nga trabaho. Apan…

Resulta sa trabaho

Ang trabaho kalit nga nahuman tungod sa mga kahimtang nga dili nako makontrol. Usa sa mga kahuyang niini nga proyekto, sa akong suhetibong opinyon, mao ang modem, nga dili gyud gusto nga magtrabaho nga dungan sa ubang mga modem, ug naghimo sa ingon nga mga limbong matag higayon nga kini gikarga. Alang sa kini nga mga katuyoan, adunay daghang daghang ubang mga modelo sa modem; kasagaran naa na sila sa format nga Mini PCI-e ug na-install sa sulod sa aparato ug labi ka dali nga i-configure. Apan kana usa ka hingpit nga lahi nga istorya. Makaiikag ang proyekto ug nalipay kaayo ko nga nakaapil ko niini.

Dungan nga speedtest sa daghang LTE modem

Source: www.habr.com

Idugang sa usa ka comment