{"id":193606,"date":"2013-09-13T11:22:03","date_gmt":"2013-09-13T07:22:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=193606"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=193606","title":{"rendered":"<span class=\"post_title\">\u00abAchtung!\u00bb \u0438\u043b\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/span>"},"content":{"rendered":"<div class=\"content html_format\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/510\/fb8\/1a5\/510fb81a527823c528848bacadcd2edb.jpg\" \/><\/div>\n<p>  \u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u0435\u0441\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430 \u043c\u044b (\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u00ab\u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c Mail.ru\u00bb) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Jenkins CI. \u0417\u0430\u043f\u0443\u0441\u043a \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0443\u0448\u0430 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 git (\u043f\u043e \u0445\u0443\u043a\u0443) \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u0441\u0431\u043e\u0440\u043a\u0430\u0445. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043f\u043e email \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0433\u043e \u0438 \u0432\u0435\u0441\u0451\u043b\u043e\u0433\u043e.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0413\u043e\u0434\u0430 \u0442\u0440\u0438 \u0438\u043b\u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u043d\u0430\u0437\u0430\u0434, \u043a\u043e\u0433\u0434\u0430 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430\u0434 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c, \u0434\u043b\u044f \u0441\u0445\u043e\u0436\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0431\u044b\u043b\u0430 \u043a\u0443\u043f\u043b\u0435\u043d\u0430 \u043c\u0438\u0433\u0430\u043b\u043a\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u043e\u0442 \u0441\u0435\u0442\u0438 220 \u0432\u043e\u043b\u044c\u0442, \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0435\u044e \u0431\u044b\u043b \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0451\u043d \u043c\u043e\u0434\u0443\u043b\u044c MP709 (USB-\u0440\u0435\u043b\u0435) \u043d\u0435\u0431\u0435\u0437\u044b\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0444\u0438\u0440\u043c\u044b MasterKit. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u043c: \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 Linux \u0443 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435 \u0431\u044b\u043b\u043e (\u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0435\u0432\u0435\u0440\u0441\u0438\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u00ab\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u00bb \u043f\u043e\u0434 Linux), \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0438\u0433\u0430\u043b\u043a\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u0430, \u0442\u044f\u043d\u0443\u0449\u0438\u0439\u0441\u044f \u043e\u0442 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0438 \u043e\u0442 \u0440\u043e\u0437\u0435\u0442\u043a\u0438. \u0422\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u0437\u0430\u0431\u0440\u043e\u0448\u0435\u043d\u0430 \u0432 \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u044f\u0449\u0438\u043a \u0438 \u0436\u0434\u0430\u043b\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u0447\u0430\u0441\u0430.<br \/>  \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u0437\u0430\u0447\u0435\u0441\u0430\u043b\u0438\u0441\u044c \u0440\u0443\u043a\u0438, \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435, \u043d\u043e \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, \u0438 \u044f \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b \u043f\u0440\u043e \u043c\u0438\u0433\u0430\u043b\u043a\u0443. \u041f\u043e\u043a\u043e\u043f\u0430\u0432\u0448\u0438\u0441\u044c \u0432 \u043a\u0443\u0447\u0435 \u0445\u043b\u0430\u043c\u0430 \u044f \u0432\u044b\u0443\u0434\u0438\u043b \u043e\u0442\u0442\u0443\u0434\u0430: Arduino Nano \u2014 \u0434\u0432\u0435 \u0448\u0442\u0443\u043a\u0438, \u043c\u043e\u0434\u0443\u043b\u044c \u0440\u0435\u043b\u0435 \u2014 \u043e\u0434\u043d\u0430 \u0448\u0442\u0443\u043a\u0430, \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a MX-05V \u2014 \u043e\u0434\u043d\u0430 \u0448\u0442\u0443\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a MX-FS-03V \u2014 \u043e\u0434\u043d\u0430 \u0448\u0442\u0443\u043a\u0430. \u0417\u0430\u0441\u0443\u043d\u0443\u0432 \u0432\u0435\u0441\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0445\u043b\u0430\u043c \u0432 \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0443\u0433\u043e\u043b \u043d\u0430 \u0431\u0430\u043b\u043a\u043e\u043d\u0435, \u0434\u043e\u0436\u0438\u0434\u0430\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0447\u0430\u0441\u0430, \u044f \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043b \u043a \u0441\u0431\u043e\u0440\u043a\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<br \/>  <i>\u041b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/i>: \u043a\u043e\u0433\u0434\u0430-\u0442\u043e, \u0434\u0430\u0432\u043d\u044b\u043c-\u0434\u0430\u0432\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u044f \u0431\u044b\u043b \u043c\u043e\u043b\u043e\u0434\u043e\u0439 \u0438 \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u044f \u0431\u044b \u0432\u0437\u044f\u043b \u043f\u0430\u0440\u0443 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 AVR, \u0432\u044b\u0442\u0440\u0430\u0432\u0438\u043b \u0431\u044b \u043f\u043b\u0430\u0442\u0443, \u0441\u043f\u0430\u044f\u043b \u0431\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043b \u0431\u044b \u0435\u0433\u043e \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430\u2026 \u0418 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0431\u044b \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435. \u0423\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u044f \u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0431\u043e\u043b\u044c\u0448\u0435, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 \u0442\u043e\u0442 \u0436\u0435.  <\/p>\n<h3>Hardware<\/h3>\n<p>  \u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0431\u043b\u0430\u0433\u043e \u0432 \u043d\u0430\u0448\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043b\u044e\u0431\u043e\u043c\u0443 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443, \u043d\u0435 \u0431\u0440\u0430\u0432\u0448\u0435\u043c\u0443 \u043d\u0438 \u0440\u0430\u0437\u0443 \u043f\u0430\u044f\u043b\u044c\u043d\u0438\u043a \u0432 \u0440\u0443\u043a\u0438 \u0438 \u043d\u0435 \u0438\u0437\u0443\u0447\u0430\u0432\u0448\u0435\u043c\u0443 \u0441\u0445\u0435\u043c\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.\u041f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a (Arduino Nano + MX-FS-03V)  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/e66\/3d3\/371\/e663d3371d5b5268d2cce07006f7f10c.jpg\" \/><\/div>\n<p>  \u041f\u0440\u0438\u0451\u043c\u043d\u0438\u043a (MX-05V + Arduino Nano + \u043c\u043e\u0434\u0443\u043b\u044c \u0440\u0435\u043b\u0435):  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/6d0\/091\/851\/6d009185139b456506e8336802098d09.jpg\" \/><\/div>\n<p>  \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0435\u0449\u0451 \u043f\u0440\u043e\u0449\u0435: Arduino \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u043f\u043e\u0440\u0442\u0443 USB \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0438 \u0441\u043b\u0443\u0448\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u0430, \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0434\u0438\u043e\u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0431\u043b\u043e\u043a\u0435 \u0434\u0440\u0443\u0433\u0430\u044f Arduino \u0441\u043b\u0443\u0448\u0430\u0435\u0442 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a \u0438 \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043b\u0438\u0431\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442, \u043b\u0438\u0431\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0435\u043b\u0435. \u0412\u0441\u0451. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a (\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0443\u043c\u043c), \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438.<br \/>  \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<blockquote><p><font color=\"#339900\">#include&nbsp;&lt;VirtualWire.h&gt;<\/font><br \/>  &nbsp;<br \/>  <font color=\"#0000ff\">int<\/font>&nbsp;ledPin&nbsp;<font color=\"#000080\">=<\/font>&nbsp;<font color=\"#0000dd\">13<\/font><font color=\"#008080\">;<\/font>&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;pin&nbsp;with&nbsp;led&nbsp;on&nbsp;it<\/font><br \/>  &nbsp;<br \/>  <font color=\"#0000ff\">char<\/font>&nbsp;incoming_byte<font color=\"#008080\">;<\/font>&nbsp;&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;a&nbsp;buffer&nbsp;to&nbsp;store&nbsp;the&nbsp;incoming&nbsp;messages<\/font><br \/>  <font color=\"#0000ff\">char<\/font>&nbsp;input_data<font color=\"#008000\">[<\/font><font color=\"#0000dd\">12<\/font><font color=\"#008000\">]<\/font><font color=\"#008080\">;<\/font>&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;the&nbsp;size&nbsp;of&nbsp;the&nbsp;message<\/font><br \/>  <font color=\"#0000ff\">int<\/font>&nbsp;input_size&nbsp;<font color=\"#000080\">=<\/font>&nbsp;<font color=\"#0000dd\">0<\/font><font color=\"#008080\">;<\/font>&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;counter,&nbsp;just&nbsp;counter<\/font><br \/>  &nbsp;<br \/>  <font color=\"#0000ff\">void<\/font>&nbsp;setup<font color=\"#008000\">(<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#008000\">{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;setup&nbsp;led&nbsp;pin<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;pinMode<font color=\"#008000\">(<\/font>ledPin,&nbsp;OUTPUT<font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;digitalWrite<font color=\"#008000\">(<\/font>ledPin,&nbsp;LOW<font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;initialize&nbsp;serial&nbsp;(9600&nbsp;bps)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;Serial.<font color=\"#007788\">begin<\/font><font color=\"#008000\">(<\/font><font color=\"#0000dd\">9600<\/font><font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;Serial.<font color=\"#007788\">println<\/font><font color=\"#008000\">(<\/font><font color=\"#FF0000\">&quot;Ready&nbsp;for&nbsp;achtung&quot;<\/font><font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;initialize&nbsp;the&nbsp;IO&nbsp;and&nbsp;ISR<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;vw_set_ptt_inverted<font color=\"#008000\">(<\/font><font color=\"#0000ff\">true<\/font><font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font>&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;required&nbsp;for&nbsp;DR3100<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;vw_setup<font color=\"#008000\">(<\/font><font color=\"#0000dd\">1200<\/font><font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font>&nbsp;<font color=\"#666666\">\/\/&nbsp;bits&nbsp;per&nbsp;sec<\/font><br \/>  <font color=\"#008000\">}<\/font><br \/>  &nbsp;<br \/>  <font color=\"#0000ff\">void<\/font>&nbsp;loop<font color=\"#008000\">(<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#008000\">{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#0000ff\">while<\/font>&nbsp;<font color=\"#008000\">(<\/font>Serial.<font color=\"#007788\">available<\/font><font color=\"#008000\">(<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#000080\">&gt;<\/font>&nbsp;<font color=\"#0000dd\">0<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#008000\">{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;incoming_byte&nbsp;<font color=\"#000080\">=<\/font>&nbsp;Serial.<font color=\"#007788\">read<\/font><font color=\"#008000\">(<\/font><font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font>&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;read&nbsp;the&nbsp;incoming&nbsp;byte<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#0000ff\">if<\/font>&nbsp;<font color=\"#008000\">(<\/font>incoming_byte&nbsp;<font color=\"#000080\">==<\/font>&nbsp;<font color=\"#FF0000\">&#8216;n&#8217;<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#008000\">{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input_data<font color=\"#008000\">[<\/font>input_size<font color=\"#000040\">++<\/font><font color=\"#008000\">]<\/font>&nbsp;<font color=\"#000080\">=<\/font>&nbsp;<font color=\"#0000dd\">0<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#0000ff\">if<\/font>&nbsp;<font color=\"#008000\">(<\/font><font color=\"#0000dd\">strncmp<\/font><font color=\"#008000\">(<\/font>input_data,&nbsp;<font color=\"#FF0000\">&quot;Achtung&nbsp;ON&quot;<\/font>,&nbsp;<font color=\"#0000dd\">10<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#000080\">==<\/font>&nbsp;<font color=\"#0000dd\">0<\/font>&nbsp;<font color=\"#000040\">||<\/font>&nbsp;<font color=\"#0000dd\">strncmp<\/font><font color=\"#008000\">(<\/font>input_data,&nbsp;<font color=\"#FF0000\">&quot;Achtung&nbsp;OFF&quot;<\/font>,&nbsp;<font color=\"#0000dd\">11<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#000080\">==<\/font>&nbsp;<font color=\"#0000dd\">0<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#008000\">{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite<font color=\"#008000\">(<\/font>ledPin,&nbsp;HIGH<font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vw_send<font color=\"#008000\">(<\/font><font color=\"#008000\">(<\/font>uint8_t&nbsp;<font color=\"#000040\">*<\/font><font color=\"#008000\">)<\/font>input_data,&nbsp;input_size<font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vw_wait_tx<font color=\"#008000\">(<\/font><font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font>&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;wait&nbsp;until&nbsp;the&nbsp;whole&nbsp;message&nbsp;is&nbsp;gone<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite<font color=\"#008000\">(<\/font>ledPin,&nbsp;LOW<font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Serial.<font color=\"#007788\">println<\/font><font color=\"#008000\">(<\/font><font color=\"#FF0000\">&quot;OK&quot;<\/font><font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008000\">}<\/font>&nbsp;<font color=\"#0000ff\">else<\/font>&nbsp;<font color=\"#008000\">{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Serial.<font color=\"#007788\">println<\/font><font color=\"#008000\">(<\/font><font color=\"#FF0000\">&quot;FAIL&quot;<\/font><font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008000\">}<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#0000ff\">while<\/font>&nbsp;<font color=\"#008000\">(<\/font>input_size<font color=\"#000040\">&#8212;<\/font>&nbsp;<font color=\"#000080\">&gt;=<\/font>&nbsp;<font color=\"#0000dd\">0<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#008000\">{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input_data<font color=\"#008000\">[<\/font>input_size<font color=\"#008000\">]<\/font>&nbsp;<font color=\"#000080\">=<\/font>&nbsp;<font color=\"#0000dd\">0<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008000\">}<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input_size&nbsp;<font color=\"#000080\">=<\/font>&nbsp;<font color=\"#0000dd\">0<\/font><font color=\"#008080\">;<\/font>&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;reset&nbsp;counter<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008000\">}<\/font>&nbsp;<font color=\"#0000ff\">else<\/font>&nbsp;<font color=\"#008000\">{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#0000ff\">if<\/font>&nbsp;<font color=\"#008000\">(<\/font>input_size&nbsp;<font color=\"#000080\">&lt;=<\/font>&nbsp;<font color=\"#0000dd\">11<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#008000\">{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input_data<font color=\"#008000\">[<\/font>input_size<font color=\"#008000\">]<\/font>&nbsp;<font color=\"#000080\">=<\/font>&nbsp;incoming_byte<font color=\"#008080\">;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008000\">}<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input_size<font color=\"#000040\">++<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008000\">}<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008000\">}<\/font><br \/>  <font color=\"#008000\">}<\/font><\/p><\/blockquote>\n<p>  \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u0430:  <\/p>\n<blockquote><p><font color=\"#339900\">#include&nbsp;&lt;VirtualWire.h&gt;<\/font><br \/>  &nbsp;<br \/>  <font color=\"#0000ff\">int<\/font>&nbsp;ledPin&nbsp;<font color=\"#000080\">=<\/font>&nbsp;<font color=\"#0000dd\">13<\/font><font color=\"#008080\">;<\/font>&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;pin&nbsp;with&nbsp;led&nbsp;on&nbsp;it<\/font><br \/>  <font color=\"#0000ff\">int<\/font>&nbsp;relayPin&nbsp;<font color=\"#000080\">=<\/font>&nbsp;<font color=\"#0000dd\">3<\/font><font color=\"#008080\">;<\/font>&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;pin&nbsp;with&nbsp;relay&nbsp;on&nbsp;it<\/font><br \/>  &nbsp;<br \/>  byte&nbsp;input_data<font color=\"#008000\">[<\/font>VW_MAX_MESSAGE_LEN<font color=\"#008000\">]<\/font><font color=\"#008080\">;<\/font>&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;a&nbsp;buffer&nbsp;to&nbsp;store&nbsp;the&nbsp;incoming&nbsp;messages<\/font><br \/>  byte&nbsp;input_size&nbsp;<font color=\"#000080\">=<\/font>&nbsp;VW_MAX_MESSAGE_LEN<font color=\"#008080\">;<\/font>&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;the&nbsp;size&nbsp;of&nbsp;the&nbsp;message<\/font><br \/>  &nbsp;<br \/>  <font color=\"#0000ff\">void<\/font>&nbsp;setup<font color=\"#008000\">(<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#008000\">{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;setup&nbsp;led&nbsp;pin<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;pinMode<font color=\"#008000\">(<\/font>ledPin,&nbsp;OUTPUT<font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;digitalWrite<font color=\"#008000\">(<\/font>ledPin,&nbsp;LOW<font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;setup&nbsp;relay&nbsp;pin<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;pinMode<font color=\"#008000\">(<\/font>relayPin,&nbsp;OUTPUT<font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;digitalWrite<font color=\"#008000\">(<\/font>relayPin,&nbsp;HIGH<font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;initialize&nbsp;the&nbsp;IO&nbsp;and&nbsp;ISR<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;vw_set_ptt_inverted<font color=\"#008000\">(<\/font><font color=\"#0000ff\">true<\/font><font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font>&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;required&nbsp;for&nbsp;DR3100<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;vw_setup<font color=\"#008000\">(<\/font><font color=\"#0000dd\">1200<\/font><font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font>&nbsp;<font color=\"#666666\">\/\/&nbsp;bits&nbsp;per&nbsp;sec<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;vw_rx_start<font color=\"#008000\">(<\/font><font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font>&nbsp;<font color=\"#666666\">\/\/&nbsp;start&nbsp;the&nbsp;receiver<\/font><br \/>  <font color=\"#008000\">}<\/font><br \/>  &nbsp;<br \/>  <font color=\"#0000ff\">void<\/font>&nbsp;loop<font color=\"#008000\">(<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#008000\">{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;check&nbsp;if&nbsp;we&nbsp;have&nbsp;some&nbsp;data&nbsp;to&nbsp;process<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#0000ff\">if<\/font>&nbsp;<font color=\"#008000\">(<\/font>vw_get_message<font color=\"#008000\">(<\/font>input_data,&nbsp;<font color=\"#000040\">&amp;<\/font>input_size<font color=\"#008000\">)<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#008000\">{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite<font color=\"#008000\">(<\/font>ledPin,&nbsp;HIGH<font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#0000ff\">if<\/font>&nbsp;<font color=\"#008000\">(<\/font><font color=\"#0000dd\">strncmp<\/font><font color=\"#008000\">(<\/font><font color=\"#008000\">(<\/font><font color=\"#0000ff\">char<\/font><font color=\"#000040\">*<\/font><font color=\"#008000\">)<\/font>&nbsp;input_data,&nbsp;<font color=\"#FF0000\">&quot;Achtung&nbsp;ON&quot;<\/font>,&nbsp;<font color=\"#0000dd\">10<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#000080\">==<\/font>&nbsp;<font color=\"#0000dd\">0<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#008000\">{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite<font color=\"#008000\">(<\/font>relayPin,&nbsp;LOW<font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font>&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;achtung!&nbsp;turn&nbsp;relay&nbsp;on<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008000\">}<\/font>&nbsp;<font color=\"#0000ff\">else<\/font>&nbsp;<font color=\"#0000ff\">if<\/font>&nbsp;<font color=\"#008000\">(<\/font><font color=\"#0000dd\">strncmp<\/font><font color=\"#008000\">(<\/font><font color=\"#008000\">(<\/font><font color=\"#0000ff\">char<\/font><font color=\"#000040\">*<\/font><font color=\"#008000\">)<\/font>&nbsp;input_data,&nbsp;<font color=\"#FF0000\">&quot;Achtung&nbsp;OFF&quot;<\/font>,&nbsp;<font color=\"#0000dd\">11<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#000080\">==<\/font>&nbsp;<font color=\"#0000dd\">0<\/font><font color=\"#008000\">)<\/font>&nbsp;<font color=\"#008000\">{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite<font color=\"#008000\">(<\/font>relayPin,&nbsp;HIGH<font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font>&nbsp;&nbsp;<font color=\"#666666\">\/\/&nbsp;turn&nbsp;relay&nbsp;off<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008000\">}<\/font>&nbsp;<font color=\"#0000ff\">else<\/font>&nbsp;<font color=\"#008000\">{<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay<font color=\"#008000\">(<\/font><font color=\"#0000dd\">1000<\/font><font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008000\">}<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digitalWrite<font color=\"#008000\">(<\/font>ledPin,&nbsp;LOW<font color=\"#008000\">)<\/font><font color=\"#008080\">;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#008000\">}<\/font><br \/>  <font color=\"#008000\">}<\/font><\/p><\/blockquote>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0432\u0441\u0451 \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b, \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 Arduino \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u00abSerial Monitor\u00bb, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0439 \u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u0443, \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\/\u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u043b\u0435, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b (\u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438):  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/04e\/dab\/ce3\/04edabce337c4dc32eeb21e59069c135.png\" \/><\/div>\n<p>  \u0420\u0435\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f-\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f, \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e.<br \/>  \u0421\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043c\u0438\u0433\u0430\u043b\u043a\u0443 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0443\u0434\u0430 \u043c\u044b \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a \u0438 \u0440\u0435\u043b\u0435:  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/bf4\/955\/d89\/bf4955d89becae57efcb879235505fd7.jpg\" \/><\/div>\n<p>  \u041c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430. \u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u0441\u0431\u043e\u0440\u043a\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u0438\u0442\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u0430.<br \/>  \u042f \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b \u043f\u0440\u043e\u0441\u0442\u043e: \u0432\u0437\u044f\u043b \u0441\u0442\u0430\u0440\u044b\u0439, \u0441\u0442\u0430\u0432\u0448\u0438\u0439 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u043c, \u0431\u043b\u043e\u043a \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043e\u0442 \u0441\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 Nokia, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b \u0435\u0433\u043e \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u043b\u0430\u0442\u0443, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0443\u044e \u043f\u0438\u0442\u0430\u0442\u044c \u043d\u0430\u0448 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a \u043e\u0442 220 \u0432\u043e\u043b\u044c\u0442. \u0412\u044b\u043d\u0443\u0436\u0434\u0435\u043d \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u044b \u0438\u0437 \u043a\u043e\u0440\u043f\u0443\u0441\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439. \u041a\u043e\u0440\u043f\u0443\u0441 \u0441\u0434\u0435\u043b\u0430\u043d \u0438\u0437 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0441\u0442\u043c\u0430\u0441\u0441\u044b. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043c\u043d\u0435 \u044d\u0442\u043e \u0443\u0434\u0430\u043b\u043e\u0441\u044c:  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/fe8\/1a9\/9fb\/fe81a99fb74bc40a9f70c3734fc3e04e.jpg\" \/><\/div>\n<p>  \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043c\u0438\u0433\u0430\u043b\u043a\u0443 \u0441 \u043d\u0430\u0448\u0438\u043c \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u043e\u043c \u0438 \u0431\u043b\u043e\u043a\u043e\u043c \u043f\u0438\u0442\u0430\u043d\u0438\u044f:  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/242\/db9\/91b\/242db991b12c45d81c0d80b8c58be2f8.jpg\" \/><\/div>\n<p>  \u0423\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u0440\u0438\u0431\u043e\u0440 \u0432 \u0441\u0435\u0442\u044c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u00abSerial Monitor\u00bb \u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u00abAchtung ON\u00bb. \u0420\u0435\u043b\u0435 \u0449\u0451\u043b\u043a\u043d\u0443\u043b\u043e, \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0430 \u0437\u0430\u0433\u043e\u0440\u0435\u043b\u0430\u0441\u044c, \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u043a\u0440\u0443\u0442\u0438\u043b\u0441\u044f, \u0443\u0440\u0430! \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u00abAchtung OFF\u00bb \u2014 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u043e\u0441\u044c. \u041c\u0438\u0433\u0430\u043b\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u043f\u043b\u0430\u0442\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0438\u043d\u0442\u043e\u0432 \u0438 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u043e\u043a\u043b\u0435\u044f \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0432 \u043f\u0435\u0440\u0432\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435.<br \/>  \u0421 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0435 \u0446\u0435\u0440\u0435\u043c\u043e\u043d\u0438\u0442\u044c\u0441\u044f \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043f\u0430\u044f\u043b \u0432\u0441\u0451 \u0432\u043c\u0435\u0441\u0442\u0435:  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/6d2\/a37\/cc1\/6d2a37cc17088bf3365d784966f87daa.jpg\" \/><\/div>\n<p>  \u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0432 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439 \u043a\u043e\u0440\u043f\u0443\u0441.  <\/p>\n<h3>Software<\/h3>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a \u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442:  <\/p>\n<blockquote><p><font color=\"#808080\">#!\/usr\/bin\/env&nbsp;python<\/font><br \/>  <font color=\"#483d8b\">&quot;&quot;&quot;<br \/>  Send&nbsp;&#8216;ON&#8217;&nbsp;or&nbsp;&#8216;OFF&#8217;&nbsp;command&nbsp;to&nbsp;achtung&nbsp;transmitter.<br \/>  &quot;&quot;&quot;<\/font><br \/>  <font color=\"#ff7700\">from<\/font>&nbsp;<font color=\"#dc143c\">__future__<\/font>&nbsp;<font color=\"#ff7700\">import<\/font>&nbsp;print_function<br \/>  <font color=\"#ff7700\">import<\/font>&nbsp;<font color=\"#dc143c\">os<\/font><br \/>  <font color=\"#ff7700\">import<\/font>&nbsp;<font color=\"#dc143c\">sys<\/font><br \/>  <font color=\"#ff7700\">import<\/font>&nbsp;serial<br \/>  &nbsp;<br \/>  &nbsp;<br \/>  <font color=\"#ff7700\">if<\/font>&nbsp;__name__&nbsp;==&nbsp;<font color=\"#483d8b\">&#8216;__main__&#8217;<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">if<\/font>&nbsp;<font color=\"#008000\">len<\/font><font>(<\/font><font color=\"#dc143c\">sys<\/font>.<font>argv<\/font><font>)<\/font>&nbsp;<font color=\"#66cc66\">!<\/font>=&nbsp;<font color=\"#ff4500\">3<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">print<\/font><font>(<\/font><font color=\"#483d8b\">&quot;Usage:&nbsp;achtung&nbsp;\/dev\/ttyXX&nbsp;&lt;ON|OFF&gt;&quot;<\/font><font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#dc143c\">sys<\/font>.<font>exit<\/font><font>(<\/font><font color=\"#ff4500\">1<\/font><font>)<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#dc143c\">tty<\/font>&nbsp;=&nbsp;<font color=\"#dc143c\">sys<\/font>.<font>argv<\/font><font>[<\/font><font color=\"#ff4500\">1<\/font><font>]<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">if<\/font>&nbsp;<font color=\"#ff7700\">not<\/font>&nbsp;<font color=\"#dc143c\">os<\/font>.<font>path<\/font>.<font>exists<\/font><font>(<\/font><font color=\"#dc143c\">tty<\/font><font>)<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">print<\/font><font>(<\/font><font color=\"#483d8b\">&quot;ERROR:&nbsp;device&nbsp;&#8216;%s&#8217;&nbsp;is&nbsp;not&nbsp;exists&quot;<\/font>&nbsp;<font color=\"#66cc66\">%<\/font>&nbsp;<font color=\"#dc143c\">tty<\/font><font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#dc143c\">sys<\/font>.<font>exit<\/font><font>(<\/font><font color=\"#ff4500\">1<\/font><font>)<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;command&nbsp;=&nbsp;<font color=\"#dc143c\">sys<\/font>.<font>argv<\/font><font>[<\/font><font color=\"#ff4500\">2<\/font><font>]<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">if<\/font>&nbsp;command&nbsp;<font color=\"#ff7700\">not<\/font>&nbsp;<font color=\"#ff7700\">in<\/font>&nbsp;<font>(<\/font><font color=\"#483d8b\">&#8216;ON&#8217;<\/font>,&nbsp;<font color=\"#483d8b\">&#8216;OFF&#8217;<\/font><font>)<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">print<\/font><font>(<\/font><font color=\"#483d8b\">&quot;ERROR:&nbsp;unknown&nbsp;command&nbsp;&#8216;%s&#8217;&quot;<\/font>&nbsp;<font color=\"#66cc66\">%<\/font>&nbsp;command<font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#dc143c\">sys<\/font>.<font>exit<\/font><font>(<\/font><font color=\"#ff4500\">1<\/font><font>)<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;transmitter&nbsp;=&nbsp;serial.<font>Serial<\/font><font>(<\/font><font color=\"#dc143c\">tty<\/font>,&nbsp;<font color=\"#ff4500\">9600<\/font><font>)<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">if<\/font>&nbsp;transmitter.<font color=\"#dc143c\">readline<\/font><font>(<\/font><font>)<\/font>.<font>strip<\/font><font>(<\/font><font>)<\/font>&nbsp;<font color=\"#66cc66\">!<\/font>=&nbsp;<font color=\"#483d8b\">&#8216;Ready&nbsp;for&nbsp;achtung&#8217;<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">print<\/font><font>(<\/font><font color=\"#483d8b\">&quot;ERROR:&nbsp;device&nbsp;is&nbsp;not&nbsp;initialized&quot;<\/font><font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#dc143c\">sys<\/font>.<font>exit<\/font><font>(<\/font><font color=\"#ff4500\">1<\/font><font>)<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;transmitter.<font>write<\/font><font>(<\/font><font color=\"#483d8b\">&quot;Achtung&nbsp;%sn&quot;<\/font>&nbsp;<font color=\"#66cc66\">%<\/font>&nbsp;command<font>)<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;transmitter.<font color=\"#dc143c\">readline<\/font><font>(<\/font><font>)<\/font>.<font>strip<\/font><font>(<\/font><font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">if<\/font>&nbsp;result&nbsp;<font color=\"#66cc66\">!<\/font>=&nbsp;<font color=\"#483d8b\">&#8216;OK&#8217;<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">print<\/font><font>(<\/font><font color=\"#483d8b\">&quot;ERROR:&nbsp;device&nbsp;response&nbsp;is&nbsp;not&nbsp;OK&quot;<\/font><font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#dc143c\">sys<\/font>.<font>exit<\/font><font>(<\/font><font color=\"#ff4500\">1<\/font><font>)<\/font><\/p><\/blockquote>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u0438\u043f\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u2014 \u043c\u043e\u0434\u0443\u043b\u044c <a href=\"http:\/\/pyserial.sourceforge.net\/\">pyserial<\/a>:<\/p>\n<pre>    pip install pyserial<\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0435\u043c\u0441\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0435\u0439\u0441\u044f\/\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u043c\u0438\u0433\u0430\u043b\u043a\u043e\u0439:<\/p>\n<pre>    python achtung.py \/dev\/tty.usbserial-A900FYDU ON     python achtung.py \/dev\/tty.usbserial-A900FYDU OFF<\/pre>\n<p>  \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0441\u0431\u043e\u0440\u043e\u043a \u0432 Jenkins CI \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u043c <a href=\"https:\/\/github.com\/salimfadhley\/jenkinsapi\">jenkinsapi<\/a>, \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u044b\u043c. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438:<\/p>\n<pre>    pip install jenkinsapi<\/pre>\n<p>\u0421\u0430\u043c \u0441\u043a\u0440\u0438\u043f\u0442:  <\/p>\n<blockquote><p><font color=\"#808080\">#!\/usr\/bin\/env&nbsp;python<\/font><br \/>  <font color=\"#483d8b\">&quot;&quot;&quot;<br \/>  Check&nbsp;for&nbsp;Jenkins&nbsp;jobs&nbsp;status&nbsp;and&nbsp;run&nbsp;alarm&nbsp;if&nbsp;job&nbsp;is&nbsp;not&nbsp;OK.<br \/>  &quot;&quot;&quot;<\/font><br \/>  <font color=\"#ff7700\">import<\/font>&nbsp;<font color=\"#dc143c\">os<\/font><br \/>  <font color=\"#ff7700\">import<\/font>&nbsp;<font color=\"#dc143c\">sys<\/font><br \/>  <font color=\"#ff7700\">import<\/font>&nbsp;<font color=\"#dc143c\">time<\/font><br \/>  &nbsp;<br \/>  <font color=\"#ff7700\">import<\/font>&nbsp;serial<br \/>  <font color=\"#ff7700\">from<\/font>&nbsp;jenkinsapi.<font>jenkins<\/font>&nbsp;<font color=\"#ff7700\">import<\/font>&nbsp;Jenkins<br \/>  <font color=\"#ff7700\">from<\/font>&nbsp;jenkinsapi.<font color=\"#dc143c\">exceptions<\/font>&nbsp;<font color=\"#ff7700\">import<\/font>&nbsp;JenkinsAPIException<br \/>  &nbsp;<br \/>  &nbsp;<br \/>  URL&nbsp;=&nbsp;<font color=\"#483d8b\">&#8216;http:\/\/jenkins.example.ru\/&#8217;<\/font><br \/>  USERNAME&nbsp;=&nbsp;<font color=\"#483d8b\">&#8216;jenkins&#8217;<\/font><br \/>  PASSWORD&nbsp;=&nbsp;<font color=\"#483d8b\">&#8216;secret&#8217;<\/font><br \/>  JOBS&nbsp;=&nbsp;<font>[<\/font><font color=\"#483d8b\">&#8216;build&#8217;<\/font>,&nbsp;<font color=\"#483d8b\">&#8216;test&#8217;<\/font>,&nbsp;<font color=\"#483d8b\">&#8216;lint&#8217;<\/font><font>]<\/font><br \/>  TTY&nbsp;=&nbsp;<font color=\"#483d8b\">&#8216;\/dev\/tty.usbserial-A900FYDU&#8217;<\/font><br \/>  &nbsp;<br \/>  &nbsp;<br \/>  <font color=\"#ff7700\">def<\/font>&nbsp;job_failed<font>(<\/font>connect,&nbsp;job_name<font>)<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#483d8b\">&quot;&quot;&quot;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;Returns&nbsp;boolean&nbsp;job&nbsp;status&nbsp;(True&nbsp;&#8212;&nbsp;success,&nbsp;False&nbsp;&#8212;&nbsp;fail).<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&quot;&quot;&quot;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">if<\/font>&nbsp;job_name&nbsp;<font color=\"#ff7700\">not<\/font>&nbsp;<font color=\"#ff7700\">in<\/font>&nbsp;connect:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">return<\/font>&nbsp;<font color=\"#008000\">True<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;last_build&nbsp;=&nbsp;connect<font>[<\/font>job_name<font>]<\/font>.<font>get_last_build<\/font><font>(<\/font><font>)<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">if<\/font>&nbsp;last_build.<font>is_running<\/font><font>(<\/font><font>)<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">return<\/font>&nbsp;<font color=\"#008000\">False<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;build_status&nbsp;=&nbsp;last_build.<font>get_status<\/font><font>(<\/font><font>)<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">if<\/font>&nbsp;build_status&nbsp;<font color=\"#ff7700\">in<\/font>&nbsp;<font>(<\/font><font color=\"#483d8b\">&#8216;FAIL&#8217;<\/font>,&nbsp;<font color=\"#483d8b\">&#8216;FAILED&#8217;<\/font>,&nbsp;<font color=\"#483d8b\">&#8216;FAILURE&#8217;<\/font>,&nbsp;<font color=\"#483d8b\">&#8216;ERROR&#8217;<\/font>,&nbsp;<font color=\"#483d8b\">&#8216;REGRESSION&#8217;<\/font><font>)<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">return<\/font>&nbsp;<font color=\"#008000\">True<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">return<\/font>&nbsp;<font color=\"#008000\">False<\/font><br \/>  &nbsp;<br \/>  &nbsp;<br \/>  <font color=\"#ff7700\">def<\/font>&nbsp;send_to_transmitter<font>(<\/font>device,&nbsp;command<font>)<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#483d8b\">&quot;&quot;&quot;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;Send&nbsp;command&nbsp;to&nbsp;device&nbsp;and&nbsp;die&nbsp;on&nbsp;error.<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&quot;&quot;&quot;<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;device.<font>write<\/font><font>(<\/font><font color=\"#483d8b\">&quot;Achtung&nbsp;%sn&quot;<\/font>&nbsp;<font color=\"#66cc66\">%<\/font>&nbsp;command<font>)<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;device.<font color=\"#dc143c\">readline<\/font><font>(<\/font><font>)<\/font>.<font>strip<\/font><font>(<\/font><font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">if<\/font>&nbsp;result&nbsp;<font color=\"#66cc66\">!<\/font>=&nbsp;<font color=\"#483d8b\">&#8216;OK&#8217;<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">print<\/font><font>(<\/font><font color=\"#483d8b\">&quot;ERROR:&nbsp;device&nbsp;response&nbsp;is&nbsp;not&nbsp;OK&quot;<\/font><font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#dc143c\">sys<\/font>.<font>exit<\/font><font>(<\/font><font color=\"#ff4500\">1<\/font><font>)<\/font><br \/>  &nbsp;<br \/>  &nbsp;<br \/>  <font color=\"#ff7700\">if<\/font>&nbsp;__name__&nbsp;==&nbsp;<font color=\"#483d8b\">&#8216;__main__&#8217;<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">if<\/font>&nbsp;<font color=\"#ff7700\">not<\/font>&nbsp;<font color=\"#dc143c\">os<\/font>.<font>path<\/font>.<font>exists<\/font><font>(<\/font>TTY<font>)<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">print<\/font><font>(<\/font><font color=\"#483d8b\">&quot;ERROR:&nbsp;device&nbsp;&#8216;%s&#8217;&nbsp;is&nbsp;not&nbsp;exists&quot;<\/font>&nbsp;<font color=\"#66cc66\">%<\/font>&nbsp;TTY<font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#dc143c\">sys<\/font>.<font>exit<\/font><font>(<\/font><font color=\"#ff4500\">1<\/font><font>)<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">try<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connect&nbsp;=&nbsp;Jenkins<font>(<\/font>URL,&nbsp;USERNAME,&nbsp;PASSWORD<font>)<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">if<\/font>&nbsp;<font color=\"#008000\">any<\/font><font>(<\/font>job_failed<font>(<\/font>connect,&nbsp;job_name<font>)<\/font>&nbsp;<font color=\"#ff7700\">for<\/font>&nbsp;job_name&nbsp;<font color=\"#ff7700\">in<\/font>&nbsp;JOBS<font>)<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transmitter&nbsp;=&nbsp;serial.<font>Serial<\/font><font>(<\/font>TTY,&nbsp;<font color=\"#ff4500\">9600<\/font><font>)<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">if<\/font>&nbsp;transmitter.<font color=\"#dc143c\">readline<\/font><font>(<\/font><font>)<\/font>.<font>strip<\/font><font>(<\/font><font>)<\/font>&nbsp;<font color=\"#66cc66\">!<\/font>=&nbsp;<font color=\"#483d8b\">&#8216;Ready&nbsp;for&nbsp;achtung&#8217;<\/font>:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">print<\/font><font>(<\/font><font color=\"#483d8b\">&quot;ERROR:&nbsp;device&nbsp;is&nbsp;not&nbsp;initialized&quot;<\/font><font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#dc143c\">sys<\/font>.<font>exit<\/font><font>(<\/font><font color=\"#ff4500\">1<\/font><font>)<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send_to_transmitter<font>(<\/font>transmitter,&nbsp;<font color=\"#483d8b\">&#8216;ON&#8217;<\/font><font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#dc143c\">time<\/font>.<font>sleep<\/font><font>(<\/font><font color=\"#ff4500\">5<\/font><font>)<\/font><br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send_to_transmitter<font>(<\/font>transmitter,&nbsp;<font color=\"#483d8b\">&#8216;OFF&#8217;<\/font><font>)<\/font><br \/>  &nbsp;<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#ff7700\">except<\/font>&nbsp;JenkinsAPIException:<br \/>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=\"#dc143c\">sys<\/font>.<font>exit<\/font><font>(<\/font><font color=\"#ff4500\">1<\/font><font>)<\/font><\/p><\/blockquote>\n<p>  \u0417\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a Jenkins, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u043d\u0438\u0439 \u0438, \u0435\u0441\u043b\u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u043d\u0438\u0445 \u043f\u0440\u043e\u0432\u0430\u043b\u0435\u043d\u043e, \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043c\u0438\u0433\u0430\u043b\u043a\u0443 \u043d\u0430 \u043f\u044f\u0442\u044c \u0441\u0435\u043a\u0443\u043d\u0434 (\u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u0438\u0433\u0430\u043d\u0438\u0435 \u043d\u0435 \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u043b\u043e, \u043d\u043e \u0434\u0430\u0432\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0431\u0438\u043b\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e). \u0421\u043a\u0440\u0438\u043f\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0440\u043e\u043d\u0435 \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u0438\u043d\u0443\u0442\u0443 \u0441 11:00 \u0434\u043e 20:00 \u0432 \u0431\u0443\u0434\u043d\u0438 (\u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0448\u0438\u0445 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432) \u2014 \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043c\u0438\u0433\u0430\u043b\u043a\u0443 \u0432 \u043d\u043e\u0447\u0438 \u0438\u043b\u0438 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445.<br \/>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u043f\u043e\u043b\u043b\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0431\u043e\u0440\u043e\u043a, \u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Jenkins \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0435 \u043e\u043d \u0441\u0430\u043c \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043b \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0438\u0433\u0430\u043b\u043a\u0438, \u043d\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0432 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0442\u0430\u043a\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c: \u043b\u044e\u0431\u044b\u0435 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u044b \u0438\u0437 \u0441\u0435\u0442\u0438 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438 \u0432 \u043e\u0444\u0438\u0441\u043d\u0443\u044e \u0441\u0435\u0442\u044c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u044b.  <\/p>\n<h3>Profit!<\/h3>\n<p>  \u0412\u0441\u0451 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438 \u0440\u0430\u0434\u0443\u0435\u0442 \u0432\u0441\u0435\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 (\u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0444\u0435\u0439\u043b\u0438\u043b \u0431\u0438\u043b\u0434) \u0432\u0435\u0441\u0451\u043b\u044b\u043c \u043c\u0438\u0433\u0430\u043d\u0438\u0435\u043c \u0432 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<br \/>  \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438: <a href=\"https:\/\/github.com\/dreadatour\/jenkins-achtung\">https:\/\/github.com\/dreadatour\/jenkins-achtung<\/a>.    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/company\/mailru\/blog\/193606\/\"> http:\/\/habrahabr.ru\/company\/mailru\/blog\/193606\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/510\/fb8\/1a5\/510fb81a527823c528848bacadcd2edb.jpg\" \/><\/div>\n<p>  \u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u0435\u0441\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430 \u043c\u044b (\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u00ab\u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c Mail.ru\u00bb) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Jenkins CI. \u0417\u0430\u043f\u0443\u0441\u043a \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0443\u0448\u0430 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 git (\u043f\u043e \u0445\u0443\u043a\u0443) \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u0441\u0431\u043e\u0440\u043a\u0430\u0445. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043f\u043e email \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0433\u043e \u0438 \u0432\u0435\u0441\u0451\u043b\u043e\u0433\u043e.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-193606","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/193606","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=193606"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/193606\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=193606"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=193606"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=193606"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}