Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Ngexesha lokuvalelwa, ndiye ndanikwa ukuba ndithathe inxaxheba kuphuhliso lwesixhobo sokulinganisa isantya seemodem ze-LTE kubasebenzisi abaninzi beeselula.

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Umthengi wayefuna ukuvavanya isantya sabaqhubi bee-telecom ezahlukeneyo kwiindawo ezahlukeneyo zejografi ukuze akwazi ukuqonda ukuba yeyiphi i-opharetha yeselula eyona nto ifanelekileyo kuye xa efaka izixhobo usebenzisa uqhagamshelo lwe-LTE, umzekelo, ukusasazwa kwevidiyo. Kwangaxeshanye, ingxaki kwafuneka isonjululwe ngokulula nangexabiso eliphantsi kangangoko, ngaphandle kwezixhobo ezibiza imali eninzi.

Ndiza kuthetha ngoko nangoko ukuba umsebenzi awuyena ulula kwaye unzulu kakhulu ulwazi; Ngoko, masihambe.

Qaphela:

Ukulinganisa isantya soqhagamshelwano lwe-LTE yinto enzima kakhulu: kufuneka ukhethe izixhobo ezifanelekileyo kunye nobuchule bokulinganisa, kwaye ube nokuqonda kakuhle kwe-topology kunye nokusebenza kwenethiwekhi yeselula. Ngaphezu koko, isantya sinokuphenjelelwa zizinto ezininzi: inani lababhalisi kwiseli, iimeko zemozulu, nokuba ukusuka kwiseli ukuya kwiseli isantya sinokwahluka kakhulu ngenxa ye-topology yenethiwekhi. Ngokubanzi, le yingxaki ngenani elikhulu lezinto ezingaziwayo, kwaye kuphela ngumqhubi we-telecom onokuyisombulula ngokuchanekileyo.

Ekuqaleni, umthengi wayefuna nje ukuqhuba i-courier ngeefowuni zabaqhubi, athathe imilinganiselo ngokuthe ngqo kwifowuni kwaye abhale phantsi iziphumo zokulinganisa isantya kwincwadana. Isisombululo sam sokulinganisa isantya sothungelwano lwe-lte, nangona singafanelekanga, sisombulula ingxaki.

Ngenxa yokunqongophala kwexesha, ndenze izigqibo ezingenzelwanga lula okanye ukwenza okuthile, kodwa ndixhasa isantya sophuhliso. Ngokomzekelo, i-ssh ebuyela umva yayisetyenziselwa ukufikelela kude, endaweni ye-VPN esebenzayo, ukuze ugcine ixesha lokuseta iseva kunye nomxhasi ngamnye.

Umsebenzi wobugcisa

Njengoko kuchaziwe kwinqaku Ngaphandle kweenkcukacha zobugcisa: kutheni umxhasi engayifuni: Musa ukusebenza ngaphandle kweenkcukacha zobugcisa! Ungaze, naphi na!

Umsebenzi wobugcisa wawulula kakhulu, ndiza kuwandisa kancinci ukuqonda komsebenzisi wokugqibela. Ukukhethwa kwezisombululo zobugcisa kunye nezixhobo zichazwe ngumthengi. Ke, inkcazo yobugcisa ngokwayo, emva kwayo yonke imvume:

Ngokusekwe kwikhompyuter enye yebhodi vim2 yenza umvavanyi wesantya soqhagamshelo lwe-lte usebenzisa iimodem ze-Huawei e3372h - 153 abasebenzi abaninzi telecom (ukusuka kwenye ukuya n). Kukwayimfuneko ukufumana ulungelelwaniso kwisamkeli seGPS esiqhagamshelwe nge-UART. Yenza imilinganiselo yesantya usebenzisa inkonzo www., uphara.com wazibeka etafileni ngolu hlobo:

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Itheyibhile kwifomathi ye-csv. Emva koko thumela olu phawu nge-imeyile rhoqo kwiiyure ezi-6. Kwimeko yeempazamo, qhwanyaza i-LED eqhagamshelwe kwi-GPIO.

Ndachaza iinkcukacha zobugcisa kwifomu yamahhala, emva kokuvunywa okuninzi. Kodwa intsingiselo yomsebenzi sele ibonakala. Iveki yanikwa yonke into. Kodwa enyanisweni yathatha iiveki ezintathu. Oku kuthathela ingqalelo into yokuba ndikwenze oku kuphela emva komsebenzi wam ongundoqo nangeempelaveki.

Apha ndifuna ukuphinda nditsale ingqalelo kwinto yokuba umthengi uvumile kwangaphambili malunga nokusetyenziswa kwenkonzo yokulinganisa isantya kunye ne-hardware, eyanciphisa kakhulu amandla am. Uhlahlo lwabiwo-mali nalo lwalulinganiselwe, ngoko akukho nto ikhethekileyo yathengwa. Ngoko kwafuneka sidlale ngale mithetho.

Uyilo kunye nophuhliso

Iskimu silula kwaye sicacile. Ngoko ke, ndiya kuyishiya ngaphandle kwamazwana akhethekileyo.

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Ndagqiba ekubeni ndiphumeze yonke iprojekthi kwipython, nangona ndandingenawo amava okuphuhlisa ngolu lwimi kwaphela. Ndiyikhethile ngenxa yokuba kukho imizekelo esele ilungile kunye nezisombululo ezinokukhawulezisa uphuhliso. Ke ngoko, ndicela bonke abadwelisi benkqubo abaqeqeshiweyo ukuba bangawathethisi amava am okuqala okuphuhlisa ipython, kwaye ndihlala ndonwabile ukuva ukugxekwa okwakhayo ukuphucula izakhono zam.

Kwakhona kwinkqubo ndiye ndafumanisa ukuba ipython ineenguqulelo ezimbini ezisebenzayo 2 kunye ne-3, ngenxa yoko ndiye ndazinza kowesithathu.

Izixhobo zehardware

Ipleyiti enye vim2

Ndinikwe ikhompyutha enebhodi enye njengomatshini wam ophambili vim2

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Отличный, мощный медиакомбайн для умного дома и SMART-TV, но на редкость неподходящий для данной задачи, или скажем так, слабо подходящий. Например, его главная ОС — это Android, kwaye Linux — это попутная ОС, и соответственно никто не гарантирует качественной работы всех узлов и драйверов под Linux. И я предполагаю, что часть проблем была связана с драйверами USB данной платформы, поэтому модемы работали на данной плате не так как ожидал. Так же у него очень плохая и разрозненная документация, поэтому каждая операция занимала много времени копания в доках. Даже рядовая работа с GPIO попила много крови. Например, чтобы настроить работу со светодиодом, мне понадобилось несколько часов. Но, если быть объективным, то принципиально не было важно, что за одноплатник, главное, чтобы работал и были USB-порты.

Для начала мне нужно установить Linux на данную плату. Чтобы не рыскать всем по дебрям документации, а также для тех, кто будет разбираться с этим одноплатником, пишу данную главу.

Kukho iinketho ezimbini zokufakela iLinux: kwikhadi le-SD langaphandle okanye kwi-MMC yangaphakathi. Ndachitha ngokuhlwa ndizama ukufumanisa indlela yokuyenza ukuba isebenze kunye nekhadi, ngoko ndagqiba ekubeni ndiyifake kwi-MMC, nangona ngaphandle kwamathandabuzo kuya kuba lula kakhulu ukusebenza ngekhadi langaphandle.

Malunga ne-firmware kuthethwa ngobugwenxa apha. Ndiguqulela ukusuka engaqhelekanga ukuya kwisiRashiya. Ukuze ukhanyise ibhodi, kufuneka ndidibanise i-hardware ye-UART. Iqhagamshele ngale ndlela ilandelayo.

  • Isixhobo sePin GND: <—> I-Pin17 ye-VIMs GPIO
  • Tool Pin TXD: <—> Pin18 of VIMs’s GPIO (Linux_Rx)
  • Tool Pin RXD: <—> Pin19 of VIMs’s GPIO (Linux_Tx)
  • Isixhobo sePin VCC: <—> I-Pin20 ye-VIMs GPIO

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Emva koko, ndakhuphela i-firmware kusuka apha. Inguqulelo ye-firmware ethile VIM1_Ubuntu-server-bionic_Linux-4.9_arm64_EMMC_V20191231.

Ukuze ulayishe le firmware, ndifuna izinto eziluncedo. Iinkcukacha ezithe vetshe malunga noku apha. Под Windows не пробовал прошивать, а вот о прошивке под Linux надо пару слов рассказать. Для начала установлю утилиты, согласно инструкции.

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

Aaand... Akukho nto isebenzayo. Ndichithe iiyure ezimbalwa ndihlela izikripthi zofakelo ukuze yonke into indifakele kakuhle. Andikhumbuli ukuba ndenza ntoni apho, kodwa kwakukho nala sekisi inamahashe. Ngoko lumka. Kodwa ngaphandle kwezi zixhobo akukho sizathu sokuthuthumbisa i-vim2 ngakumbi. Kungcono ungabinangxaki naye kwaphela!

Emva kwezangqa ezisixhenxe zesihogo, ukucwangciswa kweskripthi kunye nofakelo, ndifumene iphakheji yezinto zokusebenza. Ndiqhagamshele ibhodi nge-USB kwikhompyuter yam yeLinux, kwaye ndaqhagamshela i-UART ngokomzobo ongentla.
Ndiseta i-terminal yam ye-minicom endiyithandayo ngesantya se-115200, ngaphandle kwe-hardware kunye nolawulo lwempazamo yesoftware. Kwaye masiqalise.

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Xa ulayisha i-VIM2 kwi-terminal ye-UART, ndicinezela isitshixo, esifana ne-spacebar, ukuyeka ukulayisha. Emva kokuba umgca ubonakala

kvim2# 

Ndifaka umyalelo:

kvim2# run update

Kumamkeli esilayisha kuwo, ndenza:

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

Все, фух. Прошил, на плате есть Linux. Логин/пароль khadas:khadas.

Emva koko, ezinye iisetingi ezincinci zokuqala. Ngomsebenzi owongezelelweyo, ndivala igama eligqithisiweyo le-sudo (ewe, ayikhuselekanga, kodwa ifanelekile).

sudo visudo

Ndihlela umgca kwifom kwaye ndigcine

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

Emva koko nditshintsha indawo yangoku ukuze ixesha libe seMoscow, ngaphandle koko liya kuba seGreenwich.

sudo timedatectl set-timezone Europe/Moscow

okanye

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

Ukuba ufumanisa kunzima, ngoko ungayisebenzisi le bhodi iRaspberry Pi ingcono. Ngokunyaniseka.

IModem yeHuawei e3372h – 153

Le modem yayingumthombo obalulekileyo wegazi kum, kwaye, eneneni, yaba ngumqobo weprojekthi yonke. Ngokubanzi, igama elithi "imodem" yezi zixhobo ayibonakalisi undoqo womsebenzi konke konke: oku kukudibanisa okunamandla, le nxalenye ye-hardware inesixhobo esidibeneyo esizenza i-CD-ROM ukwenzela ukufaka abaqhubi, kwaye emva koko utshintshela kwimowudi yekhadi lenethiwekhi.

Архитектурно, с точки зрения пользователя Linux после всех настроек, выглядит так: после подключения модема, у меня появляется сетевой интерфейс eth*, который по dhcp получает ip адрес 192.168.8.100, и шлюз по умолчанию 192.168.8.1.

Kwaye owona mzuzu ubalulekileyo! Lo mzekelo wemodem awukwazi ukusebenza kwimowudi yemodem, elawulwa yimiyalelo ye-AT. Все было бы сильно проще, создать ppp-соединения на каждый модем и дальше уже оперировать с ними. Но в моем случае «сам» (точнее дайвера Linux согласно правилам udev), создает eth-интерфейс и по dhcp назначают ему ip-адрес.

Ukuze ugweme ukudideka okuqhubekayo, ndincoma ukulibala igama elithi "modem" kwaye ndithi ikhadi lenethiwekhi kunye nesango, kuba ngokwenene, kufana nokudibanisa ikhadi elitsha lomnatha kunye nesango.
Xa kukho imodem enye, oku akubangeli naziphi na iingxaki ezikhethekileyo, kodwa xa kukho ngaphezu kwesinye, oko kukuthi i-n-pieces, kuvela lo mfanekiso womnatha olandelayo.

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Oko kukuthi, amakhadi womnatha, kunye nedilesi ye-IP efanayo, ngalinye linesango elingagqibekanga elifanayo. Kodwa enyanisweni, ngamnye kubo uqhagamshelwe kumqhubi wayo.

Ekuqaleni, bendinesisombululo esilula: usebenzisa ifconfig okanye umyalelo we-ip, cima zonke iindlela zokujongana kwaye uvule nje enye kwaye uyivavanye. Isisombululo sasilungile kumntu wonke, ngaphandle kokuba ngexesha lokutshintsha andizange ndikwazi ukuxhuma kwisixhobo. Kwaye ekubeni ukutshintshwa rhoqo kwaye kuyakhawuleza, andizange ndifumane ithuba lokuxhuma konke konke.

Ke ngoko, ndikhethe indlela yokutshintsha ngesandla iidilesi ze-IP zeemodem kwaye emva koko ndiqhube itrafikhi usebenzisa useto lwendlela.

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Oku kwakungekuphela kweengxaki zam ngeemodem: kwimeko yeengxaki zamandla, zawa, kwaye unikezelo lwamandla oluzinzileyo oluzinzileyo kwi-hub ye-USB kwakufuneka. Ndiyisombulule le ngxaki ngokuthengisa ngamandla amandla ngqo kwi-hub. Enye ingxaki endiye ndadibana nayo kwaye yonakalise yonke iprojekthi: emva kokuqalisa ngokutsha okanye ukuqala okubandayo kwesixhobo, ayizizo zonke iimodem ezifunyenweyo kwaye azisoloko, kwaye andikwazanga ukugqiba ukuba kutheni le nto yenzeka kwaye yeyiphi i-algorithm. Kodwa izinto zokuqala kuqala.

Ukuze imodem isebenze ngokuchanekileyo, ndifakele iphakheji ye-usb-modeswitch.

sudo apt update
sudo apt install -y usb-modeswitch

Emva koko, emva kokudibanisa, imodem iya kuchongwa ngokuchanekileyo kwaye iqwalaselwe yi-subsystem ye-udev. Ndijonga nje ngokudibanisa imodem kwaye ndiqinisekise ukuba inethiwekhi iyavela.
Enye ingxaki endingakwaziyo ukuyicombulula: ndingalifumana njani igama lomsebenzisi esisebenza naye kule modem? Igama lomsebenzisi liqulethwe kwimodem web interface ku-192.168.8.1. Eli liphepha lewebhu eliguquguqukayo elifumana idata nge Ajax izicelo, ngoko ngokulula wgeting iphepha kunye nokwahlula igama akuyi kusebenza. Ngoko ndaqala ukujonga indlela yokuphuhlisa iphepha lewebhu, njl., kwaye ndaqonda ukuba ndenza uhlobo oluthile lobubhanxa. Ngenxa yoko, watshicela, kwaye umqhubi waqala ukufumana usebenzisa i-Speedtest API ngokwayo.

Kuya kuba lula kakhulu ukuba imodem inofikelelo ngemiyalelo yeAT. Kunokwenzeka ukuba uyiqwalasele kwakhona, wenze uxhulumaniso lwe-ppp, unikeze i-IP, ufumane umqhubi we-telecom, njl. Kodwa yeha, ndisebenza noko ndikunikiweyo.

IGPS

Umamkeli weGPS endiwunikweyo wayenojongano lwe-UART kunye namandla. Yayingesiso esona sisombululo silungileyo, kodwa sasisetyenzwa kwaye silula. Umamkeli ujonge into enje.

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Ukunyaniseka, eli yayilixesha lam lokuqala ndisebenza ne-GPS receiver, kodwa njengoko ndandilindele, yonke into yayicingelwa kuthi kwakudala. Ngoko sisebenzisa nje izisombululo esele zenziwe.

Okokuqala, ndenzela uart_AO_B (UART_RX_AO_B, UART_TX_AO_B) ukuqhagamshela iGPS.

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

Emva koko ndijonga impumelelo yotyando.

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

Lo myalelo ngokucacileyo uhlela i-devtree kubhabho, eluncedo kakhulu.

Emva kokuphumelela kwalo msebenzi, qalisa kwakhona kwaye ufake i-daemon yeGPS.

khadas@Khadas:~$ sudo reboot

Ukufakela i-daemon yeGPS. Ndifaka yonke into kwaye ndiyinqumle ngoko nangoko ukwenzela uqwalaselo olungakumbi.

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

Ukuhlela ifayile yesethingi.

sudo vim /etc/default/gpsd

Ndifaka iUART apho iGPS iza kuxhonywa.

DEVICES="/dev/ttyS4"

Kwaye emva koko sivula yonke into kwaye siqale.

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

Emva koko, ndidibanisa iGPS.

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Ucingo lweGPS lusezandleni zam, iingcingo ze-UART debugger ziyabonakala phantsi kweminwe yam.

Ndiqalisa kwakhona kwaye ndijonge ukusebenza kweGPS usebenzisa inkqubo yegpsmon.

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Awukwazi ukubona ii-satellites kule skrini, kodwa unokubona unxibelelwano kunye ne-GPS receiver, kwaye oku kuthetha ukuba yonke into ilungile.

Kwi-python, ndizamile iindlela ezininzi zokusebenzisa le daemon, kodwa ndazinza kule isebenze ngokuchanekileyo ngepython 3.

Ndifakela ithala leencwadi eliyimfuneko.

sudo -H pip3 install gps3 

Kwaye ndiqingqa ikhowudi yomsebenzi.

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

Ukuba ndifuna ukufumana ulungelelwaniso, oku kwenziwa ngale minxeba ilandelayo:

longitude, latitude = getPositionData(agps_thread)

Kwaye ngaphakathi kwe-1-10 imizuzwana ndiza kufumana ulungelelwaniso okanye hayi. Ewe, ndibe neenzame ezilishumi zokufumana ulungelelwaniso. Ayilunganga, igoso kwaye i-askew, kodwa iyasebenza. Ndithathe isigqibo sokwenza oku kuba iGPS inokuba nolwamkelo olubi kwaye ayisoloko ifumana idatha. Ukuba ulinda ukufumana idatha, ngoko ukuba usebenza kwigumbi elikude, inkqubo iya kubanda kule ndawo. Ngoko ke, ndisebenzise olu khetho lungafanelekanga.

Ngokomgaqo, ukuba bekukho ixesha elingakumbi, kuya kwenzeka ukuba ufumane idatha esuka kwi-GPS ngokuthe ngqo nge-UART, uyicazulule kwintambo eyahlukileyo kwaye usebenze nayo. Kodwa kwakungekho xesha konke konke, ngoko ke ikhowudi ekhohlakeleyo imbi. Ewe, andinazintloni.

Ikhowudi ekhupha ukukhanya

Ukuqhagamshela i-LED kwakulula kwaye kunzima ngexesha elifanayo. Ubunzima obuphambili kukuba inombolo yephini kwinkqubo ayihambelani nenombolo yephini ebhodini kwaye ngenxa yokuba amaxwebhu abhalwe ngesandla sasekhohlo. Ukuthelekisa inombolo yephini yentsimbi kunye nenombolo yephini kwi-OS, kufuneka usebenzise umyalelo:

gpio readall

Itheyibhile yembalelwano yephini kwinkqubo nakwibhodi iya kuboniswa. Emva koko ndiyakwazi ukusebenzisa i-pin kwi-OS ngokwayo. Kwimeko yam i-LED iqhagamshelwe kuyo GPIOH_5.

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Nditshintsha iphini yeGPIO kwimowudi yokuphuma.

gpio -g mode 421 out

Ndibhala zero.

gpio -g write 421 0

Ndibhala phantsi ibe nye.

gpio -g write 421 1

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE
Yonke into ilayitiwe, emva kokubhala "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)

Ngoku, kwimeko yeempazamo, ndibiza error_blink() kwaye i-LED iya kudanyaza kakuhle.

Izixhobo zesoftware

Speedtest API

Kuluvuyo olukhulu ukuba inkonzo ye-speedtest.net ine-python-API yayo, unokujonga kuyo. Github.

Into entle kukuba kukho iikhowudi zomthombo ezinokuthi zijongwe. Indlela yokusebenza nale API (imizekelo elula) inokufumaneka kwi icandelo elifanelekileyo.

Ndifaka ilayibrari yepython ngomyalelo olandelayo.

sudo -H pip3 install speedtest-cli

Для примера вы можете вообще поставить спидтестер в Ubuntu прямо из реп. Это тоже самое python-приложение, которое потом можно запустить прямо из консоли.

sudo apt install speedtest-cli -y

Kwaye ulinganise isantya se-Intanethi yakho.

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

Ngenxa yoko, njengoko ndenzayo. Kwafuneka ndingene kwiikhowudi zomthombo wolu vavanyo lwesantya ukuze ndikwazi ukuphumeza ngokupheleleyo kwiprojekthi yam. Omnye weyona misebenzi ibalulekileyo kukufumana igama lomsebenzisi we-telecom ukuze ulifake endaweni yepleyiti.

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

Apha, kwakhona, yonke into yabonakala ingekho lula, nangona ibonakala ilula kakhulu. Ekuqaleni, iparameter yabancedisi yayilingana ne [], bathi, khetha umncedisi ongcono. Ngenxa yoko, ndibe neeseva ezizenzekelayo, kwaye, njengoko unokuthekelela, isantya esiguqukayo. Esi sisihloko esintsonkothileyo, usebenzisa iseva esisigxina, ukuba kunjalo, imile okanye iguquguqukayo, ifuna uphando. Kodwa nanku umzekelo weegrafu zokulinganisa isantya somqhubi we-Beeline xa ukhetha ngokuguquguqukayo umncedisi wokuvavanya kunye ne-statically fixed.

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE
Isiphumo sokulinganisa isantya xa ukhetha umncedisi oguqukayo.

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE
Isiphumo sovavanyo lwesantya, kunye nomncedisi omnye okhethwe ngokungqongqo.

Ngexesha lokuvavanya, kukho "uboya" kuzo zombini iindawo, kwaye kufuneka bususwe kusetyenziswa iindlela zemathematika. Kodwa ngeseva emiselweyo ingaphantsi kancinci kwaye i-amplitude izinzile.
Ngokubanzi, le yindawo yophando olukhulu. Kwaye ndingalinganisa isantya somncedisi wam usebenzisa into eluncedo iperf. Kodwa sinamathela kwiinkcukacha zobugcisa.

Ukuthumela imeyile kunye neempazamo

Ukuthumela imeyile, ndizamile iinketho ezininzi ezahlukeneyo, kodwa ekugqibeleni ndazinza koku kulandelayo. Ndabhalisa ibhokisi yeposi kwiYandex ndaza ndathatha Lo ngumzekelo wokuthumela imeyile. Ndiyijongile kwaye ndayisebenzisa kwiprogram. Lo mzekelo uphonononga iinketho ezahlukeneyo, kubandakanya ukuthumela kwi-gmail, njl. Andizange ndifune ukuzikhathaza ngokuseta iseva yam yeposi kwaye ndingenaxesha layo, kodwa njengoko kwavela kamva, kwaba lilize.

Iilog zathunyelwa ngokomcwangcisi. ukuba kukho unxibelelwano, rhoqo ngeeyure ezi-6: ngentsimbi ye-00, nge-06 kusasa, nge-12 emini nange-18 ebusuku. Ithunyelwe ngolu hlobo lulandelayo.

from send_email import *
...
message_log = "Логи тестирования платы №1"
EmailForSend = ["dlinyj@trololo.ru", "pupkin@trololo.ru"]
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

Iimpazamo nazo zathunyelwa ekuqaleni. Ukuqala, zaqokelelwa kuluhlu, kwaye emva koko zathunyelwa kusetyenziswa umcwangcisi, ukuba bekukho umdibaniso. Nangona kunjalo, kwavela iingxaki kunye nenyaniso yokuba i-Yandex inomda kwinani lemiyalezo ethunyelwe ngosuku (oku kubuhlungu, ukudabuka kunye nokuthotywa). Kuba kunokubakho inani elikhulu leempazamo nangomzuzu ngamnye, kuye kwafuneka sikuyeke ukuthumela iimpazamo ngeposi. Ngoko khumbula xa uthumela ngokuzenzekelayo ulwazi malunga nengxaki enjalo ngeenkonzo zeYandex.

Iseva yengxelo

Ukuze ube nokufikelela kwisiqwenga esikude se-hardware kwaye ndikwazi ukuyenza ngokwezifiso kwaye ndiyilungise kwakhona, bendifuna iseva yangaphandle. Ngokubanzi, ukulunga, kuya kulunga ukuthumela yonke idatha kumncedisi kunye nokwakha zonke iigrafu ezintle kwi-interface yewebhu. Kodwa hayi ngaxeshanye.

KwiVPS ndakhetha ruvds.com. Ungathatha eyona iseva ilula. Kwaye ngokubanzi, ngeenjongo zam oku kuya kwanela. Kodwa ekubeni andizange ndihlawule umncedisi ngaphandle kwepokotho yam, ndagqiba ekubeni ndiwuthabathe kunye nokugcinwa okuncinci ukwenzela ukuba kuya kuba ngokwaneleyo ukuba siza kuhambisa i-interface yewebhu, iseva yethu ye-SMTP, i-VPN, njl. Kwaye, ukwazi ukuseta i-Telegraph bot kwaye ungabi nangxaki nayo ivaliwe. Ngoko ke, ndakhetha i-Amsterdam kunye neeparamitha ezilandelayo.

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Njengendlela yonxibelelwano kunye ne-hardware, i-vim2 ikhethe uqhagamshelo lwe-ssh ebuyela umva kwaye, njengoko uqheliselo lubonisile, ayisiyiyo eyona ilungileyo. Ukuba uxhulumaniso lulahlekile, umncedisi ubamba izibuko kwaye akunakwenzeka ukudibanisa ngayo ixesha elithile. Ngoko ke, kusengcono ukusebenzisa ezinye iindlela zokunxibelelana, umzekelo VPN. Kwixesha elizayo ndandifuna ukutshintshela kwi-VPN, kodwa ndandingenaxesha.

Andiyi kungena kwiinkcukacha zokuseta i-firewall, ukukhawulela amalungelo, ukukhubaza uxhulumaniso lwe-root ssh kunye nezinye ii-truisms zokuseta i-VPS. Ndingathanda ukukholelwa ukuba sele wazi yonke into. Kunxibelelwano olukude, ndenza umsebenzisi omtsha kwiseva.

adduser vimssh

Ndivelisa izitshixo zonxibelelwano lwe-ssh kwihardware yethu.

ssh-keygen

Kwaye ndikhuphela kwiseva yethu.

ssh-copy-id vimssh@host.com

Kwihardware yethu, ndenza uqhagamshelo oluzenzekelayo lwe-ssh kuyo yonke i-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 vimssh@host.com
RestartSec=5
Restart=always
[Install]
WantedBy=multi-user.target

Nika ingqalelo kwizibuko 8083: limisela ukuba leliphi izibuko endiza kulisebenzisa ukudibanisa nge-ssh ebuyela umva. Yongeza kwisiqalo kwaye uqale.

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

Unokubona nemo:

sudo systemctl status autossh.service

Ngoku, kwiseva yethu yeVPS, ukuba siqhuba:

ssh -p 8083 khadas@localhost

Emva koko ndifika kwisiqwenga sam sovavanyo lwehardware. Kwaye ukusuka kwi-hardware ndiyakwazi ukuthumela iinkuni kunye nayo nayiphi na idatha nge-ssh kwiseva yam, efanelekileyo kakhulu.

Ukubeka konke kunye

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE
Ukuvula, masiqalise uphuhliso kunye nokulungisa iimpazamo

Phew, yiloo nto, ndichaze zonke iindawo. Ngoku lixesha lokuzihlanganisa zonke. Ungayibona ikhowudi kanye apha.

Inqaku elibalulekileyo ngekhowudi: Le projekthi ayinakuqala ngolu hlobo, kuba yayilungiselelwe umsebenzi othile, woyilo oluthile. Nangona ndinikezela ngekhowudi yomthombo, ndiya kuchaza izinto ezibaluleke kakhulu apha, ngokufanelekileyo kwisicatshulwa, ngaphandle koko akuqondwa ngokupheleleyo.

Ekuqaleni, ndiqala igps, gpio kwaye ndiqalise intambo eyahlukileyo yomcwangcisi.

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

Umcwangcisi ulula kakhulu: kujongeka ukubona ukuba lifikile na ixesha lokuthumela imiyalezo kwaye yintoni imeko yemposiso yangoku. Ukuba kukho iflegi yempazamo, ngoko siqhwanyaza i-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)

Eyona ndawo inzima yale projekthi kukugcina uqhagamshelo lwe-ssh olubuyela umva kuvavanyo ngalunye. Uvavanyo ngalunye lubandakanya ukuqwalasela kwakhona isango elingagqibekanga kunye neseva ye-DNS. Ekubeni kungekho mntu ufundayo, yazi ukuba uloliwe akakhweli kwiireyile zamaplanga. Nabani na ofumana iqanda le-Ista ufumana ilekese.

Ukwenza oku, ndenza itafile yomzila eyahlukileyo -set-mark 0x2 kunye nomgaqo wokuqondisa kwakhona itrafikhi.

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

Unokufunda ngakumbi malunga nendlela esebenza ngayo funda kweli nqaku.

Emva koko ndingena kwi-loop engapheliyo, apho ixesha ngalinye sifumana uluhlu lweemodem ezixhunyiwe (ukufumanisa ukuba ubumbeko lwenethiwekhi lutshintshile ngokukhawuleza).

network_list = getNetworklist()

Ukufumana uluhlu lojongano lwenethiwekhi kulula kakhulu.

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

Emva kokufumana uluhlu, ndibeka iidilesi ze-IP kuzo zonke i-interfaces, njengoko ndibonise kumfanekiso kwisahluko malunga nemodem.

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

Emva koko ndihamba ngokulula kwi-interface nganye kwi-loop. Kwaye ndiqwalasela ujongano ngalunye.

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

Ndijonga ujongano lokusebenza, ukuba akukho nethiwekhi, emva koko ndivelisa iimpazamo. Ukuba kukho inethiwekhi, ngoko lixesha lokuthatha isinyathelo!

Apha ndiqwalasela indlela ye-ssh kolu jongano (ukuba ayenziwanga), thumela iimpazamo kumncedisi ukuba ixesha lifikile, thumela iilog kwaye ekugqibeleni usebenzise i-speedtest kwaye ugcine iilogi kwifayile ye-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()
#и далее тестируем скорость и сохраняем логи. 

Kufanelekile ukukhankanya umsebenzi wokuseta umva 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")

Kwaye kunjalo, kufuneka udibanise bonke obu buhle ekuqaliseni. Ukwenza oku ndenza ifayile:

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

Kwaye ndibhala kuyo:

[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

Ndivula i-autoload kwaye ndiqale!

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

Ngoku ndiyabona ukuba kwenzeka ntoni usebenzisa lo myalelo:

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

Iziphumo

Ewe, ngoku eyona nto ibalulekileyo kukuba, kwenzeka ntoni ngenxa yoko? Nazi iigrafu ezimbalwa endikwazile ukuzibamba ngexesha lophuhliso kunye nenkqubo yokulungisa ingxaki. Iigrafu zakhiwe kusetyenziswa i-gnuplot ngesi script silandelayo.

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

Amava okuqala ayekunye nomsebenzi weTele2, endawenza iintsuku ezininzi.

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Apha ndisebenzise umncedisi wokulinganisa oguqukayo. Imilinganiselo yesantya iyasebenza, kodwa iguquguquka kakhulu, kodwa ixabiso eliphakathi lisabonakala, kwaye oku kunokufumaneka ngokucoca idatha, umzekelo, ngomndilili ohambahambayo.

Kamva ndakha inani leegrafu zabanye abaqhubi be-telecom. Kule meko, kwakukho iseva enye yokuvavanya, kwaye iziphumo nazo zazinomdla kakhulu.

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

Njengoko ubona, isihloko sibanzi kakhulu kuphando kunye nokusetyenzwa kwale datha, kwaye ngokucacileyo ayihlali kwiiveki ezimbalwa zomsebenzi. Kodwa…

Isiphumo somsebenzi

Umsebenzi wagqitywa ngequbuliso ngenxa yeemeko ezingaphaya kwamandla am. Olunye ubuthathaka bale projekthi, ngokombono wam, yayiyimodem, engazange ifune ukusebenza ngaxeshanye kunye nezinye iimodem, kwaye yenza amaqhinga anjalo rhoqo xa ilayishiwe. Ngezi njongo, kukho inani elikhulu leminye imifuziselo yemodem; Kodwa elo libali elahluke ngokupheleleyo. Le projekthi yayinomdla kwaye ndandivuya kakhulu kuba ndikwazi ukuthatha inxaxheba kuyo.

Uvavanyo lwesantya ngaxeshanye kwiimodem ezininzi ze-LTE

umthombo: www.habr.com

Thenga ukusingathwa okuthembekileyo kwiindawo ezinokhuseleko lweDDoS, iiseva zeVPS VDS 🔥 Thenga ukusingathwa kwewebhusayithi okuthembekileyo ngokhuseleko lwe-DDoS, iiseva zeVPS VDS | ProHoster