Panguva yekuvharirwa, ndakapihwa kuti nditore chikamu mukugadzirwa kwemudziyo wekuyera kumhanya kwemamodemu eLTE kune akati wandei ma cellular opareta.
Mutengi aida kuongorora kumhanya kweakasiyana siyana enharembozha munzvimbo dzakasiyana siyana kuitira kuti akwanise kunzwisisa kuti ndeipi nharembozha yainyanya kumunakira pakuisa michina uchishandisa LTE yekubatanidza, semuenzaniso, kutepfenyura kwevhidhiyo. Panguva imwecheteyo, dambudziko racho raifanira kugadziriswa nyore nyore uye zvakachipa sezvinobvira, pasina michina inodhura.
Ini ndichataura ipapo ipapo kuti basa racho harisi iro rakapfava uye rakanyanyisa ruzivo-rakawanda; Ini ndichakuudza kuti ndeapi matambudziko andakasangana nawo uye kuti ndakaagadzirisa sei. Saka, handei.
taura pfungwa
Kuyera kumhanya kwekubatana kweLTE inyaya yakaoma kwazvo: iwe unofanirwa kusarudza iyo yakakodzera michina uye yekuyera maitiro, uye zvakare kuve nekunzwisisa kwakanaka kweiyo topology uye kushanda kweserura network. Uyezve, kumhanya kunogona kupesvedzerwa nezvinhu zvakati wandei: huwandu hwevanyoreri pasero, mamiriro ekunze, kunyangwe kubva pasero kuenda kune sero kumhanya kunogona kusiyanisa zvakanyanya nekuda kwetiweki topology. Kazhinji, iri idambudziko nenhamba huru yezvisingazivikanwe, uye chete telecom opareta anogona kurigadzirisa nemazvo.
Pakutanga, mutengi aingoda kutyaira mutakuri nenhare dzevashandisi, tora zviyero zvakananga parunhare uye wobva wanyora pasi mhedzisiro yekuyerwa kwekumhanya mubhuku rekunyorera. Mhinduro yangu yekuyera kumhanya kwelte network, kunyangwe isiri yakanaka, inogadzirisa dambudziko.
Nekuda kwekushaikwa kwenguva, ndakaita sarudzo kwete dzekuitira nyore kana kuita, asi ndichifarira kukurumidza kwebudiriro. Semuenzaniso, reverse ssh yakashandiswa kuwana kure kure, pane iyo inonyanya kushanda VPN, kuitira kuchengetedza nguva yekumisikidza sevha uye mutengi wega wega.
Basa reunyanzvi
Sezvakataurwa munyaya yacho
Iro tekinoroji basa raive rakareruka, ini ndichariwedzera zvishoma kuitira kunzwisisa kwekupedzisira mushandisi. Sarudzo yehunyanzvi mhinduro uye midziyo yakarairwa nemutengi. Saka, iyo tekinoroji yakatarwa pachayo, mushure mezvose zvibvumirano:
Kubva pane imwe bhodhi komputa vim2 gadzira yekumhanyisa tester yekubatanidza lte kuburikidza neH modemuawei e3372h - 153 akati wandei telecom operators (kubva kune imwe kusvika n). Izvo zvinodikanwa zvakare kugamuchira marongero kubva kune GPS inogamuchira yakabatana kuburikidza neUART. Ita zviyero zvekumhanya uchishandisa sevhisi
www.avapensuit.com wozviisa mutafura sezvizvi:
Tafura mu csv format. Zvadaro tumira chiratidzo ichi ne-e-mail maawa matanhatu oga oga. Kana paine zvikanganiso, blink iyo LED yakabatana neGPIO.
Ndakatsanangura maitiro ehunyanzvi mune fomu yemahara, mushure mekubvumidzwa kwakawanda. Asi revo yebasa iri kutooneka. Vhiki yakapihwa zvese. Asi chokwadi chakatora mavhiki matatu. Izvi zviri kurangarira chokwadi chekuti ndakaita izvi chete mushure mebasa rangu guru uye pakupera kwevhiki.
Pano ini ndinoda zvakare kukwevera pfungwa kune chokwadi chekuti mutengi akabvumirana pachine nguva nezve kushandiswa kweyero yekuyeresa sevhisi uye hardware, izvo zvakanyanya kuderedza kugona kwangu. Mari yacho yaingovewo shoma saka hapana chaitengwa. Saka taifanira kutamba tichitevedzera mitemo iyi.
Architecture uye budiriro
Chirongwa chacho chiri nyore uye chiri pachena. Naizvozvo, ini ndichaisiya isina chero yakakosha mhinduro.
Ndakasarudza kuita chirongwa chese mupython, zvisinei nekuti ndakanga ndisina ruzivo rwekuvandudza mumutauro uyu zvachose. Ndakazvisarudza nekuti pakanga paine boka remienzaniso yakagadzirwa-yakagadzirwa uye mhinduro dzaigona kukurumidzira budiriro. Naizvozvo, ndinokumbira vese vanogadzira mapurogiramu kuti vasapopore ruzivo rwangu rwekutanga rwekugadzira python, uye ndinogara ndichifara kunzwa kutsoropodzwa kunovaka kuti ndivandudze hunyanzvi hwangu.
Zvakare mukuita ndakaona kuti python ine maviri anomhanya vhezheni 2 ne3, semhedzisiro ndakagara pane yechitatu.
Hardware nodes
Single-plate vim2
Ndakapihwa komputa ine-bhodhi semuchina wangu mukuru
Yakanakisa, ine simba midhiya processor yeimba yakangwara uye SMART-TV, asi yakanyanya kusakodzera basa iri, kana, ngatiti, isina kukodzera. Semuenzaniso, iyo huru OS ndeye Android, uye Linux ndeyechipiri OS, uye naizvozvo hapana anovimbisa kushanda kwepamusoro-soro kwemanodhi ose uye vatyairi pasi peLinux. Uye ndinofungidzira kuti mamwe ematambudziko aienderana neiyo USB madhiraivha epuratifomu iyi, saka modem haina kushanda sezvaitarisirwa pabhodhi iri. Iyo ine zvakare yakashata uye yakapararira magwaro, saka kuvhiya kwega kwega kwakatora nguva yakawanda kuchera kuburikidza nemadhokisi. Kunyangwe basa rakajairika neGPIO rakatora ropa rakawanda. Semuenzaniso, zvakanditorera maawa akati wandei kuseta iyo LED. Asi, kuve nechinangwa, zvaive zvisina kukosha kuti yaive yerudzii-bhodhi, chinhu chikuru ndechekuti yakashanda uye pakanga paine USB ports.
Kutanga, ndinofanira kuisa Linux pane iyi bhodhi. Kuti ndisatsvage masango ezvinyorwa zvemunhu wese, uye zvakare kune avo vanozobata neino-bhodhi system, ndiri kunyora chitsauko chino.
Pane nzira mbiri dzekuisa Linux: pane yekunze SD kadhi kana pane yemukati MMC. Ndakapedza manheru ndichiedza kufunga kuti ndingaite sei kuti ishande nekadhi, saka ndakasarudza kuiisa paMMC, kunyange pasina mubvunzo zvingava nyore zvikuru kushanda nekadhi rekunze.
Nezve firmware
- Tool Pin GND: <—> Pin17 yeVIMs's GPIO
- Turusi Pin TXD: <—> Pin18 yeVIMs's GPIO (Linux_Rx)
- Turusi Pini RXD: <—> Pin19 yeVIMs's GPIO (Linux_Tx)
- Tool Pin VCC: <—> Pin20 yeVIMs's GPIO
Mushure meizvozvo, ndakadhawunirodha firmware
Kuti ndiise iyi firmware, ndinoda zvekushandisa. Mamwe mashoko pamusoro peizvi
git clone https://github.com/khadas/utils
cd /path/to/utils
sudo ./INSTALL
Aaand... Hapana chinoshanda. Ndakaita maawa mashoma ndichigadzirisa zvinyorwa zvekuisa kuti zvese zvindiisire nemazvo. Handiyeuke zvandakaita ikoko, asi paivawo nesekisi yaiva nemabhiza. Saka chenjera. Asi pasina izvi zvinoshandiswa hapana chikonzero chekutambudza vim2 mberi. Zviri nani kuti usambokanganisika naye zvachose!
Mushure memadenderedzwa manomwe egehena, script gadziriso uye kuisirwa, ndakagamuchira pasuru yezvishandiso zvekushanda. Ini ndakabatanidza bhodhi kuburikidza ne USB kune yangu Linux komputa, uye zvakare ndakabatanidza iyo UART zvinoenderana nedhirowa riri pamusoro.
Ndiri kuseta yangu yandinoda minicom terminal yekumhanyisa ye115200, isina hardware uye software kukanganisa kutonga. Uye ngatitangei.
Pakurodha VIM2 muUART terminal, ndinodzvanya kiyi, senge spacebar, kuti ndimise kurodha. Mushure memutsara unooneka
kvim2#
Ini ndinoisa murairo:
kvim2# run update
Pamugadziri watiri kurodha, ini ndinoisa:
burn-tool -v aml -b VIM2 -i VIM2_Ubuntu-server-bionic_Linux-4.9_arm64_EMMC_V20191231.img
Ndizvozvo, phew. Ndakatarisa, pane Linux pabhodhi. Login/password khadas:khadas.
Mushure meizvozvo, mamwe madiki ekutanga marongero. Kuti uwedzere basa, ndinodzima password ye sudo (hongu, isina kuchengetedzeka, asi iri nyore).
sudo visudo
Ini ndinogadzirisa mutsara kune fomu uye chengetedza
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
Zvadaro ndinoshandura nzvimbo yazvino kuitira kuti nguva iri muMoscow, kana zvisina kudaro ichava muGreenwich.
sudo timedatectl set-timezone Europe/Moscow
kana
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Kana iwe ukaona zvakaoma, saka usashandise bhodhi iri; Raspberry Pi iri nani. Honestly.
Modem Huawei e3372h - 153
Iyi modem yaive sosi yakakosha yeropa kwandiri, uye, chokwadi, yakave iyo bhodhoro reprojekiti yese. Kazhinji, zita rekuti "modemu" yezvishandiso izvi hariratidzi chinangwa chebasa zvachose: iyi isanganiswa ine simba, iyi chidimbu chehardware ine mudziyo unoumbwa unonyepedzera kunge CD-ROM kuitira kuisa madhiraivha, uye wozochinja kune network kadhi modhi.
Architecturally, kubva pakuona kwemushandisi weLinux, mushure mezvirongwa zvose, zvinoratidzika sezvizvi: mushure mekubatanidza modem, ndine eth * network interface, iyo kuburikidza ne dhcp inogamuchira IP kero 192.168.8.100, uye gedhi rakagadziriswa. is 192.168.8.1.
Uye nguva inonyanya kukosha! Iyi modem modhi haigone kushanda mune modem mode, iyo inodzorwa neAT mirairo. Zvese zvingave zviri nyore, gadzira PPP yekubatanidza kune yega modem uye wobva washanda navo. Asi mune yangu, "iye" (chaizvoizvo, Linux diver maererano nemitemo yeudev), inogadzira eth interface uye inopa IP kero kwairi kuburikidza nedhcp.
Kuti udzivise kuwedzera kuvhiringidzika, ndinokurudzira kukanganwa izwi rekuti "modem" uye kutaura kadhi network uye gedhi, nekuti muchidimbu, zvakafanana nekubatanidza kadhi retiweki nyowani negedhi.
Kana pane modem imwe chete, izvi hazvikonzeri matambudziko akakosha, asi kana paine anopfuura imwe, iyo n-zvidimbu, inotevera network inobuda.
Kureva, n makadhi etiweki, ane kero yeIP yakafanana, imwe neimwe ine gedhi rakafanana. Asi muchokwadi, imwe neimwe yadzo yakabatana kune yayo opareta.
Pakutanga, ini ndaive nemhinduro yakapusa: kushandisa ifconfig kana ip kuraira, dzima zvese zvinopindirana uye ingobatidza imwe nekuiedza. Mhinduro yaive yakanaka kune wese munhu, kunze kwekunge panguva yekuchinja ini handina kukwanisa kubatana kune mudziyo. Uye sezvo kuchinjika kuchiwanzo uye nekukurumidza, ini ndakanga ndisina mukana wekubatana zvachose.
Naizvozvo, ini ndakasarudza nzira yekuchinja nemaoko kero dzeIP dzemodemu uyezve kutyaira traffic uchishandisa marongero enzira.
Uku kwakanga kusiri kuguma kwematambudziko angu nemamodemu: kana matambudziko emagetsi, akadonha, uye simba rakanaka rakagadzika remagetsi ku USB hub raidiwa. Ndakagadzirisa dambudziko iri nekuomesa simba rakananga kune hub. Rimwe dambudziko randakasangana naro uye rakaparadza purojekiti yese: mushure mekutangazve kana kutonhora kutanga kwechigadzirwa, kwete ese modem akaonekwa uye kwete nguva dzose, uye ini handina kukwanisa kuona kuti nei izvi zvakaitika uye nei algorithm. Asi zvinhu zvekutanga kutanga.
Kuti modem ishande nemazvo, ndakaisa iyo usb-modeswitch package.
sudo apt update
sudo apt install -y usb-modeswitch
Mushure meizvozvo, mushure mekubatanidza, iyo modem inozoonekwa uye nekugadziriswa neiyo udev subsystem. Ndinotarisa nekungobatanidza modem uye kuona kuti network inoonekwa.
Rimwe dambudziko randakanga ndisingakwanisi kugadzirisa: ndingawana sei zita remushandisi watiri kushanda naye kubva modem iyi? Zita remushandisi ririmomodemu web interface pa192.168.8.1. Iri peji rewebhu rine simba rinogashira data kuburikidza neAjax zvikumbiro, saka kungo wgeta peji uye kupatsanura zita hazvishande. Saka ndakatanga kutarisa magadzirirwo ewebhu peji, nezvimwe, uye ndakaona kuti ndanga ndichiita zvimwe zvisina maturo. Nekuda kweizvozvo, akapfira mate, uye mushandisi akatanga kugamuchira achishandisa Speedtest API pachayo.
Zvakawanda zvingave nyore kana modem yakawana kuburikidza neAT mirairo. Zvingave zvichigoneka kuigadzirisa zvakare, kugadzira ppp yekubatanidza, kugovera IP, kuwana telecom opareta, nezvimwe. Asi shuwa, ndiri kushanda nezvandakapihwa.
GPS
GPS inogamuchira yandakapihwa yaive neUART interface uye simba. Yakanga isiri iyo yakanakisa mhinduro, asi yaive ichiri kushanda uye iri nyore. Mugamuchiri aitarisa zvakadai.
Kutaura chokwadi, iyi yaive nguva yangu yekutanga kushanda neGPS inogamuchira, asi sezvandaitarisira, zvinhu zvose zvakafungwa kwatiri kare kare. Saka isu tinongoshandisa yakagadzirira-yakagadzirwa mhinduro.
Kutanga, ndinogonesa uart_AO_B (UART_RX_AO_B, UART_TX_AO_B) kubatanidza GPS.
khadas@Khadas:~$ sudo fdtput -t s /dtb.img /serial@c81004e0 status okay
Mushure mezvo ndinoongorora kubudirira kwekushanda.
khadas@Khadas:~$ fdtget /dtb.img /serial@c81004e0 status
okay
Uyu murairo sezviri pachena unogadzirisa devtree panhunzi, iyo iri nyore kwazvo.
Mushure mekubudirira kwekuita uku, tangazve uye isa iyo GPS daemon.
khadas@Khadas:~$ sudo reboot
Kuisa iyo GPS daemon. Ini ndinoisa zvese uye ndozvicheka nekukasira kuti ndiwedzere kugadzirisa.
sudo apt install gpsd gpsd-clients -y
sudo killall gpsd
/* GPS daemon stop/disable */
sudo systemctl stop gpsd.socket
sudo systemctl disable gpsd.socket
Kugadzirisa faira rezvigadziriso.
sudo vim /etc/default/gpsd
Ndiri kuisa UART iyo GPS icharembera.
DEVICES="/dev/ttyS4"
Uye zvino tinobatidza zvese uye totanga.
/* GPS daemon enable/start */
sudo systemctl enable gpsd.socket
sudo systemctl start gpsd.socket
Mushure meizvozvo, ini ndinobatanidza iyo GPS.
Iyo GPS waya iri mumaoko angu, iyo UART debugger waya inoonekwa pasi peminwe yangu.
Ini ndinotangazve uye ndinotarisa kushanda kweGPS ndichishandisa chirongwa chegpsmon.
Iwe haugone kuona ma satellite mune ino skrini, asi iwe unogona kuona kutaurirana neGPS inogamuchira, uye izvi zvinoreva kuti zvese zvakanaka.
Mupython, ndakaedza sarudzo dzakawanda dzekushanda nedaemon iyi, asi ndakagara pane iyo yakashanda nemazvo nepython 3.
Ndinoisa raibhurari inodiwa.
sudo -H pip3 install gps3
Uye ndinoveza kodhi yebasa.
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
Kana ndichida kuwana marongero, izvi zvinoitwa nekufona kunotevera:
longitude, latitude = getPositionData(agps_thread)
Uye mukati me1-10 masekondi ini ndichawana iyo kurongeka kana kwete. Hongu, ndakaedza gumi kuti ndiwane zvinorongeka. Haisi yakakwana, yakakombama uye yakashata, asi inoshanda. Ndakafunga kuita izvi nekuti GPS inogona kusatambira zvakanaka uye isingagamuchire data. Kana iwe ukamirira kuti ugamuchire data, saka kana ukashanda mukamuri iri kure, chirongwa chinotonhora munzvimbo ino. Naizvozvo, ndakashandisa iyi inelegant sarudzo.
Muchidimbu, kana paine nguva yakawanda, zvaizogoneka kugashira data kubva kuGPS zvakananga kuburikidza neUART, patsanura mune imwe shinda uye kushanda nayo. Asi pakanga pasina nguva zvachose, saka kodhi ine hutsinye yakashata. Uye hongu, handinyare.
Chiedza-chinoburitsa diode
Kubatanidza LED kwaive nyore uye kwakaoma panguva imwe chete. Dambudziko guru nderekuti nhamba yepini muhurongwa haienderane nenhamba yepini pabhodhi uye nekuti zvinyorwa zvakanyorwa neruboshwe. Kuti uenzanise nhamba yepini yehardware uye nhamba yepini muOS, unofanirwa kumhanya kuraira:
gpio readall
Tafura yepini inonyorerana muhurongwa uye pabhodhi icharatidzwa. Mushure mezvo ini ndinogona kutoshandisa pini muOS pachayo. Mune mhaka yangu iyo LED yakabatana ne GPIOH_5.
Ini ndinoshandura iyo GPIO pini kune inobuda maitiro.
gpio -g mode 421 out
Ndinonyora pasi zero.
gpio -g write 421 0
Ndinonyora pasi imwe.
gpio -g write 421 1
Zvese zvakavhenekerwa, mushure mekunyora "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)
Zvino, kana paine zvikanganiso, ini ndinodaidza error_blink() uye iyo LED inopenya zvinoyevedza.
Software nodes
Speedtest API
Mufaro mukuru kuti iyo speedtest.net sevhisi ine yayo python-API, unogona kutarisa
Chinhu chakanaka ndechekuti kune masource code anogonawo kutariswa. Maitiro ekushanda neiyi API (mienzaniso yakapusa) inogona kuwanikwa mukati
Ini ndinoisa raibhurari yepython nemurairo unotevera.
sudo -H pip3 install speedtest-cli
Semuenzaniso, iwe unogona kunyange kuisa yekumhanyisa tester muUbuntu zvakananga kubva kune software. Iyi ndiyo yakafanana python application, iyo inogona kubva yatangwa yakananga kubva kune console.
sudo apt install speedtest-cli -y
Uye kuyera kumhanya kwako kweInternet.
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
Somugumisiro, sezvandakaita. Ini ndaifanira kupinda mumakodhi makodhi eiyi yekumhanyisa bvunzo kuti ndiwedzere kuishandisa zvizere muprojekiti yangu. Rimwe remabasa akanyanya kukosha kuwana zita reiyo telecom operator kuitira kuritsiva mundiro.
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"
#тут идет запись в файл логов
Pano, zvakare, zvese zvakazove zvisiri nyore, kunyangwe zvingaite sezviri nyore. Pakutanga, maseva parameter yaive yakaenzana ne [], vanodaro, sarudza yakanakisa server. Nekuda kweizvozvo, ini ndaive nemasevha asina kujairika, uye, sezvaungafungidzira, kukurumidza kushanduka. Iyi inyaya yakaoma kunzwisisa, uchishandisa yakagadziriswa sevha, kana zvirizvo, static kana simba, inoda kutsvagisa. Asi heino muenzaniso wekumhanyisa kuyerwa magirafu kune Beeline opareta kana uchisarudza zvine simba sevha yekuyedza uye yakagadziriswa yakamira.
Mhedzisiro yekuyera kumhanya kana uchisarudza ine simba server.
Mhedzisiro yekumhanyisa kuyedzwa, neimwe yakanyatsosarudzwa imwe sevha.
Panguva yekuedzwa, kune "fur" munzvimbo mbiri, uye inoda kubviswa uchishandisa nzira dzemasvomhu. Asi nesevha yakagadziriswa ishoma zvishoma uye amplitude yakanyanya kugadzikana.
Kazhinji, iyi inzvimbo yekutsvakurudza kukuru. Uye ini ndaizoyera kumhanya kweseva yangu ndichishandisa iperf utility. Asi isu tinonamatira kune tekinoroji yakatarwa.
Kutumira tsamba uye kukanganisa
Kuti nditumire tsamba, ndakaedza gumi nemaviri sarudzo dzakasiyana, asi pakupedzisira ndakagadzirisa pane zvinotevera. Ndakanyoresa bhokisi retsamba paYandex ndokubva ndatora
matanda acho akatumirwa zvichienderana neanoronga, kana paine kubatana, maawa matanhatu oga oga: na6 o'clock, 00 am, 06 masikati uye 12 pm. Akaitumira sezvizvi.
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
Mhosho dzakatumirwawo pakutanga. Kutanga, ivo vakaunganidzwa mune rondedzero, vozotumirwa zvakare vachishandisa scheduler, kana paine chinongedzo. Zvisinei, ipapo matambudziko akamuka nechokwadi chokuti Yandex ine muganhu pahuwandu hwemashoko anotumirwa pazuva (izvi zvinorwadza, kusuruvara uye kunyadziswa). Sezvo paigona kuve nenhamba huru yekukanganisa kunyangwe paminiti, taifanira kusiya kutumira zvikanganiso netsamba. Saka ramba uchifunga kana uchingotumira ruzivo nezve dambudziko rakadaro kuburikidza neYandex masevhisi.
Feedback server
Kuti ndikwanise kuwana chidimbu chiri kure chehardware uye kukwanisa kuigadzirisa uye kuigadzirisa zvakare, ndaida sevha yekunze. Kazhinji, kuve kwakanaka, zvingave zvakanaka kutumira data rese kune server uye kuvaka ese akanaka magirafu muwebhu interface. Asi kwete zvose panguva imwe chete.
ZveVPS ndakasarudza
Senzira yekutaurirana nehardware, vim2 yakasarudza reverse ssh yekubatanidza uye, sekuratidzira kwakaratidza, haisi iyo yakanyanya kunaka. Kana iyo yekubatanidza ikarasika, sevha inobata chiteshi uye hazvibviri kubatana kuburikidza nayo kwenguva yakati. Naizvozvo, zvichiri nani kushandisa dzimwe nzira dzekukurukurirana, semuenzaniso VPN. Mune ramangwana ndaida kuchinjira kuVPN, asi ndakanga ndisina nguva.
Ini handisi kuzopinda muzvinyorwa zvekumisikidza firewall, kudzora kodzero, kudzima midzi ssh kubatana uye mamwe matruisms ekumisikidza VPS. Ndinoda kutenda kuti iwe unotoziva zvese. Kune yekubatanidza kure, ini ndinogadzira mushandisi mutsva pane server.
adduser vimssh
Ini ndinogadzira ssh makiyi ekubatanidza pane yedu Hardware.
ssh-keygen
Uye ini ndinozvikopa kune yedu server.
ssh-copy-id [email protected]
Pane yedu hardware, ini ndinogadzira otomatiki reverse ssh yekubatanidza pabhoti yega yega.
[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
Teerera kuchiteshi 8083: inosarudza kuti ndechipi chiteshi chandichashandisa kubatanidza kuburikidza nereverse ssh. Wedzera iyo kune yekutanga uye tanga.
sudo systemctl enable autossh.service
sudo systemctl start autossh.service
Unogona kuona chimiro:
sudo systemctl status autossh.service
Zvino, pane yedu VPS server, kana tikamhanya:
ssh -p 8083 khadas@localhost
Ndobva ndasvika kune yangu yekuyedza chidimbu chehardware. Uye kubva kune Hardware ini ndinogona zvakare kutumira matanda uye chero data kuburikidza ne ssh kune yangu server, iyo iri nyore kwazvo.
Kuisa zvose pamwe chete
Kubatidza, ngatitange kusimudzira uye kugadzirisa
Phew, ndizvozvo, ndakatsanangura node dzese. Iye zvino yave nguva yekuisa zvese pamwe chete. Iwe unogona kuona iyo kodhi
Chinhu chakakosha chine kodhi: Iyi purojekiti inogona kusatanga sezvizvi, nekuti yakarongedzerwa kune rimwe basa, reimwe dhizaini. Kunyange zvazvo ini ndichipa kodhi yekodhi, ndicharamba ndichitsanangura zvinhu zvakakosha pano, mumashoko chaiwo, kana zvisina kudaro hazvinzwisisi zvachose.
Pakutanga, ini ndinotangisa gps, gpio uye kuvhura yakaparadzana scheduler tambo.
#запуск потока планировщика
pShedulerThread = threading.Thread(target=ShedulerThread, args=(1,))
pShedulerThread.start()
Iyo scheduler iri nyore: inotarisa kuona kana nguva yasvika yekutumira mameseji uye kuti chii chazvino chikanganiso chimiro. Kana paine chikanganiso mureza, ipapo isu blink 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)
Chikamu chakanyanya kuoma chechirongwa ichi kuchengetedza reverse ssh yekubatanidza kune yega bvunzo. Muedzo wega wega unosanganisira kugadzirisa zvakare gedhi rekutanga uye DNS server. Sezvo pasina anoverenga zvakadaro, ziva kuti chitima hachikwiri pamatanda emapuranga. Ani nani anowana zai reIsita anowana zvihwitsi.
Kuti ndiite izvi, ini ndinogadzira yakaparadzana tafura tafura -set-maka 0x2 uye mutemo wekutungamira traffic.
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")
Unogona kudzidza zvakawanda nezvekuti inoshanda sei
Mushure mezvo ini ndinopinda mune isingaperi loop, apo nguva imwe neimwe yatinowana rondedzero yeakabatana modem (kuti tizive kana network configuration yakangoerekana yachinja).
network_list = getNetworklist()
Kuwana rondedzero yetiweki interfaces kuri nyore.
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
Mushure mekugamuchira rondedzero, ndinoisa IP kero kune ese mainterfaces, sezvandakaratidza mumufananidzo muchitsauko nezve 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")
Ipapo ini ndinongo pfuura neimwe interface mune loop. Uye ini ndinogadzirisa imwe neimwe 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'")
Ini ndinotarisa iyo interface yekushanda, kana pasina network, ini ndinoburitsa zvikanganiso. Kana pane network, inguva yekuita!
Pano ini ndinogadzirisa ssh routing kune iyi interface (kana isati yaitwa), tumira zvikanganiso kune sevha kana nguva yasvika, tumira matanda uye pakupedzisira mhanya nekukurumidza uye chengetedza matanda kune csv faira.
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()
#и далее тестируем скорость и сохраняем логи.
Zvakakodzera kutaura basa rekumisikidza 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")
Uye zvechokwadi, iwe unofanirwa kuwedzera kunaka uku kwekutanga. Kuti ndiite izvi, ndinogadzira faira:
sudo vim /etc/systemd/system/modems_speedtest.service
Uye ndinonyora mairi:
[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
Ini ndinobatidza autoloading ndotanga!
sudo systemctl enable modems_speedtest.service
sudo systemctl start modems_speedtest.service
Ikozvino ndiri kuona matanda ezviri kuitika ndichishandisa murairo:
journalctl -u modems_speedtest.service --no-pager -f
Mhinduro
Zvakanaka, zvino chinonyanya kukosha ndechekuti, chii chakaitika semugumisiro? Heano mashoma magirafu andakakwanisa kutora panguva yekuvandudza uye kugadzirisa maitiro. Iwo magirafu akavakwa pachishandiswa gnuplot ine script inotevera.
#! /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"
Chiitiko chekutanga chaive neTele2 opareta, yandakaita kwemazuva akati wandei.
Pano ndakashandisa dhizaini yekuyera server. Yekumhanyisa kuyerwa kunoshanda, asi kuchinjika zvakanyanya, asi imwe avhareji kukosha ichiri kuoneka, uye izvi zvinogona kuwanikwa nekusefa iyo data, semuenzaniso, neavhareji inofamba.
Gare gare ndakagadzira akati wandei magirafu evamwe vafambisi venhare. Muchiitiko ichi, pakanga patova nesevha imwe yekuedza, uye migumisiro yacho yainakidzawo.
Sezvauri kuona, musoro wacho wakakura kwazvo pakutsvaga nekugadziriswa kweiyi data, uye zvakajeka haigare kwemavhiki mashoma ebasa. Asi…
Mhedzisiro yebasa
Basa racho rakangoerekana rapera nekuda kwemamiriro ezvinhu andakanga ndisingakwanisi kuita. Imwe yehutera hwepurojekiti iyi, mumaonero angu, yaive modem, iyo yaisanyatsoda kushanda panguva imwe chete nemamwe modem, uye yaiita matipi akadaro pese payaiiswa. Nezvinangwa izvi, kune nhamba huru yemamwe mamodemu modhi; kazhinji anenge atove muMini PCI-e fomati uye akaiswa mukati memudziyo uye ari nyore kugadzirisa. Asi iyo inyaya yakasiyana zvachose. Basa racho rainakidza uye ndakafara zvikuru kuti ndakakwanisa kutora chikamu mariri.
Source: www.habr.com