ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ื‘ืžื”ืœืš ื”ื”ืกื’ืจ ื”ืฆื™ืขื• ืœื™ ืœื”ืฉืชืชืฃ ื‘ืคื™ืชื•ื— ืžื›ืฉื™ืจ ืœืžื“ื™ื“ืช ืžื”ื™ืจื•ืช ืžื•ื“ืžื™ LTE ืขื‘ื•ืจ ืžืกืคืจ ืžืคืขื™ืœื™ื ืกืœื•ืœืจื™ื™ื.

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ื”ืœืงื•ื— ืจืฆื” ืœื”ืขืจื™ืš ืืช ื”ืžื”ื™ืจื•ืช ืฉืœ ืžืคืขื™ืœื™ ื˜ืœืงื•ื ืฉื•ื ื™ื ื‘ืžืงื•ืžื•ืช ื’ื™ืื•ื’ืจืคื™ื™ื ืฉื•ื ื™ื ืขืœ ืžื ืช ืฉื™ื•ื›ืœ ืœื”ื‘ื™ืŸ ืื™ื–ื” ืžืคืขื™ืœ ืกืœื•ืœืจื™ ื”ื•ื ื”ืื•ืคื˜ื™ืžืœื™ ื‘ื™ื•ืชืจ ืขื‘ื•ืจื• ื‘ืขืช ื”ืชืงื ืช ืฆื™ื•ื“ ื‘ืืžืฆืขื•ืช ื—ื™ื‘ื•ืจ LTE, ืœืžืฉืœ, ืœืฉื™ื“ื•ืจื™ ื•ื™ื“ืื•. ื™ื—ื“ ืขื ื–ืืช, ื”ื™ื” ืฆืจื™ืš ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ื‘ืฆื•ืจื” ื”ื›ื™ ืคืฉื•ื˜ื” ื•ื–ื•ืœื” ืฉืืคืฉืจ, ืœืœื ืฆื™ื•ื“ ื™ืงืจ.

ืื ื™ ืื’ื™ื“ ืžื™ื“ ืฉื”ืžืฉื™ืžื” ื”ื™ื ืœื ื”ื›ื™ ืคืฉื•ื˜ื” ื•ืขืชื™ืจืช ื™ื“ืข; ืื ื™ ืื’ื™ื“ ืœืš ื‘ืื™ืœื• ื‘ืขื™ื•ืช ื ืชืงืœืชื™ ื•ืื™ืš ืคืชืจืชื™ ืื•ืชืŸ. ืื– ื‘ื•ื ื ืœืš.

ืฉื™ื ืœื‘

ืžื“ื™ื“ืช ืžื”ื™ืจื•ืช ื—ื™ื‘ื•ืจ LTE ื”ื™ื ืขื ื™ื™ืŸ ืžื•ืจื›ื‘ ืžืื•ื“: ืฆืจื™ืš ืœื‘ื—ื•ืจ ืืช ื”ืฆื™ื•ื“ ื•ืืช ื˜ื›ื ื™ืงืช ื”ืžื“ื™ื“ื” ื”ื ื›ื•ื ื™ื, ื•ื’ื ืœื”ื‘ื™ืŸ ื”ื™ื˜ื‘ ืืช ื”ื˜ื•ืคื•ืœื•ื’ื™ื” ื•ื”ืชืคืขื•ืœ ืฉืœ ื”ืจืฉืช ื”ืกืœื•ืœืจื™ืช. ื‘ื ื•ืกืฃ, ื”ืžื”ื™ืจื•ืช ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืžื•ืฉืคืขืช ืžื›ืžื” ื’ื•ืจืžื™ื: ืžืกืคืจ ื”ืžื ื•ื™ื™ื ื‘ืชื, ืชื ืื™ ืžื–ื’ ื”ืื•ื•ื™ืจ, ืืคื™ืœื• ืžืชื ืœืชื ื”ืžื”ื™ืจื•ืช ื™ื›ื•ืœื” ืœื”ืฉืชื ื•ืช ื‘ืื•ืคืŸ ื“ืจืžื˜ื™ ืขืงื‘ ื˜ื•ืคื•ืœื•ื’ื™ื™ืช ื”ืจืฉืช. ื‘ืื•ืคืŸ ื›ืœืœื™, ืžื“ื•ื‘ืจ ื‘ื‘ืขื™ื” ืขื ืžืกืคืจ ืขืฆื•ื ืฉืœ ืืœืžื•ื ื™ื, ื•ืจืง ืžืคืขื™ืœ ื˜ืœืงื•ื ื™ื›ื•ืœ ืœืคืชื•ืจ ืื•ืชื” ื‘ืฆื•ืจื” ื ื›ื•ื ื”.

ื‘ืชื—ื™ืœื”, ื”ืœืงื•ื— ืจืง ืจืฆื” ืœื”ืกื™ืข ืืช ื”ืฉืœื™ื— ืขื ื”ื˜ืœืคื•ื ื™ื ืฉืœ ื”ืžืคืขื™ืœื™ื, ืœื‘ืฆืข ืžื“ื™ื“ื•ืช ื™ืฉื™ืจื•ืช ื‘ื˜ืœืคื•ืŸ ื•ืœืื—ืจ ืžื›ืŸ ืœืจืฉื•ื ืืช ืชื•ืฆืื•ืช ืžื“ื™ื“ืช ื”ืžื”ื™ืจื•ืช ื‘ืžื—ื‘ืจืช. ื”ืคืชืจื•ืŸ ืฉืœื™ ืœืžื“ื™ื“ืช ื”ืžื”ื™ืจื•ืช ืฉืœ ืจืฉืชื•ืช lte, ืื ื›ื™ ืœื ืื™ื“ื™ืืœื™, ืคื•ืชืจ ืืช ื”ื‘ืขื™ื”.

ืžื—ื•ืกืจ ื–ืžืŸ ืงื™ื‘ืœืชื™ ื”ื—ืœื˜ื•ืช ืœื ืœื˜ื•ื‘ืช ื ื•ื—ื•ืช ืื• ืคืจืงื˜ื™ื•ืช, ืืœื ืœื˜ื•ื‘ืช ืžื”ื™ืจื•ืช ื”ืคื™ืชื•ื—. ืœื“ื•ื’ืžื”, ssh ื”ืคื•ืš ืฉื™ืžืฉ ืœื’ื™ืฉื” ืžืจื—ื•ืง, ื‘ืžืงื•ื ื”-VPN ื”ืžืขืฉื™ ื™ื•ืชืจ, ืขืœ ืžื ืช ืœื—ืกื•ืš ื–ืžืŸ ื‘ื”ื’ื“ืจืช ื”ืฉืจืช ื•ื›ืœ ืœืงื•ื— ื‘ื•ื“ื“.

ืžืฉื™ืžื” ื˜ื›ื ื™ืช

ื›ืคื™ ืฉื ืืžืจ ื‘ื›ืชื‘ื” ืœืœื ืžืคืจื˜ ื˜ื›ื ื™: ืœืžื” ื”ืœืงื•ื— ืœื ืจื•ืฆื” ืืช ื–ื”: ืืœ ืชืขื‘ื•ื“ ื‘ืœื™ ืžืคืจื˜ ื˜ื›ื ื™! ืืฃ ืคืขื, ื‘ืฉื•ื ืžืงื•ื!

ื”ืžืฉื™ืžื” ื”ื˜ื›ื ื™ืช ื”ื™ื™ืชื” ื“ื™ ืคืฉื•ื˜ื”, ืืจื—ื™ื‘ ืื•ืชื” ืžืขื˜ ืœื”ื‘ื ืช ืžืฉืชืžืฉ ื”ืงืฆื”. ื‘ื—ื™ืจืช ื”ืคืชืจื•ื ื•ืช ื”ื˜ื›ื ื™ื™ื ื•ื”ืฆื™ื•ื“ ื”ื•ื›ืชื‘ื” ืขืœ ื™ื“ื™ ื”ืœืงื•ื—. ืื–, ื”ืžืคืจื˜ ื”ื˜ื›ื ื™ ืขืฆืžื•, ืœืื—ืจ ื›ืœ ื”ืื™ืฉื•ืจื™ื:

ืžื‘ื•ืกืก ืขืœ ืžื—ืฉื‘ ืœื•ื— ื™ื—ื™ื“ vim2 ืฆื•ืจ ื‘ื•ื“ืง ืžื”ื™ืจื•ืช ืขื‘ื•ืจ ื—ื™ื‘ื•ืจื™ lte ื“ืจืš ืžื•ื“ืžื™ Huawei e3372h - 153 ืžืกืคืจ ืžืคืขื™ืœื™ ื˜ืœืงื•ื (ืžืื—ื“ ืขื“ n). ื›ืžื• ื›ืŸ, ื™ืฉ ืฆื•ืจืš ืœืงื‘ืœ ืงื•ืื•ืจื“ื™ื ื˜ื•ืช ืžืžืงืœื˜ GPS ื”ืžื—ื•ื‘ืจ ื‘ืืžืฆืขื•ืช UART. ื‘ืฆืข ืžื“ื™ื“ื•ืช ืžื”ื™ืจื•ืช ื‘ืืžืฆืขื•ืช ื”ืฉื™ืจื•ืช www.speedtest.net ื•ื”ื›ื ืก ืื•ืชื ืœื˜ื‘ืœื” ื›ืžื•:

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ื˜ื‘ืœื” ื‘ืคื•ืจืžื˜ csv. ืœืื—ืจ ืžื›ืŸ ืฉืœื— ืืช ื”ืฉืœื˜ ื”ื–ื” ื‘ื“ื•ืืจ ืืœืงื˜ืจื•ื ื™ ื›ืœ 6 ืฉืขื•ืช. ื‘ืžืงืจื” ืฉืœ ืฉื’ื™ืื•ืช, ืžื”ื‘ื”ื‘ ืืช ื”ื ื•ืจื™ืช ื”ืžื—ื•ื‘ืจืช ืœ-GPIO.

ืชื™ืืจืชื™ ืืช ื”ืžืคืจื˜ ื”ื˜ื›ื ื™ ื‘ืฆื•ืจื” ื—ื•ืคืฉื™ืช, ืœืื—ืจ ืื™ืฉื•ืจื™ื ืจื‘ื™ื. ืื‘ืœ ื”ืžืฉืžืขื•ืช ืฉืœ ื”ืžืฉื™ืžื” ื›ื‘ืจ ื’ืœื•ื™ื”. ื ื™ืชืŸ ืฉื‘ื•ืข ืœื›ืœ ื“ื‘ืจ. ืื‘ืœ ื‘ืžืฆื™ืื•ืช ื–ื” ื ืžืฉืš ืฉืœื•ืฉื” ืฉื‘ื•ืขื•ืช. ื–ื” ืœื•ืงื— ื‘ื—ืฉื‘ื•ืŸ ืืช ื”ืขื•ื‘ื“ื” ืฉืขืฉื™ืชื™ ืืช ื–ื” ืจืง ืื—ืจื™ ื”ืขื‘ื•ื“ื” ื”ืขื™ืงืจื™ืช ืฉืœื™ ื•ื‘ืกื•ืคื™ ืฉื‘ื•ืข.

ื›ืืŸ ืื ื™ ืจื•ืฆื” ืœื”ืกื‘ ืฉื•ื‘ ืืช ืชืฉื•ืžืช ื”ืœื‘ ืœื›ืš ืฉื”ืœืงื•ื— ื”ืกื›ื™ื ืžืจืืฉ ืขืœ ื”ืฉื™ืžื•ืฉ ื‘ืฉื™ืจื•ืช ืžื“ื™ื“ืช ื”ืžื”ื™ืจื•ืช ื•ื‘ื—ื•ืžืจื”, ืžื” ืฉื”ื’ื‘ื™ืœ ืžืื•ื“ ืืช ื”ื™ื›ื•ืœื•ืช ืฉืœื™. ื’ื ื”ืชืงืฆื™ื‘ ื”ื™ื” ืžื•ื’ื‘ืœ, ื›ืš ืฉืœื ื ืจื›ืฉ ืฉื•ื ื“ื‘ืจ ืžื™ื•ื—ื“. ืื– ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœืฉื—ืง ืœืคื™ ื”ื›ืœืœื™ื ื”ืืœื”.

ืื“ืจื™ื›ืœื•ืช ื•ืคื™ืชื•ื—

ื”ืชื›ื ื™ืช ืคืฉื•ื˜ื” ื•ื‘ืจื•ืจื”. ืœื›ืŸ, ืืฉืื™ืจ ืื•ืชื• ืœืœื ื”ืขืจื•ืช ืžื™ื•ื—ื“ื•ืช.

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ื”ื—ืœื˜ืชื™ ืœื™ื™ืฉื ืืช ื›ืœ ื”ืคืจื•ื™ืงื˜ ื‘-python, ืœืžืจื•ืช ืฉืœื ื”ื™ื” ืœื™ ื ื™ืกื™ื•ืŸ ื‘ืคื™ืชื•ื— ื‘ืฉืคื” ื”ื–ื• ื‘ื›ืœืœ. ื‘ื—ืจืชื™ ื‘ื• ื›ื™ ื”ื™ื• ื”ืžื•ืŸ ื“ื•ื’ืžืื•ืช ื•ืคืชืจื•ื ื•ืช ืžื•ื›ื ื™ื ืฉื™ื›ื•ืœื™ื ืœื”ืื™ืฅ ืืช ื”ืคื™ืชื•ื—. ืœื›ืŸ, ืื ื™ ืžื‘ืงืฉ ืžื›ืœ ื”ืžืชื›ื ืชื™ื ื”ืžืงืฆื•ืขื™ื™ื ืœื ืœื ื–ื•ืฃ ื‘ื ื™ืกื™ื•ืŸ ื”ืจืืฉื•ืŸ ืฉืœื™ ื‘ืคื™ืชื•ื— ื‘ืคื™ืชื•ืŸ, ื•ืื ื™ ืชืžื™ื“ ืฉืžื— ืœืฉืžื•ืข ื‘ื™ืงื•ืจืช ื‘ื•ื ื” ืœืฉื™ืคื•ืจ ื”ื›ื™ืฉื•ืจื™ื ืฉืœื™.

ื’ื ื‘ืชื”ืœื™ืš ื’ื™ืœื™ืชื™ ืฉืœืคื™ืชื•ืŸ ื™ืฉ ืฉืชื™ ื’ืจืกืื•ืช ืจืฆื•ืช 2 ื•-3, ื›ืชื•ืฆืื” ืžื›ืš ื”ืชืงื‘ืขืชื™ ืขืœ ื”ืฉืœื™ืฉื™ืช.

ืฆืžืชื™ ื—ื•ืžืจื”

ืฆืœื—ืช ืื—ืช vim2

ืงื™ื‘ืœืชื™ ืžื—ืฉื‘ ืขื ืœื•ื— ื™ื—ื™ื“ ื‘ืชื•ืจ ื”ืžื›ื•ื ื” ื”ืจืืฉื™ืช ืฉืœื™ vim2

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ืžืขื‘ื“ ืžื“ื™ื” ืžืขื•ืœื” ื•ืขื•ืฆืžืชื™ ืœื‘ื™ืช ื—ื›ื ื•-SMART-TV, ืื‘ืœ ืžืื•ื“ ืœื ืžืชืื™ื ืœืžืฉื™ืžื” ื”ื–ื•, ืื•, ื ื ื™ื—, ืœื ืžืชืื™ื. ืœื“ื•ื’ืžื”, ืžืขืจื›ืช ื”ื”ืคืขืœื” ื”ืขื™ืงืจื™ืช ืฉืœื• ื”ื™ื ืื ื“ืจื•ืื™ื“, ื•ืœื™ื ื•ืงืก ื”ื™ื ืžืขืจื›ืช ื”ืคืขืœื” ืžืฉื ื™ืช, ื•ื‘ื”ืชืื ืœื›ืš ืืฃ ืื—ื“ ืœื ืžื‘ื˜ื™ื— ืืช ื”ืคืขื•ืœื” ื”ืื™ื›ื•ืชื™ืช ืฉืœ ื›ืœ ื”ืฆืžืชื™ื ื•ื”ื“ืจื™ื™ื‘ืจื™ื ืชื—ืช ืœื™ื ื•ืงืก. ื•ืื ื™ ืžื ื™ื— ืฉื—ืœืง ืžื”ื‘ืขื™ื•ืช ื”ื™ื• ืงืฉื•ืจื•ืช ืœื“ืจื™ื™ื‘ืจื™ ื”-USB ืฉืœ ื”ืคืœื˜ืคื•ืจืžื” ื”ื–ื•, ื›ืš ืฉื”ืžื•ื“ืžื™ื ืœื ืคืขืœื• ื›ืžืฆื•ืคื” ื‘ืœื•ื— ื”ื–ื”. ื™ืฉ ืœื• ื’ื ืชื™ืขื•ื“ ื’ืจื•ืข ื•ืžืคื•ื–ืจ, ื›ืš ืฉื›ืœ ืคืขื•ืœื” ืœืงื—ื” ื”ืจื‘ื” ื–ืžืŸ ืœื—ืคื•ืจ ื‘ืจืฆื™ืคื™ื. ืืคื™ืœื• ืขื‘ื•ื“ื” ืจื’ื™ืœื” ืขื GPIO ืœืงื—ื” ื”ืจื‘ื” ื“ื. ืœื“ื•ื’ืžื”, ืœืงื— ืœื™ ื›ืžื” ืฉืขื•ืช ืœื”ื’ื“ื™ืจ ืืช ื”-LED. ืื‘ืœ, ื›ื“ื™ ืœื”ื™ื•ืช ืื•ื‘ื™ื™ืงื˜ื™ื‘ื™, ื‘ื™ืกื•ื“ื• ืœื ื”ื™ื” ื—ืฉื•ื‘ ืื™ื–ื” ืกื•ื’ ืฉืœ ืœื•ื— ื™ื—ื™ื“ ื–ื” ื”ื™ื”, ื”ืขื™ืงืจ ืฉื–ื” ืขื•ื‘ื“ ื•ื™ืฉ ื™ืฆื™ืื•ืช USB.

ืจืืฉื™ืช, ืื ื™ ืฆืจื™ืš ืœื”ืชืงื™ืŸ ืœื™ื ื•ืงืก ืขืœ ื”ืœื•ื— ื”ื–ื”. ื›ื“ื™ ืœื ืœืกืจื•ืง ืืช ืคืจืื™ ื”ืชื™ืขื•ื“ ืขื‘ื•ืจ ื›ื•ืœื, ื•ื’ื ืขื‘ื•ืจ ืืœื” ืฉื™ืชืžื•ื“ื“ื• ืขื ืžืขืจื›ืช ื”ืœื•ื— ื”ื‘ื•ื“ื“ ื”ื–ื•, ืื ื™ ื›ื•ืชื‘ ืืช ื”ืคืจืง ื”ื–ื”.

ื™ืฉื ืŸ ืฉืชื™ ืืคืฉืจื•ื™ื•ืช ืœื”ืชืงื ืช ืœื™ื ื•ืงืก: ืขืœ ื›ืจื˜ื™ืก SD ื—ื™ืฆื•ื ื™ ืื• ืขืœ MMC ืคื ื™ืžื™. ื‘ื™ืœื™ืชื™ ืขืจื‘ ื‘ื ื™ืกื™ื•ืŸ ืœื”ื‘ื™ืŸ ืื™ืš ืœื’ืจื•ื ืœื–ื” ืœืขื‘ื•ื“ ืขื ื”ื›ืจื˜ื™ืก, ืื– ื”ื—ืœื˜ืชื™ ืœื”ืชืงื™ืŸ ืื•ืชื• ืขืœ ื”-MMC, ืœืžืจื•ืช ืฉืœืœื ืกืคืง ื™ื”ื™ื” ื”ืจื‘ื” ื™ื•ืชืจ ืงืœ ืœืขื‘ื•ื“ ืขื ื›ืจื˜ื™ืก ื—ื™ืฆื•ื ื™.

ืœื’ื‘ื™ ื”ืงื•ืฉื—ื” ืžืกื•ืคืจ ื›ืืŸ ื‘ืฆื•ืจื” ืขืงื•ืžื”. ืื ื™ ืžืชืจื’ื ืžืžื•ื–ืจ ืœืจื•ืกื™ืช. ื›ื“ื™ ืœื”ื‘ื”ื‘ ืืช ื”ืœื•ื—, ืื ื™ ืฆืจื™ืš ืœื—ื‘ืจ ืืช ื”ื—ื•ืžืจื” UART. ื—ื™ื‘ืจ ืื•ืชื• ื‘ื“ืจืš ื”ื‘ืื”.

  • Pin Tool GND: <โ€”> Pin17 ืฉืœ GPIO ืฉืœ VIMs
  • Pin Tool TXD: <โ€”> Pin18 ืฉืœ GPIO ืฉืœ VIMs (Linux_Rx)
  • Pin Tool RXD: <โ€”> Pin19 ืฉืœ GPIO ืฉืœ VIMs (Linux_Tx)
  • Tool Pin VCC: <โ€”> Pin20 ืฉืœ GPIO ืฉืœ VIMs

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ืœืื—ืจ ืžื›ืŸ, ื”ื•ืจื“ืชื™ ืืช ื”ืงื•ืฉื—ื” ืžื›ืืŸ. ื’ืจืกืช ืงื•ืฉื—ื” ืกืคืฆื™ืคื™ืช VIM1_Ubuntu-server-bionic_Linux-4.9_arm64_EMMC_V20191231.

ื›ื“ื™ ืœื”ืขืœื•ืช ืงื•ืฉื—ื” ื–ื•, ืื ื™ ืฆืจื™ืš ื›ืœื™ ืขื–ืจ. ืคืจื˜ื™ื ื ื•ืกืคื™ื ืขืœ ื–ื” ื›ืืŸ. ืœื ื ื™ืกื™ืชื™ ืœื”ื‘ื”ื‘ ืืช ื–ื” ืชื—ืช Windows, ืื‘ืœ ืื ื™ ืฆืจื™ืš ืœื”ื’ื™ื“ ืœืš ื›ืžื” ืžื™ืœื™ื ืขืœ ืงื•ืฉื—ื” ืชื—ืช ืœื™ื ื•ืงืก. ืจืืฉื™ืช, ืืชืงื™ืŸ ืืช ื›ืœื™ ื”ืฉื™ืจื•ืช ืœืคื™ ื”ื”ื•ืจืื•ืช.

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

Aaand... ืฉื•ื ื“ื‘ืจ ืœื ืขื•ื‘ื“. ื‘ื™ืœื™ืชื™ ื›ืžื” ืฉืขื•ืช ื‘ืขืจื™ื›ืช ืชืกืจื™ื˜ื™ ื”ื”ืชืงื ื” ื›ื“ื™ ืฉื”ื›ืœ ื™ืชืงื™ืŸ ืœื™ ื›ืžื• ืฉืฆืจื™ืš. ืื ื™ ืœื ื–ื•ื›ืจ ืžื” ืขืฉื™ืชื™ ืฉื, ืื‘ืœ ื”ื™ื” ื’ื ืืช ื”ืงืจืงืก ื”ื–ื” ืขื ืกื•ืกื™ื. ืื– ื”ื™ื• ื–ื”ื™ืจื™ื. ืื‘ืœ ื‘ืœื™ ื›ืœื™ ื”ืฉื™ืจื•ืช ื”ืืœื” ืื™ืŸ ื˜ืขื ืœืขื ื•ืช ืืช vim2 ืขื•ื“ ื™ื•ืชืจ. ืขื“ื™ืฃ ืœื ืœื”ืชืขืกืง ืื™ืชื• ื‘ื›ืœืœ!

ืœืื—ืจ ืฉื‘ืขื” ืžืขื’ืœื™ื ืฉืœ ื’ื™ื”ื ื•ื, ืชืฆื•ืจืช ืกืงืจื™ืคื˜ ื•ื”ืชืงื ื”, ืงื™ื‘ืœืชื™ ื—ื‘ื™ืœื” ืฉืœ ื›ืœื™ ืขื–ืจ ืขื•ื‘ื“ื™ื. ื—ื™ื‘ืจืชื™ ืืช ื”ืœื•ื— ื“ืจืš USB ืœืžื—ืฉื‘ ื”ืœื™ื ื•ืงืก ืฉืœื™, ื•ื’ื ื—ื™ื‘ืจืชื™ ืืช ื”-UART ืœืคื™ ื”ืชืจืฉื™ื ืœืžืขืœื”.
ืื ื™ ืžื’ื“ื™ืจ ืืช ืžืกื•ืฃ ื”ืžื™ื ื™ืงื•ื ื”ืื”ื•ื‘ ืขืœื™ื™ ืœืžื”ื™ืจื•ืช ืฉืœ 115200, ืœืœื ื‘ืงืจืช ืฉื’ื™ืื•ืช ื—ื•ืžืจื” ื•ืชื•ื›ื ื”. ื•ื‘ื•ืื• ื ืชื—ื™ืœ.

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ื‘ืขืช ื˜ืขื™ื ืช VIM2 ื‘ืžืกื•ืฃ UART, ืื ื™ ืœื•ื—ืฅ ืขืœ ืžืงืฉ, ื›ื’ื•ืŸ ืžืงืฉ ื”ืจื•ื•ื—, ื›ื“ื™ ืœื”ืคืกื™ืง ืืช ื”ื˜ืขื™ื ื”. ืœืื—ืจ ื”ื•ืคืขืช ื”ืฉื•ืจื”

kvim2# 

ืื ื™ ืžื›ื ื™ืก ืืช ื”ืคืงื•ื“ื”:

kvim2# run update

ื‘ืžืืจื— ืฉืžืžื ื• ืื ื• ื ื˜ืขื ื™ื, ืื ื™ ืžื‘ืฆืข:

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

ื–ื”ื•, ืคื™ื•. ื‘ื“ืงืชื™, ื™ืฉ ืœื™ื ื•ืงืก ืขืœ ื”ืœื•ื—. ื›ื ื™ืกื”/ืกื™ืกืžื” khadas:khadas.

ืœืื—ืจ ืžื›ืŸ, ื›ืžื” ื”ื’ื“ืจื•ืช ืจืืฉื•ื ื™ื•ืช ืงืœื•ืช. ืœืขื‘ื•ื“ื” ื ื•ืกืคืช, ืื ื™ ืžืฉื‘ื™ืช ืืช ื”ืกื™ืกืžื” ืขื‘ื•ืจ sudo (ื›ืŸ, ืœื ืžืื•ื‘ื˜ื—, ืื‘ืœ ื ื•ื—).

sudo visudo

ืื ื™ ืขื•ืจืš ืืช ื”ืฉื•ืจื” ืœื˜ื•ืคืก ื•ืฉื•ืžืจ

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

ื•ืื– ืื ื™ ืžืฉื ื” ืืช ื”ืžืงื•ื ื”ื ื•ื›ื—ื™ ื›ืš ืฉื”ืฉืขื” ืชื”ื™ื” ื‘ืžื•ืกืงื‘ื”, ืื—ืจืช ื–ื” ื™ื”ื™ื” ื‘ื’ืจื™ื ื™ืฅ'.

sudo timedatectl set-timezone Europe/Moscow

ืื•

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

ืื ืืชื” ืžืชืงืฉื”, ืืœ ืชืฉืชืžืฉ ื‘ืœื•ื— ื”ื–ื”; Raspberry Pi ืขื“ื™ืฃ. ื‘ึผึดื™ื•ึนืฉืึถืจ.

ืžื•ื“ื Huawei e3372h โ€“ 153

ื”ืžื•ื“ื ื”ื–ื” ื”ื™ื” ืžืงื•ืจ ื“ื ืžืฉืžืขื•ืชื™ ืขื‘ื•ืจื™, ื•ืœืžืขืฉื” ื”ื•ื ื”ืคืš ืœืฆื•ื•ืืจ ื”ื‘ืงื‘ื•ืง ืฉืœ ื”ืคืจื•ื™ืงื˜ ื›ื•ืœื•. ื‘ืื•ืคืŸ ื›ืœืœื™, ื”ืฉื "ืžื•ื“ื" ืœืžื›ืฉื™ืจื™ื ืืœื• ืื™ื ื• ืžืฉืงืฃ ื›ืœืœ ืืช ืžื”ื•ืช ื”ืขื‘ื•ื“ื”: ื–ื”ื• ืงื•ืžื‘ื™ื ื” ืขื•ืฆืžืชื™ืช, ืœื—ื•ืžืจื” ื–ื• ื™ืฉ ื”ืชืงืŸ ืžื•ืจื›ื‘ ืฉืžืชื™ื™ืžืจ ืœื”ื™ื•ืช CD-ROM ืขืœ ืžื ืช ืœื”ืชืงื™ืŸ ื“ืจื™ื™ื‘ืจื™ื, ื•ืœืื—ืจ ืžื›ืŸ ืขื•ื‘ืจ ืœืžืฆื‘ ื›ืจื˜ื™ืก ืจืฉืช.

ืžื‘ื—ื™ื ื” ืืจื›ื™ื˜ืงื˜ื•ื ื™ืช, ืžื ืงื•ื“ืช ืžื‘ื˜ื• ืฉืœ ืžืฉืชืžืฉ ืœื™ื ื•ืงืก, ืื—ืจื™ ื›ืœ ื”ื”ื’ื“ืจื•ืช, ื–ื” ื ืจืื” ื›ืš: ืœืื—ืจ ื—ื™ื‘ื•ืจ ื”ืžื•ื“ื, ื™ืฉ ืœื™ ืžืžืฉืง ืจืฉืช eth*, ืืฉืจ ื‘ืืžืฆืขื•ืช dhcp ืžืงื‘ืœ ืืช ื›ืชื•ื‘ืช ื”-IP 192.168.8.100, ื•ืืช ืฉืขืจ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ. ื”ื•ื 192.168.8.1.

ื•ื”ืจื’ืข ื”ื›ื™ ื—ืฉื•ื‘! ืžื•ื“ืœ ืžื•ื“ื ื–ื” ืื™ื ื• ื™ื›ื•ืœ ืœืขื‘ื•ื“ ื‘ืžืฆื‘ ืžื•ื“ื, ืืฉืจ ื ืฉืœื˜ ืขืœ ื™ื“ื™ ืคืงื•ื“ื•ืช AT. ื”ื›ืœ ื™ื”ื™ื” ื”ืจื‘ื” ื™ื•ืชืจ ืคืฉื•ื˜, ืชื™ืฆื•ืจ ื—ื™ื‘ื•ืจื™ PPP ืขื‘ื•ืจ ื›ืœ ืžื•ื“ื ื•ืื– ืชืคืขืœ ืื™ืชื. ืื‘ืœ ื‘ืžืงืจื” ืฉืœื™, "ืขืฆืžื•" (ืœื™ืชืจ ื“ื™ื•ืง, ืฆื•ืœืœ ืœื™ื ื•ืงืก ืœืคื™ ื—ื•ืงื™ udev), ื™ื•ืฆืจ ืžืžืฉืง eth ื•ืžืงืฆื” ืœื• ื›ืชื•ื‘ืช IP ื“ืจืš dhcp.

ื›ื“ื™ ืœืžื ื•ืข ื‘ืœื‘ื•ืœ ื ื•ืกืฃ, ืื ื™ ืžืฆื™ืข ืœืฉื›ื•ื— ืืช ื”ืžื™ืœื” "ืžื•ื“ื" ื•ืœื•ืžืจ ื›ืจื˜ื™ืก ืจืฉืช ื•ืฉืขืจ, ื›ื™ ื‘ืขืฆื, ื–ื” ื›ืžื• ืœื—ื‘ืจ ื›ืจื˜ื™ืก ืจืฉืช ื—ื“ืฉ ืขื ืฉืขืจ.
ื›ืืฉืจ ื™ืฉ ืžื•ื“ื ืื—ื“, ื–ื” ืœื ื’ื•ืจื ืœื‘ืขื™ื•ืช ืžื™ื•ื—ื“ื•ืช, ืื‘ืœ ื›ืืฉืจ ื™ืฉ ื™ื•ืชืจ ืžืื—ื“, ื›ืœื•ืžืจ n-pieces, ืžืชืขื•ืจืจืช ืชืžื•ื ืช ื”ืจืฉืช ื”ื‘ืื”.

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ื›ืœื•ืžืจ, n ื›ืจื˜ื™ืกื™ ืจืฉืช, ืขื ืื•ืชื” ื›ืชื•ื‘ืช IP, ื›ืœ ืื—ื“ ืขื ืื•ืชื• ืฉืขืจ ื‘ืจื™ืจืช ืžื—ื“ืœ. ืื‘ืœ ืœืžืขืฉื”, ื›ืœ ืื—ื“ ืžื”ื ืžื—ื•ื‘ืจ ืœืžืคืขื™ืœ ืžืฉืœื•.

ื‘ืชื—ื™ืœื”, ื”ื™ื” ืœื™ ืคืชืจื•ืŸ ืคืฉื•ื˜: ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” ifconfig ืื• ip, ื›ื‘ื” ืืช ื›ืœ ื”ืžืžืฉืงื™ื ื•ืคืฉื•ื˜ ื”ืคืขืœ ืื—ื“ ื‘ืชื•ืจื• ื•ื‘ื“ื•ืง ืื•ืชื•. ื”ืคืชืจื•ืŸ ื”ื™ื” ื˜ื•ื‘ ืœื›ื•ืœื, ืจืง ืฉื‘ืจื’ืขื™ ื”ืžืขื‘ืจ ืœื ื”ืฆืœื—ืชื™ ืœื”ืชื—ื‘ืจ ืœืžื›ืฉื™ืจ. ื•ืžื›ื™ื•ื•ืŸ ืฉื”ืžืขื‘ืจ ื”ื•ื ืชื›ื•ืฃ ื•ืžื”ื™ืจ, ืœืžืขืฉื” ืœื ื”ื™ื™ืชื” ืœื™ ืืคืฉืจื•ืช ืœื”ืชื—ื‘ืจ ื›ืœืœ.

ืœื›ืŸ, ื‘ื—ืจืชื™ ื‘ื ืชื™ื‘ ืฉืœ ืฉื™ื ื•ื™ ื™ื“ื ื™ ืฉืœ ื›ืชื•ื‘ื•ืช ื”-IP ืฉืœ ื”ืžื•ื“ืžื™ื ื•ืœืื—ืจ ืžื›ืŸ ื”ื ืขืช ืชื ื•ืขื” ื‘ืืžืฆืขื•ืช ื”ื’ื“ืจื•ืช ื ื™ืชื•ื‘.

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ื–ื” ืœื ื”ืกื•ืฃ ืœื‘ืขื™ื•ืช ืฉืœื™ ืขื ืžื•ื“ืžื™ื: ื‘ืžืงืจื” ืฉืœ ื‘ืขื™ื•ืช ื—ืฉืžืœ, ื”ื ื ืคืœื•, ื•ื ื“ืจืฉ ืืกืคืงืช ื—ืฉืžืœ ื™ืฆื™ื‘ื” ื•ื˜ื•ื‘ื” ืœืจื›ื–ืช ื”-USB. ืคืชืจืชื™ ืืช ื”ื‘ืขื™ื” ืขืœ ื™ื“ื™ ื”ืœื—ืžื” ืงืฉื” ืฉืœ ื”ื›ื•ื— ื™ืฉื™ืจื•ืช ืœืจื›ื–ืช. ื‘ืขื™ื” ื ื•ืกืคืช ืฉื ืชืงืœืชื™ ื‘ื” ื•ืืฉืจ ื”ืจืกื” ืืช ื›ืœ ื”ืคืจื•ื™ืงื˜: ืœืื—ืจ ืืชื—ื•ืœ ืžื—ื“ืฉ ืื• ื”ืคืขืœื” ืงืจื” ืฉืœ ื”ืžื›ืฉื™ืจ, ืœื ื›ืœ ื”ืžื•ื“ืžื™ื ื–ื•ื”ื• ื•ืœื ืชืžื™ื“, ื•ืœื ื”ืฆืœื—ืชื™ ืœืงื‘ื•ืข ืžื“ื•ืข ื–ื” ืงืจื” ื•ืœืคื™ ืื™ื–ื” ืืœื’ื•ืจื™ืชื. ืื‘ืœ ื“ื‘ืจ ืจืืฉื•ืŸ.

ื›ื“ื™ ืฉื”ืžื•ื“ื ื™ืคืขืœ ื›ื”ืœื›ื”, ื”ืชืงื ืชื™ ืืช ื—ื‘ื™ืœืช usb-modeswitch.

sudo apt update
sudo apt install -y usb-modeswitch

ืœืื—ืจ ืžื›ืŸ, ืœืื—ืจ ื”ื—ื™ื‘ื•ืจ, ื”ืžื•ื“ื ื™ื–ื•ื”ื” ื•ื™ื•ื’ื“ืจ ื›ื”ืœื›ื” ืขืœ ื™ื“ื™ ืชืช-ื”ืžืขืจื›ืช udev. ืื ื™ ื‘ื•ื“ืง ืคืฉื•ื˜ ืขืœ ื™ื“ื™ ื—ื™ื‘ื•ืจ ื”ืžื•ื“ื ื•ืžื•ื•ื“ื ืฉื”ืจืฉืช ืžื•ืคื™ืขื”.
ื‘ืขื™ื” ื ื•ืกืคืช ืฉืœื ื”ืฆืœื—ืชื™ ืœืคืชื•ืจ: ืื™ืš ืื ื™ ื™ื›ื•ืœ ืœืงื‘ืœ ืžื”ืžื•ื“ื ื”ื–ื” ืืช ืฉื ื”ืžืคืขื™ืœ ืื™ืชื• ืื ื—ื ื• ืขื•ื‘ื“ื™ื? ืฉื ื”ืžืคืขื™ืœ ื›ืœื•ืœ ื‘ืžืžืฉืง ื”ืื™ื ื˜ืจื ื˜ ืฉืœ ื”ืžื•ื“ื ื‘ื›ืชื•ื‘ืช 192.168.8.1. ื–ื”ื• ื“ืฃ ืื™ื ื˜ืจื ื˜ ื“ื™ื ืžื™ ืฉืžืงื‘ืœ ื ืชื•ื ื™ื ื“ืจืš ื‘ืงืฉื•ืช ืฉืœ Ajax, ื›ืš ืฉืคืฉื•ื˜ ื‘ื ื™ื™ืช ื”ืขืžื•ื“ ื•ื ื™ืชื•ื— ื”ืฉื ืœื ื™ืขื‘ื“ื•. ืื– ื”ืชื—ืœืชื™ ืœื”ืกืชื›ืœ ืื™ืš ืœืคืชื— ื“ืฃ ืื™ื ื˜ืจื ื˜ ื•ื›ื•' ื•ื”ื‘ื ืชื™ ืฉืื ื™ ืขื•ืฉื” ืื™ื–ื” ืฉื˜ื•ื™ื•ืช. ื›ืชื•ืฆืื” ืžื›ืš, ื”ื•ื ื™ืจืง, ื•ื”ืžืคืขื™ืœ ื”ื—ืœ ืœืงื‘ืœ ื‘ืืžืฆืขื•ืช ื”-Speedtest API ืขืฆืžื•.

ื”ืจื‘ื” ื™ื•ืชืจ ืงืœ ืื ืœืžื•ื“ื ื”ื™ื™ืชื” ื’ื™ืฉื” ื‘ืืžืฆืขื•ืช ืคืงื•ื“ื•ืช AT. ืืคืฉืจ ื™ื”ื™ื” ืœื”ื’ื“ื™ืจ ืื•ืชื• ืžื—ื“ืฉ, ืœื™ืฆื•ืจ ื—ื™ื‘ื•ืจ PPP, ืœื”ืงืฆื•ืช IP, ืœื”ืฉื™ื’ ืžืคืขื™ืœ ื˜ืœืงื•ื ื•ื›ื•'. ืื‘ืœ ืื‘ื•ื™, ืื ื™ ืขื•ื‘ื“ ืขื ืžื” ืฉื ื™ืชืŸ ืœื™.

GPS

ืœืžืงืœื˜ ื”-GPS ืฉืงื™ื‘ืœืชื™ ื”ื™ื” ืžืžืฉืง UART ื•ื›ื•ื—. ื–ื” ืœื ื”ื™ื” ื”ืคืชืจื•ืŸ ื”ื˜ื•ื‘ ื‘ื™ื•ืชืจ, ืื‘ืœ ื–ื” ืขื“ื™ื™ืŸ ื”ื™ื” ื‘ืจ ื‘ื™ืฆื•ืข ื•ืคืฉื•ื˜. ื”ืžืงืœื˜ ื ืจืื” ื‘ืขืจืš ื›ืš.

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ืœืžืขืŸ ื”ืืžืช, ื–ื• ื”ื™ื™ืชื” ื”ืคืขื ื”ืจืืฉื•ื ื” ืฉืœื™ ืฉืขื‘ื“ืชื™ ืขื ืžืงืœื˜ GPS, ืื‘ืœ ื›ืคื™ ืฉืฆื™ืคื™ืชื™, ื”ื›ืœ ื—ืฉื‘ ืขื‘ื•ืจื ื• ืžื–ืžืŸ. ืื– ืื ื—ื ื• ืคืฉื•ื˜ ืžืฉืชืžืฉื™ื ื‘ืคืชืจื•ื ื•ืช ืžื•ื›ื ื™ื.

ืจืืฉื™ืช, ืื ื™ ืžืืคืฉืจ ืœ-uart_AO_B (UART_RX_AO_B, UART_TX_AO_B) ืœื—ื‘ืจ GPS.

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

ืœืื—ืจ ืžื›ืŸ ืื ื™ ื‘ื•ื“ืง ืืช ื”ืฆืœื—ืช ื”ื ื™ืชื•ื—.

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

ื”ืคืงื•ื“ื” ื”ื–ื• ื›ื ืจืื” ืขื•ืจื›ืช ืืช ื”-devtree ืชื•ืš ื›ื“ื™ ืชื ื•ืขื”, ื•ื–ื” ืžืื•ื“ ื ื•ื—.

ืœืื—ืจ ื”ืฆืœื—ืช ืคืขื•ืœื” ื–ื•, ื”ืคืขืœ ืžื—ื“ืฉ ื•ื”ืชืงืŸ ืืช ื“ืžื•ืŸ ื”-GPS.

khadas@Khadas:~$ sudo reboot

ื”ืชืงื ืช ื“ืžื•ืŸ ื”-GPS. ืื ื™ ืžืชืงื™ืŸ ื”ื›ืœ ื•ืžื ืชืง ืื•ืชื• ืžื™ื“ ืœื”ื’ื“ืจื” ื ื•ืกืคืช.

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

ืขืจื™ื›ืช ืงื•ื‘ืฅ ื”ื”ื’ื“ืจื•ืช.

sudo vim /etc/default/gpsd

ืื ื™ ืžืชืงื™ืŸ UART ืฉืขืœื™ื• ื™ืชืœื” ื”-GPS.

DEVICES="/dev/ttyS4"

ื•ืื– ืื ื—ื ื• ืžื“ืœื™ืงื™ื ื”ื›ืœ ื•ืžืชื—ื™ืœื™ื.

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

ืœืื—ืจ ืžื›ืŸ, ืื ื™ ืžื—ื‘ืจ ืืช ื”-GPS.

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ื—ื•ื˜ ื”-GPS ื ืžืฆื ื‘ื™ื“ื™ื™ื ืฉืœื™, ื—ื•ื˜ื™ ื ื™ืคื•ื™ ื”ื‘ืื’ื™ื ืฉืœ UART ื ืจืื™ื ืžืชื—ืช ืœืืฆื‘ืขื•ืชื™ื™.

ืื ื™ ืžืืชื—ืœ ื•ื‘ื•ื“ืง ืืช ืคืขื•ืœืช ื”-GPS ื‘ืืžืฆืขื•ืช ืชื•ื›ื ืช gpsmon.

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ืืชื” ืœื ื™ื›ื•ืœ ืœืจืื•ืช ืืช ื”ืœื•ื•ื™ื™ื ื™ื ื‘ืฆื™ืœื•ื ื”ืžืกืš ื”ื–ื”, ืื‘ืœ ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืชืงืฉื•ืจืช ืขื ืžืงืœื˜ ื”-GPS, ื•ื–ื” ืื•ืžืจ ืฉื”ื›ืœ ื‘ืกื“ืจ.

ื‘-python ื ื™ืกื™ืชื™ ืืคืฉืจื•ื™ื•ืช ืจื‘ื•ืช ืœืขื‘ื•ื“ื” ืขื ื”ื“ืžื•ืŸ ื”ื–ื”, ืื‘ืœ ื”ืกืชืคืงืชื™ ื‘ื–ื• ืฉืขื‘ื“ื” ื ื›ื•ืŸ ืขื python 3.

ืื ื™ ืžืชืงื™ืŸ ืืช ื”ืกืคืจื™ื™ื” ื”ื“ืจื•ืฉื”.

sudo -H pip3 install gps3 

ื•ืื ื™ ืžืคืกืœืช ืืช ืงื•ื“ ื”ืขื‘ื•ื“ื”.

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

ืื ืื ื™ ืฆืจื™ืš ืœืงื‘ืœ ืงื•ืื•ืจื“ื™ื ื˜ื•ืช, ื–ื” ื ืขืฉื” ื‘ืืžืฆืขื•ืช ื”ืฉื™ื—ื” ื”ื‘ืื”:

longitude, latitude = getPositionData(agps_thread)

ื•ืชื•ืš 1-10 ืฉื ื™ื•ืช ืื ื™ ืืงื‘ืœ ืืช ื”ืงื•ืื•ืจื“ื™ื ื˜ื” ืื• ืœื. ื›ืŸ, ื”ื™ื• ืœื™ ืขืฉืจื” ื ื™ืกื™ื•ื ื•ืช ืœื”ืฉื™ื’ ืงื•ืื•ืจื“ื™ื ื˜ื•ืช. ืœื ืื•ืคื˜ื™ืžืœื™, ืขืงื•ื ื•ืขืงื•ื, ืื‘ืœ ื–ื” ืขื•ื‘ื“. ื”ื—ืœื˜ืชื™ ืœืขืฉื•ืช ื–ืืช ืžื›ื™ื•ื•ืŸ ืฉ-GPS ื™ื›ื•ืœ ืœืงื‘ืœ ืงืœื™ื˜ื” ื’ืจื•ืขื” ื•ืœื ืชืžื™ื“ ืœืงื‘ืœ ื ืชื•ื ื™ื. ืื ืืชื” ืžื—ื›ื” ืœืงื‘ืœ ื ืชื•ื ื™ื, ืื– ืื ืืชื” ืขื•ื‘ื“ ื‘ื—ื“ืจ ืžืจื•ื—ืง, ื”ืชื•ื›ื ื™ืช ืชืงืคื ื‘ืžืงื•ื ื”ื–ื”. ืœื›ืŸ, ื™ื™ืฉืžืชื™ ืืช ื”ืืคืฉืจื•ืช ื”ืœื ืืœื’ื ื˜ื™ืช ื”ื–ื•.

ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ืื ื”ื™ื” ื™ื•ืชืจ ื–ืžืŸ, ื ื™ืชืŸ ื”ื™ื” ืœืงื‘ืœ ื ืชื•ื ื™ื ืž-GPS ื™ืฉื™ืจื•ืช ื“ืจืš UART, ืœื ืชื— ืื•ืชื ื‘ืฉืจืฉื•ืจ ื ืคืจื“ ื•ืœืขื‘ื•ื“ ืื™ืชื•. ืื‘ืœ ืœื ื”ื™ื” ื–ืžืŸ ื‘ื›ืœืœ, ื•ืžื›ืืŸ ื”ืงื•ื“ ื”ืžื›ื•ืขืจ ื‘ืื›ื–ืจื™ื•ืช. ื•ื›ืŸ, ืื ื™ ืœื ืžืชื‘ื™ื™ืฉ.

LED

ื—ื™ื‘ื•ืจ ื”-LED ื”ื™ื” ืคืฉื•ื˜ ื•ืงืฉื” ื‘ื• ื–ืžื ื™ืช. ื”ืงื•ืฉื™ ื”ืขื™ืงืจื™ ื”ื•ื ืฉืžืกืคืจ ื”-PIN ื‘ืžืขืจื›ืช ืื™ื ื• ืžืชืื™ื ืœืžืกืคืจ ื”-Pin ืขืœ ื”ืœื•ื— ื•ื‘ื’ืœืœ ืฉื”ืชื™ืขื•ื“ ื ื›ืชื‘ ื‘ื™ื“ ืฉืžืืœ. ื›ื“ื™ ืœื”ืฉื•ื•ืช ืืช ืžืกืคืจ ืกื™ื›ืช ื”ื—ื•ืžืจื” ื•ืžืกืคืจ ื”ืกื™ื›ื” ื‘ืžืขืจื›ืช ื”ื”ืคืขืœื”, ืขืœื™ืš ืœื”ืคืขื™ืœ ืืช ื”ืคืงื•ื“ื”:

gpio readall

ืชื•ืฆื’ ื˜ื‘ืœื” ืฉืœ ื”ืชื›ืชื‘ื•ื™ื•ืช ืกื™ื›ื•ืช ื‘ืžืขืจื›ืช ื•ื‘ืœื•ื—. ืœืื—ืจ ืžื›ืŸ ืื ื™ ื›ื‘ืจ ื™ื›ื•ืœ ืœื”ืคืขื™ืœ ืืช ื”ืคื™ืŸ ื‘ืžืขืจื›ืช ื”ื”ืคืขืœื” ืขืฆืžื”. ื‘ืžืงืจื” ืฉืœื™ ื”-LED ืžื—ื•ื‘ืจ ืœ GPIOH_5.

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ืื ื™ ืžืขื‘ื™ืจ ืืช ืคื™ืŸ ื”-GPIO ืœืžืฆื‘ ืคืœื˜.

gpio -g mode 421 out

ืื ื™ ืจื•ืฉื ืืคืก.

gpio -g write 421 0

ืื ื™ ืจื•ืฉื ืื—ื“.

gpio -g write 421 1

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE
ื”ื›ืœ ืžื•ืืจ, ืœืื—ืจ ื›ืชื™ื‘ืช "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)

ื›ืขืช, ื‘ืžืงืจื” ืฉืœ ืฉื’ื™ืื•ืช, ืื ื™ ืงื•ืจื ืœ- error_blink() ื•ื”ื ื•ืจื™ืช ืชื”ื‘ื”ื‘ ื™ืคื”.

ืฆืžืชื™ ืชื•ื›ื ื”

Speedtest API

ื–ื• ืฉืžื—ื” ื’ื“ื•ืœื” ืฉืœืฉื™ืจื•ืช speedtest.net ื™ืฉ Python-API ืžืฉืœื•, ืืชื” ื™ื›ื•ืœ ืœื”ืกืชื›ืœ ืขืœ GitHub.

ื”ื“ื‘ืจ ื”ื˜ื•ื‘ ื”ื•ื ืฉื™ืฉ ืงื•ื“ื™ ืžืงื•ืจ ืฉื ื™ืชืŸ ืœืฆืคื•ืช ื‘ื”ื. ื›ื™ืฆื“ ืœืขื‘ื•ื“ ืขื API ื–ื” (ื“ื•ื’ืžืื•ืช ืคืฉื•ื˜ื•ืช) ื ื™ืชืŸ ืœืžืฆื•ื ื‘ ืกืขื™ืฃ ืจืœื•ื•ื ื˜ื™.

ืื ื™ ืžืชืงื™ืŸ ืืช ืกืคืจื™ื™ืช python ืขื ื”ืคืงื•ื“ื” ื”ื‘ืื”.

sudo -H pip3 install speedtest-cli

ืœื“ื•ื’ืžื”, ืืชื” ื™ื›ื•ืœ ืืคื™ืœื• ืœื”ืชืงื™ืŸ ื‘ื•ื“ืง ืžื”ื™ืจื•ืช ื‘ืื•ื‘ื•ื ื˜ื• ื™ืฉื™ืจื•ืช ืžื”ืชื•ื›ื ื”. ื–ื•ื”ื™ ืื•ืชื” ืืคืœื™ืงืฆื™ื™ืช python, ืืฉืจ ืœืื—ืจ ืžื›ืŸ ื ื™ืชืŸ ืœื”ืคืขื™ืœ ื™ืฉื™ืจื•ืช ืžื”ืžืกื•ืฃ.

sudo apt install speedtest-cli -y

ื•ืžื“ื•ื“ ืืช ืžื”ื™ืจื•ืช ื”ืื™ื ื˜ืจื ื˜ ืฉืœืš.

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

ื›ืชื•ืฆืื” ืžื›ืš, ื‘ื“ื™ื•ืง ื›ืžื•ื ื™. ื”ื™ื™ืชื™ ืฆืจื™ืš ืœื”ื™ื›ื ืก ืœืงื•ื“ื™ ื”ืžืงื•ืจ ืฉืœ ืžื‘ื—ืŸ ื”ืžื”ื™ืจื•ืช ื”ื–ื” ื›ื“ื™ ืœื™ื™ืฉื ืื•ืชื ื‘ืฆื•ืจื” ืžืœืื” ื™ื•ืชืจ ื‘ืคืจื•ื™ืงื˜ ืฉืœื™. ืื—ืช ื”ืžืฉื™ืžื•ืช ื”ื—ืฉื•ื‘ื•ืช ื‘ื™ื•ืชืจ ื”ื™ื ืœื”ืฉื™ื’ ืืช ืฉืžื• ืฉืœ ืžืคืขื™ืœ ื”ื˜ืœืงื•ื ื›ื“ื™ ืœื”ื—ืœื™ืคื• ื‘ืฆืœื—ืช.

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"
#ั‚ัƒั‚ ะธะดะตั‚ ะทะฐะฟะธััŒ ะฒ ั„ะฐะนะป ะปะพะณะพะฒ

ื’ื ื›ืืŸ ื”ืชื‘ืจืจ ืฉื”ื›ืœ ืœื ื›ืœ ื›ืš ืคืฉื•ื˜, ืœืžืจื•ืช ืฉื–ื” ื”ื™ื” ื ืจืื” ื”ืจื‘ื” ื™ื•ืชืจ ืคืฉื•ื˜. ื‘ืชื—ื™ืœื”, ืคืจืžื˜ืจ ื”ืฉืจืชื™ื ื”ื™ื” ืฉื•ื•ื” ืœ [], ื”ื ืื•ืžืจื™ื, ื‘ื—ืจ ืืช ื”ืฉืจืช ื”ื˜ื•ื‘ ื‘ื™ื•ืชืจ. ื›ืชื•ืฆืื” ืžื›ืš, ื”ื™ื• ืœื™ ืฉืจืชื™ื ืืงืจืื™ื™ื, ื•ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœื ื—ืฉ, ืžื”ื™ืจื•ืช ืžืฉืชื ื”. ื–ื”ื• ื ื•ืฉื ืžื•ืจื›ื‘ ืœืžื“ื™, ืฉื™ืžื•ืฉ ื‘ืฉืจืช ืงื‘ื•ืข, ืื ื›ืŸ, ืกื˜ื˜ื™ ืื• ื“ื™ื ืžื™, ื“ื•ืจืฉ ืžื—ืงืจ. ืื‘ืœ ื”ื ื” ื“ื•ื’ืžื” ืœื’ืจืคื™ื ืฉืœ ืžื“ื™ื“ืช ืžื”ื™ืจื•ืช ืฉืœ ืžืคืขื™ืœื™ Beeline ื‘ืขืช ื‘ื—ื™ืจื” ื“ื™ื ืžื™ืช ืฉืœ ืฉืจืช ื‘ื“ื™ืงื” ื•ืฉืจืช ืงื‘ื•ืข ืกื˜ื˜ื™.

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE
ื”ืชื•ืฆืื” ืฉืœ ืžื“ื™ื“ืช ืžื”ื™ืจื•ืช ื‘ื‘ื—ื™ืจืช ืฉืจืช ื“ื™ื ืžื™.

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE
ื”ืชื•ืฆืื” ืฉืœ ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช, ืขื ืฉืจืช ืื—ื“ ืฉื ื‘ื—ืจ ื‘ืงืคื“ื ื•ืช.

ื‘ืžื”ืœืš ื”ื‘ื“ื™ืงื” ื™ืฉ "ืคืจื•ื•ื”" ื‘ืฉื ื™ ื”ืžืงื•ืžื•ืช, ื•ื™ืฉ ืœื”ืกื™ืจ ืื•ืชื” ื‘ืฉื™ื˜ื•ืช ืžืชืžื˜ื™ื•ืช. ืื‘ืœ ืขื ืฉืจืช ืงื‘ื•ืข ื–ื” ืžืขื˜ ืคื—ื•ืช ื•ื”ืžืฉืจืขืช ื™ืฆื™ื‘ื” ื™ื•ืชืจ.
ื‘ืื•ืคืŸ ื›ืœืœื™, ื–ื” ืžืงื•ื ืฉืœ ืžื—ืงืจ ื’ื“ื•ืœ. ื•ื”ื™ื™ืชื™ ืžื•ื“ื“ ืืช ื”ืžื”ื™ืจื•ืช ืฉืœ ื”ืฉืจืช ืฉืœื™ ื‘ืืžืฆืขื•ืช ื›ืœื™ ื”ืฉื™ืจื•ืช iperf. ืื‘ืœ ืื ื—ื ื• ื ืฆืžื“ื™ื ืœืžืคืจื˜ ื”ื˜ื›ื ื™.

ืฉืœื™ื—ืช ื“ื•ืืจ ื•ืฉื’ื™ืื•ืช

ื›ื“ื™ ืœืฉืœื•ื— ื“ื•ืืจ, ื ื™ืกื™ืชื™ ื›ืžื” ืขืฉืจื•ืช ืืคืฉืจื•ื™ื•ืช ืฉื•ื ื•ืช, ืื‘ืœ ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื”ืชืคืฉืจืชื™ ืขืœ ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื. ืจืฉืžืชื™ ืชื™ื‘ืช ื“ื•ืืจ ื‘-Yandex ื•ืื– ืœืงื—ืชื™ ื–ื•ื”ื™ ื“ื•ื’ืžื” ืœืฉืœื™ื—ืช ื“ื•ืืจ. ื‘ื“ืงืชื™ ืืช ื–ื” ื•ื™ื™ืฉืžืชื™ ืืช ื–ื” ื‘ืชื•ื›ื ื™ืช. ื“ื•ื’ืžื” ื–ื• ื‘ื•ื—ื ืช ืืคืฉืจื•ื™ื•ืช ืฉื•ื ื•ืช, ื›ื•ืœืœ ืฉืœื™ื—ื” ืž-gmail ื•ื›ื•'. ืœื ืจืฆื™ืชื™ ืœื”ืชืขืกืง ื‘ื”ื’ื“ืจืช ืฉืจืช ื”ื“ื•ืืจ ืฉืœื™ ื•ืœื ื”ื™ื” ืœื™ ื–ืžืŸ ืœื–ื”, ืื‘ืœ ื›ืคื™ ืฉื”ืชื‘ืจืจ ืžืื•ื—ืจ ื™ื•ืชืจ, ื–ื” ื’ื ื”ื™ื” ืœืฉื•ื•ื.

ื”ื™ื•ืžื ื™ื ื ืฉืœื—ื• ืœืคื™ ื”ืžืชื–ืžืŸ, ืื ื™ืฉ ืงืฉืจ, ื›ืœ 6 ืฉืขื•ืช: ื‘ืฉืขื” 00:06, 12:18, XNUMX:XNUMX ื•-XNUMX:XNUMX. ืฉืœื— ืื•ืชื• ื›ื“ืœืงืžืŸ.

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

ื ืฉืœื—ื• ื’ื ืฉื’ื™ืื•ืช ื‘ืชื—ื™ืœื”. ืžืœื›ืชื—ื™ืœื” ื”ื ื”ืฆื˜ื‘ืจื• ื‘ืจืฉื™ืžื”, ื•ืื– ื’ื ื ืฉืœื—ื• ื‘ืืžืฆืขื•ืช ื”ืžืชื–ืžืŸ, ืื ื”ื™ื” ื—ื™ื‘ื•ืจ. ืขื ื–ืืช, ืื– ื”ืชืขื•ืจืจื• ื‘ืขื™ื•ืช ืขื ื”ืขื•ื‘ื“ื” ืฉืœYandex ื™ืฉ ืžื’ื‘ืœื” ืขืœ ืžืกืคืจ ื”ื”ื•ื“ืขื•ืช ืฉื ืฉืœื—ื•ืช ื‘ื™ื•ื (ื–ื”ื• ื›ืื‘, ืขืฆื‘ ื•ื”ืฉืคืœื”). ืžื›ื™ื•ื•ืŸ ืฉื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืกืคืจ ืขืฆื•ื ืฉืœ ืฉื’ื™ืื•ืช ืืคื™ืœื• ืœื“ืงื”, ื ืืœืฆื ื• ืœื•ื•ืชืจ ืขืœ ืฉืœื™ื—ืช ืฉื’ื™ืื•ืช ื‘ื“ื•ืืจ. ืื– ื–ื›ื•ืจ ื‘ืขืช ืฉืœื™ื—ืช ืžื™ื“ืข ืื•ื˜ื•ืžื˜ื™ ืขืœ ื‘ืขื™ื” ื›ื–ื• ื“ืจืš ืฉื™ืจื•ืชื™ Yandex.

ืฉืจืช ืžืฉื•ื‘

ื›ื“ื™ ืœืงื‘ืœ ื’ื™ืฉื” ืœืจื›ื™ื‘ ื—ื•ืžืจื” ืžืจื•ื—ืง ื•ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื”ืชืื™ื ืื™ืฉื™ืช ื•ืœื”ื’ื“ื™ืจ ืื•ืชื• ืžื—ื“ืฉ, ื”ื™ื™ืชื™ ืฆืจื™ืš ืฉืจืช ื—ื™ืฆื•ื ื™. ื‘ืื•ืคืŸ ื›ืœืœื™, ืœืžืขืŸ ื”ื”ื’ื™ื ื•ืช, ื™ื”ื™ื” ื ื›ื•ืŸ ืœืฉืœื•ื— ืืช ื›ืœ ื”ื ืชื•ื ื™ื ืœืฉืจืช ื•ืœื‘ื ื•ืช ืืช ื›ืœ ื”ื’ืจืคื™ื ื”ื™ืคื™ื ื‘ืžืžืฉืง ื”ืื™ื ื˜ืจื ื˜. ืื‘ืœ ืœื ื‘ื‘ืช ืื—ืช.

ืขื‘ื•ืจ VPS ื‘ื—ืจืชื™ ruvds.com. ืืชื” ื™ื›ื•ืœ ืœืงื—ืช ืืช ื”ืฉืจืช ื”ืคืฉื•ื˜ ื‘ื™ื•ืชืจ. ื•ื‘ื›ืœืœ, ืœืžื˜ืจื•ืช ืฉืœื™ ื–ื” ื™ืกืคื™ืง. ืื‘ืœ ืžื›ื™ื•ื•ืŸ ืฉืœื ืฉื™ืœืžืชื™ ืขืœ ื”ืฉืจืช ืžื›ื™ืกื™, ื”ื—ืœื˜ืชื™ ืœืงื—ืช ืื•ืชื• ืขื ืจื–ืจื‘ื” ืงื˜ื ื” ื›ื“ื™ ืฉื–ื” ื™ืกืคื™ืง ืื ื ืคืจื•ืก ืžืžืฉืง ืื™ื ื˜ืจื ื˜, ืฉืจืช SMTP ืžืฉืœื ื•, VPN ื•ื›ื•'. ื‘ื ื•ืกืฃ, ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื”ื’ื“ื™ืจ ื‘ื•ื˜ ืฉืœ ื˜ืœื’ืจื ื•ืœื ืœื”ื™ืชืงืœ ื‘ื‘ืขื™ื•ืช ืขื ื—ืกื™ืžืชื•. ืœื›ืŸ, ื‘ื—ืจืชื™ ื‘ืืžืกื˜ืจื“ื ื•ื‘ืคืจืžื˜ืจื™ื ื”ื‘ืื™ื.

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ื›ืฉื™ื˜ื” ืœืชืงืฉื•ืจืช ืขื ื”ื—ื•ืžืจื”, vim2 ื‘ื—ืจื” ื‘ื—ื™ื‘ื•ืจ ssh ื”ืคื•ืš ื•ื›ืคื™ ืฉื”ืจืื” ื‘ืคื•ืขืœ, ื”ื•ื ืœื ื”ื˜ื•ื‘ ื‘ื™ื•ืชืจ. ืื ื”ื—ื™ื‘ื•ืจ ืื‘ื“, ื”ืฉืจืช ืžื—ื–ื™ืง ืืช ื”ืคื•ืจื˜ ื•ืื™ ืืคืฉืจ ืœื”ืชื—ื‘ืจ ื“ืจื›ื• ื‘ืžืฉืš ื–ืžืŸ ืžื”. ืœื›ืŸ, ืขื“ื™ื™ืŸ ืขื“ื™ืฃ ืœื”ืฉืชืžืฉ ื‘ืฉื™ื˜ื•ืช ืชืงืฉื•ืจืช ืื—ืจื•ืช, ืœืžืฉืœ VPN. ื‘ืขืชื™ื“ ืจืฆื™ืชื™ ืœืขื‘ื•ืจ ืœ-VPN, ืื‘ืœ ืœื ื”ื™ื” ืœื™ ื–ืžืŸ.

ืื ื™ ืœื ืื›ื ืก ืœืคืจื˜ื™ื ืฉืœ ื”ื’ื“ืจืช ื—ื•ืžืช ืืฉ, ื”ื’ื‘ืœืช ื–ื›ื•ื™ื•ืช, ื”ืฉื‘ืชืช ื—ื™ื‘ื•ืจื™ ssh ืฉืœ ืฉื•ืจืฉ ื•ืžืฆื™ืื•ืช ืื—ืจืช ืฉืœ ื”ื’ื“ืจืช VPS. ื”ื™ื™ืชื™ ืจื•ืฆื” ืœื”ืืžื™ืŸ ืฉืืชื” ื›ื‘ืจ ื™ื•ื“ืข ื”ื›ืœ. ืœื—ื™ื‘ื•ืจ ืžืจื—ื•ืง, ืื ื™ ื™ื•ืฆืจ ืžืฉืชืžืฉ ื—ื“ืฉ ื‘ืฉืจืช.

adduser vimssh

ืื ื™ ืžื™ื™ืฆืจ ืžืคืชื—ื•ืช ื—ื™ื‘ื•ืจ ssh ื‘ื—ื•ืžืจื” ืฉืœื ื•.

ssh-keygen

ื•ืื ื™ ืžืขืชื™ืง ืื•ืชื ืœืฉืจืช ืฉืœื ื•.

ssh-copy-id [email protected]

ื‘ื—ื•ืžืจื” ืฉืœื ื•, ืื ื™ ื™ื•ืฆืจ ื—ื™ื‘ื•ืจ ssh ื”ืคื•ืš ืื•ื˜ื•ืžื˜ื™ ื‘ื›ืœ ืืชื—ื•ืœ.

[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

ืฉื™ืžื• ืœื‘ ืœื™ืฆื™ืื” 8083: ื”ื™ื ืงื•ื‘ืขืช ื‘ืื™ื–ื• ื™ืฆื™ืื” ืืฉืชืžืฉ ื›ื“ื™ ืœื”ืชื—ื‘ืจ ื‘ืืžืฆืขื•ืช ssh ื”ืคื•ืš. ื”ื•ืกืฃ ืื•ืชื• ืœื”ืคืขืœื” ื•ื”ืชื—ืœ.

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

ืืชื” ื™ื›ื•ืœ ืืคื™ืœื• ืœืจืื•ืช ืืช ื”ืกื˜ื˜ื•ืก:

sudo systemctl status autossh.service

ื›ืขืช, ื‘ืฉืจืช ื”-VPS ืฉืœื ื•, ืื ืื ื• ืžืคืขื™ืœื™ื:

ssh -p 8083 khadas@localhost

ื•ืื– ืื ื™ ืžื’ื™ืข ืœื—ื•ืžืจ ื”ืžื‘ื—ืŸ ืฉืœื™. ื•ืžื”ื—ื•ืžืจื” ืื ื™ ื™ื›ื•ืœ ื’ื ืœืฉืœื•ื— ืœื•ื’ื™ื ื•ื›ืœ ื ืชื•ืŸ ื“ืจืš ssh ืœืฉืจืช ืฉืœื™, ื•ื–ื” ืžืื•ื“ ื ื•ื—.

ืžื—ื‘ืจื™ื ืืช ื”ื›ืœ ื‘ื™ื—ื“

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE
ื ื“ืœืง, ื‘ื•ืื• ื ืชื—ื™ืœ ื‘ืคื™ืชื•ื— ื•ื ื™ืคื•ื™ ื‘ืื’ื™ื

ืื•ืฃ, ื•ื‘ื›ืŸ, ื–ื”ื•, ืชื™ืืจืชื™ ืืช ื›ืœ ื”ืฆืžืชื™ื. ืขื›ืฉื™ื• ื”ื’ื™ืข ื”ื–ืžืŸ ืœื—ื‘ืจ ืืช ื”ื›ืœ ื‘ื™ื—ื“. ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืืช ื”ืงื•ื“ ื›ืืŸ.

ื ืงื•ื“ื” ื—ืฉื•ื‘ื” ื‘ืงื•ื“: ื™ื™ืชื›ืŸ ืฉื”ืคืจื•ื™ืงื˜ ื”ื–ื” ืœื ื™ืชื—ื™ืœ ื›ื›ื”, ื›ื™ ื”ื•ื ืžื•ืชืื ืœืžืฉื™ืžื” ืกืคืฆื™ืคื™ืช, ืฉืœ ืืจื›ื™ื˜ืงื˜ื•ืจื” ืกืคืฆื™ืคื™ืช. ืœืžืจื•ืช ืฉืื ื™ ื ื•ืชืŸ ืืช ืงื•ื“ ื”ืžืงื•ืจ, ืื ื™ ืขื“ื™ื™ืŸ ืืกื‘ื™ืจ ื›ืืŸ ืืช ื”ื“ื‘ืจื™ื ื”ื—ืฉื•ื‘ื™ื ื‘ื™ื•ืชืจ, ืžืžืฉ ื‘ื˜ืงืกื˜, ืื—ืจืช ื–ื” ืœื’ืžืจื™ ืœื ืžื•ื‘ืŸ.

ื‘ื”ืชื—ืœื”, ืื ื™ ืžืืชื—ืœ ืืช gps, gpio ื•ืžืฉื™ืง ืฉืจืฉื•ืจ ืžืชื–ืžืŸ ื ืคืจื“.

#ะทะฐะฟัƒัะบ ะฟะพั‚ะพะบะฐ ะฟะปะฐะฝะธั€ะพะฒั‰ะธะบะฐ
pShedulerThread = threading.Thread(target=ShedulerThread, args=(1,))
pShedulerThread.start()

ืžืชื–ืžืŸ ื”ื•ื ื“ื™ ืคืฉื•ื˜: ื”ื•ื ืžืกืชื›ืœ ืœืจืื•ืช ืื ื”ื’ื™ืข ื”ื–ืžืŸ ืœืฉืœื•ื— ื”ื•ื“ืขื•ืช ื•ืžื” ืžืฆื‘ ื”ืฉื’ื™ืื” ื”ื ื•ื›ื—ื™. ืื ื™ืฉ ื“ื’ืœ ืฉื’ื™ืื”, ืื ื• ืžื”ื‘ื”ื‘ื™ื ืืช ื”ื ื•ืจื™ืช.

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

ื”ื—ืœืง ื”ืงืฉื” ื‘ื™ื•ืชืจ ื‘ืคืจื•ื™ืงื˜ ื–ื” ื”ื•ื ืœืฉืžื•ืจ ืขืœ ื—ื™ื‘ื•ืจ ื”-ssh ื”ื”ืคื•ืš ืขื‘ื•ืจ ื›ืœ ืžื‘ื—ืŸ. ื›ืœ ื‘ื“ื™ืงื” ื›ื•ืœืœืช ื”ื’ื“ืจื” ืžื—ื“ืฉ ืฉืœ ืฉืขืจ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื•ืฉืœ ืฉืจืช ื”-DNS. ืžื›ื™ื•ื•ืŸ ืฉืžืžื™ืœื ืืฃ ืื—ื“ ืœื ืงื•ืจื, ื“ืขื• ืฉื”ืจื›ื‘ืช ืœื ื ื•ืกืขืช ืขืœ ืคืกื™ ืขืฅ. ืžื™ ืฉืžื•ืฆื ืืช ื‘ื™ืฆืช ื”ืคืกื—ื ืžืงื‘ืœ ืžืžืชืงื™ื.

ืœืฉื ื›ืš, ืื ื™ ื™ื•ืฆืจ ื˜ื‘ืœืช ื ื™ืชื•ื‘ ื ืคืจื“ืช -set-mark 0x2 ื•ื›ืœืœ ืœื”ืคื ื™ื™ืช ืชืขื‘ื•ืจื”.

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

ืืชื” ื™ื›ื•ืœ ืœืœืžื•ื“ ืขื•ื“ ืขืœ ืื™ืš ื–ื” ืขื•ื‘ื“ ืงืจืื• ื‘ืžืืžืจ ื–ื”.

ืœืื—ืจ ืžื›ืŸ ืื ื™ ื ื›ื ืก ืœืœื•ืค ืื™ื ืกื•ืคื™, ืฉื‘ื• ื‘ื›ืœ ืคืขื ื ืงื‘ืœ ืจืฉื™ืžื” ืฉืœ ืžื•ื“ืžื™ื ืžื—ื•ื‘ืจื™ื (ื›ื“ื™ ืœื‘ืจืจ ืื ืชืฆื•ืจืช ื”ืจืฉืช ื”ืฉืชื ืชื” ืคืชืื•ื).

network_list = getNetworklist()

ืงื‘ืœืช ืจืฉื™ืžื” ืฉืœ ืžืžืฉืงื™ ืจืฉืช ื”ื™ื ื“ื™ ืคืฉื•ื˜ื”.

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

ืœืื—ืจ ืงื‘ืœืช ื”ืจืฉื™ืžื”, ืงื‘ืขืชื™ ื›ืชื•ื‘ื•ืช IP ืœื›ืœ ื”ืžืžืฉืงื™ื, ื›ืคื™ ืฉื”ืจืื™ืชื™ ื‘ืชืžื•ื ื” ื‘ืคืจืง ืขืœ ื”ืžื•ื“ื.

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

ื•ืื– ืื ื™ ืคืฉื•ื˜ ืขื•ื‘ืจ ืขืœ ื›ืœ ืžืžืฉืง ื‘ืœื•ืœืื”. ื•ืื ื™ ืžื’ื“ื™ืจ ื›ืœ ืžืžืฉืง.

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

ืื ื™ ื‘ื•ื“ืง ืืช ื”ืžืžืฉืง ืœืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช, ืื ืื™ืŸ ืจืฉืช, ืื– ืื ื™ ืžื™ื™ืฆืจ ืฉื’ื™ืื•ืช. ืื ื™ืฉ ืจืฉืช, ืื– ื–ื” ื”ื–ืžืŸ ืœืคืขื•ืœ!

ื›ืืŸ ืื ื™ ืžื’ื“ื™ืจ ื ื™ืชื•ื‘ ssh ืœืžืžืฉืง ื”ื–ื” (ืื ื–ื” ืœื ื‘ื•ืฆืข), ืฉื•ืœื— ืฉื’ื™ืื•ืช ืœืฉืจืช ืื ื”ื’ื™ืข ื”ื–ืžืŸ, ืฉื•ืœื— ืœื•ื’ื™ื ื•ืœื‘ืกื•ืฃ ืžืคืขื™ืœ Speedtest ื•ืฉื•ืžืจ ืืช ื”ืœื•ื’ื™ื ืœืงื•ื‘ืฅ 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()
#ะธ ะดะฐะปะตะต ั‚ะตัั‚ะธั€ัƒะตะผ ัะบะพั€ะพัั‚ัŒ ะธ ัะพั…ั€ะฐะฝัะตะผ ะปะพะณะธ. 

ื›ื“ืื™ ืœื”ื–ื›ื™ืจ ืืช ื”ืคื•ื ืงืฆื™ื” ืฉืœ ื”ื’ื“ืจืช 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")

ื•ื›ืžื•ื‘ืŸ, ืืชื” ืฆืจื™ืš ืœื”ื•ืกื™ืฃ ืืช ื›ืœ ื”ื™ื•ืคื™ ื”ื–ื” ืœืกื˜ืืจื˜-ืืค. ืœืฉื ื›ืš ืื ื™ ื™ื•ืฆืจ ืงื•ื‘ืฅ:

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

ื•ืื ื™ ื›ื•ืชื‘ ื‘ื•:

[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

ืื ื™ ืžืคืขื™ืœ ื˜ืขื™ื ื” ืื•ื˜ื•ืžื˜ื™ืช ื•ืžืชื—ื™ืœ!

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

ืขื›ืฉื™ื• ืื ื™ ื™ื›ื•ืœ ืœืจืื•ืช ื™ื•ืžื ื™ื ืฉืœ ืžื” ืฉืงื•ืจื” ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื”:

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

ืžืžืฆืื™ื

ื•ื‘ื›ืŸ, ืขื›ืฉื™ื• ื”ื“ื‘ืจ ื”ื—ืฉื•ื‘ ื‘ื™ื•ืชืจ ื”ื•ื, ืžื” ืงืจื” ื›ืชื•ืฆืื” ืžื›ืš? ื”ื ื” ื›ืžื” ื’ืจืคื™ื ืฉื”ืฆืœื—ืชื™ ืœืฆืœื ื‘ืžื”ืœืš ืชื”ืœื™ืš ื”ืคื™ืชื•ื— ื•ื”ื ื™ืคื•ื™ ื‘ืื’ื™ื. ื”ื’ืจืคื™ื ื ื‘ื ื• ื‘ืืžืฆืขื•ืช gnuplot ืขื ื”ืกืงืจื™ืคื˜ ื”ื‘ื.

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

ื”ื”ืชื ืกื•ืช ื”ืจืืฉื•ื ื” ื”ื™ื™ืชื” ืขื ืžืคืขื™ืœืช Tele2, ืื•ืชื” ืขืจื›ืชื™ ื‘ืžืฉืš ืžืกืคืจ ื™ืžื™ื.

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ื›ืืŸ ื”ืฉืชืžืฉืชื™ ื‘ืฉืจืช ืžื“ื™ื“ื” ื“ื™ื ืžื™. ืžื“ื™ื“ื•ืช ื”ืžื”ื™ืจื•ืช ืขื•ื‘ื“ื•ืช, ืืš ืžืฉืชื ื•ืช ืžืื•ื“, ืืš ืขื“ื™ื™ืŸ ื ื™ืชืŸ ืœืจืื•ืช ืขืจืš ืžืžื•ืฆืข ื›ืœืฉื”ื•, โ€‹โ€‹ื•ื ื™ืชืŸ ืœื”ืฉื™ื’ ื–ืืช ืขืœ ื™ื“ื™ ืกื™ื ื•ืŸ ื”ื ืชื•ื ื™ื, ืœืžืฉืœ, ืขื ืžืžื•ืฆืข ื ืข.

ื‘ื”ืžืฉืš ื‘ื ื™ืชื™ ืžืกืคืจ ื’ืจืคื™ื ืขื‘ื•ืจ ืžืคืขื™ืœื™ ื˜ืœืงื•ื ืื—ืจื™ื. ื‘ืžืงืจื” ื”ื–ื”, ื›ื‘ืจ ื”ื™ื” ืฉืจืช ื‘ื“ื™ืงื” ืื—ื“, ื•ื’ื ื”ืชื•ืฆืื•ืช ื”ื™ื• ืžืื•ื“ ืžืขื ื™ื™ื ื•ืช.

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœืจืื•ืช, ื”ื ื•ืฉื ื ืจื—ื‘ ืžืื•ื“ ืœืžื—ืงืจ ื•ืขื™ื‘ื•ื“ ืฉืœ ื ืชื•ื ื™ื ืืœื”, ื•ื‘ืจื•ืจ ืฉืœื ื ืžืฉืš ืฉื‘ื•ืขื™ื™ื ืฉืœ ืขื‘ื•ื“ื”. ืื‘ืœโ€ฆ

ืชื•ืฆืืช ื”ืขื‘ื•ื“ื”

ื”ืขื‘ื•ื“ื” ื”ืกืชื™ื™ืžื” ื‘ืคืชืื•ืžื™ื•ืช ืขืงื‘ ื ืกื™ื‘ื•ืช ืฉืื™ื ืŸ ื‘ืฉืœื™ื˜ืชื™. ืื—ืช ื”ื—ื•ืœืฉื•ืช ืฉืœ ื”ืคืจื•ื™ืงื˜ ื”ื–ื”, ืœื“ืขืชื™ ื”ืกื•ื‘ื™ื™ืงื˜ื™ื‘ื™ืช, ื”ื™ื™ืชื” ื”ืžื•ื“ื, ืฉืœื ืžืžืฉ ืจืฆื” ืœืขื‘ื•ื“ ื‘ืžืงื‘ื™ืœ ืขื ืžื•ื“ืžื™ื ืื—ืจื™ื, ื•ืขืฉื” ื˜ืจื™ืงื™ื ื›ืืœื” ื‘ื›ืœ ืคืขื ืฉื”ื•ื ื ื˜ืขืŸ. ืœืžื˜ืจื•ืช ืืœื”, ื™ืฉื ื ืžืกืคืจ ืขืฆื•ื ืฉืœ ื“ื’ืžื™ ืžื•ื“ืžื™ื ืื—ืจื™ื; ื‘ื“ืจืš ื›ืœืœ ื”ื ื›ื‘ืจ ื‘ืคื•ืจืžื˜ Mini PCI-e ื•ืžื•ืชืงื ื™ื ื‘ืชื•ืš ื”ืžื›ืฉื™ืจ ื•ื”ืจื‘ื” ื™ื•ืชืจ ืงืœ ืœื”ื’ื“ื™ืจ ืื•ืชื. ืื‘ืœ ื–ื” ืกื™ืคื•ืจ ืื—ืจ ืœื’ืžืจื™. ื”ืคืจื•ื™ืงื˜ ื”ื™ื” ืžืขื ื™ื™ืŸ ื•ืฉืžื—ืชื™ ืžืื•ื“ ืฉื”ืฆืœื—ืชื™ ืœื”ืฉืชืชืฃ ื‘ื•.

ื‘ื“ื™ืงืช ืžื”ื™ืจื•ืช ื‘ื• ื–ืžื ื™ืช ื‘ืžืกืคืจ ืžื•ื“ืžื™ LTE

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”