рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрд╕рдПрдордПрд╕ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдкрд░реНрд▓-рд╕реНрдХреНрд░рд┐рдкреНрдЯ

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛



"рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдо" (рдмрд╛рдж рдореЗрдВ рдпреВрдбреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд) рдХреЗ рдЖрддреНрдо-рд╡рд┐рдХрд╛рд╕ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдордп-рд╕рдордп рдкрд░ рдЫреЛрдЯреЗ рдпрд╛ рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рдПрдХ рд░реВрдк рдореЗрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд▓рд┐рдЦрд┐рдд рдФрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рдпрд╛ рдЕрдиреНрдп рдЕрдиреБрдкрдпреБрдХреНрдд рдХреЗ рд▓рд┐рдПред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдПред "рдЕрдиреБрдкрдпреБрдХреНрдд рдХреНрдпреЛрдВ?", рдПрдХ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░ рдкреВрдЫреЗрдЧрд╛, рд╢рд╛рдпрдж рдореИрдВ рд╕рд┐рд░реНрдл "рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЦрд╛рдирд╛ рдмрдирд╛рдирд╛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛?"ред рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдлрд┐рд░ рднреА, рдЬрдм рдХрд╛рд░реНрдп рдбреА-рд▓рд┐рдВрдХ рдбреАрдЖрдИрдЖрд░ -320 рдЬреИрд╕реА рдЪреАрдЬ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рд╣реИ, рддреЛ "рд╡рд╕рд╛ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЬреАрд╡рд┐рдд рд░рд╣реВрдВрдЧрд╛ред" рдпрд╣рд╛рдБ, рд╢рд╛рдпрдж, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкрд╣рд▓реЗ PerL рдХреЛ UD рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рд▓рдХреНрд╖реНрдп рдордВрдЪ рдкрд░ "рддреЗрдЬрд╝-рдФрд░-рдЧрдВрджреЗ" рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдерд╛ред рдЬрд▓реНрджреА-рдЬрд▓реНрджреА рдФрд░ рдЧрдВрджреЗ рдХреНрдпреЛрдВ? рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рджреЛрд╕реНрддреЛрдВ рдФрд░ рд░рд┐рд╢реНрддреЗрджрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЙрддреНрдкрд╛рдж рдХрд╛ рдХреЛрдИ рд╡рд┐рддрд░рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ "рддреЗрдЬ" рдШрдЯрдХ рдкреНрд░рдмрд▓ рд╣реБрдЖ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрджрд┐рдпреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдорд╣реАрдиреЗ рдереЗ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗрд╡рд▓ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдкрд░ рдЖрд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЧрд░реНрдо рдХреЙрдЯреЗрдЬ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рддреИрдпрд╛рд░реА рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рд▓рд┐рдХреЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реАрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рд╣реАрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдбреАрдлрд╝реНрд░реЙрд╕реНрдЯ рдХрд░рдиреЗ рдЬреИрд╕реЗ рд╕рдмрд╕реЗ рднрдпрд╛рдирдХ рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд▓рдВрдмреЗ рд╕рдордп рддрдХ gnokii , CPAN SMS-Server-Tools рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рд╣реИрдВ ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдИ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рд▓рдВрдмреА рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдлрд┐рд░ рд╕реЗ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдпрд╣рд╛рдВ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЦреНрдп рддрд░реНрдХ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдмрд┐рддрд╛рдП рдЧрдП рд╕рдордп рдХрд╛ рдирд┐рд╡реЗрд╢ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рддрдереНрдп рдпрд╣ рд╣реИ: рдПрдХ рдХрд╛рд░рдг рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдп рд╕реАрдзреЗ рд╣реЛрд╕реНрдЯ рд╕реЗ рдЬреБрдбрд╝реЗ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрд╕рдПрдордПрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреАрдбреА рдХреА рдореБрдЦреНрдп рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╣ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐ "рдмрд╛рдЗрдХ" рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдиреНрдпреВрдирддрдо рдирд┐рд░реНрднрд░рддрд╛;
- "рддреЗрдЬреА рд╕реЗ рдФрд░ рдЧрдВрджреЗ" рд╡рд┐рдХрд╛рд╕ (рд╢реБрд░реБрдЖрддреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рде 2 рджрд┐рди, рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ рдерд╛);
- рдХреНрд▓рд╛рдЗрдВрдЯ (рдпреВрдбреА рдХреА рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛) рдореЛрдб рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред рдлреЛрди рдХреЗ рд╕рд╛рде рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдореЗрдВ рджреЗрд░реА рдФрд░ рд▓рдЯрдХреА рд╣реБрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВред
- рд╕рдВрдХрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдХрдореА, рдЬреЛ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ "рдПрдореНрдмреЗрдбреЗрдб-рд▓рд┐рдирдХреНрд╕" рдкреНрд░рдХрд╛рд░;
- рдиреНрдпреВрдирддрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛: рдПрд╕рдПрдордПрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ + рдПрд╕рдПрдордПрд╕ рднреЗрдЬрдирд╛;
- рдпреВрдирд┐рдХреНрд╕ рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕;
- рдбреЗрдорди рдореЛрдб рдФрд░ рд╕рд┐рдВрдЧрд▓-рд░рди рдореЛрдб рджреЛрдиреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛;
- рд╕рд┐рд░рд┐рд▓рд┐рдХ рдореЗрдВ рдПрд╕рдПрдордПрд╕ рд╕рдорд░реНрдердиред
- рд╕рд╣рд┐рдд, рдлреЛрди рдореЙрдбрд▓ рдХреА рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреБрд░рд╛рдиреЗ рд╡рд╛рд▓реЗред

рдирд┐рд░реНрдгрдп


рджрд░рдЕрд╕рд▓, рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрдпрд╛рди рдХреЗ рдмрд╛рдж, рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдЦреЛрдЬ рдХрд╛ рдЪрдХреНрд░ рдХрд╛рдлреА рд╕рдВрдХреБрдЪрд┐рдд рд╣реЛ рдЧрдпрд╛ред рдпрд╣ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐:
- рдпрд╣ рдПрдХ рдкрд░реНрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдкрд░реНрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реИ рдФрд░ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рдмреЗрд╢рдХ, рдХрд╛рд░реНрдп рд╢реЗрд▓ рдкрд░ рд╕рд╛рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрдм "рддреЗрдЬ" рдЦреЛ рдЧрдпрд╛ рдерд╛ред
- рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рд╣реИред рдпрд╣ рдкреВрд░реНрдг рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЗ рдмрджрд▓реЗ рдореЗрдВред
- рдлреЛрди рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдпреВрдбреАрдкреА рдореЛрдб рдореЗрдВ рд╣реЛрдЧрд╛ред рдпрд╣ рдкрд┐рдЫрд▓реА рд╕реВрдЪреА рд╕реЗ рдЕрдВрддрд┐рдо рджреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИред
- рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрдерд╛рд╕рдВрднрд╡ рд░реИрдЦрд┐рдХ рд╣реЛрдЧреА, рдХреЛрдИ рдУрдУрдкреА рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореЙрдбреНрдпреВрд▓рд░рд┐рдЯреА рднреА рдирд╣реАрдВ рд╣реЛрдЧреА, рдХреЗрд╡рд▓ рдкрдардиреАрдпрддрд╛ рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╢рдмреНрдж рдореЗрдВ, рддреЗрдЬреА рд╕реЗ рдФрд░ рдЧрдВрджрд╛ред

рдХреНрдпрд╛ рд╣реБрдЖ?


рджрд░рдЕрд╕рд▓, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд▓рдЧрднрдЧ рддреАрди рд╕реМ рд▓рд╛рдЗрдиреЗрдВ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ :: SerialPort рдореЙрдбреНрдпреВрд▓ рдмрд╛рд╣рд░реА CPAN рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВред рдмрд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛рдлреА рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдХреЛ рдЦрд░рд╛рдм рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдВрдХрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдХреНрд░реЙрд╕-рд╕рдВрдХрд▓рди, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рддреИрдпрд╛рд░-рдЙрдкрд▓рдмреНрдз рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд╛рд░реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИред рдПрдХ рд╕реАрдореЗрдВрд╕ рдПрд╕ 65 рдлреЛрди рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдерд╛ред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рдФрд░ рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: UCS.map рдФрд░ UCS.unmap, рдЬреЛ рдпрд╣рд╛рдВ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЦрд╛рд▓реА рдФрд░ рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЦреБрд╢реА рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдХреЗрд╡рд▓ рдореБрдЭреЗ рдмрд╣реБрдд рдЖрднрд╛рд░реА рд╣реЛрдВрдЧреЗ (рд╡рд┐рдбрдВрдмрдирд╛ рдирд╣реАрдВ)ред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рд╕рднреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрдерд┐рд░рд╛рдВрдХ (рдкрде, рд▓реЙрдЧрд┐рдВрдЧ рдореЛрдб, рдЖрджрд┐) рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЖрд░рдВрднрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдЧреЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рд╕рдВрджреЗрд╢ рдлрд╝рд╛рдЗрд▓ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ $ рдореЗрд╕рдбрд┐рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ рдХрдиреНрд╡реЗрдВрд╢рди $ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧрдлрд┐рд▓рдорд╛рд╕реНрдХ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред $ Dateред $ MSISDNред
рдЬрд╣рд╛рдВ $ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧрдорд┐рд▓рдорд╛рд╕реНрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╣реЗрдбрд░ рд╕реЗ рдореБрдЦреМрдЯрд╛ рдореВрд▓реНрдп рд╣реИ, $ рддрд┐рдерд┐ рднреЗрдЬрдиреЗ рдХреА рддрд╛рд░реАрдЦ (рдЦрд░рд╛рдм рд╡рд┐рдХрд▓реНрдк) рдпрд╛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреИрдЪ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, $ MSISDN рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХрд╛ рдлреЛрди рдирдВрдмрд░ рд╣реИ, рд▓реЗрдХрд┐рди 810 рдЬреИрд╕реЗ рдХрд┐рд╕реА рдЙрдкрд╕рд░реНрдЧ рдХреЗ рдмрд┐рдирд╛ред 00, +, рдЖрджрд┐ред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реА - рдЕрдиреВрджрд┐рдд рд╕рдВрджреЗрд╢ рдкрд╛рдаред рдХреНрдпреЛрдВ рд▓рд┐рдкреНрдпрдВрддрд░рдг - рдпрд╣ рд╣реБрдЖ ("рддреЗрдЬ рдФрд░ рдЧрдВрджрд╛")ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП UCS.map рдФрд░ UCS.unmap рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдУрд╡рд░рдлрд╝рд┐рд▓ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдорд░рдореНрдордд рдХреА рдЬрд╛рддреА рд╣реИред
рд░рд┐рд╕реЗрдкреНрд╢рди рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрдЦреМрдЯрд╛ рдХреЗ рд╕рд╛рде $ рдЖрдиреЗ рд╡рд╛рд▓реАрдлрд┐рд▓рдорд╛рд╕реНрдХред рджреЛрдиреЛрдВ рдореБрдЦреМрдЯреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рдПрдХ рдЕрд╡рдзрд┐ (рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд░рдХреНрд╖рд╛) рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлреЛрди рдХреЗ рдореЗрдореЛрд░реА рд╕реЗ рд╕рднреА рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддреА рд╣реИ, рдлреЛрди рдХреЛ рдореБрдЦреНрдп рдореЗрдореЛрд░реА рдореЗрдВ рдПрд╕рдПрдордПрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕рд┐рдо рдХрд╛рд░реНрдб рдкрд░ рдирд╣реАрдВ)ред рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдкреНрд░рддрд┐рдпрд╛рдВ $ рдмреИрдХрдЕрдк рдзреНрд╡рдЬ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде $ backupdir рдореЗрдВ рд╕рд╣реЗрдЬреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рд╕рдм рдХреБрдЫ рд╣реЛрдиреЗ рд▓рдЧрддрд╛ рд╣реИред

#!/opt/bin/perl use Device::SerialPort; #script global setting values my $port_path = "/dev/usb/tts/0"; my $basedir = '/opt/files/'; my $msgdir = '/opt/files/msg/'; my $logdir = '/opt/files/log/'; my $backupdir = '/opt/files/msg_backup/'; #my $backup = 1; my $log = 1; my $incomingfilemask = "in.msg"; my $outgoingfilemask = "out.msg"; my $sleeptime = 10; # intercycle sleep time in seconds if no new messages my $runcycles = 100; #if runcycles set more than 1000, script will run endless if($log ==1){ open (LOG,">>$logdir".'UDP.log') }else{ open (LOG,">/dev/null"); } my $run = 1; # serial port init section $port = new Device::SerialPort($port_path) or die "cannot open serial port:$!\n"; $port->baudrate(115200); #for siemens #$port->baudrate(921600); $port->parity("none"); $port->databits(8); $port->stopbits(1); $port->read_char_time(0); $port->read_const_time(1000); my %map; my %unmap; chdir ($basedir); loadMAP(); # init mobile phone send_at('AT+CMGF=0'); #set to receive unread messages send_at('AT+CPMS="ME"'); #set default storage to mobile # main cycle section while($run){ my @msg2del; my $rcvd_id = 0; my @mobile_out = split("\r",talk_mobile("AT+CMGL=4\r\n")); #print join ("\n",@mobile_out)."\n"; my $totalsize = 0; foreach $line ( @mobile_out){ $line =~ s/\n//g; if($line eq ''){ next}; if($line =~ /\+CMGL:/){ #print "AT response: $line\n"; ($header,$param) = split(/:/,$line); (@id) = split(/,/,$param); #print "msg id's:".join(':',@id)."\n"; $msg2del[$rcvd_id]= $id[0]; $rcvd_id ++; next; } $totalsize +=length($line); if($line =~/07/){ #print LOG $line."\n"; my $parserpos = 0; my $LoSMSC = hex(substr($line,$parserpos,2)); $parserpos = $LoSMSC*2+4; # jump over SMSC address my $LoMSISDN = hex(substr($line,$parserpos,2)); $parserpos += 2; my $toMSISDN = substr($line,$parserpos,2); $parserpos += 2; unless(int($LoMSISDN/2)*2 == $LoMSISDN){ $LoMSISDN ++; } $senderMSISDN = unpack_number(substr($line,$parserpos,$LoMSISDN)); $parserpos += $LoMSISDN+2; ## jump protocol identifier my $TP_DCS = hex(substr($line,$parserpos,2)); $parserpos +=2; my $TP_SCTS = swap_number(substr($line,$parserpos,14)); $parserpos +=14; my @TS = split('',$TP_SCTS); my $rcvd_date = $TS[4].$TS[5].$TS[2].$TS[3].'20'.$TS[0].$TS[1]; my $rcvd_time = $TS[6].$TS[7].$TS[8].$TS[9].$TS[10].$TS[11]; my $TP_UDL = hex(substr($line,$parserpos,2)); $parserpos +=2; my $msg_text = hex2ascii(substr($line,$parserpos,$TP_UDL*2)); my $msgfilename = "$msgdir/$incomingfilemask.$rcvd_date$rcvd_time.$senderMSISDN"; open (OUT,">$msgfilename") || print "cannot create $msgfilename"; #print "LoMSISDN=$LoMSISDN,MSISDN=$senderMSISDN,DCS=$TP_DCS,date=$rcvd_date $rcvd_time, msglen=$TP_UDL, pos=$parserpos\n"; print OUT $msg_text; close (OUT); }else{ #print "tag not found for $line\n"; } } while($rcvd_id >0){ my $msgid = $msg2del[$rcvd_id-1]; send_at('AT+CMGD='.$msgid)."\n"; $rcvd_id --; } #send outgong messages section if(opendir(MSGDIR,$msgdir)){ my @files = readdir(MSGDIR); foreach $msgfile (@files){ if($msgfile =~ /$outgoingfilemask/){ #print "processing outgoing message $msgfile..."; ($mask,$mask2,$date,$MSISDN) = split(/\./,$msgfile); if(open(MSGIN,$msgdir.$msgfile)){ while(<MSGIN>){ chomp; #reading text of the message if(defined($_)){send_SMS($MSISDN,$_)}; #print "to $MSISDN,text <$_>\n"; } close(MSGIN); system "rm $msgdir$msgfile"; }else {print "cannot open msg file $msgfile"}; } } closedir(MSGDIR); }else{ print LOG "cannot open outgoing message directory $msg_input_dir\n"; } if($runcycles ==0 ){ undef $run; }else{ unless($runcycles >= 1000){$runcycles --;}; sleep($sleeptime); } } close(LOG); sub send_SMS{ my ($MSISDN,$text) = @_; $TP_LOA = sprintf("%02X",length($MSISDN)); $TP_MSISDN = unpack_number($MSISDN); $TP_UD = ascii2hex($text); $TP_UDL = sprintf("%02X",length($TP_UD)/2); $TP_TOA = '91'; #international number $outline = $TP_SMSC.'1100'.$TP_LOA.$TP_TOA.$TP_MSISDN.'0008AA'.$TP_UDL.$TP_UD; $lout = length($outline)/2; $outline = '00'.$outline; if(defined($backup)){ if(open(BF,">$backupdir/$MSISDN.".int(1000*rand()))){ print BF $outline; close(BF); } } my @mobile_out = split("\r",talk_mobile("AT+CMGS=$lout\r\n")); my $totalsize = 0; my $prompt; foreach $line ( @mobile_out){ $line =~ s/\n//g; if($line =~ /\>/){$prompt = 1}; }; if($prompt ==1){ my @mobile_out = split("\r",talk_mobile($outline.chr(26))); my $totalsize = 0; foreach $line ( @mobile_out){ $line =~ s/\n//g; }; }else{ #no prompt from mobile - error } } sub hex2ascii{ my $inline = shift; my $lol = length($inline); #print "inline=<".$inline.">\n"; my $result = ''; my $seek = 0; while(defined($quad = substr($inline,$seek*4,4))){ $result .= $map{$quad}; $seek ++; } #print "length =$lol,$seek characters converted\n"; return $result; } sub ascii2hex{ my $inline = shift; my $result = ''; my $seek = 0; while(defined($char = substr($inline,$seek,1))){ unless($char eq ''){$result .= $unmap{$char}}; $seek ++; } return $result; } sub unpack_number{ my $result = ''; my $inline = shift; my $seek =0; $num_len = length($inline); if(($num_len - 2 * int($num_len / 2)) >0 ){ $inline .='F'; } while($pair = substr($inline,$seek*2,2)){ $result .= reverse($pair); $seek ++; } return ($result); } sub swap_number{ my $result = ''; my $inline = shift; my $seek =0; while($pair = substr($inline,$seek*2,2)){ $result .= reverse($pair); $seek ++; } return ($result); } sub send_at{ my $cmd = shift; my $result; my @mobile_out = split("\r",talk_mobile($cmd."\r\n")); my $totalsize = 0; foreach $line ( @mobile_out){ $line =~ s/\n//g; if($line eq 'OK'){ $result = 1; }elsif($line eq 'ERROR'){ $result = -1; } } } sub talk_mobile{ my $cmd = shift; $port->lookclear; $port->write("$cmd"); my $read_chars = 0; my $buffer = ""; my $eol =1; while($eol){ my ($count,$saw) = $port->read(255); if($count > 0){ $buffer.= $saw; if(($saw =~ /OK/)or($saw =~/ERROR/)or($saw =~/\>/)) {undef $eol} } } return $buffer; } sub loadMAP{ if(open(UCS,"UCS.map")){ $loaded = 0; while(<UCS>){ chomp; my ($code,$value)=split(/,/,$_,2); $map{$code} = $value; $loaded ++; } #print $loaded ." patterns loaded\n"; close(UCS); }else{ print "cannot open UCS.map file\n"}; if(open(UUCS,"UCS.unmap")){ $loaded = 0; while(<UUCS>){ chomp; my ($code,$value)=split(/,/,$_,2); $unmap{$code} = $value; $loaded ++; } close(UUCS); }else{ print "cannot open UCS.unmap file\n"}; 

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:
рд╕реАрдкреАрдПрдПрди рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯ рдореЙрдбреНрдпреВрд▓
howToReceiveSMSUsingPC

Source: https://habr.com/ru/post/In130391/


All Articles