рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рдЕрд▓рдЧ рдареЗрд╡рдгреНрдпрд╛рдЪреНрдпрд╛ рджрд░рдореНрдпрд╛рди, рдорд▓рд╛ рдЕрдиреЗрдХ рд╕реЗрд▓реНрдпреБрд▓рд░ рдСрдкрд░реЗрдЯрд░рд╕рд╛рдареА рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдордЪреА рдЧрддреА рдореЛрдЬрдгреНрдпрд╛рд╕рд╛рдареА рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рдЪреНрдпрд╛ рд╡рд┐рдХрд╛рд╕рд╛рдордзреНрдпреЗ рднрд╛рдЧ рдШреЗрдгреНрдпрд╛рдЪреА рдСрдлрд░ рджреЗрдгреНрдпрд╛рдд рдЖрд▓реА.

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рдПрд▓рдЯреАрдИ рдХрдиреЗрдХреНрд╢рди рд╡рд╛рдкрд░реВрди рдЙрдкрдХрд░рдгреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛рдирд╛, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╡реНрд╣рд┐рдбрд┐рдУ рдкреНрд░рд╕рд╛рд░рдгрд╛рд╕рд╛рдареА рдХреЛрдгрддрд╛ рд╕реЗрд▓реНрдпреБрд▓рд░ рдСрдкрд░реЗрдЯрд░ рддреНрдпрд╛рдЪреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рдЕрдиреБрдХреВрд▓ рдЖрд╣реЗ рд╣реЗ рд╕рдордЬрдгреНрдпрд╛рд╕рд╛рдареА рдЧреНрд░рд╛рд╣рдХрд╛рд▓рд╛ рд╡рд┐рд╡рд┐рдз рднреМрдЧреЛрд▓рд┐рдХ рд╕реНрдерд╛рдирд╛рдВрдордзреНрдпреЗ рд╡рд┐рд╡рд┐рдз рдЯреЗрд▓рд┐рдХреЙрдо рдСрдкрд░реЗрдЯрд░рдЪреНрдпрд╛ рдЧрддреАрдЪреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рд╛рдпрдЪреЗ рд╣реЛрддреЗ. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдорд╣рд╛рдЧрдбреНрдпрд╛ рдЙрдкрдХрд░рдгрд╛рдВрд╢рд┐рд╡рд╛рдп рд╕рдорд╕реНрдпрд╛ рд╢рдХреНрдп рддрд┐рддрдХреНрдпрд╛ рд╕реЛрдкреНрдпрд╛ рдЖрдгрд┐ рд╕реНрд╡рд╕реНрддрд╛рдд рд╕реЛрдбрд╡рд╛рдпрдЪреА рд╣реЛрддреА.

рдореА рд▓рдЧреЗрдЪ рд╕рд╛рдВрдЧреЗрди рдХреА рд╣реЗ рдХрд╛рд░реНрдп рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкреЗ рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рдЬреНрдЮрд╛рди-рдХреЗрдВрджреНрд░рд┐рдд рдирд╛рд╣реА; рдорд▓рд╛ рдХреЛрдгрддреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдЖрд▓реНрдпрд╛ рдЖрдгрд┐ рдореА рддреНрдпрд╛ рдХрд╢рд╛ рд╕реЛрдбрд╡рд▓реНрдпрд╛ рд╣реЗ рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд╛рдВрдЧреЗрди. рддрд░ рдЪрд▓рд╛.

рд╢реЗрд░рд╛

LTE рдХрдиреЗрдХреНрд╢рдирдЪреА рдЧрддреА рдореЛрдЬрдгреЗ рд╣реА рдПрдХ рдЕрддрд┐рд╢рдп рдЧреБрдВрддрд╛рдЧреБрдВрддреАрдЪреА рдмрд╛рдм рдЖрд╣реЗ: рддреБрдореНрд╣рд╛рд▓рд╛ рдпреЛрдЧреНрдп рдЙрдкрдХрд░рдгреЗ рдЖрдгрд┐ рдорд╛рдкрди рддрдВрддреНрд░ рдирд┐рд╡рдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рд╕реЗрд▓реНрдпреБрд▓рд░ рдиреЗрдЯрд╡рд░реНрдХрдЪреНрдпрд╛ рдЯреЛрдкреЛрд▓реЙрдЬреА рдЖрдгрд┐ рдСрдкрд░реЗрд╢рдирдЪреА рджреЗрдЦреАрд▓ рдЪрд╛рдВрдЧрд▓реА рд╕рдордЬ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддрд╕реЗрдЪ, рд╡реЗрдЧ рдЕрдиреЗрдХ рдШрдЯрдХрд╛рдВрдиреА рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдК рд╢рдХрддреЛ: рд╕реЗрд▓рд╡рд░реАрд▓ рд╕рджрд╕реНрдпрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛, рд╣рд╡рд╛рдорд╛рди рдкрд░рд┐рд╕реНрдерд┐рддреА, рдЕрдЧрджреА рд╕реЗрд▓ рддреЗ рд╕реЗрд▓рдкрд░реНрдпрдВрдд рдиреЗрдЯрд╡рд░реНрдХ рдЯреЛрдкреЛрд▓реЙрдЬреАрдореБрд│реЗ рд╡реЗрдЧ рдирд╛рдЯрдХреАрдпрд░рд┐рддреНрдпрд╛ рдмрджрд▓реВ рд╢рдХрддреЛ. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рд╣реА рдореЛрдареНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рдЕрдЬреНрдЮрд╛рдд рдЕрд╕рд▓реЗрд▓реА рд╕рдорд╕реНрдпрд╛ рдЖрд╣реЗ рдЖрдгрд┐ рдХреЗрд╡рд│ рдПрдХ рджреВрд░рд╕рдВрдЪрд╛рд░ рдСрдкрд░реЗрдЯрд░рдЪ рддреНрдпрд╛рдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░реВ рд╢рдХрддреЛ.

рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, рдЧреНрд░рд╛рд╣рдХрд╛рд▓рд╛ рдлрдХреНрдд рдСрдкрд░реЗрдЯрд░рдЪреНрдпрд╛ рдлреЛрдирд╕рд╣ рдХреБрд░рд┐рдЕрд░ рдЪрд╛рд▓рд╡рд╛рдпрдЪреЗ рд╣реЛрддреЗ, рдереЗрдЯ рдлреЛрдирд╡рд░ рдореЛрдЬрдорд╛рдк рдШреНрдпрд╛рдпрдЪреЗ рд╣реЛрддреЗ рдЖрдгрд┐ рдирдВрддрд░ рдЧрддреА рдорд╛рдкрди рдкрд░рд┐рдгрд╛рдо рдиреЛрдЯрдмреБрдХрдордзреНрдпреЗ рд▓рд┐рд╣рд╛рдпрдЪреЗ рд╣реЛрддреЗ. lte рдиреЗрдЯрд╡рд░реНрдХрдЪреА рдЧрддреА рдореЛрдЬрдгреНрдпрд╛рд╕рд╛рдареА рдорд╛рдЭреЗ рд╕рдорд╛рдзрд╛рди, рдЬрд░реА рдЖрджрд░реНрд╢ рдирд╕рд▓реЗ рддрд░реА, рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рддреЗ.

рд╡реЗрд│реЗрдЕрднрд╛рд╡реА, рдореА рд╕реЛрдпреА рдХрд┐рдВрд╡рд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрддреЗрдЪреНрдпрд╛ рдмрд╛рдЬреВрдиреЗ рдирд╡реНрд╣реЗ, рддрд░ рд╡рд┐рдХрд╛рд╕рд╛рдЪреНрдпрд╛ рдЧрддреАрдЪреНрдпрд╛ рдмрд╛рдЬреВрдиреЗ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд░рд┐рд╡реНрд╣рд░реНрд╕ ssh рдЪрд╛ рд╡рд╛рдкрд░ рд░рд┐рдореЛрдЯ рдНрдХреНрд╕реЗрд╕рд╕рд╛рдареА, рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ VPN рдРрд╡рдЬреА, рд╕рд░реНрд╡реНрд╣рд░ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡реИрдпрдХреНрддрд┐рдХ рдХреНрд▓рд╛рдпрдВрдЯ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡реЗрд│ рд╡рд╛рдЪрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛.

рддрд╛рдВрддреНрд░рд┐рдХ рдХрд╛рд░реНрдп

рд▓реЗрдЦрд╛рдд рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ рддрд╛рдВрддреНрд░рд┐рдХ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрд╢рд┐рд╡рд╛рдп: рдХреНрд▓рд╛рдпрдВрдЯрд▓рд╛ рддреЗ рдХрд╛ рдирдХреЛ рдЖрд╣реЗ: рддрд╛рдВрддреНрд░рд┐рдХ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрд╢рд┐рд╡рд╛рдп рдХрд╛рд░реНрдп рдХрд░реВ рдирдХрд╛! рдХрдзреАрд╣реА, рдХреБрдареЗрд╣реА рдирд╛рд╣реА!

рддрд╛рдВрддреНрд░рд┐рдХ рдХрд╛рд░реНрдп рдЕрдЧрджреА рд╕реЛрдкреЗ рд╣реЛрддреЗ, рдЕрдВрддрд┐рдо рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рд╕рдордЬреБрддреАрд╕рд╛рдареА рдореА рддреЗ рдереЛрдбреЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░реЗрди. рддрд╛рдВрддреНрд░рд┐рдХ рдЙрдкрд╛рдп рдЖрдгрд┐ рдЙрдкрдХрд░рдгрд╛рдВрдЪреА рдирд┐рд╡рдб рдЧреНрд░рд╛рд╣рдХрд╛рдиреЗ рдард░рд╡рд▓реА рд╣реЛрддреА. рддрд░, рддрд╛рдВрддреНрд░рд┐рдХ рддрдкрд╢реАрд▓ рд╕реНрд╡рддрдГрдЪ, рд╕рд░реНрд╡ рдордВрдЬреБрд░реАрдирдВрддрд░:

рдПрдХрд╛рдЪ рдмреЛрд░реНрдб рд╕рдВрдЧрдгрдХрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд vim2 H рдореЙрдбреЗрдорджреНрд╡рд╛рд░реЗ lte рдХрдиреЗрдХреНрд╢рдирд╕рд╛рдареА рд╕реНрдкреАрдб рдЯреЗрд╕реНрдЯрд░ рдмрдирд╡рд╛uawei e3372h - 153 рдЕрдиреЗрдХ рджреВрд░рд╕рдВрдЪрд╛рд░ рдСрдкрд░реЗрдЯрд░ (рдПрдХ рддреЗ рдПрди рдкрд░реНрдпрдВрдд). UART рджреНрд╡рд╛рд░реЗ рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ GPS рд░рд┐рд╕реАрд╡реНрд╣рд░рдХрдбреВрди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреЗ рджреЗрдЦреАрд▓ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╕реЗрд╡рд╛ рд╡рд╛рдкрд░реВрди рдЧрддреА рдореЛрдЬрдорд╛рдк рдХрд░рд╛ www.speedtest.net рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рдЯреЗрдмрд▓рдордзреНрдпреЗ рдареЗрд╡рд╛ рдЬрд╕реЗ:

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

csv рд╕реНрд╡рд░реВрдкрд╛рдд рд╕рд╛рд░рдгреА. рддреНрдпрд╛рдирдВрддрд░ рджрд░ 6 рддрд╛рд╕рд╛рдВрдиреА рд╣реЗ рдЪрд┐рдиреНрд╣ рдИ-рдореЗрд▓рдиреЗ рдкрд╛рдард╡рд╛. рддреНрд░реБрдЯреА рдЖрдврд│рд▓реНрдпрд╛рд╕, GPIO рд╢реА рдЬреЛрдбрд▓реЗрд▓рд╛ LED рдмреНрд▓рд┐рдВрдХ рдХрд░рд╛.

рдореА рддрд╛рдВрддреНрд░рд┐рдХ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдЪреЗ рд╡рд░реНрдгрди рд╡рд┐рдирд╛рдореВрд▓реНрдп рд╕реНрд╡рд░реВрдкрд╛рдд рдХреЗрд▓реЗ рдЖрд╣реЗ, рдЕрдиреЗрдХ рдордВрдЬреВрд░реАрдирдВрддрд░. рдкрд░рдВрддреБ рдХрд╛рд░реНрдпрд╛рдЪрд╛ рдЕрд░реНрде рдЖрдзреАрдЪ рджрд┐рд╕рдд рдЖрд╣реЗ. рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯреАрд╕рд╛рдареА рдПрдХ рдЖрдард╡рдбрд╛ рджреЗрдгреНрдпрд╛рдд рдЖрд▓рд╛ рд╣реЛрддрд╛. рдкрдг рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рддреЗ рддреАрди рдЖрдард╡рдбреЗ рдЯрд┐рдХрд▓реЗ. рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдд рдЖрд╣реЗ рдХреА рдореА рд╣реЗ рдорд╛рдЭреНрдпрд╛ рдореБрдЦреНрдп рдХрд╛рдорд╛рдирдВрддрд░ рдЖрдгрд┐ рдЖрдард╡рдбреНрдпрд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдХреЗрд▓реЗ.

рдпреЗрдереЗ рдорд▓рд╛ рдкреБрдиреНрд╣рд╛ рдПрдХрджрд╛ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдХрдбреЗ рд▓рдХреНрд╖ рд╡реЗрдзрд╛рдпрдЪреЗ рдЖрд╣реЗ рдХреА рдЧреНрд░рд╛рд╣рдХрд╛рдиреЗ рдЧрддреА рдорд╛рдкрди рд╕реЗрд╡рд╛ рдЖрдгрд┐ рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рд╡рд░ рдЖрдЧрд╛рдК рд╕рд╣рдорддреА рджрд░реНрд╢рд╡рд┐рд▓реА, рдЬреНрдпрд╛рдиреЗ рдорд╛рдЭреНрдпрд╛ рдХреНрд╖рдорддрд╛ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдорд░реНрдпрд╛рджрд┐рдд рдХреЗрд▓реНрдпрд╛. рдмрдЬреЗрдЯрд╣реА рдорд░реНрдпрд╛рджрд┐рдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд╣реА рдЦрд░реЗрджреА рдЭрд╛рд▓реА рдирд╛рд╣реА. рддреНрдпрд╛рдореБрд│реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдпрд╛ рдирд┐рдпрдорд╛рдВрдиреБрд╕рд╛рд░ рдЦреЗрд│рд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ.

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЖрдгрд┐ рд╡рд┐рдХрд╛рд╕

рдпреЛрдЬрдирд╛ рд╕реЛрдкреА рдЖрдгрд┐ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ. рдореНрд╣рдгреВрди, рдореА рдХреЛрдгрддреНрдпрд╛рд╣реА рд╡рд┐рд╢реЗрд╖ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рд╢рд┐рд╡рд╛рдп рддреЗ рд╕реЛрдбреЗрди.

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рдорд▓рд╛ рдпрд╛ рднрд╛рд╖реЗрдд рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдгреНрдпрд╛рдЪрд╛ рдЕрдЬрд┐рдмрд╛рдд рдЕрдиреБрднрд╡ рдирд╕рддрд╛рдирд╛рд╣реА рдореА рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдХрд▓реНрдк рдкрд╛рдпрдердирдордзреНрдпреЗ рд░рд╛рдмрд╡рд┐рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛. рдореА рддреЗ рдирд┐рд╡рдбрд▓реЗ рдХрд╛рд░рдг рддреЗрдереЗ рдЕрдиреЗрдХ рддрдпрд╛рд░ рдЙрджрд╛рд╣рд░рдгреЗ рдЖрдгрд┐ рдЙрдкрд╛рдп рдЖрд╣реЗрдд рдЬреЗ рд╡рд┐рдХрд╛рд╕рд╛рд▓рд╛ рдЧрддреА рджреЗрдК рд╢рдХрддрд╛рдд. рдореНрд╣рдгреВрди, рдореА рд╕рд░реНрд╡ рдкреНрд░реЛрдлреЗрд╢рдирд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рдирд╛ рдкрд╛рдпрдердирдордзреНрдпреЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдгреНрдпрд╛рдЪреНрдпрд╛ рдорд╛рдЭреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рдЕрдиреБрднрд╡рд╛рдЪреА рдирд┐рдВрджрд╛ рдХрд░реВ рдирдпреЗ рдЕрд╕реЗ рд╕рд╛рдВрдЧрддреЛ рдЖрдгрд┐ рдорд╛рдЭреА рдХреМрд╢рд▓реНрдпреЗ рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рд░рдЪрдирд╛рддреНрдордХ рдЯреАрдХрд╛ рдРрдХреВрди рдорд▓рд╛ рдиреЗрд╣рдореАрдЪ рдЖрдирдВрдж рд╣реЛрддреЛ.

рддрд╕реЗрдЪ рдкреНрд░рдХреНрд░рд┐рдпреЗрдд рдорд▓рд╛ рдЖрдврд│рд▓реЗ рдХреА рдкрд╛рдпрдердирдЪреНрдпрд╛ рджреЛрди рдЪрд╛рд▓реВ рдЖрд╡реГрддреНрддреНрдпрд╛ рдЖрд╣реЗрдд 2 рдЖрдгрд┐ 3, рдкрд░рд┐рдгрд╛рдореА рдореА рддрд┐рд╕рд▒реНрдпрд╛ рдХреНрд░рдорд╛рдВрдХрд╛рд╡рд░ рд╕реНрдерд╛рдпрд┐рдХ рдЭрд╛рд▓реЛ.

рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░ рдиреЛрдбреНрд╕

рд╕рд┐рдВрдЧрд▓-рдкреНрд▓реЗрдЯ vim2

рдорд▓рд╛ рдорд╛рдЭреЗ рдореБрдЦреНрдп рдорд╢реАрди рдореНрд╣рдгреВрди рд╕рд┐рдВрдЧрд▓-рдмреЛрд░реНрдб рд╕рдВрдЧрдгрдХ рджреЗрдгреНрдпрд╛рдд рдЖрд▓рд╛ vim2

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдо рдЖрдгрд┐ SMART-TV рд╕рд╛рдареА рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ, рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдореАрдбрд┐рдпрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░, рдкрд░рдВрддреБ рдпрд╛ рдХрд╛рд░реНрдпрд╛рд╕рд╛рдареА рдЕрддреНрдпрдВрдд рдЕрдиреБрдкрдпреБрдХреНрдд, рдХрд┐рдВрд╡рд╛ рдореНрд╣рдгреВ, рдЦрд░рд╛рдмрдкрдгреЗ рдпреЛрдЧреНрдп. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреНрдпрд╛рдЪреЗ рдореБрдЦреНрдп рдУрдПрд╕ рдЕрдБрдбреНрд░реЙрдЗрдб рдЖрд╣реЗ рдЖрдгрд┐ рд▓рд┐рдирдХреНрд╕ рд╣реЗ рджреБрдпреНрдпрдо рдУрдПрд╕ рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рдиреБрд╕рд╛рд░ рд▓рд┐рдирдХреНрд╕ рдЕрдВрддрд░реНрдЧрдд рд╕рд░реНрд╡ рдиреЛрдбреНрд╕ рдЖрдгрд┐ рдбреНрд░рд╛рдпрд╡реНрд╣рд░реНрд╕рдЪреНрдпрд╛ рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддреЗрдЪреНрдпрд╛ рдСрдкрд░реЗрд╢рдирдЪреА рд╣рдореА рдХреЛрдгреАрд╣реА рджреЗрдд тАЛтАЛрдирд╛рд╣реА. рдЖрдгрд┐ рдореА рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рддреЛ рдХреА рдХрд╛рд╣реА рд╕рдорд╕реНрдпрд╛ рдпрд╛ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдордЪреНрдпрд╛ рдпреВрдПрд╕рдмреА рдбреНрд░рд╛рдпрд╡реНрд╣рд░реНрд╕рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрддреНрдпрд╛, рдореНрд╣рдгреВрди рдпрд╛ рдмреЛрд░реНрдбрд╡рд░ рдореЙрдбреЗрдо рдЕрдкреЗрдХреНрд╖реЗрдкреНрд░рдорд╛рдгреЗ рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реАрдд. рддреНрдпрд╛рдд рдЦреВрдк рдЦрд░рд╛рдм рдЖрдгрд┐ рд╡рд┐рдЦреБрд░рд▓реЗрд▓реЗ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рджреЗрдЦреАрд▓ рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рдирд▓рд╛ рдбреЙрдХреНрд╕рдордзреВрди рдЦреЛрджрдгреНрдпрд╛рдд рдмрд░рд╛рдЪ рд╡реЗрд│ рд▓рд╛рдЧрд▓рд╛. GPIO рд╕рд╣ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рдо рджреЗрдЦреАрд▓ рдЦреВрдк рд░рдХреНрдд рдШреЗрддрд▓реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдПрд▓рдИрдбреА рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдорд▓рд╛ рдЕрдиреЗрдХ рддрд╛рд╕ рд▓рд╛рдЧрд▓реЗ. рдкрд░рдВрддреБ, рд╡рд╕реНрддреБрдирд┐рд╖реНрдардкрдгреЗ, рддреЗ рдХреЛрдгрддреНрдпрд╛ рдкреНрд░рдХрд╛рд░рдЪреЗ рд╕рд┐рдВрдЧрд▓-рдмреЛрд░реНрдб рдЖрд╣реЗ рд╣реЗ рдореВрд▓рднреВрддрдкрдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдирд╡реНрд╣рддреЗ, рдореБрдЦреНрдп рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рддреЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рдЖрдгрд┐ рддреЗрдереЗ рдпреВрдПрд╕рдмреА рдкреЛрд░реНрдЯ рд╣реЛрддреЗ.

рдкреНрд░рдердо, рдорд▓рд╛ рдпрд╛ рдмреЛрд░реНрдбрд╡рд░ рд▓рд┐рдирдХреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рджрд╕реНрддрдРрд╡рдЬрд╛рдЪреА рдзреВрд│ рдЦрд╛рдд рдкрдбреВ рдирдпреЗ рдореНрд╣рдгреВрди рдЖрдгрд┐ рдЬреЗ рдпрд╛ рд╕рд┐рдВрдЧрд▓-рдмреЛрд░реНрдб рд╕рд┐рд╕реНрдЯрдорд▓рд╛ рд╕рд╛рдореЛрд░реЗ рдЬрд╛рддреАрд▓ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдореА рд╣рд╛ рдЕрдзреНрдпрд╛рдп рд▓рд┐рд╣рд┐рдд рдЖрд╣реЗ.

Linux рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рджреЛрди рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд: рдмрд╛рд╣реНрдп SD рдХрд╛рд░реНрдбрд╡рд░ рдХрд┐рдВрд╡рд╛ рдЕрдВрддрд░реНрдЧрдд MMC рд╡рд░. рдХрд╛рд░реНрдбрд╕рд╣ рддреЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рд╛рд╡реЗ рд╣реЗ рд╢реЛрдзрдгреНрдпрд╛рдд рдореА рдПрдХ рд╕рдВрдзреНрдпрд╛рдХрд╛рд│ рдШрд╛рд▓рд╡рд▓реА, рдореНрд╣рдгреВрди рдореА рддреЗ MMC рд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛, рдЬрд░реА рдмрд╛рд╣реНрдп рдХрд╛рд░реНрдбрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рд╣реЛрдИрд▓ рдпрд╛рдд рд╢рдВрдХрд╛ рдирд╛рд╣реА.

рдлрд░реНрдорд╡реЗрдЕрд░ рдмрджреНрджрд▓ рдХреБрдЯрд┐рд▓рдкрдгреЗ рдпреЗрдереЗ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ. рдореА рд╡рд┐рдЪрд┐рддреНрд░ рдордзреВрди рд░рд╢рд┐рдпрдирдордзреНрдпреЗ рднрд╛рд╖рд╛рдВрддрд░ рдХрд░рддреЛ. рдмреЛрд░реНрдб рдлреНрд▓реЕрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдорд▓рд╛ рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░ UART рдХрдиреЗрдХреНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддреЗ рдЬреЛрдбрд▓реЗ рдЦрд╛рд▓реАрд▓ рдкреНрд░рдХрд╛рд░реЗ.

  • рдЯреВрд▓ рдкрд┐рди GND: <тАФ> VIMs рдЪреНрдпрд╛ GPIO рдЪрд╛ рдкрд┐рди17
  • рдЯреВрд▓ рдкрд┐рди TXD: <тАФ> VIMs рдЪреНрдпрд╛ GPIO (Linux_Rx) рдЪрд╛ рдкрд┐рди18
  • рдЯреВрд▓ рдкрд┐рди RXD: <тАФ> VIMs рдЪреНрдпрд╛ GPIO (Linux_Tx) рдЪрд╛ рдкрд┐рди19
  • рдЯреВрд▓ рдкрд┐рди VCC: <тАФ> VIMs рдЪреНрдпрд╛ GPIO рдЪрд╛ рдкрд┐рди20

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рддреНрдпрд╛рдирдВрддрд░, рдореА рдлрд░реНрдорд╡реЗрдЕрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реЗ рдпреЗрдереВрди. рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд░реНрдорд╡реЗрдЕрд░ рдЖрд╡реГрддреНрддреА VIM1_Ubuntu-server-bionic_Linux-4.9_arm64_EMMC_V20191231.

рд╣реЗ рдлрд░реНрдорд╡реЗрдЕрд░ рдЕрдкрд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдорд▓рд╛ рдЙрдкрдпреБрдХреНрддрддрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд. рдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓ рдпреЗрдереЗ. рдореА рд╡рд┐рдВрдбреЛрдЬ рдЕрдВрддрд░реНрдЧрдд рдлреНрд▓реЕрд╢ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдорд▓рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рд▓рд┐рдирдХреНрд╕ рдЕрдВрддрд░реНрдЧрдд рдлрд░реНрдорд╡реЗрдЕрд░рдмрджреНрджрд▓ рдХрд╛рд╣реА рд╢рдмреНрдж рд╕рд╛рдВрдЧрд╛рдпрдЪреЗ рдЖрд╣реЗрдд. рдкреНрд░рдердо, рдореА рд╕реВрдЪрдирд╛рдВрдиреБрд╕рд╛рд░ рдЙрдкрдпреБрдХреНрддрддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрди.

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

Aaand... рдХрд╛рд╣реАрд╣реА рдЪрд╛рд▓рдд рдирд╛рд╣реА. рдореА рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╛рд╣реА рддрд╛рд╕ рдШрд╛рд▓рд╡рд▓реЗ рдЬреЗрдгреЗрдХрд░реБрди рд╕рд░реНрд╡рдХрд╛рд╣реА рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдИрд▓. рдореА рддрд┐рдереЗ рдХрд╛рдп рдХреЗрд▓реЗ рддреЗ рдорд▓рд╛ рдЖрдард╡рдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рдШреЛрдбреНрдпрд╛рдВрд╕рд╣ рддреА рд╕рд░реНрдХрд╕ рджреЗрдЦреАрд▓ рд╣реЛрддреА. рддреНрдпрд╛рдореБрд│реЗ рдХрд╛рд│рдЬреА рдШреНрдпрд╛. рдкрд░рдВрддреБ рдпрд╛ рдЙрдкрдпреБрдХреНрддрддреЗрд╢рд┐рд╡рд╛рдп vim2 рд╡рд░ рдЫрд│ рдХрд░рдгреНрдпрд╛рдд рдХрд╛рд╣реА рдЕрд░реНрде рдирд╛рд╣реА. рддреНрдпрд╛рдЪреНрдпрд╛рд╢реА рдЕрдЬрд┐рдмрд╛рдд рдЧреЛрдВрдзрд│ рди рдХрд░рдгреЗ рдЪрд╛рдВрдЧрд▓реЗ!

рдирд░рдХ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЖрдгрд┐ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рдирдЪреНрдпрд╛ рд╕рд╛рдд рд╡рд░реНрддреБрд│рд╛рдирдВрддрд░, рдорд▓рд╛ рдХрд╛рд░реНрдпрд░рдд рдпреБрдЯрд┐рд▓рд┐рдЯреАрдЬрдЪреЗ рдкреЕрдХреЗрдЬ рдорд┐рд│рд╛рд▓реЗ. рдореА рдорд╛рдЭреНрдпрд╛ рд▓рд┐рдирдХреНрд╕ рдХреЙрдореНрдкреНрдпреБрдЯрд░рд▓рд╛ USB рджреНрд╡рд╛рд░реЗ рдмреЛрд░реНрдб рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗ рдЖрдгрд┐ рд╡рд░реАрд▓ рдЖрдХреГрддреАрдиреБрд╕рд╛рд░ UART рджреЗрдЦреАрд▓ рдЬреЛрдбрд▓реЗ.
рдореА рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░ рдЖрдгрд┐ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рддреНрд░реБрдЯреА рдирд┐рдпрдВрддреНрд░рдгрд╛рд╢рд┐рд╡рд╛рдп 115200 рдЪреНрдпрд╛ рдЧрддреАрд╕рд╛рдареА рдорд╛рдЭреЗ рдЖрд╡рдбрддреЗ рдорд┐рдиреАрдХреЙрдо рдЯрд░реНрдорд┐рдирд▓ рд╕реЗрдЯ рдХрд░рдд рдЖрд╣реЗ. рдЖрдгрд┐ рдЪрд▓рд╛ рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛.

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

UART рдЯрд░реНрдорд┐рдирд▓рдордзреНрдпреЗ VIM2 рд▓реЛрдб рдХрд░рддрд╛рдирд╛, рд▓реЛрдбрд┐рдВрдЧ рдерд╛рдВрдмрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдореА рд╕реНрдкреЗрд╕рдмрд╛рд░рд╕рд╛рд░рдЦреА рдХреА рджрд╛рдмрддреЛ. рдУрд│ рджрд┐рд╕рд▓реНрдпрд╛рдирдВрддрд░

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

рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрд╡рдШрдб рд╡рд╛рдЯрдд рдЕрд╕реЗрд▓ рддрд░ рд╣рд╛ рдмреЛрд░реНрдб рд╡рд╛рдкрд░реВ рдирдХрд╛; рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ. рдкреНрд░рд╛рдорд╛рдгрд┐рдХрдкрдгреЗ.

рдореЙрдбреЗрдо Huawei e3372h тАУ 153

рд╣рд╛ рдореЙрдбреЗрдо рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рд░рдХреНрддрд╛рдЪрд╛ рдПрдХ рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рд╕реНрд░реЛрдд рд╣реЛрддрд╛ рдЖрдгрд┐ рдЦрд░рдВ рддрд░ рддреЛ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдХрд▓реНрдкрд╛рдЪрд╛ рдЕрдбрдерд│рд╛ рдмрдирд▓рд╛. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдпрд╛ рдЙрдкрдХрд░рдгрд╛рдВрд╕рд╛рдареА "рдореЙрдбреЗрдо" рд╣реЗ рдирд╛рд╡ рдХрд╛рдорд╛рдЪреЗ рд╕рд╛рд░ рдЕрдЬрд┐рдмрд╛рдд рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдд рдирд╛рд╣реА: рд╣реЗ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рдВрдпреЛрдЬрди рдЖрд╣реЗ, рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░рдЪреНрдпрд╛ рдпрд╛ рддреБрдХрдбреНрдпрд╛рдд рдПрдХ рд╕рдВрдорд┐рд╢реНрд░ рдЙрдкрдХрд░рдг рдЖрд╣реЗ рдЬреЗ рдбреНрд░рд╛рдпрд╡реНрд╣рд░реНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реАрдбреА-рд░реЙрдо рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рднрд╛рд╕рд╡рддреЗ, рдЖрдгрд┐ рдирдВрддрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдб рдореЛрдбрд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ.

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓рджреГрд╖реНрдЯреНрдпрд╛, рд▓рд┐рдирдХреНрд╕ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди, рд╕рд░реНрд╡ рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдирдВрддрд░, рддреЗ рдЕрд╕реЗ рджрд┐рд╕рддреЗ: рдореЙрдбреЗрдо рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдорд╛рдЭреНрдпрд╛рдХрдбреЗ eth* рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдЖрд╣реЗ, рдЬреЛ dhcp рджреНрд╡рд╛рд░реЗ IP рдкрддреНрддрд╛ 192.168.8.100 рдЖрдгрд┐ рдбреАрдлреЙрд▓реНрдЯ рдЧреЗрдЯрд╡реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЛ. 192.168.8.1 рдЖрд╣реЗ.

рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрд╡рд╛рдЪрд╛ рдХреНрд╖рдг! рд╣реЗ рдореЛрдбреЗрдо рдореЙрдбреЗрд▓ рдореЙрдбреЗрдо рдореЛрдбрдордзреНрдпреЗ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА, рдЬреЗ рдПрдЯреА рдХрдорд╛рдВрдбрджреНрд╡рд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рд╕рд░реНрд╡ рдХрд╛рд╣реА рдЦреВрдк рд╕реЛрдкреЗ рд╣реЛрдИрд▓, рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреЗрдорд╕рд╛рдареА рдкреАрдкреАрдкреА рдХрдиреЗрдХреНрд╢рди рддрдпрд╛рд░ рдХрд░рд╛ рдЖрдгрд┐ рдирдВрддрд░ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╣ рдСрдкрд░реЗрдЯ рдХрд░рд╛. рдкрд░рдВрддреБ рдорд╛рдЭреНрдпрд╛ рдмрд╛рдмрддреАрдд, тАЬрд╕реНрд╡рддрдГтАЭ (рдЕрдзрд┐рдХ рддрдВрддреЛрддрдВрдд, udev рдирд┐рдпрдорд╛рдВрдиреБрд╕рд╛рд░ рд▓рд┐рдирдХреНрд╕ рдбрд╛рдпрд╡реНрд╣рд░), eth рдЗрдВрдЯрд░рдлреЗрд╕ рддрдпрд╛рд░ рдХрд░рддреЛ рдЖрдгрд┐ dhcp рджреНрд╡рд╛рд░реЗ рддреНрдпрд╛рд▓рд╛ IP рдкрддреНрддрд╛ рдирд┐рдпреБрдХреНрдд рдХрд░рддреЛ.

рдкреБрдвреАрд▓ рдЧреЛрдВрдзрд│ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА, рдореА "рдореЙрдбреЗрдо" рд╣рд╛ рд╢рдмреНрдж рд╡рд┐рд╕рд░реВрди рдЬрд╛рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдб рдЖрдгрд┐ рдЧреЗрдЯрд╡реЗ рдореНрд╣рдгрдгреНрдпрд╛рдЪрд╛ рд╕рд▓реНрд▓рд╛ рджреЗрддреЛ, рдХрд╛рд░рдг рдереЛрдбрдХреНрдпрд╛рдд, рд╣реЗ рдирд╡реАрди рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдб рдЧреЗрдЯрд╡реЗрд╢реА рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ.
рдЬреЗрд╡реНрд╣рд╛ рдПрдХ рдореЛрдбреЗрдо рдЕрд╕рддреЛ, рддреЗрд╡реНрд╣рд╛ рдпрд╛рдореБрд│реЗ рдХреЛрдгрддреАрд╣реА рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рдЙрджреНрднрд╡рдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рдЬреЗрд╡реНрд╣рд╛ рдПрдХрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдЕрд╕рддрд╛рдд, рдореНрд╣рдгрдЬреЗ рдПрди-рдкреАрд╕, рддреЗрд╡реНрд╣рд╛ рдЦрд╛рд▓реАрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдЪрд┐рддреНрд░ рдЙрджреНрднрд╡рддреЗ.

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рдореНрд╣рдгрдЬреЗрдЪ, n рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдб, рд╕рдорд╛рди IP рдкрддреНрддреНрдпрд╛рд╕рд╣, рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рди рдбреАрдлреЙрд▓реНрдЯ рдЧреЗрдЯрд╡реЗрд╕рд╣. рдкрд░рдВрддреБ рдЦрд░рдВ рддрд░, рддреНрдпрд╛рдкреИрдХреА рдкреНрд░рддреНрдпреЗрдХрдЬрдг рддреНрдпрд╛рдЪреНрдпрд╛ рд╕реНрд╡рдд: рдЪреНрдпрд╛ рдСрдкрд░реЗрдЯрд░рд╢реА рдЬреЛрдбрд▓реЗрд▓рд╛ рдЖрд╣реЗ.

рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, рдорд╛рдЭреНрдпрд╛рдХрдбреЗ рдПрдХ рд╕реЛрдкрд╛ рдЙрдкрд╛рдп рд╣реЛрддрд╛: ifconfig рдХрд┐рдВрд╡рд╛ ip рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВрди, рд╕рд░реНрд╡ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдВрдж рдХрд░рд╛ рдЖрдгрд┐ рдлрдХреНрдд рдПрдХ рдЪрд╛рд▓реВ рдХрд░рд╛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреА рдЪрд╛рдЪрдгреА рдШреНрдпрд╛. рд╕реЛрд▓реНрдпреВрд╢рди рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рдЪрд╛рдВрдЧрд▓реЗ рд╣реЛрддреЗ, рддреНрдпрд╛рд╢рд┐рд╡рд╛рдп рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреНрд╖рдгрд╛рдВрджрд░рдореНрдпрд╛рди рдореА рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░реВ рд╢рдХрд▓реЛ рдирд╛рд╣реА. рдЖрдгрд┐ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╡рд╛рд░рдВрд╡рд╛рд░ рдЖрдгрд┐ рдЬрд▓рдж рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдорд▓рд╛ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдЕрдЬрд┐рдмрд╛рдд рд╕рдВрдзреА рдирд╡реНрд╣рддреА.

рдореНрд╣рдгреВрди, рдореА рдореЙрдбреЗрдордЪреЗ IP рдкрддреНрддреЗ рд╡реНрдпрдХреНрддрд┐рдЪрд▓рд┐рддрдкрдгреЗ рдмрджрд▓рдгреНрдпрд╛рдЪрд╛ рдЖрдгрд┐ рдирдВрддрд░ рд░рд╛рдЙрдЯрд┐рдВрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рд╡рд╛рдкрд░реВрди рд░рд╣рджрд╛рд░реА рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рдЪрд╛ рдорд╛рд░реНрдЧ рдирд┐рд╡рдбрд▓рд╛.

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рдореЙрдбреЗрдорд╕рд╣ рдорд╛рдЭреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдВрдЪрд╛ рд╣рд╛ рд╢реЗрд╡рдЯ рдирд╡реНрд╣рддрд╛: рдЙрд░реНрдЬрд╛ рд╕рдорд╕реНрдпрд╛рдВрдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рддреЗ рдмрдВрдж рдкрдбрд▓реЗ рдЖрдгрд┐ рдпреВрдПрд╕рдмреА рд╣рдмрд▓рд╛ рдЪрд╛рдВрдЧрд▓рд╛ рд╕реНрдерд┐рд░ рд╡реАрдЬрдкреБрд░рд╡рдард╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛. рдореА рдереЗрдЯ рд╣рдмрд╡рд░ рдкреЙрд╡рд░ рд╣рд╛рд░реНрдб рд╕реЛрд▓реНрдбрд░рд┐рдВрдЧ рдХрд░реВрди рд╣реА рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рд▓реА. рдорд▓рд╛ рдЖрдгрдЦреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЖрд▓реА рдЖрдгрд┐ рдЬреНрдпрд╛рдиреЗ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдХрд▓реНрдк рдЙрдзреНрд╡рд╕реНрдд рдХреЗрд▓рд╛: рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рдЪреНрдпрд╛ рд░реАрдмреВрдЯ рдХрд┐рдВрд╡рд╛ рдХреЛрд▓реНрдб рд╕реНрдЯрд╛рд░реНрдЯрдирдВрддрд░, рд╕рд░реНрд╡ рдореЙрдбреЗрдо рд╕рд╛рдкрдбрд▓реЗ рдирд╛рд╣реАрдд рдЖрдгрд┐ рдиреЗрд╣рдореАрдЪ рдирд╛рд╣реАрдд рдЖрдгрд┐ рд╣реЗ рдХрд╛ рдШрдбрд▓реЗ рдЖрдгрд┐ рдХреЛрдгрддреНрдпрд╛ рдЕрд▓реНрдЧреЛрд░рд┐рджрдорджреНрд╡рд╛рд░реЗ рдореА рд╣реЗ рдард░рд╡реВ рд╢рдХрд▓реЛ рдирд╛рд╣реА. рдкрдг рдкреНрд░рдердо рдЧреЛрд╖реНрдЯреА рдкреНрд░рдердо.

рдореЛрдбреЗрдо рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдореА usb-modeswitch рдкреЕрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ.

sudo apt update
sudo apt install -y usb-modeswitch

рддреНрдпрд╛рдирдВрддрд░, рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдореЛрдбреЗрдо рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдУрд│рдЦрд▓реЗ рдЬрд╛рдИрд▓ рдЖрдгрд┐ udev рдЙрдкрдкреНрд░рдгрд╛рд▓реАрджреНрд╡рд╛рд░реЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЬрд╛рдИрд▓. рдореА рдлрдХреНрдд рдореЙрдбреЗрдо рдХрдиреЗрдХреНрдЯ рдХрд░реВрди рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХ рджрд┐рд╕рдд рдЕрд╕рд▓реНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░реВрди рддрдкрд╛рд╕рддреЛ.
рджреБрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдЬреА рдореА рд╕реЛрдбрд╡реВ рд╢рдХрд▓реЛ рдирд╛рд╣реА: рдпрд╛ рдореЙрдбреЗрдорд╡рд░реВрди рдЖрдореНрд╣реА рдЬреНрдпрд╛ рдСрдкрд░реЗрдЯрд░рд╕рд╣ рдХрд╛рдо рдХрд░рдд рдЖрд╣реЛрдд рддреНрдпрд╛рдЪреЗ рдирд╛рд╡ рдХрд╕реЗ рдорд┐рд│рд╡рд╛рдпрдЪреЗ? рдСрдкрд░реЗрдЯрд░рдЪреЗ рдирд╛рд╡ рдореЛрдбреЗрдо рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕рдордзреНрдпреЗ 192.168.8.1 рд╡рд░ рдЖрд╣реЗ. рд╣реЗ рдПрдХ рдбрд╛рдпрдиреЕрдорд┐рдХ рд╡реЗрдм рдкреГрд╖реНрда рдЖрд╣реЗ рдЬреЗ Ajax рд╡рд┐рдирдВрддреНрдпрд╛рдВрджреНрд╡рд╛рд░реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ, рдореНрд╣рдгреВрди рдлрдХреНрдд рдкреГрд╖реНрда wgeting рдЖрдгрд┐ рдирд╛рд╡ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛рд░реНрдп рдХрд░рдгрд╛рд░ рдирд╛рд╣реА. рддреНрдпрд╛рдореБрд│реЗ рдореА рд╡реЗрдм рдкреЗрдЬ рд╡рдЧреИрд░реЗ рдХрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рд╛рдпрдЪреЗ рддреЗ рдкрд╛рд╣реВ рд▓рд╛рдЧрд▓реЛ рдЖрдгрд┐ рд▓рдХреНрд╖рд╛рдд рдЖрд▓реЗ рдХреА рдореА рдПрдХ рдкреНрд░рдХрд╛рд░рдЪрд╛ рдореВрд░реНрдЦрдкрдгрд╛ рдХрд░рдд рдЖрд╣реЗ. рдкрд░рд┐рдгрд╛рдореА, рддреЛ рдереБрдВрдХрд▓рд╛ рдЖрдгрд┐ рдСрдкрд░реЗрдЯрд░рд▓рд╛ рд╕реНрдкреАрдбрдЯреЗрд╕реНрдЯ API рд╡рд╛рдкрд░реВрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдК рд▓рд╛рдЧрд▓рд╛.

рдореЙрдбреЗрдорд▓рд╛ рдПрдЯреА рдХрдорд╛рдВрдбрджреНрд╡рд╛рд░реЗ рдкреНрд░рд╡реЗрд╢ рдЕрд╕рд▓реНрдпрд╛рд╕ рдмрд░реЗрдЪ рд╕реЛрдкреЗ рд╣реЛрдИрд▓. рддреЗ рдкреБрдиреНрд╣рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ, рдкреАрдкреАрдкреА рдХрдиреЗрдХреНрд╢рди рддрдпрд╛рд░ рдХрд░рдгреЗ, рдЖрдпрдкреА рдирд┐рдпреБрдХреНрдд рдХрд░рдгреЗ, рдЯреЗрд▓рд┐рдХреЙрдо рдСрдкрд░реЗрдЯрд░ рдорд┐рд│рд╡рдгреЗ рдЗрддреНрдпрд╛рджреА рд╢рдХреНрдп рд╣реЛрдИрд▓. рдкрдг рдЕрд░реЗрд░реЗ, рдорд▓рд╛ рдЬреЗ рджрд┐рд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ рддреНрдпрд╛рдд рдореА рдХрд╛рдо рдХрд░рдд рдЖрд╣реЗ.

рдЬреАрдкреАрдПрд╕

рдорд▓рд╛ рджрд┐рд▓реЗрд▓рд╛ GPS рд░рд┐рд╕реАрд╡реНрд╣рд░ UART рдЗрдВрдЯрд░рдлреЗрд╕ рдЖрдгрд┐ рдкреЙрд╡рд░ рд╣реЛрддрд╛. рд╣реЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдЙрдкрд╛рдп рдирд╡реНрд╣рддреЗ, рдкрд░рдВрддреБ рддрд░реАрд╣реА рддреЗ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдЖрдгрд┐ рд╕реЛрдкреЗ рд╣реЛрддреЗ. рд░рд┐рд╕реАрд╡реНрд╣рд░ рдХрд╛рд╣реАрд╕рд╛ рдЕрд╕рд╛ рджрд┐рд╕рдд рд╣реЛрддрд╛.

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рдЦрд░реЗ рд╕рд╛рдВрдЧрд╛рдпрдЪреЗ рддрд░, рдЬреАрдкреАрдПрд╕ рд░рд┐рд╕реАрд╡реНрд╣рд░рд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪреА рд╣реА рдорд╛рдЭреА рдкрд╣рд┐рд▓реАрдЪ рд╡реЗрд│ рд╣реЛрддреА, рдкрд░рдВрддреБ рдорд╛рдЭреНрдпрд╛ рдЕрдкреЗрдХреНрд╖реЗрдкреНрд░рдорд╛рдгреЗ, рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡ рдХрд╛рд╣реА рдЦреВрдк рдкреВрд░реНрд╡реА рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрддрд▓реЗ рдЧреЗрд▓реЗ рд╣реЛрддреЗ. рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдлрдХреНрдд рддрдпрд╛рд░ рдЙрдкрд╛рдп рд╡рд╛рдкрд░рддреЛ.

рдкреНрд░рдердо, рдореА рдЬреАрдкреАрдПрд╕ рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА uart_AO_B (UART_RX_AO_B, UART_TX_AO_B) рд╕рдХреНрд╖рдо рдХрд░рддреЛ.

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

рддреНрдпрд╛рдирдВрддрд░ рдореА рдСрдкрд░реЗрд╢рдирдЪреЗ рдпрд╢ рддрдкрд╛рд╕рддреЛ.

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

рд╣реА рдЖрдЬреНрдЮрд╛ рд╡рд░рд╡рд░ рдкрд╛рд╣рддрд╛ devtree on the fly рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ, рдЬреЗ рдЕрддрд┐рд╢рдп рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ.

рдпрд╛ рдСрдкрд░реЗрд╢рдирдЪреНрдпрд╛ рдпрд╢рд╛рдирдВрддрд░, рдЬреАрдкреАрдПрд╕ рдбрд┐рдорди рд░реАрдмреВрдЯ рдХрд░рд╛ рдЖрдгрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛.

khadas@Khadas:~$ sudo reboot

рдЬреАрдкреАрдПрд╕ рдбрд┐рдорди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдд рдЖрд╣реЗ. рдореА рд╕рд░реНрд╡рдХрд╛рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЛ рдЖрдгрд┐ рдкреБрдвреАрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╛рдареА рддрд╛рдмрдбрддреЛрдм рдХрд╛рдкрддреЛ.

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 рд╡рд╛рдпрд░ рдорд╛рдЭреНрдпрд╛ рд╣рд╛рддрд╛рдд рдЖрд╣реЗ, UART рдбреАрдмрдЧрд░ рд╡рд╛рдпрд░ рдорд╛рдЭреНрдпрд╛ рдмреЛрдЯрд╛рдЦрд╛рд▓реА рджрд┐рд╕рдд рдЖрд╣реЗрдд.

рдореА рд░реАрдмреВрдЯ рдХрд░рддреЛ рдЖрдгрд┐ gpsmon рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд╛рдкрд░реВрди GPS рдСрдкрд░реЗрд╢рди рддрдкрд╛рд╕рддреЛ.

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рдЖрдкрдг рдпрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯрдордзреНрдпреЗ рдЙрдкрдЧреНрд░рд╣ рдкрд╛рд╣реВ рд╢рдХрдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рдЖрдкрдг GPS рд░рд┐рд╕реАрд╡реНрд╣рд░рд╕рд╣ рд╕рдВрдкреНрд░реЗрд╖рдг рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдпрд╛рдЪрд╛ рдЕрд░реНрде рд╕рд░реНрд╡рдХрд╛рд╣реА рдареАрдХ рдЖрд╣реЗ.

рдкрд╛рдпрдердирдордзреНрдпреЗ, рдореА рдпрд╛ рдбрд┐рдордирд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреЗрдХ рдкрд░реНрдпрд╛рдп рд╡рд╛рдкрд░реВрди рдкрд╛рд╣рд┐рд▓реЗ, рдкрд░рдВрддреБ рдореА рдкрд╛рдпрдерди 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 рд╕реЗрдХрдВрджрд╛рдд рдорд▓рд╛ рдПрдХрддрд░ рд╕рдордиреНрд╡рдп рдорд┐рд│реЗрд▓ рдХрд┐рдВрд╡рд╛ рдирд╛рд╣реА. рд╣реЛрдп, рдореА рд╕рдордиреНрд╡рдп рд╕рд╛рдзрдгреНрдпрд╛рд╕рд╛рдареА рджрд╣рд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓реЗ. рдЗрд╖реНрдЯрддрдо, рдХреБрдЯрд┐рд▓ рдЖрдгрд┐ рд╕реНрдХреНрдпреВ рдирд╛рд╣реА, рдкрд░рдВрддреБ рддреЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдореА рд╣реЗ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛ рдХрд╛рд░рдг рдЬреАрдкреАрдПрд╕ рдЦрд░рд╛рдм рд░рд┐рд╕реЗрдкреНрд╢рди рдЕрд╕реВ рд╢рдХрддреЗ рдЖрдгрд┐ рдиреЗрд╣рдореА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА. рдЖрдкрдг рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗрд▓реНрдпрд╛рд╕, рдЖрдкрдг рджреВрд░рд╕реНрде рдЦреЛрд▓реАрдд рдХрд╛рдо рдХреЗрд▓реНрдпрд╛рд╕, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдпрд╛ рдард┐рдХрд╛рдгреА рдЧреЛрдард╡реЗрд▓. рдореНрд╣рдгреВрди, рдореА рд╣рд╛ рдЕрдпреЛрдЧреНрдп рдкрд░реНрдпрд╛рдп рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓рд╛.

рддрддреНрд╡рддрдГ, рдЬрд░ рдЬрд╛рд╕реНрдд рд╡реЗрд│ рдЕрд╕реЗрд▓ рддрд░, UART рджреНрд╡рд╛рд░реЗ рдереЗрдЯ GPS рд╡рд░реВрди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреЗ, рд╡реЗрдЧрд│реНрдпрд╛ рдереНрд░реЗрдбрдордзреНрдпреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреЗ рдЖрдгрд┐ рддреНрдпрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рд╢рдХреНрдп рд╣реЛрдИрд▓. рдкрдг рдЕрдЬрд┐рдмрд╛рдд рд╡реЗрд│ рдирд╡реНрд╣рддрд╛, рдореНрд╣рдгреВрди рдХреНрд░реВрд░рдкрдгреЗ рдХреБрд░реВрдк рдХреЛрдб. рдЖрдгрд┐ рд╣реЛ, рдорд▓рд╛ рд▓рд╛рдЬ рд╡рд╛рдЯрдд рдирд╛рд╣реА.

рдкреНрд░рдХрд╛рд╢ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдгрд╛рд░рд╛ рдбрд╛рдпреЛрдб

LED рдХрдиреЗрдХреНрдЯ рдХрд░рдгреЗ рдПрдХрд╛рдЪ рд╡реЗрд│реА рд╕реЛрдкреЗ рдЖрдгрд┐ рдХрдареАрдг рд╣реЛрддреЗ. рдореБрдЦреНрдп рдЕрдбрдЪрдг рдЕрд╢реА рдЖрд╣реЗ рдХреА рд╕рд┐рд╕реНрдЯреАрдордордзреАрд▓ рдкрд┐рди рдирдВрдмрд░ рдмреЛрд░реНрдбрд╡рд░реАрд▓ рдкрд┐рди рдирдВрдмрд░рд╢реА рдЬреБрд│рдд рдирд╛рд╣реА рдЖрдгрд┐ рдХрд╛рд░рдг рдХрд╛рдЧрджрдкрддреНрд░ рдбрд╛рд╡реНрдпрд╛ рд╣рд╛рддрд╛рдиреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдЖрд╣реЗ. OS рдордзреАрд▓ рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░ рдкрд┐рди рдирдВрдмрд░ рдЖрдгрд┐ рдкрд┐рди рдирдВрдмрд░рдЪреА рддреБрд▓рдирд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛рд╡реА рд▓рд╛рдЧреЗрд▓:

gpio readall

рд╕рд┐рд╕реНрдЯреАрдордордзреНрдпреЗ рдЖрдгрд┐ рдмреЛрд░реНрдбрд╡рд░ рдкрд┐рди рдкрддреНрд░рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдЪреЗ рдЯреЗрдмрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓. рддреНрдпрд╛рдирдВрддрд░ рдореА OS рдордзреНрдпреЗрдЪ рдкрд┐рди рдСрдкрд░реЗрдЯ рдХрд░реВ рд╢рдХрддреЛ. рдорд╛рдЭреНрдпрд╛ рдмрд╛рдмрддреАрдд LED рд▓рд╛ рдЬреЛрдбрд▓реЗрд▓реЗ рдЖрд╣реЗ GPIOH_5.

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рдореА GPIO рдкрд┐рди рдЖрдЙрдЯрдкреБрдЯ рдореЛрдбрд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЛ.

gpio -g mode 421 out

рдореА рд╢реВрдиреНрдп рд▓рд┐рд╣рд┐рддреЛ.

gpio -g write 421 0

рдореА рдПрдХ рд▓рд┐рд╣реВрди рдареЗрд╡рддреЛ.

gpio -g write 421 1

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА
"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() рдХреЙрд▓ рдХрд░рддреЛ рдЖрдгрд┐ LED рд╕реБрдВрджрд░рдкрдгреЗ рдмреНрд▓рд┐рдВрдХ рд╣реЛрдИрд▓.

рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдиреЛрдбреНрд╕

рд╕реНрдкреАрдбрдЯреЗрд╕реНрдЯ API

рд╕реНрдкреАрдбрдЯреЗрд╕реНрдЯ.рдиреЗрдЯ рд╕реЗрд╡реЗрдЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдкрд╛рдпрдерди-рдПрдкреАрдЖрдп рдЖрд╣реЗ рд╣реЗ рдЦреВрдк рдЖрдирдВрджрджрд╛рдпрдХ рдЖрд╣реЗ, рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдЬрд┐рдереВрдм.

рдЪрд╛рдВрдЧрд▓реА рдЧреЛрд╖реНрдЯ рдЕрд╢реА рдЖрд╣реЗ рдХреА рд╕реНрддреНрд░реЛрдд рдХреЛрдб рджреЗрдЦреАрд▓ рдкрд╛рд╣рд┐рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рдпрд╛ API рд╕рд╣ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рд╛рд╡реЗ (рд╕рд╛рдзреА рдЙрджрд╛рд╣рд░рдгреЗ) рдордзреНрдпреЗ рдЖрдврд│реВ рд╢рдХрддреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рднрд╛рдЧ.

рдореА рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдбрд╕рд╣ рдкрд╛рдпрдерди рд▓рд╛рдпрдмреНрд░рд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЛ.

sudo -H pip3 install speedtest-cli

рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреБрдореНрд╣реА рдереЗрдЯ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░рд╡рд░реВрди рдЙрдмрдВрдЯреВрдордзреНрдпреЗ рд╕реНрдкреАрдб рдЯреЗрд╕реНрдЯрд░ рдЗрдиреНрд╕реНрдЯреЙрд▓ рдХрд░реВ рд╢рдХрддрд╛. рд╣рд╛ рддреЛрдЪ рдкрд╛рдпрдерди рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд╣реЗ, рдЬреЛ рдирдВрддрд░ рдереЗрдЯ рдХрдиреНрд╕реЛрд▓рд╡рд░реВрди рд▓реЙрдиреНрдЪ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.

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"
#╤В╤Г╤В ╨╕╨┤╨╡╤В ╨╖╨░╨┐╨╕╤Б╤М ╨▓ ╤Д╨░╨╣╨╗ ╨╗╨╛╨│╨╛╨▓

рдпреЗрдереЗ рджреЗрдЦреАрд▓, рд╕рд░реНрд╡рдХрд╛рд╣реА рдЗрддрдХреЗ рд╕реЛрдкреЗ рдирд╛рд╣реА рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ, рдЬрд░реА рддреЗ рдмрд░реЗрдЪ рд╕реЛрдкреЗ рд╡рд╛рдЯреЗрд▓. рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, рд╕рд░реНрд╡реНрд╣рд░ рдкреЕрд░рд╛рдореАрдЯрд░ рд╕рдорд╛рди рд╣реЛрддреЗ [], рддреЗ рдореНрд╣рдгрддрд╛рдд, рд╕рд░реНрд╡реЛрддреНрддрдо рд╕рд░реНрд╡реНрд╣рд░ рдирд┐рд╡рдбрд╛. рдкрд░рд┐рдгрд╛рдореА, рдорд╛рдЭреНрдпрд╛рдХрдбреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рд░реНрд╡реНрд╣рд░ рд╣реЛрддреЗ рдЖрдгрд┐, рдЬрд╕реЗ рдЖрдкрдг рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡реВ рд╢рдХрддрд╛, рдЪрд▓ рдЧрддреА. рд╣рд╛ рдПрдХ рдЕрддрд┐рд╢рдп рдЧреБрдВрддрд╛рдЧреБрдВрддреАрдЪрд╛ рд╡рд┐рд╖рдп рдЖрд╣реЗ, рдирд┐рд╢реНрдЪрд┐рдд рд╕рд░реНрд╡реНрд╣рд░ рд╡рд╛рдкрд░реВрди, рддрд╕реЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рд╕реНрдерд┐рд░ рдХрд┐рдВрд╡рд╛ рдЧрддрд┐рдорд╛рди, рд╕рдВрд╢реЛрдзрди рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдкрдг рдбрд╛рдпрдиреЕрдорд┐рдХрд▓реА рдЯреЗрд╕реНрдЯ рд╕рд░реНрд╡реНрд╣рд░ рдЖрдгрд┐ рд╕реНрдЯреЕрдЯрд┐рдХрд▓реА рдлрд┐рдХреНрд╕реНрдб рдирд┐рд╡рдбрддрд╛рдирд╛ рдмреАрд▓рд╛рдЗрди рдСрдкрд░реЗрдЯрд░рд╕рд╛рдареА рдЧрддреА рдорд╛рдкрди рдЖрд▓реЗрдЦрд╛рдВрдЪреЗ рдЙрджрд╛рд╣рд░рдг рдпреЗрдереЗ рдЖрд╣реЗ.

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА
рдбрд╛рдпрдиреЕрдорд┐рдХ рд╕рд░реНрд╡реНрд╣рд░ рдирд┐рд╡рдбрддрд╛рдирд╛ рдЧрддреА рдореЛрдЬрдгреНрдпрд╛рдЪреЗ рдкрд░рд┐рдгрд╛рдо.

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА
рдХрд╛рдЯреЗрдХреЛрд░рдкрдгреЗ рдирд┐рд╡рдбрд▓реЗрд▓реНрдпрд╛ рдПрдХрд╛ рд╕рд░реНрд╡реНрд╣рд░рд╕рд╣ рд╡реЗрдЧ рдЪрд╛рдЪрдгреАрдЪрд╛ рдкрд░рд┐рдгрд╛рдо.

рдЪрд╛рдЪрдгреА рджрд░рдореНрдпрд╛рди, рджреЛрдиреНрд╣реА рдард┐рдХрд╛рдгреА "рдлрд░" рдЖрд╣реЗ рдЖрдгрд┐ рддреЗ рдЧрдгрд┐рддреАрдп рдкрджреНрдзрддреА рд╡рд╛рдкрд░реВрди рдХрд╛рдврдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдкрд░рдВрддреБ рдирд┐рд╢реНрдЪрд┐рдд рд╕рд░реНрд╡реНрд╣рд░рд╕рд╣ рддреЗ рдереЛрдбреЗрд╕реЗ рдХрдореА рдЖрд╣реЗ рдЖрдгрд┐ рдореЛрдареЗрдкрдгрд╛ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рдЖрд╣реЗ.
рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рд╣реЗ рдорд╣рд╛рди рд╕рдВрд╢реЛрдзрдирд╛рдЪреЗ рдард┐рдХрд╛рдг рдЖрд╣реЗ. рдЖрдгрд┐ рдореА iperf рдпреБрдЯрд┐рд▓рд┐рдЯреА рд╡рд╛рдкрд░реВрди рдорд╛рдЭреНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рдЪрд╛ рд╡реЗрдЧ рдореЛрдЬрддреЛ. рдкрд░рдВрддреБ рдЖрдореНрд╣реА рддрд╛рдВрддреНрд░рд┐рдХ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдирд╛ рдЪрд┐рдХрдЯреВрди рдЖрд╣реЛрдд.

рдореЗрд▓ рдЖрдгрд┐ рддреНрд░реБрдЯреА рдкрд╛рдард╡рдгреЗ

рдореЗрд▓ рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА, рдореА рдЕрдиреЗрдХ рдбрдЭрди рднрд┐рдиреНрди рдкрд░реНрдпрд╛рдпрд╛рдВрдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛, рдкрд░рдВрддреБ рд╢реЗрд╡рдЯреА рдореА рдЦрд╛рд▓реАрд▓ рдЧреЛрд╖реНрдЯреАрдВрд╡рд░ рд╕реНрдерд╛рдпрд┐рдХ рдЭрд╛рд▓реЛ. рдореА Yandex рд╡рд░ рдПрдХ рдореЗрд▓рдмреЙрдХреНрд╕ рдиреЛрдВрджрдгреАрдХреГрдд рдХреЗрд▓рд╛ рдЖрдгрд┐ рдирдВрддрд░ рдШреЗрддрд▓рд╛ рд╣реЗ рдореЗрд▓ рдкрд╛рдард╡рдгреНрдпрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ. рдореА рддреЗ рддрдкрд╛рд╕рд▓реЗ рдЖрдгрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдордордзреНрдпреЗ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ. рд╣реЗ рдЙрджрд╛рд╣рд░рдг gmail рд╡рд░реВрди рдкрд╛рдард╡рдгреЗ рдЗрддреНрдпрд╛рджреАрд╕рд╣ рд╡рд┐рд╡рд┐рдз рдкрд░реНрдпрд╛рдпрд╛рдВрдЪреЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ. рдорд▓рд╛ рдорд╛рдЭрд╛ рдореЗрд▓ рд╕рд░реНрд╡реНрд╣рд░ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕ рддреНрд░рд╛рд╕ рджреНрдпрд╛рдпрдЪрд╛ рдирд╡реНрд╣рддрд╛ рдЖрдгрд┐ рддреНрдпрд╛рд╕рд╛рдареА рд╡реЗрд│рд╣реА рдирд╡реНрд╣рддрд╛, рдкрд░рдВрддреБ рдирдВрддрд░ рдХрд│рд▓реЗ рдХреА рддреЗ рд╡реНрдпрд░реНрдерд╣реА рд╣реЛрддреЗ.

рд╢реЗрдбреНрдпреБрд▓рд░рдиреБрд╕рд╛рд░ рд▓реЙрдЧ рдкрд╛рдард╡рд▓реЗ рдЧреЗрд▓реЗ, рдХрдиреЗрдХреНрд╢рди рдЕрд╕рд▓реНрдпрд╛рд╕, рджрд░ 6 рддрд╛рд╕рд╛рдВрдиреА: рд╕рдХрд╛рд│реА 00 рд╡рд╛рдЬрддрд╛, 06 рд╡рд╛рдЬрддрд╛, рджреБрдкрд╛рд░реА 12 рдЖрдгрд┐ рд░рд╛рддреНрд░реА 18 рд╡рд╛рдЬрддрд╛. рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдкрд╛рдард╡рд▓реЗ.

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 рд╕реЗрд╡рд╛рдВрджреНрд╡рд╛рд░реЗ рдЕрд╢рд╛ рд╕рдорд╕реНрдпреЗрдмрджреНрджрд▓ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдорд╛рд╣рд┐рддреА рдкрд╛рдард╡рддрд╛рдирд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛.

рдлреАрдбрдмреЕрдХ рд╕рд░реНрд╡реНрд╣рд░

рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░рдЪреНрдпрд╛ рд░рд┐рдореЛрдЯ рддреБрдХрдбреНрдпрд╛рдд рдкреНрд░рд╡реЗрд╢ рдорд┐рд│рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рддреЗ рд╕рд╛рдиреБрдХреВрд▓рд┐рдд рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рдд рд╕рдХреНрд╖рдо рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА, рдорд▓рд╛ рдмрд╛рд╣реНрдп рд╕рд░реНрд╡реНрд╣рд░рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдкреНрд░рд╛рдорд╛рдгрд┐рдХрдкрдгреЗ, рд╕рд░реНрд╡ рдбреЗрдЯрд╛ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдкрд╛рдард╡рдгреЗ рдЖрдгрд┐ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕рдордзреНрдпреЗ рд╕рд░реНрд╡ рд╕реБрдВрджрд░ рдЖрд▓реЗрдЦ рддрдпрд╛рд░ рдХрд░рдгреЗ рдпреЛрдЧреНрдп рдЖрд╣реЗ. рдкрдг рд╕рд░реНрд╡ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдирд╛рд╣реА.

VPS рд╕рд╛рдареА рдореА рдирд┐рд╡рдбрд▓реЗ ruvds.com. рддреБрдореНрд╣реА рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рд╕рд░реНрд╡реНрд╣рд░ рдШреЗрдК рд╢рдХрддрд╛. рдЖрдгрд┐ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдорд╛рдЭреНрдпрд╛ рд╣реЗрддреВрдВрд╕рд╛рдареА рд╣реЗ рдкреБрд░реЗрд╕реЗ рдЕрд╕реЗрд▓. рдкрд░рдВрддреБ рдореА рдорд╛рдЭреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдЦрд┐рд╢рд╛рддреВрди рд╕рд░реНрд╡реНрд╣рд░рд╕рд╛рдареА рдкреИрд╕реЗ рджрд┐рд▓реЗ рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ, рдореА рддреЗ рдПрдХрд╛ рд▓рд╣рд╛рди рд░рд╛рдЦреАрд╡рд╕рд╣ рдШреЗрдгреНрдпрд╛рдЪреЗ рдард░рд╡рд▓реЗ рдЬреЗрдгреЗрдХрд░реБрди рдЖрдореНрд╣реА рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕, рдЖрдордЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ SMTP рд╕рд░реНрд╡реНрд╣рд░, VPN рдЗрддреНрдпрд╛рджреА рддреИрдирд╛рдд рдХреЗрд▓реНрдпрд╛рд╕ рддреЗ рдкреБрд░реЗрд╕реЗ рдЕрд╕реЗрд▓. рддрд╕реЗрдЪ, рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдд рд╕рдХреНрд╖рдо рд╡реНрд╣рд╛ рдЖрдгрд┐ рддреЗ рдЕрд╡рд░реЛрдзрд┐рдд рдХрд░рдгреНрдпрд╛рдд рд╕рдорд╕реНрдпрд╛ рдпреЗрдд рдирд╛рд╣реАрдд. рдореНрд╣рдгреВрди, рдореА рдЕреЕрдорд╕реНрдЯрд░рдбреЕрдо рдЖрдгрд┐ рдЦрд╛рд▓реАрд▓ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдирд┐рд╡рдбрд▓реЗ.

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░рд╕рд╣ рд╕рдВрдкреНрд░реЗрд╖рдгрд╛рдЪреА рдкрджреНрдзрдд рдореНрд╣рдгреВрди, 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 рджреНрд╡рд╛рд░реЗ рд▓реЙрдЧ рдЖрдгрд┐ рдХреЛрдгрддрд╛рд╣реА рдбреЗрдЯрд╛ рдкрд╛рдард╡реВ рд╢рдХрддреЛ, рдЬреЗ рдЦреВрдк рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ.

рд╣реЗ рд╕рд░реНрд╡ рдПрдХрддреНрд░ рдареЗрд╡рдгреЗ

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА
рдЪрд╛рд▓реВ рдХрд░рдд рдЖрд╣реЗ, рдЪрд▓рд╛ рд╡рд┐рдХрд╛рд╕ рдЖрдгрд┐ рдбреАрдмрдЧрд┐рдВрдЧ рд╕реБрд░реВ рдХрд░реВрдпрд╛

рдУрд╣, рдареАрдХ рдЖрд╣реЗ, рдореА рд╕рд░реНрд╡ рдиреЛрдбреНрд╕рдЪреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ. рдЖрддрд╛ рд╣реЗ рд╕рд░реНрд╡ рдПрдХрддреНрд░ рдареЗрд╡рдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЖрд▓реА рдЖрд╣реЗ. рддреБрдореНрд╣реА рдХреЛрдб рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдпреЗрдереЗ.

рдХреЛрдбрд╕рд╣ рдПрдХ рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рдореБрджреНрджрд╛: рд╣рд╛ рдкреНрд░рдХрд▓реНрдк рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рд╕реБрд░реВ рд╣реЛрдК рд╢рдХрдд рдирд╛рд╣реА, рдХрд╛рд░рдг рддреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рд╕рд╛рдареА, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╕рд╛рдареА рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рд╣реЛрддрд╛. рдЬрд░реА рдореА рд╕реНрддреНрд░реЛрдд рдХреЛрдб рджреЗрдд рдЖрд╣реЗ, рддрд░реАрд╣реА рдореА рдпреЗрдереЗ рд╕рд░реНрд╡рд╛рдд рдореМрд▓реНрдпрд╡рд╛рди рдЧреЛрд╖реНрдЯреА рдордЬрдХреВрд░рд╛рдд рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрди, рдЕрдиреНрдпрдерд╛ рддреЗ рдкреВрд░реНрдгрдкрдгреЗ рд╕рдордЬрдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдирд╛рд╣реА.

рд╕реБрд░рд╡рд╛рддреАрд▓рд╛, рдореА 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 рд╕рд░реНрд╡реНрд╣рд░ рдкреБрдиреНрд╣рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЕрд╕рддреЗ. рддрд░реАрд╣реА рдХреЛрдгреАрд╣реА рд╡рд╛рдЪрдд рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ, рдЯреНрд░реЗрди рд▓рд╛рдХрдбреА рд░реЗрд▓рд┐рдВрдЧрд╡рд░ рдЪрд╛рд▓рдд рдирд╛рд╣реА рд╣реЗ рдЬрд╛рдгреВрди рдШреНрдпрд╛. рдЬреЛ рдХреЛрдгреА рдЗрд╕реНрдЯрд░ рдЕрдВрдбреА рд╢реЛрдзрддреЛ рддреНрдпрд╛рд▓рд╛ рдХрд╛рд╣реА рдХрдБрдбреА рдорд┐рд│рддреЗ.

рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдореА рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рд░рд╛рдЙрдЯрд┐рдВрдЧ рдЯреЗрдмрд▓ рддрдпрд╛рд░ рдХрд░рддреЛ -рд╕реЗрдЯ-рдорд╛рд░реНрдХ 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 рд░рд╛рдЙрдЯрд┐рдВрдЧ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддреЛ (рдЬрд░ рддреЗ рдХреЗрд▓реЗ рдирд╕реЗрд▓ рддрд░), рд╡реЗрд│ рдЖрд▓реНрдпрд╛рд╕ рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рддреНрд░реБрдЯреА рдкрд╛рдард╡рд╛, рд▓реЙрдЧ рдкрд╛рдард╡рд╛ рдЖрдгрд┐ рд╢реЗрд╡рдЯреА рд╕реНрдкреАрдбрдЯреЗрд╕реНрдЯ рдЪрд╛рд▓рд╡рд╛ рдЖрдгрд┐ рд▓реЙрдЧ 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 рдСрдкрд░реЗрдЯрд░рдЪрд╛ рд╣реЛрддрд╛, рдЬреЛ рдореА рдЕрдиреЗрдХ рджрд┐рд╡рд╕ рдЪрд╛рд▓рд╡рд▓рд╛.

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рдпреЗрдереЗ рдореА рдбрд╛рдпрдиреЕрдорд┐рдХ рдореЗрдЬрд░рд┐рдВрдЧ рд╕рд░реНрд╡реНрд╣рд░ рд╡рд╛рдкрд░рд▓рд╛. рдЧрддреА рдореЛрдЬрдорд╛рдк рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд, рдкрд░рдВрддреБ рдЦреВрдк рдЪрдв-рдЙрддрд╛рд░ рд╣реЛрддрд╛рдд, рдкрд░рдВрддреБ рдХрд╛рд╣реА рд╕рд░рд╛рд╕рд░реА рдореВрд▓реНрдп рдЕрджреНрдпрд╛рдк рджреГрд╢реНрдпрдорд╛рди рдЖрд╣реЗ рдЖрдгрд┐ рд╣реЗ рдбреЗрдЯрд╛ рдлрд┐рд▓реНрдЯрд░ рдХрд░реВрди рдорд┐рд│рд╡рддрд╛ рдпреЗрддреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╣рд▓рддреНрдпрд╛ рд╕рд░рд╛рд╕рд░реАрд╕рд╣.

рдирдВрддрд░ рдореА рдЗрддрд░ рдЯреЗрд▓рд┐рдХреЙрдо рдСрдкрд░реЗрдЯрд░реНрд╕рд╕рд╛рдареА рдЕрдиреЗрдХ рдЖрд▓реЗрдЦ рддрдпрд╛рд░ рдХреЗрд▓реЗ. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЖрдзреАрдЪ рдПрдХ рдЪрд╛рдЪрдгреА рд╕рд░реНрд╡реНрд╣рд░ рд╣реЛрддрд╛, рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреАрд▓ рдЦреВрдк рдордиреЛрд░рдВрдЬрдХ рд╣реЛрддреЗ.

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рд╣рд╛ рд╡рд┐рд╖рдп рдпрд╛ рдбреЗрдЯрд╛рдЪреНрдпрд╛ рд╕рдВрд╢реЛрдзрди рдЖрдгрд┐ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╛рдареА рдЦреВрдк рд╡рд┐рд╕реНрддреГрдд рдЖрд╣реЗ рдЖрдгрд┐ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рджреЛрди рдЖрдард╡рдбреНрдпрд╛рдВрдЪреНрдпрд╛ рдХрд╛рдорд╛рд╕рд╛рдареА рдЯрд┐рдХрдд рдирд╛рд╣реА. рдкрд░рдВрддреБтАж

рдХрд╛рдорд╛рдЪрд╛ рдкрд░рд┐рдгрд╛рдо

рдорд╛рдЭреНрдпрд╛ рдирд┐рдпрдВрддреНрд░рдгрд╛рдмрд╛рд╣реЗрд░рдЪреНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдореБрд│реЗ рдХрд╛рдо рдЕрдЪрд╛рдирдХ рдкреВрд░реНрдг рдЭрд╛рд▓реЗ. рдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рддреАрд▓ рдПрдХ рдХрдордХреБрд╡рддрдкрдгрд╛, рдорд╛рдЭреНрдпрд╛ рд╡реНрдпрдХреНрддрд┐рдирд┐рд╖реНрда рдорддрд╛рдиреБрд╕рд╛рд░, рдореЙрдбреЗрдо рд╣реЛрддрд╛, рдЬреНрдпрд╛рд▓рд╛ рдЗрддрд░ рдореЙрдбреЗрдорд╕рд╣ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдХрд╛рдо рдХрд░рд╛рдпрдЪреЗ рдирд╡реНрд╣рддреЗ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рд▓реЛрдб рд╣реЛрддрд╛рдирд╛ рдЕрд╢рд╛ рдпреБрдХреНрддреНрдпрд╛ рдХреЗрд▓реНрдпрд╛. рдпрд╛ рд╣реЗрддреВрдВрд╕рд╛рдареА, рдЗрддрд░ рдореЙрдбреЗрдо рдореЙрдбреЗрд▓реНрд╕рдЪреА рдореЛрдареА рд╕рдВрдЦреНрдпрд╛ рдЖрд╣реЗ; рд╕рд╣рд╕рд╛ рддреЗ рдЖрдзреАрдкрд╛рд╕реВрдирдЪ рдорд┐рдиреА PCI-e рд╕реНрд╡рд░реВрдкрд╛рдд рдЕрд╕рддрд╛рдд рдЖрдгрд┐ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рдордзреНрдпреЗ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ. рдкрдг рддреА рдкреВрд░реНрдгрдкрдгреЗ рд╡реЗрдЧрд│реА рдХрдерд╛ рдЖрд╣реЗ. рдкреНрд░рдХрд▓реНрдк рдордиреЛрд░рдВрдЬрдХ рд╣реЛрддрд╛ рдЖрдгрд┐ рдорд▓рд╛ рддреНрдпрд╛рдд рд╕рд╣рднрд╛рдЧреА рд╣реЛрддрд╛ рдЖрд▓реЗ рдпрд╛рдЪрд╛ рдорд▓рд╛ рдЦреВрдк рдЖрдирдВрдж рдЭрд╛рд▓рд╛.

рдЕрдиреЗрдХ рдПрд▓рдЯреАрдИ рдореЙрдбреЗрдореНрд╕рд╡рд░ рдПрдХрд╛рдЪрд╡реЗрд│реА рдЧрддреА рдЪрд╛рдЪрдгреА

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛