KarantÄ«nas laikÄ man piedÄvÄja piedalÄ«ties LTE modemu Ätruma mÄrÄ«Å”anas ierÄ«ces izstrÄdÄ vairÄkiem mobilo sakaru operatoriem.
Klients vÄlÄjÄs novÄrtÄt dažÄdu telekomunikÄciju operatoru Ätrumu dažÄdÄs Ä£eogrÄfiskÄs vietÄs, lai varÄtu saprast, kurÅ” mobilo sakaru operators viÅam ir optimÄlÄkais, uzstÄdot LTE pieslÄgumu izmantojoÅ”o aprÄ«kojumu, piemÄram, video pÄrraidÄm. TajÄ paÅ”Ä laikÄ problÄma bija jÄatrisina pÄc iespÄjas vienkÄrÅ”Äk un lÄtÄk, bez dÄrga aprÄ«kojuma.
Uzreiz teikÅ”u, ka uzdevums nav no vienkÄrÅ”Äkajiem un zinÄÅ”anu ietilpÄ«gÄkajiem, pastÄstÄ«Å”u, ar kÄdÄm problÄmÄm saskÄros un kÄ tÄs atrisinÄju. TÄtad, ejam.
Piezīme
LTE savienojuma Ätruma mÄrÄ«Å”ana ir ļoti sarežģīts jautÄjums: jums ir jÄizvÄlas pareizais aprÄ«kojums un mÄrÄ«Å”anas tehnika, kÄ arÄ« labi jÄizprot mobilÄ tÄ«kla topoloÄ£ija un darbÄ«ba. TurklÄt Ätrumu var ietekmÄt vairÄki faktori: abonentu skaits ŔūnÄ, laika apstÄkļi, pat dažÄdÄs ŔūnÄs Ätrums var krasi atŔķirties tÄ«kla topoloÄ£ijas dÄļ. KopumÄ Å”Ä« ir problÄma ar lielu skaitu nezinÄmo, un tikai telekomunikÄciju operators var to pareizi atrisinÄt.
SÄkotnÄji klients vÄlÄjies tikai braukt ar kurjeru ar operatoru telefoniem, veikt mÄrÄ«jumus tieÅ”i telefonÄ un pÄc tam pierakstÄ«t piezÄ«mju grÄmatiÅÄ Ätruma mÄrÄ«jumu rezultÄtus. Mans risinÄjums LTE tÄ«klu Ätruma mÄrÄ«Å”anai, lai gan tas nav ideÄls, atrisina problÄmu.
Laika trÅ«kuma dÄļ lÄmumus pieÅÄmu nevis par labu ÄrtÄ«bÄm vai praktiskumam, bet gan par labu attÄ«stÄ«bas Ätrumam. PiemÄram, attÄlinÄtajai piekļuvei tika izmantots reversais ssh, nevis praktiskÄks VPN, lai ietaupÄ«tu laiku servera un katra atseviŔķa klienta iestatÄ«Å”anai.
Tehniskais uzdevums bija pavisam vienkÄrÅ”s, nedaudz izvÄrsÄ«Å”u gala lietotÄja izpratnei. Tehnisko risinÄjumu un aprÄ«kojuma izvÄli diktÄja pasÅ«tÄ«tÄjs. TÄtad pati tehniskÄ specifikÄcija pÄc visiem apstiprinÄjumiem:
BalstÄ«ts uz viena borta datora 2 izveidojiet Ätruma testeri LTE savienojumiem, izmantojot H modemusuawei e3372h - 153 vairÄki telekomunikÄciju operatori (no viena lÄ«dz n). Ir nepiecieÅ”ams arÄ« saÅemt koordinÄtas no GPS uztvÄrÄja, kas savienots, izmantojot UART. Veiciet Ätruma mÄrÄ«jumus, izmantojot pakalpojumu www.speedtest.net un ievieto tos tabulÄ, piemÄram:
Tabula csv formÄtÄ. PÄc tam nosÅ«tiet Å”o zÄ«mi pa e-pastu ik pÄc 6 stundÄm. Kļūdu gadÄ«jumÄ mirgojiet gaismas diode, kas ir savienota ar GPIO.
TehniskÄs specifikÄcijas aprakstÄ«ju brÄ«vÄ formÄ, pÄc daudziem saskaÅojumiem. Bet uzdevuma jÄga jau ir redzama. Visam tika dota nedÄļa. Bet patiesÄ«bÄ tas ilga trÄ«s nedÄļas. Tas tiek Åemts vÄrÄ, ka es to darÄ«ju tikai pÄc pamatdarba un brÄ«vdienÄs.
Å eit vÄlos vÄlreiz vÄrst uzmanÄ«bu uz to, ka klients iepriekÅ” vienojÄs par Ätruma mÄrÄ«Å”anas servisa un aparatÅ«ras izmantoÅ”anu, kas stipri ierobežoja manas iespÄjas. Budžets arÄ« bija ierobežots, tÄpÄc nekas Ä«paÅ”s netika iegÄdÄts. TÄpÄc mums bija jÄspÄlÄ pÄc Å”iem noteikumiem.
Arhitektūra un attīstība
ShÄma ir vienkÄrÅ”a un acÄ«mredzama. TÄpÄc atstÄÅ”u to bez Ä«paÅ”iem komentÄriem.
Es nolÄmu visu projektu Ä«stenot python, neskatoties uz to, ka man vispÄr nebija pieredzes attÄ«stÄ«ties Å”ajÄ valodÄ. IzvÄlÄjos, jo bija kaudze gatavu piemÄru un risinÄjumu, kas varÄtu paÄtrinÄt attÄ«stÄ«bu. TÄpÄc es lÅ«dzu visus profesionÄlos programmÄtÄjus nelamÄt manu pirmo pieredzi, izstrÄdÄjot python, un vienmÄr priecÄjos dzirdÄt konstruktÄ«vu kritiku, lai uzlabotu savas prasmes.
ArÄ« Å”ajÄ procesÄ atklÄju, ka python ir divas darbÄ«bas versijas 2 un 3, kÄ rezultÄtÄ es apmetos uz treÅ”o.
Aparatūras mezgli
Vienas plÄksnes vim2
Man kÄ galveno maŔīnu iedeva viena borta datoru 2
Lielisks, jaudÄ«gs multivides procesors viedajai mÄjai un SMART-TV, taÄu Å”im uzdevumam ÄrkÄrtÄ«gi nepiemÄrots vai, teiksim, slikti piemÄrots. PiemÄram, tÄ galvenÄ operÄtÄjsistÄma ir Android, un Linux ir sekundÄra operÄtÄjsistÄma, un attiecÄ«gi neviens negarantÄ visu Linux mezglu un draiveru kvalitatÄ«vu darbÄ«bu. Un pieļauju, ka dažas problÄmas bija saistÄ«tas ar Ŕīs platformas USB draiveriem, tÄpÄc modemi uz Ŕīs plates nestrÄdÄja kÄ cerÄts. Tam ir arÄ« ļoti slikta un izkaisÄ«ta dokumentÄcija, tÄpÄc katra darbÄ«ba prasÄ«ja daudz laika, rakÅÄjoties pa dokiem. Pat parasts darbs ar GPIO paÅÄma daudz asiÅu. PiemÄram, LED iestatÄ«Å”ana man prasÄ«ja vairÄkas stundas. Bet, lai bÅ«tu objektÄ«vi, principÄ nebija svarÄ«gi, kÄda veida vienplate tas ir, galvenais, ka tas strÄdÄja un bija USB porti.
PirmkÄrt, man ir jÄinstalÄ Linux Å”ajÄ platÄ. Lai visi, kÄ arÄ« tie, kas nodarbosies ar Å”o vienas tÄfeles sistÄmu, neapmeklÄtu dokumentÄciju, es rakstu Å”o nodaļu.
Ir divas Linux instalÄÅ”anas iespÄjas: ÄrÄjÄ SD kartÄ vai iekÅ”ÄjÄ MMC. Vakaru pavadÄ«ju, mÄÄ£inot izdomÄt, kÄ to panÄkt ar karti, tÄpÄc nolÄmu to instalÄt MMC, lai gan, bez Å”aubÄm, ar ÄrÄjo karti strÄdÄt bÅ«tu daudz vieglÄk.
Par programmaparatÅ«ru te greizi pateikts. Tulkoju no dÄ«vaina uz krievu valodu. Lai mirgotu plati, man ir jÄpievieno aparatÅ«ras UART. Savienoja to Å”Ädi.
RÄ«ka Pin GND: <ā> PIN17 no VIM GPIO
RÄ«ka PIN kods TXD: <ā> PIN18 no VIM GPIO (Linux_Rx)
Lai augÅ”upielÄdÄtu Å”o programmaparatÅ«ru, man ir vajadzÄ«gas utilÄ«tas. SÄ«kÄka informÄcija par Å”o Å”eit. Es neesmu mÄÄ£inÄjis to mirgot operÄtÄjsistÄmÄ Windows, taÄu man ir jÄpasaka daži vÄrdi par programmaparatÅ«ru operÄtÄjsistÄmÄ Linux. PirmkÄrt, es instalÄÅ”u utilÄ«tas saskaÅÄ ar instrukcijÄm.
git clone https://github.com/khadas/utils
cd /path/to/utils
sudo ./INSTALL
Ä un... Nekas nedarbojas. PÄris stundas pavadÄ«ju, rediÄ£Äjot instalÄcijas skriptus, lai man viss uzstÄdÄ«tos pareizi. Es neatceros, ko es tur darÄ«ju, bet bija arÄ« cirks ar zirgiem. TÄpÄc esiet uzmanÄ«gi. Bet bez Å”iem komunÄlajiem pakalpojumiem nav jÄgas mocÄ«t vim2 tÄlÄk. LabÄk ar viÅu nemaz nejaukÄties!
PÄc septiÅiem elles apļiem, skripta konfigurÄÅ”anas un instalÄÅ”anas es saÅÄmu darba utilÄ«tu paketi. Es pievienoju plati, izmantojot USB, savam Linux datoram, kÄ arÄ« pievienoju UART saskaÅÄ ar iepriekÅ” redzamo shÄmu.
Es iestatu savu iecienÄ«tÄko minicom terminÄli Ätrumam 115200 XNUMX bez aparatÅ«ras un programmatÅ«ras kļūdu kontroles. Un sÄksim.
IelÄdÄjot VIM2 UART terminÄlÄ«, es nospiežu taustiÅu, piemÄram, atstarpes taustiÅu, lai pÄrtrauktu ielÄdi. PÄc rindas parÄdÄ«Å”anÄs
kvim2#
Es ievadu komandu:
kvim2# run update
Uz resursdatora, no kura mÄs ielÄdÄjam, es izpildu:
burn-tool -v aml -b VIM2 -i VIM2_Ubuntu-server-bionic_Linux-4.9_arm64_EMMC_V20191231.img
Tas tÄ, fu. Es pÄrbaudÄ«ju, uz tÄfeles ir Linux. PieteikÅ”anÄs/parole khadas:khadas.
PÄc tam daži nelieli sÄkotnÄjie iestatÄ«jumi. TÄlÄkam darbam atspÄjoju sudo paroli (jÄ, ne droÅ”i, bet Ärti).
sudo visudo
RediÄ£Äju rindiÅu uz formu un saglabÄju
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
Tad es mainu paÅ”reizÄjo lokalizÄciju, lai laiks bÅ«tu MaskavÄ, pretÄjÄ gadÄ«jumÄ tas bÅ«s GriniÄÄ.
Ja jums tas ir grÅ«ti, neizmantojiet Å”o dÄli; Raspberry Pi ir labÄks. GodÄ«gi.
Modems Huawei e3372h ā 153
Å is modems man bija nozÄ«mÄ«gs asins avots, un patiesÄ«bÄ tas kļuva par visa projekta saÅ”aurinÄjumu. KopumÄ Å”o ierÄ«Äu nosaukums āmodemsā vispÄr neatspoguļo darba bÅ«tÄ«bu: Å”is ir jaudÄ«gs kombains, Å”ai aparatÅ«rai ir salikta ierÄ«ce, kas izliekas par CD-ROM, lai instalÄtu draiverus, un pÄc tam pÄrslÄdzas uz tÄ«kla kartes režīmu.
Arhitektoniski no Linux lietotÄja viedokļa pÄc visiem iestatÄ«jumiem izskatÄs Å”Ädi: pÄc modema pieslÄgÅ”anas man ir eth* tÄ«kla interfeiss, kas caur dhcp saÅem IP adresi 192.168.8.100, un noklusÄjuma vÄrteju. ir 192.168.8.1.
Un pats svarÄ«gÄkais brÄ«dis! Å is modema modelis nevar darboties modema režīmÄ, ko kontrolÄ AT komandas. Viss bÅ«tu daudz vienkÄrÅ”Äk, izveidojiet PPP savienojumus katram modemam un pÄc tam darbojieties ar tiem. Bet manÄ gadÄ«jumÄ āpatsā (precÄ«zÄk Linux nirÄjs pÄc udev noteikumiem) izveido eth interfeisu un caur dhcp tam pieŔķir IP adresi.
Lai izvairÄ«tos no turpmÄkas neskaidrÄ«bas, iesaku aizmirst vÄrdu āmodemsā un pateikt tÄ«kla karti un vÄrteju, jo bÅ«tÄ«bÄ tas ir kÄ jaunas tÄ«kla kartes savienoÅ”ana ar vÄrteju.
Ja ir viens modems, tas nerada Ä«paÅ”as problÄmas, bet, ja ir vairÄk nekÄ viens, proti, n-gabali, rodas Å”Äda tÄ«kla bilde.
Tas ir, n tÄ«kla kartes ar vienu un to paÅ”u IP adresi, katrai ar vienu un to paÅ”u noklusÄjuma vÄrteju. Bet patiesÄ«bÄ katrs no tiem ir savienots ar savu operatoru.
SÄkotnÄji man bija vienkÄrÅ”s risinÄjums: izmantojot komandu ifconfig vai ip, atspÄjojiet visas saskarnes un vienkÄrÅ”i ieslÄdziet vienu pÄc kÄrtas un pÄrbaudiet to. RisinÄjums bija labs visiem, izÅemot to, ka pÄrslÄgÅ”anas brīžos es nevarÄju izveidot savienojumu ar ierÄ«ci. Un tÄ kÄ pÄrslÄgÅ”anÄs notiek bieži un Ätri, man faktiski nebija iespÄjas izveidot savienojumu.
TÄpÄc es izvÄlÄjos ceļu manuÄli mainÄ«t modemu IP adreses un pÄc tam vadÄ«t trafiku, izmantojot marÅ”rutÄÅ”anas iestatÄ«jumus.
Ar to manas problÄmas ar modemiem nebeidzÄs: strÄvas problÄmu gadÄ«jumÄ tie nokrita, un bija nepiecieÅ”ama laba stabila baroÅ”ana USB centrmezglam. Es atrisinÄju Å”o problÄmu, pielodÄjot strÄvu tieÅ”i centrmezglam. VÄl viena problÄma, ar kuru es saskÄros un kas sabojÄja visu projektu: pÄc ierÄ«ces atsÄknÄÅ”anas vai aukstÄs palaiÅ”anas ne visi modemi tika atklÄti un ne vienmÄr, un es nevarÄju noteikt, kÄpÄc tas notika un pÄc kÄda algoritma. Bet vispirms vispirms.
Lai modems darbotos pareizi, es instalÄju usb-modeswitch pakotni.
PÄc tam, pÄc savienojuma izveides, udev apakÅ”sistÄma pareizi atklÄs un konfigurÄs modemu. Es pÄrbaudu, vienkÄrÅ”i pievienojot modemu un pÄrliecinoties, ka parÄdÄs tÄ«kls.
VÄl viena problÄma, kuru nevarÄju atrisinÄt: kÄ no Ŕī modema iegÅ«t tÄ operatora nosaukumu, ar kuru mÄs strÄdÄjam? Operatora nosaukums ir ietverts modema tÄ«mekļa saskarnÄ 192.168.8.1. Å Ä« ir dinamiska tÄ«mekļa lapa, kas saÅem datus, izmantojot Ajax pieprasÄ«jumus, tÄpÄc vienkÄrÅ”a lapas izveidoÅ”ana un nosaukuma parsÄÅ”ana nedarbosies. TÄ nu sÄku skatÄ«ties, kÄ izveidot web lapu utt., un sapratu, ka daru kaut kÄdas muļķības. RezultÄtÄ viÅÅ” izspļÄva, un operators sÄka saÅemt, izmantojot paÅ”u Speedtest API.
Daudz bÅ«tu vieglÄk, ja modemam bÅ«tu piekļuve, izmantojot AT komandas. VarÄtu to pÄrkonfigurÄt, izveidot ppp savienojumu, pieŔķirt IP, dabÅ«t telekomunikÄciju operatoru utt. Bet diemžÄl es strÄdÄju ar to, kas man ir dots.
GPS
Man pieŔķirtajam GPS uztvÄrÄjam bija UART interfeiss un jauda. Tas nebija labÄkais risinÄjums, taÄu tas joprojÄm bija praktiski lietojams un vienkÄrÅ”s. UztvÄrÄjs izskatÄ«jÄs apmÄram Å”Ädi.
GodÄ«gi sakot, Ŕī bija mana pirmÄ reize, kad strÄdÄju ar GPS uztvÄrÄju, bet, kÄ jau gaidÄ«ju, mums viss jau sen bija izdomÄts. TÄpÄc mÄs izmantojam tikai gatavus risinÄjumus.
PirmkÄrt, es iespÄjoju uart_AO_B (UART_RX_AO_B, UART_TX_AO_B), lai izveidotu savienojumu ar GPS.
khadas@Khadas:~$ sudo fdtput -t s /dtb.img /serial@c81004e0 status okay
PÄc tam es pÄrbaudu operÄcijas panÄkumus.
khadas@Khadas:~$ fdtget /dtb.img /serial@c81004e0 status
okay
Å Ä« komanda acÄ«mredzot rediÄ£Ä devtree lidojumÄ, kas ir ļoti Ärti.
PÄc veiksmÄ«gas Ŕīs darbÄ«bas pÄrstartÄjiet un instalÄjiet GPS dÄmonu.
khadas@Khadas:~$ sudo reboot
GPS dÄmona instalÄÅ”ana. Es visu instalÄju un nekavÄjoties nogriežu tÄlÄkai konfigurÄÅ”anai.
GPS vads ir manÄs rokÄs, UART atkļūdotÄja vadi ir redzami zem pirkstiem.
Es atsÄknÄju un pÄrbaudu GPS darbÄ«bu, izmantojot gpsmon programmu.
Å ajÄ ekrÄnuzÅÄmumÄ nav redzami satelÄ«ti, taÄu ir redzama saziÅa ar GPS uztvÄrÄju, un tas nozÄ«mÄ, ka viss ir kÄrtÄ«bÄ.
Python es izmÄÄ£inÄju daudzas iespÄjas darbam ar Å”o dÄmonu, taÄu es izvÄlÄjos to, kas darbojÄs pareizi ar python 3.
InstalÄju nepiecieÅ”amo bibliotÄku.
sudo -H pip3 install gps3
Un es veidoju darba kodu.
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
Ja man ir jÄsaÅem koordinÄtas, to var izdarÄ«t ar Å”Ädu zvanu:
longitude, latitude = getPositionData(agps_thread)
Un 1-10 sekunžu laikÄ es vai nu saÅemÅ”u koordinÄtu, vai nÄ. JÄ, man bija desmit mÄÄ£inÄjumi iegÅ«t koordinÄtas. Nav optimÄls, greizs un Ŕķībs, bet tas darbojas. Es nolÄmu to darÄ«t, jo GPS var slikti uztvert un ne vienmÄr saÅemt datus. Ja gaidÄt datu saÅemÅ”anu, tad, ja strÄdÄjat attÄlÄ telpÄ, programma Å”ajÄ vietÄ iesaldÄsies. TÄpÄc es ieviesu Å”o neeleganto variantu.
PrincipÄ, ja bÅ«tu vairÄk laika, varÄtu saÅemt datus no GPS tieÅ”i caur UART, parsÄt atseviÅ”Ä·Ä pavedienÄ un strÄdÄt ar tiem. Bet laika nebija vispÄr, tÄpÄc brutÄli neglÄ«ts kods. Un jÄ, man nav kauna.
LED
LED pievienoÅ”ana bija vienkÄrÅ”a un sarežģīta vienlaikus. GalvenÄs grÅ«tÄ«bas rada tas, ka PIN numurs sistÄmÄ neatbilst PIN numuram uz tÄfeles un tÄpÄc, ka dokumentÄcija ir rakstÄ«ta ar kreiso roku. Lai salÄ«dzinÄtu aparatÅ«ras PIN numuru un PIN numuru operÄtÄjsistÄmÄ, jums ir jÄizpilda komanda:
gpio readall
Tiks parÄdÄ«ta tapu atbilstÄ«bas tabula sistÄmÄ un uz tÄfeles. PÄc tam es jau varu darbinÄt tapu paÅ”Ä OS. ManÄ gadÄ«jumÄ LED ir savienots ar GPIOH_5.
Tagad kļūdu gadÄ«jumÄ izsaucu error_blink() un LED smuki mirgos.
Programmatūras mezgli
Speedtest API
Liels prieks, ka speedtest.net pakalpojumam ir savs python-API, varat apskatīties GitHub.
Labi ir tas, ka ir pirmkodi, kurus var arÄ« apskatÄ«t. KÄ strÄdÄt ar Å”o API (vienkÄrÅ”us piemÄrus), var atrast attiecÄ«gÄ sadaļa.
Es instalÄju python bibliotÄku ar Å”Ädu komandu.
sudo -H pip3 install speedtest-cli
PiemÄram, jÅ«s pat varat instalÄt Ätruma pÄrbaudÄ«tÄju Ubuntu tieÅ”i no programmatÅ«ras. Å Ä« ir tÄ pati python lietojumprogramma, kuru pÄc tam var palaist tieÅ”i no konsoles.
sudo apt install speedtest-cli -y
Un izmÄriet savu interneta Ätrumu.
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
RezultÄtÄ, tÄpat kÄ es. Man bija jÄiedziļinÄs Ŕī Ätruma testa pirmkodos, lai tos pilnÄ«gÄk ieviestu savÄ projektÄ. Viens no svarÄ«gÄkajiem uzdevumiem ir iegÅ«t telekomunikÄciju operatora nosaukumu, lai to aizstÄtu plÄksnÄ«tÄ.
ArÄ« Å”eit viss izrÄdÄ«jÄs ne tik vienkÄrÅ”i, lai gan tas Ŕķistu daudz vienkÄrÅ”Äk. SÄkotnÄji servera parametrs bija vienÄds ar [], viÅi saka, izvÄlieties labÄko serveri. TÄ rezultÄtÄ man bija nejauÅ”i serveri un, kÄ jÅ«s varÄtu nojaust, mainÄ«gs Ätrums. Å Ä« ir diezgan sarežģīta tÄma, izmantojot fiksÄtu serveri, ja tÄ, statisku vai dinamisku, ir nepiecieÅ”ama izpÄte. Bet Å”eit ir Beeline operatora Ätruma mÄrÄ«Å”anas grafiku piemÄrs, dinamiski izvÄloties testa serveri un statiski fiksÄtu serveri.
Ätruma pÄrbaudes rezultÄts, ar vienu stingri atlasÄ«tu vienu serveri.
PÄrbaudes laikÄ abÄs vietÄs ir ākažokÄdaā, un tÄ ir jÄnoÅem ar matemÄtiskÄm metodÄm. Bet ar fiksÄtu serveri tas ir nedaudz mazÄks un amplitÅ«da ir stabilÄka.
KopumÄ Å”Ä« ir lielas izpÄtes vieta. Un es mÄrÄ«tu sava servera Ätrumu, izmantojot iperf utilÄ«tu. Bet mÄs pieturamies pie tehniskajÄm specifikÄcijÄm.
Pasta sūtīŔana un kļūdas
Lai nosÅ«tÄ«tu pastu, es izmÄÄ£inÄju vairÄkus desmitus dažÄdu iespÄju, bet beigÄs es izlÄmu par sekojoÅ”o. Es reÄ£istrÄju pastkastÄ«ti Yandex un pÄc tam paÅÄmu Å is ir pasta sÅ«tÄ«Å”anas piemÄrs. Es to pÄrbaudÄ«ju un ieviesu programmÄ. Å ajÄ piemÄrÄ ir apskatÄ«tas dažÄdas iespÄjas, tostarp sÅ«tÄ«Å”ana no Gmail u.c. Es negribÄju mocÄ«ties ar pasta servera iestatÄ«Å”anu un nebija tam laika, bet, kÄ vÄlÄk izrÄdÄ«jÄs, arÄ« tas bija veltÄ«gi.
ŽurnÄli tika nosÅ«tÄ«ti saskaÅÄ ar plÄnotÄju, ja ir savienojums, ik pÄc 6 stundÄm: pulksten 00, 06:12, 18:XNUMX un XNUMX:XNUMX. NosÅ«tÄ«ja Å”Ädi.
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
SÄkotnÄji tika nosÅ«tÄ«tas arÄ« kļūdas. SÄkumÄ tie tika uzkrÄti sarakstÄ un pÄc tam nosÅ«tÄ«ti arÄ«, izmantojot plÄnotÄju, ja bija savienojums. TaÄu tad radÄs problÄmas ar faktu, ka Yandex ir ierobežots dienÄ nosÅ«tÄ«to ziÅojumu skaits (tÄs ir sÄpes, skumjas un pazemojums). TÄ kÄ kļūdu skaits varÄja bÅ«t ļoti liels pat minÅ«tÄ, nÄcÄs atteikties no kļūdu sÅ«tÄ«Å”anas pa pastu. TÄpÄc paturiet prÄtÄ, automÄtiski nosÅ«tot informÄciju par Å”Ädu problÄmu, izmantojot Yandex pakalpojumus.
Atsauksmju serveris
Lai piekļūtu attÄlai aparatÅ«rai un varÄtu to pielÄgot un pÄrkonfigurÄt, man bija nepiecieÅ”ams ÄrÄjs serveris. VispÄr, godÄ«gi sakot, bÅ«tu pareizi visus datus nosÅ«tÄ«t uz serveri un veidot visus skaistos grafikus tÄ«mekļa saskarnÄ. Bet ne visu uzreiz.
Par VPS es izvÄlÄjos ruvds.com. JÅ«s varÄtu izvÄlÄties vienkÄrÅ”Äko serveri. Un vispÄr maniem mÄrÄ·iem ar to pietiktu. Bet, tÄ kÄ par serveri nemaksÄju no savas kabatas, nolÄmu to paÅemt ar nelielu rezervi, lai pietiktu, ja izvietosim tÄ«mekļa saskarni, savu SMTP serveri, VPN utt. TurklÄt varÄsiet iestatÄ«t Telegram robotu un neradÄ«siet problÄmas ar tÄ bloÄ·ÄÅ”anu. TÄpÄc izvÄlÄjos Amsterdamu un sekojoÅ”us parametrus.
KÄ saziÅas metodi ar aparatÅ«ru vim2 izvÄlÄjÄs reverso ssh savienojumu un, kÄ liecina prakse, tas nav labÄkais. Ja savienojums tiek zaudÄts, serveris aiztur portu un kÄdu laiku nav iespÄjams izveidot savienojumu caur to. TÄpÄc joprojÄm ir labÄk izmantot citas saziÅas metodes, piemÄram, VPN. NÄkotnÄ es gribÄju pÄrslÄgties uz VPN, bet man nebija laika.
Es neiedziļinÄÅ”os detaļÄs par ugunsmÅ«ra iestatÄ«Å”anu, tiesÄ«bu ierobežoÅ”anu, root ssh savienojumu atspÄjoÅ”anu un citiem VPS iestatÄ«Å”anas faktiem. GribÄtos ticÄt, ka tu jau visu zini. AttÄlajam savienojumam es izveidoju jaunu lietotÄju serverÄ«.
adduser vimssh
Es Ä£enerÄju ssh savienojuma atslÄgas mÅ«su aparatÅ«rÄ.
PievÄrsiet uzmanÄ«bu portam 8083: tas nosaka, kuru portu es izmantoÅ”u, lai izveidotu savienojumu, izmantojot reverso ssh. Pievienojiet to startÄÅ”anai un sÄciet.
PÄc tam es nonÄku pie savas testÄjamÄs aparatÅ«ras daļas. Un no aparatÅ«ras es varu arÄ« nosÅ«tÄ«t žurnÄlus un jebkÄdus datus caur ssh uz savu serveri, kas ir ļoti Ärti.
Viss kopÄ
IeslÄdzot, sÄksim izstrÄdi un atkļūdoÅ”anu
Fu, tas arÄ« viss, es aprakstÄ«ju visus mezglus. Tagad ir pienÄcis laiks to visu apvienot. JÅ«s varat redzÄt kodu Å”eit.
SvarÄ«gs punkts ar kodu: Å”is projekts var nesÄkties Å”Ädi, jo tas tika pielÄgots konkrÄtam uzdevumam, konkrÄtai arhitektÅ«rai. Pat ja es dodu avota kodu, es joprojÄm paskaidroÅ”u visvÄrtÄ«gÄkÄs lietas Å”eit, tieÅ”i tekstÄ, pretÄjÄ gadÄ«jumÄ tas ir pilnÄ«gi nesaprotami.
SÄkumÄ inicializÄju gps, gpio un palaižu atseviŔķu plÄnotÄja pavedienu.
PlÄnotÄjs ir diezgan vienkÄrÅ”s: tas skatÄs, vai ir pienÄcis laiks nosÅ«tÄ«t ziÅojumus un kÄds ir paÅ”reizÄjais kļūdas statuss. Ja ir kļūdas karogs, mÄs mirgojam 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)
SarežģītÄkÄ Å”Ä« projekta daļa ir reversÄ ssh savienojuma uzturÄÅ”ana katram testam. Katrs tests ietver noklusÄjuma vÄrtejas un DNS servera pÄrkonfigurÄÅ”anu. TÄ kÄ neviens tÄpat nelasa, ziniet, ka vilciens nebrauc pa koka sliedÄm. Tas, kurÅ” atrod Lieldienu olu, saÅem konfektes.
Lai to izdarÄ«tu, es izveidoju atseviŔķu marÅ”rutÄÅ”anas tabulu -set-mark 0x2 un noteikumu trafika novirzÄ«Å”anai.
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")
PÄc tam es ieeju bezgalÄ«gÄ cilpÄ, kur katru reizi tiek parÄdÄ«ts pievienoto modemu saraksts (lai uzzinÄtu, vai tÄ«kla konfigurÄcija ir pÄkÅ”Åi mainÄ«jusies).
network_list = getNetworklist()
TÄ«kla saskarÅu saraksta iegÅ«Å”ana ir pavisam vienkÄrÅ”a.
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
PÄc saraksta saÅemÅ”anas uzliku IP adreses visÄm saskarnÄm, kÄ rÄdÄ«ju attÄlÄ nodaÄ¼Ä par modemu.
PÄrbaudu interfeisa funkcionalitÄti, ja nav tÄ«kla, tad Ä£enerÄju kļūdas. Ja ir tÄ«kls, ir pienÄcis laiks rÄ«koties!
Å eit es konfigurÄju ssh marÅ”rutÄÅ”anu uz Å”o interfeisu (ja tas nav izdarÄ«ts), nosÅ«tu kļūdas uz serveri, ja ir pienÄcis laiks, nosÅ«ta žurnÄlus un beidzot palaist Ätruma testu un saglabÄ Å¾urnÄlus csv failÄ.
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()
#Šø Š“Š°Š»ŠµŠµ ŃŠµŃŃŠøŃŃŠµŠ¼ ŃŠŗŠ¾ŃŠ¾ŃŃŃ Šø ŃŠ¾Ń ŃŠ°Š½ŃŠµŠ¼ Š»Š¾Š³Šø.
Ir vÄrts pieminÄt reverse ssh iestatÄ«Å”anas funkciju.
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")
Un, protams, viss Å”is skaistums ir jÄpievieno startam. Lai to izdarÄ«tu, es izveidoju failu:
sudo vim /etc/systemd/system/modems_speedtest.service
Nu, tagad svarÄ«gÄkais ir, kas notika rezultÄtÄ? Å eit ir daži grafiki, kurus man izdevÄs uzÅemt izstrÄdes un atkļūdoÅ”anas procesa laikÄ. Grafiki tika izveidoti, izmantojot gnuplot ar Å”Ädu skriptu.
#! /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"
PirmÄ pieredze bija ar Tele2 operatoru, ko vadÄ«ju vairÄkas dienas.
Å eit es izmantoju dinamisko mÄrÄ«Å”anas serveri. Ätruma mÄrÄ«jumi darbojas, bet ļoti svÄrstÄs, taÄu joprojÄm ir redzama kÄda vidÄjÄ vÄrtÄ«ba, un to var iegÅ«t, filtrÄjot datus, piemÄram, ar mainÄ«go vidÄjo.
VÄlÄk es izveidoju vairÄkus grafikus citiem telekomunikÄciju operatoriem. Å ajÄ gadÄ«jumÄ jau bija viens testÄÅ”anas serveris, un arÄ« rezultÄti bija ļoti interesanti.
KÄ redzat, tÄma ir ļoti apjomÄ«ga Å”o datu izpÄtei un apstrÄdei un nepÄrprotami ilgst pÄris nedÄļas. Betā¦
Darba rezultÄts
Darbs tika pÄkÅ”Åi pabeigts no manis neatkarÄ«gu apstÄkļu dÄļ. Viena no Ŕī projekta vÄjajÄm pusÄm, manuprÄt, bija modems, kas Ä«sti negribÄja darboties vienlaicÄ«gi ar citiem modemiem un ikreiz ielÄdÄja Å”Ädus trikus. Å iem nolÅ«kiem ir milzÄ«gs skaits citu modemu modeļu, parasti tie jau ir Mini PCI-e formÄtÄ un ir instalÄti ierÄ«cÄ un ir daudz vieglÄk konfigurÄjami. Bet tas ir pavisam cits stÄsts. Projekts bija interesants, un man bija liels prieks, ka varÄju tajÄ piedalÄ«ties.