Deuchainn luath aig an aon àm air grunn mhodem LTE

Rè cuarantine, chaidh tairgse a thoirt dhomh pàirt a ghabhail ann an leasachadh inneal airson astar modems LTE a thomhas airson grunn ghnìomhaichean cealla.

Deuchainn luath aig an aon àm air grunn mhodem LTE

Bha an neach-ceannach airson measadh a dhèanamh air astar diofar ghnìomhaichean cian-chonaltraidh ann an diofar àiteachan cruinn-eòlasach gus a bhith comasach air tuigsinn dè an gnìomhaiche cealla a b’ fheàrr dha nuair a bha e a ’stàladh uidheamachd a’ cleachdadh ceangal LTE, mar eisimpleir, airson craolaidhean bhidio. Aig an aon àm, dh'fheumadh an duilgheadas a bhith air a rèiteachadh cho sìmplidh agus cho saor 's as urrainn, gun uidheamachd daor.

Canaidh mi sa bhad nach e an obair an obair as sìmplidh agus as dian-eòlas; innsidh mi dhut dè na duilgheadasan a choinnich mi agus mar a dh ’fhuasgail mi iad. Mar sin, rachamaid.

thuirt

Tha tomhas astar ceangal LTE na chùis gu math toinnte: feumaidh tu an uidheamachd agus an dòigh tomhais cheart a thaghadh, agus cuideachd tuigse mhath a bhith agad air topology agus obrachadh an lìonra cealla. A bharrachd air an sin, faodaidh grunn nithean buaidh a thoirt air an astar: an àireamh de luchd-aontachaidh air cealla, an aimsir, eadhon bho chill gu cealla faodaidh an astar atharrachadh gu mòr air sgàth topology an lìonraidh. San fharsaingeachd, tha seo na dhuilgheadas le àireamh mhòr de neo-aithnichte, agus chan urrainn ach gnìomhaiche cian-conaltraidh fhuasgladh gu ceart.

An toiseach, bha an neach-ceannach dìreach airson an teachdaire a dhràibheadh ​​​​le fònaichean an luchd-obrachaidh, tomhas a dhèanamh gu dìreach air a ’fòn agus an uairsin na toraidhean tomhais astair a sgrìobhadh sìos ann an leabhar notaichean. Tha am fuasgladh agam airson astar lìonraidhean lte a thomhas, ged nach eil e air leth freagarrach, a’ fuasgladh na duilgheadas.

Air sgàth dìth ùine, rinn mi co-dhùnaidhean chan ann airson goireasachd no practaigeach, ach airson astar leasachaidh. Mar eisimpleir, chaidh cùl ssh a chleachdadh airson ruigsinneachd iomallach, an àite an VPN nas practaigeach, gus ùine a shàbhaladh air stèidheachadh an fhrithealaiche agus gach neach-dèiligidh fa leth.

Teicnigeach obair

Mar a chaidh a ràdh san artaigil Às aonais mion-chomharrachadh teignigeach: carson nach eil an neach-dèiligidh ga iarraidh: Na bi ag obair às aonais mion-chomharrachadh teignigeach! A-riamh, àite sam bith!

Bha an obair theicnigeach gu math sìmplidh, leudaichidh mi e beagan airson tuigse an neach-cleachdaidh deireannach. Bha an roghainn de fhuasglaidhean teignigeach agus uidheamachd air a dhearbhadh leis an neach-ceannach. Mar sin, tha an sònrachadh teicnigeach fhèin, às deidh a h-uile cead:

Stèidhichte air aon choimpiutair bòrd vim2 dèan deuchainn luaths airson ceanglaichean lte tro mhodems Huawei e3372h - 153 grunn ghnìomhaichean telecom (bho aon gu n). Feumar cuideachd co-chomharran fhaighinn bho ghlacadair GPS ceangailte tro UART. Dèan tomhas astair a’ cleachdadh na seirbheis www.speedtest.net agus chuir e air bòrd iad mar :

Deuchainn luath aig an aon àm air grunn mhodem LTE

Clàr ann an csv format. An uairsin cuir an soidhne seo air post-d gach 6 uairean. Ma tha mearachdan ann, brùth an LED a tha ceangailte ris an GPIO.

Thug mi cunntas air na mion-chomharrachaidhean teicnigeach ann an cruth an-asgaidh, às deidh mòran aonta. Ach tha brìgh na h-obrach ri fhaicinn mu thràth. Chaidh seachdain a thoirt seachad airson a h-uile càil. Ach ann an da-rìribh mhair e trì seachdainean. Tha seo a’ gabhail a-steach nach do rinn mi seo ach às deidh mo phrìomh obair agus air deireadh-sheachdainean.

An seo tha mi airson aire a tharraing a-rithist gu bheil an neach-ceannach air aontachadh ro-làimh air cleachdadh na seirbheis tomhais astair agus bathar-cruaidh, a chuir bacadh mòr air na comasan agam. Bha am buidseat cuingealaichte cuideachd, agus mar sin cha deach dad sònraichte a cheannach. Mar sin bha againn ri cluich leis na riaghailtean sin.

Ailtireachd agus leasachadh

Tha an sgeama sìmplidh agus follaiseach. Mar sin, fàgaidh mi e gun bheachdan sònraichte sam bith.

Deuchainn luath aig an aon àm air grunn mhodem LTE

Cho-dhùin mi am pròiseact gu lèir a chuir an gnìomh ann am python, a dh’ aindeoin nach robh eòlas sam bith agam air leasachadh sa chànan seo. Thagh mi e oir bha dòrlach de eisimpleirean deiseil agus fuasglaidhean a dh’ fhaodadh leasachadh a luathachadh. Mar sin, bidh mi ag iarraidh air a h-uile prògramadair proifeasanta gun a bhith a’ càineadh a’ chiad eòlas agam air leasachadh ann am python, agus tha mi an-còmhnaidh toilichte càineadh cuideachail a chluinntinn gus mo sgilean adhartachadh.

Cuideachd sa phròiseas fhuair mi a-mach gu bheil dà dhreach ruith 2 agus 3 aig python, mar thoradh air an sin shocraich mi air an treas fear.

Nithean bathar-cruaidh

Clàr singilte vim2

Chaidh coimpiutair aon-bhòrd a thoirt dhomh mar am prìomh inneal agam vim2

Deuchainn luath aig an aon àm air grunn mhodem LTE

Pròiseasar meadhanan sàr-mhath, cumhachdach airson dachaigh spaideil agus SMART-TV, ach air leth mì-fhreagarrach airson na h-obrach seo, no, canaidh sinn, gu math freagarrach. Mar eisimpleir, is e Android am prìomh OS aige, agus is e OS àrd-sgoile a th’ ann an Linux, agus mar sin chan eil duine a’ gealltainn obrachadh àrd-inbhe a h-uile nod agus dràibhear fo Linux. Agus tha mi a 'gabhail ris gu robh cuid de na duilgheadasan co-cheangailte ri draibhearan USB an àrd-ùrlair seo, agus mar sin cha do dh'obraich na modems mar a bha dùil air a' bhòrd seo. Tha sgrìobhainnean glè bhochd agus sgapte ann cuideachd, agus mar sin thug gach gnìomh tòrr ùine a’ cladhach tro na docaichean. Ghabh eadhon obair àbhaisteach le GPIO tòrr fala. Mar eisimpleir, thug e grunn uairean a thìde dhomh an LED a stèidheachadh. Ach, airson a bhith cothromach, cha robh e gu bunaiteach cudromach dè an seòrsa bòrd singilte a bh’ ann, b’ e am prìomh rud gun robh e ag obair agus gu robh puirt USB ann.

An toiseach, feumaidh mi Linux a stàladh air a’ bhòrd seo. Gus nach bi mi a 'sgrìobadh na sgrìobhainnean fiadhaich airson a h-uile duine, agus cuideachd dhaibhsan a dhèiligeas ris an t-siostam aon-bhùird seo, tha mi a' sgrìobhadh a 'chaibideil seo.

Tha dà roghainn ann airson Linux a stàladh: air cairt SD taobh a-muigh no air MMC a-staigh. Chuir mi seachad oidhche a 'feuchainn ri faighinn a-mach ciamar a dh' obraicheadh ​​​​e leis a 'chairt, agus mar sin chuir mi romhpa a stàladh air an MMC, ged gun teagamh bhiodh e tòrr na b' fhasa obrachadh le cairt a-muigh.

Mu dheidhinn a ' firmware gu h-obann air innse an seo. Bidh mi ag eadar-theangachadh bho strange gu Ruiseanach. Gus am bòrd a lasadh, feumaidh mi am bathar-cruaidh UART a cheangal. Cheangail e mar a leanas.

  • Pin inneal GND: <-> Pin17 de GPIO VIMs
  • Pin inneal TXD: <-> Pin18 de GPIO VIMs (Linux_Rx)
  • Pin inneal RXD: <-> Pin19 de GPIO VIMs (Linux_Tx)
  • Pin inneal VCC: <-> Pin20 de GPIO VIMs

Deuchainn luath aig an aon àm air grunn mhodem LTE

Às deidh sin, luchdaich mi sìos am firmware bho seo. Tionndadh firmware sònraichte VIM1_Ubuntu-server-bionic_Linux-4.9_arm64_EMMC_V20191231.

Gus am firmware seo a luchdachadh suas, tha feum agam air goireasan. Tuilleadh mion-fhiosrachaidh mu dheidhinn seo an seo. Chan eil mi air feuchainn ri a lasadh fo Windows, ach feumaidh mi beagan fhaclan innse dhut mu firmware fo Linux. An toiseach, stàlaidhidh mi na goireasan a rèir an stiùiridh.

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

Aaand... Chan eil dad ag obair. Chuir mi seachad uair no dhà a’ deasachadh na sgriobtaichean stàlaidh gus am biodh a h-uile càil a’ stàladh ceart dhomh. Chan eil cuimhne agam dè rinn mi an sin, ach bha an siorcas sin ann le eich cuideachd. Mar sin bi faiceallach. Ach às aonais na goireasan sin chan eil adhbhar ann vim2 a chràdh tuilleadh. Tha e nas fheàrr gun a bhith a 'bualadh leis idir!

Às deidh seachd cearcallan ifrinn, rèiteachadh sgriobt agus stàladh, fhuair mi pasgan de ghoireasan obrach. Cheangail mi am bòrd tro USB ris a’ choimpiutair Linux agam, agus cheangail mi an UART a rèir an dealbh gu h-àrd.
Tha mi a’ stèidheachadh an inneal minicom as fheàrr leam airson astar 115200, às aonais smachd mearachd bathar-cruaidh is bathar-bog. Agus leig leinn tòiseachadh.

Deuchainn luath aig an aon àm air grunn mhodem LTE

Nuair a bhios mi a’ luchdachadh VIM2 ann an inneal-crìochnachaidh UART, bidh mi a’ bruthadh iuchair, leithid am bàr-fànais, gus stad a chuir air luchdachadh. Às deidh an loidhne nochdadh

kvim2# 

Tha mi a 'cur a-steach an òrdugh:

kvim2# run update

Air an òstair às a bheil sinn a 'luchdachadh, bidh mi a' coileanadh:

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

Sin agad e, a phiuthar. Rinn mi sgrùdadh, tha Linux air a’ bhòrd. Log a-steach / facal-faire khadas: khadas.

Às deidh sin, cuid de shuidheachaidhean tùsail beaga. Airson tuilleadh obrach, bidh mi a’ cuir dheth am facal-faire airson sudo (tha, chan eil e tèarainte, ach goireasach).

sudo visudo

Bidh mi a’ deasachadh na loidhne ris an fhoirm agus a’ sàbhaladh

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

An uairsin bidh mi ag atharrachadh an locale gnàthach gus am bi an ùine ann am Moscow, air neo bidh e ann an Greenwich.

sudo timedatectl set-timezone Europe/Moscow

no

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

Ma tha e duilich dhut, na cleachd am bòrd seo; Tha Raspberry Pi nas fheàrr. Gu h-onarach.

Modem Huawei e3372h - 153

Bha am modem seo na stòr fala cudromach dhomh, agus, gu dearbh, thàinig e gu bhith na bhotal sa phròiseact gu lèir. San fharsaingeachd, chan eil an t-ainm "modem" airson na h-innealan sin a 'nochdadh brìgh na h-obrach idir: is e cothlamadh cumhachdach a tha seo, tha inneal co-dhèanta aig a’ phìos bathar-cruaidh seo a tha a ’leigeil air gur e CD-ROM a th’ ann airson draibhearan a chuir a-steach, agus an uairsin tionndaidh gu modh cairt lìonraidh.

A thaobh ailtireachd, bho shealladh neach-cleachdaidh Linux, às deidh a h-uile suidheachadh, tha e a ’coimhead mar seo: às deidh dhomh am modem a cheangal, tha eadar-aghaidh lìonra eth * agam, a gheibh tro dhcp an seòladh IP 192.168.8.100, agus an geata bunaiteach. tha 192.168.8.1.

Agus an àm as cudromaiche! Chan urrainn don mhodail mhodem seo obrachadh ann am modh modem, a tha fo smachd òrdughan AT. Bhiodh a h-uile dad tòrr nas sìmplidh, cruthaich ceanglaichean PPP airson gach modem agus an uairsin obraich còmhla riutha. Ach anns a’ chùis agam, bidh “e fhèin” (nas mionaidiche, dàibhear Linux a rèir riaghailtean udev), a’ cruthachadh eadar-aghaidh eth agus a’ sònrachadh seòladh IP dha tro dhcp.

Gus tuilleadh troimh-chèile a sheachnadh, tha mi a’ moladh gun dìochuimhnich thu am facal “modem” agus ag ràdh cairt lìonra agus geata, oir gu dearbh, tha e coltach ri bhith a’ ceangal cairt lìonra ùr le geata.
Nuair a tha aon mhodem ann, chan eil seo ag adhbhrachadh duilgheadasan sònraichte, ach nuair a tha barrachd air aon ann, is e sin n-pìosan, bidh an dealbh lìonra a leanas ag èirigh.

Deuchainn luath aig an aon àm air grunn mhodem LTE

Is e sin, n cairtean lìonra, leis an aon sheòladh IP, gach fear leis an aon gheata àbhaisteach. Ach gu dearbh, tha gach fear dhiubh ceangailte ris a 'ghnìomhaiche aige fhèin.

An toiseach, bha fuasgladh sìmplidh agam: a 'cleachdadh an àithne ifconfig no ip, cuir dheth a h-uile eadar-aghaidh agus dìreach tionndaidh air fear mu seach agus dèan deuchainn air. Bha am fuasgladh math airson a h-uile duine, ach a-mhàin nuair a bha mi a 'gluasad cha b' urrainn dhomh ceangal ris an inneal. Agus leis gu bheil an tionndadh tric agus luath, cha robh cothrom agam ceangal idir.

Mar sin, thagh mi an t-slighe airson seòlaidhean IP nam modems atharrachadh le làimh agus an uairsin trafaic a dhràibheadh ​​​​a ’cleachdadh roghainnean slighe.

Deuchainn luath aig an aon àm air grunn mhodem LTE

Cha b’ e seo deireadh mo dhuilgheadasan le modems: ma bha duilgheadasan cumhachd ann, thuit iad dheth, agus bha feum air solar cumhachd seasmhach math don ionad USB. Dh’ fhuasgail mi an duilgheadas seo le bhith a’ sàthadh a’ chumhachd gu dìreach ris a’ mheadhan. Duilgheadas eile a choinnich mi agus a chuir às don phròiseact gu lèir: an dèidh ath-thòiseachadh no tòiseachadh fuar air an inneal, cha deach a h-uile modem a lorg agus chan ann an-còmhnaidh, agus cha b 'urrainn dhomh dearbhadh carson a thachair seo agus dè an algairim. Ach an toiseach rudan an-toiseach.

Airson am modem obrachadh gu ceart, chuir mi a-steach am pasgan usb-modeswitch.

sudo apt update
sudo apt install -y usb-modeswitch

Às deidh sin, às deidh a cheangal, thèid am modem a lorg gu ceart agus a rèiteachadh leis an fho-shiostam udev. Bidh mi a’ dèanamh sgrùdadh dìreach le bhith a’ ceangal a’ mhodem agus a’ dèanamh cinnteach gu bheil an lìonra a’ nochdadh.
Duilgheadas eile nach b 'urrainn dhomh fuasgladh: ciamar a gheibh mi ainm a' ghnìomhaiche leis a bheil sinn ag obair bhon mhodem seo? Tha ainm a’ ghnìomhaiche anns an eadar-aghaidh lìn modem aig 192.168.8.1. Is e duilleag lìn fiùghantach a tha seo a gheibh dàta tro iarrtasan Ajax, agus mar sin chan obraich dìreach wgetting na duilleige agus parsadh an ainm. Mar sin thòisich mi a 'coimhead air mar a leasaicheadh ​​​​mi duilleag-lìn, msaa, agus thuig mi gu robh mi a' dèanamh seòrsa de neòinean. Mar thoradh air an sin, rinn e spatadh, agus thòisich an gnìomhaiche a 'faighinn a' cleachdadh an API Speedtest fhèin.

Bhiodh e tòrr na b’ fhasa nam biodh cothrom aig a’ mhodem tro òrdughan AT. Bhiodh e comasach a ath-dhealbhadh, ceangal ppp a chruthachadh, IP a shònrachadh, gnìomhaiche cian-conaltraidh fhaighinn, msaa. Ach mo thruaighe, tha mi ag obair leis na chaidh a thoirt dhomh.

GPS

Bha eadar-aghaidh UART agus cumhachd aig a’ ghlacadair GPS a fhuair mi. Cha b’ e am fuasgladh as fheàrr a bh’ ann, ach bha e fhathast obrachail agus sìmplidh. Bha an neach-gleidhidh a’ coimhead rudeigin mar seo.

Deuchainn luath aig an aon àm air grunn mhodem LTE

Gus a bhith onarach, b’ e seo a’ chiad uair a bha mi ag obair le inneal-glacaidh GPS, ach mar a bha dùil agam, chaidh a h-uile càil a smaoineachadh dhuinn o chionn fhada. Mar sin bidh sinn dìreach a’ cleachdadh fuasglaidhean deiseil.

An toiseach, bheir mi comas do uart_AO_B (UART_RX_AO_B, UART_TX_AO_B) GPS a cheangal.

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

Às deidh sin bidh mi a’ sgrùdadh soirbheachas na h-obrach.

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

Tha e coltach gu bheil an àithne seo a’ deasachadh an devtree air an itealan, a tha gu math goireasach.

Às deidh soirbheachas na h-obrach seo, ath-thòisich agus stàlaich an deamhan GPS.

khadas@Khadas:~$ sudo reboot

Stàladh an daemon gps. Bidh mi a 'stàladh a h-uile càil agus ga ghearradh dheth sa bhad airson tuilleadh rèiteachaidh.

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

A' deasachadh an fhaidhle roghainnean.

sudo vim /etc/default/gpsd

Tha mi a' stàladh UART air am bi an GPS an crochadh.

DEVICES="/dev/ttyS4"

Agus an uairsin bidh sinn a 'tionndadh a h-uile càil agus a' tòiseachadh.

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

Às deidh sin, bidh mi a 'ceangal an GPS.

Deuchainn luath aig an aon àm air grunn mhodem LTE

Tha an uèir GPS na mo làmhan, tha na uèirichean deasbaid UART rim faicinn fo mo chorragan.

Bidh mi ag ath-thòiseachadh agus a’ sgrùdadh gnìomhachd GPS a’ cleachdadh a’ phrògram gpsmon.

Deuchainn luath aig an aon àm air grunn mhodem LTE

Chan fhaic thu na saidealan san dealbh seo, ach chì thu conaltradh leis a’ ghlacadair GPS, agus tha seo a’ ciallachadh gu bheil a h-uile dad gu math.

Ann am python, dh'fheuch mi ri mòran roghainnean airson a bhith ag obair leis an daemon seo, ach shocraich mi air an fhear a dh'obraich gu ceart le python 3.

Bidh mi a 'stàladh an leabharlann riatanach.

sudo -H pip3 install gps3 

Agus shnaigh mi an còd obrach.

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

Ma dh’ fheumas mi co-chomharran fhaighinn, thèid seo a dhèanamh leis a’ ghairm a leanas:

longitude, latitude = getPositionData(agps_thread)

Agus taobh a-staigh 1-10 diogan gheibh mi an co-chomharran no nach fhaigh. Seadh, bha deich oidhirpean agam air co-chomharran fhaighinn. Chan eil e cho math, cam agus faighneachd, ach tha e ag obair. Cho-dhùin mi seo a dhèanamh oir faodaidh droch fhàilteachadh a bhith aig GPS agus chan eil e an-còmhnaidh a’ faighinn dàta. Ma dh'fhuiricheas tu gus dàta fhaighinn, an uairsin ma tha thu ag obair ann an seòmar iomallach, bidh am prògram a 'reothadh san àite seo. Mar sin, chuir mi an roghainn neo-sheasmhach seo an gnìomh.

Ann am prionnsapal, nam biodh barrachd ùine ann, bhiodh e comasach dàta fhaighinn bho GPS gu dìreach tro UART, ga pharsadh ann an snàithlean air leth agus ag obair leis. Ach cha robh ùine ann idir, mar sin an còd brùideil grànda. Agus tha, chan eil nàire orm.

LED

Bha ceangal an LED sìmplidh agus duilich aig an aon àm. Is e am prìomh dhuilgheadas nach eil an àireamh prìne san t-siostam a’ freagairt ris an àireamh prìne air a’ bhòrd agus leis gu bheil na sgrìobhainnean sgrìobhte air an làimh chlì. Gus coimeas a dhèanamh eadar an àireamh prìne bathar-cruaidh agus an àireamh prìne san OS, feumaidh tu an àithne a ruith:

gpio readall

Thèid clàr de litrichean prìne san t-siostam agus air a’ bhòrd a thaisbeanadh. Às deidh sin is urrainn dhomh am prìne obrachadh san OS fhèin. Anns a 'chùis agam tha an LED ceangailte ris GPIOH_5.

Deuchainn luath aig an aon àm air grunn mhodem LTE

Bidh mi ag atharrachadh prìne GPIO gu modh toraidh.

gpio -g mode 421 out

Bidh mi a 'sgrìobhadh sìos neoni.

gpio -g write 421 0

Bidh mi a’ sgrìobhadh sìos aon.

gpio -g write 421 1

Deuchainn luath aig an aon àm air grunn mhodem LTE
Tha a h-uile càil air a lasadh, às deidh dhut “1” a sgrìobhadh

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

A-nis, air eagal mearachdan, bidh mi a 'gairm error_blink () agus bidh an LED a' priobadh gu h-àlainn.

Nodan bathar-bog

Speedtest API

Tha e na thoileachas mòr gu bheil a python-API fhèin aig seirbheis speedtest.net, faodaidh tu coimhead air GitHub.

Is e an rud math gu bheil còdan stòr ann a dh'fhaodar fhaicinn cuideachd. Gheibhear mar a dh’ obraicheas tu leis an API seo (eisimpleirean sìmplidh) ann an earrann iomchaidh.

Bidh mi a’ stàladh leabharlann python leis an àithne a leanas.

sudo -H pip3 install speedtest-cli

Mar eisimpleir, faodaidh tu eadhon inneal-deuchainn astair a stàladh ann an Ubuntu gu dìreach bhon bhathar-bog. Is e seo an aon aplacaid python, a dh'fhaodar a chuir air bhog gu dìreach bhon chonsail.

sudo apt install speedtest-cli -y

Agus tomhais an astar eadar-lìn agad.

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

Mar thoradh air an sin, dìreach mar a rinn mi. B’ fheudar dhomh faighinn a-steach do chòdan stòr an deuchainn astair seo gus an cuir an gnìomh nas coileanta a-steach don phròiseact agam. Is e aon de na gnìomhan as cudromaiche ainm a’ ghnìomhaiche cian-conaltraidh fhaighinn gus a chuir a-steach don truinnsear.

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

An seo, cuideachd, thionndaidh a h-uile dad a-mach nach robh e cho sìmplidh, ged a bhiodh e coltach gu robh e tòrr nas sìmplidh. An toiseach, bha paramadair nan frithealaichean co-ionann ri [], tha iad ag ràdh, tagh am frithealaiche as fheàrr. Mar thoradh air an sin, bha frithealaichean air thuaiream agam, agus, mar a shaoileadh tu, astar caochlaideach. Is e cuspair gu math toinnte a tha seo, le bhith a’ cleachdadh frithealaiche stèidhichte, ma tha, statach no fiùghantach, feumar rannsachadh. Ach seo eisimpleir de ghrafaichean tomhais astair airson gnìomhaiche Beeline nuair a bhios iad a’ taghadh frithealaiche deuchainn agus fear stèidhichte gu statach.

Deuchainn luath aig an aon àm air grunn mhodem LTE
Toradh astar tomhais nuair a thaghas tu frithealaiche fiùghantach.

Deuchainn luath aig an aon àm air grunn mhodem LTE
Toradh deuchainn astair, le aon fhrithealaiche air a thaghadh gu teann.

Rè an deuchainn, tha "bion" anns gach àite, agus feumar a thoirt air falbh le bhith a 'cleachdadh dhòighean matamataigeach. Ach le frithealaiche stèidhichte tha e beagan nas lugha agus tha amplitude nas seasmhaiche.
San fharsaingeachd, is e àite fìor mhath a tha seo airson sgrùdadh. Agus bhithinn a’ tomhas astar an fhrithealaiche agam a’ cleachdadh goireas iperf. Ach tha sinn a 'cumail ris na mion-chomharrachaidhean teicnigeach.

A 'cur post-d agus mearachdan

Airson post a chuir, dh’ fheuch mi grunn dhusan diofar roghainnean, ach aig a’ cheann thall shocraich mi air na leanas. Chlàraich mi bogsa puist air Yandex agus an uairsin ghabh mi Seo eisimpleir de bhith a’ cur post-d. Rinn mi sgrùdadh air agus chuir mi a-steach e sa phrògram. Bidh an eisimpleir seo a’ sgrùdadh diofar roghainnean, a’ gabhail a-steach cur bho gmail, msaa. Cha robh mi airson dragh a chuir air mo fhrithealaiche puist a stèidheachadh agus cha robh ùine agam air a shon, ach mar a thàinig e a-mach nas fhaide air adhart, bha e dìomhain cuideachd.

Chaidh na clàran a chuir a rèir an neach-clàraidh, ma tha ceangal ann, a h-uile 6 uairean: aig 00 uairean, 06m, 12 meadhan-latha agus 18f. Chuir e mar a leanas e.

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

Chaidh mearachdan a chuir an toiseach cuideachd. An toiseach, bha iad air an cruinneachadh anns an liosta, agus an uairsin air an cur cuideachd a 'cleachdadh a' chlàr-ama, ma bha ceangal ann. Ach, an uairsin dh'èirich duilgheadasan leis gu bheil cuingealachadh aig Yandex air an àireamh de theachdaireachdan a chaidh a chuir a-steach gach latha (is e seo pian, bròn agus irioslachd). Leis gum faodadh àireamh mhòr de mhearachdan a bhith ann eadhon gach mionaid, bha againn ri cur às do mhearachdan a chuir tron ​​​​phost. Mar sin cumaibh cuimhne nuair a chuireas tu fiosrachadh gu fèin-ghluasadach mu leithid de dhuilgheadas tro sheirbheisean Yandex.

Frithealaiche fios-air-ais

Gus am biodh cothrom agam air pìos bathar-cruaidh iomallach agus a bhith comasach air a ghnàthachadh agus ath-dhealbhadh, bha feum agam air frithealaiche bhon taobh a-muigh. San fharsaingeachd, airson a bhith cothromach, bhiodh e ceart an dàta gu lèir a chuir chun t-seirbheisiche agus na grafaichean brèagha uile a thogail san eadar-aghaidh lìn. Ach chan eil a h-uile aig an aon àm.

Airson VPS thagh mi ruvds.com. Dh'fhaodadh tu am frithealaiche as sìmplidh a ghabhail. Agus san fharsaingeachd, airson mo adhbharan bhiodh seo gu leòr. Ach leis nach do phàigh mi airson an fhrithealaiche a-mach às mo phòcaid fhìn, chuir mi romham a thoirt le tèarmann beag gus am biodh e gu leòr nam biodh sinn a’ cleachdadh eadar-aghaidh lìn, an frithealaiche SMTP againn fhèin, VPN, msaa. A bharrachd air an sin, a bhith comasach air bot Telegram a stèidheachadh agus gun a bhith duilich leis a bhith air a bhacadh. Mar sin, thagh mi Amsterdam agus na crìochan a leanas.

Deuchainn luath aig an aon àm air grunn mhodem LTE

Mar dhòigh conaltraidh leis a’ bhathar-chruaidh, thagh vim2 ceangal ssh cùil agus, mar a tha cleachdadh air sealltainn, chan e sin an rud as fheàrr. Ma thèid an ceangal a chall, bidh am frithealaiche a’ cumail a’ phuirt agus bidh e do-dhèanta ceangal troimhe airson ùine. Mar sin, tha e fhathast nas fheàrr dòighean conaltraidh eile a chleachdadh, mar eisimpleir VPN. Anns an àm ri teachd bha mi airson atharrachadh gu VPN, ach cha robh ùine agam.

Cha tèid mi a-steach gu mion-fhiosrachadh mu bhith a’ stèidheachadh balla-teine, a’ cuingealachadh chòraichean, a’ cuir às do cheanglaichean freumhaich ssh agus truisms eile mu bhith a’ stèidheachadh VPS. Bu mhath leam a chreidsinn gu bheil fios agad air a h-uile dad mu thràth. Airson ceangal iomallach, cruthaichidh mi cleachdaiche ùr air an fhrithealaiche.

adduser vimssh

Bidh mi a’ gineadh iuchraichean ceangail ssh air a’ bhathar-cruaidh againn.

ssh-keygen

Agus bidh mi gan lethbhreac chun t-seirbheisiche againn.

ssh-copy-id [email protected]

Air ar bathar-cruaidh, bidh mi a’ cruthachadh ceangal ssh reverse fèin-ghluasadach aig a h-uile bròg.

[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

Thoir aire do phort 8083: bidh e a’ dearbhadh dè am port a chleachdas mi airson ceangal tro ssh cùil. Cuir ris gu toiseach tòiseachaidh agus tòisich.

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

Chì thu eadhon an inbhe:

sudo systemctl status autossh.service

A-nis, air an t-seirbheisiche VPS againn, ma ruitheas sinn:

ssh -p 8083 khadas@localhost

An uairsin gheibh mi chun phìos bathar-cruaidh deuchainn agam. Agus bhon bhathar-cruaidh is urrainn dhomh cuideachd logaichean agus dàta sam bith a chuir tro ssh chun t-seirbheisiche agam, a tha gu math goireasach.

A 'cur a h-uile càil còmhla

Deuchainn luath aig an aon àm air grunn mhodem LTE
A’ tionndadh air, leig dhuinn tòiseachadh air leasachadh agus debugging

Phew, uill, sin e, thug mi cunntas air na nodan gu lèir. A-nis tha an t-àm ann a h-uile càil a chuir ri chèile. Chì thu an còd dhan taobh dheas.

Puing chudromach leis a’ chòd: Is dòcha nach tòisich am pròiseact seo mar seo, leis gu robh e air a dhealbhadh airson gnìomh sònraichte, de dh’ ailtireachd sònraichte. Eadhon ged a tha mi a ’toirt seachad a’ chòd stòr, mìnichidh mi fhathast na rudan as luachmhoire an seo, dìreach san teacsa, air neo tha e gu tur do-chreidsinneach.

Aig an toiseach, bidh mi a’ tòiseachadh gps, gpio agus a’ cur air bhog snàithlean clàr-ama air leth.

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

Tha an clàr-ama gu math sìmplidh: tha e a’ coimhead feuch an tàinig an t-àm airson teachdaireachdan a chuir agus dè an inbhe mearachd a th’ ann an-dràsta. Ma tha bratach mearachd ann, bidh sinn a’ priobadh an 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)

Is e am pàirt as duilghe den phròiseact seo an ceangal ssh cùil a chumail airson gach deuchainn. Tha gach deuchainn a 'toirt a-steach ath-rèiteachadh a' gheata bunaiteach agus an fhrithealaiche DNS. Leis nach eil duine a 'leughadh co-dhiù, fios agad nach eil an trèana a' rothaireachd air rèilichean fiodha. Ge bith cò a lorgas ugh na Càisge gheibh e candy.

Gus seo a dhèanamh, bidh mi a’ cruthachadh clàr slighe air leth -set-mark 0x2 agus riaghailt airson trafaic ath-stiùireadh.

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

Faodaidh tu barrachd ionnsachadh mu mar a tha e ag obair leugh san artaigil seo.

Às deidh sin thèid mi a-steach do lùb gun chrìoch, far am faigh sinn liosta de mhodems ceangailte gach uair (gus faighinn a-mach a bheil rèiteachadh an lìonraidh air atharrachadh gu h-obann).

network_list = getNetworklist()

Tha a bhith a 'faighinn liosta de eadar-aghaidh lìonra gu math sìmplidh.

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

Às deidh dhomh an liosta fhaighinn, shuidhich mi seòlaidhean IP gu gach eadar-aghaidh, mar a sheall mi san dealbh sa chaibideil mun mhodem.

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

An uairsin bidh mi dìreach a’ dol tro gach eadar-aghaidh ann an lùb. Agus bidh mi a 'rèiteachadh gach eadar-aghaidh.

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

Bidh mi a’ sgrùdadh an eadar-aghaidh airson comas-gnìomh, mura h-eil lìonra ann, bidh mi a’ gineadh mhearachdan. Ma tha lìonra ann, tha an t-àm ann a dhol an gnìomh!

An seo bidh mi a’ rèiteachadh slighe ssh chun eadar-aghaidh seo (mura h-eil e air a dhèanamh), cuir mearachdan chun t-seirbheisiche ma tha an ùine air tighinn, cuir logaichean agus mu dheireadh ruith speedtest agus sàbhail na logaichean gu faidhle 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()
#и далее тестируем скорость и сохраняем логи. 

Is fhiach iomradh a thoirt air a’ ghnìomh a bhith a’ stèidheachadh cùl 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")

Agus gu dearbh, feumaidh tu a h-uile bòidhchead seo a chur ris an toiseach. Gus seo a dhèanamh bidh mi a’ cruthachadh faidhle:

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

Agus tha mi a 'sgrìobhadh ann:

[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

Bidh mi a’ tionndadh air fèin-luchdachadh agus a’ tòiseachadh!

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

A-nis chì mi logaichean de na tha a’ tachairt leis an àithne:

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

Toraidhean

Uill, a-nis is e an rud as cudromaiche, dè thachair mar thoradh air sin? Seo beagan ghrafaichean a fhuair mi air a ghlacadh tron ​​phròiseas leasachaidh agus deasbaid. Chaidh na grafaichean a thogail le gnuplot leis an sgriobt a leanas.

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

Bha a’ chiad eòlas leis a’ ghnìomhaiche Tele2, a rinn mi airson grunn làithean.

Deuchainn luath aig an aon àm air grunn mhodem LTE

An seo chleachd mi frithealaiche tomhais fiùghantach. Bidh tomhasan astair ag obair, ach bidh iad ag atharrachadh gu mòr, ach tha cuid de luach cuibheasach fhathast ri fhaicinn, agus gheibhear seo le bhith a’ sìoladh an dàta, mar eisimpleir, le cuibheasachd gluasadach.

Nas fhaide air adhart thog mi grunn ghrafaichean airson luchd-obrachaidh telecom eile. Anns a 'chùis seo, bha aon fhrithealaiche deuchainn ann mu thràth, agus bha na toraidhean glè inntinneach cuideachd.

Deuchainn luath aig an aon àm air grunn mhodem LTE

Deuchainn luath aig an aon àm air grunn mhodem LTE

Deuchainn luath aig an aon àm air grunn mhodem LTE

Deuchainn luath aig an aon àm air grunn mhodem LTE

Mar a chì thu, tha an cuspair gu math farsaing airson rannsachadh agus giullachd an dàta seo, agus gu soilleir chan eil e a 'mairsinn airson beagan sheachdainean de dh' obair. Ach…

Toradh na h-obrach

Chaidh an obair a chrìochnachadh gu h-obann air sgàth suidheachaidhean a bha taobh a-muigh mo smachd. B 'e aon de na laigsean sa phròiseact seo, nam bheachd-sa, am modem, nach robh gu mòr airson a bhith ag obair aig an aon àm le modems eile, agus a' dèanamh cleasan mar sin a h-uile uair a chaidh a luchdachadh. Airson na h-adhbharan sin, tha àireamh mhòr de mhodalan modem eile ann; mar as trice tha iad mar-thà ann an cruth Mini PCI-e agus tha iad air an stàladh taobh a-staigh an inneal agus tha iad tòrr nas fhasa an rèiteachadh. Ach ’s e sgeulachd gu tur eadar-dhealaichte a tha sin. Bha am pròiseact inntinneach agus bha mi glè thoilichte gun deach agam air pàirt a ghabhail ann.

Deuchainn luath aig an aon àm air grunn mhodem LTE

Source: www.habr.com

Cuir beachd ann