рджреЛ-рдЕрдкрдиреЗ рдЖрдк рд╕реНрдорд╛рд░реНрдЯ рдкреНрд╡рд╛рдЗрдВрдЯ рдпрд╛ "рдЗрдВрдЯрд░рдиреЗрдЯ рдЪреАрдЬ"

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд╣реЛрдо рдСрдЯреЛрдореЗрд╢рди рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдСрдл рдерд┐рдВрдЧреНрд╕ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред



рдЫрд╡рд┐



рдореИрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рд╕реЗ рдкреВрдЫрддрд╛ рд╣реВрдВред



рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп


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



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



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



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


рддреЛ, рдмреЛрд▓ рд╕реЗ рдЕрднреНрдпрд╛рд╕ рддрдХред рд╕реНрдорд╛рд░реНрдЯрдкрд╛рдЗрдк рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдореВрд▓рднреВрдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВ:





рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд (рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ) рдЗрдЪреНрдЫрд╛рдПрдВ:





рдирд┐рдпрдВрддреНрд░рдХ, рдореЗрдЬрдмрд╛рди, рдкрд░рд┐рдзреАрдп


рдмрд╛рд░-рдмрд╛рд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде "рд╡рд┐рд╢рд▓рд┐рд╕реНрдЯ" рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕реЗрдЯ, рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдЕрднреА рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЗрддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХреИрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреА рд╕рднреА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдирд┐рдореНрди рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдХ рдЗрдЪреНрдЫрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреА рднреВрдЦ рдирд╣реАрдВ рдмрдирд╛рдПрдЧрд╛ред рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдкреНрд░рддрд┐рд░реЛрдз рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд▓реЗрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ - рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рджреЛ рддрд╛рд░реНрдХрд┐рдХ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рдПрдХ ("рдирд┐рдпрдВрддреНрд░рдХ") рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдЧрд╛ рдФрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдердорд┐рдХ рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛, рдФрд░ рджреВрд╕рд░рд╛ ("рд╣реЛрд╕реНрдЯ") рдЬреЛ рдХрд┐ рдирд┐рд░реНрдорд┐рдд рд▓рд┐рдирдХреНрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред рдЙрдЪреНрдЪ рд╕реНрддрд░ (рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдирд┐рдпрдореЛрдВ рдХреА рдкреНрд░рдгрд╛рд▓реА, рдПрдкреАрдЖрдИ)ред Arduino microcontroller рдХреЛ рдкрд╣рд▓реЗ рдмреНрд▓реЙрдХ (рдЕрдиреБрдорд╛рди!) рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ OpenWRT рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдЯреАрдкреА-рд▓рд┐рдВрдХ WR703N рд░рд╛рдЙрдЯрд░ рдХреЛ рджреВрд╕рд░реЗ рдмреНрд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдзреНрдпрд╛рди рджреЗрдВ: DLink Dir-320 рд░рд╛рдЙрдЯрд░ рдкрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЗрдХрдЯреНрдареА рд╣реБрдИ рдереА)ред рдзрд░реНрдореА рдХреНрд░реЛрдз рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреА рд╡реНрдпрд╡рд╣рд╛рд░реНрдпрддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдп рд╣реИ, рдФрд░ рдПрдХ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдЙрдкрдХрд░рдг рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рд╡рд╛рдЗрд╕ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИ - рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд! Arduino рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реЗрдВрд╕рд░ рдФрд░ рдПрдХреНрдЪреБрдПрдЯрд░реНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЯреАрдкреА-рд▓рд┐рдВрдХ WR703N рд░рд╛рдЙрдЯрд░:



рдЫрд╡рд┐



рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдЕрд░реБрдбрд┐рдиреЛ рдиреИрдиреЛ:



рдЫрд╡рд┐



рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛:





рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рд╕реЗрдЯ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ, рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕реЗ "рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛" рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рд┐рдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рд╕рд╛рде рдбрд┐рд╡рд╛рдЗрд╕ рдПрдХ рдмрдЯрди рдХреЗ рдкреНрд░реЗрд╕ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ, рдЖрдВрджреЛрд▓рди рдХрд░рдиреЗ, рддрд╛рдкрдорд╛рди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдмрд╛рд╣рд░реА рд╕реЗрдВрд╕рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдм рдкрд░ рдкрд╣рд▓реЗ рд╡рд░реНрдгрд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ) рдФрд░ Noolite рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкрд╛рд╡рд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВ (рдирд┐рдпрдВрддреНрд░рдг рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИ) рдФрд░ рдлреЛрдЯреЛрдЧреНрд░рд╛рдл рдореЙрдбреНрдпреВрд▓ рдХреА рдПрдХ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдкреНрд░рддрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ рд╕рдмрд╕реЗ рд╢реБрд░реБрдЖрддреА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдпрд╛ рдерд╛)ред



рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдбреНрд░рд╛рдлреНрдЯ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░, рд╣рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреНрд▓реЙрдХ рдЖрд░реЗрдЦ рдорд┐рд▓рддреЗ рд╣реИрдВ:



рдЫрд╡рд┐



рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:





рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рддреИрдпрд╛рд░реА


рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рджреЛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВ: рдкрд╣рд▓рд╛, рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рдХрдВрд╕реЛрд▓ рддрдХ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛, рдФрд░ рджреВрд╕рд░рд╛, рдХрдВрд╕реЛрд▓ рд╕реЗ рдХрдорд╛рдВрдб рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯреЗрдб рдкреЗрд░рд┐рдлреЗрд░рд▓реНрд╕ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред



рдиреАрдЪреЗ рд╕реНрдХреЗрдЪ рдХрд╛ рдкрд╛рда рд╣реИ, рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рдкрд░рд┐рдзреАрдп рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдПред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрдЯрди PIN4, рдЧрддрд┐ рд╕рдВрд╡реЗрджрдХ рд╕реЗ PIN3, рддрд╛рдкрдорд╛рди рд╕рдВрд╡реЗрджрдХ рд╕реЗ PIN9, рд░реЗрдбрд┐рдпреЛ рд╕реЗ PIN8 рдФрд░ рдиреБрд▓рд┐рдЯ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдкрд┐рди 10, 11 рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИред



рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рд╕реНрдХреЗрдЪ
#include <OneWire.h> #include <DallasTemperature.h> #include <VirtualWire.h> #include <EasyTransferVirtualWire.h> #include <EEPROM.h> //Needed to access the eeprom read write functions #include <SoftwareSerial.h> #define PIN_LED (13) // INDICATOR #define PIN_PIR (3) // BUTTON #define PIN_BUTTON (4) // BUTTON #define PIN_LED_R (6) // INDICATOR RED #define PIN_LED_G (5) // INDICATOR GREEN #define PIN_LED_B (7) // INDICATOR BLUE #define PIN_RF_RECEIVE (8) // EASYRF RECEIVER #define PIN_TEMP (9) // TEMPERATURE SENSOR #define PIN_NOO_RX (10) // RX PIN (connect to TX on noolite controller) #define PIN_NOO_TX (11) // TX PIN (connect to RX on noolite controller) #define TEMP_ACC (0.3) // temperature accuracy #define PERIOD_READ_TEMP (20) // seconds #define PERIOD_SEND_TEMP (600) // seconds (10 minutes) #define PERIOD_SEND_UPTIME (300) // seconds (5 minutes) #define NOO_BUF_LEN (12) unsigned int unique_device_id = 0; long int uptime = 0; long int old_uptime = 0; float sent_temperature=0; int sent_pir=0; int sent_button=0; int sent_button_longlick=0; long int timeCheckedTemp=0; long int timeSentTemp=0; long int timeSentUptime=0; long int timeButtonPressed=0; String inData; //create objects SoftwareSerial mySerial(PIN_NOO_RX, PIN_NOO_TX); // RX, TX OneWire oneWire(PIN_TEMP); DallasTemperature sensors(&oneWire); EasyTransferVirtualWire ET; unsigned int last_packet_id = 0; struct SEND_DATA_STRUCTURE{ //put your variable definitions here for the data you want to send //THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO //Struct can'e be bigger then 26 bytes for VirtualWire version unsigned int device_id; unsigned int destination_id; unsigned int packet_id; byte command; int data; }; //give a name to the group of data SEND_DATA_STRUCTURE mydata; //This function will write a 2 byte integer to the eeprom at the specified address and address + 1 void EEPROMWriteInt(int p_address, unsigned int p_value) { byte lowByte = ((p_value >> 0) & 0xFF); byte highByte = ((p_value >> 8) & 0xFF); EEPROM.write(p_address, lowByte); EEPROM.write(p_address + 1, highByte); } //This function will read a 2 byte integer from the eeprom at the specified address and address + 1 unsigned int EEPROMReadInt(int p_address) { byte lowByte = EEPROM.read(p_address); byte highByte = EEPROM.read(p_address + 1); return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00); } void nooSend(byte channel, byte buf[NOO_BUF_LEN]) { buf[0]=85; buf[1]=B01010000; // buf[4]=0; buf[5]=channel; buf[9]=0; int checkSum; for(byte i=0;i<(NOO_BUF_LEN-2);i++) { checkSum+=buf[i]; } buf[10]=lowByte(checkSum); buf[11]=170; Serial.print("Sending: "); for(byte i=0;i<(NOO_BUF_LEN);i++) { Serial.print(buf[i]); if (i!=(NOO_BUF_LEN-1)) { Serial.print('-'); } } Serial.println(""); for(byte i=0;i<(NOO_BUF_LEN);i++) { mySerial.write(buf[i]); } } void noolitePair(byte channel) { byte buf[NOO_BUF_LEN]; for(byte i=0;i<(NOO_BUF_LEN);i++) { buf[i]=0; } buf[2]=15; buf[3]=0; nooSend(channel,buf); } void nooliteUnPair(byte channel) { byte buf[NOO_BUF_LEN]; for(byte i=0;i<(NOO_BUF_LEN);i++) { buf[i]=0; } buf[2]=9; buf[3]=0; nooSend(channel,buf); } void nooliteTurnOn(byte channel) { byte buf[NOO_BUF_LEN]; for(byte i=0;i<(NOO_BUF_LEN);i++) { buf[i]=0; } buf[2]=2; buf[3]=0; nooSend(channel,buf); } void nooliteTurnOff(byte channel) { byte buf[NOO_BUF_LEN]; for(byte i=0;i<(NOO_BUF_LEN);i++) { buf[i]=0; } buf[2]=0; buf[3]=0; nooSend(channel,buf); } void nooliteSwitch(byte channel) { byte buf[NOO_BUF_LEN]; for(byte i=0;i<(NOO_BUF_LEN);i++) { buf[i]=0; } buf[2]=4; buf[3]=0; nooSend(channel,buf); } void nooliteLevel(byte channel,byte level) { byte buf[NOO_BUF_LEN]; for(byte i=0;i<(NOO_BUF_LEN);i++) { buf[i]=0; } buf[2]=6; buf[3]=1; buf[6]=level; nooSend(channel,buf); } void blinking(int count) { for(int i=0;i<count;i++) { digitalWrite(PIN_LED, HIGH); delay(200); digitalWrite(PIN_LED, LOW); delay(200); } } void setColor(int r,int g, int b) { digitalWrite(PIN_LED_R, r); digitalWrite(PIN_LED_G, g); digitalWrite(PIN_LED_B, b); } void setup() { randomSeed(analogRead(0)); pinMode(PIN_LED, OUTPUT); pinMode(PIN_LED_R, OUTPUT); pinMode(PIN_LED_G, OUTPUT); pinMode(PIN_LED_B, OUTPUT); pinMode(PIN_PIR, INPUT); pinMode(PIN_BUTTON, INPUT); Serial.begin(9600); // Debugging only ET.begin(details(mydata)); // Initialise the IO and ISR vw_set_rx_pin(PIN_RF_RECEIVE); vw_setup(2000); // Bits per sec vw_rx_start(); // Start the receiver PLL running // Device ID Serial.print("Getting Device ID... "); unique_device_id=EEPROMReadInt(0); if (unique_device_id<10000 || unique_device_id>60000 || unique_device_id==26807) { Serial.print("N/A, updating... "); unique_device_id=random(10000, 60000); EEPROMWriteInt(0, unique_device_id); } Serial.println(unique_device_id); pinMode(PIN_NOO_RX, INPUT); pinMode(PIN_NOO_TX, OUTPUT); mySerial.begin(9600); } void loop() { uptime=round(millis()/1000); if (uptime!=old_uptime) { Serial.print("Up: "); Serial.println(uptime); old_uptime=uptime; if (((uptime-timeSentUptime)>PERIOD_SEND_UPTIME) || (timeSentUptime>uptime)) { timeSentUptime=uptime; Serial.print("P:"); Serial.print(random(65535)); Serial.print(";F:"); Serial.print("0"); Serial.print(";T:0;C:"); Serial.print("24"); Serial.print(";D:"); Serial.print(uptime); Serial.println(";"); } } int current_pir=digitalRead(PIN_PIR); if (current_pir!=sent_pir) { Serial.print(millis()/1000); Serial.print(" Motion sensor: "); Serial.println(current_pir); Serial.print("P:"); Serial.print(random(65535)); Serial.print(";F:"); Serial.print("0"); Serial.print(";T:0;C:"); Serial.print("12"); Serial.print(";D:"); Serial.print("1"); Serial.println(";"); sent_pir=(int)current_pir; } int current_button=digitalRead(PIN_BUTTON); if (current_button!=sent_button) { delay(50); int confirm_current_button=digitalRead(PIN_BUTTON); if (confirm_current_button==current_button) { if (current_button==1) { timeButtonPressed=millis(); sent_button_longlick=0; } if (current_button==0) { if (sent_button_longlick!=1) { Serial.print(millis()/1000); Serial.print(" Button press: "); Serial.println(current_button); Serial.print("P:"); Serial.print(random(65535)); Serial.print(";F:"); Serial.print("0"); Serial.print(";T:0;C:"); Serial.print("23"); Serial.print(";D:"); Serial.print("3"); Serial.println(";"); } } sent_button=(int)current_button; } } else { if (current_button==1) { int passed=millis()-timeButtonPressed; if ((passed>3000) && (sent_button_longlick!=1)) { sent_button_longlick=1; Serial.print(millis()/1000); Serial.print(" Button long press: "); Serial.println(current_button); Serial.print("P:"); Serial.print(random(65535)); Serial.print(";F:"); Serial.print("0"); Serial.print(";T:0;C:"); Serial.print("23"); Serial.print(";D:"); Serial.print("4"); Serial.println(";"); } } else { sent_button_longlick=0; } } if (((uptime-timeCheckedTemp)>PERIOD_READ_TEMP) || (timeCheckedTemp>uptime)) { // TEMP SENSOR 1 float current_temp=0; sensors.requestTemperatures(); current_temp=sensors.getTempCByIndex(0); if (current_temp>-100 && current_temp<50) { timeCheckedTemp=uptime; Serial.print("Temp sensor: "); Serial.println(current_temp); float diff=(float)sent_temperature-(float)current_temp; if ((abs(diff)>=TEMP_ACC) || ((uptime-timeSentTemp)>PERIOD_SEND_TEMP)) { // timeSentTemp=uptime; sent_temperature=(float)current_temp; Serial.print("P:"); Serial.print(random(65535)); Serial.print(";F:"); Serial.print("0"); Serial.print(";T:0;C:"); Serial.print("10"); Serial.print(";D:"); Serial.print((int)(current_temp*100)); Serial.println(";"); } } else { //Serial.print("Incorrect T: "); //Serial.println(current_temp); } } if (Serial.available()) { char c=Serial.read(); if (c == '\n' || c == ';') { Serial.println(inData); int commandProcessed=0; if (inData.equals("blink")) { Serial.println("BLINKING!"); blinking(3); commandProcessed=1; } if (inData.startsWith("pair")) { commandProcessed=1; inData.replace("pair",""); noolitePair(inData.toInt()); } if (inData.startsWith("on")) { commandProcessed=1; inData.replace("on",""); nooliteTurnOn(inData.toInt()); } if (inData.startsWith("off")) { commandProcessed=1; inData.replace("off",""); nooliteTurnOff(inData.toInt()); } if (inData.startsWith("switch")) { commandProcessed=1; inData.replace("switch",""); nooliteSwitch(inData.toInt()); } if (inData.startsWith("level")) { commandProcessed=1; inData.replace("level",""); int splitPosition; splitPosition=inData.indexOf('-'); if(splitPosition != -1) { String paramString=inData.substring(0,splitPosition); int channel=paramString.toInt(); inData=inData.substring(splitPosition+1,inData.length()); nooliteLevel(channel,inData.toInt()); } } if (inData.startsWith("unpair")) { commandProcessed=1; inData.replace("unpair",""); nooliteUnPair(inData.toInt()); } if (inData.startsWith("color-")) { commandProcessed=1; inData.replace("color-",""); if (inData.equalsIgnoreCase("r")) { setColor(255,0,0); } if (inData.equalsIgnoreCase("g")) { setColor(0,255,0); } if (inData.equalsIgnoreCase("b")) { setColor(0,0,255); } if (inData.equalsIgnoreCase("w")) { setColor(255,255,255); } if (inData.equalsIgnoreCase("off")) { setColor(0,0,0); } } if (commandProcessed==0) { Serial.print("Unknown command: "); Serial.println(inData); } inData=""; Serial.flush(); } else { inData += (c); } } if(ET.receiveData()) { digitalWrite(PIN_LED, HIGH); if (last_packet_id!=(int)mydata.packet_id) { Serial.print("P:"); Serial.print(mydata.packet_id); Serial.print(";F:"); Serial.print(mydata.device_id); Serial.print(";T:"); Serial.print(mydata.destination_id); Serial.print(";C:"); Serial.print(mydata.command); Serial.print(";D:"); Serial.print(mydata.data); Serial.println(";"); last_packet_id=(int)mydata.packet_id; } digitalWrite(PIN_LED, LOW); } if (mySerial.available()) Serial.write(mySerial.read()); }
      
      









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



рд╣реЛрд╕реНрдЯ рдореЙрдбреНрдпреВрд▓ рддреИрдпрд╛рд░ рдХрд░рдирд╛ (рд░рд╛рдЙрдЯрд░)


рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ OpenWRT рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдмрд╛рдж рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд░рд╛рдЙрдЯрд░ рдХреЗ рдлрд░реНрдорд╡реЗрдпрд░ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ - рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╡реЗрдм рдкрд░ рдвреВрдВрдврдирд╛ рдЖрд╕рд╛рди рд╣реИред рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд╛рдиреАрдп рд╡рд╛рдИрдлрд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЛрдб рдореЗрдВ рдПрдХ рд░рд╛рдЙрдЯрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдПрдХ COM рдкреЛрд░реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдиреЗрдХреНрдЯреЗрдб рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рднреА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╣рдЪрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдПред



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



рд╣реЛрд╕реНрдЯ рдореЙрдбреНрдпреВрд▓ рдСрдкрд░реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рдВрджреБрдУрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  1. рдкреНрд░рд╛рд░рдВрднрд┐рдХрдХрд░рдг - рдПрдХ рдмрд╛рд╣рд░реА рд╡реЗрдм рд╕реЗрд╡рд╛ (рдпрджрд┐ рдЙрдкрд▓рдмреНрдз рд╣реЛ) рд╕реЗ рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдмреЙрд▓рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
  2. рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛




рд╕реНрд░реЛрдд рдХреЛрдб рд╕реНрддрд░ рдкрд░, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ (/ect/master/settings.sh)
 MASTER_ID="AAAA-BBBB-CCCC-DDDD" ARDUINO_PORT=/dev/ttyACM0 ARDUINO_PORT_SPEED=9600 UPDATES_URL="http://connect.smartliving.ru/rules/" DATA_PATH="/etc/master/data" WEB_PATH="/www" ONLINE_CHECK_HOST="8.8.8.8" LOCAL_BASE_URL="http://connect.dev"
      
      







рдореБрдЦреНрдп рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ (/etc/master/cycle.sh)
 #!/bin/bash # settings . /etc/master/settings.sh # STEP 0 # wait to be online COUNTER=0 while [ $COUNTER -lt 5 ]; do ping -c 1 $ONLINE_CHECK_HOST if [[ $? = 0 ]]; then echo Network available. break; else echo Network not available. Waiting... sleep 5 fi let COUNTER=COUNTER+1 done #--------------------------------------------------------------------------- # START if [ ! -d "$DATA_PATH" ]; then mkdir $DATA_PATH chmod 0666 $DATA_PATH fi while : do #--------------------------------------------------------------------------- # Downloading the latest rules from the web echo Getting rules from $UPDATES_URL?id=$MASTER_ID wget -O $DATA_PATH/rules_set.tmp $UPDATES_URL?id=$MASTER_ID if grep -Fq "Rules set" $DATA_PATH/rules_set.tmp then mv $DATA_PATH/rules_set.tmp $DATA_PATH/rules_set.sh else echo Incorrect rules file fi #--------------------------------------------------------------------------- # Reading all data and sending to the web ALL_DATA_FILE=$DATA_PATH/all_data.txt rm -f $ALL_DATA_FILE echo -n id=$MASTER_ID>>$ALL_DATA_FILE echo -n "&data=">>$ALL_DATA_FILE FILES=$DATA_PATH/*.dat for f in $FILES do #echo "Processing $f file..." OLD_DATA=`cat $f` fname=${f##*/} PARAM=${fname/.dat/} echo -n "$PARAM|$OLD_DATA;">>$ALL_DATA_FILE done ALL_DATA=`cat $ALL_DATA_FILE` echo Posting: $UPDATES_URL?$ALL_DATA wget -O $DATA_PATH/data_post.tmp $UPDATES_URL?$ALL_DATA rm -f $DATA_PATH/*.dat #--------------------------------------------------------------------------- # Downloading the latest menu from the web echo Getting menu from $UPDATES_URL/menu2.php?download=1\&id=$MASTER_ID wget -O $DATA_PATH/menu.tmp $UPDATES_URL/menu2.php?download=1\&id=$MASTER_ID if grep -Fq "stylesheet" $DATA_PATH/menu.tmp then mv $DATA_PATH/menu.tmp $WEB_PATH/menu.html else echo Incorrect menu file fi #--------------------------------------------------------------------------- START_TIME="$(date +%s)" # main cycle stty -F $ARDUINO_PORT ispeed $ARDUINO_PORT_SPEED ospeed $ARDUINO_PORT_SPEED cs8 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts #--------------------------------------------------------------------------- while read LINE; do echo $LINE PASSED_TIME="$(($(date +%s)-START_TIME))" # Processing incoming URLs from controller REGEX='^GET (.+)$' if [[ $LINE =~ $REGEX ]] then URL=$LOCAL_BASE_URL${BASH_REMATCH[1]} #-URL=$LOCAL_BASE_URL wget -O $DATA_PATH/http.tmp $URL echo Getting URL echo $URL fi PACKET_ID="" DATA_FROM="" DATA_TO="" DATA_COMMAND="" DATA_VALUE="" REGEX='^P:([0-9]+);F:([0-9]+);T:([0-9]+);C:([0-9]+);D:([0-9]+);$' if [[ $LINE =~ $REGEX ]] then PACKET_ID=${BASH_REMATCH[1]} DATA_FROM=${BASH_REMATCH[2]} DATA_TO=${BASH_REMATCH[3]} DATA_COMMAND=${BASH_REMATCH[4]} DATA_VALUE=${BASH_REMATCH[5]} DATA_FILE=$DATA_PATH/$DATA_FROM-$DATA_COMMAND.dat echo -n $DATA_VALUE>$DATA_FILE fi if [ -f $DATA_PATH/incoming_data.txt ]; then echo "New incoming data:"; echo `cat $DATA_PATH/incoming_data.txt` cat $DATA_PATH/incoming_data.txt>$ARDUINO_PORT rm -f $DATA_PATH/incoming_data.txt fi ACTION_RECEIVED="" if [ -f $DATA_PATH/incoming_action.txt ]; then ACTION_RECEIVED=`cat $DATA_PATH/incoming_action.txt` echo "New incoming action: $ACTION_RECEIVED" rm -f $DATA_PATH/incoming_action.txt fi . $DATA_PATH/rules_set.sh if [ -f $DATA_PATH/reboot ]; then echo "REBOOT FLAG" rm -f $DATA_PATH/reboot break; fi done < $ARDUINO_PORT done #--------------------------------------------------------------------------- echo Cycle stopped.
      
      









рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (MASTER_ID) рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдпреА рдХрдиреЗрдХреНрд╢рди рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ)ред



рдореБрдЦреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди, рд▓реЛрдб рдХрд┐рдП рдЧрдП рдирд┐рдпрдо рдХреЛрдб рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ / рдЖрджрд┐ / рдорд╛рд╕реНрдЯрд░ / рдбреЗрдЯрд╛ / рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдирд╡реАрдирддрдо рд╕реЗрдВрд╕рд░ рд░реАрдбрд┐рдВрдЧ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдирд┐рдпрдо рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдХреБрдЫ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдорд░)ред



рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдирд┐рдпрдо рд╡реНрдпрд╡рд╕реНрдерд╛


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



рдирд┐рдпрдо рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рд╢рд░реНрддреЗрдВ:





рд╕рдВрднрд╛рд╡рд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ:



рдирд┐рдпрдо рд╕реНрд░реЛрдд рдХреЛрдб рдЙрджрд╛рд╣рд░рдг
 # RULE 2 Forwarder RCSwitch (regex) MATCHED_RULE2='0' REGEX='^RCSwitch:(.+)$' if [[ $LINE =~ $REGEX ]] then MATCHED_RULE2="1" fi # RULE 2 ACTIONS if [[ "$MATCHED_RULE2" == "1" ]] then #Action 2.1 (http) echo "HTTP request: http://192.168.0.17/objects/?script=RCSwitch&rcswitch=${BASH_REMATCH[1]}" wget -O $DATA_PATH/http.tmp http://192.168.0.17/objects/?script=RCSwitch\&rcswitch=${BASH_REMATCH[1]} fi
      
      







рд╡реЗрдм рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЦрд╛рддреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЕрдм рдкреВрд░реЗ рд╕рд░реНрд╡рд░ рдШрдЯрдХ рдХреЛ connect.smartliving.ru рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдЖрдкрдХреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╡реЗрдм рд╕рд┐рд╕реНрдЯрдо рд╕реНрд╡рдпрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рдпрдореЛрдВ рдХреЛ рдмреИрд╢ рдХрдорд╛рдВрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдХреНрд╖ рдкрд░, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



рдЫрд╡рд┐



рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдПрдкреАрдЖрдИ


рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЙрдкрд░реЛрдХреНрдд рдПрдХ рд╕реНрд╡рд╛рдпрддреНрдд рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрдЪреНрдЫрд╛ рд╕реВрдЪреА рд▓рдВрдмреА рдереА, рдЬреИрд╕рд╛ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдорд╛рд░реНрдЧ рдерд╛ред рдЕрдЧрд▓рд╛ рдХрджрдо рдПрдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдПрдкреАрдЖрдИ рдмрдирд╛рдирд╛ рдерд╛ред рдпрд╣ рдХрджрдо рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣реЛрд╕реНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдИ рдЧрдИ рдФрд░ / www / cgi-bin / рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд░рдЦреА рдЧрдИ



рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрдд рдХреЛрдб / www / cgi-bin / рдорд╛рд╕реНрдЯрд░
 #!/bin/bash DATA_PATH="/etc/master/data" echo "Content-type: text/plain" echo "" # Save the old internal field separator. OIFS="$IFS" # Set the field separator to & and parse the QUERY_STRING at the ampersand. IFS="${IFS}&" set $QUERY_STRING Args="$*" IFS="$OIFS" # Next parse the individual "name=value" tokens. ARG_VALUE="" ARG_VAR="" ARG_OP="" ARG_LINE="" for i in $Args ;do # Set the field separator to = IFS="${OIFS}=" set $i IFS="${OIFS}" case $1 in # Don't allow "/" changed to " ". Prevent hacker problems. var) ARG_VAR="`echo -n $2 | sed 's|[\]||g' | sed 's|%20| |g'`" ;; # value) ARG_VALUE=$2 ;; line) ARG_LINE=$2 ;; op) ARG_OP=$2 ;; *) echo "<hr>Warning:"\ "<br>Unrecognized variable \'$1\' passed.<hr>" ;; esac done # Set value #ARG_OP="set" #echo $ARG_OP if [[ "$ARG_OP" == "set" ]] then # echo "Set operation<br>" echo -n "$ARG_VALUE">$DATA_PATH/$ARG_VAR.dat echo "OK" fi if [[ "$ARG_OP" == "get" ]] then # echo "Get operation<br>" cat $DATA_PATH/$ARG_VAR.dat fi if [[ "$ARG_OP" == "send" ]] then # echo "Send<br>" echo -n $ARG_LINE>>$DATA_PATH/incoming_data.txt echo "OK" fi if [[ "$ARG_OP" == "action" ]] then # echo "Action<br>" echo -n $ARG_LINE>>$DATA_PATH/incoming_action.txt echo "OK" fi if [[ "$ARG_OP" == "refresh" ]] then # echo "Send<br>" echo "Web">$DATA_PATH/reboot echo "OK" fi if [[ "$ARG_OP" == "run" ]] then # echo "Run<br>" echo `$ARG_LINE` fi
      
      









рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдкреАрдЖрдИ рдЖрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ:



рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдорд╛рди рд╕реЗрдЯ рдХрд░рдирд╛

_/cgi-bin/master?op=set&var=Variable1&value=Value1





Variable1 рдХреЗ рдорд╛рди рдХреЛ рдорд╛рди 1 рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ



рдПрдХ рдЪрд░ рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

_/cgi-bin/master?op=get&var=Variable1





Variable1 рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ



рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛

_/cgi-bin/master?op=send&line=SomeData





рдЬреБрдбрд╝реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП SomeData рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреЗрдЬрддрд╛ рд╣реИ



рдХреНрд░рд┐рдпрд╛ рд╕рдХреНрд░рд┐рдпрдг

_/cgi-bin/master?op=action&line=SomeAction





рдирд┐рдпрдореЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд SomeAction рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ (рдкреНрд░рдХрд╛рд░ "рд╕рдХреНрд░рд┐рдп рдХреНрд░рд┐рдпрд╛рдПрдБ")



рдирд┐рдпрдореЛрдВ рдХрд╛ рдмрд▓ рдЕрджреНрдпрддрди

_/cgi-bin/master?op=refresh





рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдирд┐рдпрдореЛрдВ рдФрд░ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдЕрдкрдбреЗрдЯ (рдбрд╛рдЙрдирд▓реЛрдбрд┐рдВрдЧ) рдХреЛ рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ



рд╕рд┐рд╕реНрдЯрдо рдЯреАрдо

_/cgi-bin/master?op=run&line=SomeCommand





рд╕рд┐рд╕реНрдЯрдо рд╢реЗрд▓ рдореЗрдВ SomeCommand рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рд░рд┐рдмреВрдЯ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)



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



рдЫрд╡рд┐



рдкрд╣рд┐рдпрд╛ рдХреЛ рд╕реБрджреГрдврд╝ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд▓реНрдХреЗ рдХреНрд░реИрдХрди рдлреНрд░рдВрдЯреЗрдВрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ / www / рдХреНрд░реИрдХрди-рдорд╛рд╕реНрдЯрд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЧрд┐рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд╛рдж, menu.html рдлрд╝рд╛рдЗрд▓ / www / рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдЖрдк рд╣рдорд╛рд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ _/menu.html



_/menu.html



рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрддрд╛ рд╕рдВрдпреЛрдЧ рд╕реЗ рдирд╣реАрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрдЬрд░рдбреНрд░реЛрдЗрдб рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП) рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡рд┐рд╡рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХрддрд╛ рдФрд░ рд╕рдм рдХреБрдЫ рдФрд░ рд╕рдм рдХреБрдЫ рдХреА рдЕрдиреБрдХреВрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВред



рдСрдирд▓рд╛рдЗрди рдХрд╛рд░реНрдп


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



рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░, рд╕реНрдХреНрд░рд┐рдкреНрдЯ / etc / master / socket_client рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ



рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрдд рдХреЛрдб / рдЖрджрд┐ / рдорд╛рд╕реНрдЯрд░ / рд╕реЙрдХреЗрдЯ_рдХреНрд▓рд┐рдпрд░
 #!/bin/bash # settings . /etc/master/settings.sh # STEP 0 # wait to be online COUNTER=0 while [ $COUNTER -lt 5 ]; do ping -c 1 $ONLINE_CHECK_HOST if [[ $? = 0 ]]; then echo Network available. break; else echo Network not available. Waiting... sleep 5 fi let COUNTER=COUNTER+1 done #--------------------------------------------------------------------------- # START if [ ! -d "$DATA_PATH" ]; then mkdir $DATA_PATH chmod 0666 $DATA_PATH fi while : do TEST_FILE=$DATA_PATH/data_sent.txt touch $TEST_FILE SOCKET_HOST=connect.smartliving.ru SOCKET_PORT=11444 exec 3<>/dev/tcp/$SOCKET_HOST/$SOCKET_PORT NOW=$(date +"%H:%M:%S") echo -n $NOW echo " Sending: Hello!" echo "Hello!">&3 read -t 60 ok <&3 NOW=$(date +"%H:%M:%S") echo -n $NOW echo -n " Received: " echo "$ok"; REGEX='^Please' if [[ ! $ok =~ $REGEX ]] then NOW=$(date +"%H:%M:%S") echo -n $NOW echo " Connection failed!" continue fi NOW=$(date +"%H:%M:%S") echo -n $NOW echo " Sending: auth:$MASTER_ID" echo "auth:$MASTER_ID">&3 read -t 60 ok <&3 NOW=$(date +"%H:%M:%S") echo -n $NOW echo -n " Received: " echo "$ok"; REGEX='^Authorized' if [[ ! $ok =~ $REGEX ]] then NOW=$(date +"%H:%M:%S") echo -n $NOW echo " Authorization failed!" exit 0 fi NOW=$(date +"%H:%M:%S") echo -n $NOW echo " Sending: Hello again!" echo "Hello again!">&3 read -t 60 ok <&3 NOW=$(date +"%H:%M:%S") echo -n $NOW echo -n " Received: " echo "$ok"; while read -t 120 LINE; do NOW=$(date +"%H:%M:%S") echo -n $NOW echo -n " Got line: " echo $LINE # Ping reply REGEX='^PING' if [[ $LINE =~ $REGEX ]] then echo -n $NOW echo " Sending: PONG!" echo PONG!>&3 fi # Run action REGEX='^ACTION:(.+)$' if [[ $LINE =~ $REGEX ]] then DATA_RECEIVED=${BASH_REMATCH[1]} NOW=$(date +"%H:%M:%S") echo -n $NOW echo -n " Action received: " echo $DATA_RECEIVED echo -n $DATA_RECEIVED>>$DATA_PATH/incoming_action.txt fi # Pass data REGEX='^DATA:(.+)$' if [[ $LINE =~ $REGEX ]] then DATA_RECEIVED=${BASH_REMATCH[1]} echo -n $NOW echo -n " Data received: " echo $DATA_RECEIVED echo -n $DATA_RECEIVED>>$DATA_PATH/incoming_data.txt fi # Pass data REGEX='^URL:(.+)$' if [[ $LINE =~ $REGEX ]] then DATA_RECEIVED=${BASH_REMATCH[1]} echo -n $NOW echo -n " URL received: " echo wget -O $DATA_PATH/data_post.tmp http://localhost$DATA_RECEIVED fi # Check files modified FILES=$DATA_PATH/*.dat for f in $FILES do if [ $f -nt $TEST_FILE ]; then echo "Processing $f ..." FNAME=${f##*/} PARAM=${FNAME/.dat/} CONTENT=`cat $f` echo -n $NOW echo " Sending: DATA:$PARAM|$CONTENT;" echo "data:$PARAM|$CONTENT;">&3 fi done touch $TEST_FILE done <&3 done #--------------------------------------------------------------------------- echo Cycle stopped.
      
      









рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдФрд░ рдПрдХ QR рдХреЛрдб рдЙрд╕рдХреЗ рдЦрд╛рддреЗ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред рдиреАрдЪреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛:



рдЫрд╡рд┐



рднрд╡рд┐рд╖реНрдп рдХреА рдЪреБрдиреМрддрд┐рдпрд╛рдВ


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







рдирд┐рд╖реНрдХрд░реНрд╖


рд╕рднреА рдЯреНрдпреВрдирд┐рдВрдЧ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдЪреАрдЬреЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рдСрдЯреЛрд░реБрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдореИрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛, рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рд╕рд╛рд░ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред



рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдЙрдкрдХрд░рдг рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдШрдЯрдХреЛрдВ рдФрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдпреЛрдЧ рдерд╛ред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╡рд┐рдЪрд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реБрдП рдФрд░ рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕рдиреНрдирд┐рд╣рд┐рдд рд╣реБрдП, рдФрд░ рдХреБрдЫ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рд╕реЗ рдЪрд▓реЗ рдЧрдП, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рд╕рдордп рдХреБрдЫ рднреА рдирд╣реАрдВ рдерд╛ред рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдиреБрднрд╡ рдЙрдкрдпреЛрдЧреА рд╣реИред



рдпрджрд┐ рд╣рдо рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрдо рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐, рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:







рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╣реА рдЖрдзрд╛рд░ рд╣реЛрдиреЗ рд╕реЗ, рдЖрдк рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди "рдЗрдВрдЯрд░рдиреЗрдЯ рдЪреАрдЬреЛрдВ" рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдХреЗ рдХрдИ "рдмреЙрдХреНрд╕рд┐рдВрдЧ" рд╕рдорд╛рдзрд╛рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред



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



рдЫрд╡рд┐



рдкреАрдкреАрдПрд╕ I рд▓рдЧрднрдЧ рднреВрд▓ рдЧрдпрд╛, рд╕рднреА рд╕реВрдЪреАрдмрджреНрдз рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рдЙрдкрдХрд░рдг рдХреА рд▓рд╛рдЧрдд $ 60 рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЖрддреА рд╣реИ, рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдордп рдЕрдореВрд▓реНрдп рд╣реИред



All Articles