{"id":346425,"date":"2023-03-07T15:02:31","date_gmt":"2023-03-07T15:02:31","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=346425"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=346425","title":{"rendered":"<span>\u041a\u0430\u043a \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 IoT-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435<\/span>"},"content":{"rendered":"<div><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/vk.com\/rtrg?p=VK-RTRG-1288550-e6f1C\" width=\"1\" style=\"display: none;\"><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/top-fwz1.mail.ru\/counter?id=3200881;js=na\" width=\"1\" style=\"display: none;\"><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/on\/al\/o5\/onalo5-jboe-x27js56x_bbabps.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/on\/al\/o5\/onalo5-jboe-x27js56x_bbabps.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0418\u0432\u0430\u043d \u0411\u0430\u043d\u043d\u0438\u043a\u043e\u0432, \u044f \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a VK Tech. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u043b IoT-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0438 \u0445\u043e\u0447\u0443 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 IoT-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u0435\u0440\u0435 \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0432\u0435\u0449\u0435\u0439 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c, \u043d\u043e \u0438 \u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043c\u0438\u0440\u0435. \u042d\u0442\u043e \u0432\u043b\u0435\u0447\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0440\u044f\u0434 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u043d\u044e\u0430\u043d\u0441\u043e\u0432.\u00a0<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 IoT-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0435 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0438 \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 IoT-\u0440\u0435\u0448\u0435\u043d\u0438\u0439.\u00a0<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u041e\u0441\u043d\u043e\u0432\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f IoT-\u0441\u0438\u0441\u0442\u0435\u043c<\/h2>\n<p>  \u0418\u0442\u0430\u043a, \u0438\u0437 \u0447\u0435\u0433\u043e \u0436\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 IoT-\u0441\u0438\u0441\u0442\u0435\u043c\u044b? \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430.<\/p>\n<p>  \u0412\u043e\u0437\u044c\u043c\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0431\u044b\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u0438\u0431\u043e\u0440 \u2014 \u0447\u0430\u0439\u043d\u0438\u043a, \u0440\u043e\u0437\u0435\u0442\u043a\u0443, \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0443 \u0438\u043b\u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u0432\u0430\u0440\u043a\u0443. \u041f\u0440\u0438\u0434\u0435\u043b\u0430\u0435\u043c \u043a \u043d\u0435\u043c\u0443 \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e Bluetooth. \u0422\u0430\u043a\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430, \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0430 \u0438\u043b\u0438 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430. \u041c\u043e\u0436\u043d\u043e, \u043d\u0435 \u0432\u0441\u0442\u0430\u0432\u0430\u044f \u0441 \u0434\u0438\u0432\u0430\u043d\u0430, \u043c\u0435\u043d\u044f\u0442\u044c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0434\u043e\u043c\u0443, \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0447\u0430\u0439\u043d\u0438\u043a, \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0443\u043b\u044c\u0442\u0438\u0432\u0430\u0440\u043a\u0438. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043f\u0440\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u0431\u043e\u0440 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c. \u0423\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0434\u0432\u0435\u0440\u0438 \u0432 \u043f\u0440\u0438\u0445\u043e\u0436\u0435\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u0435\u0442. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0430\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f IoT-\u0441\u0438\u0441\u0442\u0435\u043c\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/f1\/nx\/hh\/f1nxhhef-4sehbidacwvzewfxfe.png\" data-src=\"https:\/\/habrastorage.org\/webt\/f1\/nx\/hh\/f1nxhhef-4sehbidacwvzewfxfe.png\"\/><\/p>\n<p>  \u041d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b. \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u0437\u0430\u043a\u0440\u044b\u0442\u0430 \u043b\u0438 \u0434\u0432\u0435\u0440\u044c, \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043b\u0438 \u0440\u043e\u0437\u0435\u0442\u043a\u0438, \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0433\u0434\u0435-\u0442\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u043e\u0442 \u0434\u043e\u043c\u0430. \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0431\u043b\u0438\u0437\u043a\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c: \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u043c \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0430\u043c \u043d\u0430\u0434\u043e \u043a\u0430\u043a-\u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0430 \u043f\u0440\u0438\u0431\u043e\u0440\u044b \u0443\u043c\u0435\u044e\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e Bluetooth.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/dp\/rr\/du\/dprrdulpvfpkt7g94hjdilosjfs.png\" data-src=\"https:\/\/habrastorage.org\/webt\/dp\/rr\/du\/dprrdulpvfpkt7g94hjdilosjfs.png\"\/><\/p>\n<p>  \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0448\u043b\u044e\u0437, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043a WiFi-\u0441\u0435\u0442\u0438 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0433\u043e \u0440\u043e\u0443\u0442\u0435\u0440\u0430, \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0431\u043e\u0440\u044b \u0432 Bluetooth-\u044d\u0444\u0438\u0440\u0435, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043a \u043d\u0438\u043c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0445\u043e\u0447\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u043a\u043e\u0439 \u043d\u0430 \u0434\u0430\u043b\u044c\u043d\u0435\u0439 \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u0438. \u0412 \u0440\u043e\u043b\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 MQTT-\u0431\u0440\u043e\u043a\u0435\u0440. \u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e MQTT? \u042d\u0442\u043e \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f IoT. \u0421 \u043d\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0438 \u043e\u043d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u0435\u043d.<\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0448\u043b\u044e\u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 IoT-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0434\u043e\u043c\u0430 \u0438 \u0443\u043c\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c. \u041f\u043e\u043c\u0438\u043c\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u043f\u0440\u044f\u0433\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0443\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0430: \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0430, \u0441\u0435\u0440\u0432\u0438\u0441 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u0432\u0440\u043e\u0434\u0435 IFTTT \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/co\/ja\/jo\/cojajoift2opcskwko1bzjqmt0c.png\" data-src=\"https:\/\/habrastorage.org\/webt\/co\/ja\/jo\/cojajoift2opcskwko1bzjqmt0c.png\"\/><\/p>\n<p>  \u0411\u0438\u0437\u043d\u0435\u0441 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u0445 \u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u043b\u0438\u043d\u0435\u0439\u043a\u0438 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 IoT-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u043c\u0438, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0441 Tuya.<\/p>\n<p>  \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0447\u0442\u043e\u0431\u044b IoT-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0441\u043c\u043e\u0433\u043b\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u043b\u0430 \u0431\u0438\u0437\u043d\u0435\u0441\u0443 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f, \u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0439 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f, \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u043e\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e, \u043a\u0441\u0442\u0430\u0442\u0438, \u0432\u0445\u043e\u0434\u0438\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0434\u043b\u044f IoT \u2014 \u0441\u0435\u0440\u0432\u0435\u0440 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a. \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a IoT.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/wk\/gw\/kk\/wkgwkk_pw4sbjgf8xx3qjzpcpdg.png\" data-src=\"https:\/\/habrastorage.org\/webt\/wk\/gw\/kk\/wkgwkk_pw4sbjgf8xx3qjzpcpdg.png\"\/><\/p>\n<h2>\u041f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438<\/h2>\n<p>  \u041c\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c\u0438 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u041d\u0430\u0436\u0430\u043b \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u2014 \u0432\u043a\u043b\u044e\u0447\u0438\u043b \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0443. \u041e\u0442\u043a\u0440\u044b\u043b \u0438\u043b\u0438 \u0437\u0430\u043a\u0440\u044b\u043b \u0432\u0445\u043e\u0434\u043d\u0443\u044e \u0434\u0432\u0435\u0440\u044c \u2014 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d. \u041d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u043c \u043d\u0430\u043c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0432 \u0434\u0435\u043b\u043e \u0432\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0441\u0435\u0442\u044c, \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0432\u0441\u0435 \u0440\u0435\u0437\u043a\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u043e\u0439 \u043f\u043e Bluetooth, \u043d\u0443\u0436\u043d\u043e \u0441\u043f\u0435\u0440\u0432\u0430 \u043a \u043d\u0435\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f, \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u0443\u0436\u0435 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c Bluetooth-\u044d\u0444\u0438\u0440 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0448\u0443\u043c\u043b\u0451\u043d.\u00a0<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/gh\/0y\/dd\/gh0yddvebqlg_rsmhp64wnmksta.png\" data-src=\"https:\/\/habrastorage.org\/webt\/gh\/0y\/dd\/gh0yddvebqlg_rsmhp64wnmksta.png\"\/><\/p>\n<p>  \u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 WiFi \u043d\u0430\u0434\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043f\u0440\u0438\u0431\u043e\u0440 \u0438\u043b\u0438 \u0432 \u0431\u043b\u0438\u0436\u043d\u0435\u0439 \u0437\u043e\u043d\u0435 (\u0432 \u0441\u0435\u0442\u0438 \u0440\u043e\u0443\u0442\u0435\u0440\u0430), \u0438\u043b\u0438 \u0436\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043f\u0440\u043e\u0439\u0434\u044f \u0432\u0441\u0435 \u044d\u0442\u0430\u043f\u044b \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0417\u043d\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u0438\u0431\u043e\u0440\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0441 \u043d\u0438\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c. \u0422\u0430\u043a\u0436\u0435 \u0432 \u0434\u0435\u043b\u043e \u0432\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0435\u0442\u044c \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u043c\u0438, \u043e\u0431\u0440\u044b\u0432\u0430\u043c\u0438, \u043f\u043e\u0440\u0447\u0435\u0439 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043f\u043e\u0440\u043e\u0439 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e: \u0438\u043b\u0438 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0430 \u043f\u0435\u0440\u0435\u0433\u043e\u0440\u0435\u043b\u0430, \u0438\u043b\u0438 \u0440\u043e\u0443\u0442\u0435\u0440 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0410 \u0435\u0441\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u043c \u043f\u043e BLE \u0447\u0435\u0440\u0435\u0437 \u0448\u043b\u044e\u0437, \u0442\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/jv\/2_\/5g\/jv2_5ghzmlqgj3op9nzhpot2wpo.png\" data-src=\"https:\/\/habrastorage.org\/webt\/jv\/2_\/5g\/jv2_5ghzmlqgj3op9nzhpot2wpo.png\"\/><\/p>\n<p>  \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c\u0438 IoT-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u043c\u0438 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0433\u043e\u043b\u043e\u0432\u043d\u0443\u044e \u0431\u043e\u043b\u044c: \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430\u0445, \u0440\u0430\u0437\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432, \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445, \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a. \u0418 \u0432\u0441\u0435 \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0441\u0435\u0442\u044c\u044e, \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u043c, \u043d\u043e \u0435\u0449\u0435 \u0438 \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u043b\u0430\u043a\u0430\u043c\u0438 \u0432 \u043c\u0435\u0436\u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438.\u00a0\u00a0<\/p>\n<p>  \u0414\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 IoT-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u043c\u0438 \u0442\u0430\u043a\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0439 \u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0439 \u0431\u043e\u043b\u044c\u044e: \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0430\u0440\u0442\u0438\u043a\u0443\u043b\u044b, \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 API, \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b, \u0447\u0442\u043e\u0431\u044b \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c (paring) \u043f\u0440\u0438\u0431\u043e\u0440 \u0441 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0448\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435. \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442, \u0432\u0430\u0436\u043d\u044b\u0439 \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430: \u043c\u0435\u0436\u043e\u0431\u043b\u0430\u0447\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u043f\u043b\u0430\u0442\u043d\u0430\u044f, \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e API \u043d\u0443\u0436\u043d\u043e \u043f\u043b\u0430\u0442\u0438\u0442\u044c, \u0438 \u043d\u0435\u043c\u0430\u043b\u043e.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/on\/tj\/8q\/ontj8q3jizxqc6dti2uyyx56bo4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/on\/tj\/8q\/ontj8q3jizxqc6dti2uyyx56bo4.png\"\/><\/p>\n<h2>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u0432<\/h2>\n<p>  \u041c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u0440\u043e\u0431 \u0438 \u043e\u0448\u0438\u0431\u043e\u043a, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u0449\u0435\u043d\u0438\u0435 backend-\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u044b \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u041c\u044b \u043f\u0440\u0438\u0448\u043b\u0438 \u043a \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0430 \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c\u0438 \u0438 \u0438\u0445 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439.<\/p>\n<p>  \u0421\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u0441 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c\u0438 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0430\u043c\u0438, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Tarantool. \u0421\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u044d\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u0440\u043e\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433\u043e\u0432\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0438 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.\u00a0<\/p>\n<p>  \u041d\u043e \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0434\u0432\u043e\u0439\u043d\u0438\u043a? \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u0431\u043e\u0440\u0430. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0430, \u0442\u043e \u0435\u0435 \u0434\u0432\u043e\u0439\u043d\u0438\u043a \u2014 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0441 \u0434\u0432\u0443\u043c\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438: \u0441\u0432\u0435\u0442\u0438\u0442\u0441\u044f \u0438\u043b\u0438 \u043d\u0435\u0442. \u0415\u0441\u043b\u0438 \u0440\u0435\u0447\u044c \u043f\u0440\u043e \u0447\u0430\u0439\u043d\u0438\u043a, \u0442\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u043e\u0434\u0443 \u0438\u043b\u0438 \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443 \u043e\u0441\u0442\u044b\u0432\u0430\u0442\u044c. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e. \u041d\u043e \u043d\u0435\u0442!<\/p>\n<p>  \u0412\u043e\u0442 \u043c\u044b \u043d\u0430\u043b\u0438\u0432\u0430\u0435\u043c \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0447\u0430\u0439\u043d\u0438\u043a \u0432\u043e\u0434\u0443, \u0441\u0442\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u043d\u0430 \u0431\u0430\u0437\u0443, \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0438 \u0436\u0434\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0432\u0441\u043a\u0438\u043f\u0438\u0442. \u0427\u0442\u043e\u0431\u044b \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0434\u0432\u043e\u0439\u043d\u0438\u043a \u044d\u0442\u043e\u0433\u043e \u0447\u0430\u0439\u043d\u0438\u043a\u0430 \u0438\u043c\u0435\u043b \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u043c\u044b\u0441\u043b, \u0441 \u043d\u0438\u043c \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0414\u0432\u043e\u0439\u043d\u0438\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u00ab\u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c\u00bb, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u0435\u043c \u0432\u043e\u0434\u044b, \u043a\u0430\u043a\u0430\u044f \u0443 \u043d\u0435\u0435 \u0431\u044b\u043b\u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0447\u0430\u0439\u043d\u0438\u043a\u0430 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.\u00a0<\/p>\n<p>  \u0417\u0430\u0434\u0430\u0435\u043c \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u0432\u0438\u0434\u0438\u043c \u0434\u0432\u0430 \u043a\u0438\u043f\u044f\u0449\u0438\u0445 \u0447\u0430\u0439\u043d\u0438\u043a\u0430 \u2014 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439. \u0418 \u0434\u0430\u0436\u0435 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u0431\u043b\u0438\u0437\u043a\u043e \u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u043c \u0442\u0435\u0440\u043c\u043e\u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u0431\u043e\u0440\u0430. \u041d\u043e \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0447\u0430\u0439\u043d\u0438\u043a \u0438\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430 \u0441\u043e\u043e\u0431\u0449\u0438\u043b, \u0447\u0442\u043e \u043e\u043d \u0432\u0441\u043a\u0438\u043f\u044f\u0442\u0438\u043b \u0432\u0441\u044e \u0432\u043e\u0434\u0443 \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f. \u0410 \u0447\u0430\u0439\u043d\u0438\u043a \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430 \u0435\u0449\u0435 \u043f\u044b\u0445\u0442\u0438\u0442. \u0418\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c? \u041a\u0430\u043a \u0431\u044b\u0442\u044c?<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/7b\/hf\/vi\/7bhfviws73n1l8kqvjxubj8vc4c.png\" data-src=\"https:\/\/habrastorage.org\/webt\/7b\/hf\/vi\/7bhfviws73n1l8kqvjxubj8vc4c.png\"\/><\/p>\n<p>  \u041d\u0430\u043b\u0438\u0446\u043e \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. \u041f\u0440\u0438\u0447\u0438\u043d \u0442\u043e\u043c\u0443 \u0432\u0435\u043b\u0438\u043a\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e: \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0435 \u0432\u0441\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u043d\u043e\u0435 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u043d\u0430 \u043a\u0443\u0445\u043d\u0435, \u0441\u043e\u0441\u0442\u0430\u0432 \u0432\u043e\u0434\u044b, \u0438\u0437\u043d\u043e\u0448\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0447\u0430\u0439\u043d\u0438\u043a\u0430 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435), \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u0442\u0435\u043c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0447\u043d\u043e \u043c\u044b \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u043b\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u043a\u043e\u0434\u0435 \u0438 \u043a\u0430\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043b\u0438. \u0422\u0430\u043a\u043e\u0439 \u00ab\u0434\u043e\u043f\u043f\u0435\u043b\u044c\u0433\u0430\u043d\u0433\u0435\u0440\u00bb, \u0435\u0441\u043b\u0438 \u043e\u043d \u0445\u043e\u0440\u043e\u0448\u043e \u0441\u0434\u0435\u043b\u0430\u043d, \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0441 \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u044b\u043c\u0438 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u044b\u0432\u043e\u0434\u044b.\u00a0<\/p>\n<p>  \u041d\u043e \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0434\u0435\u043b\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0431\u0435\u0437 \u0437\u043d\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u044d\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u0446\u0435\u043b\u043e\u043c \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u0430. \u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u0441\u043a\u0430\u0437\u0430\u0442\u044c: \u00ab\u0414\u0430, \u0432\u043e\u0442 \u044d\u0442\u043e\u0442 \u0447\u0430\u0439\u043d\u0438\u043a \u043d\u0430 \u043a\u0443\u0445\u043d\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0442\u0430\u043b \u0434\u043e\u043b\u044c\u0448\u0435 \u0433\u0440\u0435\u0442\u044c\u0441\u044f, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043e\u043d \u0443\u0436\u0435 \u0438\u0437\u043d\u043e\u0448\u0435\u043d \u0438 \u0441\u043a\u043e\u0440\u043e \u043f\u0435\u0440\u0435\u0433\u043e\u0440\u0438\u0442 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e. \u041f\u043e\u0440\u0430 \u043f\u043e\u043a\u0443\u043f\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439!\u00bb \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0448\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0430 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435.\u00a0<\/p>\n<p>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0430 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0438. \u041e\u0441\u043d\u0430\u0441\u0442\u0438\u043c \u0447\u0430\u0439\u043d\u0438\u043a \u043c\u043e\u0434\u0443\u043b\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 (\u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b, \u043e\u0431\u044a\u0435\u043c\u0430 \u0432\u043e\u0434\u044b, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438) \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443 \u043d\u0438\u0431\u0443\u0434\u044c \u043a\u0430\u043d\u0430\u043b\u0443 \u0441\u0432\u044f\u0437\u0438. \u0414\u043b\u044f \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f, \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u043c\u044b\u0439 \u0442\u043e\u043a. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u043f\u0440\u0438\u0431\u043e\u0440, \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0437\u0430 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c. \u042d\u0442\u0438 \u0447\u0438\u0441\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430 \u0438\u043b\u0438 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430.\u00a0<\/p>\n<p>  \u041d\u043e \u0438 \u044d\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u043c. \u041e\u0442 \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u0437\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u043c\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u043e\u043b\u043a\u0443 \u043c\u0430\u043b\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0435\u0442 \u043f\u043e\u043a\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u044b, \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432, \u043f\u043e Bluetooth \u0438\u043b\u0438 \u0433\u043b\u0430\u0437\u0430\u043c\u0438. \u0420\u0435\u0448\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u043c\u044b.<\/p>\n<p>  \u0410 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0435\u0439? \u0418 \u043f\u043e\u0432\u0435\u0440\u0445 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0430\u0439\u043d\u0438\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u0435\u043c \u0432\u043e\u0434\u044b \u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443, \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043a\u0430\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0447\u0430\u0439\u043d\u0438\u043a \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0441 \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u044b\u043c\u0438 \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u0447\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/3k\/h_\/e1\/3kh_e1k0ngg2vkgfxwbar1fmxfi.png\" data-src=\"https:\/\/habrastorage.org\/webt\/3k\/h_\/e1\/3kh_e1k0ngg2vkgfxwbar1fmxfi.png\"\/><\/p>\n<p>  \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0447\u0430\u0439\u043d\u0438\u043a\u043e\u043c \u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 Bluetooth-\u043a\u0430\u043d\u0430\u043b\u0443, \u0430 \u0446\u0438\u0444\u0440\u043e\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0431\u0443\u0447\u0438\u043c \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0430\u0439\u043d\u0438\u043a\u043e\u043c \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0430\u0439\u043d\u0438\u043a \u0432\u0441\u0435 \u043a\u0438\u043f\u0438\u0442 \u0438 \u043a\u0438\u043f\u0438\u0442, \u0445\u043e\u0442\u044f \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u043c\u0438\u043d\u0443\u0442\u0443 \u043d\u0430\u0437\u0430\u0434. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c? \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u044b\u0434\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u041e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0430\u0441\u044c \u0438 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043d\u0438\u0436\u0430\u0442\u044c\u0441\u044f. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0434\u0430\u0434\u0438\u043c \u0442\u0440\u0435\u0432\u043e\u0436\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u0440\u0438\u0431\u0435\u0436\u0430\u043b \u043d\u0430 \u043a\u0443\u0445\u043d\u044e \u0438 \u0440\u0443\u043a\u0430\u043c\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u043b \u0447\u0430\u0439\u043d\u0438\u043a.<\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u0430 \u043f\u043e\u0447\u0442\u0438 \u00ab\u0432\u0435\u0449\u044c \u0432 \u0441\u0435\u0431\u0435\u00bb. \u041d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044e, \u043d\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0438 \u00ab\u0434\u0443\u043c\u0430\u044e\u0449\u0443\u044e\u00bb \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u0438 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p>  \u0412 \u0441\u0443\u0445\u043e\u043c \u043e\u0441\u0442\u0430\u0442\u043a\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0434\u0432\u043e\u0439\u043d\u0438\u043a \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043d\u044f\u0442\u0438\u0439:<\/p>\n<ul>\n<li>\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435;<\/li>\n<li>\u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430;<\/li>\n<li>\u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0438 \u0438 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442\u00a0 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f;<\/li>\n<li>\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0441 \u0441\u0430\u043c\u0438\u043c \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u043c, \u0442\u0430\u043a \u0438 \u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c \u0438\u043c \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u043c.<\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/q0\/gt\/6e\/q0gt6eaywksdt7grfump62tf0sq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/q0\/gt\/6e\/q0gt6eaywksdt7grfump62tf0sq.png\"\/><\/p>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0434\u0432\u043e\u0439\u043d\u0438\u043a \u0441\u043a\u043e\u0440\u0435\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0438 \u0432 \u0441\u0442\u0440\u043e\u0433\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u0412 \u0435\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438 \u0443\u0442\u0435\u0440\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043d\u0430 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0439 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041d\u043e \u044d\u0442\u043e\u0442 \u0442\u0435\u0440\u043c\u0438\u043d \u0443\u0436\u0435 \u0443\u0441\u0442\u043e\u044f\u043b\u0441\u044f, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0435\u0433\u043e.<\/p>\n<h2>\u041a\u0430\u043a\u0438\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 IoT-\u0441\u0438\u0441\u0442\u0435\u043c?<\/h2>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0435 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e. \u041c\u043e\u0434\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441 \u0437\u0430\u043f\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c, \u00ab\u0432\u044f\u043b\u043e\u00bb \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0443\u044e \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044e, \u043e\u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u044b \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u043d\u0435\u0441\u0435\u0442. \u041f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435, \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0435\u0441\u0432\u043e\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u0410 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044e, \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435\u0449\u0435 \u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0422\u0430\u043a\u0438\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043c\u0435\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u0432. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043e \u043d\u0438\u0445 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440.<\/p>\n<p>  \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u043c, \u0431\u043e\u043b\u044c\u0448\u0438\u043c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0431\u043e\u0440\u0430 \u0438 \u0435\u0433\u043e \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0430.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0434\u0432\u043e\u0439\u043d\u0438\u043a \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0442\u044c. \u0421\u0435\u0442\u0438 \u043d\u0435\u043d\u0430\u0434\u0435\u0436\u043d\u044b, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 IoT \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0441\u0435\u0442\u044c \u0447\u0430\u0441\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u043f\u043e\u0439 \u0437\u043e\u043d\u043e\u0439 \u0434\u043b\u044f \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0430. \u0421\u043b\u043e\u0432\u043e\u043c, \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u043b\u043e\u0436\u043d\u0430\u044f. \u042d\u0442\u043e \u043c\u0435\u0436\u0434\u0438\u0441\u0446\u043b\u0438\u043d\u0430\u0440\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0438 \u0444\u0438\u0437\u0438\u043a\u0443, \u0438 \u0437\u043d\u0430\u043d\u0438\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u0435\u0445\u043d\u0438\u043a\u0438, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043c\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438, \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044e \u043e\u0442 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432, \u043d\u0430\u0443\u0447\u0438\u043b\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c\u0438, \u0430 \u0441\u0430\u043c\u0438 \u043f\u0440\u0438\u0431\u043e\u0440\u044b \u2014 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u0432. \u0427\u0442\u043e \u043d\u0430\u043c \u0434\u0430\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b?<\/p>\n<p>  \u0421\u0430\u043c\u0430\u044f \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0432\u044b\u0433\u043e\u0434\u0430 \u2014 \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c\u0438. \u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0442\u0435\u043a\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439. \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0443\u043c\u0435\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u0435\u0439, \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0432\u043e\u0435\u0434\u0438\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0438\u0431\u043e\u0440\u044b \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435.\u00a0 \u0414\u0432\u043e\u0439\u043d\u0438\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u043e\u0442 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430\u043c (MQTT, ModBus, CoAP \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435), \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0442\u0438\u043b\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u041d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0435\u0434\u0438\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u0432, \u0442\u043e \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c\u0438 \u0438 \u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u043c\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438 (\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438).<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0434\u0432\u043e\u0439\u043d\u0438\u043a \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430, \u043d\u043e \u0438 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e\u0433\u043e\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0430, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0433\u043e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u043c, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u043c\u0435\u0442\u0435\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u044e.<\/p>\n<h2>\u0418\u0437 \u043a\u0430\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430 Tarantool<\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/es\/kr\/wf\/eskrwfasshaz0bvvw0kjh9j-tn8.png\" data-src=\"https:\/\/habrastorage.org\/webt\/es\/kr\/wf\/eskrwfasshaz0bvvw0kjh9j-tn8.png\"\/><\/p>\n<p>  \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441 \u043d\u0443\u043b\u044f \u2014 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u041d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0430\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u044b \u043f\u0438\u043a\u043e\u0432\u044b\u0445 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u043a, \u043a\u0430\u043a \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c. \u0422\u0430\u043a\u0436\u0435 \u0432\u0430\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0446\u0435\u043d\u043d\u044b\u0435, \u0430 \u043a\u0430\u043a\u0438\u0435 \u043d\u0435 \u0442\u0430\u043a \u0436\u0430\u043b\u043a\u043e \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c.\u00a0<\/p>\n<p>  \u0412 Tarantool \u0438 \u0435\u0433\u043e \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0435\u0441\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Cartridge, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438, \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 (WAL), \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 Lua-\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u0443\u0437\u043b\u0435 \u0438 \u043c\u043d\u043e\u0433\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>  \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u2014 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c\u0438 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0430\u043c\u0438 \u2014 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0446\u0435\u043b\u0438, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Bluetooth-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0430 \u0437\u0430\u0442\u0435\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f Tuya. \u042d\u0442\u043e \u043e\u0431\u044a\u0435\u043c\u043d\u0430\u044f \u0442\u0435\u043c\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 \u0432\u044b\u0448\u0435 \u043d\u044e\u0430\u043d\u0441\u044b \u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u0412 \u043e\u0431\u0449\u0435\u043c \u0432\u0438\u0434\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<ol>\n<li><strong>\u042f\u0434\u0440\u043e \u2014 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0435 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0438<\/strong>. \u041d\u0430\u0431\u043e\u0440 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0438\u0434\u044b \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u0432.<\/li>\n<li><strong>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438<\/strong>. \u042d\u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a MQTT-\u0431\u0440\u043e\u043a\u0435\u0440\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c luamqtt), \u043a Kafka, \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438\u043b\u0438 \u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e Lua-\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e IProto (\u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b Tarantool) \u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438.<\/li>\n<li><strong>\u041d\u0430\u0431\u043e\u0440 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432<\/strong>. \u0412 \u043d\u0438\u0445 \u0438\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435.<\/li>\n<li><strong>\u041d\u0430\u0431\u043e\u0440 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432<\/strong>. \u0422\u0443\u0434\u0430 \u044f\u0434\u0440\u043e\u043c \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043c\u0438\u0440.<\/li>\n<li><strong>\u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0438<\/strong>. \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u044b (\u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Tarantool \u043e\u043d\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0444\u0430\u0439\u0431\u0435\u0440\u0430\u043c\u0438), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0431\u0438\u0440\u0430\u044e\u0442 \u0438\u0437 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u043e\u0441\u044b\u043b\u0430\u044e\u0442 \u0438\u0445 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043c\u0438\u0440. \u042d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c Tarantool, \u0438\u043b\u0438 \u0436\u0435 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0431\u0438\u0440\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e IProto.<\/li>\n<li><strong>\u0421\u043b\u043e\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e API \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c\u0438 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0430\u043c\u0438<\/strong>. \u0427\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 API \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b (\u0441\u0435\u0440\u0432\u0438\u0441\u044b) \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c\u0438, \u0443\u0437\u043d\u0430\u044e\u0442 \u043e\u0431 \u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.<\/li>\n<\/ol>\n<p>  \u0420\u0430\u0431\u043e\u0442\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<ol>\n<li>\u0418\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440.<\/li>\n<li>\u0414\u0430\u043b\u0435\u0435 \u0438\u0445 \u043f\u0430\u0447\u043a\u043e\u0439 \u0437\u0430\u0431\u0438\u0440\u0430\u044e\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u0444\u0430\u0439\u0431\u0435\u0440\u044b \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u0432. \u041f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0418\u0437 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0435\u043c \u0438 \u043e\u0442\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043c\u0438\u0440 (\u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043e\u0442\u0432\u0435\u0442\u044b).<\/li>\n<li>\u0412 \u044f\u0434\u0440\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0442\u0430\u0439\u043c-\u0430\u0443\u0442\u044b, \u0441\u043c\u0435\u043d\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u0432 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/li>\n<li>\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 API \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c\u0438 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0430\u043c\u0438, \u0447\u0442\u043e \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043c\u0438\u0440.<\/li>\n<\/ol>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0434\u0432\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430: \u0431\u0443\u0444\u0435\u0440 \u0438 \u044f\u0434\u0440\u043e. \u0411\u0443\u0444\u0435\u0440 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0442\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 \u044f\u0434\u0440\u0430.<\/p>\n<h2>\u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0431\u0443\u0444\u0435\u0440\u044b<\/h2>\n<p>  \u0411\u0443\u0444\u0435\u0440 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0437\u0430 \u0440\u0430\u0437\u0443\u043c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0438\u043a\u043e\u0432\u044b\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>  \u041a\u0430\u043a\u0438\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438? \u041c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 fiber.channel. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0430\u043d\u0430\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 (\u0444\u0430\u0439\u0431\u0435\u0440) \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 \u0437\u0430\u0431\u0438\u0440\u0430\u0442\u044c. \u041a\u0430\u043a\u0438\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438? \u041a\u0430\u043d\u0430\u043b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0438\u043a\u043e\u0432\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d. \u0410 \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u043d\u0430\u043b \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d, \u0444\u0430\u0439\u0431\u0435\u0440, \u043f\u044b\u0442\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0441\u043b\u043e\u0442 \u0432 \u043a\u0430\u043d\u0430\u043b\u0435, \u0447\u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438: \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043f\u043e\u043a\u0430 \u043a\u0430\u043d\u0430\u043b \u043d\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u041d\u043e \u0435\u0441\u0442\u044c \u0434\u0432\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0435\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u0438 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0438\u0445 \u0442\u0435\u0440\u044f\u0442\u044c \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0438\u043b\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0443\u0437\u043b\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0442\u043e \u043a\u0430\u043d\u0430\u043b \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442. \u041e\u043d \u0432\u0441\u0435 \u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u044b. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043a\u0430\u043d\u0430\u043b \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u043e\u043d\u043d\u043e. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u044b\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0430 \u043f\u043e\u0442\u043e\u043c \u044d\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c, \u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u0443\u043c\u0430\u0442\u044c, \u0433\u0434\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0443\u0436\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <i>tarantool queue<\/i>, \u0438 \u044d\u0442\u043e \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u043e\u043f\u0446\u0438\u0438 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0438 \u0442\u043e\u0433\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0432 WAL \u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0435 \u043f\u0440\u043e\u043f\u0430\u0434\u0443\u0442. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <i>moonlibs\/xqueue<\/i>. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043f\u0430\u0447\u043a\u0430\u043c\u0438, \u0438\u0445 API \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u0435\u043d. \u041f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437 \u0434\u0435\u043b\u0430\u0442\u044c <code>take<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c <code>ack<\/code> \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u0422\u0430\u043a\u0436\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u044d\u0442\u0438\u0445 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u0430 \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u043d\u0435\u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0441\u0440\u0435\u0434\u0430\u0445, \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u043f\u0430\u0441\u0442\u044c, \u0438 \u0442\u043e\u0433\u0434\u0430 \u043d\u0430\u0434\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u043b\u0430 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.<\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0443\u0444\u0435\u0440\u0430. \u0412 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 \u043b\u0435\u0436\u0438\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u043f\u0435\u0439\u0441 (space, \u0442\u0430\u043a \u0432 Tarantool \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b), \u043a\u0443\u0434\u0430 \u043a\u043b\u0430\u0434\u0443\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0435\u0433\u043e id, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u043f\u043e\u043b\u0435\u043c. \u041f\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0435 \u0431\u0435\u0440\u0435\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 id \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0434\u0435\u043a\u0441\u0430. \u041f\u0440\u0438 \u0432\u0437\u044f\u0442\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e id, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u043f\u0435\u0439\u0441\u0435 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u043c N \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0438\u0445 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a, \u043f\u043e\u043a\u0430 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c. \u0414\u043b\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0444\u0430\u0439\u0431\u0435\u0440\u0430, \u0436\u0434\u0443\u0449\u0435\u0433\u043e \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0444\u0435\u0440 \u043f\u0443\u0441\u0442\u043e\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f fiber.cond. \u041f\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0435 \u043d\u043e\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0431\u0443\u0444\u0435\u0440 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f <code>cond:broadcast()<\/code>. API \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:<\/p>\n<ul>\n<li><code>buffer.init(name, schema, opts)<\/code> \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u043f\u0435\u0439\u0441 \u043f\u043e\u0434 \u0431\u0443\u0444\u0435\u0440 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c name; schema \u2014 \u043f\u043e\u043b\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f; opts \u2014 \u043e\u043f\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u043f\u0435\u0439\u0441\u0430;<\/li>\n<li><code>buffer_obj:put(messages)<\/code> \u2014 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0431\u0443\u0444\u0435\u0440;<\/li>\n<li><code>buffer_obj:take(limit)<\/code> \u2014 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e limit;<\/li>\n<li><code>buffer_obj:wait(timeout)<\/code> \u2014 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041c\u0435\u0442\u043e\u0434 <code>take<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u043c\u0435\u0442\u043e\u0434 <code>wait<\/code> \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0438 \u043f\u043e \u0435\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u0440\u0435\u0448\u0430\u0442\u044c, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043b\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e.<\/li>\n<\/ul>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u043b\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u0435\u0451 \u0437\u0434\u0435\u0441\u044c:<\/p>\n<pre><code class=\"lua\">local fiber = require('fiber')  local M = {} local buffer_mt = {}  function buffer_mt:put(messages) \u00a0\u00a0\u00a0\u00a0local last = self.space.index.pk:max() \u00a0\u00a0\u00a0\u00a0local start = 0 \u00a0\u00a0\u00a0\u00a0if last ~= nil then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0start = last.id \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0for i = 1, #messages do \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0local message = messages[i] \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0message.id = start + i \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0local tuple, err = self.space:frommap(message) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if err then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return err \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0self.space:insert(tuple) \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0self.waiter:signal() end  function buffer_mt:take(limit) \u00a0\u00a0\u00a0\u00a0local count = 0 \u00a0\u00a0\u00a0\u00a0local messages = table.new(limit, 0) \u00a0\u00a0\u00a0\u00a0for _, tuple in self.space:pairs(0, { iterator = box.index.GE }) do \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0count = count + 1 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0messages[count] = self.space:delete({ tuple.id }) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if count >= limit then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0return messages end  function buffer_mt:wait(timeout) \u00a0\u00a0\u00a0\u00a0if self.space:len() ~= 0 then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return true \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0return self.waiter:wait(timeout) end  function M.create(name, schema, opts) \u00a0\u00a0\u00a0\u00a0opts = opts or {} \u00a0\u00a0\u00a0\u00a0local fields = { { name = 'id', type = 'unsigned' } } \u00a0\u00a0\u00a0\u00a0table.move(schema, 1, #schema, 2, fields) \u00a0\u00a0\u00a0\u00a0local space = box.schema.space.create(name, { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0engine = 'memtx', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if_not_exists = true, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0temporary = opts.temporary or true, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0is_local = opts.is_local or false, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0format = fields \u00a0\u00a0\u00a0\u00a0})  \u00a0\u00a0\u00a0\u00a0space:create_index('pk', { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0parts = { 'id' }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0type = 'tree', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if_not_exists = true \u00a0\u00a0\u00a0\u00a0})  \u00a0\u00a0\u00a0\u00a0return setmetatable({ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name = name, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0space = space, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0waiter = fiber.cond() \u00a0\u00a0\u00a0\u00a0}, { __index = buffer_mt }) end  return M <\/code><\/pre>\n<p>  \u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e? \u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u0438 \u043e\u0434\u0438\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0430 \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0438\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u0443\u0444\u0435\u0440\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Bluetooth- \u0438\u043b\u0438 WiFi-\u044d\u0444\u0438\u0440\u0430 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f, \u043f\u0440\u0438\u0431\u043e\u0440\u044b \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u044e\u0442 \u0438\u0445 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0438\u0445 \u043f\u043e\u0442\u0435\u0440\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e\u0439. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u0430\u043a\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e. \u0414\u043b\u044f \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043f\u0435\u0439\u0441\u043e\u0432 <code>temporary=true<\/code> \u0438 <code>is_local=true<\/code>, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043d\u0438\u0437\u0438\u0442 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u0434\u0438\u0441\u043a (\u043d\u0435 \u043d\u0430\u0434\u043e \u043f\u0438\u0441\u0430\u0442\u044c WAL). \u0414\u043b\u044f \u0438\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0434\u0432\u043e\u0439\u043d\u0438\u043a<\/h2>\n<p>  \u0410 \u0432\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u2014 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0435 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0438. \u041a\u0430\u043a \u0443\u0436\u0435 \u0440\u0430\u043d\u0435\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c, \u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u2014 \u0434\u0435\u043b\u043e \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u0438 \u043d\u0430\u0434\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0446\u0435\u043b\u044c, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0442 \u043d\u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c. \u041a\u0430\u043a \u043e\u043d\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0432 \u043a\u043e\u0434\u0435? \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u044b\u043b\u0430\u044e\u0442 \u0441\u0432\u043e\u0438, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<p>  \u0422\u043e\u0447\u043a\u0430\u043c\u0438 \u0443\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0438 (\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0430\u043c\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0435 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0438, \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438 API \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043e. \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e, \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u0438 IoT-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0438\u0434\u0435\u044e, \u043d\u0435 \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u044f\u0441\u044c \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0433\u043e \u0448\u043b\u044e\u0437\u0430 Bluetooth-WiFi \u0441 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u043e\u0439 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043b\u044f \u043d\u0438\u0445.<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0441 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u043c \u043f\u043e\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u0441\u0435 \u043f\u0440\u0438\u0431\u043e\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u043d\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u0430\u0433\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438, \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u041f\u0440\u0438\u0431\u043e\u0440 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043c\u0438\u0433\u0430\u0442\u044c \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0430\u043c\u0438, \u043d\u043e \u0432 \u0441\u0435\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0447\u0435\u0442\u044b \u043e \u0441\u0432\u043e\u0435\u0439 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0435. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043c\u043e\u0436\u043d\u043e (\u0438 \u043d\u0443\u0436\u043d\u043e!) \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0442\u043e\u043c<\/p>\n<p>  \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043e\u0446\u0435\u043d\u0438\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b.<\/p>\n<h2>\u042d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0448\u043b\u044e\u0437\u0430 \u0441 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u043e\u0439<\/h2>\n<p>  \u0428\u043b\u044e\u0437 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u043e\u043d \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442 IoT-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u0441\u0432\u043e\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 (\u00ab\u0432\u043a\u043b\u044e\u0447\u0435\u043d\/\u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u00bb) \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434. \u0421\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043c\u0430\u043d\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0448\u043b\u044e\u0437\u043e\u043c:<\/p>\n<ul>\n<li><code>scan<\/code> \u2014 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c Bluetooth-\u044d\u0444\u0438\u0440 \u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u0431\u043e\u0440 \u043f\u0440\u0438\u0441\u043b\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438 \u043a\u043e\u043d\u0446\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u043b\u044e\u0437\u043e\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 <code>scan<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u0440\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u043f\u0440\u0438\u0431\u043e\u0440\u0430 \u0432 \u044d\u0444\u0438\u0440\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 <code>scan &lt;device addr\u0435ss><\/code>;<\/li>\n<li><code>connect &lt;d\u0435vice BLE address><\/code> \u2014 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a BLE-\u043f\u0440\u0438\u0431\u043e\u0440\u0443. \u041f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043c\u0430\u0440\u043a\u0435\u0440 \u201cOK\u201d, \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u2014 \u043c\u0430\u0440\u043a\u0435\u0440 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c;<\/li>\n<li><code>disconnect &lt;d\u0435vice BLE address><\/code> \u2014 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043e\u0442 BLE-\u043f\u0440\u0438\u0431\u043e\u0440\u0430;<\/li>\n<li><code>request &lt;d\u0435vice BLE address>, &lt;comm\u0430nd><\/code> \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c\u0443\u00a0 \u043f\u0440\u0438\u0431\u043e\u0440\u0443 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442.<\/li>\n<\/ul>\n<p>  \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0448\u043b\u044e\u0437 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c:<\/p>\n<ul>\n<li><code>status &lt;d\u0435vice | gat\u0435way>, &lt;stat\u0435><\/code> \u2014 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u043f\u0440\u0438\u0431\u043e\u0440\u0430 \u0438\u043b\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0448\u043b\u044e\u0437\u0430;<\/li>\n<li><code>scan &lt;d\u0435vice BLE>, &lt;d\u0435scription><\/code> \u2014 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u0431\u043e\u0440\u0435.<\/li>\n<\/ul>\n<p>  \u0411\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 Bluetooth \u043d\u0435\u0442, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0435, \u043a\u0430\u043a \u043f\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0443, \u0438\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c.<\/p>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u043a\u0430\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 Tarantool. \u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 demu.lua (\u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 DEvice EMUlator). \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435, \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0440\u0442\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c WAL \u0438 \u0441\u043d\u0438\u043c\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e.<\/p>\n<pre><code class=\"lua\">box.cfg { \u00a0\u00a0\u00a0\u00a0listen = '3302', \u00a0\u00a0\u00a0\u00a0wal_dir = 'demu', \u00a0\u00a0\u00a0\u00a0memtx_dir = 'demu' } <\/code><\/pre>\n<p>  <\/p>\n<h2>\u041e\u0431\u043c\u0435\u043d \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438<\/h2>\n<p>  \u042d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 c IoT-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0442\u043e\u0439 \u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0431\u0443\u0444\u0435\u0440\u0430\/\u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u041a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0434\u0432\u0430 \u043f\u043e\u043b\u044f: <code>message<\/code> \u2014 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u044d\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442, \u0438 <code>args<\/code> \u2014 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0431\u0443\u0444\u0435\u0440\u044b \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"lua\">local buffer = require('buf')  local output = buffer.create('to_net', { \u00a0\u00a0\u00a0\u00a0{ name = 'message', type = 'string', is_nullable = false }, \u00a0\u00a0\u00a0\u00a0{ name = 'args', type = 'array', is_nullable = true } })  local input = buffer.create('from_net', { \u00a0\u00a0\u00a0\u00a0{ name = 'message', type = 'string', is_nullable = false }, \u00a0\u00a0\u00a0\u00a0{ name = 'args', type = 'array', is_nullable = true } }) <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u044d\u0442\u043e \u0432\u0441\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0436\u0438\u0432\u0438\u0442\u044c. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>push_messages<\/code>, \u0447\u0442\u043e\u0431\u044b \u0435\u0451 \u043f\u043e\u0442\u043e\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0445\u043e\u0447\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"lua\">function push_messages(messages) \u00a0\u00a0\u00a0\u00a0box.atomic(input.put, input, messages) end <\/code><\/pre>\n<p>  \u0418 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443: \u0442\u043e, \u0447\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440, \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u0435\u043d \u0444\u0430\u0439\u0431\u0435\u0440. \u0424\u0430\u0439\u0431\u0435\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u043c \u0438\u043c\u044f, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0442\u043e\u043c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u043b\u043e\u0433\u0430\u0445, \u043a\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u0431\u0435\u0440 \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b. \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043e\u0431\u0435\u0440\u0442\u043a\u043e\u0439:<\/p>\n<pre><code class=\"lua\">local fiber = require('fiber') local log = require('log')  local function task(name, fn) \u00a0\u00a0\u00a0\u00a0local proc = fiber.create(function() \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0while true do \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fn() \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0end) \u00a0\u00a0\u00a0\u00a0proc:name(name) \u00a0\u00a0\u00a0\u00a0log.info('created proc %s with fid = %s', name, proc:id())  \u00a0\u00a0\u00a0\u00a0return proc end <\/code><\/pre>\n<p>  \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0439 \u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0432\u0435 \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438: \u043e\u0434\u043d\u0430 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 echo-\u043b\u043e\u0433\u0438\u043a\u0438, \u0434\u0440\u0443\u0433\u0430\u044f \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u043f\u0430\u043b\u043e \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440:<\/p>\n<pre><code class=\"lua\">local function process_input() \u00a0\u00a0\u00a0\u00a0local batch = input:take(100) \u00a0\u00a0\u00a0\u00a0for i = 1, #batch do \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0local message = batch[i] \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0log.info('message from IoT platform: %s', message) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0output:put({{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0message = message.message, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = message.args \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}}) \u00a0\u00a0\u00a0\u00a0end end  task('input processor', function() \u00a0\u00a0\u00a0\u00a0if input:wait(10) then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0box.atomic(process_input) \u00a0\u00a0\u00a0\u00a0end end)  local json = require('json')  task('output processor', function() \u00a0\u00a0\u00a0\u00a0if output:wait(10) then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0local batch = box.atomic(output.take, output, 100) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0log.info('messages to IoT platform: %s', json.encode(batch)) \u00a0\u00a0\u00a0\u00a0end end) <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0434\u043b\u044f WAL \u0438 \u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\">mkdir demu <\/code><\/pre>\n<p>  \u0418 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c:<\/p>\n<pre><code class=\"bash\">tarantool -i demu.lua <\/code><\/pre>\n<p>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>-i<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Tarantool \u0438 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c. \u041f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"plaintext\">2022-12-19 09:50:59.325 [8630] main\/103\/demu2.lua I> created proc input processor with fid = 118 2022-12-19 09:50:59.325 [8630] main\/103\/demu2.lua I> created proc output processor with fid = 119 2022-12-19 09:50:59.325 [8630] main\/103\/demu2.lua C> Tarantool 2.8.4-0-g47e6bd362 type 'help' for interactive help <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u044d\u0442\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>push_messages<\/code>:<\/p>\n<pre><code class=\"bash\">tarantool> push_messages({{message = 'echo'}}) <\/code><\/pre>\n<p>  \u0418 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c\u0441\u044f \u043b\u043e\u0433\u0438:<\/p>\n<pre><code class=\"lua\">tarantool> 2022-12-19 09:52:47.390 [8630] main\/118\/input processor I> message from IoT platform: [1, 'echo'] 2022-12-19 09:52:47.390 [8630] main\/119\/output processor I> messages to IoT platform: [[1,\"echo\"]] <\/code><\/pre>\n<p>  \u041c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u043b\u043e\u0433\u0438\u043a\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>process_input<\/code> \u0438 \u043b\u043e\u0433\u0438\u043a\u0443 <code>output processor<\/code>.<\/p>\n<h2>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439<\/h2>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0435\u0439\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432:<\/p>\n<ul>\n<li><code>gateways<\/code> \u2014 \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0448\u043b\u044e\u0437\u043e\u0432;<\/li>\n<li><code>devices<\/code> \u2014 \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432;<\/li>\n<li><code>ether<\/code> \u2014 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c Bluetooth-\u044d\u0444\u0438\u0440\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0430\u0440\u044b \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 {\u0448\u043b\u044e\u0437, \u043f\u0440\u0438\u0431\u043e\u0440}, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u0437\u043d\u0430\u043a, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u043b\u0438 \u043c\u0435\u0436\u0434\u0443 \u0448\u043b\u044e\u0437\u043e\u043c \u0438 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435.<\/li>\n<\/ul>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0441\u043e \u0448\u043b\u044e\u0437\u043e\u0432. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0441\u0440\u0430\u0437\u0443 \u0432\u0441\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0448\u043b\u044e\u0437\u0430 \u0438 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043c \u0438\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442:<\/p>\n<pre><code class=\"lua\">local GW_WAIT = 0 \u00a0 \u00a0 \u00a0 \u2014 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 local GW_SCANNING = 1 \u00a0 \u2014 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 BT-\u044d\u0444\u0438\u0440\u0430 local GW_CONNECTING = 2 \u2014 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a BLE-\u043f\u0440\u0438\u0431\u043e\u0440\u0443 <\/code><\/pre>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043f\u0435\u0439\u0441 gateways \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043a \u043d\u0435\u043c\u0443:<\/p>\n<pre><code class=\"lua\">local gateways = box.schema.space.create('gateways', { \u00a0\u00a0\u00a0\u00a0if_not_exists = true, \u00a0\u00a0\u00a0\u00a0engine = 'memtx', \u00a0\u00a0\u00a0\u00a0format = { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ name = 'address', type = 'string', is_nullable = false }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ name = 'online', type = 'boolean', is_nullable = false }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ name = 'status', type = 'number', is_nullable = true }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ name = 'state', type = '*', is_nullable = true }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ name = 'updated', type = 'number', is_nullable = true } \u00a0\u00a0\u00a0\u00a0} }) gateways:create_index('pk', { \u00a0\u00a0\u00a0\u00a0type = 'tree', \u00a0\u00a0\u00a0\u00a0if_not_exists = true, \u00a0\u00a0\u00a0\u00a0parts = { 'address' } }) gateways:create_index('pulse', { \u00a0\u00a0\u00a0\u00a0type = 'tree', \u00a0\u00a0\u00a0\u00a0if_not_exists = true, \u00a0\u00a0\u00a0\u00a0unique = false, \u00a0\u00a0\u00a0\u00a0parts = { 'online', 'status', 'updated' } }) <\/code><\/pre>\n<p>  \u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u043f\u043e\u043b\u044f \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b?<\/p>\n<ul>\n<li>\u043f\u043e\u043b\u0435 <code>address<\/code> \u2014 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0448\u043b\u044e\u0437\u0430. \u0412 IoT-\u043c\u0438\u0440\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0447\u0438\u043f\u0430 \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u043e\u0442 \u0441\u0430\u043c\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c;<\/li>\n<li>\u043f\u043e\u043b\u0435 <code>online<\/code> \u2014 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438 \u0448\u043b\u044e\u0437 \u0432 \u0441\u0435\u0442\u0438;\u00a0<\/li>\n<li>\u043f\u043e\u043b\u0435 <code>status<\/code> \u2014 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u0432 \u043a\u0430\u043a\u043e\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0448\u043b\u044e\u0437 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043f\u0440\u0438\u0431\u043e\u0440\u0443). \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430, \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u043c \u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u042d\u0442\u043e \u043f\u043e\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c nullable, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 offline-\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 (\u043a\u043e\u0433\u0434\u0430 \u0448\u043b\u044e\u0437 \u043d\u0435 \u0432 \u0441\u0435\u0442\u0438) \u043d\u0430\u043c \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e;<\/li>\n<li>\u043f\u043e\u043b\u0435 <code>state<\/code> \u0442\u0438\u043f\u0430 <code>any<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438. \u042d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043b\u044f\u0445, \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u0432 \u043a\u043e\u0440\u0442\u0435\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u043e\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435 \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430;<\/li>\n<li>\u043f\u043e\u043b\u0435 <code>updated<\/code> \u2014 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u041f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u044e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b. \u0414\u043b\u044f \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u041a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f, \u043e\u043f\u0438\u0448\u0435\u043c \u043d\u0438\u0436\u0435. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u2014 \u0434\u043e \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434;<\/li>\n<li>\u0438\u043d\u0434\u0435\u043a\u0441 <code>pk<\/code> \u2014 \u044d\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 primary-\u0438\u043d\u0434\u0435\u043a\u0441, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u043c \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432. \u041f\u043e\u043b\u0435 <code>address<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u043e\u043c;<\/li>\n<li>\u0438\u043d\u0434\u0435\u043a\u0441 <code>pulse<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c, \u0438 \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043f\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u043c\u0443 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0432\u0441\u0435\u0445 \u0448\u043b\u044e\u0437\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0444\u0438\u0440\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434, \u0438 \u0447\u0442\u043e-\u0442\u043e \u0441 \u044d\u0442\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u043e\u0439 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u2014 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/li>\n<\/ul>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0430\u043a\u0436\u0435 \u0441\u043f\u0435\u0439\u0441\u044b \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043b\u044f \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u0438 \u044d\u0444\u0438\u0440\u0430:<\/p>\n<pre><code class=\"lua\">local devices = box.schema.space.create('devices', { \u00a0\u00a0\u00a0\u00a0if_not_exists = true, \u00a0\u00a0\u00a0\u00a0engine = 'memtx', \u00a0\u00a0\u00a0\u00a0format = { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ name = 'address', type = 'string', is_nullable = false }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ name = 'switch', type = 'boolean', is_nullable = false } \u00a0\u00a0\u00a0\u00a0} }) devices:create_index('pk', { \u00a0\u00a0\u00a0\u00a0type = 'tree', \u00a0\u00a0\u00a0\u00a0if_not_exists = true, \u00a0\u00a0\u00a0\u00a0parts = { 'address' } })  local ether = box.schema.space.create('ether', { \u00a0\u00a0\u00a0\u00a0if_not_exists = true, \u00a0\u00a0\u00a0\u00a0engine = 'memtx', \u00a0\u00a0\u00a0\u00a0format = { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ name = 'gateway', type = 'string', is_nullable = false }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ name = 'device', type = 'string', is_nullable = false }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ name = 'connected', type = 'boolean', is_nullable = false } \u00a0\u00a0\u00a0\u00a0} }) ether:create_index('pk', { \u00a0\u00a0\u00a0\u00a0type = 'tree', \u00a0\u00a0\u00a0\u00a0if_not_exists = true, \u00a0\u00a0\u00a0\u00a0parts = { 'gateway', 'device' } }) <\/code><\/pre>\n<p>  \u0421\u043f\u0435\u0439\u0441 devices \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442 \u0434\u0432\u0430 \u043f\u043e\u043b\u044f \u2014 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code>address<\/code> \u0438 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0438: \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0438\u043b\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0430. \u0412 \u0441\u043f\u0435\u0439\u0441\u0435 ether \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c Bluetooth-\u044d\u0444\u0438\u0440\u0430. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043b\u044f \u0448\u043b\u044e\u0437\u043e\u0432 GATE-X \u0438 BULB-Y, \u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0448\u043b\u044e\u0437 \u0432\u0438\u0434\u0438\u0442 \u0432 \u044d\u0444\u0438\u0440\u0435 \u044d\u0442\u0443 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0443. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>connected<\/code> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 <code>true<\/code>, \u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u0448\u043b\u044e\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u044d\u0442\u043e\u0439 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u043e\u0439 \u043f\u043e Bluetooth.<\/p>\n<p>  \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0441\u043f\u0435\u0439\u0441\u0430\u0445, \u0441\u0435\u0439\u0447\u0430\u0441 \u0431\u0435\u0437\u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0436\u0438\u0437\u043d\u0438. \u0415\u0441\u043b\u0438 \u00ab\u0441\u043e\u0442\u0432\u043e\u0440\u0438\u0442\u044c\u00bb \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0448\u043b\u044e\u0437 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>box.space.gateways.insert({ &lt;addr\u0435ss>, false })<\/code>, \u0442\u043e \u00ab\u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u00bb \u0435\u0433\u043e \u0438\u043b\u0438 \u00ab\u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u00bb \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"lua\">function switch_gateway(address, flag) \u00a0\u00a0\u00a0\u00a0local gateway = box.space.gateways:get(address) \u00a0\u00a0\u00a0\u00a0if gateway.online == flag then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return false \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0local next_status, next_state \u00a0\u00a0\u00a0\u00a0if flag then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0next_status = GW_WAIT \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0next_state = box.NULL \u00a0\u00a0\u00a0\u00a0else \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0next_status = box.NULL \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0next_state = box.NULL \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0return box.atomic(function() \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0box.space.gateways:update(address, { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'online', flag }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'status', next_status }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'state', next_state } \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0output:put({{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0message = 'status', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = { 'gateway', address, { online = flag } } \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}}) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for _, pair in box.space.ether:pairs({ address }) do \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0box.space.ether:update( \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ pair.gateway, pair.device }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{{ '=', 'connected', false }} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return true \u00a0\u00a0\u00a0\u00a0end) end <\/code><\/pre>\n<p>  \u041a \u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u0434\u0443 \u0435\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f:<\/p>\n<ol>\n<li>\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>switch_gateway<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e IProto \u043a\u0435\u043c-\u043d\u0438\u0431\u0443\u0434\u044c, \u043a\u0442\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c. \u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430! \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u0431\u043e\u0440\u0430, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0438\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435, \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430.<\/li>\n<li>\u041f\u0440\u0438 \u00ab\u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438\/\u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438\u00bb \u043c\u0435\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0448\u043b\u044e\u0437\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u043c \u0432 \u043c\u0438\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c (\u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0438\u043b\u0438 \u0438\u0441\u0447\u0435\u0437 \u0438\u0437 \u0441\u0435\u0442\u0438).<\/li>\n<\/ol>\n<p>  \u0418\u0442\u0430\u043a, \u0448\u043b\u044e\u0437 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e\u0431 \u044d\u0442\u043e\u043c \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 \u043c\u0438\u0440\u0443. \u041f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u043e. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"lua\">tarantool> box.space.gateways:insert({ 'GATE-X', false }) tarantool> switch_gateway('GATE-X', true) <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>switch_gateway<\/code> \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0442\u0447\u0438\u0442\u0430\u043b\u0441\u044f \u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0448\u043b\u044e\u0437\u0430:<\/p>\n<pre><code class=\"plaintext\">2022-12-19 10:12:07.589 [10576] main\/119\/output processor I> messages to IoT platform: [[1,\"status\",[\"gateway\",{\"online\":true}]]] <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0448\u043b\u044e\u0437\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c:<\/p>\n<pre><code class=\"lua\">tarantool> box.space.gateways:get('GATE-X') --- - ['GATE-X', true, 0, null] ... <\/code><\/pre>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u0448\u043b\u044e\u0437 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043c\u0438\u0440\u0430. \u0423 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u041d\u0443\u0436\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0435\u0451 \u043b\u043e\u0433\u0438\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 <code>handlers<\/code> \u0438 \u0431\u0443\u0434\u0435\u043c \u0432 \u043d\u0435\u0439 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0410 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0445 \u0441\u0442\u0430\u043d\u0435\u043c \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043a\u043b\u044e\u0447\u0430 <code>message<\/code> \u0438\u0437 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>scan<\/code>:<\/p>\n<pre><code class=\"lua\">local clock = require('clock')  local function now() \u00a0\u00a0\u00a0\u00a0return math.floor(clock.realtime() * 1000) end  local handlers = {}  function handlers.scan(address) \u00a0\u00a0\u00a0\u00a0local gate = box.space.gateways:get(address) \u00a0\u00a0\u00a0\u00a0if not gate or not gate.online then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0if gate.status ~= GW_WAIT then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return output:put({{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0message = 'scan', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = { address, box.NULL, 'BUSY' } \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}}) \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0box.space.gateways:update(address, { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'status', GW_SCANNING }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'state', {} }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'updated', now() } \u00a0\u00a0\u00a0\u00a0}) end <\/code><\/pre>\n<p>  \u042d\u0442\u043e\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0448\u043b\u044e\u0437 (\u0435\u0433\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432 \u0441\u043f\u0435\u0439\u0441\u0435) \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0448\u043b\u044e\u0437 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d, \u0442\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f (\u043d\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0430); \u0430 \u0435\u0441\u043b\u0438 \u0448\u043b\u044e\u0437 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u043c \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438, \u0442\u043e \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e, \u0448\u043b\u044e\u0437 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>GW_SCANNING<\/code>. \u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435 <code>updated<\/code>, \u043e\u043d\u043e \u0441\u044b\u0433\u0440\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0440\u043e\u043b\u044c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>  \u0418 \u043d\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <code>process_input<\/code>:<\/p>\n<pre><code class=\"lua\">local function process_input() \u00a0\u00a0\u00a0\u00a0local batch = input:take(100) \u00a0\u00a0\u00a0\u00a0for i = 1, #batch do \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0local message = batch[i] \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0log.info('message from IoT platform: %s', message) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0local handler = handlers[message.message] \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if handler ~= nil then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0handler(unpack(message.args)) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0end end <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c, \u0447\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>scan<\/code>, \u043f\u043e\u0441\u043b\u0430\u043d\u043d\u0430\u044f \u0448\u043b\u044e\u0437\u0443, \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0448\u043b\u044e\u0437 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0434\u0435, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u043e\u0441\u044c \u043b\u0438\u0431\u043e \u0432 WAL, \u043b\u0438\u0431\u043e \u0432 \u0441\u043d\u0438\u043c\u043a\u0435, \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0443\u0436\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0441\u043e \u0448\u043b\u044e\u0437\u043e\u043c \u043d\u0435 \u043d\u0430\u0434\u043e:<\/p>\n<pre><code class=\"lua\">tarantool> push_messages({{ message = 'scan', args = { 'GATE-X' }}}) <\/code><\/pre>\n<p>  \u0418 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432 \u043b\u043e\u0433\u0430\u0445 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"plaintext\">tarantool> 2022-12-19 10:52:44.453 [13600] main\/118\/input processor I> message from IoT platform: [1, 'scan', ['GATE-X']] <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0448\u043b\u044e\u0437\u0430:<\/p>\n<pre><code class=\"lua\">tarantool> box.space.gateways:get('GATE-X') --- - ['GATE-X', true, 1, [], 1671483739134] ... <\/code><\/pre>\n<p>  \u0415\u0434\u0438\u043d\u0438\u0447\u043a\u0430 \u0432 \u043f\u043e\u043b\u0435 <code>status<\/code> \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043d\u0430\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0448\u043b\u044e\u0437 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0438 \u0442\u0430\u043a\u0436\u0435 \u0432\u0438\u0434\u0438\u043c, \u043a\u043e\u0433\u0434\u0430 \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0438 \u0432 \u044d\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u043f\u0440\u043e\u0441: \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f? \u041c\u043e\u0436\u043d\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u0440\u0430\u0437\u0443 \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>scan<\/code> \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u0438\u0437 \u0441\u043f\u0435\u0439\u0441\u0430 ether, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u044c\u044e, \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u043e\u0439 \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0444\u0438\u0440\u0430. \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u044d\u0444\u0438\u0440 \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e.\u00a0<\/p>\n<p>  \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u043b\u043e\u0431 \u2014 \u044d\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u043e \u0444\u0430\u0439\u0431\u0435\u0440\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0448\u043b\u044e\u0437, \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c <code>fiber.sleep(delay)<\/code>, \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e \u0441\u043f\u0435\u0439\u0441\u0443 ether \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u041d\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435\u0443\u0434\u043e\u0431\u0435\u043d \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u0431\u0435\u0440\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 pulse \u0441\u043f\u0435\u0439\u0441\u0430 gateways. \u0418\u0434\u0435\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f: \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0430\u043a\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0448\u043b\u044e\u0437\u044b \u0432 \u0441\u0435\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041f\u043e \u044d\u0442\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u041d\u0430\u0437\u043e\u0432\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0444\u0430\u0437. \u0412\u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u0444\u0430\u0437\u0430\u043c:<\/p>\n<pre><code class=\"lua\">local function process_gateway_phase(phase, delay, fn) \u00a0\u00a0\u00a0\u00a0local ts = now() - delay * 1000 \u00a0\u00a0\u00a0\u00a0local processed = 0 \u00a0\u00a0\u00a0\u00a0repeat \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0processed = box.atomic(function() \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return box.space.gateways.index.pulse \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0:pairs({ true, phase, ts }, { iterator = 'LE' }) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0:take(function(gateway) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return gateway.online and gateway.status == phase \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0:take(100) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0:map(fn) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0:length() \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if processed > 0 then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0log.info('phase %s, processed: %s', phase, processed) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0until processed == 0 end <\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>process_gateway_phase<\/code> \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u0437 \u0441\u043f\u0435\u0439\u0441\u0430 \u0434\u043e 100 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0437 \u043d\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u043e\u0439, \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044f \u044d\u0442\u043e \u0432\u0441\u0435 \u0432 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0437\u0430 \u0440\u0430\u0437 \u043d\u0443\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a Tarantool \u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441 \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043c\u043d\u043e\u0433\u043e\u0437\u0430\u0434\u0430\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0443\u043c\u0435\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u043a\u0443\u0441\u043e\u0447\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043c\u0435\u0448\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0449\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e (\u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0448\u043b\u044e\u0437\u0430 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f):<\/p>\n<pre><code class=\"lua\">local function gateway_to_waiting(gateway) \u00a0\u00a0\u00a0\u00a0box.space.gateways:update(gateway.address, { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'state', box.NULL }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'status', GW_WAIT }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'updated', now() } \u00a0\u00a0\u00a0\u00a0}) end <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0438 \u0432\u044b\u0434\u0430\u044e\u0449\u0438\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u0432\u0441\u0435\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0444\u0430\u0437\u0435 \u0438 \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0441\u0442\u0435\u043a\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f, \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u043e\u0447\u043d\u0435\u0435 \u0435\u0433\u043e \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0448\u043b\u044e\u0437\u0430 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437 \u0441\u043f\u0435\u0439\u0441\u0430 ether \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u042d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u044b \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0437\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043d\u0435\u0442, \u0442\u043e \u0448\u043b\u044e\u0437 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u043f\u043e \u044d\u0442\u043e\u0439 \u0444\u0430\u0437\u0435. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c, \u0442\u043e \u0448\u043b\u044e\u0437 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0444\u0430\u0437\u0435, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f, \u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u0431\u043e\u0440 \u0438\u0437 \u0441\u043f\u0435\u0439\u0441\u0430 ether \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 <code>state<\/code> \u043a\u043e\u0440\u0442\u0435\u0436\u0430.<\/p>\n<pre><code class=\"lua\">local function gateway_scan(gateway) \u00a0\u00a0\u00a0\u00a0local last_device = gateway.state.last_scan \u00a0\u00a0\u00a0\u00a0local key = { gateway.address, last_device or '' } \u00a0\u00a0\u00a0\u00a0local scanned = box.space.ether:pairs(key, { iterator = 'GT' }):nth(1) \u00a0\u00a0\u00a0\u00a0if scanned == nil then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0gateway_to_waiting(gateway) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return output:put({{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0message = 'scan', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = { gateway.address, box.NULL, 'OK' } \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}}) \u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0local device = box.space.devices:get(scanned.device) \u00a0\u00a0\u00a0\u00a0if device ~= nil then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0output:put({{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0message = 'scan', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = { gateway.address, device.address, 'OK' } \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}}) \u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0box.space.gateways:update(gateway.address, { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'updated', now() }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'state', { last_scan = scanned.device } } \u00a0\u00a0\u00a0\u00a0}) end  local SCAN_DELAY = 2 task('scanner', function() \u00a0\u00a0\u00a0\u00a0process_gateway_phase(GW_SCANNING, SCAN_DELAY, gateway_scan) \u00a0\u00a0\u00a0\u00a0fiber.sleep(0.001) end) <\/code><\/pre>\n<p>  \u0423\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043d\u043e \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"lua\">tarantool> box.space.devices:insert({'BULB-Y', false}) tarantool> box.space.devices:insert({'BULB-Z', false}) tarantool> box.space.ether:insert({'GATE-X', 'BULB-Z', false}) tarantool> box.space.ether:insert({'GATE-X', 'BULB-Y', false}) tarantool> push_messages({{message = 'scan', args = {'GATE-X'}}}) <\/code><\/pre>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 \u0443\u0432\u0438\u0434\u0438\u043c \u043b\u043e\u0433\u0438:<\/p>\n<pre><code class=\"plaintext\">tarantool> 2022-12-20 00:29:24.726 [8386] main\/118\/input processor I> message from IoT platform: [1, 'scan', ['GATE-X']] 2022-12-20 00:29:26.726 [8386] main\/119\/output processor I> messages to IoT platform: [[1,\"scan\",[\"GATE-X\",\"BULB-Y\",\"OK\"]]] 2022-12-20 00:29:26.726 [8386] main\/120\/scanner I> phase 1, processed: 1 2022-12-20 00:29:28.727 [8386] main\/119\/output processor I> messages to IoT platform: [[1,\"scan\",[\"GATE-X\",\"BULB-Z\",\"OK\"]]] 2022-12-20 00:29:28.727 [8386] main\/120\/scanner I> phase 1, processed: 1 2022-12-20 00:29:30.727 [8386] main\/119\/output processor I> messages to IoT platform: [[1,\"scan\",[\"GATE-X\",null,\"OK\"]]] 2022-12-20 00:29:30.727 [8386] main\/120\/scanner I> phase 1, processed: 1 <\/code><\/pre>\n<p>  \u0423\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u043f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u043b\u044e\u0437 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435:<\/p>\n<pre><code class=\"lua\">tarantool> box.space.gateways:get('GATE-X') --- - ['GATE-X', true, 0, null, 1671485370725] ... <\/code><\/pre>\n<p>  <\/p>\n<h2>\u0414\u0440\u0443\u0433\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u0444\u0430\u0437<\/h2>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u0435\u043b\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b connect \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0448\u043b\u044e\u0437 \u0432 \u0444\u0430\u0437\u0443 <code>GW_CONNECTING<\/code>, \u0438 \u0434\u0430\u043b\u0435\u0435 \u0435\u0433\u043e \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u0431\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e\u0439 \u0444\u0430\u0437\u044b.<\/p>\n<pre><code class=\"lua\">function handlers.connect(gateway, device) \u00a0\u00a0\u00a0\u00a0local gate = box.space.gateways:get(gateway) \u00a0\u00a0\u00a0\u00a0if gate == nil then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return output:put({ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0message = 'connect', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = { gateway, device, 'NO_GATEWAY' } \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}) \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0if gate.status ~= GW_WAIT then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return output:put({ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0message = 'connect', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = { gateway, device, 'BUSY' } \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}) \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0box.space.gateways:update(gateway, { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'status', GW_CONNECTING }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'state', { connecting = device }}, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'updated', now() } \u00a0\u00a0\u00a0\u00a0}) end <\/code><\/pre>\n<p>  \u0424\u043e\u043d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u0430\u0437\u044b <code>GW_CONNECTING<\/code>:<\/p>\n<pre><code class=\"lua\">local function gateway_connect(gateway) \u00a0\u00a0\u00a0\u00a0local device = gateway.state.connecting \u00a0\u00a0\u00a0\u00a0box.space.ether:update( \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ gateway.address, device }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{{ '=', 'connected', true }} \u00a0\u00a0\u00a0\u00a0) \u00a0\u00a0\u00a0\u00a0gateway_to_waiting(gateway) \u00a0\u00a0\u00a0\u00a0output:put({{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0message = 'connect', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = { gateway.address, device, 'OK' } \u00a0\u00a0\u00a0\u00a0}}) end  local CONNECT_DELAY = 2 task('connector', function() \u00a0\u00a0\u00a0\u00a0process_gateway_phase(GW_CONNECTING, CONNECT_DELAY, gateway_connect) \u00a0\u00a0\u00a0\u00a0fiber.sleep(0.001) end) <\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>disconnect<\/code>:<\/p>\n<pre><code class=\"lua\">function handlers.disconnect(gateway, device) \u00a0\u00a0\u00a0\u00a0local gate = box.space.gateways:get(gateway) \u00a0\u00a0\u00a0\u00a0if gate == nil then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0output:put({ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0message = 'disconnect', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = { gateway, 'NO_GATEWAY' } \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0if gate.status ~= GW_WAIT then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0output:put({ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0message = 'disconnect', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = { gateway, 'BUSY' } \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0box.space.ether:update( \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ gateway, device }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{{ '=', 'connected', false }} \u00a0\u00a0\u00a0\u00a0) \u00a0\u00a0\u00a0\u00a0output:put({{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0message = 'disconnect', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = { gateway, device, 'OK' } \u00a0\u00a0\u00a0\u00a0}}) end <\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>request<\/code>:<\/p>\n<pre><code class=\"lua\">function handlers.request(gateway, device, command) \u00a0\u00a0\u00a0\u00a0local pair = box.space.ether:get({ gateway, device }) \u00a0\u00a0\u00a0\u00a0if not pair.connected then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return output:put({{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0message = 'command', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = { gateway, device, 'DISCONNECTED' } \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}}) \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0local reply \u00a0\u00a0\u00a0\u00a0if command == 'switch_on' then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0box.space.devices:update(device, {{ '=', 'switch', true }}) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0reply = { switch = true } \u00a0\u00a0\u00a0\u00a0elseif command == 'switch_off' then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0box.space.devices:update(device, {{ '=', 'switch', false }}) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0reply = { switch = false } \u00a0\u00a0\u00a0\u00a0elseif command == 'get_state' then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0local unit = box.space.devices:get(device) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0reply = { switch = unit.switch } \u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0output:put({{ message = 'command', args = { gateway, device, reply } }}) end <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u0431\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c \u0438 \u0441 \u043c\u0435\u0442\u043a\u043e\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0440\u0430\u0432\u043d\u043e\u0439 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435: \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u043a\u0443 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 output processor \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u044b <code>netbox.call<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/p>\n<p>  \u041a\u0430\u043a \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u2014 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \ud83d\ude42<\/p>\n<h2>\u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0434\u0432\u043e\u0439\u043d\u0438\u043a \u0434\u043b\u044f \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430<\/h2>\n<p>  \u041a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u043c \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430? \u041a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0434\u0432\u043e\u0439\u043d\u0438\u043a \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0441\u0430\u043c \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440, \u043a\u043e\u0434 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0439.<\/p>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 Tarantool, \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 ditwin.lua (\u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 Digital Twin):<\/p>\n<pre><code class=\"lua\">box.cfg { \u00a0\u00a0\u00a0\u00a0listen = '3301', \u00a0\u00a0\u00a0\u00a0wal_dir = 'ditwin', \u00a0\u00a0\u00a0\u00a0memtx_dir = 'ditwin' } <\/code><\/pre>\n<p>  \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u0434 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d: \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0431\u0443\u0444\u0435\u0440\u044b \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 (input \u0438 output), \u0441\u043f\u0435\u0439\u0441\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043f\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0420\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043b\u043e\u0433\u0438\u043a\u0435, \u043d\u0430\u0431\u043e\u0440\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0435 \u0441\u043f\u0435\u0439\u0441\u043e\u0432:<\/p>\n<ul>\n<li>gateways \u2014 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0448\u043b\u044e\u0437\u0430 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f (\u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a \u0448\u043b\u044e\u0437\u0443 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435);<\/li>\n<li>devices \u2014 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u0438\u0431\u043e\u0440\u0430 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f;<\/li>\n<li>ether \u2014 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439.<\/li>\n<\/ul>\n<p>  \u041f\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0443 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0441\u043f\u0435\u0439\u0441\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u043f\u0435\u0439\u0441\u0430\u043c \u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d input processor, \u0438 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c output processor.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u0444\u0430\u0437.<\/p>\n<h2>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441\u0430<\/h2>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0432 IoT-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0448\u043b\u044e\u0437 \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f, \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0438 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0444\u0438\u0440\u0430. \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0448\u043b\u044e\u0437 \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043d\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0441\u043f\u0435\u0439\u0441, \u0442\u043e \u0432\u0441\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f.<\/p>\n<pre><code class=\"lua\">function handlers.status(device_type, address, state) \u00a0\u00a0\u00a0\u00a0if \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0device_type ~= 'gateway' or \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0not box.space.gateways:get(address) or \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0description.online == nil \u00a0\u00a0\u00a0\u00a0then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0local status, state, updated \u00a0\u00a0\u00a0\u00a0if description.online then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0status = GW_SCANNING \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0state = {} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0updated = now() \u00a0\u00a0\u00a0\u00a0else \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0status = box.NULL \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0state = box.NULL \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0updated = box.NULL \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0box.space.gateways:update(address, { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'online', description.online }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'status', status }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'state', {} }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'updated', updated } \u00a0\u00a0\u00a0\u00a0})  \u00a0\u00a0\u00a0\u00a0if description.online then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0output:put({{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0message = 'scan', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = { address } \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}}) \u00a0\u00a0\u00a0\u00a0end end <\/code><\/pre>\n<p>  <\/p>\n<h2>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>  \u041f\u043e\u043a\u0430 \u0448\u043b\u044e\u0437 \u043d\u0435 \u043f\u0440\u0438\u0441\u043b\u0430\u043b \u043f\u0443\u0441\u0442\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 <code>scan<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0432\u0441\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u0431\u043e\u0440\u044b \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u043f\u0435\u0439\u0441 ether. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u043b\u044e\u0437 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>GW_CONNECTING<\/code> \u0438 \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u0431\u043e\u0440\u0443 \u0438\u0437 \u0441\u043f\u0435\u0439\u0441\u0430 ether.\u00a0 \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f.<\/p>\n<pre><code class=\"lua\">local function connect_next_device(gateway) \u00a0\u00a0\u00a0\u00a0local prev_device = gateway.state.last_connect or '' \u00a0\u00a0\u00a0\u00a0local next_device = box.space.ether \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0:pairs({ gateway, prev_device }, { iterator = 'GT' }) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0:nth(1)  \u00a0\u00a0\u00a0\u00a0if next_device == nil or next_device.gateway ~= gateway then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0gateway_to_waiting(gateway) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0output:put({{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0message = 'connect', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0args = { gateway, next_device.device } \u00a0\u00a0\u00a0\u00a0}}) \u00a0\u00a0\u00a0\u00a0box.space.gateways:update(gateway, { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'updated', now() }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'state', { last_connect = next_device.device } } \u00a0\u00a0\u00a0\u00a0}) end  function handlers.scan(gateway, device, result) \u00a0\u00a0\u00a0\u00a0local gate = box.space.gateways:get(gateway) \u00a0\u00a0\u00a0\u00a0if gate == nil or gate.state ~= GW_SCANNING then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0if device == nil then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0local next_status \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if result ~= 'OK' then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0box.space.ether:pairs({gateway}):each(function(item) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0box.space.ether:delete({item.gateway, item.device}) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0next_status = GW_WAIT \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0next_status = GW_CONNECTING \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0box.space.gateways:update(gateway, { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'status', next_status }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'updated', now() } \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if next_status == GW_CONNECTING then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0connect_next_device(gateway) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0if not box.space.devices:get(device) then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0box.space.ether:insert({ gateway, device, false }) \u00a0\u00a0\u00a0\u00a0box.space.gateways:update(gateway, { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'status', GW_SCANNING }, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ '=', 'updated', now() } \u00a0\u00a0\u00a0\u00a0}) end <\/code><\/pre>\n<p>  <\/p>\n<h2>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439<\/h2>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u0448\u043b\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u0431\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"lua\">function handlers.connect(gateway, device, result) \u00a0\u00a0\u00a0\u00a0local gate = box.space.gateways:get(gateway) \u00a0\u00a0\u00a0\u00a0local dev = box.space.gateways:get(device) \u00a0\u00a0\u00a0\u00a0if gate == nil or device == nil or gate.status ~= GW_CONNECTING then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0if result ~= 'OK' then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0gateway_to_waiting(gate) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0box.space.ether:update({gateway, device}, {{'=', 'connected', true}}) \u00a0\u00a0\u00a0\u00a0connect_next_device(gate) end <\/code><\/pre>\n<p>  <\/p>\n<h2>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a, \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434<\/h2>\n<p>  \u0411\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0448\u043b\u044e\u0437 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u0442\u0438\u043f\u0430 \u0432\u043e\u0432\u0440\u0435\u043c\u044f, \u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 (\u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c) \u0438 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0448\u043b\u044e\u0437 \u0432 \u0440\u0435\u0436\u0438\u043c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u0432 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u043e\u0439 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>process_gateway_phase<\/code>. \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u0438\u0445 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0442\u0435\u043c \u0436\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c, \u0442\u043e\u0447\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432\u043e\u0437\u043b\u043e\u0436\u0438\u043c \u043d\u0430 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \ud83d\ude42<\/p>\n<h2>\u0421\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u0435\u0440\u0432\u0438\u0441<\/h2>\n<p>  \u0412 Tarantool \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c guest, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e; \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0438\u043c \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u043c \u0435\u043c\u0443 \u043f\u0440\u0430\u0432\u0430 \u0441\u0443\u043f\u0435\u0440\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 demu.lua \u0438 ditwin.lua, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 \u0441 box.cfg \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"lua\">pcall(function() \u00a0\u00a0\u00a0\u00a0box.schema.user.grant('guest', 'super') end) <\/code><\/pre>\n<p>  \u0418 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0432 \u043e\u0431\u0430 \u043c\u043e\u0434\u0443\u043b\u044f (\u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u043e\u0440\u0442\u043e\u0432 \u0434\u043b\u044f \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f):<\/p>\n<pre><code class=\"lua\">local connection  local function get_connection() \u00a0\u00a0\u00a0\u00a0if connection == nil then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0connection = net.connect('127.0.0.1:3301', { user = 'guest' }) \u00a0\u00a0\u00a0\u00a0end  \u00a0\u00a0\u00a0\u00a0return connection end <\/code><\/pre>\n<p>  \u0417\u0430\u043c\u0435\u043d\u0438\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e output processor:<\/p>\n<pre><code class=\"lua\">task('output processor', function() \u00a0\u00a0\u00a0\u00a0if output:wait(10) then \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0local batch = box.atomic(output.take, output, 100) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0log.info('messages to IoT platform: %s', json.encode(batch)) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0local connection = get_connection() \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0local formatted_batch = {} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for _, message in ipairs(batch) do \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0table.insert(formatted_batch, message:tomap({names_only = true})) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0connection:call('push_messages', { formatted_batch }) \u00a0\u00a0\u00a0\u00a0end end) <\/code><\/pre>\n<p>  \u0418 \u0441 \u044d\u0442\u0438\u043c \u043c\u0430\u043a\u0435\u0442\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c: \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0448\u043b\u044e\u0437\u044b \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c, \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0437\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0444\u0438\u0440\u0430, \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u043f\u0440\u043e\u0447\u0438\u043c\u0438 \u0432\u0435\u0441\u0435\u043b\u044b\u043c\u0438 \u0448\u0442\u0443\u043a\u0430\u043c\u0438.<\/p>\n<h2>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 Tuya-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439<\/h2>\n<p>  \u0418\u0437\u0443\u0447\u0438\u0432 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u0432, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b IoT.\u00a0 \u041a\u0430\u043a \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 Tuya \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0431\u043e\u0440\u0430\u043c\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0438 \u0447\u0435\u0440\u0435\u0437 API \u0441\u0430\u043c\u043e\u0439 Tuya, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u043e\u0447\u043a\u0443 \u0443\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u0432 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u044c \u0435\u0449\u0435 \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c API-\u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439 \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439, \u043d\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 Tarantool.<\/p>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442: \u0432 Tuya \u043b\u044e\u0431\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 API \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u0432 \u043e\u0431\u043b\u0430\u043a\u0435 Tuya \u0441\u0442\u043e\u044f\u0442 \u0434\u0435\u043d\u0435\u0433. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u043e \u0435\u0441\u0442\u044c Tarantool \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0438 \u043a\u0430\u043a \u043a\u044d\u0448, \u0447\u0442\u043e\u0431\u044b \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u044b, \u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043a\u044d\u0448\u0430.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043a \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0438 \u043a\u044d\u0448\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e Tuya \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b, \u0436\u0435\u043b\u0435\u0437\u043a\u0438 \u0432\u0441\u0435 \u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a, \u0447\u0442\u043e \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0440\u0438\u0431\u043e\u0440, \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0437\u0430\u0432\u043e\u0434\u043e\u043c, \u0441\u043f\u0430\u043c\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043b\u0430\u0442\u0438\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Tarantool \u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u043e\u0432 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u0441 \u0446\u0435\u043b\u044c\u044e \u043e\u0442\u043b\u043e\u0432\u0430 \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0434\u043e\u0431\u0440\u043e\u0441\u043e\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432.<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Tuya \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Tarantool \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ol>\n<li>\u0421\u0435\u0440\u0432\u0438\u0441 \u0441 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c\u0438 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0430\u043c\u0438, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 \u043e\u0442 \u043e\u0431\u043b\u0430\u043a\u0430 Tuya \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0438\u0445 \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442. \u0422\u0430\u043a\u0436\u0435 \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u0430\u0435\u0442 API \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0442\u043e\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 API Tuya.<\/li>\n<li>\u0421\u0435\u0440\u0432\u0438\u0441, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043a Pulsar-\u0431\u0440\u043e\u043a\u0435\u0440\u0443 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 Tuya \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0432 \u0441\u0435\u0440\u0432\u0438\u0441 \u0441 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c\u0438 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0430\u043c\u0438.<\/li>\n<li>\u0421\u0435\u0440\u0432\u0438\u0441 API, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0438 \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u0432 API Tuya, \u0430 \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c\u0438 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0430\u043c\u0438.<\/li>\n<\/ol>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0441 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c\u0438 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0430\u043c\u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u043d\u044c\u0448\u0438\u043c\u0438 \u0443\u0441\u0438\u043b\u0438\u044f\u043c\u0438.<\/p>\n<h2>\u0412\u044b\u0432\u043e\u0434\u044b, \u0438 \u043e \u0447\u0435\u043c \u043c\u044b \u043d\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0442\u0430\u0442\u044c\u0438<\/h2>\n<p>  \u0412\u044b\u0432\u043e\u0434 \u043f\u0435\u0440\u0432\u044b\u0439: \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Tarantool \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0443\u0434\u043e\u0431\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a Tarantool \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u0412\u044b\u0432\u043e\u0434 \u0432\u0442\u043e\u0440\u043e\u0439: Tarantool \u0445\u043e\u0440\u043e\u0448 \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0441\u0432\u044f\u0437\u0443\u044e\u0449\u0435\u0435 \u0437\u0432\u0435\u043d\u043e \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043e\u0436\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043e\u0431\u044a\u0435\u043c\u044b \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u041c\u044b \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0448\u0430\u0440\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u0434\u0435\u0440\u0436\u0430\u043b\u0438 \u044d\u0442\u043e \u0432 \u0443\u043c\u0435. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0448\u0430\u0440\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0440\u0430\u0437\u0440\u0435\u0437\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0448\u0430\u0440\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043d\u0435\u043b\u044c\u0437\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0438\u0431\u043e\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0433\u0440\u0443\u043f\u043f\u0430 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0448\u0430\u0440\u0434.<\/p>\n<p>  \u041c\u044b \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043e\u0431\u043c\u0435\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0438 \u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u044d\u0442\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b\u043e \u0431\u044b \u0441\u0442\u0430\u0442\u044c\u044e, \u043d\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0431\u044b\u043b \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u0432 \u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0444\u0430\u0437 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u0431\u0435\u0440\u043e\u0432. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0438 \u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438 \u043e\u0442 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u2014 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0431\u0448\u0438\u0440\u043d\u0430\u044f \u0442\u0435\u043c\u0430.<\/p>\n<p>  \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0437\u0430\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 <code>fiber.sleep(T)<\/code>, \u0447\u0442\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u0432. \u042d\u0442\u043e \u0442\u043e\u0436\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435. \u041f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u0432 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  \u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0447\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \ud83d\ude42<\/p>\n<p>  \u0421\u043a\u0430\u0447\u0430\u0442\u044c Tarantool \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/www.tarantool.io\/ru\/download?utm_source=habr&amp;utm_medium=articles&amp;utm_campaign=2021\">\u043d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435<\/a>, \u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043c\u043e\u0449\u044c \u2014 <a href=\"https:\/\/t.me\/tarantoolru?utm_source=habr&amp;utm_medium=articles&amp;utm_campaign=2021\">\u0432 Telegram-\u0447\u0430\u0442\u0435<\/a>.<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/720952\/\"> https:\/\/habr.com\/ru\/company\/vk\/blog\/720952\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/vk.com\/rtrg?p=VK-RTRG-1288550-e6f1C\" width=\"1\" style=\"display: none;\"><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/top-fwz1.mail.ru\/counter?id=3200881;js=na\" width=\"1\" style=\"display: none;\"><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/on\/al\/o5\/onalo5-jboe-x27js56x_bbabps.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/on\/al\/o5\/onalo5-jboe-x27js56x_bbabps.jpeg\" data-blurred=\"true\"\/><\/div>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0418\u0432\u0430\u043d \u0411\u0430\u043d\u043d\u0438\u043a\u043e\u0432, \u044f \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a VK Tech. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u043b IoT-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0438 \u0445\u043e\u0447\u0443 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 IoT-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u0435\u0440\u0435 \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0432\u0435\u0449\u0435\u0439 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c, \u043d\u043e \u0438 \u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043c\u0438\u0440\u0435. \u042d\u0442\u043e \u0432\u043b\u0435\u0447\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0440\u044f\u0434 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u043d\u044e\u0430\u043d\u0441\u043e\u0432.\u00a0<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 IoT-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0435 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0438 \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 IoT-\u0440\u0435\u0448\u0435\u043d\u0438\u0439.\u00a0  <\/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-346425","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/346425","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=346425"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/346425\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=346425"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=346425"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=346425"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}