Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Ngesikhathi sokuhlukaniswa, nganikezwa ukuba ngibambe iqhaza ekwakhiweni kwethuluzi lokulinganisa isivinini samamodemu e-LTE kuma-opharetha amaselula amaningana.

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Ikhasimende belifuna ukuhlola isivinini sabasebenzisi be-telecom abahlukahlukene ezindaweni ezahlukene ukuze likwazi ukuqonda ukuthi iyiphi i-opharetha yeselula eyayimlungele kakhulu lapho ifaka okokusebenza kusetshenziswa uxhumano lwe-LTE, isibonelo, ukusakazwa kwevidiyo. Ngesikhathi esifanayo, inkinga kwakudingeka ixazululwe kalula futhi eshibhile ngangokunokwenzeka, ngaphandle kwemishini ebizayo.

Ngizosho zisuka nje ukuthi umsebenzi awuwona olula futhi odinga ulwazi kakhulu; ngizokutshela ukuthi yiziphi izinkinga engihlangabezane nazo nokuthi ngizixazulule kanjani. Ngakho, asihambe.

Ukubhala

Ukulinganisa isivinini sokuxhuma kwe-LTE kuyindaba eyinkimbinkimbi kakhulu: udinga ukukhetha imishini efanele kanye nenqubo yokulinganisa, futhi ube nokuqonda okuhle kwe-topology nokusebenza kwenethiwekhi yeselula. Ngaphezu kwalokho, isivinini singathonywa yizici eziningana: inani lababhalisile kuseli, izimo zezulu, ngisho ukusuka kuseli kuya kuseli ijubane lingahluka kakhulu ngenxa ye-topology yenethiwekhi. Ngokuvamile, lokhu kuyinkinga ngenani elikhulu lokungaziwa, futhi opharetha we-telecom kuphela ongakwazi ukuyixazulula ngendlela efanele.

Ekuqaleni, ikhasimende lalifuna nje ukushayela i-courier ngezingcingo zabaqhubi, lithathe izilinganiso ngqo ocingweni bese libhala phansi imiphumela yokulinganisa isivinini encwadini yokubhalela. Isixazululo sami sokulinganisa isivinini samanethiwekhi e-lte, nakuba singalungile, sixazulula inkinga.

Ngenxa yokuntuleka kwesikhathi, angenzanga izinqumo ezivuna ukunethezeka noma ukusebenza, kodwa ngivuna ukushesha kwentuthuko. Isibonelo, i-reverse ssh isetshenziselwe ukufinyelela kude, esikhundleni se-VPN esebenzayo, ukuze wonge isikhathi ekusetheni iseva kanye neklayenti ngalinye.

Umsebenzi wobuchwepheshe

Njengoba kushiwo esihlokweni Ngaphandle kokucaciswa kwezobuchwepheshe: kungani iklayenti lingayifuni: Ungasebenzi ngaphandle kokucaciswa kobuchwepheshe! Ungalokothi, noma kuphi!

Umsebenzi wezobuchwepheshe wawulula impela, ngizowunweba kancane ukuze kuqondwe umsebenzisi wokugcina. Ukukhethwa kwezixazululo zobuchwepheshe kanye nemishini kwakunqunywa ikhasimende. Ngakho-ke, ukucaciswa kobuchwepheshe uqobo, ngemuva kwakho konke ukuvunyelwa:

Ngokusekelwe kukhompuyutha yebhodi eyodwa vim2 yenza isihloli sesivinini soxhumano lwe-lte ngamamodemu e-Huawei e3372h - 153 ama-opharetha amaningi e-telecom (kusuka kweyodwa kuye ku-n). Kuyadingeka futhi ukuthola izixhumanisi kumamukeli we-GPS oxhunywe nge-UART. Yenza izilinganiso zesivinini usebenzisa isevisi www., www futhi uwabeke etafuleni kanje:

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Ithebula ngefomethi ye-csv. Bese uthumela lolu phawu nge-imeyili njalo emahoreni ayisi-6. Uma kwenzeka amaphutha, cwayiza i-LED exhunywe ku-GPIO.

Ngichaze imininingwane yobuchwepheshe ngefomu lamahhala, ngemuva kokugunyazwa okuningi. Kodwa incazelo yomsebenzi isivele ibonakala. Kwanikelwa iviki kukho konke. Kodwa empeleni kwathatha amasonto amathathu. Lokhu kucatshangelwa ukuthi ngangikwenza lokhu kuphela ngemva komsebenzi wami omkhulu nangezimpelasonto.

Lapha ngifuna ukuphinde ngidonse ukunaka eqinisweni lokuthi ikhasimende livumelene kusengaphambili ngokusetshenziswa kwesevisi yokulinganisa isivinini kanye ne-hardware, okunciphise kakhulu amakhono ami. Isabelomali naso sasilinganiselwe, ngakho akukho okukhethekile okwathengwa. Ngakho bekumele sidlale ngale mithetho.

Izakhiwo kanye nentuthuko

Uhlelo lulula futhi lusobala. Ngakho-ke, ngizoyishiya ngaphandle kokuphawula okukhethekile.

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Nganquma ukusebenzisa yonke iphrojekthi nge-python, naphezu kokuthi ngangingenalo ulwazi lokuthuthukisa lolu limi nhlobo. Ngiyikhethe ngoba bekunenqwaba yezibonelo esezenziwe ngomumo nezisombululo ezingasheshisa intuthuko. Ngakho-ke, ngicela bonke abahleli bezinhlelo abangochwepheshe ukuthi bangathethisi ulwazi lwami lokuqala lokuthuthukisa i-python, futhi ngihlala ngijabule ukuzwa ukugxekwa okwakhayo ukuze ngithuthukise amakhono ami.

Futhi kule nqubo ngithole ukuthi i-python inezinguqulo ezimbili ezisebenzayo 2 no-3, ngenxa yalokho ngahlala kowesithathu.

Hardware nodes

Ipuleti elilodwa vim2

Nganikezwa ikhompuyutha enebhodi elilodwa njengomshini wami omkhulu vim2

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Iphrosesa yemidiya enhle kakhulu, enamandla yekhaya elihlakaniphile ne-SMART-TV, kodwa ayiwufanele neze lo msebenzi, noma, ake sithi, awufaneleki kahle. Isibonelo, i-OS yayo eyinhloko i-Android, futhi i-Linux iyi-OS yesibili, futhi ngokufanele akekho oqinisekisa ukusebenza kwekhwalithi ephezulu kwawo wonke ama-node nabashayeli ngaphansi kwe-Linux. Futhi ngicabanga ukuthi ezinye zezinkinga zazihlobene nabashayeli be-USB balesi sikhulumi, ngakho-ke amamodemu awazange asebenze njengoba kulindelekile kuleli bhodi. Futhi inamadokhumenti ampofu kakhulu futhi ahlakazekile, ngakho-ke ukusebenza ngakunye kuthatha isikhathi esiningi ukumba amadokodo. Ngisho nomsebenzi ojwayelekile nge-GPIO wathatha igazi eliningi. Isibonelo, kungithathe amahora ambalwa ukusetha i-LED. Kodwa, ukuze kube nenhloso, kwakungabalulekile ukuthi hlobo luni lwebhodi elilodwa, into eyinhloko ukuthi liyasebenza futhi kwakukhona amachweba we-USB.

Okokuqala, ngidinga ukufaka i-Linux kuleli bhodi. Ukuze ngingabheki ugwadule lwemibhalo yawo wonke umuntu, kanye nalabo abazobhekana nalolu hlelo lwebhodi elilodwa, ngibhala lesi sahluko.

Kunezinketho ezimbili zokufaka i-Linux: ekhadini le-SD langaphandle noma kwi-MMC yangaphakathi. Ngichithe ubusuku bonke ngizama ukuthola ukuthi ngingayenza kanjani ukuthi isebenze nekhadi, ngakho nganquma ukuyifaka ku-MMC, nakuba ngaphandle kokungabaza kungaba lula kakhulu ukusebenza ngekhadi langaphandle.

Mayelana ne-firmware ngobuqili lapha. Ngihumushela olimini lwesiRashiya kusuka kokungajwayelekile. Ukuze ngikhanyise ibhodi, ngidinga ukuxhuma i-UART yehadiwe. Ixhume ngendlela elandelayo.

  • Iphinikhodi yethuluzi GND: <—> Pin17 ye-VIMs GPIO
  • Iphinikhodi ye-TXD: <—> I-Pin18 ye-VIMs GPIO (Linux_Rx)
  • Iphinikhodi yethuluzi RXD: <—> I-Pin19 ye-VIMs GPIO (Linux_Tx)
  • Iphinikhodi Yethuluzi VCC: <—> I-Pin20 ye-VIM's GPIO

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Ngemuva kwalokho, ngilande i-firmware kusuka lapha. Inguqulo ye-firmware ethile VIM1_Ubuntu-server-bionic_Linux-4.9_arm64_EMMC_V20191231.

Ukuze ngilayishe le firmware, ngidinga izinsiza. Imininingwane eyengeziwe mayelana nalokhu lapha. Angizange ngizame ukuyikhanyisa ngaphansi kweWindows, kodwa ngidinga ukukutshela amagama ambalwa mayelana ne-firmware ngaphansi kwe-Linux. Okokuqala, ngizofaka izinsiza ngokuya ngemiyalelo.

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

Aaand... Akukho okusebenzayo. Ngichithe amahora ambalwa ngihlela imibhalo yokufaka ukuze yonke into ingifakele kahle. Angisakhumbuli ukuthi ngenzani lapho, kodwa kwakukhona nalelo sekisi elinamahhashi. Ngakho qaphela. Kepha ngaphandle kwalezi zinsiza asikho isidingo sokuhlukumeza i-vim2 ngokuqhubekayo. Kungcono ungamqhathi nakancane!

Ngemva kwemibuthano eyisikhombisa yesihogo, ukucushwa kweskripthi nokufakwa, ngithole iphakheji lezinsiza zokusebenza. Ngixhume ibhodi nge-USB kukhompuyutha yami ye-Linux, futhi ngaxhuma i-UART ngokomdwebo ongenhla.
Ngimisa itheminali yami ye-minicom engiyithandayo ngesivinini esingu-115200, ngaphandle kokulawula amaphutha wehadiwe nesoftware. Ake siqale.

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Lapho ngilayisha i-VIM2 kutheminali ye-UART, ngicindezela ukhiye, njengebha yesikhala, ukuze ngimise ukulayisha. Ngemva kokuvela komugqa

kvim2# 

Ngifaka umyalo:

kvim2# run update

Kusokhaya esilayisha kuso, ngenza:

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

Yilokho, phew. Ngibhekile, kukhona i-Linux ebhodini. Login/password khadas:khadas.

Ngemva kwalokho, ezinye izilungiselelo ezincane zokuqala. Ngomsebenzi owengeziwe, ngikhubaza iphasiwedi ye-sudo (yebo, ayivikelekile, kodwa ifanelekile).

sudo visudo

Ngihlela umugqa efomini bese ngilondoloza

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

Khona-ke ngishintsha indawo yamanje ukuze isikhathi siseMoscow, kungenjalo sizoba seGreenwich.

sudo timedatectl set-timezone Europe/Moscow

noma

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

Uma ukuthola kunzima, ungalisebenzisi leli bhodi; I-Raspberry Pi ingcono. Thembeka.

I-Modem Huawei e3372h – 153

Lemodemu yayiwumthombo obalulekile wegazi kimi, futhi, eqinisweni, yaba umgoqo wawo wonke umsebenzi. Ngokuvamile, igama elithi "imodemu" lawa madivayisi alibonisi nhlobo ingqikithi yomsebenzi: lokhu kuyinhlanganisela enamandla, lolu cezu lwehadiwe lunomshini oyinhlanganisela ozenza i-CD-ROM ukuze ufake abashayeli, bese ushintshela kumodi yekhadi lenethiwekhi.

Ngokwezakhiwo, ngokombono womsebenzisi we-Linux, ngemva kwazo zonke izilungiselelo, kubonakala kanje: ngemva kokuxhuma imodemu, ngine-interface yenethiwekhi ye-eth*, okuthi nge-dhcp ithole ikheli le-IP 192.168.8.100, kanye nesango elizenzakalelayo. yi-192.168.8.1.

Futhi umzuzu obaluleke kakhulu! Le modeli yemodemu ayikwazi ukusebenza kumodi yemodemu, elawulwa imiyalo ye-AT. Konke kuzoba lula kakhulu, dala ukuxhumana kwe-PPP kumodemu ngayinye bese usebenza ngakho. Kodwa esimweni sami, "yena" (ngokuqondile, i-Linux diver ngokuvumelana nemithetho ye-udev), idala i-interface ye-eth futhi inikeze ikheli le-IP kuyo nge-dhcp.

Ukuze ugweme ukudideka okwengeziwe, ngiphakamisa ukukhohlwa igama elithi "modem" futhi ngithi ikhadi lenethiwekhi kanye nesango, ngoba empeleni, kufana nokuxhuma ikhadi elisha lenethiwekhi ngesango.
Uma kunemodemu eyodwa, lokhu akubangeli izinkinga ezikhethekile, kodwa uma kukhona okungaphezu kweyodwa, okungukuthi ama-n-piece, isithombe esilandelayo senethiwekhi siyavela.

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Okungukuthi, amakhadi enethiwekhi, anekheli le-IP elifanayo, ngalinye linesango elizenzakalelayo elifanayo. Kodwa empeleni, ngayinye yazo ixhunywe ku-opharetha wayo.

Ekuqaleni, nginesixazululo esilula: ngisebenzisa umyalo we-ifconfig noma we-ip, cisha zonke izixhumanisi bese uvele uvule eyodwa bese uyivivinya. Isixazululo besisihle kuwo wonke umuntu, ngaphandle kokuthi phakathi nezikhathi zokushintsha angikwazanga ukuxhuma kudivayisi. Futhi njengoba ukushintsha kuvame futhi kuyashesha, empeleni angibanga nalo ithuba lokuxhuma nhlobo.

Ngakho-ke, ngikhethe indlela yokushintsha mathupha amakheli e-IP wamamodemu bese ngishayela ithrafikhi ngisebenzisa izilungiselelo zomzila.

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Lokhu kwakungesona isiphetho sezinkinga zami ngamamodemu: uma kwenzeka kuba nezinkinga zamandla, zawa, futhi kwakudingeka ukunikezwa kwamandla okuzinzile kuhabhu le-USB. Ngixazulule le nkinga ngokusondeza amandla ngqo kuhabhu. Enye inkinga engihlangabezane nayo futhi yonakalise yonke iphrojekthi: ngemuva kokuqalisa kabusha noma ukuqala okubandayo kwedivayisi, akuwona wonke amamodemu atholakele futhi hhayi njalo, futhi angikwazanga ukunquma ukuthi kungani lokhu kwenzeka nokuthi iyiphi i-algorithm. Kodwa izinto zokuqala kuqala.

Ukuze imodemu isebenze kahle, ngifake iphakheji ye-usb-modeswitch.

sudo apt update
sudo apt install -y usb-modeswitch

Ngemva kwalokho, ngemva kokuxhuma, imodemu izotholwa kahle futhi ilungiselelwe i-subsystem ye-udev. Ngihlola ngokumane ngixhume imodemu futhi ngiqinisekise ukuthi inethiwekhi iyavela.
Enye inkinga engingakwazi ukuyixazulula: ngingalithola kanjani igama lomsebenzisi esisebenza naye kule modemu? Igama lomsebenzisi liqukethwe kusixhumi esibonakalayo sewebhu yemodemu kokuthi 192.168.8.1. Leli yikhasi lewebhu eliguquguqukayo elithola idatha ngezicelo ze-Ajax, ngakho-ke ukumane ukhiphe ikhasi futhi uhlukanise igama ngeke kusebenze. Ngakho-ke ngaqala ukubheka indlela yokuthuthukisa ikhasi lewebhu, njll., futhi ngabona ukuthi ngangenza uhlobo oluthile lombhedo. Ngenxa yalokho, wakhafula, futhi opharetha waqala ukuthola esebenzisa i-Speedtest API ngokwayo.

Kungaba lula kakhulu ukube imodemu ibinokufinyelela ngemiyalo ye-AT. Kungase kwenzeke ukuyilungisa kabusha, udale uxhumano lwe-ppp, unikeze i-IP, uthole u-opharetha we-telecom, njll. Kodwa maye, ngisebenza ngalokho engikuphiwe.

GPS

Isamukeli se-GPS engasinikwa besinokuxhumana kwe-UART namandla. Kwakungesona isixazululo esingcono kakhulu, kodwa besisasebenza futhi silula. Umamukeli ubukeke kanje.

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Uma ngikhuluma iqiniso, lesi bekuyisikhathi sami sokuqala ngisebenza nesamukeli se-GPS, kodwa njengoba ngangilindele, konke kwakucatshangelwa thina kudala. Ngakho-ke sisebenzisa nje izixazululo ezenziwe ngomumo.

Okokuqala, nginika amandla i-uart_AO_B (UART_RX_AO_B, UART_TX_AO_B) ukuze ixhume i-GPS.

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

Ngemuva kwalokho ngibheka impumelelo yokuhlinzwa.

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

Lo myalo ngokusobala uhlela i-devtree on the fly, okuyinto elula kakhulu.

Ngemva kokuphumelela kwalo msebenzi, qalisa kabusha futhi ufake i-daemon ye-GPS.

khadas@Khadas:~$ sudo reboot

Ifaka i-daemon ye-GPS. Ngifaka yonke into futhi ngiyinqamule ngokushesha ukuze ngicushwe okwengeziwe.

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 ifayela lezilungiselelo.

sudo vim /etc/default/gpsd

Ngifaka i-UART lapho kuzolenga khona i-GPS.

DEVICES="/dev/ttyS4"

Bese sivula yonke into bese siqala.

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

Ngemva kwalokho, ngixhuma i-GPS.

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Intambo ye-GPS isezandleni zami, izintambo zokulungisa iphutha ze-UART ziyabonakala ngaphansi kweminwe yami.

Ngiqalisa kabusha futhi ngibheka ukusebenza kwe-GPS ngisebenzisa uhlelo lwe-gpsmon.

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Awukwazi ukubona amasathelayithi kulesi sithombe-skrini, kodwa ungabona ukuxhumana nesamukeli se-GPS, futhi lokhu kusho ukuthi konke kuhamba kahle.

Ku-python, ngizame izinketho eziningi zokusebenza nale daemon, kodwa ngahlala kuleyo esebenza kahle nge-python 3.

Ngifaka umtapo wolwazi odingekayo.

sudo -H pip3 install gps3 

Futhi ngiqopha ikhodi 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

Uma ngidinga ukuthola izixhumanisi, lokhu kwenziwa ngekholi elandelayo:

longitude, latitude = getPositionData(agps_thread)

Futhi kungakapheli imizuzwana engu-1-10 ngizothola ukuxhumanisa noma cha. Yebo, ngibe nemizamo eyishumi yokuthola izixhumanisi. Ayilungile, igobile futhi i-askew, kodwa iyasebenza. Nginqume ukwenza lokhu ngoba i-GPS ingakwazi ukwamukela kahle futhi ingatholi idatha njalo. Uma ulinda ukuthola idatha, khona-ke uma usebenza egumbini elikude, uhlelo luzoba yiqhwa kule ndawo. Ngakho-ke, ngisebenzise le nketho engafanele.

Empeleni, uma bekunesikhathi esengeziwe, bekungenzeka ukuthola idatha evela ku-GPS ngokuqondile nge-UART, ihlukanise ngomucu ohlukile futhi usebenze nayo. Kodwa sasingekho isikhathi nhlobo, ngakho-ke ikhodi embi enonya. Futhi yebo, anginamahloni.

I-diode ekhipha ukukhanya

Ukuxhuma i-LED kwakulula futhi kunzima ngesikhathi esifanayo. Ubunzima obukhulu ukuthi inombolo yephinikhodi ohlelweni ayihambisani nenombolo yephinikhodi ebhodini futhi ngoba imibhalo ibhalwe ngesandla sobunxele. Ukuze uqhathanise inombolo yephinikhodi yehadiwe nenombolo yephinikhodi ku-OS, udinga ukusebenzisa umyalo:

gpio readall

Ithebula lemibhalo yephinikhodi ohlelweni nasebhodini lizovezwa. Ngemva kwalokho ngingakwazi kakade ukusebenzisa iphinikhodi ku-OS ngokwayo. Endabeni yami i-LED ixhunywe ku GPIOH_5.

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Ngishintsha iphinikhodi ye-GPIO ibe yimodi yokukhipha.

gpio -g mode 421 out

Ngibhala uziro.

gpio -g write 421 0

Ngibhala phansi eyodwa.

gpio -g write 421 1

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE
Yonke into ikhanya, ngemva 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)

Manje, uma kwenzeka kuba namaphutha, ngibiza error_blink() futhi i-LED izocwayiza kahle.

Amanodi esoftware

I-Speedtest API

Kuyinjabulo enkulu ukuthi isevisi ye-speedtest.net ine-python-API yayo, ongayibheka I-Github.

Okuhle ukuthi kukhona amakhodi omthombo angabuye abukwe. Indlela yokusebenza nale API (izibonelo ezilula) ingatholakala ku isigaba esifanele.

Ngifaka umtapo wezincwadi we-python ngomyalo olandelayo.

sudo -H pip3 install speedtest-cli

Isibonelo, ungafaka ngisho nesihloli sesivinini ku-Ubuntu ngokuqondile kwisofthiwe. Lolu uhlelo olufanayo lwe-python, olungase lwethulwe ngqo kusuka ku-console.

sudo apt install speedtest-cli -y

Futhi ulinganise isivinini sakho se-inthanethi.

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 yalokho, njengoba nje ngenza. Bekumele ngingene kumakhodi omthombo walokhu kuhlolwa kwesivinini ukuze ngiwenze ngokugcwele kuphrojekthi yami. Omunye wemisebenzi ebaluleke kakhulu ukuthola igama le-telecom opharetha ukuze ulifake esikhundleni sepuleti.

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

Nalapha futhi, konke kwavela akulula kangako, nakuba kungabonakala kulula kakhulu. Ekuqaleni, ipharamitha yamaseva ibilingana ne [], bathi, khetha iseva engcono kakhulu. Ngenxa yalokho, nganginamaseva angahleliwe, futhi, njengoba ungase uqagele, isivinini esiguquguqukayo. Lesi isihloko esiyinkimbinkimbi, kusetshenziswa iseva engashintshi, uma kunjalo, emile noma eguquguqukayo, idinga ucwaningo. Kodwa nasi isibonelo segrafu yokulinganisa isivinini ku-opharetha we-Beeline lapho ekhetha ngokuguquguqukayo iseva yokuhlola kanye neyodwa engashintshiwe.

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE
Umphumela wokulinganisa isivinini lapho ukhetha iseva eguqukayo.

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE
Umphumela wokuhlolwa kwesivinini, ngeseva eyodwa ekhethwe ngokuqinile.

Ngesikhathi sokuhlolwa, kukhona "uboya" kuzo zombili izindawo, futhi budinga ukususwa kusetshenziswa izindlela zezibalo. Kodwa ngeseva ehleliwe incane kancane futhi i-amplitude izinzile.
Ngokuvamile, lena indawo yocwaningo olukhulu. Futhi bengizokala isivinini seseva yami ngisebenzisa insiza ye-iperf. Kodwa sinamathela ekucacisweni kobuchwepheshe.

Ukuthumela imeyili namaphutha

Ukuze ngithumele i-imeyili, ngizame izinketho eziningana ezihlukene, kodwa ekugcineni ngazinza kulokhu okulandelayo. Ngabhalisa ibhokisi leposi ku-Yandex ngase ngithatha Lesi isibonelo sokuthumela imeyili. Ngiyihlolile futhi ngayisebenzisa ohlelweni. Lesi sibonelo sihlola izinketho ezihlukahlukene, okuhlanganisa ukuthumela kusuka ku-gmail, njll. Ngangingafuni ukuzihlupha ngokusetha iseva yami yemeyili futhi ngingenaso isikhathi sayo, kodwa njengoba kwavela kamuva, futhi kwaba yize.

Amalogi athunyelwe ngokomhleli, uma kukhona ukuxhumana, njalo ngamahora angu-6: ngo-00 ezimpondweni, ngo-06 ekuseni, ngo-12 emini nango-18 ebusuku. Ithumele kanje.

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

Amaphutha nawo athunyelwe ekuqaleni. Okokuqala, aqoqwe ohlwini, abese ethunyelwa kusetshenziswa isihleli, uma kukhona ukuxhumana. Kodwa-ke, izinkinga zavela nokuthi i-Yandex inomkhawulo enanini lemilayezo ethunyelwe ngosuku (lokhu ubuhlungu, ukudabuka nokululazeka). Njengoba kungase kube nenani elikhulu lamaphutha ngisho nangomzuzu ngamunye, kudingeke ukuthi siyeke ukuthumela amaphutha ngeposi. Ngakho-ke khumbula lapho uthumela ngokuzenzakalelayo ulwazi mayelana nenkinga enjalo ngezinsizakalo ze-Yandex.

Iseva yempendulo

Ukuze ngikwazi ukufinyelela ucezu olukude lwehadiwe futhi ngikwazi ukwenza ngendlela oyifisayo nokuyilungisa kabusha, bengidinga iseva yangaphandle. Ngokuvamile, ukulunga, kungaba okulungile ukuthumela yonke idatha kuseva futhi wakhe wonke amagrafu amahle kusixhumi esibonakalayo sewebhu. Kodwa hhayi ngesikhathi esisodwa.

Nge-VPS ngakhetha ruvds.com. Ungathatha iseva elula kakhulu. Futhi ngokujwayelekile, ngezinhloso zami lokhu kuzokwanela. Kodwa njengoba ngingazange ngikhokhele iseva ephaketheni lami, nginqume ukuyithatha nge-reserve encane ukuze kube ngokwanele uma sizokhipha isikhombimsebenzisi sewebhu, iseva yethu ye-SMTP, i-VPN, njll. Futhi, ukwazi ukusetha i-Telegraph bot futhi ungabi nezinkinga ngokuthi ivinjiwe. Ngakho-ke, ngikhethe i-Amsterdam kanye nemingcele elandelayo.

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Njengendlela yokuxhumana ne-Hardware, i-vim2 ikhethe ukuxhumana kwe-ssh okuhlanekezelwe futhi, njengoba umkhuba ubonisile, akuyona into ehamba phambili. Uma uxhumano kulahleka, iseva ibamba imbobo futhi akunakwenzeka ukuxhuma kuyo isikhathi esithile. Ngakho-ke, kusengcono ukusebenzisa ezinye izindlela zokuxhumana, isibonelo VPN. Ngokuzayo ngangifuna ukushintshela ku-VPN, kodwa ngingenaso isikhathi.

Ngeke ngingene emininingwaneni yokusetha i-firewall, amalungelo akhawulelwe, ukukhubaza ukuxhumana kwe-root ssh nezinye izinkolelo zokusetha i-VPS. Ngithanda ukukholwa ukuthi usuwazi konke. Ngoxhumo olukude, ngidala umsebenzisi omusha kuseva.

adduser vimssh

Ngenza okhiye bokuxhumana be-ssh ku-hardware yethu.

ssh-keygen

Futhi ngiwakopishela kuseva yethu.

ssh-copy-id [email protected]

Ku-hardware yethu, ngidala uxhumano oluzenzakalelayo lwe-ssh kuwo wonke ama-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

Naka i-port 8083: inquma ukuthi iyiphi imbobo engizoyisebenzisa ukuxhuma nge-ssh ehlehlayo. Yengeze ekuqaliseni futhi uqale.

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

Ungakwazi nokubona isimo:

sudo systemctl status autossh.service

Manje, kuseva yethu ye-VPS, uma sigijima:

ssh -p 8083 khadas@localhost

Bese ngifika esivivinyweni sami se-hardware. Futhi kusukela ku-hardware ngingakwazi futhi ukuthumela izingodo nanoma iyiphi idatha nge-ssh kuseva yami, okuyinto elula kakhulu.

Ukuhlanganisa konke

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE
Iyavula, asiqale ukuthuthukiswa nokulungisa iphutha

Phew, kunjalo, ngichaze wonke ama-node. Manje sekuyisikhathi sokuhlanganisa konke. Ungabona ikhodi khona lapha.

Iphuzu elibalulekile elinekhodi: Le phrojekthi ingase ingaqali kanje, ngoba yakhelwe umsebenzi othile, wesakhiwo esithile. Ngisho noma nginikeza ikhodi yomthombo, ngisazochaza izinto ezibaluleke kakhulu lapha, khona kanye embhalweni, ngaphandle kwalokho akuqondakali ngokuphelele.

Ekuqaleni, ngiqala i-gps, i-gpio futhi ngethula intambo yesihleli ehlukile.

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

Isihleli silula: kubukeka sengathi sesifikile isikhathi sokuthumela imilayezo nokuthi siyini isimo sephutha samanje. Uma kunefulegi lephutha, sizobe sicwayiza 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)

Ingxenye enzima kakhulu yale phrojekthi ukugcina ukuxhumana kwe-ssh okuphambene nokuhlolwa ngakunye. Ukuhlola ngakunye kufaka phakathi ukulungisa kabusha isango elizenzakalelayo kanye neseva ye-DNS. Njengoba noma kunjalo kungekho ofundayo, yazini ukuthi isitimela asigibeli ezinsimbini zokhuni. Noma ubani othola iqanda le-Easter uthola uswidi.

Ukwenza lokhu, ngakha ithebula lomzila elihlukile -set-mark 0x2 kanye nomthetho wokuqondisa kabusha ithrafikhi.

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

Ungafunda kabanzi mayelana nokuthi isebenza kanjani funda kulesi sihloko.

Ngemuva kwalokho ngingena ku-loop engapheli, lapho isikhathi ngasinye sithola uhlu lwamamodemu axhunyiwe (ukuthola ukuthi ukucushwa kwenethiwekhi kuye kwashintsha ngokuzumayo).

network_list = getNetworklist()

Ukuthola uhlu lwezindawo zokusebenzelana zenethiwekhi 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

Ngemva kokuthola uhlu, ngibeka amakheli e-IP kuzo zonke izixhumanisi, njengoba ngibonise esithombeni esahlukweni mayelana nemodemu.

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

Bese ngivele ngidlule ku-interface ngayinye ngeluphu. Futhi ngimisa isikhombimsebenzisi ngasinye.

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

Ngihlola isixhumi esibonakalayo ukuze sisebenze, uma ingekho inethiwekhi, bese ngikhiqiza amaphutha. Uma kunenethiwekhi, sekuyisikhathi sokuthatha isinyathelo!

Lapha ngilungisa umzila we-ssh kulesi sixhumi esibonakalayo (uma singenziwanga), thumela amaphutha kuseva uma isikhathi sesifikile, thumela izingodo futhi ekugcineni usebenzise i-speedtest futhi ulondoloze izingodo kufayela le-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()
#и далее тестируем скорость и сохраняем логи. 

Kuhle ukusho umsebenzi wokusetha i-ssh ehlanekezelwe.

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

Futhi-ke, udinga ukungeza bonke lobu buhle ekuqaliseni. Ukwenza lokhu ngidala ifayela:

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

Futhi ngibhala 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

Ngivula ukulayisha okuzenzakalelayo bese ngiyaqala!

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

Manje sengiyakwazi ukubona izingodo zalokho okwenzekayo ngisebenzisa umyalo:

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

Imiphumela

Nokho, manje okubaluleke kakhulu ukuthi, kwenzekani ngenxa yalokho? Nawa amagrafu ambalwa engikwazile ukuwathwebula ngesikhathi sokuthuthukisa nokulungisa iphutha. Amagrafu akhiwe kusetshenziswa i-gnuplot enombhalo olandelayo.

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

Okuhlangenwe nakho kokuqala kwakune-opharetha ye-Tele2, engayiqhuba izinsuku ezimbalwa.

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Lapha ngisebenzise iseva yokulinganisa enamandla. Izilinganiso zesivinini ziyasebenza, kodwa zishintshashintsha kakhulu, kodwa inani elithile elimaphakathi lisabonakala, futhi lokhu kungatholwa ngokuhlunga idatha, isibonelo, ngesilinganiso esihambayo.

Kamuva ngakha inqwaba yamagrafu kwabanye opharetha bezingcingo. Kulokhu, kwase kuneseva eyodwa yokuhlola, futhi imiphumela nayo yayithakazelisa kakhulu.

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Njengoba ubona, isihloko sibanzi kakhulu ocwaningweni nasekucutshungulweni kwale datha, futhi ngokusobala asihlali amaviki ambalwa omsebenzi. Kodwa…

Umphumela womsebenzi

Umsebenzi waqedwa kungazelelwe ngenxa yezimo ezingaphezu kwamandla ami. Obunye bobuthakathaka bale phrojekthi, ngokombono wami oqondile, kwakuyimodemu, eyayingafuni ngempela ukusebenza kanyekanye namanye amamodemu, futhi yenza amaqhinga anjalo njalo lapho ilayishwa. Ngalezi zinhloso, kunenombolo enkulu yamanye amamodeli emodemu; ngokuvamile asevele efomethi ye-Mini PCI-e futhi afakwe ngaphakathi kwedivayisi futhi kulula kakhulu ukuwalungiselela. Kodwa leyo indaba ehluke ngokuphelele. Lo msebenzi wawuthakazelisa futhi ngajabula kakhulu ngokuthi ngakwazi ukuhlanganyela kuwo.

Ukuhlola isivinini ngesikhathi esisodwa kumamodemu ambalwa e-LTE

Source: www.habr.com

Engeza amazwana